about summary refs log tree commit diff
path: root/nixpkgs/pkgs/tools/misc
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/tools/misc')
-rw-r--r--nixpkgs/pkgs/tools/misc/0x/Cargo.lock232
-rw-r--r--nixpkgs/pkgs/tools/misc/0x/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock27
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/misc/3llo/gemset.nix86
-rw-r--r--nixpkgs/pkgs/tools/misc/3mux/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/SP800-90B_EntropyAssessment/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/aaa/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/abduco/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/addic7ed-cli/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/addlicense/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/adrgen/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/aescrypt/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/afetch/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/agedu/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/aichat/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/misc/altserver-linux/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/android-tools/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/antimicrox/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile37
-rw-r--r--nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile.lock99
-rw-r--r--nixpkgs/pkgs/tools/misc/anystyle-cli/anystyle.gemspec52
-rw-r--r--nixpkgs/pkgs/tools/misc/anystyle-cli/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/anystyle-cli/gemset.nix1570
-rw-r--r--nixpkgs/pkgs/tools/misc/aoc-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/apkeep/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/apparix/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/aptly/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/aquosctl/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/arch-install-scripts/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/misc/archi/default.nix83
-rwxr-xr-xnixpkgs/pkgs/tools/misc/archi/update.sh26
-rw-r--r--nixpkgs/pkgs/tools/misc/arp-scan/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/arp-scan/remove-install-exec-hook.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/as-tree/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/asciinema-agg/Cargo.lock2062
-rw-r--r--nixpkgs/pkgs/tools/misc/asciinema-agg/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/asciinema-scenario/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/asciinema/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/asdf-vm/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/misc/askalono/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/aspcud/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/astronomer/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/autojump/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/automirror/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/autorandr/0001-don-t-use-sys.executable.patch33
-rw-r--r--nixpkgs/pkgs/tools/misc/autorandr/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/misc/autorevision/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/backdown/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/balanceofsatoshis/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/bandwidth/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/barman/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/barman/unwrap-subprocess.patch30
-rw-r--r--nixpkgs/pkgs/tools/misc/bartib/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/basez/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/bash_unit/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/bashcards/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/bashplotlib/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/bat-extras/default.nix155
-rw-r--r--nixpkgs/pkgs/tools/misc/bbe/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/bc/cross-bc.patch169
-rw-r--r--nixpkgs/pkgs/tools/misc/bc/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/bcunit/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/bdf2psf/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/bdf2sfd/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/bdfresize/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/bdfresize/remove-malloc-declaration.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/beats/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/bepasty/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/misc/betterdiscord-installer/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/betterdiscordctl/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/bfetch/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/bfr/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/bfscripts/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/bibtex2html/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/bibtool/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/bibutils/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/birdfont/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/bitwise/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/bkt/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/bkyml/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/blacken-docs/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/blahaj/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/blflash/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/blink1-tool/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/bmap-tools/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/bmon/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/bogofilter/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/boltbrowser/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/bonk/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/bootspec/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/bottom-rs/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/boxxy/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/brltty/default.nix99
-rw-r--r--nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/broot/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/misc/brotab/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/bsp-layout/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/btc-rpc-explorer/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/btdu/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/btdu/dub-lock.json20
-rw-r--r--nixpkgs/pkgs/tools/misc/buildtorrent/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/bunnyfetch/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/caffeine/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares-nixos-extensions/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/nixos-extensions-paths.patch45
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/nonroot.patch106
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/partitions.patch28
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/supportedlocale.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/uimod.patch86
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/unfreeq.patch109
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/userjob.patch31
-rw-r--r--nixpkgs/pkgs/tools/misc/calamares/waylandkbd.patch25
-rw-r--r--nixpkgs/pkgs/tools/misc/capture/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/castty/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/catimg/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/cc2538-bsl/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/ccal/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/ccze/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/cf-terraforming/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/cfonts/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/chafa/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch23
-rw-r--r--nixpkgs/pkgs/tools/misc/changelogger/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/charasay/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/chatgpt-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/checkpwn/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/chef-cli/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/chef-cli/Gemfile.lock303
-rw-r--r--nixpkgs/pkgs/tools/misc/chef-cli/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/chef-cli/gemset.nix1130
-rw-r--r--nixpkgs/pkgs/tools/misc/chelf/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/chrome-export/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/cht.sh/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/cicero-tui/Cargo.lock958
-rw-r--r--nixpkgs/pkgs/tools/misc/cicero-tui/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/citron/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/ckb-next/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/clac/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/claws/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/clematis/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/clickclack/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/clini/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/clipboard-jh/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/clipbuzz/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/clipnotify/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/clipster/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/cloc/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/clolcat/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/cloud-utils/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff72
-rw-r--r--nixpkgs/pkgs/tools/misc/clpeak/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/clubhouse-cli/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/cmdpack/default.nix136
-rw-r--r--nixpkgs/pkgs/tools/misc/cod/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/code-minimap/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/codebraid/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/codemov/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/codevis/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/coinlive/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/colord-gtk/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/misc/colord/default.nix121
-rw-r--r--nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch72
-rw-r--r--nixpkgs/pkgs/tools/misc/colorless/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/colorpanes/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/colorpicker/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/colorz/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/compdb/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/complete-alias/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/completely/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/completely/Gemfile.lock20
-rw-r--r--nixpkgs/pkgs/tools/misc/completely/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/completely/gemset.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/conserver/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/contacts/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/convbin/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/convfont/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/convimg/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/convmv/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/copier/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/coreboot-configurator/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix131
-rw-r--r--nixpkgs/pkgs/tools/misc/coreutils/default.nix189
-rw-r--r--nixpkgs/pkgs/tools/misc/coreutils/fix-test-failure-musl.patch23
-rw-r--r--nixpkgs/pkgs/tools/misc/cowsay/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/cp210x-program/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/cp437/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/cpufetch/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/cpulimit/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/cpulimit/get-missing-basename.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/cpulimit/remove-sys-sysctl.h.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/cpuminer/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/crex/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/crudini/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/misc/crypto-tracker/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/csv2latex/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/csv2parquet/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/csvs-to-sqlite/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/cunit/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/cutecom/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/cyberchef/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/cyclonedx-python/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/dabet/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/daktilo/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/dashing/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/dasht/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/datamash/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/datefmt/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/dateutils/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/dbacl/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/dbus-map/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/ddate/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ddccontrol/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/misc/ddcutil/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix89
-rw-r--r--nixpkgs/pkgs/tools/misc/debootstrap/default.nix102
-rw-r--r--nixpkgs/pkgs/tools/misc/depotdownloader/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/depotdownloader/deps.nix15
-rwxr-xr-xnixpkgs/pkgs/tools/misc/depotdownloader/update.sh16
-rw-r--r--nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh6
-rw-r--r--nixpkgs/pkgs/tools/misc/detox/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/dialogbox/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/didu/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/didyoumean/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/diffoci/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/diffoscope/default.nix325
-rw-r--r--nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch20
-rwxr-xr-xnixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh23
-rw-r--r--nixpkgs/pkgs/tools/misc/diffoscope/openssh-no-dsa.patch29
-rw-r--r--nixpkgs/pkgs/tools/misc/digitemp/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/dijo/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/ding-libs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/direnv/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/discocss/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/disfetch/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/diskonaut/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/diskscan/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/diskus/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/djenrandom/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/dmg2img/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-ls/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock29
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix76
-rw-r--r--nixpkgs/pkgs/tools/misc/docui/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/doitlive/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/domine/default.nix16
-rw-r--r--nixpkgs/pkgs/tools/misc/domine/pubspec.lock.json197
-rw-r--r--nixpkgs/pkgs/tools/misc/dotacat/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/dotter/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/dsq/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/dtach/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/dtool/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/dua/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/duc/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/duf/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/dumptorrent/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/dupd/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/dutree/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/dvtm/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/dvtm/unstable.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/dwarf2json/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/dwt1-shell-color-scripts/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/ea/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/easeprobe/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/edid-decode/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/edid-generator/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/edir/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/edk2-uefi-shell/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/eget/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/ego/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/elfcat/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/eludris/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/empty/0.6-Makefile.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/empty/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/emv/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/encpipe/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/enjarify/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/ent/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/entr/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/enumer/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/envchain/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/envsubst/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/eot-utilities/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/esphome/dashboard.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/esphome/default.nix134
-rw-r--r--nixpkgs/pkgs/tools/misc/esphome/update.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/esptool-ck/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/esptool/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/misc/ethtool/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/ets/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/eva/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/evhz/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/expect/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/expect/fix-cross-compilation.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/expect/fix-darwin-clang16.patch31
-rw-r--r--nixpkgs/pkgs/tools/misc/f2/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/faketty/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/fasd/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/fbcat/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/fbmark/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/fclones/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/fclones/gui.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/fcp/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/fd/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/fdtools/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/misc/fdtools/new-skalibs.patch223
-rw-r--r--nixpkgs/pkgs/tools/misc/fdupes/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/fedifetcher/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/fend/default.nix91
-rw-r--r--nixpkgs/pkgs/tools/misc/fet-sh/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/fetch-scm/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/fetchutils/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/fffuu/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/ffsend/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/misc/fiano/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/figlet/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/file/32-bit-time_t.patch38
-rw-r--r--nixpkgs/pkgs/tools/misc/file/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/filebench/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/fileschanged/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch48
-rw-r--r--nixpkgs/pkgs/tools/misc/findup/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/findutils/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/flameshot/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/flashrom/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/flexoptix-app/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/flexoptix-app/disable-autoupdate.patch16
-rw-r--r--nixpkgs/pkgs/tools/misc/flitter/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/flitter/flitter.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/flowgger/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/fltrdr/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/fluent-bit/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/Gemfile13
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock169
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/fluentd/gemset.nix686
-rw-r--r--nixpkgs/pkgs/tools/misc/fntsample/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/misc/foma/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/fondu/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/font-config-info/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/fontfor/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/fontforge/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix1
-rw-r--r--nixpkgs/pkgs/tools/misc/fortune/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/fpart/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/fpp/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/fre/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/frei/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/freshfetch/Cargo.lock587
-rw-r--r--nixpkgs/pkgs/tools/misc/freshfetch/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/fsearch/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/fselect/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/fsmark/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/fsmon/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/fsql/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/fsrx/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/fuc/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/fw/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/fwup/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/misc/fx-cast-bridge/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch18
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch28
-rw-r--r--nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/fzy/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/g203-led/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/g933-utils/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/gams/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/gaphor/default.nix84
-rw-r--r--nixpkgs/pkgs/tools/misc/gavin-bc/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/gay/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/gazelle-origin/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch15
-rw-r--r--nixpkgs/pkgs/tools/misc/gbdfed/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/geekbench/4.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/geekbench/5.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/geekbench/6.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/geteltorito/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/getopt/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/getoptions/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-actions-cache/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-cal/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-dash/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-eco/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-markdown-preview/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/gh-ost/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/ghostie/Cargo.lock2665
-rw-r--r--nixpkgs/pkgs/tools/misc/ghostie/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/gibo/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/gigalixir/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/github-backup/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/github-copilot-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/github-copilot-cli/package-lock.json3329
-rw-r--r--nixpkgs/pkgs/tools/misc/gitrs/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/glasgow/default.nix82
-rw-r--r--nixpkgs/pkgs/tools/misc/go-ios/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/go.rice/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/goaccess/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/godu/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/gomi/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/google-cloud-bigtable-tool/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/google-cloud-sql-proxy/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/goose/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/goreleaser/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/gosu/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/gotify-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/gotify-desktop/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/gparted/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/gparted/polkit.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/gpick/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/gpick/dot-version.patch10
-rw-r--r--nixpkgs/pkgs/tools/misc/gradescope-submit/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/grafterm/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/grass-sass/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/graylog/5.1.nix9
-rw-r--r--nixpkgs/pkgs/tools/misc/graylog/5.2.nix9
-rw-r--r--nixpkgs/pkgs/tools/misc/graylog/graylog.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/graylog/plugins.nix304
-rw-r--r--nixpkgs/pkgs/tools/misc/grc/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/grex/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/grit/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/grizzly/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/add-hidden-menu-entries.patch204
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/default.nix214
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg1
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg10
-rw-r--r--nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/grub4dos/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch33
-rw-r--r--nixpkgs/pkgs/tools/misc/gti/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/gtkterm/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/gummy/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/gwe/default.nix90
-rw-r--r--nixpkgs/pkgs/tools/misc/h/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/h5utils/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/hackertyper/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/hacksaw/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/hakuneko/default.nix98
-rw-r--r--nixpkgs/pkgs/tools/misc/halp/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/misc/halp/fix-target-dir.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/handlr/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/hashit/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/hashpump/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/haste-client/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/haste-client/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/misc/haste-client/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/haste-client/gemset.nix491
-rw-r--r--nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch28
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch20
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf4/darwin-aarch64.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf4/default.nix148
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf5/1.10.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/hdf5/default.nix127
-rw-r--r--nixpkgs/pkgs/tools/misc/hdfview/0001-Hardcode-isUbuntu-false-to-avoid-hostname-dependency.patch38
-rw-r--r--nixpkgs/pkgs/tools/misc/hdfview/default.nix84
-rw-r--r--nixpkgs/pkgs/tools/misc/hdfview/disable-mac-signing.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/hdfview/remove-properties-timestamp.patch14
-rw-r--r--nixpkgs/pkgs/tools/misc/hdl-dump/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/heatseeker/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/hebcal/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/heimdall/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/hex/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/hexd/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/hexdiff/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/hexyl/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/hhpc/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/hid-listen/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/hid-tools/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/hidrd/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/hiksink/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/hoard/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/homesick/gemset.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/hostmux/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/hostsblock/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/hpcg/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/hpl/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/hsd/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock60
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix250
-rw-r--r--nixpkgs/pkgs/tools/misc/hueadm/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/hunt/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/hwatch/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/hyfetch/default.nix46
-rw-r--r--nixpkgs/pkgs/tools/misc/hyperfine/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/hyperpotamus/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/i3minator/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/i3nator/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/iam-policy-json-to-terraform/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/iay/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/ibus-theme-tools/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/ical2orgpy/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/ictree/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/idevicerestore/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/idutils/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/ikill/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ili2c/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/ili2c/dont-use-build-timestamp.patch29
-rw-r--r--nixpkgs/pkgs/tools/misc/immich-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/inav-blackbox-tools/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/infracost/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/ink/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/inklingreader/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/inspec/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/inspec/Gemfile.lock643
-rw-r--r--nixpkgs/pkgs/tools/misc/inspec/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/inspec/gemset.nix2230
-rw-r--r--nixpkgs/pkgs/tools/misc/instaloader/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/interactsh/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/intermodal/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/invoice/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/iotools/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/ipad_charge/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/ipbt/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/ipxe/default.nix112
-rw-r--r--nixpkgs/pkgs/tools/misc/ised/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/isoimagewriter/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/ix/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/jdiskreport/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/jdupes/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/jfrog-cli/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/misc/journaldriver/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/jsonwatch/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/jstest-gtk/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/jugglinglab/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/jugglinglab/fix-default-maven-plugin-versions.patch70
-rw-r--r--nixpkgs/pkgs/tools/misc/kakoune-cr/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/kakoune-cr/shard.lock10
-rw-r--r--nixpkgs/pkgs/tools/misc/kakoune-cr/shards.nix14
-rw-r--r--nixpkgs/pkgs/tools/misc/kalker/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/kargo/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/kb/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/kcollectd/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/kepubify/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/kermit/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/keychain/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/keymapviz/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/kicli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/killport/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/kisslicer/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/kitty-img/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/kodi-cli/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/krapslog/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/kronometer/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/krunner-translator/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/ksnip/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/misc/kt/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/latex2html/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/lavat/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/lazycli/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/lazydocker/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/lbdb/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/lcdf-typetools/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ldapvi/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/ldmtool/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/leanify/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/ledit/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/lektor/default.nix105
-rw-r--r--nixpkgs/pkgs/tools/misc/lemmeknow/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/lemmy-help/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/lerpn/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/lesspipe/default.nix128
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/libgen-cli/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/libpff/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/librespeed-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/lice/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/license-cli/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/license-generator/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/licensor/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/lifecycled/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/lighthouse-steamvr/Cargo.lock1212
-rw-r--r--nixpkgs/pkgs/tools/misc/lighthouse-steamvr/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/lilo/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/limitcpu/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/lineselect/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/linux-logo/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/linuxquota/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/lipl/Cargo.lock308
-rw-r--r--nixpkgs/pkgs/tools/misc/lipl/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/livedl/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/lnav/0001-Forcefully-disable-docs-build.patch38
-rw-r--r--nixpkgs/pkgs/tools/misc/lnav/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/misc/lnch/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/loadlibrary/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/locate-dominating-file/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/logstash/7.x.nix88
-rw-r--r--nixpkgs/pkgs/tools/misc/logstash/contrib.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/logtop/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/lokalise2-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/default.nix17
-rw-r--r--nixpkgs/pkgs/tools/misc/lolcat/gemset.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/loop/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/lorri/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template37
-rw-r--r--nixpkgs/pkgs/tools/misc/lorri/runtime.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/lottieconverter/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/lrzsz/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/lsd/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/ltunify/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/lwc/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/macchina/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/mailman-rss/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/makebootfat/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/maker-panel/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/man-db/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch39
-rw-r--r--nixpkgs/pkgs/tools/misc/mandoc/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/misc/mandown/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/manga-cli/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/map/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/mapcidr/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/markdown-anki-decks/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/marlin-calc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/massren/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/mastotool/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/mathpix-snipping-tool/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/mbuffer/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/mcfly/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/format-string_CVE-2012-4426.patch31
-rwxr-xr-xnixpkgs/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/overflow_CVE-2012-4409.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/segv.patch39
-rw-r--r--nixpkgs/pkgs/tools/misc/mcrypt/sprintf_CVE-2012-4527.patch108
-rw-r--r--nixpkgs/pkgs/tools/misc/mdbtools/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/mdr/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/mdslides/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/me_cleaner/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/megacli/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/melody/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/memtest86+/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/misc/mermaid-filter/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/microplane/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/mimeo/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/minicom/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch79
-rw-r--r--nixpkgs/pkgs/tools/misc/minipro/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/miniserve/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/misc/ministat/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/mise/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/misc/mktorrent/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/mloader/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/mlocate/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/mlxbf-bootctl/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/mmake/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/mmctl/default.nix12
-rw-r--r--nixpkgs/pkgs/tools/misc/mmv-go/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/mmv/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/mnc/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/moar/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/mods/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix139
-rw-r--r--nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/mons/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/misc/moon-phases/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/moreutils/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/moserial/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/most/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/mpdscribble/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/mpremote/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/mprime/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/mprocs/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/mpy-utils/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/mrtg/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/ms-sys/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/mslink/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/mstflint/default.nix128
-rw-r--r--nixpkgs/pkgs/tools/misc/mtm/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/multitail/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/multitime/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/mutagen-compose/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/mutagen/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/mutt-wizard/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/mvebu64boot/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/mynewt-newtmgr/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/mysqltuner/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/nagstamon/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/nanoemoji/default.nix72
-rw-r--r--nixpkgs/pkgs/tools/misc/nanoemoji/fix-test.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/nanoemoji/test-pythonpath.patch14
-rw-r--r--nixpkgs/pkgs/tools/misc/natls/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/hardcode-gsettings.patch31
-rw-r--r--nixpkgs/pkgs/tools/misc/nb/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/nbench/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/nbqa/default.nix100
-rw-r--r--nixpkgs/pkgs/tools/misc/ncdu/1.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/ncdu/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/near-cli/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/near-cli/package.json83
-rw-r--r--nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/neofetch/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/netbootxyz-efi/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/nms/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/node-glob/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/nomino/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/noteshrink/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/noti/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/notify-desktop/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/notify/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/ntfy-sh/default.nix68
-rwxr-xr-xnixpkgs/pkgs/tools/misc/ntfy-sh/update.sh22
-rw-r--r--nixpkgs/pkgs/tools/misc/ntfy/default.nix93
-rw-r--r--nixpkgs/pkgs/tools/misc/ntfy/webpush.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/nurl/Cargo.lock1559
-rw-r--r--nixpkgs/pkgs/tools/misc/nurl/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/nux/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/nvfancontrol/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/nvimpager/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/nyancat/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/ocs-url/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/octofetch/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/octosql/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/odyssey/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/oggvideotools/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/ollama/default.nix215
-rw-r--r--nixpkgs/pkgs/tools/misc/ollama/disable-git.patch20
-rw-r--r--nixpkgs/pkgs/tools/misc/ondir/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/onefetch/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/onefetch/zstd-pkg-config.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/online-judge-template-generator/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/open-pdf-sign/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/opencbm/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/opencorsairlink/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/opentelemetry-collector/contrib.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/opentelemetry-collector/default.nix65
-rw-r--r--nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/opentsdb/default.nix352
-rw-r--r--nixpkgs/pkgs/tools/misc/oppai-ng/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/org-stats/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/org-stats/version.patch11
-rw-r--r--nixpkgs/pkgs/tools/misc/os-prober/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/oscclip/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree-rs-ext/Cargo.lock2303
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree-rs-ext/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/misc/ostree/default.nix154
-rw-r--r--nixpkgs/pkgs/tools/misc/otel-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/otel-cli/patches/bin-echo-patch.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/otfcc/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/otfcc/fix-aarch64.patch22
-rw-r--r--nixpkgs/pkgs/tools/misc/otfcc/move-makefiles.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/ovh-ttyrec/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/owofetch/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/page/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/pal/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-acro/default.nix64
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-drawio-filter/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-eqnos/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-fignos/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-include/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-katex/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-lua-filters/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-plantuml-filter/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-secnos/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-secnos/patch/fix-manifest.patch39
-rw-r--r--nixpkgs/pkgs/tools/misc/pandoc-tablenos/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/panicparse/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/panoply/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/paperlike-go/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/paps/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/parallel/default.nix58
-rw-r--r--nixpkgs/pkgs/tools/misc/parallel/wrapper.nix10
-rw-r--r--nixpkgs/pkgs/tools/misc/parcellite/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/parquet-tools/default.nix83
-rw-r--r--nixpkgs/pkgs/tools/misc/parquet-tools/moto5.patch28
-rw-r--r--nixpkgs/pkgs/tools/misc/parted/default.nix71
-rw-r--r--nixpkgs/pkgs/tools/misc/past-time/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/pastebinit/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/pastebinit/use-drv-etc.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/pazi/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/pb/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/pb_cli/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/pc/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/pcb2gcode/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/pcp/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/pdd/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/pdf-parser/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/peep/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/perccli/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/peruse/default.nix62
-rw-r--r--nixpkgs/pkgs/tools/misc/pferd/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/pfetch-rs/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/pfetch/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/pfsshell/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/pg_flame/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/pg_top/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/pgbadger/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/pgcenter/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/pgmetrics/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/phoronix-test-suite/tests.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/phrase-cli/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/pick/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/picocom/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/pinsel/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/pipe-rename/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pipectl/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/pipelight/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch122
-rw-r--r--nixpkgs/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch42
-rw-r--r--nixpkgs/pkgs/tools/misc/pipelight/wine-7.10-ControlMask.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/pipreqs/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/pistol/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/piston-cli/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/pixd/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/pk2cmd/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/pkgdiff/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pkgtop/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/plantuml-server/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/plantuml/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/plantuml/plantuml-c4.nix74
-rw-r--r--nixpkgs/pkgs/tools/misc/plfit/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/plocate/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/plotinus/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/plowshare/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/pmbootstrap/default.nix104
-rw-r--r--nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/pokeget-rs/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/pokemonsay/default.nix77
-rw-r--r--nixpkgs/pkgs/tools/misc/polar/Gemfile7
-rw-r--r--nixpkgs/pkgs/tools/misc/polar/Gemfile.lock27
-rw-r--r--nixpkgs/pkgs/tools/misc/polar/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/polar/gemset.nix75
-rw-r--r--nixpkgs/pkgs/tools/misc/ponysay/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/poop/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/popsicle/Cargo.lock2782
-rw-r--r--nixpkgs/pkgs/tools/misc/popsicle/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/portal/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/pouf/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/poweralertd/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/powerline-go/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/powerline-rs/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pre-commit-hook-ensure-sops/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/pre-commit/default.nix192
-rw-r--r--nixpkgs/pkgs/tools/misc/pre-commit/hook-tmpl.patch17
-rw-r--r--nixpkgs/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch26
-rw-r--r--nixpkgs/pkgs/tools/misc/pre-commit/pygrep-pythonpath.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/precice-config-visualizer/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/present-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/pricehist/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/pridecat/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/pridecat/fix_install.patch20
-rw-r--r--nixpkgs/pkgs/tools/misc/pridefetch/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/procyon/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/profetch/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/progress/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/promql-cli/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/proximity-sort/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/pspg/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/psql2csv/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/psrecord/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/psw/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/pubs/default.nix81
-rw-r--r--nixpkgs/pkgs/tools/misc/pv/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/Gemfile.lock19
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/pws/gemset.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/qdl/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/qflipper/default.nix105
-rw-r--r--nixpkgs/pkgs/tools/misc/qjoypad/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/qmake2cmake/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/qmake2cmake/fix-locations.patch22
-rw-r--r--nixpkgs/pkgs/tools/misc/qmk/default.nix76
-rw-r--r--nixpkgs/pkgs/tools/misc/qmk_hid/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/qrscan/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/qt5ct/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/qt6ct/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/qt6gtk2/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/quich/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/r3ctl/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/radeon-profile/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/ramfetch/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/rargs/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/rates/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/rauc/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/rcm/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch48
-rw-r--r--nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/recutils/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/remind/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/remote-exec/default.nix75
-rw-r--r--nixpkgs/pkgs/tools/misc/rename/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/renameutils/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch24
-rw-r--r--nixpkgs/pkgs/tools/misc/reredirect/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/rfc/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock25
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix74
-rw-r--r--nixpkgs/pkgs/tools/misc/rig/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff39
-rw-r--r--nixpkgs/pkgs/tools/misc/ripdrag/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/ristate/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/rkflashtool/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/rkvm/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/rlwrap/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/rmate-sh/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/rmlint/default.nix91
-rw-r--r--nixpkgs/pkgs/tools/misc/rmlint/scons-nix-env.patch19
-rw-r--r--nixpkgs/pkgs/tools/misc/rmtrash/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/rmw/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/rot8/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/roundup/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/routino/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/rpcsvc-proto/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/rpi-imager/default.nix84
-rw-r--r--nixpkgs/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch16
-rw-r--r--nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix125
-rw-r--r--nixpkgs/pkgs/tools/misc/rrdtool/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/rshim-user-space/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/rtz/Cargo.lock3490
-rw-r--r--nixpkgs/pkgs/tools/misc/rtz/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/rust-motd/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/rustypaste-cli/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/rw/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/sacad/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/sagoin/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/sam-ba/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/sanctity/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/savepagenow/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/scanmem/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/scdl/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/scfbuild/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/screen/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/misc/screenfetch/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/script-directory/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/scrub/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/sd-mux-ctrl/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/sdate/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/seaborn-data/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/see/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/semiphemeral/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/sensible-utils/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/serverspec/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/serverspec/Gemfile.lock45
-rw-r--r--nixpkgs/pkgs/tools/misc/serverspec/default.nix20
-rw-r--r--nixpkgs/pkgs/tools/misc/serverspec/gemset.nix150
-rw-r--r--nixpkgs/pkgs/tools/misc/setconf/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/sfeed/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/sfz/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/shadowenv/Cargo.lock.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/shadowenv/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/shallot/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/sharedown/default.nix127
-rwxr-xr-xnixpkgs/pkgs/tools/misc/sharedown/update.sh26
-rw-r--r--nixpkgs/pkgs/tools/misc/sharedown/yarn.lock2914
-rw-r--r--nixpkgs/pkgs/tools/misc/sheldon/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/misc/shell-hist/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/shelldap/default.nix61
-rw-r--r--nixpkgs/pkgs/tools/misc/shellspec/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/shim/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/shunit2/default.nix91
-rw-r--r--nixpkgs/pkgs/tools/misc/sixpair/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch19
-rw-r--r--nixpkgs/pkgs/tools/misc/skim/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/sl/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/slingshot/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/slop/default.nix63
-rw-r--r--nixpkgs/pkgs/tools/misc/sloth/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/slsnif/default.nix19
-rw-r--r--nixpkgs/pkgs/tools/misc/smc/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/smenu/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/smug/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/snapper/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/snore/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/somafm-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/sonota/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch20
-rw-r--r--nixpkgs/pkgs/tools/misc/spacer/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/sqlite3-to-mysql/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/srisum/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/sshx/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/sta/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/star-history/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/starfetch/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/starry/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/starship/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/staruml/default.nix80
-rw-r--r--nixpkgs/pkgs/tools/misc/statserial/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/stderred/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/stow/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/subberthehut/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/sutils/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/svu/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/swaglyrics/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/misc/synth/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/system-config-printer/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch17
-rw-r--r--nixpkgs/pkgs/tools/misc/systrayhelper/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/sysz/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/szyszka/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/t/Gemfile6
-rw-r--r--nixpkgs/pkgs/tools/misc/t/Gemfile.lock65
-rw-r--r--nixpkgs/pkgs/tools/misc/t/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/t/gemset.nix262
-rw-r--r--nixpkgs/pkgs/tools/misc/t1utils/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/tab-rs/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/tagref/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/tailer/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/tailspin/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/taoup/cachefile.patch35
-rw-r--r--nixpkgs/pkgs/tools/misc/taoup/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/taoup/help.patch21
-rw-r--r--nixpkgs/pkgs/tools/misc/taoup/tput.patch17
-rw-r--r--nixpkgs/pkgs/tools/misc/tbls/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/tcat/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/td/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/td/Gemfile.lock40
-rw-r--r--nixpkgs/pkgs/tools/misc/td/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/td/gemset.nix103
-rw-r--r--nixpkgs/pkgs/tools/misc/tdfgo/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/tea/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/tealdeer/default.nix52
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/Gemfile2
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock13
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/teamocil/gemset.nix10
-rw-r--r--nixpkgs/pkgs/tools/misc/tensorman/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/tere/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/termplay/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/termtosvg/default.nix21
-rw-r--r--nixpkgs/pkgs/tools/misc/tewisay/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/tfk8s/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/default.nix11
-rw-r--r--nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml7
-rw-r--r--nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/output.tf12
-rw-r--r--nixpkgs/pkgs/tools/misc/thefuck/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/theme-sh/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/thinkpad-scripts/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/thumbs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/thumbs/fix.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/time-decode/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/time/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/timelimit/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/timer/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/timetagger_cli/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/timidity/configure-compat.patch33
-rw-r--r--nixpkgs/pkgs/tools/misc/timidity/default.nix97
-rw-r--r--nixpkgs/pkgs/tools/misc/timidity/timidity-iA-Oj.patch14
-rw-r--r--nixpkgs/pkgs/tools/misc/timidity/timidity.cfg368
-rw-r--r--nixpkgs/pkgs/tools/misc/tio/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/tkman/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/misc/tldr/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/tlp/default.nix136
-rw-r--r--nixpkgs/pkgs/tools/misc/tlp/patches/0001-makefile-correctly-sed-paths.patch58
-rw-r--r--nixpkgs/pkgs/tools/misc/tlp/patches/0002-reintroduce-tlp-sleep-service.patch85
-rw-r--r--nixpkgs/pkgs/tools/misc/tmate/default.nix60
-rw-r--r--nixpkgs/pkgs/tools/misc/tmpwatch/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux-mem-cpu-load/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux-sessionizer/default.nix48
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/tmux/default.nix112
-rw-r--r--nixpkgs/pkgs/tools/misc/tmuxinator/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/tmuxp/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/toastify/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/todo/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/toilet/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/topgrade/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/topicctl/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/torrenttools/default.nix100
-rw-r--r--nixpkgs/pkgs/tools/misc/toybox/default.nix79
-rw-r--r--nixpkgs/pkgs/tools/misc/trackma/default.nix82
-rwxr-xr-xnixpkgs/pkgs/tools/misc/trackma/update.sh8
-rw-r--r--nixpkgs/pkgs/tools/misc/traefik-certs-dumper/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/trash-cli/default.nix67
-rw-r--r--nixpkgs/pkgs/tools/misc/trashy/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/trdl-client/default.nix70
-rw-r--r--nixpkgs/pkgs/tools/misc/tremor-rs/Cargo.lock6529
-rw-r--r--nixpkgs/pkgs/tools/misc/tremor-rs/default.nix95
-rw-r--r--nixpkgs/pkgs/tools/misc/tremor-rs/ls.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/triehash/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/trillian/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/ttchat/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch98
-rw-r--r--nixpkgs/pkgs/tools/misc/ttfautohint/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch78
-rw-r--r--nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/ttwatch/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/tty-clock/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/ttygif/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/ttylog/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/ttyplot/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/turbo/Cargo.lock13638
-rw-r--r--nixpkgs/pkgs/tools/misc/turbo/default.nix73
-rw-r--r--nixpkgs/pkgs/tools/misc/turbo/wrapper.nix16
-rw-r--r--nixpkgs/pkgs/tools/misc/tvnamer/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/twm/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/twspace-crawler/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/twspace-dl/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/twurl/Gemfile3
-rw-r--r--nixpkgs/pkgs/tools/misc/twurl/Gemfile.lock15
-rw-r--r--nixpkgs/pkgs/tools/misc/twurl/default.nix18
-rw-r--r--nixpkgs/pkgs/tools/misc/twurl/gemset.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/txt2man/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/txtw/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/tydra/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/tz/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/uair/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/ugs/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/ugtrain/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/uhubctl/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/ulid/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix122
-rw-r--r--nixpkgs/pkgs/tools/misc/umlet/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/unclutter/default.nix43
-rw-r--r--nixpkgs/pkgs/tools/misc/undocker/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/unicode/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/unparam/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/up/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/upower-notify/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/upower-notify/deps.nix11
-rw-r--r--nixpkgs/pkgs/tools/misc/upterm/default.nix45
-rw-r--r--nixpkgs/pkgs/tools/misc/urjtag/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/url-parser/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/urlencode/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/urn-timer/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/usbimager/default.nix55
-rw-r--r--nixpkgs/pkgs/tools/misc/usbmuxd/default.nix57
-rw-r--r--nixpkgs/pkgs/tools/misc/usbmuxd2/default.nix87
-rw-r--r--nixpkgs/pkgs/tools/misc/usbview/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/uucp/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/uudeview/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/uudeview/matherr.patch19
-rw-r--r--nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/uwufetch/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/uwuify/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/valeronoi/default.nix51
-rw-r--r--nixpkgs/pkgs/tools/misc/vcs_query/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/vector/Cargo.lock11318
-rw-r--r--nixpkgs/pkgs/tools/misc/vector/default.nix139
-rw-r--r--nixpkgs/pkgs/tools/misc/vector/vector-lto.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/veikk-linux-driver-gui/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/via/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/vial/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/viddy/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/vimer/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/vimpager/build.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/vimpager/default.nix6
-rw-r--r--nixpkgs/pkgs/tools/misc/vimpager/latest.nix10
-rw-r--r--nixpkgs/pkgs/tools/misc/vimv-rs/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/vimv/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/vivid/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/vix/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/vmtouch/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/void/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/vorbisgain/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/vrc-get/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/vsc-leetcode-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/vsh/default.nix27
-rw-r--r--nixpkgs/pkgs/tools/misc/vtm/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/vttest/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/wacomtablet/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/wagyu/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/wakapi/default.nix35
-rw-r--r--nixpkgs/pkgs/tools/misc/wakatime/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/wasm-tools/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/watchexec/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/watchlog/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/wayback-machine-archiver/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/wayback/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/waylevel/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/wayshot/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/webcat/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/websocat/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/wemux/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/whatsapp-chat-exporter/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/wimboot/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/wlc/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/woeusb-ng/default.nix56
-rw-r--r--nixpkgs/pkgs/tools/misc/woeusb/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/woof/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/wootility/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/writedisk/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/wsl-open/default.nix29
-rw-r--r--nixpkgs/pkgs/tools/misc/wv/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/wv2/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/wv2/fix-include.patch12
-rw-r--r--nixpkgs/pkgs/tools/misc/wwcd/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/wyrd/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/x11idle/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/xburst-tools/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/xcd/default.nix30
-rw-r--r--nixpkgs/pkgs/tools/misc/xclip/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/xcp/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/xdaliclock/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/xdg-ninja/default.nix37
-rw-r--r--nixpkgs/pkgs/tools/misc/xdiskusage/default.nix22
-rw-r--r--nixpkgs/pkgs/tools/misc/xdo/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/xdummy/default.nix85
-rw-r--r--nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix23
-rw-r--r--nixpkgs/pkgs/tools/misc/xflux/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/xflux/gui.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/xfstests/default.nix111
-rw-r--r--nixpkgs/pkgs/tools/misc/xiccd/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/xjobs/default.nix66
-rw-r--r--nixpkgs/pkgs/tools/misc/xmlbeans/default.nix40
-rw-r--r--nixpkgs/pkgs/tools/misc/xmonad-log/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix12
-rw-r--r--nixpkgs/pkgs/tools/misc/xprite-editor/default.nix47
-rw-r--r--nixpkgs/pkgs/tools/misc/xq/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/xsel/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/xstow/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/xtitle/default.nix28
-rw-r--r--nixpkgs/pkgs/tools/misc/xvfb-run/default.nix65
-rwxr-xr-xnixpkgs/pkgs/tools/misc/xvfb-run/update.sh21
-rw-r--r--nixpkgs/pkgs/tools/misc/xxv/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/yad/default.nix50
-rw-r--r--nixpkgs/pkgs/tools/misc/yafetch/default.nix33
-rw-r--r--nixpkgs/pkgs/tools/misc/yai/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/yajsv/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/yank/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/yle-dl/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/you-get/default.nix53
-rw-r--r--nixpkgs/pkgs/tools/misc/you-get/ffmpeg-path.patch13
-rw-r--r--nixpkgs/pkgs/tools/misc/youtube-dl/default.nix96
-rw-r--r--nixpkgs/pkgs/tools/misc/yt-dlp/default.nix94
-rw-r--r--nixpkgs/pkgs/tools/misc/ytarchive/default.nix31
-rw-r--r--nixpkgs/pkgs/tools/misc/ytcast/default.nix24
-rw-r--r--nixpkgs/pkgs/tools/misc/ytfzf/default.nix54
-rw-r--r--nixpkgs/pkgs/tools/misc/ytmdl/default.nix59
-rw-r--r--nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix88
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix86
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix68
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix44
-rw-r--r--nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/z-lua/default.nix38
-rw-r--r--nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix39
-rw-r--r--nixpkgs/pkgs/tools/misc/zabbixctl/default.nix25
-rw-r--r--nixpkgs/pkgs/tools/misc/zalgo/default.nix26
-rw-r--r--nixpkgs/pkgs/tools/misc/zellij/default.nix69
-rw-r--r--nixpkgs/pkgs/tools/misc/zf/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/zf/deps.nix13
-rw-r--r--nixpkgs/pkgs/tools/misc/zitadel-tools/default.nix42
-rw-r--r--nixpkgs/pkgs/tools/misc/zotero-translation-server/default.nix36
-rw-r--r--nixpkgs/pkgs/tools/misc/zoxide/default.nix49
-rw-r--r--nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix41
-rw-r--r--nixpkgs/pkgs/tools/misc/zsh-history-to-fish/default.nix34
-rw-r--r--nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix32
-rw-r--r--nixpkgs/pkgs/tools/misc/zthrottle/default.nix28
1302 files changed, 117569 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/misc/0x/Cargo.lock b/nixpkgs/pkgs/tools/misc/0x/Cargo.lock
new file mode 100644
index 000000000000..4c0c44ae6ea1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/0x/Cargo.lock
@@ -0,0 +1,232 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "argh"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7e7e4aa7e40747e023c0761dafcb42333a9517575bbf1241747f68dd3177a62"
+dependencies = [
+ "argh_derive",
+ "argh_shared",
+]
+
+[[package]]
+name = "argh_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69f2bd7ff6ed6414f4e5521bd509bae46454bbd513801767ced3f21a751ab4bc"
+dependencies = [
+ "argh_shared",
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "argh_shared"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47253b98986dafc7a3e1cf3259194f1f47ac61abb57a57f46ec09e48d004ecda"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "colorous"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "882e392738ed515520f38708166e9efec85ee154f80bf1fc64510e2fc54bf481"
+
+[[package]]
+name = "find-crate"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2"
+dependencies = [
+ "toml",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "ohx"
+version = "0.1.0"
+dependencies = [
+ "argh",
+ "colorous",
+ "palette",
+]
+
+[[package]]
+name = "palette"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f9cd68f7112581033f157e56c77ac4a5538ec5836a2e39284e65bd7d7275e49"
+dependencies = [
+ "approx",
+ "num-traits",
+ "palette_derive",
+ "phf",
+]
+
+[[package]]
+name = "palette_derive"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05eedf46a8e7c27f74af0c9cfcdb004ceca158cb1b918c6f68f8d7a549b3e427"
+dependencies = [
+ "find-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+dependencies = [
+ "phf_macros",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+
+[[package]]
+name = "serde"
+version = "1.0.143"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53e8e5d5b70924f74ff5c6d64d9a5acd91422117c60f48c4e07855238a254553"
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "syn"
+version = "1.0.99"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
diff --git a/nixpkgs/pkgs/tools/misc/0x/default.nix b/nixpkgs/pkgs/tools/misc/0x/default.nix
new file mode 100644
index 000000000000..2f1493d23452
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/0x/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "0x";
+  version = "unstable-2022-07-11";
+
+  src = fetchFromGitHub {
+    owner = "mcy";
+    repo = "0x";
+    rev = "8070704b8efdd1f16bc7e01e393230f16cd8b0a6";
+    hash = "sha256-NzD/j8rBfk/cpoBnkFHFqpXz58mswLZr8TUS16vlrZQ=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  postPatch = ''
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mcy/0x";
+    description = "A colorful, configurable xxd";
+    mainProgram = "0x";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ AndersonTorres ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/3llo/Gemfile b/nixpkgs/pkgs/tools/misc/3llo/Gemfile
new file mode 100644
index 000000000000..7ad7c5aab15a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem '3llo', '1.3.1'
diff --git a/nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock b/nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock
new file mode 100644
index 000000000000..76926d648aff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/Gemfile.lock
@@ -0,0 +1,27 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    3llo (1.3.1)
+      tty-prompt (~> 0.20)
+    pastel (0.8.0)
+      tty-color (~> 0.5)
+    tty-color (0.6.0)
+    tty-cursor (0.7.1)
+    tty-prompt (0.23.1)
+      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)
+    wisper (2.0.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  3llo (= 1.3.1)
+
+BUNDLED WITH
+   2.2.33
diff --git a/nixpkgs/pkgs/tools/misc/3llo/default.nix b/nixpkgs/pkgs/tools/misc/3llo/default.nix
new file mode 100644
index 000000000000..8515849f3a9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/default.nix
@@ -0,0 +1,16 @@
+{ lib, bundlerApp }:
+
+bundlerApp {
+  pname = "3llo";
+
+  gemdir  = ./.;
+
+  exes = [ "3llo" ];
+
+  meta = with lib; {
+    description = "Trello interactive CLI on terminal";
+    license = licenses.mit;
+    homepage = "https://github.com/qcam/3llo";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/3llo/gemset.nix b/nixpkgs/pkgs/tools/misc/3llo/gemset.nix
new file mode 100644
index 000000000000..4de7651dbce0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3llo/gemset.nix
@@ -0,0 +1,86 @@
+{
+  "3llo" = {
+    dependencies = ["tty-prompt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1w327skga2lpq9rbqqxy6w1r6k9k1l8prk5wmzrycvydn1wp7jk2";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  pastel = {
+    dependencies = ["tty-color"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xash2gj08dfjvq4hy6l1z22s5v30fhizwgs10d6nviggpxsj7a8";
+      type = "gem";
+    };
+    version = "0.8.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 = "1j4y8ik82azjxshgd4i1v4wwhsv3g9cngpygxqkkz69qaa8cxnzw";
+      type = "gem";
+    };
+    version = "0.23.1";
+  };
+  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";
+  };
+  wisper = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rpsi0ziy78cj82sbyyywby4d0aw0a5q84v65qd28vqn79fbq5yf";
+      type = "gem";
+    };
+    version = "2.0.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/3mux/default.nix b/nixpkgs/pkgs/tools/misc/3mux/default.nix
new file mode 100644
index 000000000000..0a16b853943d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/3mux/default.nix
@@ -0,0 +1,59 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, makeWrapper }:
+
+buildGoModule rec {
+  pname = "3mux";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "aaronjanse";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QT4QXTlJf2NfTqXE4GF759EoW6Ri12lxDyodyEFc+ag=";
+  };
+
+  patches = [
+    # Needed so that the subsequent patch applies.
+    (fetchpatch {
+      name = "use-shorter-uuids.patch";
+      url = "https://github.com/aaronjanse/3mux/commit/6dd36694586f96e3c82ef7db1a0e7917ceb05794.patch";
+      hash = "sha256-FnFupOIIQi66mvjshn3EQ6XRzC4cLx3vGTeTUM1HOwM=";
+    })
+    # Fix the build for Darwin when building with Go 1.18.
+    # https://github.com/aaronjanse/3mux/pull/127
+    (fetchpatch {
+      name = "darwin-go-1.18-fix.patch";
+      url = "https://github.com/aaronjanse/3mux/commit/f2c26c1037927896d6e9a17ea038f8260620fbd4.patch";
+      hash = "sha256-RC3p30r0PGUKrxo8uOLL02oyfLqLfhNjBYy6E+OQ2f0=";
+    })
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  vendorHash = "sha256-KMcl6mj+cEgvdZMzBxUtGJsgwPdFuXrY3yjmkB3CS4o=";
+
+  # This is a package used for internally testing 3mux. It's meant for
+  # use by 3mux maintainers/contributors only.
+  excludedPackages = [ "fuzz" ];
+
+  # 3mux needs to have itself in the path so users can run `3mux detach`.
+  # This ensures that, while inside 3mux, the binary in the path is the
+  # same version as the 3mux hosting the session. This also allows users
+  # to use 3mux via `nix run nixpkgs#_3mux` (otherwise they'd get "command
+  # not found").
+  postInstall = ''
+    wrapProgram $out/bin/3mux --prefix PATH : $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Terminal multiplexer inspired by i3";
+    mainProgram = "3mux";
+    longDescription = ''
+      Terminal multiplexer with out-of-the-box support for search,
+      mouse-controlled scrollback, and i3-like keybindings
+    '';
+    homepage = "https://github.com/aaronjanse/3mux";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaronjanse Br1ght0ne ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/SP800-90B_EntropyAssessment/default.nix b/nixpkgs/pkgs/tools/misc/SP800-90B_EntropyAssessment/default.nix
new file mode 100644
index 000000000000..3c18621d712d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/SP800-90B_EntropyAssessment/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bzip2
+, libdivsufsort
+, jsoncpp
+, openssl
+, mpfr
+}:
+
+stdenv.mkDerivation rec {
+  pname = "SP800-90B_EntropyAssessment";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "usnistgov";
+    repo = "SP800-90B_EntropyAssessment";
+    rev = "v${version}";
+    hash = "sha256-KZQ7kC0PbBkjLEQZIqYakQ91OvCxruhdfUwiRHtno3w=";
+  };
+
+  buildInputs = [ bzip2 libdivsufsort jsoncpp openssl mpfr ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "-march=native" ""
+  '';
+
+  sourceRoot = "${src.name}/cpp";
+
+  makeFlags = [
+    "CROSS_COMPILE=${stdenv.cc.targetPrefix}"
+    "ARCH=${stdenv.hostPlatform.linuxArch}"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp ea_* $out/bin
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "https://github.com/usnistgov/SP800-90B_EntropyAssessment";
+    description = "Implementation of min-entropy assessment methods included in Special Publication 800-90B";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.nistSoftware;
+    maintainers = with lib.maintainers; [ orichter thillux ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aaa/default.nix b/nixpkgs/pkgs/tools/misc/aaa/default.nix
new file mode 100644
index 000000000000..0988bbca7acb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aaa/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "aaa";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "DomesticMoth";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-gIOlPjZOcmVLi9oOn4gBv6F+3Eq6t5b/3fKzoFqxclw=";
+  };
+  cargoSha256 = "sha256-ugB0r9qiGRurc30GrJH4MKM6fWZ99+f1Gy7/1lSmrwU=";
+
+  meta = with lib; {
+    description = "Terminal viewer for 3a format";
+    homepage = "https://github.com/DomesticMoth/aaa";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ asciimoth ];
+    mainProgram = "aaa";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/abduco/default.nix b/nixpkgs/pkgs/tools/misc/abduco/default.nix
new file mode 100644
index 000000000000..011f186bbbe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/abduco/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchpatch, fetchzip, writeText, conf ? null }:
+
+let
+  rev = "8c32909a159aaa9484c82b71f05b7a73321eb491";
+in
+stdenv.mkDerivation {
+  pname = "abduco";
+  version = "unstable-2020-04-30";
+
+  src = fetchzip {
+    urls = [
+      "https://github.com/martanne/abduco/archive/${rev}.tar.gz"
+      "https://git.sr.ht/~martanne/abduco/archive/${rev}.tar.gz"
+    ];
+    hash = "sha256-o7SPK/G31cW/rrLwV3UJOTq6EBHl6AEE/GdeKGlHdyg=";
+  };
+
+  preBuild = lib.optionalString (conf != null)
+    "cp ${writeText "config.def.h" conf} config.def.h";
+
+  installFlags = [ "install-completion" ];
+  CFLAGS = lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
+
+  patches = [
+    # https://github.com/martanne/abduco/pull/22
+    (fetchpatch {
+      name = "use-XDG-directory-scheme-by-default";
+      url = "https://github.com/martanne/abduco/commit/0e9a00312ac9777edcb169122144762e3611287b.patch";
+      sha256 = "sha256-4NkIflbRkUpS5XTM/fxBaELpvlZ4S5lecRa8jk0XC9g=";
+    })
+
+    # “fix bug where attaching to dead session won't give underlying exit code”
+    # https://github.com/martanne/abduco/pull/45
+    (fetchpatch {
+      name = "exit-code-when-attaching-to-dead-session";
+      url = "https://github.com/martanne/abduco/commit/972ca8ab949ee342569dbd66b47cc4a17b28247b.patch";
+      sha256 = "sha256-8hios0iKYDOmt6Bi5NNM9elTflGudnG2xgPF1pSkHI0=";
+    })
+
+    # “report pixel sizes to child processes that use ioctl(0, TIOCGWINSZ, ...)”
+    # used for kitty & other terminals that display images
+    # https://github.com/martanne/abduco/pull/62
+    (fetchpatch {
+      name = "report-pixel-sizes-to-child-processes";
+      url = "https://github.com/martanne/abduco/commit/a1e222308119b3251f00b42e1ddff74a385d4249.patch";
+      sha256 = "sha256-eiF0A4IqJrrvXxjBYtltuVNpxQDv/iQPO+K7Y8hWBGg=";
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "http://brain-dump.org/projects/abduco";
+    license = licenses.isc;
+    description = "Allows programs to be run independently from its controlling terminal";
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.unix;
+    mainProgram = "abduco";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix b/nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix
new file mode 100644
index 000000000000..4a87c9692ca9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/adafruit-ampy/default.nix
@@ -0,0 +1,27 @@
+{ lib, python3, fetchPypi }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "adafruit-ampy";
+  version = "1.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "f4cba36f564096f2aafd173f7fbabb845365cc3bb3f41c37541edf98b58d3976";
+  };
+
+  nativeBuildInputs = [ setuptools-scm ];
+  propagatedBuildInputs = [ click python-dotenv pyserial ];
+
+  # No tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/pycampers/ampy";
+    license = licenses.mit;
+    description = "Utility to interact with a MicroPython board over a serial connection";
+    maintainers = with maintainers; [ ];
+    mainProgram = "ampy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/addic7ed-cli/default.nix b/nixpkgs/pkgs/tools/misc/addic7ed-cli/default.nix
new file mode 100644
index 000000000000..d335cfb1d737
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/addic7ed-cli/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, python3Packages
+, fetchPypi
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "addic7ed-cli";
+  version = "1.4.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "182cpwxpdybsgl1nps850ysvvjbqlnx149kri4hxhgm58nqq0qf5";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    requests
+    pyquery
+  ];
+
+  # Tests require network access
+  doCheck = false;
+  pythonImportsCheck = [ "addic7ed_cli" ];
+
+  meta = with lib; {
+    description = "A commandline access to addic7ed subtitles";
+    homepage = "https://github.com/BenoitZugmeyer/addic7ed-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aethelz ];
+    platforms = platforms.unix;
+    mainProgram = "addic7ed";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/addlicense/default.nix b/nixpkgs/pkgs/tools/misc/addlicense/default.nix
new file mode 100644
index 000000000000..532bf3464fb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/addlicense/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+}:
+
+buildGoModule rec {
+  pname = "addlicense";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "addlicense";
+    rev = "v${version}";
+    sha256 = "sha256-YMMHj6wctKtJi/rrcMIrLmNw/uvO6wCwokgYRQxcsFw=";
+  };
+
+  patches = [
+    # Add support for Nix files. Upstream is slow with responding to PRs,
+    # patch backported from PR https://github.com/google/addlicense/pull/153.
+    (fetchpatch {
+      url = "https://github.com/google/addlicense/commit/e0fb3f44cc7670dcc5cbcec2211c9ad238c5f9f1.patch";
+      hash = "sha256-XCAvL+HEa1hGc0GAnl+oYHKzBJ3I5ArS86vgABrP/Js=";
+    })
+  ];
+
+  vendorHash = "sha256-2mncc21ecpv17Xp8PA9GIodoaCxNBacbbya/shU8T9Y=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Ensures source code files have copyright license headers by scanning directory patterns recursively";
+    homepage = "https://github.com/google/addlicense";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "addlicense";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/adrgen/default.nix b/nixpkgs/pkgs/tools/misc/adrgen/default.nix
new file mode 100644
index 000000000000..4a367062cafa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/adrgen/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+, testers
+, adrgen
+}:
+
+buildGoModule rec {
+  pname = "adrgen";
+  version = "0.4.0-beta";
+
+  src = fetchFromGitHub {
+    owner = "asiermarques";
+    repo = "adrgen";
+    rev = "v${version}";
+    hash = "sha256-2ZE/orsfwL59Io09c4yfXt2enVmpSM/QHlUMgyd9RYQ=";
+  };
+
+  patches = [
+    # https://github.com/asiermarques/adrgen/pull/14
+    (fetchpatch {
+      name = "update-x-sys-for-go-1.18-on-aarch64-darwin.patch";
+      url = "https://github.com/asiermarques/adrgen/commit/485dc383106467d1029ee6d92c9bcbc3c2281626.patch";
+      hash = "sha256-38ktHrRgW5ysQmafvFthNtkZ6nnM61z4yEA7wUGmWb4=";
+    })
+  ];
+
+  vendorHash = "sha256-RXwwv3Q/kQ6FondpiUm5XZogAVK2aaVmKu4hfr+AnAM=";
+
+  passthru.tests.version = testers.testVersion {
+    package = adrgen;
+    command = "adrgen version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/asiermarques/adrgen";
+    description = "A command-line tool for generating and managing Architecture Decision Records";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+    mainProgram = "adrgen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aescrypt/default.nix b/nixpkgs/pkgs/tools/misc/aescrypt/default.nix
new file mode 100644
index 000000000000..0ced53804643
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aescrypt/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libiconv }:
+
+stdenv.mkDerivation rec {
+  version = "3.16";
+  pname = "aescrypt";
+
+  src = fetchurl {
+    url = "https://www.aescrypt.com/download/v3/linux/${pname}-${version}.tgz";
+    sha256 = "sha256-4uGS0LReq5dI7+Wel7ZWzFXx+utZWi93q4TUSw7AhNI=";
+  };
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-liconv";
+
+  preBuild = ''
+    substituteInPlace src/Makefile --replace "CC=gcc" "CC?=gcc"
+    cd src
+  '';
+
+  installPhase= ''
+    mkdir -p $out/bin
+    cp aescrypt $out/bin
+    cp aescrypt_keygen $out/bin
+  '';
+
+  buildInputs = [ libiconv ];
+
+  meta = with lib; {
+    description = "Encrypt files with Advanced Encryption Standard (AES)";
+    homepage    = "https://www.aescrypt.com/";
+    license     = licenses.gpl2;
+    maintainers = with maintainers; [ lovek323 qknight ];
+    platforms   = lib.platforms.all;
+    hydraPlatforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/afetch/default.nix b/nixpkgs/pkgs/tools/misc/afetch/default.nix
new file mode 100644
index 000000000000..9b8fe7e4e091
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/afetch/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "afetch";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "13-CF";
+    repo = "afetch";
+    rev = "V${version}";
+    sha256 = "sha256-bHP3DJpgh89AaCX4c1tQGaZ/PiWjArED1rMdszFUq+U=";
+  };
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "A fetch program written in C";
+    homepage = "https://github.com/13-CF/afetch";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 jk ];
+    platforms = platforms.linux;
+    mainProgram = "afetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/agedu/default.nix b/nixpkgs/pkgs/tools/misc/agedu/default.nix
new file mode 100644
index 000000000000..d8b2c1a2c5ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/agedu/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv
+, fetchgit
+, cmake
+, halibut
+}:
+let
+  date = "20211129";
+  rev = "8cd63c5";
+in
+stdenv.mkDerivation {
+  pname = "agedu";
+  version = "${date}.${rev}";
+
+  # upstream provides tarballs but it seems they disappear after the next version is released
+  src = fetchgit {
+    url = "https://git.tartarus.org/simon/agedu.git";
+    inherit rev;
+    hash = "sha256-5wqpL7wrFwIf6lxVte+GXLsXYY0/36EIAUepVNDCnSE=";
+  };
+
+  nativeBuildInputs = [ cmake halibut ];
+
+  meta = with lib; {
+    description = "A Unix utility for tracking down wasted disk space";
+    longDescription = ''
+       Most Unix file systems, in their default mode, helpfully record when a
+       file was last accessed. So if you generated a large amount of data years
+       ago, forgot to clean it up, and have never used it since, then it ought
+       in principle to be possible to use those last-access time stamps to tell
+       the difference between that and a large amount of data you're still
+       using regularly.
+
+       agedu uses this information to tell you which files waste disk space when
+       you haven't used them since a long time.
+    '';
+    homepage = "https://www.chiark.greenend.org.uk/~sgtatham/agedu/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ symphorien ];
+    platforms = platforms.unix;
+    mainProgram = "agedu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aichat/default.nix b/nixpkgs/pkgs/tools/misc/aichat/default.nix
new file mode 100644
index 000000000000..9b97546a2c47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aichat/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, darwin
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "aichat";
+  version = "0.16.0";
+
+  src = fetchFromGitHub {
+    owner = "sigoden";
+    repo = "aichat";
+    rev = "v${version}";
+    hash = "sha256-XNNiIjJfPsfoyG3RbxlcoUxsOUkWZ+3H3SlYenuNOIQ=";
+  };
+
+  cargoHash = "sha256-JOkcqqmfat+PAn7mRHq+iQCF60weDOBWP2+0DL0s3X0=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Use GPT-4(V), Gemini, LocalAI, Ollama and other LLMs in the terminal";
+    homepage = "https://github.com/sigoden/aichat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mwdomino ];
+    mainProgram = "aichat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix b/nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix
new file mode 100644
index 000000000000..525d65dd7e08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/alarm-clock-applet/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, pkg-config
+, wrapGAppsHook
+, gst_all_1
+, libnotify
+, libayatana-appindicator
+}:
+
+stdenv.mkDerivation rec {
+  pname = "alarm-clock-applet";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = "alarm-clock";
+    rev = version;
+    hash = "sha256-10hkWWEsAUJnGeu35bR5d0RFKd9CKDZI7WGMzmEM3rI=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/alarm-clock-applet/alarm-clock/commit/6a11003099660dfae0e3d5800f49880d3a26f5ec.patch";
+      hash = "sha256-NP1PlEw5AFWZgywvppIs2e+5EfMSPbU4Pq2tIfwODrQ=";
+    })
+    (fetchpatch {
+      url = "https://github.com/alarm-clock-applet/alarm-clock/commit/cbcf22fac5b45ab251ade2e7e993f422f33f926e.patch";
+      hash = "sha256-xKaaNfXsv9Ckwy73r1n93kOWIZ01fU5GDqYSQCch1Kc=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gst_all_1.gstreamer
+    libnotify
+    libayatana-appindicator
+  ];
+
+  cmakeFlags = [
+    # gconf is already deprecated
+    "-DENABLE_GCONF_MIGRATION=OFF"
+  ];
+
+  meta = with lib; {
+    description = "A fully-featured alarm clock with an indicator";
+    homepage = "https://alarm-clock-applet.github.io";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.linux;
+    mainProgram = "alarm-clock-applet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/altserver-linux/default.nix b/nixpkgs/pkgs/tools/misc/altserver-linux/default.nix
new file mode 100644
index 000000000000..30d528294901
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/altserver-linux/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, fetchurl
+, lib
+, avahi-compat
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "altserver-linux";
+  version = "0.0.5";
+
+  src = fetchurl {
+    url = "https://github.com/NyaMisty/AltServer-Linux/releases/download/v${finalAttrs.version}/AltServer-x86_64";
+    hash = "sha256-C+fDrcaewRd6FQMrO443xdDk/vtHycQ5zWLCOLPqF/s=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp $src $out/bin/alt-server
+    chmod u+x $out/bin/alt-server
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/NyaMisty/AltServer-Linux";
+    description = "AltServer for AltStore, but on-device. Requires root privileges as well as running a custom anisette server currently";
+    license = licenses.agpl3Only;
+    mainProgram = "alt-server";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ max-amb ];
+  };
+})
+
diff --git a/nixpkgs/pkgs/tools/misc/android-tools/default.nix b/nixpkgs/pkgs/tools/misc/android-tools/default.nix
new file mode 100644
index 000000000000..efc5a95e7bde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/android-tools/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl
+, cmake, ninja, pkg-config, perl, go, python3
+, protobuf, zlib, gtest, brotli, lz4, zstd, libusb1, pcre2
+}:
+
+let
+  pythonEnv = python3.withPackages(ps: [ ps.protobuf ]);
+in
+
+stdenv.mkDerivation rec {
+  pname = "android-tools";
+  version = "35.0.1";
+
+  src = fetchurl {
+    url = "https://github.com/nmeum/android-tools/releases/download/${version}/android-tools-${version}.tar.xz";
+    hash = "sha256-ZUAwx/ltJdciTNaGH6wUoEPPHTmA9AKIzfviGflP+vk=";
+  };
+
+  nativeBuildInputs = [ cmake ninja pkg-config perl go ];
+  buildInputs = [ protobuf zlib gtest brotli lz4 zstd libusb1 pcre2 ];
+  propagatedBuildInputs = [ pythonEnv ];
+
+  preConfigure = ''
+    export GOCACHE=$TMPDIR/go-cache
+  '';
+
+  meta = with lib; {
+    description = "Android SDK platform tools";
+    longDescription = ''
+      Android SDK Platform-Tools is a component for the Android SDK. It
+      includes tools that interface with the Android platform, such as adb and
+      fastboot. These tools are required for Android app development. They're
+      also needed if you want to unlock your device bootloader and flash it
+      with a new system image.
+      Currently the following tools are supported:
+      - adb
+      - fastboot
+      - mke2fs.android (required by fastboot)
+      - simg2img, img2simg, append2simg
+      - lpdump, lpmake, lpadd, lpflash, lpunpack
+      - mkbootimg, unpack_bootimg, repack_bootimg, avbtool
+      - mkdtboimg
+    '';
+    # https://developer.android.com/studio/command-line#tools-platform
+    # https://developer.android.com/studio/releases/platform-tools
+    homepage = "https://github.com/nmeum/android-tools";
+    license = with licenses; [ asl20 unicode-dfs-2015 ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ primeos ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/antimicrox/default.nix b/nixpkgs/pkgs/tools/misc/antimicrox/default.nix
new file mode 100644
index 000000000000..a0bafa726f97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/antimicrox/default.nix
@@ -0,0 +1,44 @@
+{ mkDerivation
+, lib
+, cmake
+, extra-cmake-modules
+, pkg-config
+, SDL2
+, qttools
+, xorg
+, fetchFromGitHub
+, itstool
+}:
+
+mkDerivation rec {
+  pname = "antimicrox";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "AntiMicroX";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-zBIEuZdmcyA99YdwC6tn0I3Ori8VyBOw50ablb/Lmvs=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules pkg-config itstool ];
+  buildInputs = [
+    SDL2
+    qttools
+    xorg.libXtst
+  ];
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+        --replace "/usr/lib/udev/rules.d/" "$out/lib/udev/rules.d/"
+  '';
+
+  meta = with lib; {
+    description = "GUI for mapping keyboard and mouse controls to a gamepad";
+    inherit (src.meta) homepage;
+    maintainers = with maintainers; [ sbruder ];
+    license = licenses.gpl3Plus;
+    platforms = with platforms; linux;
+    mainProgram = "antimicrox";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile b/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile
new file mode 100644
index 000000000000..be47216200d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile
@@ -0,0 +1,37 @@
+source 'https://rubygems.org'
+gemspec
+
+
+group :development, :test do
+  #gem 'anystyle-data', github: 'inukshuk/anystyle-data'
+  #gem 'wapiti', github: 'inukshuk/wapiti-ruby'
+  gem 'bibtex-ruby'
+  gem 'rake'
+  gem 'rspec', '~>3.0'
+  gem 'language_detector', github: 'feedbackmine/language_detector'
+  gem 'unicode-scripts'
+  gem 'edtf'
+  gem 'citeproc'
+  gem 'unicode_utils' if RUBY_VERSION < '2.4'
+end
+
+group :coverage do
+  gem 'simplecov', require: false
+  gem 'coveralls', require: false if ENV['CI']
+end
+
+group :debug do
+  gem 'byebug', require: false
+end
+
+group :profile do
+  gem 'ruby-prof', require: false
+  gem 'gnuplot', require: false
+end
+
+group :extra do
+  gem 'lmdb'
+  gem 'redis'
+  gem 'redis-namespace'
+  gem 'yard'
+end
diff --git a/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile.lock b/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile.lock
new file mode 100644
index 000000000000..8d28ef808948
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/anystyle-cli/Gemfile.lock
@@ -0,0 +1,99 @@
+GIT
+  remote: https://github.com/feedbackmine/language_detector.git
+  revision: 89102790194150b3a8110ce691f9989b8ce70f8d
+  specs:
+    language_detector (0.1.2)
+
+PATH
+  remote: .
+  specs:
+    anystyle (1.3.10)
+      anystyle-data (~> 1.2)
+      bibtex-ruby (~> 5.0)
+      gli (~> 2.17)
+      namae (~> 1.0)
+      wapiti (~> 1.0, >= 1.0.2)
+
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (6.0.3.2)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 0.7, < 2)
+      minitest (~> 5.1)
+      tzinfo (~> 1.1)
+      zeitwerk (~> 2.2, >= 2.2.2)
+    anystyle-data (1.2.0)
+    bibtex-ruby (5.1.4)
+      latex-decode (~> 0.0)
+    builder (3.2.4)
+    byebug (11.1.3)
+    citeproc (1.0.10)
+      namae (~> 1.0)
+    concurrent-ruby (1.1.7)
+    diff-lcs (1.4.4)
+    docile (1.3.2)
+    edtf (3.0.5)
+      activesupport (>= 3.0, < 7.0)
+    gli (2.19.2)
+    gnuplot (2.6.2)
+    i18n (1.8.5)
+      concurrent-ruby (~> 1.0)
+    latex-decode (0.3.1)
+    lmdb (0.5.3)
+    minitest (5.14.1)
+    namae (1.0.1)
+    rake (13.0.1)
+    redis (4.2.1)
+    redis-namespace (1.8.0)
+      redis (>= 3.0.4)
+    rspec (3.9.0)
+      rspec-core (~> 3.9.0)
+      rspec-expectations (~> 3.9.0)
+      rspec-mocks (~> 3.9.0)
+    rspec-core (3.9.2)
+      rspec-support (~> 3.9.3)
+    rspec-expectations (3.9.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.9.0)
+    rspec-mocks (3.9.1)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.9.0)
+    rspec-support (3.9.3)
+    ruby-prof (1.4.1)
+    simplecov (0.19.0)
+      docile (~> 1.1)
+      simplecov-html (~> 0.11)
+    simplecov-html (0.12.2)
+    thread_safe (0.3.6)
+    tzinfo (1.2.7)
+      thread_safe (~> 0.1)
+    unicode-scripts (1.6.0)
+    wapiti (1.0.7)
+      builder (~> 3.2)
+    yard (0.9.25)
+    zeitwerk (2.4.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  anystyle!
+  bibtex-ruby
+  byebug
+  citeproc
+  edtf
+  gnuplot
+  language_detector!
+  lmdb
+  rake
+  redis
+  redis-namespace
+  rspec (~> 3.0)
+  ruby-prof
+  simplecov
+  unicode-scripts
+  yard
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/anystyle-cli/anystyle.gemspec b/nixpkgs/pkgs/tools/misc/anystyle-cli/anystyle.gemspec
new file mode 100644
index 000000000000..57db427fb024
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/anystyle-cli/anystyle.gemspec
@@ -0,0 +1,52 @@
+# -*- encoding: utf-8 -*-
+lib = File.expand_path('../lib/', __FILE__)
+$:.unshift lib unless $:.include?(lib)
+
+require 'anystyle/version'
+
+Gem::Specification.new do |s|
+  s.name         = 'anystyle'
+  s.version      = AnyStyle::VERSION.dup
+  s.platform     = Gem::Platform::RUBY
+  s.authors      = ['Sylvester Keil']
+  s.email        = ['http://sylvester.keil.or.at']
+  s.homepage     = 'http://anystyle.io'
+  s.summary      = 'Smart and fast bibliography parser.'
+  s.description  = 'A sophisticated parser for academic reference lists and bibliographies based on machine learning algorithms using conditional random fields.'
+  s.license      = 'BSD-2-Clause'
+  s.executables  = []
+  s.require_path = 'lib'
+
+  s.required_ruby_version = '>= 2.2'
+
+  s.add_runtime_dependency('bibtex-ruby', '~>5.0')
+  s.add_runtime_dependency('anystyle-data', '~>1.2')
+  s.add_runtime_dependency('gli', '~>2.17')
+  s.add_runtime_dependency('wapiti', '~>1.0', '>=1.0.2')
+  s.add_runtime_dependency('namae', '~>1.0')
+
+  s.files =
+    `git ls-files`.split("\n") - `git ls-files spec`.split("\n") - %w{
+      .coveralls.yml
+      .gitignore
+      .rspec
+      .simplecov
+      .travis.yml
+      Gemfile
+      Rakefile
+      appveyor.yml
+      anystyle.gemspec
+      res/core.xml
+    }
+
+  s.rdoc_options = %w{
+    --line-numbers
+    --inline-source
+    --title "AnyStyle"
+    --main README.md
+  }
+  s.extra_rdoc_files = %w{README.md LICENSE}
+
+end
+
+# vim: syntax=ruby
diff --git a/nixpkgs/pkgs/tools/misc/anystyle-cli/default.nix b/nixpkgs/pkgs/tools/misc/anystyle-cli/default.nix
new file mode 100644
index 000000000000..beebae6542b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/anystyle-cli/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildRubyGem
+, bundlerEnv
+, ruby
+, poppler_utils
+}:
+let
+  deps = bundlerEnv rec {
+    name = "anystyle-cli-${version}";
+    source.sha256 = lib.fakeSha256;
+    version = "1.3.1";
+    inherit ruby;
+    gemdir = ./.;
+    gemset = lib.recursiveUpdate (import ./gemset.nix) {
+      anystyle.source = {
+        remotes = ["https://rubygems.org"];
+        sha256 = "1w79zcia60nnnyrmyvpd10pmxrpk5c7lj9gmmblhwi8x5mfq9k0n";
+        type = "gem";
+      };
+    };
+  };
+in
+buildRubyGem rec {
+  inherit ruby;
+  gemName = "anystyle-cli";
+  pname = gemName;
+  version = "1.3.1";
+  source.sha256 = "1a3ifwxwqkp5dnfk9r8qq8kgfb8k1pl7jjdghbb8ixbxz9ac7awy";
+
+  propagatedBuildInputs = [ deps ];
+
+  preFixup = ''
+    wrapProgram $out/bin/anystyle --prefix PATH : ${poppler_utils}/bin
+  '';
+
+  meta = with lib; {
+    description = "Command line interface to the AnyStyle Parser and Finder";
+    homepage    = "https://anystyle.io/";
+    license     = licenses.bsd2;
+    maintainers = with maintainers; [ shamilton ];
+    mainProgram = "anystyle";
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/anystyle-cli/gemset.nix b/nixpkgs/pkgs/tools/misc/anystyle-cli/gemset.nix
new file mode 100644
index 000000000000..46444760b7bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/anystyle-cli/gemset.nix
@@ -0,0 +1,1570 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo" "zeitwerk"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02sh4q8izyfdnh7z2nj5mn5sklfvqgx9rrag5j3l51y8aqkrg2yk";
+      type = "gem";
+    };
+    version = "6.0.3.2";
+  };
+  anystyle = {
+    dependencies = ["anystyle-data" "bibtex-ruby" "gli" "namae" "wapiti"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      path = ./.;
+      type = "path";
+    };
+    version = "1.3.10";
+  };
+  anystyle-data = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ry6836mq48d85hjcfp7xiw0yk3ivpiwjvmdwv5jag30ijfyaccy";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  bibtex-ruby = {
+    dependencies = ["latex-decode"];
+    groups = ["default" "development" "test"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00zwmmmjrbrxhajdvn1d4rnv2qw00arcj021cwyx3hl6dsv22l2w";
+      type = "gem";
+    };
+    version = "5.1.4";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  byebug = {
+    groups = ["debug"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nx3yjf4xzdgb8jkmk2344081gqr22pgjqnmjg2q64mj5d6r9194";
+      type = "gem";
+    };
+    version = "11.1.3";
+  };
+  citeproc = {
+    dependencies = ["namae"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13vl5sjmksk5a8kjcqnjxh7kn9gn1n4f9p1rvqfgsfhs54p0m6l2";
+      type = "gem";
+    };
+    version = "1.0.10";
+  };
+  concurrent-ruby = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vnxrbhi7cq3p4y2v9iwd10v1c7l15is4var14hwnb2jip4fyjzz";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  diff-lcs = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m925b8xc6kbpnif9dldna24q1szg4mk0fvszrki837pfn46afmz";
+      type = "gem";
+    };
+    version = "1.4.4";
+  };
+  docile = {
+    groups = ["coverage" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qrwiyagxzl8zlx3dafb0ay8l14ib7imb2rsmx70i5cp420v8gif";
+      type = "gem";
+    };
+    version = "1.3.2";
+  };
+  edtf = {
+    dependencies = ["activesupport"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xknzamagsx68iq7zdiswr077sxirig77yggbcsw51m8365ajzpc";
+      type = "gem";
+    };
+    version = "3.0.5";
+  };
+  gli = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0q598mvl20isn3ja1ya0p72svmqwx3m6fjp5slnv0b2c5mh0ahvv";
+      type = "gem";
+    };
+    version = "2.19.2";
+  };
+  gnuplot = {
+    groups = ["profile"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cvb84lahhy6qxkkgg0pfk9b85qrb1by2p3jlpqgczl6am58vhnj";
+      type = "gem";
+    };
+    version = "2.6.2";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "153sx77p16vawrs4qpkv7qlzf9v5fks4g7xqcj1dwk40i6g7rfzk";
+      type = "gem";
+    };
+    version = "1.8.5";
+  };
+  language_detector = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      fetchSubmodules = false;
+      rev = "89102790194150b3a8110ce691f9989b8ce70f8d";
+      sha256 = "0wxs9i0wqmwysrz1c1i85i4f670m217y12rj5slcmd1y4ylsmvyi";
+      type = "git";
+      url = "https://github.com/feedbackmine/language_detector.git";
+    };
+    version = "0.1.2";
+  };
+  latex-decode = {
+    groups = ["default" "development" "test"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dqanr69as05vdyp9gx9737w3g44rhyk7x96bh9x01fnf1yalyzd";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  lmdb = {
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qk2ycgyyk052dvbgik35mr4n9im4k1j6v7anbjqhx52y5f07sfg";
+      type = "gem";
+    };
+    version = "0.5.3";
+  };
+  minitest = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09bz9nsznxgaf06cx3b5z71glgl0hdw469gqx3w7bqijgrb55p5g";
+      type = "gem";
+    };
+    version = "5.14.1";
+  };
+  namae = {
+    groups = ["default" "development" "test"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00w0dgvmdy8lw2b5q9zvhqd5k98a192vdmka96qngi9cvnsh5snw";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  rake = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9";
+      type = "gem";
+    };
+    version = "13.0.1";
+  };
+  redis = {
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19hm66kw5vx1lmlh8bj7rxlddyj0vfp11ajw9njhrmn8173d0vb5";
+      type = "gem";
+    };
+    version = "4.2.1";
+  };
+  redis-namespace = {
+    dependencies = ["redis"];
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05i6s898z5w31z385cba1683pgg5nnmj4m686cbravg7j4pgbcgv";
+      type = "gem";
+    };
+    version = "1.8.0";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hzsig4pi9ybr0xl5540m1swiyxa74c8h09225y5sdh2rjkkg84h";
+      type = "gem";
+    };
+    version = "3.9.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xndkv5cz763wh30x7hdqw6k7zs8xfh0f86amra9agwn44pcqs0y";
+      type = "gem";
+    };
+    version = "3.9.2";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bxkv25qmy39jqrdx35bfgw00g24qkssail9jlljm7hywbqvr9bb";
+      type = "gem";
+    };
+    version = "3.9.2";
+  };
+  rspec-mocks = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19vmdqym1v2g1zbdnq37zwmyj87y9yc9ijwc8js55igvbb9hx0mr";
+      type = "gem";
+    };
+    version = "3.9.1";
+  };
+  rspec-support = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dandh2fy1dfkjk8jf9v4azbbma6968bhh06hddv0yqqm8108jir";
+      type = "gem";
+    };
+    version = "3.9.3";
+  };
+  ruby-prof = {
+    groups = ["profile"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12cd91m08ih0imfpy4k87618hd4mhyz291a6bx2hcskza4nf6d27";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  simplecov = {
+    dependencies = ["docile" "simplecov-html"];
+    groups = ["coverage"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b082xrklq6k755cc3rzpnfdjv5338rlky9him36jasw8s9q68mr";
+      type = "gem";
+    };
+    version = "0.19.0";
+  };
+  simplecov-html = {
+    groups = ["coverage" "default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1v7b4mf7njw8kv4ghl4q7mwz3q0flbld7v8blp4m4m3n3aq11bn9";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+  thread_safe = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  tzinfo = {
+    dependencies = ["thread_safe"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1i3jh086w1kbdj3k5l60lc3nwbanmzdf8yjj3mlrx9b2gjjxhi9r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  unicode-scripts = {
+    groups = ["development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04xfy4f61xf7qnbfa68aqscmyxk7wx3swn571cijsfqalhz8swjg";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  wapiti = {
+    dependencies = ["builder"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aw2l759cfmii9a67pn8pswip11v08nabkzm825mrmxa6r91izqs";
+      type = "gem";
+    };
+    version = "1.0.7";
+  };
+  yard = {
+    groups = ["extra"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "126m49mvh4lbvlvrprq7xj2vjixbq3xqr8dwr089vadvs0rkn4rd";
+      type = "gem";
+    };
+    version = "0.9.25";
+  };
+  zeitwerk = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvn50k76kl14fpymk4hdsf9sk00jl84yxzl783xhnw4dicp0m0k";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/aoc-cli/default.nix b/nixpkgs/pkgs/tools/misc/aoc-cli/default.nix
new file mode 100644
index 000000000000..4fec5647e04d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aoc-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "aoc-cli";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "scarvalhojr";
+    repo = pname;
+    rev = version;
+    hash = "sha256-UdeCKhEWr1BjQ6OMLP19OLWPlvvP7FGAO+mi+bQUPQA=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
+
+  cargoHash = "sha256-EluP4N3UBQeEKVdHTs4O0THXji+nAyE52nGKsxA3AA4=";
+
+  meta = with lib; {
+    description = "Advent of code command line tool";
+    homepage = "https://github.com/scarvalhojr/aoc-cli/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jordanisaacs ];
+    mainProgram = "aoc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/apkeep/default.nix b/nixpkgs/pkgs/tools/misc/apkeep/default.nix
new file mode 100644
index 000000000000..2b52ab1d788a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/apkeep/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, openssl
+, pkg-config
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "apkeep";
+  version = "0.16.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-nPeXIzy9tYWeJrq1tIKXMILOjVnsAvsceY5dzz7+pYE=";
+  };
+
+  cargoHash = "sha256-0NyZmZ00zmGfndz47NMeh76SMmh0ap6ZfkKebX7pMfw=";
+
+  prePatch = ''
+    rm .cargo/config.toml
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+    SystemConfiguration
+  ];
+
+  meta = with lib; {
+    description = "A command-line tool for downloading APK files from various sources";
+    homepage = "https://github.com/EFForg/apkeep";
+    changelog = "https://github.com/EFForg/apkeep/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ joelkoen ];
+    mainProgram = "apkeep";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/apparix/default.nix b/nixpkgs/pkgs/tools/misc/apparix/default.nix
new file mode 100644
index 000000000000..a75a9f03f300
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/apparix/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "apparix";
+  version = "11-062";
+
+  src = fetchurl {
+    url = "https://micans.org/apparix/src/apparix-${version}.tar.gz";
+    sha256 = "211bb5f67b32ba7c3e044a13e4e79eb998ca017538e9f4b06bc92d5953615235";
+  };
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "http://micans.org/apparix";
+    description = "Add directory bookmarks, distant listing, and distant editing to the command line";
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    mainProgram = "apparix";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aptly/default.nix b/nixpkgs/pkgs/tools/misc/aptly/default.nix
new file mode 100644
index 000000000000..6da10fe9b7fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aptly/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, makeWrapper, gnupg, bzip2, xz, graphviz, testers, aptly }:
+
+buildGoModule rec {
+  pname = "aptly";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "aptly-dev";
+    repo = "aptly";
+    rev = "v${version}";
+    sha256 = "sha256-LqGOLXXaGfQfoj2r+aY9SdOKUDI9+22EsHKBhHMidyk=";
+  };
+
+  vendorHash = "sha256-6l3OFKFTtFWT68Ylav6woczBlMhD75C9ZoQ6OeLz0Cs=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  postInstall = ''
+    installShellCompletion --bash --name aptly completion.d/aptly
+    installShellCompletion --zsh --name _aptly completion.d/_aptly
+    wrapProgram "$out/bin/aptly" \
+      --prefix PATH ":" "${lib.makeBinPath [ gnupg bzip2 xz graphviz ]}"
+  '';
+
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = aptly;
+    command = "aptly version";
+  };
+
+  meta = with lib; {
+    homepage = "https://www.aptly.info";
+    description = "Debian repository management tool";
+    license = licenses.mit;
+    maintainers = with maintainers; [ montag451 ] ++ teams.bitnomial.members;
+    changelog =
+      "https://github.com/aptly-dev/aptly/releases/tag/v${version}";
+    mainProgram = "aptly";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aquosctl/default.nix b/nixpkgs/pkgs/tools/misc/aquosctl/default.nix
new file mode 100644
index 000000000000..f8eba27e0fe4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aquosctl/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+let
+  pname = "aquosctl";
+in
+stdenv.mkDerivation {
+  inherit pname;
+  version = "unstable-2014-04-06";
+
+  src = fetchFromGitHub {
+    owner = "jdwhite";
+    repo = pname;
+    rev = "b5e48d9ef848188b97dfb24bfcc99d5196cab5f6";
+    hash = "sha256-FA3LR58KMG5RzSxxnOkVw1+inM/gMGPtw5+JQwSHBYs=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm0755 aquosctl $out/bin/aquosctl
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Sharp Aquos television RS-232 control application";
+    homepage = "https://github.com/jdwhite/aquosctl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+    platforms = platforms.linux;
+    mainProgram = "aquosctl";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/arch-install-scripts/default.nix b/nixpkgs/pkgs/tools/misc/arch-install-scripts/default.nix
new file mode 100644
index 000000000000..a87268309252
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/arch-install-scripts/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, resholve
+, fetchFromGitHub
+, asciidoc
+, bash
+, coreutils
+, gawk
+, gnugrep
+, gnum4
+, pacman
+, util-linux
+, chrootPath ? [
+    "/usr/local/sbin"
+    "/usr/local/bin"
+    "/usr/bin"
+    "/usr/bin/site_perl"
+    "/usr/bin/vendor_perl"
+    "/usr/bin/core_perl"
+  ]
+}:
+
+resholve.mkDerivation rec {
+  pname = "arch-install-scripts";
+  version = "28";
+
+  src = fetchFromGitHub {
+    owner = "archlinux";
+    repo = "arch-install-scripts";
+    rev = "v${version}";
+    hash = "sha256-TytCeejhjWYDzWFjGubUl08OrsAQa9fFULoamDfbdDY=";
+  };
+
+  nativeBuildInputs = [ asciidoc gnum4 ];
+
+  postPatch = ''
+    substituteInPlace ./Makefile \
+      --replace "PREFIX = /usr/local" "PREFIX ?= /usr/local"
+    substituteInPlace ./pacstrap.in \
+      --replace "cp -a" "cp -LR --no-preserve=mode" \
+      --replace "unshare pacman" "unshare ${pacman}/bin/pacman" \
+      --replace 'gnupg "$newroot/etc/pacman.d/"' 'gnupg "$newroot/etc/pacman.d/" && chmod 700 "$newroot/etc/pacman.d/gnupg"'
+    echo "export PATH=${lib.strings.makeSearchPath "" chrootPath}:\$PATH" >> ./common
+  '';
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  doCheck = true;
+
+  solutions = {
+    # Give each solution a short name. This is what you'd use to
+    # override its settings, and it shows in (some) error messages.
+    profile = {
+      # the only *required* arguments are the 3 below
+
+      # Specify 1 or more $out-relative script paths. Unlike many
+      # builders, resholve.mkDerivation modifies the output files during
+      # fixup (to correctly resolve in-package sourcing).
+      scripts = [ "bin/arch-chroot" "bin/genfstab" "bin/pacstrap" ];
+
+      # "none" for no shebang, "${bash}/bin/bash" for bash, etc.
+      interpreter = "${bash}/bin/bash";
+
+      # packages resholve should resolve executables from
+      inputs = [ coreutils gawk gnugrep pacman util-linux ];
+
+      execer = [ "cannot:${pacman}/bin/pacman-key" ];
+
+      # TODO: no good way to resolve mount/umount in Nix builds for now
+      # see https://github.com/abathur/resholve/issues/29
+      fix = {
+        mount = true;
+        umount = true;
+      };
+
+      keep = [ "$setup" "$pid_unshare" "$mount_unshare" "${pacman}/bin/pacman" ];
+    };
+  };
+
+  meta = with lib; {
+    description = "Useful scripts for installing Arch Linux";
+    longDescription = ''
+      A small suite of scripts aimed at automating some menial tasks when installing Arch Linux.
+    '';
+    homepage = "https://github.com/archlinux/arch-install-scripts";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ samlukeyes123 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/archi/default.nix b/nixpkgs/pkgs/tools/misc/archi/default.nix
new file mode 100644
index 000000000000..23c5372e5eef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/archi/default.nix
@@ -0,0 +1,83 @@
+{ lib, stdenv
+, fetchurl
+, autoPatchelfHook
+, makeWrapper
+, jdk
+, libsecret
+, webkitgtk
+, wrapGAppsHook
+, _7zz
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "Archi";
+  version = "5.2.0";
+
+  src = {
+    "x86_64-linux" = fetchurl {
+      url = "https://www.archimatetool.com/downloads/archi_5.php?/${version}/Archi-Linux64-${version}.tgz";
+      hash = "sha256-uGW4Wl3E71ZCgWzPHkmXv/PluegDF8C64FUQ7C5/SDA=";
+    };
+    "x86_64-darwin" = fetchurl {
+      url = "https://www.archimatetool.com/downloads/archi_5.php?/${version}/Archi-Mac-${version}.dmg";
+      hash = "sha256-GI9aIAYwu60RdjN0Y3O94sVMzJR1+nX4txVcvqn1r58=";
+    };
+    "aarch64-darwin" = fetchurl {
+      url = "https://www.archimatetool.com/downloads/archi_5.php?/${version}/Archi-Mac-Silicon-${version}.dmg";
+      hash = "sha256-Jg+tl902OWSm4GHxF7QXbRU5nxX4/5q6LTGubHWQ08E=";
+    };
+  }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  buildInputs = [
+    libsecret
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    wrapGAppsHook
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    _7zz
+  ] ++ lib.optionals stdenv.hostPlatform.isLinux [
+    autoPatchelfHook
+  ];
+
+  sourceRoot = if stdenv.isDarwin then "." else null;
+
+  installPhase =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      ''
+        mkdir -p $out/bin $out/libexec
+        for f in configuration features p2 plugins Archi.ini; do
+          cp -r $f $out/libexec
+        done
+
+        install -D -m755 Archi $out/libexec/Archi
+        makeWrapper $out/libexec/Archi $out/bin/Archi \
+          --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath ([ webkitgtk ])} \
+          --prefix PATH : ${jdk}/bin
+      ''
+    else
+      ''
+        mkdir -p "$out/Applications"
+        mv Archi.app "$out/Applications/"
+      '';
+
+  passthru.updateScript = ./update.sh;
+
+  passthru.tests = { inherit (nixosTests) archi; };
+
+  meta = with lib; {
+    description = "ArchiMate modelling toolkit";
+    longDescription = ''
+      Archi is an open source modelling toolkit to create ArchiMate
+      models and sketches.
+    '';
+    homepage = "https://www.archimatetool.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mit;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ earldouglas paumr ];
+    mainProgram = "Archi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/archi/update.sh b/nixpkgs/pkgs/tools/misc/archi/update.sh
new file mode 100755
index 000000000000..07d488637945
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/archi/update.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq coreutils common-updater-scripts
+
+latestVersion=$(curl "https://api.github.com/repos/archimatetool/archi/tags" | jq -r '.[0].name' | tail -c +9)
+currentVersion=$(nix-instantiate --eval -E "with import ./. {}; archi.version or (lib.getVersion archi)" | tr -d '"')
+
+echo "latest  version: $latestVersion"
+echo "current version: $currentVersion"
+
+if [[ "$latestVersion" == "$currentVersion" ]]; then
+    echo "package is up-to-date"
+    exit 0
+fi
+
+for i in \
+    "aarch64-darwin Archi-Mac-Silicon-$latestVersion.dmg" \
+    "x86_64-darwin Archi-Mac-$latestVersion.dmg" \
+    "x86_64-linux Archi-Linux64-$latestVersion.tgz"
+do
+    set -- $i
+    prefetch=$(nix-prefetch-url https://www.archimatetool.com/downloads/archi/$latestVersion/$2)
+    hash=$(nix-hash --type sha256 --to-sri $prefetch)
+
+    update-source-version archi 0 "sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" --system=$1
+    update-source-version archi $latestVersion $hash --system=$1
+done
diff --git a/nixpkgs/pkgs/tools/misc/arp-scan/default.nix b/nixpkgs/pkgs/tools/misc/arp-scan/default.nix
new file mode 100644
index 000000000000..35d528598381
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/arp-scan/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libpcap, makeWrapper, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "arp-scan";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "royhills";
+    repo = "arp-scan";
+    rev = version;
+    sha256 = "sha256-BS+ItZd6cSMX92M6XGYrIeAiCB2iBdvbMvKdLfwawLQ=";
+  };
+
+  patches = [
+    ./remove-install-exec-hook.patch
+  ];
+
+  perlModules = with perlPackages; [
+    HTTPDate
+    HTTPMessage
+    LWP
+    TextCSV
+    URI
+  ];
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper ];
+  buildInputs = [ perlPackages.perl libpcap ];
+
+  postInstall = ''
+    for binary in get-{oui,iab}; do
+      wrapProgram "$out/bin/$binary" --set PERL5LIB "${perlPackages.makeFullPerlPath perlModules}"
+    done;
+  '';
+
+  meta = with lib; {
+    description = "ARP scanning and fingerprinting tool";
+    longDescription = ''
+      Arp-scan is a command-line tool that uses the ARP protocol to discover
+      and fingerprint IP hosts on the local network.
+    '';
+    homepage = "https://github.com/royhills/arp-scan/wiki/arp-scan-User-Guide";
+    license = licenses.gpl3;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ bjornfor mikoim r-burns ];
+    mainProgram = "arp-scan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/arp-scan/remove-install-exec-hook.patch b/nixpkgs/pkgs/tools/misc/arp-scan/remove-install-exec-hook.patch
new file mode 100644
index 000000000000..38421400384c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/arp-scan/remove-install-exec-hook.patch
@@ -0,0 +1,24 @@
+diff --git a/Makefile.am b/Makefile.am
+index c02e1cc..0dd6321 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -29,19 +29,3 @@ arp-scan.1: arp-scan.1.dist Makefile
+ 	$(do_subst) < $(srcdir)/arp-scan.1.dist > arp-scan.1
+ get-oui.1: get-oui.1.dist Makefile
+ 	$(do_subst) < $(srcdir)/get-oui.1.dist > get-oui.1
+-# Install arp-scan with cap_net_raw if possible, otherwise SUID root
+-install-exec-hook:
+-	@if command -v setcap > /dev/null; then \
+-	if setcap cap_net_raw+p $(DESTDIR)$(bindir)/arp-scan$(EXEEXT); then \
+-	echo "setcap cap_net_raw+p $(DESTDIR)$(bindir)/arp-scan$(EXEEXT)"; \
+-	chmod u-s $(DESTDIR)$(bindir)/arp-scan$(EXEEXT); \
+-	else \
+-	echo "Setcap failed on $(DESTDIR)$(bindir)/arp-scan$(EXEEXT), falling back to setuid" >&2; \
+-	echo "chmod u+s $(DESTDIR)$(bindir)/arp-scan$(EXEEXT)";  \
+-	chmod u+s $(DESTDIR)$(bindir)/arp-scan$(EXEEXT);  \
+-	fi \
+-	else \
+-	echo "Setcap is not installed, falling back to setuid" >&2 ; \
+-	echo "chmod u+s $(DESTDIR)$(bindir)/arp-scan$(EXEEXT)" ;\
+-	chmod u+s $(DESTDIR)$(bindir)/arp-scan$(EXEEXT) ;\
+-	fi
diff --git a/nixpkgs/pkgs/tools/misc/as-tree/default.nix b/nixpkgs/pkgs/tools/misc/as-tree/default.nix
new file mode 100644
index 000000000000..f4c5eb1354de
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/as-tree/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "as-tree";
+  version = "unstable-2021-03-09";
+
+  src = fetchFromGitHub {
+    owner = "jez";
+    repo = pname;
+    rev = "0036c20f66795774eb9cda3ccbae6ca1e1c19444";
+    sha256 = "sha256-80yB89sKIuv7V68p0jEsi2hRdz+5CzE+4R0joRzO7Dk=";
+  };
+
+  cargoSha256 = "sha256-BLEVPKO2YwcKuM/rUeMuyE38phOrbq0e8cjqh1qmJjM=";
+
+  meta = with lib; {
+    description = "Print a list of paths as a tree of paths";
+    homepage = "https://github.com/jez/as-tree";
+    license = with licenses; [ blueOak100 ];
+    maintainers = with maintainers; [ jshholland ];
+    mainProgram = "as-tree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/asciinema-agg/Cargo.lock b/nixpkgs/pkgs/tools/misc/asciinema-agg/Cargo.lock
new file mode 100644
index 000000000000..a1feb20f9a47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asciinema-agg/Cargo.lock
@@ -0,0 +1,2062 @@
+# 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 = "agg"
+version = "1.4.3"
+dependencies = [
+ "anyhow",
+ "avt",
+ "clap 3.2.23",
+ "env_logger",
+ "fontdb",
+ "fontdue",
+ "gifski",
+ "imgref",
+ "log",
+ "reqwest",
+ "resvg",
+ "rgb",
+ "serde",
+ "serde_json",
+ "shellexpand",
+ "tiny-skia",
+ "usvg",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstream"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-wincon",
+ "concolor-override",
+ "concolor-query",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4"
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "avt"
+version = "0.8.0"
+source = "git+https://github.com/asciinema/avt.git?tag=v0.8.0#aaec6a11896551296d2f49078f432756e8a0529d"
+dependencies = [
+ "rgb",
+ "serde",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "3.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex 0.2.4",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap"
+version = "4.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3"
+dependencies = [
+ "clap_builder",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags",
+ "clap_lex 0.4.1",
+ "once_cell",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "concolor-override"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f"
+
+[[package]]
+name = "concolor-query"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "data-url"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d7439c3735f405729d52c3fbbe4de140eaf938a1fe47d227c27f8254d4302a5"
+
+[[package]]
+name = "dirs"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dece029acd3353e3a58ac2e3eb3c8d6c35827a892edc6cc4138ef9c33df46ecd"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04414300db88f70d74c5ff54e50f9e1d1737d9a5b90f53fcf2e95ca2a9ab554b"
+dependencies = [
+ "libc",
+ "redox_users",
+ "windows-sys",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fallible_collections"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9acf77205554f3cfeca94a4b910e159ad9824e8c2d164de02b3f12495cc1074d"
+dependencies = [
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.6.2",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "fontconfig-parser"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ab2e12762761366dcb876ab8b6e0cfa4797ddcd890575919f008b5ba655672a"
+dependencies = [
+ "roxmltree 0.18.0",
+]
+
+[[package]]
+name = "fontdb"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8131752b3f3b876a20f42b3d08233ad177d6e7ec6d18aaa6954489a201071be5"
+dependencies = [
+ "fontconfig-parser",
+ "log",
+ "memmap2",
+ "ttf-parser 0.17.1",
+]
+
+[[package]]
+name = "fontdue"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a62391ecb864cf12ed06b2af4eda2e609b97657950d6a8f06841b17726ab253"
+dependencies = [
+ "hashbrown 0.11.2",
+ "ttf-parser 0.15.2",
+]
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd"
+
+[[package]]
+name = "futures-io"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2"
+
+[[package]]
+name = "futures-task"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879"
+
+[[package]]
+name = "futures-util"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gif"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gif"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gif-dispose"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a40dfdf5be59e0cbbf77cb7c6a91a18ee6d398b70fc54ad900e2bcba1860cb50"
+dependencies = [
+ "gif 0.12.0",
+ "imgref",
+ "rgb",
+]
+
+[[package]]
+name = "gifsicle"
+version = "1.93.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d2c35b9670c2a3313343ce54d00669ca18a8236fe727f52e0cf8c5a77acac07"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "gifski"
+version = "1.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd5981f4673c4da9f816e141d0baef1ca4f9008fc31573b2d19984c390c46442"
+dependencies = [
+ "clap 4.2.1",
+ "crossbeam-channel",
+ "crossbeam-utils",
+ "dunce",
+ "gif 0.12.0",
+ "gif-dispose",
+ "gifsicle",
+ "imagequant",
+ "imgref",
+ "lodepng",
+ "loop9",
+ "natord",
+ "num-traits",
+ "pbr",
+ "quick-error",
+ "resize",
+ "rgb",
+ "scopeguard",
+ "wild",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "h2"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+dependencies = [
+ "ahash 0.7.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash 0.8.3",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "imagequant"
+version = "4.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f332f82fc531b53cffa3181c14f7beb5b6c33932d68bb0c2fa4fd583553fca64"
+dependencies = [
+ "arrayvec",
+ "noisy_float",
+ "num_cpus",
+ "once_cell",
+ "rayon",
+ "rgb",
+ "thread_local",
+]
+
+[[package]]
+name = "imagesize"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df19da1e92fbfec043ca97d622955381b1f3ee72a180ec999912df31b1ccd951"
+
+[[package]]
+name = "imgref"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2cf49df1085dcfb171460e4592597b84abe50d900fb83efb6e41b20fefd6c2c"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+
+[[package]]
+name = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kurbo"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449"
+dependencies = [
+ "arrayvec",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d"
+
+[[package]]
+name = "lodepng"
+version = "3.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0ad39f75bbaa4b10bb6f2316543632a8046a5bcf9c785488d79720b21f044f8"
+dependencies = [
+ "crc32fast",
+ "fallible_collections",
+ "flate2",
+ "libc",
+ "rgb",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "loop9"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a703804431e5927454bcaf2b2a162595e95db931130c2728c18d050090f69940"
+dependencies = [
+ "imgref",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memmap2"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96590ba8f175222643a85693f33d26e9c8a015f599c216509b1a6894af675d34"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "natord"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308d96db8debc727c3fd9744aac51751243420e46edf401010908da7f8d5e57c"
+
+[[package]]
+name = "noisy_float"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978fe6e6ebc0bf53de533cd456ca2d9de13de13856eda1518a285d7705a213af"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "libc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+
+[[package]]
+name = "pbr"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed5827dfa0d69b6c92493d6c38e633bbaa5937c153d0d7c28bf12313f8c6d514"
+dependencies = [
+ "crossbeam-channel",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pico-args"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "png"
+version = "0.17.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f0e7f4c94ec26ff209cee506314212639d6c91b80afb82984819fafce9df01c"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "flate2",
+ "miniz_oxide 0.5.4",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rctree"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b42e27ef78c35d3998403c1d26f3efd9e135d3e5121b0a4845cc5cc27547f4f"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "reqwest"
+version = "0.11.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254"
+dependencies = [
+ "async-compression",
+ "base64 0.21.0",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-rustls",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "resize"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87e7bdfff05e26408cf8f82fe896ce3d7624f0c0b06c84b2f1009c50452ead41"
+dependencies = [
+ "fallible_collections",
+ "rgb",
+]
+
+[[package]]
+name = "resvg"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c115863f2d3621999cf187e318bc92b16402dfeff6a48c74df700d77381394c1"
+dependencies = [
+ "gif 0.11.4",
+ "jpeg-decoder",
+ "log",
+ "pico-args",
+ "png",
+ "rgb",
+ "svgfilters",
+ "svgtypes",
+ "tiny-skia",
+ "usvg",
+ "usvg-text-layout",
+]
+
+[[package]]
+name = "rgb"
+version = "0.8.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "roxmltree"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b9de9831a129b122e7e61f242db509fa9d0838008bf0b29bb0624669edfe48a"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "roxmltree"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8f595a457b6b8c6cda66a48503e92ee8d19342f905948f29c383200ec9eb1d8"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+dependencies = [
+ "base64 0.21.0",
+]
+
+[[package]]
+name = "rustybuzz"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab9e34ecf6900625412355a61bda0bd68099fe674de707c67e5e4aed2c05e489"
+dependencies = [
+ "bitflags",
+ "bytemuck",
+ "smallvec",
+ "ttf-parser 0.17.1",
+ "unicode-bidi-mirroring",
+ "unicode-ccc",
+ "unicode-general-category",
+ "unicode-script",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.159"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.159"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.11",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.95"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "shellexpand"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da03fa3b94cc19e3ebfc88c4229c49d8f08cdbd1228870a45f0ffdf84988e14b"
+dependencies = [
+ "dirs",
+]
+
+[[package]]
+name = "simplecss"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "strict-num"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9df65f20698aeed245efdde3628a6b559ea1239bbb871af1b6e3b58c413b2bd1"
+dependencies = [
+ "float-cmp",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "svgfilters"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "639abcebc15fdc2df179f37d6f5463d660c1c79cd552c12343a4600827a04bce"
+dependencies = [
+ "float-cmp",
+ "rgb",
+]
+
+[[package]]
+name = "svgtypes"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22975e8a2bac6a76bb54f898a6b18764633b00e780330f0b689f65afb3975564"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.11",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tiny-skia"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfef3412c6975196fdfac41ef232f910be2bb37b9dd3313a49a1a6bc815a5bdb"
+dependencies = [
+ "arrayref",
+ "arrayvec",
+ "bytemuck",
+ "cfg-if",
+ "png",
+ "tiny-skia-path",
+]
+
+[[package]]
+name = "tiny-skia-path"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4b5edac058fc98f51c935daea4d805b695b38e2f151241cad125ade2a2ac20d"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+ "strict-num",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "ttf-parser"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd"
+
+[[package]]
+name = "ttf-parser"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "375812fa44dab6df41c195cd2f7fecb488f6c09fbaafb62807488cefab642bff"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-bidi-mirroring"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694"
+
+[[package]]
+name = "unicode-ccc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1"
+
+[[package]]
+name = "unicode-general-category"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-script"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc"
+
+[[package]]
+name = "unicode-vo"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "usvg"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b5b7c2b30845b3348c067ca3d09e20cc6e327c288f0ca4c48698712abf432e9"
+dependencies = [
+ "base64 0.13.1",
+ "data-url",
+ "flate2",
+ "imagesize",
+ "kurbo",
+ "log",
+ "rctree",
+ "roxmltree 0.15.1",
+ "simplecss",
+ "siphasher",
+ "strict-num",
+ "svgtypes",
+]
+
+[[package]]
+name = "usvg-text-layout"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c9550670848028641bf976b06f5c520ffdcd6f00ee7ee7eb0853f78e2c249d7"
+dependencies = [
+ "fontdb",
+ "kurbo",
+ "log",
+ "rustybuzz",
+ "unicode-bidi",
+ "unicode-script",
+ "unicode-vo",
+ "usvg",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[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 = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+
+[[package]]
+name = "web-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "wild"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b116685a6be0c52f5a103334cbff26db643826c7b3735fc0a3ba9871310a74"
+dependencies = [
+ "glob",
+]
+
+[[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 = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "xmlparser"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d25c75bf9ea12c4040a97f829154768bbbce366287e2dc044af160cd79a13fd"
diff --git a/nixpkgs/pkgs/tools/misc/asciinema-agg/default.nix b/nixpkgs/pkgs/tools/misc/asciinema-agg/default.nix
new file mode 100644
index 000000000000..3b530eb28f6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asciinema-agg/default.nix
@@ -0,0 +1,33 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "agg";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "asciinema";
+    repo = "agg";
+    rev = "v${version}";
+    sha256 = "sha256-WCUYnveTWWQOzhIViMkSnyQ6vgLs5HDLWa/xvfZMh3A=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "avt-0.8.0" = "sha256-5IN8P/2UWJ2EmkbbTSGWECTqiD8TeOd8LgwLZ+W2z90=";
+    };
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "A command-line tool for generating animated GIF files from asciicast v2 files produced by asciinema terminal recorder";
+    homepage = "https://github.com/asciinema/agg";
+    changelog = "https://github.com/asciinema/agg/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "agg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/asciinema-scenario/default.nix b/nixpkgs/pkgs/tools/misc/asciinema-scenario/default.nix
new file mode 100644
index 000000000000..91102ab46eae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asciinema-scenario/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "asciinema-scenario";
+  version = "0.3.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-fnX5CIYLdFqi04PQPVIAYDGn+xXi016l8pPcIrYIhmQ=";
+  };
+
+  cargoSha256 = "sha256-8I3mPSJ5aXvQ88nh0SWyuTq9JSTktS2lQPrXlcvD66c=";
+
+  meta = with lib; {
+    description = "Create asciinema videos from a text file";
+    homepage = "https://github.com/garbas/asciinema-scenario/";
+    maintainers = with maintainers; [ garbas ];
+    license = with licenses; [ mit ];
+    mainProgram = "asciinema-scenario";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/asciinema/default.nix b/nixpkgs/pkgs/tools/misc/asciinema/default.nix
new file mode 100644
index 000000000000..ff8d6cd4b1e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asciinema/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, glibcLocales
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "asciinema";
+  version = "2.4.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "asciinema";
+    repo = "asciinema";
+    rev = "v${version}";
+    hash = "sha256-UegLwpJ+uc9cW3ozLQJsQBjIGD7+vzzwzQFRV5gmDmI=";
+  };
+
+  nativeBuildInputs = [
+    python3Packages.setuptools
+  ];
+
+  postPatch = ''
+    substituteInPlace tests/pty_test.py \
+      --replace "python3" "${python3Packages.python}/bin/python"
+  '';
+
+  nativeCheckInputs = [
+    glibcLocales
+    python3Packages.nose
+  ];
+
+  checkPhase = ''
+    LC_ALL=en_US.UTF-8 nosetests -v tests/config_test.py
+  '';
+
+  meta = {
+    description = "Terminal session recorder and the best companion of asciinema.org";
+    homepage = "https://asciinema.org/";
+    license = with lib.licenses; [ gpl3Plus ];
+    maintainers = with lib.maintainers; [ eclairevoyant ];
+    platforms = lib.platforms.all;
+    mainProgram = "asciinema";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/asdf-vm/default.nix b/nixpkgs/pkgs/tools/misc/asdf-vm/default.nix
new file mode 100644
index 000000000000..c9b7f27c42b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/asdf-vm/default.nix
@@ -0,0 +1,86 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, installShellFiles, bash, curl, git, writeScript }:
+
+let
+  asdfReshimFile = writeScript "asdf-reshim" ''
+#!/usr/bin/env bash
+
+# asdf-vm create "shim" file like this:
+#
+#    exec $ASDF_DIR/bin/asdf exec "node" "$@"
+#
+# So we should reshim all installed versions every time shell initialized,
+# because $out always change
+
+asdfDir="''${ASDF_DIR:-$HOME/.asdf}"
+asdfDataDir="''${ASDF_DATA_DIR:-$HOME/.asdf}"
+
+prevAsdfDirFilePath="$asdfDataDir/.nix-prev-asdf-dir-path"
+
+if [ -r "$prevAsdfDirFilePath" ]; then
+  prevAsdfDir="$(cat "$prevAsdfDirFilePath")"
+else
+  prevAsdfDir=""
+fi
+
+if [ "$prevAsdfDir" != "$asdfDir" ]; then
+  rm -rf "$asdfDataDir"/shims
+  "$asdfDir"/bin/asdf reshim
+  echo "$asdfDir" > "$prevAsdfDirFilePath"
+fi
+  '';
+
+  asdfPrepareFile = writeScript "asdf-prepare" ''
+ASDF_DIR="@asdfDir@"
+
+source "$ASDF_DIR/asdf.sh"
+${asdfReshimFile}
+  '';
+in stdenv.mkDerivation rec {
+  pname = "asdf-vm";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "asdf-vm";
+    repo = "asdf";
+    rev = "v${version}";
+    sha256 = "sha256-DmwKzW0oHjokMxj2RMT4iogurEMKeAcl7MWlPTOqMmg=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    installShellFiles
+  ];
+
+  buildInputs = [
+    bash
+    curl
+    git
+  ];
+
+  installPhase = ''
+    mkdir -p $out/share/asdf-vm
+    cp -r . $out/share/asdf-vm
+
+    mkdir -p $out/etc/profile.d
+    substitute ${asdfPrepareFile} $out/etc/profile.d/asdf-prepare.sh \
+      --replace "@asdfDir@" "$out/share/asdf-vm"
+
+    mkdir -p $out/bin
+    makeWrapper $out/share/asdf-vm/bin/asdf $out/bin/asdf \
+      --set ASDF_DIR $out/share/asdf-vm
+
+    installShellCompletion --cmd asdf \
+      --zsh completions/_asdf \
+      --fish completions/asdf.fish \
+      --bash completions/asdf.bash
+  '';
+
+  meta = with lib; {
+    description = "Extendable version manager with support for Ruby, Node.js, Erlang & more";
+    homepage = "https://asdf-vm.com/";
+    license = licenses.mit;
+    maintainers = [ maintainers.c4605 ];
+    mainProgram = "asdf";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/askalono/default.nix b/nixpkgs/pkgs/tools/misc/askalono/default.nix
new file mode 100644
index 000000000000..3b9a0c9633e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/askalono/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "askalono";
+  version = "0.4.6";
+
+  src = fetchCrate {
+    pname = "askalono-cli";
+    inherit version;
+    hash = "sha256-7l5bHSsmuMoHbbOI3TAYFeHwD3Y62JvfrrXZa08V3+U=";
+  };
+
+  cargoHash = "sha256-OkN8V37GApJvremRJlWG3HSpWgMC17Ge8JMTiQVoc/g=";
+
+  meta = with lib; {
+    description = "A tool to detect open source licenses from texts";
+    homepage = "https://github.com/jpeddicord/askalono";
+    changelog = "https://github.com/jpeddicord/askalono/blob/${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "askalono";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aspcud/default.nix b/nixpkgs/pkgs/tools/misc/aspcud/default.nix
new file mode 100644
index 000000000000..cd290d5e085e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aspcud/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, boost
+, catch2
+, cmake
+, clingo
+, re2c
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.9.6";
+  pname = "aspcud";
+
+  src = fetchFromGitHub {
+    owner = "potassco";
+    repo = "aspcud";
+    rev = "v${version}";
+    hash = "sha256-PdRfpmH7zF5dn+feoijtzdSUjaYhjHwyAUfuYoWCL9E=";
+  };
+
+  postPatch = ''
+    cp ${catch2}/include/catch2/catch.hpp libcudf/tests/catch.hpp
+  '';
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost clingo re2c ];
+
+  cmakeFlags = [
+    "-DASPCUD_GRINGO_PATH=${clingo}/bin/gringo"
+    "-DASPCUD_CLASP_PATH=${clingo}/bin/clasp"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Solver for package problems in CUDF format using ASP";
+    homepage = "https://potassco.org/aspcud/";
+    platforms = platforms.all;
+    maintainers = [ maintainers.hakuch ];
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/astronomer/default.nix b/nixpkgs/pkgs/tools/misc/astronomer/default.nix
new file mode 100644
index 000000000000..fb10f428967b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/astronomer/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "astronomer";
+  version = "1.1.3";
+
+  src = fetchFromGitHub {
+    owner = "Ullaakut";
+    repo = "astronomer";
+    rev = "v${version}";
+    hash = "sha256-4hUfJI2BRZl3Trk8F2qLZAyA57kq0oW9/e13atj/BVg=";
+  };
+
+  vendorHash = "sha256-EOtpZPIrAVMPIZGnkZoNs7ovaR7Ts3dJsFLXClIoNVI=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A tool to detect illegitimate stars from bot accounts on GitHub projects";
+    homepage = "https://github.com/Ullaakut/astronomer";
+    changelog = "https://github.com/Ullaakut/astronomer/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "astronomer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/autojump/default.nix b/nixpkgs/pkgs/tools/misc/autojump/default.nix
new file mode 100644
index 000000000000..977e339d7ef5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autojump/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "autojump";
+  version = "22.5.3";
+
+  src = fetchFromGitHub {
+    owner = "wting";
+    repo = "autojump";
+    rev = "release-v${version}";
+    sha256 = "1rgpsh70manr2dydna9da4x7p8ahii7dgdgwir5fka340n1wrcws";
+  };
+
+  buildInputs = [ python3 ];
+  nativeBuildInputs = [ python3 ];
+  dontBuild = true;
+  strictDeps = true;
+
+  installPhase = ''
+    python ./install.py -d "$out" -p "" -z "$out/share/zsh/site-functions/"
+
+    chmod +x "$out/etc/profile.d/autojump.sh"
+    install -Dt "$out/share/bash-completion/completions/" -m444 "$out/share/autojump/autojump.bash"
+    install -Dt "$out/share/fish/vendor_conf.d/" -m444 "$out/share/autojump/autojump.fish"
+    install -Dt "$out/share/zsh/site-functions/" -m444 "$out/share/autojump/autojump.zsh"
+  '';
+
+  meta = with lib; {
+    description = "A `cd' command that learns";
+    mainProgram = "autojump";
+    longDescription = ''
+      One of the most used shell commands is “cd”.  A quick survey
+      among my friends revealed that between 10 and 20% of all
+      commands they type are actually cd commands! Unfortunately,
+      jumping from one part of your system to another with cd
+      requires to enter almost the full path, which isn’t very
+      practical and requires a lot of keystrokes.
+
+      Autojump is a faster way to navigate your filesystem.  It
+      works by maintaining a database of the directories you use the
+      most from the command line.  The jstat command shows you the
+      current contents of the database.  You need to work a little
+      bit before the database becomes usable.  Once your database
+      is reasonably complete, you can “jump” to a directory by
+      typing "j dirspec", where dirspec is a few characters of the
+      directory you want to jump to.  It will jump to the most used
+      directory whose name matches the pattern given in dirspec.
+
+      Autojump supports tab-completion.
+    '';
+    homepage = "https://github.com/wting/autojump";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ domenkozar yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/automirror/default.nix b/nixpkgs/pkgs/tools/misc/automirror/default.nix
new file mode 100644
index 000000000000..457303c6bc26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/automirror/default.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchFromGitHub, git, ronn}:
+
+stdenv.mkDerivation rec {
+  pname = "automirror";
+  version = "49";
+
+  src = fetchFromGitHub {
+    owner = "schlomo";
+    repo = "automirror";
+    rev = "v${version}";
+    sha256 = "1syyf7dcm8fbyw31cpgmacg80h7pg036dayaaf0svvdsk0hqlsch";
+  };
+
+  patchPhase = "sed -i s#/usr##g Makefile";
+
+  buildInputs = [ git ronn ];
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/schlomo/automirror";
+    description = "Automatic Display Mirror";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    mainProgram = "automirror";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/autorandr/0001-don-t-use-sys.executable.patch b/nixpkgs/pkgs/tools/misc/autorandr/0001-don-t-use-sys.executable.patch
new file mode 100644
index 000000000000..81879a8f834b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autorandr/0001-don-t-use-sys.executable.patch
@@ -0,0 +1,33 @@
+From fdcc2f01441ec25104456022e6f8d3120709cede Mon Sep 17 00:00:00 2001
+From: Romanos Skiadas <rom.skiad@gmail.com>
+Date: Tue, 28 Jun 2022 06:16:10 +0300
+Subject: [PATCH] don't use sys.executable
+
+This is required for forking self in a nixpkgs environment,
+where arandr might be wrapped. In that case, the actual arandr command
+will be a bash script, not python.
+There is no real reason to keep this around, nixpkgs properly sets the
+interpreter in the shebang anyway.
+---
+ autorandr.py | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+diff --git autorandr.py autorandr.py
+index 35c15f6..1e84a2f 100755
+--- a/autorandr.py
++++ b/autorandr.py
+@@ -1192,10 +1192,7 @@ def dispatch_call_to_sessions(argv):
+             os.chdir(pwent.pw_dir)
+             os.environ.clear()
+             os.environ.update(process_environ)
+-            if sys.executable != "" and sys.executable != None:
+-                os.execl(sys.executable, sys.executable, autorandr_binary, *argv[1:])
+-            else:
+-                os.execl(autorandr_binary, autorandr_binary, *argv[1:])
++            os.execl(autorandr_binary, autorandr_binary, *argv[1:])
+             sys.exit(1)
+         os.waitpid(child_pid, 0)
+ 
+-- 
+2.36.1
+
diff --git a/nixpkgs/pkgs/tools/misc/autorandr/default.nix b/nixpkgs/pkgs/tools/misc/autorandr/default.nix
new file mode 100644
index 000000000000..cc196de6230b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autorandr/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, python3
+, fetchFromGitHub
+, systemd
+, xrandr
+, installShellFiles
+, desktop-file-utils
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "autorandr";
+  version = "1.14";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "phillipberndt";
+    repo = "autorandr";
+    rev = "refs/tags/${version}";
+    hash = "sha256-Ru3nQF0DB98rKSew6QtxAZQEB/9nVlIelNX3M7bNYHk=";
+  };
+
+  nativeBuildInputs = [ installShellFiles desktop-file-utils ];
+  propagatedBuildInputs = with python3.pkgs; [ packaging ];
+
+  buildPhase = ''
+    substituteInPlace autorandr.py \
+      --replace 'os.popen("xrandr' 'os.popen("${xrandr}/bin/xrandr' \
+      --replace '["xrandr"]' '["${xrandr}/bin/xrandr"]'
+  '';
+
+  patches = [ ./0001-don-t-use-sys.executable.patch ];
+
+  outputs = [ "out" "man" ];
+
+  installPhase = ''
+    runHook preInstall
+    make install TARGETS='autorandr' PREFIX=$out
+
+    # zsh completions exist but currently have no make target, use
+    # installShellCompletions for both
+    # see https://github.com/phillipberndt/autorandr/issues/197
+    installShellCompletion --cmd autorandr \
+        --bash contrib/bash_completion/autorandr \
+        --zsh contrib/zsh_completion/_autorandr \
+        --fish contrib/fish_copletion/autorandr.fish
+    # In the line above there's a typo that needs to be fixed in the next
+    # release
+
+    make install TARGETS='autostart_config' PREFIX=$out DESTDIR=$out
+
+    make install TARGETS='manpage' PREFIX=$man
+
+    ${if systemd != null then ''
+      make install TARGETS='systemd udev' PREFIX=$out DESTDIR=$out \
+        SYSTEMD_UNIT_DIR=/lib/systemd/system \
+        UDEV_RULES_DIR=/etc/udev/rules.d
+      substituteInPlace $out/etc/udev/rules.d/40-monitor-hotplug.rules \
+        --replace /bin/systemctl "/run/current-system/systemd/bin/systemctl"
+    '' else ''
+      make install TARGETS='pmutils' DESTDIR=$out \
+        PM_SLEEPHOOKS_DIR=/lib/pm-utils/sleep.d
+      make install TARGETS='udev' PREFIX=$out DESTDIR=$out \
+        UDEV_RULES_DIR=/etc/udev/rules.d
+    ''}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/phillipberndt/autorandr/";
+    description = "Automatically select a display configuration based on connected devices";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ coroa ];
+    platforms = platforms.unix;
+    mainProgram = "autorandr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/autorevision/default.nix b/nixpkgs/pkgs/tools/misc/autorevision/default.nix
new file mode 100644
index 000000000000..f0d979769380
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/autorevision/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, asciidoc, libxml2, docbook_xml_dtd_45, libxslt
+, docbook_xsl, diffutils, coreutils, gnugrep, gnused
+}:
+
+stdenv.mkDerivation rec {
+  pname = "autorevision";
+  version = "1.22";
+
+  src = fetchurl {
+    url = "https://github.com/Autorevision/autorevision/releases/download/v%2F${version}/autorevision-${version}.tgz";
+    sha256 = "sha256-3ktLVC73m2xddq5BhxVKw/FJd6pZ5RVb7fv29dxUoRE=";
+  };
+
+  buildInputs = [
+    asciidoc libxml2 docbook_xml_dtd_45 libxslt docbook_xsl
+  ];
+
+  installFlags = [ "prefix=$(out)" ];
+
+  postInstall = ''
+    sed -e "s|\<cmp\>|${diffutils}/bin/cmp|g" \
+        -e "s|\<cat\>|${coreutils}/bin/cat|g" \
+        -e "s|\<grep\>|${gnugrep}/bin/grep|g" \
+        -e "s|\<sed\>|${gnused}/bin/sed|g" \
+        -e "s|\<tee\>|${coreutils}/bin/tee|g" \
+        -i "$out/bin/autorevision"
+  '';
+
+  meta = with lib; {
+    description = "Extracts revision metadata from your VCS repository";
+    homepage = "https://autorevision.github.io/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "autorevision";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix b/nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix
new file mode 100644
index 000000000000..9b03e2dd1bdb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/aws-mturk-clt/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "aws-mturk-clt";
+  version = "1.3.0";
+
+  src = fetchurl {
+    url = "https://mturk.s3.amazonaws.com/CLTSource/aws-mturk-clt-${version}.tar.gz";
+    sha256 = "00yyc7k3iygg83cknv9i2dsaxwpwzdkc8a2l9j56lg999hw3mqm3";
+  };
+
+  installPhase =
+    ''
+      mkdir -p $out
+      cp -prvd bin $out/
+
+      for i in $out/bin/*.sh; do
+        sed -i "$i" -e "s|^MTURK_CMD_HOME=.*|MTURK_CMD_HOME=$out\nexport JAVA_HOME=${jre}|"
+      done
+
+      mkdir -p $out/lib
+      cp -prvd lib/* $out/lib/
+    ''; # */
+
+  meta = {
+    homepage = "https://requester.mturk.com/developer";
+    description = "Command line tools for interacting with the Amazon Mechanical Turk";
+    license = lib.licenses.amazonsl;
+
+    longDescription =
+      ''
+        The Amazon Mechanical Turk is a crowdsourcing marketplace that
+        allows users (“requesters”) to submit tasks to be performed by
+        other humans (“workers”) for a small fee.  This package
+        contains command-line tools for submitting tasks, querying
+        results, and so on.
+
+        The command-line tools expect a file
+        <filename>mturk.properties<filename> in the current directory,
+        which should contain the following:
+
+        <screen>
+        access_key=[insert your access key here]
+        secret_key=[insert your secret key here]
+        service_url=http://mechanicalturk.amazonaws.com/?Service=AWSMechanicalTurkRequester
+        </screen>
+      '';
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/backdown/default.nix b/nixpkgs/pkgs/tools/misc/backdown/default.nix
new file mode 100644
index 000000000000..e578b1ab4295
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/backdown/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "backdown";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "Canop";
+    repo = "backdown";
+    rev = "v${version}";
+    hash = "sha256-w9EdDSGqmHRLXwx5qFo0BngKATKtQsieMt6dPgfOrQ0=";
+  };
+
+  cargoHash = "sha256-BOwhXq/xVuk3KylL3KeIkiIG3SXVASFiYkUgKJhMzuU=";
+
+  meta = with lib; {
+    description = "A file deduplicator";
+    homepage = "https://github.com/Canop/backdown";
+    changelog = "https://github.com/Canop/backdown/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "backdown";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/balanceofsatoshis/default.nix b/nixpkgs/pkgs/tools/misc/balanceofsatoshis/default.nix
new file mode 100644
index 000000000000..b1b17e02366b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/balanceofsatoshis/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, installShellFiles
+, python3
+}:
+
+buildNpmPackage rec {
+  pname = "balanceofsatoshis";
+  version = "15.8.15";
+
+  src = fetchFromGitHub {
+    owner = "alexbosworth";
+    repo = "balanceofsatoshis";
+    rev = "v${version}";
+    hash = "sha256-8GWITeFn7ELUH7bxcNlmQvgperQutBwVUhp2yjeEWrM=";
+  };
+
+  npmDepsHash = "sha256-lTXv4pEjrzcOK68RO1K007r7dCbAyc45G8Oy8V3XLts=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    python3
+  ];
+
+  dontNpmBuild = true;
+
+  npmFlags = [ "--ignore-scripts" ];
+
+  postInstall = ''
+    installShellCompletion --cmd bos \
+        --bash <($out/bin/bos completion bash) \
+        --zsh <($out/bin/bos completion zsh) \
+        --fish <($out/bin/bos completion fish)
+  '';
+
+  meta = {
+    changelog = "https://github.com/alexbosworth/balanceofsatoshis/blob/${src.rev}/CHANGELOG.md";
+    description = "Tool for working with the balance of your satoshis on LND";
+    homepage = "https://github.com/alexbosworth/balanceofsatoshis";
+    license = lib.licenses.mit;
+    mainProgram = "bos";
+    maintainers = with lib.maintainers; [ mmilata ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bandwidth/default.nix b/nixpkgs/pkgs/tools/misc/bandwidth/default.nix
new file mode 100644
index 000000000000..9a34442b2210
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bandwidth/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, fetchurl, nasm }:
+
+let
+  inherit (stdenv.hostPlatform.parsed.cpu) bits;
+  arch = "bandwidth${toString bits}";
+in
+stdenv.mkDerivation rec {
+  pname = "bandwidth";
+  version = "1.11.2d";
+
+  src = fetchurl {
+    url = "https://zsmith.co/archives/${pname}-${version}.tar.gz";
+    hash = "sha256-7IrNiCXKf1vyRGl73Ccu3aYMqPVc4PpEr6lnSqIa4Q8=";
+  };
+
+  postPatch = ''
+    sed -i 's,ar ,$(AR) ,g' OOC/Makefile
+    # Remove unnecessary -m32 for 32-bit targets
+    sed -i 's,-m32,,g' OOC/Makefile
+    # Replace arm64 with aarch64
+    sed -i 's#,arm64#,aarch64#g' Makefile
+    # Fix wrong comment character
+    sed -i 's,# 32,; 32,g' routines-x86-32bit.asm
+    # Fix missing symbol exports for macOS clang
+    echo global _VectorToVector128 >> routines-x86-64bit.asm
+    echo global _VectorToVector256 >> routines-x86-64bit.asm
+    # Fix unexpected token on macOS
+    sed -i '/.section .note.GNU-stack/d' *-64bit.asm
+    sed -i '/.section code/d' *-arm-64bit.asm
+    sed -i 's#-Wl,-z,noexecstack##g' Makefile-arm64
+  '';
+
+  nativeBuildInputs = [ nasm ];
+
+  buildFlags = [
+    "AR=${stdenv.cc.targetPrefix}ar"
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "ARM_AS=${stdenv.cc.targetPrefix}as"
+    "ARM_CC=$(CC)"
+    "UNAMEPROC=${stdenv.hostPlatform.parsed.cpu.name}"
+    "UNAMEMACHINE=${stdenv.hostPlatform.parsed.cpu.name}"
+    arch
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${arch} $out/bin/bandwidth
+  '';
+
+  meta = with lib; {
+    homepage = "https://zsmith.co/bandwidth.html";
+    description = "Artificial benchmark for identifying weaknesses in the memory subsystem";
+    license = licenses.gpl2Plus;
+    platforms = platforms.x86 ++ platforms.arm ++ platforms.aarch64;
+    maintainers = with maintainers; [ r-burns ];
+    mainProgram = "bandwidth";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/barman/default.nix b/nixpkgs/pkgs/tools/misc/barman/default.nix
new file mode 100644
index 000000000000..b4bf50437218
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/barman/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "barman";
+  version = "3.10.0";
+
+  src = fetchFromGitHub {
+    owner = "EnterpriseDB";
+    repo = pname;
+    rev = "refs/tags/release/${version}";
+    hash = "sha256-NcDW1SLeP2BVH+TQp1M03Otg75axSFXfwQzlEJ1JOxo=";
+  };
+
+  patches = [
+    ./unwrap-subprocess.patch
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    mock
+    python-snappy
+    google-cloud-storage
+    pytestCheckHook
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    argcomplete
+    azure-identity
+    azure-storage-blob
+    boto3
+    psycopg2
+    python-dateutil
+  ];
+
+  disabledTests = [
+    # Assertion error
+    "test_help_output"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # FsOperationFailed
+    "test_get_file_mode"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.pgbarman.org/";
+    description = "Backup and Recovery Manager for PostgreSQL";
+    changelog = "https://github.com/EnterpriseDB/barman/blob/release/${version}/NEWS";
+    maintainers = with maintainers; [ freezeboy ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/barman/unwrap-subprocess.patch b/nixpkgs/pkgs/tools/misc/barman/unwrap-subprocess.patch
new file mode 100644
index 000000000000..7dfd6529a293
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/barman/unwrap-subprocess.patch
@@ -0,0 +1,30 @@
+--- a/barman/command_wrappers.py
++++ b/barman/command_wrappers.py
+@@ -1144,5 +1144,5 @@
+         # * pass the current configuration file with -c
+         # * set it quiet with -q
+-        self.command = [sys.executable, command, "-c", config, "-q", subcommand]
++        self.command = [command, "-c", config, "-q", subcommand]
+         self.keep_descriptors = keep_descriptors
+         # Handle args for the sub-command (like the server name)
+
+--- a/tests/test_command_wrappers.py
++++ a/tests/test_command_wrappers.py
+@@ -1595,5 +1595,4 @@
+         )
+         assert subprocess.command == [
+-            sys.executable,
+             sys.argv[0],
+             "-c",
+@@ -1622,5 +1621,4 @@
+         )
+         assert subprocess.command == [
+-            sys.executable,
+             "path/to/barman",
+             "-c",
+@@ -1644,5 +1642,4 @@
+ 
+         command = [
+-            sys.executable,
+             "path/to/barman",
+             "-c",
diff --git a/nixpkgs/pkgs/tools/misc/bartib/default.nix b/nixpkgs/pkgs/tools/misc/bartib/default.nix
new file mode 100644
index 000000000000..0719f8a168bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bartib/default.nix
@@ -0,0 +1,32 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bartib";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "nikolassv";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-eVLacxKD8seD8mxVN1D3HhKZkIDXsEsSisZnFbmhpSk=";
+  };
+
+  cargoSha256 = "sha256-s/oGv7/0LgNpdGu6dnvvbxDgFDvcvcHL01dSPxhMVWE=";
+  preConfigure = ''
+    cargo metadata --offline
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd bartib --bash misc/bartibCompletion.sh
+  '';
+
+  meta = with lib; {
+    description = "A simple timetracker for the command line";
+    homepage = "https://github.com/nikolassv/bartib";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "bartib";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/basez/default.nix b/nixpkgs/pkgs/tools/misc/basez/default.nix
new file mode 100644
index 000000000000..e7fe906836e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/basez/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl } :
+
+stdenv.mkDerivation rec {
+  pname = "basez";
+  version = "1.6.2";
+
+  src = fetchurl {
+    url = "http://www.quarkline.net/basez/download/basez-${version}.tar.gz";
+    sha256 = "sha256-Kp+CFIh5HCdj7wEgx1xD3IPdFlZ7fEFvMDMYif1ZiTc=";
+  };
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Base 16/32/64 encode/decode data to standard output";
+    longDescription = ''
+        Encode  data into/decode data from base16, base32, base32hex, base64 or
+        base64url stream per RFC 4648;  MIME  base64  Content-Transfer-Encoding
+        per RFC 2045; or PEM Printable Encoding per RFC 1421.
+    '';
+    homepage = "http://www.quarkline.net/basez/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.oaksoaj ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bash_unit/default.nix b/nixpkgs/pkgs/tools/misc/bash_unit/default.nix
new file mode 100644
index 000000000000..ebf7d6916b32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bash_unit/default.nix
@@ -0,0 +1,52 @@
+{ fetchFromGitHub
+, lib, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bash_unit";
+  version = "2.3.1";
+
+  src = fetchFromGitHub {
+    owner = "pgrange";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-kd5h12yjzvR/RBE/IjVXNSyjcf+rz6B2eoO8w2jiaps=";
+  };
+
+  patchPhase = ''
+    runHook prePatch
+
+    patchShebangs bash_unit
+
+    for t in tests/test_*; do
+      chmod +x "$t" # make test file visible to `patchShebangs`
+      patchShebangs "$t"
+      chmod -x "$t"
+    done
+
+    runHook postPatch
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+
+    ./bash_unit ./tests/test_core.sh
+
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bash_unit $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Bash unit testing enterprise edition framework for professionals";
+    maintainers = with maintainers; [ pamplemousse ];
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    mainProgram = "bash_unit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bashcards/default.nix b/nixpkgs/pkgs/tools/misc/bashcards/default.nix
new file mode 100644
index 000000000000..bce5ab40e2dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bashcards/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bashcards";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "rpearce";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1rpqrh0022sbrjvd55a0jvpdqhhka5msf8dsz6adbbmxy3xzgdid";
+  };
+
+  dontBuild = true;
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man8
+    cp bashcards.8 $out/share/man/man8/
+    cp bashcards $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Practice flashcards in bash";
+    homepage = "https://github.com/rpearce/bashcards/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ rpearce ];
+    platforms = platforms.all;
+    mainProgram = "bashcards";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bashplotlib/default.nix b/nixpkgs/pkgs/tools/misc/bashplotlib/default.nix
new file mode 100644
index 000000000000..d35d9ebcbcc0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bashplotlib/default.nix
@@ -0,0 +1,23 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication {
+  pname = "bashplotlib";
+  version = "2021-03-31";
+
+  src = fetchFromGitHub {
+    owner = "glamp";
+    repo = "bashplotlib";
+    rev = "db4065cfe65c0bf7c530e0e8b9328daf9593ad74";
+    sha256 = "sha256-0S6mgy6k7CcqsDR1kE5xcXGidF1t061e+M+ZuP2Gk3c=";
+  };
+
+  # No tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/glamp/bashplotlib";
+    description = "Plotting in the terminal";
+    maintainers = with maintainers; [ dtzWill ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bat-extras/default.nix b/nixpkgs/pkgs/tools/misc/bat-extras/default.nix
new file mode 100644
index 000000000000..67fa9dcf4e90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bat-extras/default.nix
@@ -0,0 +1,155 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, bat
+# batdiff, batgrep, and batwatch
+, coreutils
+, getconf
+, less
+# tests
+, bash
+, zsh
+, fish
+# batgrep
+, ripgrep
+# prettybat
+, withShFmt ? shfmt != null, shfmt ? null
+, withPrettier ? nodePackages?prettier, nodePackages ? null
+, withClangTools ? clang-tools != null, clang-tools ? null
+, withRustFmt ? rustfmt != null, rustfmt ? null
+# batwatch
+, withEntr ? entr != null, entr ? null
+# batdiff
+, gitMinimal
+, withDelta ? delta != null, delta ? null
+# batman
+, util-linux
+}:
+
+let
+  # Core derivation that all the others are based on.
+  # This includes the complete source so the per-script derivations can run the tests.
+  core = stdenv.mkDerivation rec {
+    pname   = "bat-extras";
+    version = "2024.02.12";
+
+    src = fetchFromGitHub {
+      owner  = "eth-p";
+      repo   = "bat-extras";
+      rev    = "v${version}";
+      hash   = "sha256-EPDGQkwwxYFTJPJtwSkVrpBf27+VlMd/nqEkJupHlyA=";
+      fetchSubmodules = true;
+    };
+
+    # bat needs to be in the PATH during building so EXECUTABLE_BAT picks it up
+    nativeBuildInputs = [ bat ];
+
+    dontConfigure = true;
+
+    postPatch = ''
+      patchShebangs --build test.sh test/shimexec .test-framework/bin/best.sh
+    '';
+
+    buildPhase = ''
+      runHook preBuild
+      bash ./build.sh --minify=none --no-verify
+      runHook postBuild
+    '';
+
+    # Run the library tests as they don't have external dependencies
+    doCheck = true;
+    nativeCheckInputs = [ bash fish zsh ] ++ (lib.optionals stdenv.isDarwin [ getconf ]);
+    checkPhase = ''
+      runHook preCheck
+      # test list repeats suites. Unique them
+      declare -A test_suites
+      while read -r action arg _; do
+        [[ "$action" == "test_suite" && "$arg" == lib_* ]] &&
+        test_suites+=(["$arg"]=1)
+      done <<<"$(./test.sh --compiled --list --porcelain)"
+      (( ''${#test_suites[@]} != 0 )) || {
+        echo "Couldn't find any library test suites"
+        exit 1
+      }
+      ./test.sh --compiled $(printf -- "--suite %q\n" "''${!test_suites[@]}")
+      runHook postCheck
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      cp -a . $out
+      runHook postInstall
+    '';
+
+    # A few random files have shebangs. Don't patch them, they don't make it into the final output.
+    # The per-script derivations will go ahead and patch the files they actually install.
+    dontPatchShebangs = true;
+
+    meta = with lib; {
+      description = "Bash scripts that integrate bat with various command line tools";
+      homepage    = "https://github.com/eth-p/bat-extras";
+      license     = with licenses; [ mit ];
+      maintainers = with maintainers; [ bbigras lilyball ];
+      platforms   = platforms.all;
+    };
+  };
+  script =
+    name: # the name of the script
+    dependencies: # the tools we need to prefix onto PATH
+    stdenv.mkDerivation {
+      pname = name;
+      inherit (core) version;
+
+      src = core;
+
+      nativeBuildInputs = [ makeWrapper ];
+      # Make the dependencies available to the tests.
+      buildInputs = dependencies;
+
+      # Patch shebangs now because our tests rely on them
+      postPatch = ''
+        patchShebangs --host bin/${name}
+      '';
+
+      dontConfigure = true;
+      dontBuild = true; # we've already built
+
+      doCheck = true;
+      nativeCheckInputs = [ bat bash fish zsh ] ++ (lib.optionals stdenv.isDarwin [ getconf ]);
+      checkPhase = ''
+        runHook preCheck
+        bash ./test.sh --compiled --suite ${name}
+        runHook postCheck
+      '';
+
+      installPhase = ''
+        runHook preInstall
+        mkdir -p $out/bin
+        cp -p bin/${name} $out/bin/${name}
+      '' + lib.optionalString (dependencies != []) ''
+        wrapProgram $out/bin/${name} \
+          --prefix PATH : ${lib.makeBinPath dependencies}
+      '' + ''
+        runHook postInstall
+      '';
+
+      # We already patched
+      dontPatchShebangs = true;
+
+      meta = core.meta // {
+        mainProgram = name;
+      };
+    };
+  optionalDep = cond: dep:
+    assert cond -> dep != null;
+    lib.optional cond dep;
+in
+{
+  batdiff = script "batdiff" ([ less coreutils gitMinimal ] ++ optionalDep withDelta delta);
+  batgrep = script "batgrep" [ less coreutils ripgrep ];
+  batman = script "batman" (lib.optionals stdenv.isLinux [ util-linux ]);
+  batpipe = script "batpipe" [ less ];
+  batwatch = script "batwatch" ([ less coreutils ] ++ optionalDep withEntr entr);
+  prettybat = script "prettybat" ([]
+    ++ optionalDep withShFmt shfmt
+    ++ optionalDep withPrettier nodePackages.prettier
+    ++ optionalDep withClangTools clang-tools
+    ++ optionalDep withRustFmt rustfmt);
+}
diff --git a/nixpkgs/pkgs/tools/misc/bbe/default.nix b/nixpkgs/pkgs/tools/misc/bbe/default.nix
new file mode 100644
index 000000000000..58d099da4b06
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bbe/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv , fetchurl, autoreconfHook }:
+stdenv.mkDerivation rec {
+  pname = "bbe";
+  version = "0.2.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bbe-/${version}/bbe-${version}.tar.gz";
+    sha256 = "1nyxdqi4425sffjrylh7gl57lrssyk4018afb7mvrnd6fmbszbms";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  outputs = [ "out" "doc" ];
+
+  meta = with lib; {
+    description = "A sed-like editor for binary files";
+    homepage = "https://bbe-.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.hhm ];
+    mainProgram = "bbe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bc/cross-bc.patch b/nixpkgs/pkgs/tools/misc/bc/cross-bc.patch
new file mode 100644
index 000000000000..ba8857abb581
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bc/cross-bc.patch
@@ -0,0 +1,169 @@
+commit fdda59736ddc048cf38a2c7103f4f5d9eeaf995e
+Author: Ben Gamari <ben@smart-cactus.org>
+Date:   Tue Oct 17 10:51:34 2017 -0400
+
+    Try implementing cross-compilation
+
+diff --git a/bc/Makefile.am b/bc/Makefile.am
+index d9d412e..fdef633 100644
+--- a/bc/Makefile.am
++++ b/bc/Makefile.am
+@@ -17,6 +17,7 @@ MAINTAINERCLEANFILES = Makefile.in bc.c bc.h scan.c \
+ 
+ AM_CPPFLAGS = -I$(srcdir) -I$(srcdir)/../h
+ LIBBC = ../lib/libbc.a
++LIBBC_HOST = ../lib/libbc_host.a
+ LIBL = @LEXLIB@
+ LDADD = $(LIBBC) $(LIBL) @READLINELIB@
+ 
+@@ -29,12 +30,20 @@ $(PROGRAMS): libmath.h $(LIBBC)
+ scan.o: bc.h
+ global.o: libmath.h
++
++main_host.c : main.c
++	cp $< $@
+ 
+-fbcOBJ = main.o bc.o scan.o execute.o load.o storage.o util.o warranty.o
++fbcOBJ = $(addsuffix _host,main.o bc.o scan.o execute.o load.o storage.o util.o warranty.o)
++
++%.o_host : CC:=$(CC_FOR_BUILD)
++
++%.o_host : %.c
++	$(COMPILE) -c $(CFLAGS) $(INCLUDES) -o $@ $<
+ 
+-libmath.h: libmath.b $(fbcOBJ) $(LIBBC)
++libmath.h: libmath.b $(fbcOBJ) $(LIBBC_HOST)
+ 	echo '{0}' > libmath.h
+-	$(MAKE) global.o
+-	$(LINK) -o fbc $(fbcOBJ) global.o $(LIBBC) $(LIBL) $(READLINELIB) $(LIBS)
++	$(MAKE) global.o_host
++	$(CC_FOR_BUILD) -o fbc $(fbcOBJ) global.o_host $(LIBBC_HOST) $(LIBL) ${READLINELIB} $(LIBS)
+ 	./fbc -c $(srcdir)/libmath.b </dev/null >libmath.h
+ 	$(srcdir)/fix-libmath_h
+ 	rm -f ./fbc ./global.o
+diff --git a/configure.ac b/configure.ac
+index fc74573..5cabb73 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -20,6 +20,7 @@ m4_define([dc_version], 1.4.1)
+ 
+ AC_INIT([bc],[bc_version])
+ AC_CONFIG_SRCDIR(doc/bc.1)
++AC_CONFIG_MACRO_DIR([m4])
+ AM_INIT_AUTOMAKE([dist-bzip2])
+ AC_CONFIG_HEADERS(config.h)
+ 
+@@ -35,6 +36,7 @@ AC_DEFINE([DC_COPYRIGHT],
+ 	  [Define the dc copyright line.])
+ 
+ AC_PROG_CC
++AX_CC_FOR_BUILD
+ AC_USE_SYSTEM_EXTENSIONS
+ 
+ AM_PROG_LEX
+diff --git a/lib/Makefile.am b/lib/Makefile.am
+index ec4bf59..c670f5b 100644
+--- a/lib/Makefile.am
++++ b/lib/Makefile.am
+@@ -1,5 +1,5 @@
+ ## Process this file with automake to produce Makefile.in
+-noinst_LIBRARIES = libbc.a
++noinst_LIBRARIES = libbc.a libbc_host.a
+ 
+ AM_CPPFLAGS = -I. -I.. -I$(srcdir)/../h
+ 
+@@ -24,3 +24,11 @@ testmul: testmul.o number.o
+ 
+ specialnumber: newnumber.o
+ 	cp newnumber.o number.o
++
++%.o_host : CC:=$(CC_FOR_BUILD)
++%.o_host : %.c
++	$(COMPILE) -c $(CFLAGS) $(INCLUDES) -o $@ $<
++
++libbc_host.a : $(addsuffix _host,$(libbc_a_OBJECTS))
++	ar cru $@ $+
++	ranlib $@
+diff --git a/m4/cc_for_build.m4 b/m4/cc_for_build.m4
+new file mode 100644
+index 0000000..c62ffad
+--- /dev/null
++++ b/m4/cc_for_build.m4
+@@ -0,0 +1,77 @@
++# ===========================================================================
++#     https://www.gnu.org/software/autoconf-archive/ax_cc_for_build.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++#   AX_CC_FOR_BUILD
++#
++# DESCRIPTION
++#
++#   Find a build-time compiler. Sets CC_FOR_BUILD and EXEEXT_FOR_BUILD.
++#
++# LICENSE
++#
++#   Copyright (c) 2010 Reuben Thomas <rrt@sc3d.org>
++#   Copyright (c) 1999 Richard Henderson <rth@redhat.com>
++#
++#   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 <https://www.gnu.org/licenses/>.
++#
++#   As a special exception, the respective Autoconf Macro's copyright owner
++#   gives unlimited permission to copy, distribute and modify the configure
++#   scripts that are the output of Autoconf when processing the Macro. You
++#   need not follow the terms of the GNU General Public License when using
++#   or distributing such scripts, even though portions of the text of the
++#   Macro appear in them. The GNU General Public License (GPL) does govern
++#   all other use of the material that constitutes the Autoconf Macro.
++#
++#   This special exception to the GPL applies to versions of the Autoconf
++#   Macro released by the Autoconf Archive. When you make and distribute a
++#   modified version of the Autoconf Macro, you may extend this special
++#   exception to the GPL to apply to your modified version as well.
++
++#serial 3
++
++dnl Get a default for CC_FOR_BUILD to put into Makefile.
++AC_DEFUN([AX_CC_FOR_BUILD],
++[# Put a plausible default for CC_FOR_BUILD in Makefile.
++if test -z "$CC_FOR_BUILD"; then
++  if test "x$cross_compiling" = "xno"; then
++    CC_FOR_BUILD='$(CC)'
++  else
++    CC_FOR_BUILD=gcc
++  fi
++fi
++AC_SUBST(CC_FOR_BUILD)
++# Also set EXEEXT_FOR_BUILD.
++if test "x$cross_compiling" = "xno"; then
++  EXEEXT_FOR_BUILD='$(EXEEXT)'
++else
++  AC_CACHE_CHECK([for build system executable suffix], bfd_cv_build_exeext,
++    [rm -f conftest*
++     echo 'int main () { return 0; }' > conftest.c
++     bfd_cv_build_exeext=
++     ${CC_FOR_BUILD} -o conftest conftest.c 1>&5 2>&5
++     for file in conftest.*; do
++       case $file in
++       *.c | *.o | *.obj | *.ilk | *.pdb) ;;
++       *) bfd_cv_build_exeext=`echo $file | sed -e s/conftest//` ;;
++       esac
++     done
++     rm -f conftest*
++     test x"${bfd_cv_build_exeext}" = x && bfd_cv_build_exeext=no])
++  EXEEXT_FOR_BUILD=""
++  test x"${bfd_cv_build_exeext}" != xno && EXEEXT_FOR_BUILD=${bfd_cv_build_exeext}
++fi
++AC_SUBST(EXEEXT_FOR_BUILD)])dnl
diff --git a/nixpkgs/pkgs/tools/misc/bc/default.nix b/nixpkgs/pkgs/tools/misc/bc/default.nix
new file mode 100644
index 000000000000..e788fc53875f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bc/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, autoreconfHook, buildPackages
+, fetchurl, flex, readline, ed, texinfo
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bc";
+  version = "1.07.1";
+  src = fetchurl {
+    url = "mirror://gnu/bc/${pname}-${version}.tar.gz";
+    sha256 = "62adfca89b0a1c0164c2cdca59ca210c1d44c3ffc46daf9931cf4942664cb02a";
+  };
+
+  configureFlags = [ "--with-readline" ];
+
+  # As of 1.07 cross-compilation is quite complicated as the build system wants
+  # to build a code generator, bc/fbc, on the build machine.
+  patches = [ ./cross-bc.patch ];
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [
+    # Tools
+    autoreconfHook ed flex texinfo
+    # Libraries for build
+    buildPackages.readline buildPackages.ncurses
+  ];
+  buildInputs = [ readline flex ];
+
+  doCheck = true; # not cross
+
+  # Hack to make sure we never to the relaxation `$PATH` and hooks support for
+  # compatibility. This will be replaced with something clearer in a future
+  # masss-rebuild.
+  strictDeps = true;
+
+  meta = with lib; {
+    description = "GNU software calculator";
+    homepage = "https://www.gnu.org/software/bc/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bcunit/default.nix b/nixpkgs/pkgs/tools/misc/bcunit/default.nix
new file mode 100644
index 000000000000..14cf183f5878
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bcunit/default.nix
@@ -0,0 +1,27 @@
+{ cmake
+, fetchFromGitLab
+, lib, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bcunit";
+  version = "linphone-4.4.1";
+
+  nativeBuildInputs = [ cmake ];
+  src = fetchFromGitLab {
+    domain = "gitlab.linphone.org";
+    owner = "public";
+    group = "BC";
+    repo = pname;
+    rev = "c5eebcc7f794e9567d3c72d15d3f28bffe6bfd0f";
+    sha256 = "sha256-8DSfqHerx/V00SJjTSQaG9Rjqx330iG6sGivBDUvQfA=";
+  };
+
+  meta = with lib; {
+    description = "Belledonne Communications' fork of CUnit test framework. Part of the Linphone project";
+    homepage = "https://gitlab.linphone.org/BC/public/bcunit";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ raskin jluttine ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bdf2psf/default.nix b/nixpkgs/pkgs/tools/misc/bdf2psf/default.nix
new file mode 100644
index 000000000000..41caab53e2fe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bdf2psf/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, perl, dpkg }:
+
+stdenv.mkDerivation rec {
+  pname = "bdf2psf";
+  version = "1.226";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/c/console-setup/bdf2psf_${version}_all.deb";
+    sha256 = "sha256-MLNLeCgBzp2awt9ZJM2kaCWQhRnC6sSwm1fHlv3EwHo=";
+  };
+
+  nativeBuildInputs = [ dpkg ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  unpackPhase = ''
+    runHook preUnpack
+    dpkg-deb -x $src .
+    runHook postUnpack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    substituteInPlace usr/bin/bdf2psf --replace /usr/bin/perl "${perl}/bin/perl"
+    rm usr/share/doc/bdf2psf/changelog.gz
+    mv usr "$out"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "BDF to PSF converter";
+    homepage = "https://packages.debian.org/sid/bdf2psf";
+    longDescription = ''
+      Font converter to generate console fonts from BDF source fonts
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ rnhmjoj vrthra ];
+    platforms = platforms.all;
+    mainProgram = "bdf2psf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bdf2sfd/default.nix b/nixpkgs/pkgs/tools/misc/bdf2sfd/default.nix
new file mode 100644
index 000000000000..73a72ffeb61a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bdf2sfd/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "bdf2sfd";
+  version = "1.1.8";
+
+  src = fetchFromGitHub {
+    owner = "fcambus";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-+CPULpy3mqZv0QaXS4kKYWKjifibtcQt7unKGOUTSV0=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "BDF to SFD converter";
+    homepage = "https://github.com/fcambus/bdf2sfd";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "bdf2sfd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bdfresize/default.nix b/nixpkgs/pkgs/tools/misc/bdfresize/default.nix
new file mode 100644
index 000000000000..077b52430275
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bdfresize/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "bdfresize";
+  version = "1.5";
+
+  src = fetchurl {
+    url = "http://openlab.ring.gr.jp/efont/dist/tools/bdfresize/${pname}-${version}.tar.gz";
+    hash = "sha256-RAz8BiCgI35GNSwUoHdMqj8wWXWbCiDe/vyU6EkIl6Y=";
+  };
+
+  patches = [ ./remove-malloc-declaration.patch ];
+
+  meta = with lib; {
+    description = "Tool to resize BDF fonts";
+    homepage = "http://openlab.ring.gr.jp/efont/dist/tools/bdfresize/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ malte-v ];
+    mainProgram = "bdfresize";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bdfresize/remove-malloc-declaration.patch b/nixpkgs/pkgs/tools/misc/bdfresize/remove-malloc-declaration.patch
new file mode 100644
index 000000000000..c58888a4be2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bdfresize/remove-malloc-declaration.patch
@@ -0,0 +1,11 @@
+Remove an unneeded declaration of malloc so gcc doesn't complain.
+--- a/charresize.c
++++ b/charresize.c
+@@ -46,7 +46,6 @@ static int	bit[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
+ void
+ processChar(void)
+ {
+-  char	*malloc();
+   char	*srcimage;
+   int	*dstgray;
+ 
diff --git a/nixpkgs/pkgs/tools/misc/beats/default.nix b/nixpkgs/pkgs/tools/misc/beats/default.nix
new file mode 100644
index 000000000000..a8ad2436f08c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/beats/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "beats";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "j0hax";
+    repo = "beats";
+    rev = "v${version}";
+    sha256 = "1rdvsqrjpily74y8vwch711401585xckb4p41cfwrmj6vf44jhif";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" "CC=cc" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/j0hax/beats";
+    license = licenses.gpl3Only;
+    description = "Swatch Internet Time implemented as a C program";
+    platforms = platforms.all;
+    maintainers = [ maintainers.j0hax ];
+    mainProgram = "beats";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bepasty/default.nix b/nixpkgs/pkgs/tools/misc/bepasty/default.nix
new file mode 100644
index 000000000000..1e3f22642321
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bepasty/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+let
+  # bepasty 1.2 needs xstatic-font-awesome < 5, see
+  # https://github.com/bepasty/bepasty-server/issues/305
+  bepastyPython = python3.override {
+    self = bepastyPython;
+    packageOverrides = self: super: {
+      xstatic-font-awesome = super.xstatic-font-awesome.overridePythonAttrs(oldAttrs: rec {
+        version = "4.7.0.0";
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "sha256-4B+0gMqqfHlj3LMyikcA5jG+9gcNsOi2hYFtIg5oX2w=";
+        };
+      });
+    };
+  };
+in
+
+# We need to use buildPythonPackage here to get the PYTHONPATH build correctly.
+# This is needed for services.bepasty
+# https://github.com/NixOS/nixpkgs/pull/38300
+
+bepastyPython.pkgs.buildPythonPackage rec {
+  pname = "bepasty";
+  version = "1.2.1";
+  format = "pyproject";
+
+  propagatedBuildInputs = with bepastyPython.pkgs; [
+    flask
+    markupsafe
+    pygments
+    setuptools
+    xstatic
+    xstatic-asciinema-player
+    xstatic-bootbox
+    xstatic-bootstrap
+    xstatic-font-awesome
+    xstatic-jquery
+    xstatic-jquery-file-upload
+    xstatic-jquery-ui
+    xstatic-pygments
+  ];
+
+  buildInputs = with bepastyPython.pkgs; [ setuptools-scm ];
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-08cyr2AruGAfHAwHHS8WMfJh7DBKymaYyz4AxI/ubkE=";
+  };
+
+  nativeCheckInputs = with bepastyPython.pkgs; [
+    build
+    codecov
+    flake8
+    pytestCheckHook
+    pytest-cov
+    selenium
+    tox
+    twine
+  ];
+
+  disabledTestPaths = [
+    # Can be enabled when werkzeug is updated to >2.2, see #245145
+    # and https://github.com/bepasty/bepasty-server/pull/303
+    "src/bepasty/tests/test_rest_server.py"
+
+    # These require a web browser
+    "src/bepasty/tests/screenshots.py"
+    "src/bepasty/tests/test_website.py"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bepasty/bepasty-server";
+    description = "Binary pastebin server";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ aither64 makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/betterdiscord-installer/default.nix b/nixpkgs/pkgs/tools/misc/betterdiscord-installer/default.nix
new file mode 100644
index 000000000000..bb2d88a64e60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/betterdiscord-installer/default.nix
@@ -0,0 +1,30 @@
+{ appimageTools, lib, fetchurl }:
+let
+  pname = "betterdiscord-installer";
+  version = "1.0.0-beta";
+
+  src = fetchurl {
+    url = "https://github.com/BetterDiscord/Installer/releases/download/v${version}/Betterdiscord-Linux.AppImage";
+    sha256 = "103acb11qmvjmf6g9lgsfm5jyahfwfdqw0x9w6lmv1hzwbs26dsr";
+  };
+
+  appimageContents = appimageTools.extract { inherit pname version src; };
+in appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    install -m 444 -D ${appimageContents}/betterdiscord.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/betterdiscord.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "Installer for BetterDiscord";
+    homepage = "https://betterdiscord.app";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "betterdiscord-installer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/betterdiscordctl/default.nix b/nixpkgs/pkgs/tools/misc/betterdiscordctl/default.nix
new file mode 100644
index 000000000000..c2c935c0d981
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/betterdiscordctl/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenvNoCC, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "betterdiscordctl";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "bb010g";
+    repo = "betterdiscordctl";
+    rev = "v${version}";
+    sha256 = "0p321rfcihz2779sdd6qfgpxgk5yd53d33vq5pvb50dbdgxww0bc";
+  };
+
+  postPatch = ''
+    substituteInPlace betterdiscordctl \
+      --replace "DISABLE_SELF_UPGRADE=" "DISABLE_SELF_UPGRADE=yes"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin" "$out/share/doc/betterdiscordctl"
+    install -Dm744 betterdiscordctl $out/bin/betterdiscordctl
+    install -Dm644 README.md $out/share/doc/betterdiscordctl/README.md
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/betterdiscordctl --version
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/bb010g/betterdiscordctl";
+    description = "A utility for managing BetterDiscord on Linux";
+    license = licenses.mit;
+    mainProgram = "betterdiscordctl";
+    maintainers = with maintainers; [ ivar bb010g ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bfetch/default.nix b/nixpkgs/pkgs/tools/misc/bfetch/default.nix
new file mode 100644
index 000000000000..2d678da53233
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bfetch/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenvNoCC, fetchFromGitHub, bash }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "bfetch";
+  version = "unstable-2021-05-21";
+
+  src = fetchFromGitHub {
+    owner = "NNBnh";
+    repo = pname;
+    rev = "ef88e9d3f815e5074efc8ef4b7f32be6818130f2";
+    sha256 = "sha256-jS9zI8b+z3KbI+LeHFwIMJfEmAKSzO8HRZ2rk35hJCk=";
+  };
+
+  buildInputs = [ bash ];
+
+  postPatch = ''
+    patchShebangs --host bin/bfetch
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A SuperB general-purpose fetch displayer written in portable sh";
+    homepage = "https://github.com/NNBnh/bfetch";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ moni ];
+    mainProgram = "bfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bfr/default.nix b/nixpkgs/pkgs/tools/misc/bfr/default.nix
new file mode 100644
index 000000000000..5308d2098d5e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bfr/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "bfr";
+  version = "1.6";
+
+  src = fetchurl {
+    url = "http://www.sourcefiles.org/Utilities/Text_Utilities/bfr-${version}.tar.bz2";
+    sha256 = "0fadfssvj9klj4dq9wdrzys1k2a1z2j0p6kgnfgbjv0n1bq6h4cy";
+  };
+
+  patches =
+    [ (fetchurl {
+        url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-misc/bfr/files/bfr-1.6-perl.patch";
+        sha256 = "1pk9jm3c1qzs727lh0bw61w3qbykaqg4jblywf9pvq5bypk88qfj";
+      })
+    ];
+
+  buildInputs = [ perl ];
+
+  meta = with lib; {
+    description = "A general-purpose command-line pipe buffer";
+    license = lib.licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bfscripts/default.nix b/nixpkgs/pkgs/tools/misc/bfscripts/default.nix
new file mode 100644
index 000000000000..537cab8697a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bfscripts/default.nix
@@ -0,0 +1,63 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, python3
+}:
+
+let
+  # Most of the binaries are not really useful because they have hardcoded
+  # paths that only make sense when you're running the stock BlueField OS on
+  # your BlueField. These might be patched in the future with resholve
+  # (https://github.com/abathur/resholve). If there is one that makes sense
+  # without resholving it, it can simply be uncommented and will be included in
+  # the output.
+  binaries = [
+    # "bfacpievt"
+    # "bfbootmgr"
+    # "bfcfg"
+    # "bfcpu-freq"
+    # "bfdracut"
+    # "bffamily"
+    # "bfgrubcheck"
+    # "bfhcafw"
+    # "bfinst"
+    # "bfpxe"
+    # "bfrec"
+    "bfrshlog"
+    # "bfsbdump"
+    # "bfsbkeys"
+    # "bfsbverify"
+    # "bfver"
+    # "bfvcheck"
+    "mlx-mkbfb"
+    "bfup"
+  ];
+in
+stdenv.mkDerivation rec {
+  pname = "bfscripts";
+  version = "unstable-2023-05-15";
+
+  src = fetchFromGitHub {
+    owner = "Mellanox";
+    repo = pname;
+    rev = "1da79f3ece7cdf99b2571c00e8b14d2e112504a4";
+    hash = "sha256-pTubrnZKEFmtAj/omycFYeYwrCog39zBDEszoCrsQNQ=";
+  };
+
+  buildInputs = [
+    python3
+  ];
+
+  installPhase = ''
+    ${lib.concatStringsSep "\n" (map (b: "install -D ${b} $out/bin/${b}") binaries)}
+  '';
+
+  meta = with lib;
+    {
+      description = "Collection of scripts used for BlueField SoC system management";
+      homepage = "https://github.com/Mellanox/bfscripts";
+      license = licenses.bsd2;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [ nikstur ];
+    };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bibtex2html/default.nix b/nixpkgs/pkgs/tools/misc/bibtex2html/default.nix
new file mode 100644
index 000000000000..2e5ebd1e56a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bibtex2html/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, ocaml, perl }:
+
+stdenv.mkDerivation {
+  pname = "bibtex2html";
+  version = "1.99";
+
+  src = fetchurl {
+    url = "https://www.lri.fr/~filliatr/ftp/bibtex2html/bibtex2html-1.99.tar.gz";
+    sha256 = "07gzrs4lfrkvbn48cgn2gn6c7cx3jsanakkrb2irj0gmjzfxl96j";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ ocaml perl ];
+
+  meta = with lib; {
+    description = "A collection of tools for translating from BibTeX to HTML";
+    homepage = "https://www.lri.fr/~filliatr/bibtex2html/";
+    license = licenses.gpl2;
+    platforms = ocaml.meta.platforms or [];
+    maintainers = [ maintainers.scolobb ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bibtool/default.nix b/nixpkgs/pkgs/tools/misc/bibtool/default.nix
new file mode 100644
index 000000000000..f9de299c87b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bibtool/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "bibtool";
+  version = "2.68";
+
+  src = fetchurl {
+    url = "http://www.gerd-neugebauer.de/software/TeX/BibTool/BibTool-${version}.tar.gz";
+    sha256 = "1ymq901ckaysq2n1bplk1064rb2njq9n30pii15w157y0lxcwd3i";
+  };
+
+  # Perl for running test suite.
+  buildInputs = [ perl ];
+
+  installTargets = [ "install" "install.man" ];
+
+  doCheck = true;
+  checkTarget = "test";
+
+  meta = with lib; {
+    description = "Tool for manipulating BibTeX bibliographies";
+    homepage = "http://www.gerd-neugebauer.de/software/TeX/BibTool/index.en.html";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ maintainers.rycee ];
+    mainProgram = "bibtool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bibutils/default.nix b/nixpkgs/pkgs/tools/misc/bibutils/default.nix
new file mode 100644
index 000000000000..c454e8cfa1d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bibutils/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchurl
+, static ? stdenv.hostPlatform.isStatic
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bibutils";
+  version = "7.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bibutils/bibutils_${version}_src.tgz";
+    sha256 = "sha256-bgKK7x6Kaz5azvCYWEp7tocI81z+dAEbNBwR/qXktcM=";
+  };
+
+  preConfigure = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace lib/Makefile.dynamic \
+      --replace '-Wl,-soname,$(SONAME)' ""
+  '';
+
+  # the configure script is not generated by autoconf
+  # and do not recognize --build/--host cross compilation flags
+  configurePlatforms = [ ];
+
+  configureFlags = [
+    (if static then "--static" else "--dynamic")
+    "--install-dir" "$(out)/bin"
+    "--install-lib" "$(out)/lib"
+  ];
+
+  dontAddPrefix = true;
+
+  makeFlags = [
+    "CC:=$(CC)"
+  ];
+
+  doCheck = true;
+  checkTarget = "test";
+  preCheck = lib.optionalString stdenv.isDarwin ''
+    export DYLD_LIBRARY_PATH=`pwd`/lib
+  '';
+
+  meta = with lib; {
+    description = "Bibliography format interconversion";
+    longDescription = "The bibutils program set interconverts between various bibliography formats using a common MODS-format XML intermediate. For example, one can convert RIS-format files to Bibtex by doing two transformations: RIS->MODS->Bibtex. By using a common intermediate for N formats, only 2N programs are required and not N²-N. These programs operate on the command line and are styled after standard UNIX-like filters.";
+    homepage = "https://sourceforge.net/p/bibutils/home/Bibutils/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.garrison ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/birdfont/default.nix b/nixpkgs/pkgs/tools/misc/birdfont/default.nix
new file mode 100644
index 000000000000..aa8e9ac6a9e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/birdfont/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, pkg-config, python3, xmlbird,
+cairo, gdk-pixbuf, libgee, glib, gtk3, webkitgtk, libnotify, sqlite, vala,
+gobject-introspection, gsettings-desktop-schemas, wrapGAppsHook, autoPatchelfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "birdfont";
+  version = "2.33.3";
+
+  src = fetchurl {
+    url = "https://birdfont.org/releases/${pname}-${version}.tar.xz";
+    sha256 = "sha256-NNw7203BtHhNyyQezb3/EP98cTsu7ABDFBnM5Ms2ePY=";
+  };
+
+  nativeBuildInputs = [ python3 pkg-config vala gobject-introspection wrapGAppsHook autoPatchelfHook ];
+  buildInputs = [ xmlbird libgee cairo gdk-pixbuf glib gtk3 webkitgtk libnotify sqlite gsettings-desktop-schemas ];
+
+  postPatch = ''
+    substituteInPlace install.py \
+      --replace 'platform.version()' '"Nix"'
+
+    patchShebangs .
+  '';
+
+  buildPhase = "./build.py";
+
+  installPhase = "./install.py";
+
+  meta = with lib; {
+    description = "Font editor which can generate fonts in TTF, EOT, SVG and BIRDFONT format";
+    homepage = "https://birdfont.org";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix b/nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix
new file mode 100644
index 000000000000..2fbdbcf777a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/birdfont/xmlbird.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, python3, pkg-config, vala, glib, gobject-introspection }:
+
+stdenv.mkDerivation rec {
+  pname = "xmlbird";
+  version = "1.2.15";
+
+  src = fetchurl {
+    url = "https://birdfont.org/${pname}-releases/lib${pname}-${version}.tar.xz";
+    sha256 = "sha256-8GX4ijF+AxaGGFlSxRPOAoUezRG6592jOrifz/mWTRM=";
+  };
+
+  nativeBuildInputs = [ python3 pkg-config vala gobject-introspection ];
+
+  buildInputs = [ glib ];
+
+  postPatch = ''
+    substituteInPlace configure \
+      --replace 'platform.dist()[0]' '"nix"'
+    patchShebangs .
+  '';
+
+  buildPhase = "./build.py";
+
+  installPhase = "./install.py";
+
+  meta = with lib; {
+    description = "XML parser for Vala and C programs";
+    homepage = "https://birdfont.org/xmlbird.php";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bitwise/default.nix b/nixpkgs/pkgs/tools/misc/bitwise/default.nix
new file mode 100644
index 000000000000..a01fa83b3c79
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bitwise/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, readline, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "bitwise";
+  version = "0.50";
+
+  src = fetchFromGitHub {
+    owner = "mellowcandle";
+    repo = "bitwise";
+    rev = "v${version}";
+    sha256 = "sha256-x+ky1X0c0bQZnkNvNNuXN2BoMDtDSCt/8dBAG92jCCQ=";
+  };
+
+  buildInputs = [ ncurses readline ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Terminal based bitwise calculator in curses";
+    homepage = "https://github.com/mellowcandle/bitwise";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.whonore ];
+    platforms = platforms.unix;
+    mainProgram = "bitwise";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bkt/default.nix b/nixpkgs/pkgs/tools/misc/bkt/default.nix
new file mode 100644
index 000000000000..beef0b8412ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bkt/default.nix
@@ -0,0 +1,25 @@
+{ rustPlatform
+, fetchFromGitHub
+, lib
+}: rustPlatform.buildRustPackage rec {
+
+  pname = "bkt";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "dimo414";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-XQK7oZfutqCvFoGzMH5G5zoGvqB8YaXSdrwjS/SVTNU=";
+  };
+
+  cargoHash = "sha256-Pl+a+ZpxaguRloH8R7x4FmYpTwTUwFrYy7AS/5K3L+8=";
+
+  meta = {
+    description = "A subprocess caching utility";
+    homepage = "https://github.com/dimo414/bkt";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.mangoiv ];
+    mainProgram = "bkt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bkyml/default.nix b/nixpkgs/pkgs/tools/misc/bkyml/default.nix
new file mode 100644
index 000000000000..8b930e960e24
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bkyml/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "bkyml";
+  version = "1.4.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "01kpx35572mp4xl2fjyvfk39jfgfjcyzymbifk76891kaqkjb7r9";
+  };
+
+  # The pyscaffold is not a runtime dependency but just a python project bootstrapping tool. Thus,
+  # instead of implement this package in nix we remove a dependency on it and fix up the version
+  # of the package, that has been affected by the pyscaffold package dependency removal.
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "['pyscaffold>=3.0a0,<3.1a0'] + " "" \
+      --replace "use_pyscaffold=True"  ""
+    substituteInPlace src/bkyml/skeleton.py --replace \
+        "from bkyml import __version__" \
+        "__version__ = \"${version}\""
+  '';
+
+  # Don't run tests because they are broken when run within
+  # buildPythonApplication for reasons I don't quite understand.
+  doCheck = false;
+
+  pythonImportsCheck = [ "bkyml" ];
+
+  propagatedBuildInputs = [
+    ruamel-yaml
+    setuptools
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/joscha/bkyml";
+    description = "A CLI tool to generate a pipeline.yaml file for Buildkite on the fly";
+    license = licenses.mit;
+    maintainers = with maintainers; [ olebedev ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blacken-docs/default.nix b/nixpkgs/pkgs/tools/misc/blacken-docs/default.nix
new file mode 100644
index 000000000000..434f684b78d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blacken-docs/default.nix
@@ -0,0 +1,39 @@
+{ black
+, fetchFromGitHub
+, lib
+, python3
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "blacken-docs";
+  version = "1.15.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "adamchainz";
+    repo = "blacken-docs";
+    rev = version;
+    hash = "sha256-3FGuFOAHCcybPwujWlh58NWtuF5CebaKTgBWgCGpSL8=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.setuptools
+  ];
+
+  propagatedBuildInputs = [
+    black
+  ];
+
+  nativeCheckInputs = [
+    black
+    python3.pkgs.pytestCheckHook
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/adamchainz/blacken-docs";
+    changelog = "https://github.com/adamchainz/blacken-docs/blob/${src.rev}/CHANGELOG.rst";
+    description = "Run Black on Python code blocks in documentation files";
+    license = licenses.mit;
+    maintainers = with maintainers; [ l0b0 ];
+    mainProgram = "blacken-docs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blahaj/default.nix b/nixpkgs/pkgs/tools/misc/blahaj/default.nix
new file mode 100644
index 000000000000..a37d37bf4184
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blahaj/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, crystal
+, fetchFromGitHub
+  # https://crystal-lang.org/2019/09/06/parallelism-in-crystal/
+, multithreading ? true
+, static ? stdenv.hostPlatform.isStatic
+}:
+
+crystal.buildCrystalPackage rec {
+  pname = "blahaj";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "GeopJr";
+    repo = "BLAHAJ";
+    rev = "v${version}";
+    hash = "sha256-CmMF9jDKUo+c8dYc2UEHKdBDE4dgwExcRS5sSUsUJik=";
+  };
+
+  buildTargets = [ "${if static then "static" else "build"}${if multithreading then "_mt" else ""}" ];
+
+  meta = with lib; {
+    description = "Gay sharks at your local terminal - lolcat-like CLI tool";
+    homepage = "https://blahaj.queer.software";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ aleksana cafkafk ];
+    mainProgram = "blahaj";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blflash/default.nix b/nixpkgs/pkgs/tools/misc/blflash/default.nix
new file mode 100644
index 000000000000..36c1712a6e57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blflash/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "blflash";
+  version = "0.3.5";
+
+  src = fetchFromGitHub {
+    owner = "spacemeowx2";
+    repo = "blflash";
+    rev = "v${version}";
+    hash = "sha256-lv5bUbq5AnZVeR8V0A4pamY9ZIQAhLmvZEr+CRMPcj0=";
+  };
+
+  cargoHash = "sha256-NRBW2rGrtEmmxONTpCM1D+o5HtnLjp175Sq9+aCp7ZE=";
+
+  meta = with lib; {
+    description = "An bl602 serial flasher written in Rust";
+    homepage = "https://github.com/spacemeowx2/blflash";
+    license = with licenses; [ mit asl20 ];
+    maintainers = with maintainers; [ _0x4A6F ];
+    mainProgram = "blflash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/blink1-tool/default.nix b/nixpkgs/pkgs/tools/misc/blink1-tool/default.nix
new file mode 100644
index 000000000000..df994593d99b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/blink1-tool/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "blink1";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "todbot";
+    repo = "blink1-tool";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    hash = "sha256-xuCjPSQUQ/KOcdsie/ndecUiEt+t46m4eI33PXJoAAY=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "@git submodule update --init" "true"
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ];
+
+  makeFlags = [
+    "GIT_TAG=v${version}"
+    "USBLIB_TYPE=HIDAPI"
+    "HIDAPI_TYPE=LIBUSB"
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Command line client for the blink(1) notification light";
+    homepage = "https://blink1.thingm.com/";
+    license = with licenses; [ cc-by-sa-40 ];
+    maintainers = with maintainers; [ cransom ];
+    platforms = platforms.linux;
+    mainProgram = "blink1-tool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bmap-tools/default.nix b/nixpkgs/pkgs/tools/misc/bmap-tools/default.nix
new file mode 100644
index 000000000000..4bf170ccbc7d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bmap-tools/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "bmap-tools";
+  version = "3.6";
+
+  src = fetchFromGitHub {
+    owner = "intel";
+    repo = "bmap-tools";
+    rev = "v${version}";
+    sha256 = "01xzrv5nvd2nvj91lz4x9s91y9825j9pj96z0ap6yvy3w2dgvkkl";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ six ];
+
+  # tests fail only on hydra.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "bmap-related tools";
+    homepage = "https://github.com/intel/bmap-tools";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "bmaptool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bmon/default.nix b/nixpkgs/pkgs/tools/misc/bmon/default.nix
new file mode 100644
index 000000000000..237eb7476da5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bmon/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config, ncurses, libconfuse
+, libnl }:
+
+stdenv.mkDerivation rec {
+  pname = "bmon";
+  version = "4.0";
+
+  src = fetchFromGitHub {
+    owner = "tgraf";
+    repo = "bmon";
+    rev = "v${version}";
+    sha256 = "1ilba872c09mnlvylslv4hqv6c9cz36l76q74rr99jvis1dg69gf";
+  };
+
+  # The source code defines `__unused__`, which is a reserved name
+  # https://github.com/tgraf/bmon/issues/89
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/macports/macports-ports/raw/6d1dd5e9c8fae608bd22f3ede21e576f29c6358c/net/bmon/files/patch-fix__unused.diff";
+      extraPrefix = "";
+      sha256 = "sha256-UYIiJZzipsx9a0xabrKfyj8TWNW7IM77oXnVnSPkQkc=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ ncurses libconfuse ] ++ lib.optional stdenv.isLinux libnl;
+
+  preConfigure = ''
+    # Must be an absolute path
+    export PKG_CONFIG="$(command -v "$PKG_CONFIG")"
+  '';
+
+  meta = with lib; {
+    description = "Network bandwidth monitor";
+    homepage = "https://github.com/tgraf/bmon";
+    # Licensed unter BSD and MIT
+    #  - https://github.com/tgraf/bmon/blob/master/LICENSE.BSD
+    #  - https://github.com/tgraf/bmon/blob/master/LICENSE.MIT
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bjornfor pSub ];
+    mainProgram = "bmon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bogofilter/default.nix b/nixpkgs/pkgs/tools/misc/bogofilter/default.nix
new file mode 100644
index 000000000000..df78108e43e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bogofilter/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchurl
+, flex
+, db
+, makeWrapper
+, pax
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bogofilter";
+  version = "1.2.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/bogofilter/bogofilter-${version}.tar.xz";
+    hash = "sha256-MkihNzv/VSxQCDStvqS2yu4EIkUWrlgfslpMam3uieo=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ flex db ];
+
+  doCheck = false; # needs "y" tool
+
+  postInstall = ''
+    wrapProgram "$out/bin/bf_tar" --prefix PATH : "${lib.makeBinPath [ pax ]}"
+  '';
+
+  meta = {
+    homepage = "http://bogofilter.sourceforge.net/";
+    longDescription = ''
+      Bogofilter is a mail filter that classifies mail as spam or ham
+      (non-spam) by a statistical analysis of the message's header and
+      content (body).  The program is able to learn from the user's
+      classifications and corrections.  It is based on a Bayesian
+      filter.
+    '';
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/boltbrowser/default.nix b/nixpkgs/pkgs/tools/misc/boltbrowser/default.nix
new file mode 100644
index 000000000000..f4603ab3b4ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/boltbrowser/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "boltbrowser";
+  version = "2.2";
+
+  src = fetchFromGitHub {
+    owner = "br0xen";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-3t0U1bSJbo3RJZe+PwaUeuzSt23Gs++WRe/uehfa4cA=";
+  };
+
+  vendorHash = "sha256-lLSjAO0sK2zwl+id/e15XWYbLPCa7qK8J6tdvaBMLPs=";
+
+  meta = with lib; {
+    description = "CLI Browser for BoltDB files";
+    homepage = "https://github.com/br0xen/boltbrowser";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "boltbrowser";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bonk/default.nix b/nixpkgs/pkgs/tools/misc/bonk/default.nix
new file mode 100644
index 000000000000..cfd815d66b31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bonk/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bonk";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "elliot40404";
+    repo = "bonk";
+    rev = "v${version}";
+    hash = "sha256-sAMIteNkGRqmE7BQD/TNC01K3eQQTLKuc0jcxHxtKF8=";
+  };
+
+  cargoHash = "sha256-/qBuIG5ETUWMv2iOGpW3/awuhZb35qsBAflNJv3xTUs=";
+
+  meta = {
+    description = "The blazingly fast touch alternative written in Rust";
+    homepage = "https://github.com/elliot40404/bonk";
+    license = lib.licenses.mit;
+    mainProgram = "bonk";
+    maintainers = with lib.maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bootspec/default.nix b/nixpkgs/pkgs/tools/misc/bootspec/default.nix
new file mode 100644
index 000000000000..2ffa6c47ab09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bootspec/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, fetchpatch
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "bootspec";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "DeterminateSystems";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-5IGSMHeL0eKfl7teDejAckYQjc8aeLwfwIQSzQ8YaAg=";
+  };
+
+  patches = [
+    # https://github.com/DeterminateSystems/bootspec/pull/127
+    # Fixes the synthesize tool for aarch64-linux
+    (fetchpatch {
+      name = "aarch64-support.patch";
+      url = "https://github.com/DeterminateSystems/bootspec/commit/1d0e925f360f0199f13422fb7541225fd162fd4f.patch";
+      sha256 = "sha256-wU/jWnOqVBrU2swANdXbQfzRpNd/JIS4cxSyCvixZM0=";
+    })
+
+  ];
+
+  cargoHash = "sha256-eGSKVHjPnHK7WyGkO5LIjocNGHawahYQR3H5Lgk1C9s=";
+
+  meta = with lib; {
+    description = "Implementation of RFC-0125's datatype and synthesis tooling";
+    homepage = "https://github.com/DeterminateSystems/bootspec";
+    license = licenses.mit;
+    maintainers = teams.determinatesystems.members;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bottom-rs/default.nix b/nixpkgs/pkgs/tools/misc/bottom-rs/default.nix
new file mode 100644
index 000000000000..f9a24537676f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bottom-rs/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "bottom-rs";
+  version = "1.2.0";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "bottomify";
+    sha256 = "sha256-R1zj+TFXoolonIFa1zJDd7CdrORfzAPlxJoJVYe9xdc=";
+  };
+
+  cargoSha256 = "sha256-7xD65ookkK09XwCBH6fXqmWRYlmvpwAocojBg/dHzUI=";
+
+  meta = with lib; {
+    description = "Fantastic (maybe) CLI for translating between bottom and human-readable text";
+    homepage = "https://github.com/bottom-software-foundation/bottom-rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ winter ];
+    mainProgram = "bottomify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/boxxy/default.nix b/nixpkgs/pkgs/tools/misc/boxxy/default.nix
new file mode 100644
index 000000000000..ac723e959022
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/boxxy/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, oniguruma
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "boxxy";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "queer";
+    repo = "boxxy";
+    rev = "v${version}";
+    hash = "sha256-euIecFMDktL0gDkso83T1qZfVdfYAAC+WBMsfZaarAQ=";
+  };
+
+  cargoHash = "sha256-8aIuMRjZHLlP3x+C9S9WX21/i98RAUvGGwzptzCpRR4=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    oniguruma
+  ];
+
+  env = {
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
+
+  meta = with lib; {
+    description = "Puts bad Linux applications in a box with only their files";
+    homepage = "https://github.com/queer/boxxy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya figsoda ];
+    platforms = platforms.linux;
+    broken = stdenv.isAarch64;
+    mainProgram = "boxxy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/brltty/default.nix b/nixpkgs/pkgs/tools/misc/brltty/default.nix
new file mode 100644
index 000000000000..7b677aff70ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/brltty/default.nix
@@ -0,0 +1,99 @@
+{ lib, stdenv, fetchurl, pkg-config, python3, bluez
+, tcl, acl, kmod, coreutils, shadow, util-linux
+, alsaSupport ? stdenv.isLinux, alsa-lib
+, systemdSupport ? lib.meta.availableOn stdenv.hostPlatform systemd, systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "brltty";
+  version = "6.6";
+
+  src = fetchurl {
+    url = "https://brltty.app/archive/${pname}-${version}.tar.gz";
+    sha256 = "E+j2mb8UTuGx6PkAOt03hQkvf1XvEHxJEuPBT2zMpPw=";
+  };
+
+  nativeBuildInputs = [ pkg-config python3.pkgs.cython python3.pkgs.setuptools tcl ];
+  buildInputs = [ bluez ]
+    ++ lib.optional alsaSupport alsa-lib
+    ++ lib.optional systemdSupport systemd;
+
+  meta = {
+    description = "Access software for a blind person using a braille display";
+    longDescription = ''
+      BRLTTY is a background process (daemon) which provides access to the Linux/Unix
+      console (when in text mode) for a blind person using a refreshable braille display.
+      It drives the braille display, and provides complete screen review functionality.
+      Some speech capability has also been incorporated.
+    '';
+    homepage = "https://brltty.app";
+    license = lib.licenses.gpl2Plus;
+    maintainers = [ lib.maintainers.bramd ];
+    platforms = lib.platforms.all;
+  };
+
+  makeFlags = [
+    "PYTHON_PREFIX=$(out)"
+    "SYSTEMD_UNITS_DIRECTORY=$(out)/lib/systemd/system"
+    "SYSTEMD_USERS_DIRECTORY=$(out)/lib/sysusers.d"
+    "SYSTEMD_FILES_DIRECTORY=$(out)/lib/tmpfiles.d"
+    "UDEV_PARENT_LOCATION=$(out)/lib"
+    "INSTALL_COMMANDS_DIRECTORY=$(out)/libexec/brltty"
+    "UDEV_RULES_TYPE=all"
+    "POLKIT_POLICY_DIR=$(out)/share/polkit-1/actions"
+    "POLKIT_RULE_DIR=$(out)/share/polkit-1/rules.d"
+    "TCL_DIR=$(out)/lib"
+  ];
+  configureFlags = [
+    "--with-writable-directory=/run/brltty"
+    "--with-updatable-directory=/var/lib/brltty"
+    "--with-api-socket-path=/var/lib/BrlAPI"
+  ];
+  installFlags = [ "install-systemd" "install-udev" "install-polkit" ];
+
+  preConfigure = ''
+    substituteInPlace configure --replace /sbin/ldconfig ldconfig
+
+    # Some script needs a working tclsh shebang
+    patchShebangs .
+
+    # Skip impure operations
+    substituteInPlace Programs/Makefile.in    \
+      --replace install-writable-directory "" \
+      --replace install-apisoc-directory ""   \
+      --replace install-api-key ""
+  '';
+
+  postInstall = ''
+    # Rewrite absolute paths
+    substituteInPlace $out/bin/brltty-mkuser \
+      --replace '/sbin/nologin' '${shadow}/bin/nologin'
+    (
+      cd $out/lib
+      substituteInPlace systemd/system/brltty@.service \
+        --replace '/sbin/modprobe' '${kmod}/bin/modprobe'
+      # Ensure the systemd-wrapper script uses the correct path to the brltty binary
+      sed "/^Environment=\"BRLTTY_EXECUTABLE_ARGUMENTS.*/a Environment=\"BRLTTY_EXECUTABLE_PATH=$out/bin/brltty\"" -i systemd/system/brltty@.service
+      substituteInPlace systemd/system/brltty-device@.service \
+        --replace '/usr/bin/true' '${coreutils}/bin/true'
+      substituteInPlace udev/rules.d/90-brltty-uinput.rules \
+        --replace '/usr/bin/setfacl' '${acl}/bin/setfacl'
+      substituteInPlace udev/rules.d/90-brltty-hid.rules \
+        --replace '/usr/bin/setfacl' '${acl}/bin/setfacl'
+       substituteInPlace tmpfiles.d/brltty.conf \
+        --replace "$out/etc" '/etc'
+
+      # Remove unused commands from udev rules
+      sed '/initctl/d' -i udev/rules.d/90-brltty-usb-generic.rules
+      sed '/initctl/d' -i udev/rules.d/90-brltty-usb-customized.rules
+      # Remove pulse-access group from systemd unit and sysusers
+      substituteInPlace systemd/system/brltty@.service \
+        --replace 'SupplementaryGroups=pulse-access' '# SupplementaryGroups=pulse-access'
+      substituteInPlace sysusers.d/brltty.conf \
+        --replace 'm brltty pulse-access' '# m brltty pulse-access'
+     )
+     substituteInPlace $out/libexec/brltty/systemd-wrapper \
+       --replace 'logger' "${util-linux}/bin/logger" \
+       --replace 'udevadm' "${systemd}/bin/udevadm"
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix b/nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix
new file mode 100644
index 000000000000..c9438ff3583f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/broadlink-cli/default.nix
@@ -0,0 +1,36 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "broadlink-cli";
+  version = "0.19.0";
+
+  # the tools are available as part of the source distribution from GH but
+  # not pypi, so we have to fetch them here.
+  src = fetchFromGitHub {
+    owner  = "mjg59";
+    repo   = "python-broadlink";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-fqhi4K8Ceh8Rs0ExteCfAuVfEamFjMCjCFm6DRAJDmI=";
+  };
+
+  format = "other";
+
+  propagatedBuildInputs = with python3Packages; [
+    broadlink
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin cli/broadlink_{cli,discovery}
+    install -Dm444 -t $out/share/doc/broadlink cli/README.md
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tools for interfacing with Broadlink RM2/3 (Pro) remote controls, A1 sensor platforms and SP2/3 smartplugs";
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (python3Packages.broadlink.meta) homepage license;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/broot/default.nix b/nixpkgs/pkgs/tools/misc/broot/default.nix
new file mode 100644
index 000000000000..b136dcb6ad93
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/broot/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, makeWrapper
+, pkg-config
+, libgit2
+, oniguruma
+, libiconv
+, Foundation
+, Security
+, xorg
+, zlib
+, buildPackages
+, withClipboard ? false
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "broot";
+  version = "1.37.0";
+
+  src = fetchFromGitHub {
+    owner = "Canop";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-IJSXP4B07/0ZHzuAmPBXn/n0O7LOYNTB812sKz+mGuc=";
+  };
+
+  cargoHash = "sha256-jsy7FtTX/iG3TPdbYemG+6jbguQN4LoYMgscMffik7g=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [ libgit2 oniguruma xorg.libxcb ] ++ lib.optionals stdenv.isDarwin [
+    Foundation
+    libiconv
+    Security
+    zlib
+  ];
+
+  buildFeatures = lib.optionals withClipboard [ "clipboard" ];
+
+  RUSTONIG_SYSTEM_LIBONIG = true;
+
+  postPatch = ''
+    # Fill the version stub in the man page. We can't fill the date
+    # stub reproducibly.
+    substitute man/page man/broot.1 \
+      --replace "#version" "${version}"
+  '';
+
+  postInstall = lib.optionalString (stdenv.hostPlatform.emulatorAvailable buildPackages) ''
+    # Install shell function for bash.
+    ${stdenv.hostPlatform.emulator buildPackages} $out/bin/broot --print-shell-function bash > br.bash
+    install -Dm0444 -t $out/etc/profile.d br.bash
+
+    # Install shell function for zsh.
+    ${stdenv.hostPlatform.emulator buildPackages} $out/bin/broot --print-shell-function zsh > br.zsh
+    install -Dm0444 br.zsh $out/share/zsh/site-functions/br
+
+    # Install shell function for fish
+    ${stdenv.hostPlatform.emulator buildPackages} $out/bin/broot --print-shell-function fish > br.fish
+    install -Dm0444 -t $out/share/fish/vendor_functions.d br.fish
+
+  '' + ''
+    # install shell completion files
+    OUT_DIR=$releaseDir/build/broot-*/out
+
+    installShellCompletion --bash $OUT_DIR/{br,broot}.bash
+    installShellCompletion --fish $OUT_DIR/{br,broot}.fish
+    installShellCompletion --zsh $OUT_DIR/{_br,_broot}
+
+    installManPage man/broot.1
+
+    # Do not nag users about installing shell integration, since
+    # it is impure.
+    wrapProgram $out/bin/broot \
+      --set BR_INSTALL no
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/broot --version | grep "${version}"
+  '';
+
+  meta = with lib; {
+    description = "An interactive tree view, a fuzzy search, a balanced BFS descent and customizable commands";
+    homepage = "https://dystroy.org/broot/";
+    changelog = "https://github.com/Canop/broot/releases/tag/v${version}";
+    maintainers = with maintainers; [ dywedir ];
+    license = with licenses; [ mit ];
+    mainProgram = "broot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/brotab/default.nix b/nixpkgs/pkgs/tools/misc/brotab/default.nix
new file mode 100644
index 000000000000..9a58c83ae303
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/brotab/default.nix
@@ -0,0 +1,50 @@
+{ lib, fetchFromGitHub, fetchpatch, python }:
+
+python.pkgs.buildPythonApplication rec {
+  pname = "brotab";
+  version = "1.4.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "balta2ar";
+    repo = pname;
+    rev = version;
+    hash = "sha256-HKKjiW++FwjdorqquSCIdi1InE6KbMbFKZFYHBxzg8Q=";
+  };
+
+  patches = [
+    # https://github.com/balta2ar/brotab/pull/102
+    (fetchpatch {
+      name = "remove-unnecessary-pip-import.patch";
+      url = "https://github.com/balta2ar/brotab/commit/825cd48f255c911aabbfb495f6b8fc73f27d3fe5.patch";
+      hash = "sha256-IN28AOLPKPUc3KkxIGFMpZNNXA1+O12NxS+Hl4KMXbg=";
+    })
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    flask
+    psutil
+    requests
+    setuptools
+  ];
+
+  postPatch = ''
+    substituteInPlace requirements/base.txt \
+      --replace "Flask==2.0.2" "Flask>=2.0.2" \
+      --replace "psutil==5.8.0" "psutil>=5.8.0" \
+      --replace "requests==2.24.0" "requests>=2.24.0"
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  nativeCheckInputs = with python.pkgs; [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/balta2ar/brotab";
+    description = "Control your browser's tabs from the command line";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bsp-layout/default.nix b/nixpkgs/pkgs/tools/misc/bsp-layout/default.nix
new file mode 100644
index 000000000000..e0348fb9207e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bsp-layout/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, git
+, bc
+, bspwm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bsp-layout";
+  version = "unstable-2022-06-19";
+
+  src = fetchFromGitHub {
+    owner = "phenax";
+    repo = pname;
+    rev = "9d60fc271454ea1bfca598575207a06d8d172d3e";
+    sha256 = "sha256-7bBVWJdgAnXLWzjQGZxVqhku2rsxX2kMxU4xkI9/DHE=";
+  };
+
+  nativeBuildInputs = [ makeWrapper git bc ];
+  buildInputs = [ bspwm ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    substituteInPlace $out/lib/bsp-layout/layout.sh --replace 'bc ' '${bc}/bin/bc '
+    for layout in tall rtall wide rwide
+    do
+      substituteInPlace "$out/lib/bsp-layout/layouts/$layout.sh" --replace 'bc ' '${bc}/bin/bc '
+    done
+  '';
+
+  meta = with lib; {
+    description = "Manage layouts in bspwm";
+    longDescription = ''
+      bsp-layout is a dynamic layout manager for bspwm, written in bash.
+      It provides layout options to fit most workflows.
+    '';
+    homepage = "https://github.com/phenax/bsp-layout";
+    license = licenses.mit;
+    maintainers = with maintainers; [ totoroot ];
+    platforms = platforms.linux;
+    mainProgram = "bsp-layout";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/btc-rpc-explorer/default.nix b/nixpkgs/pkgs/tools/misc/btc-rpc-explorer/default.nix
new file mode 100644
index 000000000000..9e548d5f3dfd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/btc-rpc-explorer/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, pkg-config
+, python3
+, vips
+}:
+
+buildNpmPackage rec {
+  pname = "btc-rpc-explorer";
+  version = "3.4.0";
+
+  src = fetchFromGitHub {
+    owner = "janoside";
+    repo = "btc-rpc-explorer";
+    rev = "v${version}";
+    hash = "sha256-ZGg3jwSl1XyzS9hMa2YqwExhHSNgrsUmSscZtfF2h54=";
+  };
+
+  npmDepsHash = "sha256-9pVjydGaEaHytZqwXv0/kaJAVqlE7zzuTvubBFTkuBg=";
+
+  postPatch = ''
+    ln -s npm-shrinkwrap.json package-lock.json
+  '';
+
+  makeCacheWritable = true;
+
+  nativeBuildInputs = [
+    pkg-config
+    python3
+  ];
+
+  buildInputs = [
+    vips
+  ];
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/janoside/btc-rpc-explorer/blob/${src.rev}/CHANGELOG.md";
+    description = "Database-free, self-hosted Bitcoin explorer, via RPC to Bitcoin Core";
+    homepage = "https://github.com/janoside/btc-rpc-explorer";
+    license = lib.licenses.mit;
+    mainProgram = "btc-rpc-explorer";
+    maintainers = with lib.maintainers; [ d-xo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/btdu/default.nix b/nixpkgs/pkgs/tools/misc/btdu/default.nix
new file mode 100644
index 000000000000..833d33927791
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/btdu/default.nix
@@ -0,0 +1,42 @@
+{
+  lib,
+  buildDubPackage,
+  fetchFromGitHub,
+  ncurses,
+  zlib,
+}:
+
+buildDubPackage rec {
+  pname = "btdu";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "CyberShadow";
+    repo = "btdu";
+    rev = "v${version}";
+    hash = "sha256-3sSZq+5UJH02IO0Y1yL3BLHDb4lk8k6awb5ZysBQciE=";
+  };
+
+  dubLock = ./dub-lock.json;
+
+  buildInputs = [
+    ncurses
+    zlib
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 btdu -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Sampling disk usage profiler for btrfs";
+    homepage = "https://github.com/CyberShadow/btdu";
+    changelog = "https://github.com/CyberShadow/btdu/releases/tag/${src.rev}";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ atila cybershadow ];
+    mainProgram = "btdu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/btdu/dub-lock.json b/nixpkgs/pkgs/tools/misc/btdu/dub-lock.json
new file mode 100644
index 000000000000..9a7ab79a5e04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/btdu/dub-lock.json
@@ -0,0 +1,20 @@
+{
+  "dependencies": {
+    "ae": {
+      "version": "0.0.3236",
+      "sha256": "0by9yclvk795nw7ilwhv7wh17j2dd7xk54phs8s5jxrwpqx10x52"
+    },
+    "btrfs": {
+      "version": "0.0.18",
+      "sha256": "0m8r4skfiryn2nk4wyb61lpvlga1330crr4y1h0q39g9xl3g6myf"
+    },
+    "ncurses": {
+      "version": "1.0.0",
+      "sha256": "0ivl88vp2dy9rpv6x3f9jlyqa7aps2x1kkyx80w2d4vcs31pzmb2"
+    },
+    "emsi_containers": {
+      "version": "0.9.0",
+      "sha256": "1viz1fjh6jhfvl0d25bb1q7aclm1hrs0d7hhcx1d9c0gg5k6lcpm"
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/tools/misc/buildtorrent/default.nix b/nixpkgs/pkgs/tools/misc/buildtorrent/default.nix
new file mode 100644
index 000000000000..d9fc90768a98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/buildtorrent/default.nix
@@ -0,0 +1,19 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "buildtorrent";
+  version = "0.8";
+
+  src = fetchurl {
+    url = "https://mathr.co.uk/blog/code/${pname}-${version}.tar.gz";
+    sha256 = "sha256-6OJ2R72ziHOsVw1GwalompKwG7Z/WQidHN0IeE9wUtA=";
+  };
+
+  meta = with lib; {
+    description = "A simple commandline torrent creator";
+    homepage = "https://mathr.co.uk/blog/torrent.html";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    mainProgram = "buildtorrent";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/bunnyfetch/default.nix b/nixpkgs/pkgs/tools/misc/bunnyfetch/default.nix
new file mode 100644
index 000000000000..e14fe8244313
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/bunnyfetch/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "bunnyfetch";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Rosettea";
+    repo = "bunnyfetch";
+    rev = "v${version}";
+    sha256 = "sha256-6MnjCXc9/8twdf8PHKsVJY1yWYwUf5R01vtQFJbyy7M=";
+  };
+
+  vendorHash = "sha256-w+O1dU8t7uNvdlFnYhCdJCDixpWWZAnj9GrtsCbu9SM=";
+
+  # No upstream tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tiny system info fetch utility";
+    homepage = "https://github.com/Rosettea/bunnyfetch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ devins2518 ];
+    platforms = platforms.linux;
+    mainProgram = "bunnyfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/caffeine/default.nix b/nixpkgs/pkgs/tools/misc/caffeine/default.nix
new file mode 100644
index 000000000000..6c8995192a14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/caffeine/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, undmg
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "caffeine";
+  version = "1.1.3";
+
+  src = fetchurl {
+    url = "https://github.com/IntelliScape/caffeine/releases/download/${finalAttrs.version}/Caffeine.dmg";
+    hash = "sha256-JA5auDKiXtCvQ67/0dZtxmPf6nwlJdkYwhTWEHmBoDs=";
+  };
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ undmg ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    cp -r *.app $out/Applications
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Don't let your Mac fall asleep";
+    homepage = "https://intelliscapesolutions.com/apps/caffeine";
+    license = licenses.mit;
+    maintainers = with maintainers; [ emilytrau Enzime ];
+    platforms = [ "x86_64-darwin" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/calamares-nixos-extensions/default.nix b/nixpkgs/pkgs/tools/misc/calamares-nixos-extensions/default.nix
new file mode 100644
index 000000000000..2b8965544ab3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares-nixos-extensions/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchFromGitHub, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "calamares-nixos-extensions";
+  version = "0.3.15";
+
+  src = fetchFromGitHub {
+    owner = "NixOS";
+    repo = "calamares-nixos-extensions";
+    rev = version;
+    hash = "sha256-PZQjrteLWcInXIavuANHfzfl9gOXATWtIlDUp45j5Ao=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{lib,share}/calamares
+    cp -r modules $out/lib/calamares/
+    cp -r config/* $out/share/calamares/
+    cp -r branding $out/share/calamares/
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Calamares modules for NixOS";
+    homepage = "https://github.com/NixOS/calamares-nixos-extensions";
+    license = with licenses; [ gpl3Plus bsd2 cc-by-40 cc-by-sa-40 cc0 ];
+    maintainers = with maintainers; [ vlinkz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/calamares/default.nix b/nixpkgs/pkgs/tools/misc/calamares/default.nix
new file mode 100644
index 000000000000..87f81724eaa5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/default.nix
@@ -0,0 +1,98 @@
+{ lib, fetchurl, boost, cmake, extra-cmake-modules, kparts, kpmcore, kirigami2
+, kservice, libatasmart, libxcb, yaml-cpp, libpwquality, parted, polkit-qt, python
+, qtbase, qtquickcontrols, qtsvg, qttools, qtwebengine, util-linux, tzdata
+, ckbcomp, xkeyboard_config, mkDerivation
+, nixos-extensions ? false
+}:
+
+mkDerivation rec {
+  pname = "calamares";
+  version = "3.3.3";
+
+  # release including submodule
+  src = fetchurl {
+    url = "https://github.com/calamares/calamares/releases/download/v${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-XCp2Qc2y9eF2Z0BqfTtzUkf6860KzHl1lZE7kiHZbQM=";
+  };
+
+  patches = lib.optionals nixos-extensions [
+    # Modifies the users module to only set passwords of user and root
+    # as the users will have already been created in the configuration.nix file
+    ./userjob.patch
+    # Makes calamares search /run/current-system/sw/share/calamares/ for extra configuration files
+    # as by default it only searches /usr/share/calamares/ and /nix/store/<hash>-calamares-<version>/share/calamares/
+    # but calamares-nixos-extensions is not in either of these locations
+    ./nixos-extensions-paths.patch
+    # Uses pkexec within modules in order to run calamares without root permissions as a whole
+    # Also fixes storage check in the welcome module
+    ./nonroot.patch
+    # Adds unfree qml to packagechooserq
+    ./unfreeq.patch
+    # Modifies finished module to add some NixOS resources
+    # Modifies packagechooser module to change the UI
+    ./uimod.patch
+    # Remove options for unsupported partition types
+    ./partitions.patch
+    # Fix setting the kayboard layout on GNOME wayland
+    # By default the module uses the setxkbmap, which will not change the keyboard
+    ./waylandkbd.patch
+    # Change default location where calamares searches for locales
+    ./supportedlocale.patch
+  ];
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+  buildInputs = [
+    boost kparts.dev kpmcore.out kservice.dev kirigami2
+    libatasmart libxcb yaml-cpp libpwquality parted polkit-qt python
+    qtbase qtquickcontrols qtsvg qttools qtwebengine.dev util-linux
+  ];
+
+  cmakeFlags = [
+    "-DPYTHON_LIBRARY=${python}/lib/lib${python.libPrefix}.so"
+    "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}"
+    "-DCMAKE_VERBOSE_MAKEFILE=True"
+    "-DWITH_PYTHONQT:BOOL=ON"
+  ];
+
+  POLKITQT-1_POLICY_FILES_INSTALL_DIR = "$(out)/share/polkit-1/actions";
+
+  postPatch = ''
+    # Run calamares without root. Other patches make it functional as a normal user
+    sed -e "s,pkexec calamares,calamares -D6," \
+        -i calamares.desktop
+
+    sed -e "s,X-AppStream-Ignore=true,&\nStartupWMClass=calamares," \
+        -i calamares.desktop
+
+    # Fix desktop reference with wayland
+    mv calamares.desktop io.calamares.calamares.desktop
+
+    sed -e "s,calamares.desktop,io.calamares.calamares.desktop," \
+        -i CMakeLists.txt
+
+    sed -e "s,/usr/bin/calamares,$out/bin/calamares," \
+        -i com.github.calamares.calamares.policy
+
+    sed -e 's,/usr/share/zoneinfo,${tzdata}/share/zoneinfo,' \
+        -i src/modules/locale/SetTimezoneJob.cpp \
+        -i src/libcalamares/locale/TimeZone.cpp
+
+    sed -e 's,/usr/share/X11/xkb/rules/base.lst,${xkeyboard_config}/share/X11/xkb/rules/base.lst,' \
+        -i src/modules/keyboard/keyboardwidget/keyboardglobal.cpp
+
+    sed -e 's,"ckbcomp","${ckbcomp}/bin/ckbcomp",' \
+        -i src/modules/keyboard/keyboardwidget/keyboardpreview.cpp
+
+    sed "s,\''${POLKITQT-1_POLICY_FILES_INSTALL_DIR},''${out}/share/polkit-1/actions," \
+        -i CMakeLists.txt
+  '';
+
+  meta = with lib; {
+    description = "Distribution-independent installer framework";
+    homepage = "https://calamares.io/";
+    license = with licenses; [ gpl3Plus bsd2 cc0 ];
+    maintainers = with maintainers; [ manveru vlinkz ];
+    platforms = platforms.linux;
+    mainProgram = "calamares";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/calamares/nixos-extensions-paths.patch b/nixpkgs/pkgs/tools/misc/calamares/nixos-extensions-paths.patch
new file mode 100644
index 000000000000..292310e314f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/nixos-extensions-paths.patch
@@ -0,0 +1,45 @@
+diff --git a/src/calamares/main.cpp b/src/calamares/main.cpp
+index e0491e5f9..faf272016 100644
+--- a/src/calamares/main.cpp
++++ b/src/calamares/main.cpp
+@@ -132,6 +132,7 @@ main( int argc, char* argv[] )
+ #endif
+ 
+     std::unique_ptr< KDSingleApplication > possiblyUnique;
++    Calamares::setNixosDirs();
+     const bool is_debug = handle_args( a );
+     if ( !is_debug )
+     {
+diff --git a/src/libcalamares/utils/Dirs.cpp b/src/libcalamares/utils/Dirs.cpp
+index c42768a08..bac98645a 100644
+--- a/src/libcalamares/utils/Dirs.cpp
++++ b/src/libcalamares/utils/Dirs.cpp
+@@ -114,6 +114,14 @@ setXdgDirs()
+     s_haveExtraDirs = !( s_extraConfigDirs.isEmpty() && s_extraDataDirs.isEmpty() );
+ }
+ 
++void
++setNixosDirs()
++{
++    s_extraConfigDirs << "/run/current-system/sw/share/calamares/";
++    s_extraDataDirs << "/run/current-system/sw/share/calamares/";
++    s_haveExtraDirs = !( s_extraConfigDirs.isEmpty() && s_extraDataDirs.isEmpty() ); 
++}
++
+ QStringList
+ extraConfigDirs()
+ {
+diff --git a/src/libcalamares/utils/Dirs.h b/src/libcalamares/utils/Dirs.h
+index d0edd7a4f..26bd16b4e 100644
+--- a/src/libcalamares/utils/Dirs.h
++++ b/src/libcalamares/utils/Dirs.h
+@@ -50,6 +50,9 @@ DLLEXPORT bool isAppDataDirOverridden();
+ /** @brief Setup extra config and data dirs from the XDG variables.
+  */
+ DLLEXPORT void setXdgDirs();
++/** @brief Setup extra config and data dirs fir NixOS.
++ */
++DLLEXPORT void setNixosDirs();
+ /** @brief Are any extra directories configured? */
+ DLLEXPORT bool haveExtraDirs();
+ /** @brief XDG_CONFIG_DIRS, each guaranteed to end with / */
diff --git a/nixpkgs/pkgs/tools/misc/calamares/nonroot.patch b/nixpkgs/pkgs/tools/misc/calamares/nonroot.patch
new file mode 100644
index 000000000000..24e47574142f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/nonroot.patch
@@ -0,0 +1,106 @@
+diff --git a/src/libcalamares/utils/Runner.cpp b/src/libcalamares/utils/Runner.cpp
+index 632f32028..fe9052449 100644
+--- a/src/libcalamares/utils/Runner.cpp
++++ b/src/libcalamares/utils/Runner.cpp
+@@ -137,13 +137,13 @@ Calamares::Utils::Runner::run()
+     }
+     if ( m_location == RunLocation::RunInTarget )
+     {
+-        process.setProgram( "chroot" );
+-        process.setArguments( QStringList { workingDirectory.absolutePath() } << m_command );
++        process.setProgram( "pkexec" );
++        process.setArguments( QStringList { "chroot" } + QStringList { workingDirectory.absolutePath() } << m_command );
+     }
+     else
+     {
+-        process.setProgram( "env" );
+-        process.setArguments( m_command );
++        process.setProgram( "pkexec" );
++        process.setArguments( QStringList { "env" } + m_command );
+     }
+ 
+     if ( m_output )
+diff --git a/src/modules/mount/main.py b/src/modules/mount/main.py
+index 4202639f3..de2556b91 100644
+--- a/src/modules/mount/main.py
++++ b/src/modules/mount/main.py
+@@ -235,7 +235,8 @@ def mount_partition(root_mount_point, partition, partitions, mount_options, moun
+ 
+     # Ensure that the created directory has the correct SELinux context on
+     # SELinux-enabled systems.
+-    os.makedirs(mount_point, exist_ok=True)
++    subprocess.check_call(["pkexec", "mkdir", "-p", mount_point])
++
+     try:
+         subprocess.call(['chcon', '--reference=' + raw_mount_point, mount_point])
+     except FileNotFoundError as e:
+@@ -278,13 +279,13 @@ def mount_partition(root_mount_point, partition, partitions, mount_options, moun
+         for s in btrfs_subvolumes:
+             if not s["subvolume"]:
+                 continue
+-            os.makedirs(root_mount_point + os.path.dirname(s["subvolume"]), exist_ok=True)
+-            subprocess.check_call(["btrfs", "subvolume", "create",
++            subprocess.check_call(["pkexec", "mkdir", "-p", root_mount_point + os.path.dirname(s["subvolume"])])
++            subprocess.check_call(["pkexec", "btrfs", "subvolume", "create",
+                                    root_mount_point + s["subvolume"]])
+             if s["mountPoint"] == "/":
+                 # insert the root subvolume into global storage
+                 libcalamares.globalstorage.insert("btrfsRootSubvolume", s["subvolume"])
+-        subprocess.check_call(["umount", "-v", root_mount_point])
++        subprocess.check_call(["pkexec", "umount", "-v", root_mount_point])
+ 
+         device = partition["device"]
+ 
+diff --git a/src/modules/welcome/checker/GeneralRequirements.cpp b/src/modules/welcome/checker/GeneralRequirements.cpp
+index a58f3df83..b66576b09 100644
+--- a/src/modules/welcome/checker/GeneralRequirements.cpp
++++ b/src/modules/welcome/checker/GeneralRequirements.cpp
+@@ -431,10 +431,35 @@ GeneralRequirements::checkEnoughStorage( qint64 requiredSpace )
+     cWarning() << "GeneralRequirements is configured without libparted.";
+     return false;
+ #else
+-    return check_big_enough( requiredSpace );
++    return big_enough( requiredSpace );
+ #endif
+ }
+ 
++bool
++GeneralRequirements::big_enough( qint64 requiredSpace )
++{
++    FILE *fpipe;
++    char command[128];
++    snprintf(command, sizeof(command), "lsblk --bytes -no SIZE,TYPE | grep disk | awk '$1 > %llu {print $1}'", requiredSpace);
++    char c = 0;
++
++    if (0 == (fpipe = (FILE*)popen(command, "r")))
++    {
++        cWarning() << "Failed to check storage size.";
++        return false;
++    }
++
++    while (fread(&c, sizeof c, 1, fpipe))
++    {
++        pclose(fpipe);
++        return true;
++    }
++
++    pclose(fpipe);
++
++    return false;
++}
++
+ bool
+ GeneralRequirements::checkEnoughRam( qint64 requiredRam )
+ {
+diff --git a/src/modules/welcome/checker/GeneralRequirements.h b/src/modules/welcome/checker/GeneralRequirements.h
+index b6646da11..ea27324fa 100644
+--- a/src/modules/welcome/checker/GeneralRequirements.h
++++ b/src/modules/welcome/checker/GeneralRequirements.h
+@@ -36,6 +36,7 @@ private:
+     bool checkHasPower();
+     bool checkHasInternet();
+     bool checkIsRoot();
++    bool big_enough( qint64 requiredSpace );
+ 
+     qreal m_requiredStorageGiB;
+     qreal m_requiredRamGiB;
diff --git a/nixpkgs/pkgs/tools/misc/calamares/partitions.patch b/nixpkgs/pkgs/tools/misc/calamares/partitions.patch
new file mode 100644
index 000000000000..ae3c7961ae64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/partitions.patch
@@ -0,0 +1,28 @@
+diff --git a/src/modules/partition/gui/CreatePartitionDialog.cpp b/src/modules/partition/gui/CreatePartitionDialog.cpp
+index c5b17c69e..353b6f964 100644
+--- a/src/modules/partition/gui/CreatePartitionDialog.cpp
++++ b/src/modules/partition/gui/CreatePartitionDialog.cpp
+@@ -107,7 +107,8 @@ CreatePartitionDialog::CreatePartitionDialog( Device* device,
+     {
+         // We need to ensure zfs is added to the list if the zfs module is enabled
+         if ( ( fs->type() == FileSystem::Type::Zfs && Calamares::Settings::instance()->isModuleEnabled( "zfs" ) )
+-             || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) )
++             || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended
++             && fs->type() != FileSystem::Luks && fs->type() != FileSystem::Luks2 && fs->type() != FileSystem::Minix ) )
+         {
+             fsNames << userVisibleFS( fs );  // This is put into the combobox
+             if ( fs->type() == defaultFSType )
+diff --git a/src/modules/partition/gui/EditExistingPartitionDialog.cpp b/src/modules/partition/gui/EditExistingPartitionDialog.cpp
+index 0bc35cabe..3cf8a7fa2 100644
+--- a/src/modules/partition/gui/EditExistingPartitionDialog.cpp
++++ b/src/modules/partition/gui/EditExistingPartitionDialog.cpp
+@@ -95,7 +95,8 @@ EditExistingPartitionDialog::EditExistingPartitionDialog( Device* device,
+     {
+         // We need to ensure zfs is added to the list if the zfs module is enabled
+         if ( ( fs->type() == FileSystem::Type::Zfs && Calamares::Settings::instance()->isModuleEnabled( "zfs" ) )
+-             || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended ) )
++             || ( fs->supportCreate() != FileSystem::cmdSupportNone && fs->type() != FileSystem::Extended
++             && fs->type() != FileSystem::Luks && fs->type() != FileSystem::Luks2 && fs->type() != FileSystem::Minix) )
+         {
+             fsNames << userVisibleFS( fs );  // For the combo box
+         }
diff --git a/nixpkgs/pkgs/tools/misc/calamares/supportedlocale.patch b/nixpkgs/pkgs/tools/misc/calamares/supportedlocale.patch
new file mode 100644
index 000000000000..859018d4947f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/supportedlocale.patch
@@ -0,0 +1,13 @@
+diff --git a/src/modules/locale/Config.cpp b/src/modules/locale/Config.cpp
+index 54ff5eb64..1a2b98c9c 100644
+--- a/src/modules/locale/Config.cpp
++++ b/src/modules/locale/Config.cpp
+@@ -48,7 +48,7 @@ loadLocales( const QString& localeGenPath )
+     // supported locales. We first try that one, and if it doesn't exist, we fall back
+     // to parsing the lines from locale.gen
+     localeGenLines.clear();
+-    QFile supported( "/usr/share/i18n/SUPPORTED" );
++    QFile supported( "/run/current-system/sw/share/i18n/SUPPORTED" );
+     QByteArray ba;
+ 
+     if ( supported.exists() && supported.open( QIODevice::ReadOnly | QIODevice::Text ) )
diff --git a/nixpkgs/pkgs/tools/misc/calamares/uimod.patch b/nixpkgs/pkgs/tools/misc/calamares/uimod.patch
new file mode 100644
index 000000000000..f45f68f9a5b3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/uimod.patch
@@ -0,0 +1,86 @@
+diff --git a/src/modules/finished/FinishedPage.cpp b/src/modules/finished/FinishedPage.cpp
+index 23cb194c4..8714937f6 100644
+--- a/src/modules/finished/FinishedPage.cpp
++++ b/src/modules/finished/FinishedPage.cpp
+@@ -74,7 +74,10 @@ FinishedPage::retranslate()
+         {
+             ui->mainText->setText( tr( "<h1>All done.</h1><br/>"
+                                        "%1 has been set up on your computer.<br/>"
+-                                       "You may now start using your new system.", "@info" )
++                                       "You may now start using your new system.<br/>"
++                                       "You can change every setting later except the bootloader.<br/>"
++                                       "Check the <a href=\"https://nixos.org/manual/nixos/stable/\">manual</a> for instructions on how to install software, upgrade the system or enable services.<br/>"
++                                       "You can find ways to get in touch with the <a href=\"https://nixos.org/community/\">community on the website!</a>", "@info" )
+                                        .arg( branding->versionedName() ) );
+             ui->restartCheckBox->setToolTip( tr( "<html><head/><body>"
+                                                  "<p>When this box is checked, your system will "
+@@ -87,7 +90,10 @@ FinishedPage::retranslate()
+             ui->mainText->setText( tr( "<h1>All done.</h1><br/>"
+                                        "%1 has been installed on your computer.<br/>"
+                                        "You may now restart into your new system, or continue "
+-                                       "using the %2 Live environment.", "@info" )
++                                       "using the %2 Live environment.<br/>"
++                                       "You can change every setting later except the bootloader.<br/>"
++                                       "Check the <a href=\"https://nixos.org/manual/nixos/stable/\">manual</a> for instructions on how to install software, upgrade the system or enable services.<br/>"
++                                       "You can find ways to get in touch with the <a href=\"https://nixos.org/community/\">community on the website!</a>", "@info" )
+                                        .arg( branding->versionedName(), branding->productName() ) );
+             ui->restartCheckBox->setToolTip( tr( "<html><head/><body>"
+                                                  "<p>When this box is checked, your system will "
+diff --git a/src/modules/packagechooser/PackageChooserPage.cpp b/src/modules/packagechooser/PackageChooserPage.cpp
+index 44a570d2f..4dc931bf3 100644
+--- a/src/modules/packagechooser/PackageChooserPage.cpp
++++ b/src/modules/packagechooser/PackageChooserPage.cpp
+@@ -52,6 +52,7 @@ PackageChooserPage::currentChanged( const QModelIndex& index )
+     if ( !index.isValid() || !ui->products->selectionModel()->hasSelection() )
+     {
+         ui->productName->setText( m_introduction.name.get() );
++        ui->productName->setStyleSheet("font-weight: bold");
+         ui->productScreenshot->setPixmap( m_introduction.screenshot );
+         ui->productDescription->setText( m_introduction.description.get() );
+     }
+diff --git a/src/modules/packagechooser/page_package.ui b/src/modules/packagechooser/page_package.ui
+index 2ab5b7f13..bed462069 100644
+--- a/src/modules/packagechooser/page_package.ui
++++ b/src/modules/packagechooser/page_package.ui
+@@ -37,20 +37,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
+       </widget>
+      </item>
+      <item>
+-      <layout class="QVBoxLayout" name="verticalLayout" stretch="1,30,1">
+-       <item>
+-        <widget class="QLabel" name="productName">
+-         <property name="sizePolicy">
+-          <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
+-           <horstretch>0</horstretch>
+-           <verstretch>0</verstretch>
+-          </sizepolicy>
+-         </property>
+-         <property name="text">
+-          <string>Product Name</string>
+-         </property>
+-        </widget>
+-       </item>
++      <layout class="QVBoxLayout" name="verticalLayout" stretch="30,1,1">
+        <item>
+         <widget class="FixedAspectRatioLabel" name="productScreenshot">
+          <property name="sizePolicy">
+@@ -67,6 +54,19 @@ SPDX-License-Identifier: GPL-3.0-or-later
+          </property>
+         </widget>
+        </item>
++       <item>
++        <widget class="QLabel" name="productName">
++         <property name="sizePolicy">
++          <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">
++           <horstretch>0</horstretch>
++           <verstretch>0</verstretch>
++          </sizepolicy>
++         </property>
++         <property name="text">
++          <string>Product Name</string>
++         </property>
++        </widget>
++       </item>
+        <item>
+         <widget class="QLabel" name="productDescription">
+          <property name="sizePolicy">
diff --git a/nixpkgs/pkgs/tools/misc/calamares/unfreeq.patch b/nixpkgs/pkgs/tools/misc/calamares/unfreeq.patch
new file mode 100644
index 000000000000..a234113a726e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/unfreeq.patch
@@ -0,0 +1,109 @@
+diff --git a/src/modules/packagechooserq/packagechooserq.qrc b/src/modules/packagechooserq/packagechooserq.qrc
+index 1b892dce1..ee80a934b 100644
+--- a/src/modules/packagechooserq/packagechooserq.qrc
++++ b/src/modules/packagechooserq/packagechooserq.qrc
+@@ -4,5 +4,6 @@
+         <file>images/libreoffice.jpg</file>
+         <file>images/no-selection.png</file>
+         <file>images/plasma.png</file>
++        <file>packagechooserq@unfree.qml</file>
+     </qresource>
+ </RCC>
+diff --git a/src/modules/packagechooserq/packagechooserq@unfree.qml b/src/modules/packagechooserq/packagechooserq@unfree.qml
+new file mode 100644
+index 000000000..cb87d864a
+--- /dev/null
++++ b/src/modules/packagechooserq/packagechooserq@unfree.qml
+@@ -0,0 +1,75 @@
++/* === This file is part of Calamares - <https://calamares.io> ===
++ *
++ *   SPDX-FileCopyrightText: 2021 Anke Boersma <demm@kaosx.us>
++ *   SPDX-License-Identifier: GPL-3.0-or-later
++ *
++ *   Calamares is Free Software: see the License-Identifier above.
++ *
++ */
++
++import io.calamares.core 1.0
++import io.calamares.ui 1.0
++
++import QtQuick 2.15
++import QtQuick.Controls 2.15
++import QtQuick.Layouts 1.3
++
++Item {
++    
++    SystemPalette {
++        id: palette
++        colorGroup: SystemPalette.Active
++    }
++
++    width:  parent.width
++    height: parent.height
++
++    Rectangle {
++        anchors.fill: parent
++        color: palette.window
++
++        ButtonGroup {
++            id: switchGroup
++        }
++
++        Column {
++            id: column
++            anchors.centerIn: parent
++            spacing: 5
++
++            Rectangle {
++                width: 700
++                height: 200
++                color: palette.base
++                radius: 10
++                border.width: 0
++                Text {
++                    color: palette.text
++                    width: 600
++                    height: 150
++                    anchors.centerIn: parent
++                    text: qsTr("NixOS is fully open source, but it also provides software packages with unfree licenses. By default unfree packages are not allowed, but you can enable it here. If you check this box, software installed might have additional End User License Agreements (EULAs) attached. If not enabled, some hardware might not work fully when no suitable open source drivers are available.<br/>")
++                    font.pointSize: 12
++                    wrapMode: Text.WordWrap
++                }
++
++                CheckBox {
++                    id: element2
++                    anchors.horizontalCenter: parent.horizontalCenter
++                    y: 145
++                    text: qsTr("Allow unfree software")
++                    checked: false
++
++                    onCheckedChanged: {
++                        if ( checked ) {
++                            config.packageChoice = "unfree"
++                        } else {
++                            config.packageChoice = "free"
++                        }
++                    }
++                }
++            }
++        }
++    }
++
++}
+diff --git a/src/modules/packagechooserq/unfree.conf b/src/modules/packagechooserq/unfree.conf
+new file mode 100644
+index 000000000..da79a8eac
+--- /dev/null
++++ b/src/modules/packagechooserq/unfree.conf
+@@ -0,0 +1,11 @@
++# SPDX-FileCopyrightText: no
++# SPDX-License-Identifier: CC0-1.0
++#
++---
++qmlLabel:
++    label: "Unfree Software"
++method: legacy
++mode: required
++labels:
++    step: "Unfree Software"
++packageChoice: free
diff --git a/nixpkgs/pkgs/tools/misc/calamares/userjob.patch b/nixpkgs/pkgs/tools/misc/calamares/userjob.patch
new file mode 100644
index 000000000000..a0bfea9bb05a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/userjob.patch
@@ -0,0 +1,31 @@
+diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp
+index eedfd274d..0f3e78848 100644
+--- a/src/modules/users/Config.cpp
++++ b/src/modules/users/Config.cpp
+@@ -972,26 +972,11 @@ Config::createJobs() const
+ 
+     Calamares::Job* j;
+ 
+-    if ( !m_sudoersGroup.isEmpty() )
+-    {
+-        j = new SetupSudoJob( m_sudoersGroup, m_sudoStyle );
+-        jobs.append( Calamares::job_ptr( j ) );
+-    }
+-
+-    j = new SetupGroupsJob( this );
+-    jobs.append( Calamares::job_ptr( j ) );
+-
+-    j = new CreateUserJob( this );
+-    jobs.append( Calamares::job_ptr( j ) );
+-
+     j = new SetPasswordJob( loginName(), userPassword() );
+     jobs.append( Calamares::job_ptr( j ) );
+ 
+     j = new SetPasswordJob( "root", rootPassword() );
+     jobs.append( Calamares::job_ptr( j ) );
+ 
+-    j = new SetHostNameJob( this );
+-    jobs.append( Calamares::job_ptr( j ) );
+-
+     return jobs;
+ }
diff --git a/nixpkgs/pkgs/tools/misc/calamares/waylandkbd.patch b/nixpkgs/pkgs/tools/misc/calamares/waylandkbd.patch
new file mode 100644
index 000000000000..4c282b04062f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/calamares/waylandkbd.patch
@@ -0,0 +1,25 @@
+diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp
+index d8b1e8e86..b2e1b7b5f 100644
+--- a/src/modules/keyboard/Config.cpp
++++ b/src/modules/keyboard/Config.cpp
+@@ -307,7 +307,10 @@ Config::xkbApply()
+                            xkbmap_layout_args( { m_additionalLayoutInfo.additionalLayout, m_selectedLayout },
+                                                { m_additionalLayoutInfo.additionalVariant, m_selectedVariant },
+                                                m_additionalLayoutInfo.groupSwitcher ) );
+-
++        QString xkbmap = QString( "[('xkb','%1\%2'),('xkb','%3\%4')]").arg(
++                                  m_selectedLayout, ((!m_selectedVariant.isEmpty()) ? "+" + m_selectedVariant : ""),
++                                  m_additionalLayoutInfo.additionalLayout, ((!m_additionalLayoutInfo.additionalVariant.isEmpty()) ? "+" + m_additionalLayoutInfo.additionalVariant : ""));
++        QProcess::execute( "sh", { "-c", "if command -v gsettings; then gsettings set org.gnome.desktop.input-sources sources \"$0\"; fi", xkbmap });
+         cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant << "(added "
+                  << m_additionalLayoutInfo.additionalLayout << "-" << m_additionalLayoutInfo.additionalVariant
+                  << " since current layout is not ASCII-capable)";
+@@ -315,6 +318,8 @@ Config::xkbApply()
+     else
+     {
+         QProcess::execute( "setxkbmap", xkbmap_layout_args( m_selectedLayout, m_selectedVariant ) );
++        QString xkbmap = QString( "[('xkb','%1\%2')]").arg( m_selectedLayout, ((!m_selectedVariant.isEmpty()) ? "+" + m_selectedVariant : "") );
++        QProcess::execute( "sh", { "-c", "if command -v gsettings; then gsettings set org.gnome.desktop.input-sources sources \"$0\"; fi", xkbmap });
+         cDebug() << "xkbmap selection changed to: " << m_selectedLayout << '-' << m_selectedVariant;
+     }
+     m_setxkbmapTimer.disconnect( this );
diff --git a/nixpkgs/pkgs/tools/misc/capture/default.nix b/nixpkgs/pkgs/tools/misc/capture/default.nix
new file mode 100644
index 000000000000..be08be4f1436
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/capture/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, slop, ffmpeg, fetchFromGitHub, makeWrapper}:
+
+stdenv.mkDerivation {
+  pname = "capture-unstable";
+  version = "2019-03-10";
+
+  src = fetchFromGitHub {
+    owner = "buhman";
+    repo = "capture";
+    rev  = "80dd9e7195aad5c132badef610f19509f3935b24";
+    sha256 = "0zyyg4mvrny7cc2xgvfip97b6yc75ka5ni39rwls93971jbk83d6";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 src/capture.sh $out/bin/capture
+
+    patchShebangs $out/bin/capture
+    wrapProgram $out/bin/capture \
+      --prefix PATH : '${lib.makeBinPath [ slop ffmpeg ]}'
+  '';
+
+  meta = with lib; {
+    description = "A no bullshit screen capture tool";
+    homepage = "https://github.com/buhman/capture";
+    maintainers = [ maintainers.ar1a ];
+    license = licenses.gpl3Plus;
+    mainProgram = "capture";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/castty/default.nix b/nixpkgs/pkgs/tools/misc/castty/default.nix
new file mode 100644
index 000000000000..86dae729790b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/castty/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, fetchFromGitHub, libsoundio, lame }:
+
+stdenv.mkDerivation {
+  pname = "castty";
+  version = "unstable-2020-11-10";
+
+  src = fetchFromGitHub {
+    owner = "dhobsd";
+    repo = "castty";
+    rev = "333a2bafd96d56cd0bb91577ae5ba0f7d81b3d99";
+    sha256 = "0p84ivwsp8ds4drn0hx2ax04gp0xyq6blj1iqfsmrs4slrajdmqs";
+  };
+
+  buildInputs = [ libsoundio lame ];
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "PREFIX=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "CLI tool to record audio-enabled screencasts of your terminal, for the web";
+    homepage = "https://github.com/dhobsd/castty";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ iblech ];
+    platforms = platforms.unix;
+    mainProgram = "castty";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/catimg/default.nix b/nixpkgs/pkgs/tools/misc/catimg/default.nix
new file mode 100644
index 000000000000..9edfc576837d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/catimg/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake } :
+
+stdenv.mkDerivation rec {
+  pname = "catimg";
+  version = "2.7.0";
+
+  src = fetchFromGitHub {
+    owner = "posva";
+    repo = pname;
+    rev = version;
+    sha256 = "0a2dswbv4xddb2l2d55hc43lzvjwrjs5z9am7v6i0p0mi2fmc89s";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    license = licenses.mit;
+    homepage = "https://github.com/posva/catimg";
+    description = "Insanely fast image printing in your terminal";
+    maintainers = with maintainers; [ ryantm ];
+    platforms = platforms.unix;
+    mainProgram = "catimg";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/cc2538-bsl/default.nix b/nixpkgs/pkgs/tools/misc/cc2538-bsl/default.nix
new file mode 100644
index 000000000000..a4b3c992544a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cc2538-bsl/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3Packages
+}:
+
+python3Packages.buildPythonPackage rec {
+  pname = "cc2538-bsl";
+  version = "2.1-unstable-2023-10-03";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "JelmerT";
+    repo = "cc2538-bsl";
+    rev = "4d64ac633dbaf29d098842c5937ed6eea2fd7c45";
+    hash = "sha256-NX2jPYAz15bSucj/YR5E/0eJy/cbszSrNxyJHRsbXxo=";
+  };
+
+  patches = [
+    (fetchpatch {
+      # fix extras specification in setup.py; https://github.com/JelmerT/cc2538-bsl/pull/143
+      url = "https://github.com/JelmerT/cc2538-bsl/commit/c70f58ec0222357db8020176711d6d45cf24da35.patch";
+      hash = "sha256-Rxm/TRcm87WgRfq60cu0loyrbJmZou09XYR7uhrhhj8=";
+    })
+  ];
+
+  env.SETUPTOOLS_SCM_PRETEND_VERSION = "0.1.dev0+g${lib.substring 0 7 src.rev}";
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    intelhex
+    pyserial
+    python-magic
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+    scripttest
+  ];
+
+  postInstall = ''
+    # Remove .py from binary
+    mv $out/bin/cc2538-bsl.py $out/bin/cc2538-bsl
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/JelmerT/cc2538-bsl";
+    description = "Flash TI SimpleLink chips (CC2538, CC13xx, CC26xx) over serial";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ lorenz ];
+    mainProgram = "cc2538-bsl";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/ccal/default.nix b/nixpkgs/pkgs/tools/misc/ccal/default.nix
new file mode 100644
index 000000000000..e7a01795f0db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ccal/default.nix
@@ -0,0 +1,34 @@
+{ stdenv
+, lib
+, fetchurl
+, makeWrapper
+, ghostscript_headless  # for ps2pdf binary
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ccal";
+  version = "2.5.3";
+  src = fetchurl {
+    url = "https://ccal.chinesebay.com/${pname}-${version}.tar.gz";
+    sha256 = "sha256-PUy9yfkFzgKrSEBB+79/C3oxmuajUMbBbWNuGlpQ35Y=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [ "CXX:=$(CXX)" "BINDIR=$(out)/bin" "MANDIR=$(out)/share/man" ];
+  installTargets = [ "install" "install-man" ];
+
+  # ccalpdf depends on a `ps2pdf` binary in PATH
+  postFixup = ''
+    wrapProgram $out/bin/ccalpdf \
+      --prefix PATH : ${lib.makeBinPath [ ghostscript_headless ]}:$out/bin
+  '';
+
+  meta = {
+    homepage = "https://ccal.chinesebay.com/ccal.htm";
+    description = "Command line Chinese calendar viewer, similar to cal";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ sharzy ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ccze/default.nix b/nixpkgs/pkgs/tools/misc/ccze/default.nix
new file mode 100644
index 000000000000..4946fd64d89d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ccze/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, ncurses, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "ccze";
+  version = "0.2.1-2";
+
+  src = fetchFromGitHub {
+    owner = "madhouse";
+    repo = "ccze";
+    rev = "ccze-${version}";
+    hash = "sha256-LVwmbrq78mZcAEuAqjXTqLE5we83H9mcMPtxQx2Tn/c=";
+  };
+
+  nativeBuildInputs = [ autoconf ];
+
+  buildInputs = [ ncurses pcre ];
+
+  preConfigure = ''
+    autoheader
+    autoconf
+  '';
+
+  meta = with lib; {
+    description = "Fast, modular log colorizer";
+    longDescription = ''
+      Fast log colorizer written in C, intended to be a drop-in replacement
+      for the Perl colorize tool.  Includes plugins for a variety of log
+      formats (Apache, Postfix, Procmail, etc.).
+    '';
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ malyn ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cf-terraforming/default.nix b/nixpkgs/pkgs/tools/misc/cf-terraforming/default.nix
new file mode 100644
index 000000000000..5ec67c40f1d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cf-terraforming/default.nix
@@ -0,0 +1,33 @@
+{ buildGoModule, fetchFromGitHub, lib, cf-terraforming, testers }:
+
+buildGoModule rec {
+  pname = "cf-terraforming";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "cloudflare";
+    repo = "cf-terraforming";
+    rev = "v${version}";
+    sha256 = "sha256-eGfPk3qptNf6QfVKDT4MwJav7z+ri+eEiB7KHGRxzOE=";
+  };
+
+  vendorHash = "sha256-cWFCEC20D2nhVeW7P/w5YSt1tQbWTPDWF/eaxEvWoLo=";
+  ldflags = [ "-X github.com/cloudflare/cf-terraforming/internal/app/cf-terraforming/cmd.versionString=${version}" ];
+
+  # The test suite insists on downloading a binary release of Terraform from
+  # Hashicorp at runtime, which isn't going to work in a nix build
+  doCheck = false;
+
+  passthru.tests = testers.testVersion {
+    package = cf-terraforming;
+    command = "cf-terraforming version";
+  };
+
+  meta = with lib; {
+    description = "A command line utility to facilitate terraforming your existing Cloudflare resources";
+    homepage = "https://github.com/cloudflare/cf-terraforming/";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ benley ];
+    mainProgram = "cf-terraforming";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cfonts/default.nix b/nixpkgs/pkgs/tools/misc/cfonts/default.nix
new file mode 100644
index 000000000000..12d9687c59be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cfonts/default.nix
@@ -0,0 +1,21 @@
+{ lib, rustPlatform, fetchCrate }:
+rustPlatform.buildRustPackage rec {
+  pname = "cfonts";
+  version = "1.1.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-ixxDlHjx5Bi6Wl/kzJ/R7d+jgTDCAti25TV1RlXRPus=";
+  };
+
+  cargoHash = "sha256-NltvO5ACf8TsE9CgC1jAXx04/T/kHSZLxXJ4zhA5DGo=";
+
+  meta = with lib; {
+    homepage = "https://github.com/dominikwilkowski/cfonts";
+    description =
+      "A silly little command line tool for sexy ANSI fonts in the console";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ leifhelm ];
+    mainProgram = "cfonts";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chafa/default.nix b/nixpkgs/pkgs/tools/misc/chafa/default.nix
new file mode 100644
index 000000000000..2ba80d7565d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chafa/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, pkg-config, which
+, libxslt, libxml2, docbook_xml_dtd_412, docbook_xsl, glib, imagemagick
+, Foundation
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.14.0";
+  pname = "chafa";
+
+  src = fetchFromGitHub {
+    owner = "hpjansson";
+    repo = "chafa";
+    rev = version;
+    sha256 = "sha256-7l8+WD5/5uBXVnhwqiEScIEQ1dg0W2zqqZJ2AeKCZRU=";
+  };
+
+  nativeBuildInputs = [ autoconf
+                        automake
+                        libtool
+                        pkg-config
+                        which
+                        libxslt
+                        libxml2
+                        docbook_xml_dtd_412
+                        docbook_xsl
+                      ];
+
+  buildInputs = [ glib imagemagick ]
+    ++ lib.optional stdenv.isDarwin Foundation;
+
+  patches = [ ./xmlcatalog_patch.patch ];
+
+  preConfigure = ''
+    substituteInPlace ./autogen.sh --replace pkg-config '$PKG_CONFIG'
+    NOCONFIGURE=1 ./autogen.sh
+  '';
+
+  configureFlags = [ "--enable-man"
+                     "--with-xml-catalog=${docbook_xml_dtd_412}/xml/dtd/docbook/catalog.xml"
+                   ];
+
+  # https://github.com/NixOS/nixpkgs/pull/240893#issuecomment-1635347507
+  NIX_LDFLAGS = [ "-lwebp" ];
+
+  meta = with lib; {
+    description = "Terminal graphics for the 21st century";
+    homepage = "https://hpjansson.org/chafa/";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.mog ];
+    mainProgram = "chafa";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch b/nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch
new file mode 100644
index 000000000000..6bf988d6117f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chafa/xmlcatalog_patch.patch
@@ -0,0 +1,23 @@
+diff --git a/configure.ac b/configure.ac
+index 0055a70..fd4a905 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -111,18 +111,6 @@ AS_IF([ test "$enable_man" != no ], [
+   ])
+ ])
+ 
+-AS_IF([test "$enable_man" != no], [
+-  dnl check for DocBook XSL stylesheets in the local catalog
+-  JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
+-     [DocBook XSL Stylesheets], [have_docbook_style=yes],[have_docbook_style=no])
+-  AS_IF([ test "$have_docbook_style" != yes ], [
+-    AS_IF([ test "$enable_man" = yes ], [
+-      AC_MSG_ERROR([DocBook XSL Stylesheets are required for --enable-man])
+-    ])
+-    enable_man=no
+-  ])
+-])
+-
+ AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
+ 
+ AC_MSG_CHECKING([whether to generate man pages])
diff --git a/nixpkgs/pkgs/tools/misc/changelogger/default.nix b/nixpkgs/pkgs/tools/misc/changelogger/default.nix
new file mode 100644
index 000000000000..bae346ca37c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/changelogger/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "changelogger";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "MarkusFreitag";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XDiO8r1HpdsfBKzFLnsWdxte2EqL1blPH21137fNm5M=";
+  };
+
+  vendorHash = "sha256-E6J+0tZriskBnXdhQOQA240c3z+laXM5honoREjHPfM=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/MarkusFreitag/changelogger/cmd.BuildVersion=${version}"
+    "-X github.com/MarkusFreitag/changelogger/cmd.BuildDate=1970-01-01T00:00:00"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd changelogger \
+      --bash <($out/bin/changelogger completion bash) \
+      --fish <($out/bin/changelogger completion fish) \
+      --zsh <($out/bin/changelogger completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A tool to manage your changelog file in Markdown";
+    homepage = "https://github.com/MarkusFreitag/changelogger";
+    changelog = "https://github.com/MarkusFreitag/changelogger/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tomsiewert ];
+    mainProgram = "changelogger";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/charasay/default.nix b/nixpkgs/pkgs/tools/misc/charasay/default.nix
new file mode 100644
index 000000000000..7e79c6479b40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/charasay/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "charasay";
+  version = "3.2.0";
+
+  src = fetchFromGitHub {
+    owner = "latipun7";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7z5+7yrx5X5rdBMNj9oWBZ2IX0s88c1SLhgz2IDDEn8=";
+  };
+
+  cargoHash = "sha256-5htNU8l+amh+C8EL1K4UcXzf5Pbhhjd5RhxrucJoj/M=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = ''
+    rm .cargo/config.toml
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd himalaya \
+      --bash <($out/bin/chara completion --shell bash) \
+      --fish <($out/bin/chara completion --shell fish) \
+      --zsh <($out/bin/chara completion --shell zsh)
+  '';
+
+  meta = with lib; {
+    description = "The future of cowsay - Colorful characters saying something";
+    homepage = "https://github.com/latipun7/charasay";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hmajid2301 ];
+    mainProgram = "chara";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chatgpt-cli/default.nix b/nixpkgs/pkgs/tools/misc/chatgpt-cli/default.nix
new file mode 100644
index 000000000000..b823eb997e84
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chatgpt-cli/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+,
+}:
+buildGoModule rec {
+  pname = "chatgpt";
+  version = "1.3.4";
+
+  src = fetchFromGitHub {
+    owner = "j178";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-PwC/LyWGgFdj1aye8A/W9wc78z9mEbvz4DNsB0eHtl0=";
+  };
+
+  vendorHash = "sha256-hmg301m4Zn7BzlOJ6VVySkxwFt7CDT7MS9EH1JqeW/E=";
+
+  subPackages = [ "cmd/chatgpt" ];
+
+  meta = with lib; {
+    description = "Interactive CLI for ChatGPT";
+    homepage = "https://github.com/j178/chatgpt";
+    license = licenses.mit;
+    mainProgram = "chatgpt";
+    maintainers = with maintainers; [ Ruixi-rebirth ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/checkpwn/default.nix b/nixpkgs/pkgs/tools/misc/checkpwn/default.nix
new file mode 100644
index 000000000000..994fecc6c4db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/checkpwn/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "checkpwn";
+  version = "0.5.6";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-M0Jb+8rKn4KVuumNSsM6JEbSOoBOFy9mmXiCnUnDgak=";
+  };
+
+  cargoHash = "sha256-G+QWnGf+Zp94EHVnYM3Q/iEhEQMU2O/c4i5ya/dY7K4=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # requires internet access
+  checkFlags = [
+    "--skip=test_cli_"
+  ];
+
+  meta = with lib; {
+    description = "Check Have I Been Pwned and see if it's time for you to change passwords";
+    homepage = "https://github.com/brycx/checkpwn";
+    changelog = "https://github.com/brycx/checkpwn/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "checkpwn";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile b/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile
new file mode 100644
index 000000000000..2b0f5743e5a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem "chef-cli"
diff --git a/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile.lock b/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile.lock
new file mode 100644
index 000000000000..95a301ec0cc2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chef-cli/Gemfile.lock
@@ -0,0 +1,303 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.8.4)
+      public_suffix (>= 2.0.2, < 6.0)
+    aws-eventstream (1.2.0)
+    aws-partitions (1.749.0)
+    aws-sdk-core (3.171.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.651.0)
+      aws-sigv4 (~> 1.5)
+      jmespath (~> 1, >= 1.6.1)
+    aws-sdk-kms (1.63.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.120.1)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.4)
+    aws-sdk-secretsmanager (1.73.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.5.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+    builder (3.2.4)
+    chef (17.10.0)
+      addressable
+      aws-sdk-s3 (~> 1.91)
+      aws-sdk-secretsmanager (~> 1.46)
+      chef-config (= 17.10.0)
+      chef-utils (= 17.10.0)
+      chef-vault
+      chef-zero (>= 14.0.11)
+      corefoundation (~> 0.3.4)
+      diff-lcs (>= 1.2.4, < 1.6.0, != 1.4.0)
+      erubis (~> 2.7)
+      ffi (>= 1.5.0)
+      ffi-libarchive (~> 1.0, >= 1.0.3)
+      ffi-yajl (~> 2.2)
+      iniparse (~> 1.4)
+      inspec-core (~> 4.23)
+      license-acceptance (>= 1.0.5, < 3)
+      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.1.1, < 4.0)
+      net-sftp (>= 2.1.2, < 4.0)
+      ohai (~> 17.0)
+      plist (~> 3.2)
+      proxifier (~> 1.0)
+      syslog-logger (~> 1.6)
+      train-core (~> 3.2, >= 3.2.28)
+      train-winrm (>= 0.2.5)
+      uuidtools (>= 2.1.5, < 3.0)
+      vault (~> 0.16)
+    chef-cli (5.6.8)
+      addressable (>= 2.3.5, < 2.9)
+      chef (>= 16.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 (17.10.0)
+      addressable
+      chef-utils (= 17.10.0)
+      fuzzyurl
+      mixlib-config (>= 2.2.12, < 4.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      tomlrb (~> 1.2)
+    chef-telemetry (1.1.1)
+      chef-config
+      concurrent-ruby (~> 1.0)
+    chef-utils (17.10.0)
+      concurrent-ruby
+    chef-vault (4.1.11)
+    chef-zero (15.0.11)
+      ffi-yajl (~> 2.2)
+      hashie (>= 2.0, < 5.0)
+      mixlib-log (>= 2.0, < 4.0)
+      rack (~> 2.0, >= 2.0.6)
+      uuidtools (~> 2.1)
+      webrick
+    coderay (1.1.3)
+    concurrent-ruby (1.2.2)
+    cookbook-omnifetch (0.12.2)
+      mixlib-archive (>= 0.4, < 2.0)
+    corefoundation (0.3.13)
+      ffi (>= 1.15.0)
+    diff-lcs (1.3)
+    erubi (1.12.0)
+    erubis (2.7.0)
+    faraday (1.4.3)
+      faraday-em_http (~> 1.0)
+      faraday-em_synchrony (~> 1.0)
+      faraday-excon (~> 1.1)
+      faraday-net_http (~> 1.0)
+      faraday-net_http_persistent (~> 1.1)
+      multipart-post (>= 1.2, < 3)
+      ruby2_keywords (>= 0.0.4)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-net_http (1.0.1)
+    faraday-net_http_persistent (1.2.0)
+    faraday_middleware (1.2.0)
+      faraday (~> 1.0)
+    ffi (1.15.5)
+    ffi-libarchive (1.1.3)
+      ffi (~> 1.0)
+    ffi-yajl (2.4.0)
+      libyajl2 (>= 1.2)
+    fuzzyurl (0.9.0)
+    gssapi (1.3.1)
+      ffi (>= 1.0.1)
+    gyoku (1.4.0)
+      builder (>= 2.1.2)
+      rexml (~> 3.0)
+    hashie (4.1.0)
+    httpclient (2.8.3)
+    iniparse (1.5.0)
+    inspec-core (4.56.20)
+      addressable (~> 2.4)
+      chef-telemetry (~> 1.0, >= 1.0.8)
+      faraday (>= 0.9.0, < 1.5)
+      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.6.2)
+    json (2.6.3)
+    libyajl2 (2.1.0)
+    license-acceptance (2.1.13)
+      pastel (~> 0.7)
+      tomlrb (>= 1.2, < 3.0)
+      tty-box (~> 0.6)
+      tty-prompt (~> 0.20)
+    little-plugger (1.1.4)
+    logging (2.3.1)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.14)
+    method_source (1.0.0)
+    minitar (0.9)
+    mixlib-archive (1.1.7)
+      mixlib-log
+    mixlib-authentication (3.0.10)
+    mixlib-cli (2.1.8)
+    mixlib-config (3.0.27)
+      tomlrb
+    mixlib-log (3.0.9)
+    mixlib-shellout (3.2.7)
+      chef-utils
+    molinillo (0.8.0)
+    multi_json (1.15.0)
+    multipart-post (2.3.0)
+    net-scp (4.0.0)
+      net-ssh (>= 2.6.5, < 8.0.0)
+    net-sftp (2.1.2)
+      net-ssh (>= 2.6.5)
+    net-ssh (7.1.0)
+    nori (2.6.0)
+    ohai (17.9.1)
+      chef-config (>= 14.12, < 18)
+      chef-utils (>= 16.0, < 18)
+      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 (~> 3.2, >= 3.2.5)
+      plist (~> 3.1)
+      train-core
+      wmi-lite (~> 1.0)
+    parallel (1.23.0)
+    parslet (1.8.2)
+    pastel (0.8.0)
+      tty-color (~> 0.5)
+    plist (3.7.0)
+    proxifier (1.0.3)
+    pry (0.14.2)
+      coderay (~> 1.1)
+      method_source (~> 1.0)
+    public_suffix (5.0.1)
+    rack (2.2.6.4)
+    rexml (3.2.5)
+    rspec (3.11.0)
+      rspec-core (~> 3.11.0)
+      rspec-expectations (~> 3.11.0)
+      rspec-mocks (~> 3.11.0)
+    rspec-core (3.11.0)
+      rspec-support (~> 3.11.0)
+    rspec-expectations (3.11.1)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.11.0)
+    rspec-its (1.3.0)
+      rspec-core (>= 3.0.0)
+      rspec-expectations (>= 3.0.0)
+    rspec-mocks (3.11.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.11.0)
+    rspec-support (3.11.1)
+    ruby2_keywords (0.0.5)
+    rubyntlm (0.6.3)
+    rubyzip (2.3.2)
+    semverse (3.0.2)
+    solve (4.0.4)
+      molinillo (~> 0.6)
+      semverse (>= 1.1, < 4.0)
+    sslshake (1.3.1)
+    strings (0.2.1)
+      strings-ansi (~> 0.2)
+      unicode-display_width (>= 1.5, < 3.0)
+      unicode_utils (~> 1.4)
+    strings-ansi (0.2.0)
+    syslog-logger (1.6.8)
+    thor (1.2.1)
+    tomlrb (1.3.0)
+    train-core (3.10.7)
+      addressable (~> 2.5)
+      ffi (!= 1.13.0)
+      json (>= 1.8, < 3.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      net-scp (>= 1.2, < 5.0)
+      net-ssh (>= 2.9, < 8.0)
+    train-winrm (0.2.13)
+      winrm (>= 2.3.6, < 3.0)
+      winrm-elevated (~> 1.2.2)
+      winrm-fs (~> 1.0)
+    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.1)
+      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)
+    unicode-display_width (2.4.2)
+    unicode_utils (1.4.0)
+    uuidtools (2.2.0)
+    vault (0.17.0)
+      aws-sigv4
+    webrick (1.8.1)
+    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.7)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  chef-cli!
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/chef-cli/default.nix b/nixpkgs/pkgs/tools/misc/chef-cli/default.nix
new file mode 100644
index 000000000000..af3a60103ca3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chef-cli/default.nix
@@ -0,0 +1,19 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "chef-cli";
+  gemdir = ./.;
+  inherit ruby;
+
+  exes = ["chef-cli"];
+
+  passthru.updateScript = bundlerUpdateScript "chef-cli";
+
+  meta = with lib; {
+    description = "The Chef Infra Client is a powerful agent that applies your configurations on remote Linux, macOS, Windows and cloud-based systems";
+    homepage = "https://chef.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dylanmtaylor ];
+    mainProgram = "chef-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chef-cli/gemset.nix b/nixpkgs/pkgs/tools/misc/chef-cli/gemset.nix
new file mode 100644
index 000000000000..7a99b1851245
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chef-cli/gemset.nix
@@ -0,0 +1,1130 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15s8van7r2ad3dq6i03l3z4hqnvxcq75a3h72kxvf9an53sqma20";
+      type = "gem";
+    };
+    version = "2.8.4";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12n41py8jfxf9p3gy62ikw8n7wd0cmczk3i2fzxb4ms2xvkxv7b0";
+      type = "gem";
+    };
+    version = "1.749.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0732vv8zi67z25fss1sdvqx0vv1ap3w6hz1avxzwznkjp002vj39";
+      type = "gem";
+    };
+    version = "3.171.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v87zi28dfmrv7bv91yfldccnpd63n295siirbz7wqv1rajn8n02";
+      type = "gem";
+    };
+    version = "1.63.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mapdzm97rv22pca1hvvshwsafa12gd2yv2fcy63dfjn5vjjq893";
+      type = "gem";
+    };
+    version = "1.120.1";
+  };
+  aws-sdk-secretsmanager = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1907wr02afyq7vaig3hc858bipz9nmgf3aqb6kpbpxzf0qirf476";
+      type = "gem";
+    };
+    version = "1.73.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11hkna2av47bl0yprgp8k4ya70rc3m2ib5w10fn0piplgkkmhz7m";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  chef = {
+    dependencies = ["addressable" "aws-sdk-s3" "aws-sdk-secretsmanager" "chef-config" "chef-utils" "chef-vault" "chef-zero" "corefoundation" "diff-lcs" "erubis" "ffi" "ffi-libarchive" "ffi-yajl" "iniparse" "inspec-core" "license-acceptance" "mixlib-archive" "mixlib-authentication" "mixlib-cli" "mixlib-log" "mixlib-shellout" "net-sftp" "ohai" "plist" "proxifier" "syslog-logger" "train-core" "train-winrm" "uuidtools" "vault"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vh6hrmglq4vfi5qvv42d9qhygnc5dfz32hrr07v7vbyhbqw8ck";
+      type = "gem";
+    };
+    version = "17.10.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 = "1r6ig76j2gf9cc6hq1g9bpcyrv2dqki0x51ajsy0spyiinkfnvpx";
+      type = "gem";
+    };
+    version = "5.6.8";
+  };
+  chef-config = {
+    dependencies = ["addressable" "chef-utils" "fuzzyurl" "mixlib-config" "mixlib-shellout" "tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z72pwfb9n9zwjlk5g9mcy0jlmbq5f8mx60973k7fznif5k6zyrd";
+      type = "gem";
+    };
+    version = "17.10.0";
+  };
+  chef-telemetry = {
+    dependencies = ["chef-config" "concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l9icc3nfdj28mip85vf31v5l60qsfqq3a5dscv7jryh1k94y05x";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  chef-utils = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aq212rz8lzv3rxdsgqgmn8ryy168cz3fxminwg5gm1qw1hnjp5m";
+      type = "gem";
+    };
+    version = "17.10.0";
+  };
+  chef-vault = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hnvngygbdpvpflls3png2312y1svh6k9wj7g5i084q4p72qv22i";
+      type = "gem";
+    };
+    version = "4.1.11";
+  };
+  chef-zero = {
+    dependencies = ["ffi-yajl" "hashie" "mixlib-log" "rack" "uuidtools" "webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l20bljvh0imfraxx3mbq08sf9rwxkbl7rl9rsjzfynz53ch2sv5";
+      type = "gem";
+    };
+    version = "15.0.11";
+  };
+  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 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  cookbook-omnifetch = {
+    dependencies = ["mixlib-archive"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gqh66p6fxg438qpvc67s0y7ji9mvan6layyd7w9ljwva1snvy2n";
+      type = "gem";
+    };
+    version = "0.12.2";
+  };
+  corefoundation = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14rgy3d636l9zy7zmw04j7pjkf3bn41vx7kb265l4zhxrik7gh19";
+      type = "gem";
+    };
+    version = "0.3.13";
+  };
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18w22bjz424gzafv6nzv98h0aqkwz3d9xhm7cbr1wfbyas8zayza";
+      type = "gem";
+    };
+    version = "1.3";
+  };
+  erubi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08s75vs9cxlc4r1q2bjg4br8g9wc5lc5x5vl0vv4zq5ivxsdpgi7";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  erubis = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  faraday = {
+    dependencies = ["faraday-em_http" "faraday-em_synchrony" "faraday-excon" "faraday-net_http" "faraday-net_http_persistent" "multipart-post" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zmdsl6n05khwwq8gjssmfca0ifz6q82wwghf1qyzbxxjdna5mly";
+      type = "gem";
+    };
+    version = "1.4.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-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_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bw8mfh4yin2xk7138rg3fhb2p5g2dlmdma88k82psah9mbmvlfy";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  ffi-libarchive = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gyxnsy5fm2pnqph0dhaivmn1pws9xwnb3wjqpx097m06lh1igj1";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  ffi-yajl = {
+    dependencies = ["libyajl2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0y2yg9ls3v9rjdq6pmdn57w43xhrf8rrg44s9pfsc2i8jdmmhizz";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  fuzzyurl = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03qchs33vfwbsv5awxg3acfmlcrf5xbhnbrc83fdpamwya0glbjl";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  gssapi = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qdfhj12aq8v0y961v4xv96a1y2z80h3xhvzrs9vsfgf884g6765";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  gyoku = {
+    dependencies = ["builder" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kd2q59xpm39hpvmmvyi6g3f1fr05xjbnxwkrdqz4xy7hirqi79q";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  hashie = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02bsx12ihl78x0vdm37byp78jjw2ff6035y7rrmbd90qxjwxr43q";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  httpclient = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  iniparse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wb1qy4i2xrrd92dc34pi7q7ibrjpapzk9y465v0n9caiplnb89n";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  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 = "0mvngxv6v080z8is3clnkdrm499l2syqdd0nhc1gbnq4lwlh6ivy";
+      type = "gem";
+    };
+    version = "4.56.20";
+  };
+  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 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  libyajl2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vx0mv0bbcy0qh3ik08b42vrq4kw1zg51121r18c0vvp4p3zcpda";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  license-acceptance = {
+    dependencies = ["pastel" "tomlrb" "tty-box" "tty-prompt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12h5a3j57h50xkfpdz9gr42k0v8g1qxn2pnj5hbbzbmdhydjbjzf";
+      type = "gem";
+    };
+    version = "2.1.13";
+  };
+  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 = "1zflchpx4g8c110gjdcs540bk5a336nq6nmx379rdg56xw0pjd02";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  method_source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pnyh44qycnf9mzi1j6fywd5fkskv3x7nmsqrrws0rjn5dd4ayfp";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  minitar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "126mq86x67d1p63acrfka4zx0cx2r0vc93884jggxnrmmnzbxh13";
+      type = "gem";
+    };
+    version = "0.9";
+  };
+  mixlib-archive = {
+    dependencies = ["mixlib-log"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17vw0h8ag45608hvm02g43bkfvqy8l3lwk9lqj7b5kzdw6ynvn6a";
+      type = "gem";
+    };
+    version = "1.1.7";
+  };
+  mixlib-authentication = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07m6q8icjjzrv7k2vsjqmviswqv6cigc577hf48liy7b1i4l9gn5";
+      type = "gem";
+    };
+    version = "3.0.10";
+  };
+  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 = "0j0122lv2qgccl61njqi0pj6sp6nb85y07gcmw16bwg4k0c8nx6p";
+      type = "gem";
+    };
+    version = "3.0.27";
+  };
+  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 = "0zkwg76y96nkh1mv0k92ybq46cr06v1wmic16129ls3yqzwx3xj6";
+      type = "gem";
+    };
+    version = "3.2.7";
+  };
+  molinillo = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p846facmh1j5xmbrpgzadflspvk7bzs3sykrh5s7qi4cdqz5gzg";
+      type = "gem";
+    };
+    version = "0.8.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 = "0lgyysrpl50wgcb9ahg29i4p01z0irb3p9lirygma0kkfr5dgk9x";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1si2nq9l6jy5n2zw1q59a5gaji7v9vhy8qx08h4fg368906ysbdk";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  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 = "0yx0pb5fmziz92bw8qzbh8vf20lr56nd3s6q8h0gsgr307lki687";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  ohai = {
+    dependencies = ["chef-config" "chef-utils" "ffi" "ffi-yajl" "ipaddress" "mixlib-cli" "mixlib-config" "mixlib-log" "mixlib-shellout" "plist" "train-core" "wmi-lite"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ff5z3nzqk8ry32qiqfrr0zgm5vyaf21sj225faz8wqmxjvklsd2";
+      type = "gem";
+    };
+    version = "17.9.1";
+  };
+  parallel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jcc512l38c0c163ni3jgskvq1vc3mr8ly5pvjijzwvfml9lf597";
+      type = "gem";
+    };
+    version = "1.23.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 = "0wzhnbzraz60paxhm48c50fp9xi7cqka4gfhxmiq43mhgh5ajg3h";
+      type = "gem";
+    };
+    version = "3.7.0";
+  };
+  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 = "0k9kqkd9nps1w1r1rb7wjr31hqzkka2bhi8b518x78dcxppm9zn4";
+      type = "gem";
+    };
+    version = "0.14.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hz0bx2qs2pwb0bwazzsah03ilpf3aai8b7lk7s35jsfzwbkjq35";
+      type = "gem";
+    };
+    version = "5.0.1";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qgwkcb8kxns8d5187cxjaxf18b7dmg9gh6cr9c1125m0bj2pnfk";
+      type = "gem";
+    };
+    version = "2.2.6.4";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19dyb6rcvgi9j2mksd29wfdhfdyzqk7yjhy1ai77559hbhpg61w9";
+      type = "gem";
+    };
+    version = "3.11.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "118hkfw9b11hvvalr7qlylwal5h8dihagm9xg7k4gskg7587hca6";
+      type = "gem";
+    };
+    version = "3.11.0";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l1bzk6a68i1b2qix83vs40r0pbjawv67hixiq2qxsja19bbq3bc";
+      type = "gem";
+    };
+    version = "3.11.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 = "1vsqp9dij2rj9aapcn3sz7qzw0d8ln7x9p46h9rzd3jzb7his9kk";
+      type = "gem";
+    };
+    version = "3.11.2";
+  };
+  rspec-support = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c01iicvrjk6vv744jgh0y4kk9d0kg2rd2ihdyzvg5p06xm2fpzq";
+      type = "gem";
+    };
+    version = "3.11.1";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.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";
+  };
+  semverse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrh6p0756n3gjnk6am1cc4kmw6wzzd02hcajj27rlsqg3p6lwn9";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  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 = "1yynb0qhhhplmpzavfrrlwdnd1rh7rkwzcs4xf0mpy2wr6rr6clk";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  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";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  tomlrb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00x5y9h4fbvrv4xrjk4cqlkm4vq8gv73ax4alj3ac2x77zsnnrk8";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  train-core = {
+    dependencies = ["addressable" "ffi" "json" "mixlib-shellout" "net-scp" "net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f0yxh5mpr7rdn3660jf5iwc3rhv4l82dd9mhcrm6v85901rvj9c";
+      type = "gem";
+    };
+    version = "3.10.7";
+  };
+  train-winrm = {
+    dependencies = ["winrm" "winrm-elevated" "winrm-fs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07haiwh7jcg00mmiarj5g7k9kclq40yqd4j4r3c01qn2cq1sw2xb";
+      type = "gem";
+    };
+    version = "0.2.13";
+  };
+  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 = "1j4y8ik82azjxshgd4i1v4wwhsv3g9cngpygxqkkz69qaa8cxnzw";
+      type = "gem";
+    };
+    version = "0.23.1";
+  };
+  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";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gi82k102q7bkmfi7ggn9ciypn897ylln1jk9q67kjhr39fj043a";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+  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 = "0s8h35ia80p919kidb66nfp8904rhdmn41z9ghsx4ihp2ild3bn4";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  vault = {
+    dependencies = ["aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aanqvdppvqwd8z7iqpx01izm65kfx9f92j1y9g1ixirzc086jxg";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qm7s0gr2pmfcl7dxrmq38asaza4w0i2n9my4yzs499j731wh8r";
+      type = "gem";
+    };
+    version = "1.8.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";
+  };
+  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 = "1nnx4xz8g40dpi3ccqk5blj1ck06ydx09f9diksn1ghd8yxzavhi";
+      type = "gem";
+    };
+    version = "1.0.7";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chelf/default.nix b/nixpkgs/pkgs/tools/misc/chelf/default.nix
new file mode 100644
index 000000000000..7dd84eba1e44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chelf/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "chelf";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "Gottox";
+    repo = "chelf";
+    rev = "v${version}";
+    sha256 = "0xwd84aynyqsi2kcndbff176vmhrak3jmn3lfcwya59653pppjr6";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv chelf $out/bin/chelf
+  '';
+
+  meta = with lib; {
+    description = "change or display the stack size of an ELF binary";
+    homepage = "https://github.com/Gottox/chelf";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "chelf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/chrome-export/default.nix b/nixpkgs/pkgs/tools/misc/chrome-export/default.nix
new file mode 100644
index 000000000000..d3f4878ee691
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/chrome-export/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "chrome-export";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "bdesham";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0p1914wfjggjavw7a0dh2nb7z97z3wrkwrpwxkdc2pj5w5lv405m";
+  };
+
+  buildInputs = [ python3 ];
+
+  dontBuild = true;
+  installPhase = ''
+    mkdir -p $out/bin
+    cp export-chrome-bookmarks export-chrome-history $out/bin
+    mkdir -p $out/share/man/man1
+    cp man_pages/*.1 $out/share/man/man1
+  '';
+  doInstallCheck = true;
+  installCheckPhase = ''
+    bash test/run_tests $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Scripts to save Google Chrome's bookmarks and history as HTML bookmarks files";
+    homepage = "https://github.com/bdesham/chrome-export";
+    license = [ licenses.isc ];
+    maintainers = [ maintainers.bdesham ];
+    platforms = python3.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cht.sh/default.nix b/nixpkgs/pkgs/tools/misc/cht.sh/default.nix
new file mode 100644
index 000000000000..b34b1ee4d517
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cht.sh/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv
+, fetchFromGitHub
+, unstableGitUpdater
+, makeWrapper
+, curl
+, ncurses
+, rlwrap
+, xsel
+}:
+
+stdenv.mkDerivation {
+  pname = "cht.sh";
+  version = "unstable-2022-04-18";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchFromGitHub {
+    owner = "chubin";
+    repo = "cheat.sh";
+    rev = "571377f2f79422398a701cb1864487124ec3dcc6";
+    sha256 = "0e9YhYcxU9t0SFeT1TjoRGTM3h1xRC528ae69tvz+a0=";
+  };
+
+  # Fix ".cht.sh-wrapped" in the help message
+  postPatch = "substituteInPlace share/cht.sh.txt --replace '\${0##*/}' cht.sh";
+
+  installPhase = ''
+    install -m755 -D share/cht.sh.txt "$out/bin/cht.sh"
+
+    # install shell completion files
+    mkdir -p $out/share/bash-completion/completions $out/share/zsh/site-functions
+    mv share/bash_completion.txt $out/share/bash-completion/completions/cht.sh
+    cp share/zsh.txt $out/share/zsh/site-functions/_cht
+
+    wrapProgram "$out/bin/cht.sh" \
+      --prefix PATH : "${lib.makeBinPath [ curl rlwrap ncurses xsel ]}"
+  '';
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/chubin/cheat.sh.git";
+  };
+
+  meta = with lib; {
+    description = "CLI client for cheat.sh, a community driven cheat sheet";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz evanjs ];
+    homepage = "https://github.com/chubin/cheat.sh";
+    mainProgram = "cht.sh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cicero-tui/Cargo.lock b/nixpkgs/pkgs/tools/misc/cicero-tui/Cargo.lock
new file mode 100644
index 000000000000..26aa86890a5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cicero-tui/Cargo.lock
@@ -0,0 +1,958 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[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 = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cc"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0"
+
+[[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 = "cicero"
+version = "0.4.0"
+dependencies = [
+ "clap",
+ "crossterm 0.20.0",
+ "dirs",
+ "freetype-rs",
+ "hex-slice",
+ "scopeguard",
+ "serde",
+ "serde_json",
+ "servo-fontconfig",
+ "toml",
+ "tui",
+ "unic",
+ "walkdir",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f4919d60f26ae233e14233cc39746c8c8bb8cd7b05840ace83604917b51b6c7"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi 0.6.2",
+ "lazy_static",
+ "libc",
+ "mio",
+ "parking_lot 0.10.2",
+ "signal-hook 0.1.17",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ebde6a9dd5e331cd6c6f48253254d117642c31653baa475e394657c59c1f7d"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi 0.8.0",
+ "libc",
+ "mio",
+ "parking_lot 0.11.2",
+ "signal-hook 0.3.10",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2265c3f8e080075d9b6417aa72293fc71662f34b4af2612d8d1b074d29510db"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a6966607622438301997d3dac0d2f6e9a90c68bb6bc1785ea98456ab93c0507"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "dirs"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309"
+dependencies = [
+ "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",
+]
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "expat-sys"
+version = "2.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658f19728920138342f68408b7cf7644d90d4784353d8ebc32e7e8663dbe45fa"
+dependencies = [
+ "cmake",
+ "pkg-config",
+]
+
+[[package]]
+name = "freetype-rs"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74eadec9d0a5c28c54bb9882e54787275152a4e36ce206b45d7451384e5bf5fb"
+dependencies = [
+ "bitflags",
+ "freetype-sys",
+ "libc",
+]
+
+[[package]]
+name = "freetype-sys"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a"
+dependencies = [
+ "cmake",
+ "libc",
+ "pkg-config",
+]
+
+[[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 = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex-slice"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5491a308e0214554f07a81d8944abe45f552871c12e3c3c6e7e5d354039a6c4c"
+
+[[package]]
+name = "instant"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[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.102"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2a5ac8f984bfcf3a823267e5fde638acc3325f6496633a5da6bb6eb2171e103"
+
+[[package]]
+name = "lock_api"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
+dependencies = [
+ "scopeguard",
+]
+
+[[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 = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "mio"
+version = "0.7.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2bdb6314ec10835cd3293dd268473a835c02b7b352e788be788b3c6ca6bb16"
+dependencies = [
+ "libc",
+ "log",
+ "miow",
+ "ntapi",
+ "winapi",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3a704eb390aafdc107b0e392f56a82b668e3a71366993b5340f5833fd62505e"
+dependencies = [
+ "lock_api 0.3.4",
+ "parking_lot_core 0.7.2",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api 0.4.5",
+ "parking_lot_core 0.8.5",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d58c7c768d4ba344e3e8d72518ac13e259d7c7ade24167003b8488e10b6740a3"
+dependencies = [
+ "cfg-if 0.1.10",
+ "cloudabi",
+ "libc",
+ "redox_syscall 0.1.57",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+dependencies = [
+ "cfg-if 1.0.0",
+ "instant",
+ "libc",
+ "redox_syscall 0.2.10",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[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 0.2.10",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[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 = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "serde"
+version = "1.0.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.130"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f690853975602e1bfe1ccbf50504d67174e3bcf340f23b5ea9992e0587a52d8"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "servo-fontconfig"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7e3e22fe5fd73d04ebf0daa049d3efe3eae55369ce38ab16d07ddd9ac5c217c"
+dependencies = [
+ "libc",
+ "servo-fontconfig-sys",
+]
+
+[[package]]
+name = "servo-fontconfig-sys"
+version = "5.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36b879db9892dfa40f95da1c38a835d41634b825fbd8c4c418093d53c24b388"
+dependencies = [
+ "expat-sys",
+ "freetype-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c98891d737e271a2954825ef19e46bd16bdb98e2746f2eec4f7a4ef7946efd1"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29fd5867f1c4f2c5be079aee7a2adf1152ebb04a4bc4d341f504b7dece607ed4"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook 0.3.10",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
+
+[[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.76"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "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 = "toml"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tui"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9533d39bef0ae8f510e8a99d78702e68d1bbf0b98a78ec9740509d287010ae1e"
+dependencies = [
+ "bitflags",
+ "cassowary",
+ "crossterm 0.17.7",
+ "either",
+ "itertools",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "unic"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-bidi",
+ "unic-char",
+ "unic-common",
+ "unic-emoji",
+ "unic-idna",
+ "unic-normal",
+ "unic-segment",
+ "unic-ucd",
+]
+
+[[package]]
+name = "unic-bidi"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "matches",
+ "unic-ucd-bidi",
+]
+
+[[package]]
+name = "unic-char"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-basics",
+ "unic-char-property",
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-basics"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+
+[[package]]
+name = "unic-emoji"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-emoji-char",
+]
+
+[[package]]
+name = "unic-emoji-char"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-idna"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "matches",
+ "unic-idna-mapping",
+ "unic-idna-punycode",
+ "unic-normal",
+ "unic-ucd-bidi",
+ "unic-ucd-normal",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-idna-mapping"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-idna-punycode"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+
+[[package]]
+name = "unic-normal"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-ucd-normal",
+]
+
+[[package]]
+name = "unic-segment"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-ucd-segment",
+]
+
+[[package]]
+name = "unic-ucd"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-ucd-age",
+ "unic-ucd-bidi",
+ "unic-ucd-block",
+ "unic-ucd-case",
+ "unic-ucd-category",
+ "unic-ucd-common",
+ "unic-ucd-hangul",
+ "unic-ucd-ident",
+ "unic-ucd-name",
+ "unic-ucd-name_aliases",
+ "unic-ucd-normal",
+ "unic-ucd-segment",
+ "unic-ucd-unihan",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-age"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-bidi"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-block"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-case"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-category"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "matches",
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-common"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-hangul"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-ident"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-name"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-ucd-hangul",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-name_aliases"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-normal"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-category",
+ "unic-ucd-hangul",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-segment"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-emoji-char",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-unihan"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-char-property",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "git+https://github.com/eyeplum/rust-unic.git?branch=develop#ecd51a730750922eab49f0e0309c8874eb5b8121"
+dependencies = [
+ "unic-common",
+]
+
+[[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 = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[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"
diff --git a/nixpkgs/pkgs/tools/misc/cicero-tui/default.nix b/nixpkgs/pkgs/tools/misc/cicero-tui/default.nix
new file mode 100644
index 000000000000..0ab33112a6e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cicero-tui/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, pkg-config
+, expat
+, fontconfig
+, freetype
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cicero-tui";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "eyeplum";
+    repo = "cicero-tui";
+    rev = "v${version}";
+    sha256 = "sha256-2raSkIycXCdT/TSlaQviI6Eql7DONgRVsPP2B2YuW8U=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+  buildInputs = [
+    expat
+    fontconfig
+    freetype
+  ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "unic-0.9.0" = "sha256-ZE4C+rrtmHdqTmenP5c7QGNTW/n7pi8nh7lqLhHgi3w=";
+    };
+  };
+
+  meta = with lib; {
+    description = "Unicode tool with a terminal user interface";
+    homepage = "https://github.com/eyeplum/cicero-tui";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.linux;
+    mainProgram = "cicero";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/citron/default.nix b/nixpkgs/pkgs/tools/misc/citron/default.nix
new file mode 100644
index 000000000000..d40c8c936928
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/citron/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, dbus
+, installShellFiles
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "citron";
+  version = "0.15.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-6wJ4UfiwpV9zFuBR8SYj6eBiRqQitFs7wRe5R51Z3SA=";
+  };
+
+  cargoHash = "sha256-xTmhgE4iHydhZBMrHWqQUcS9KDlZAzW2CmPGpJr40Fw=";
+
+  buildInputs = [ dbus ];
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  postInstall = ''
+    installManPage doc/citron.1
+  '';
+
+  meta = {
+    homepage = "https://git.sr.ht/~grtcdr/citron";
+    description = "System data via on-demand notifications";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ vuimuich ];
+    platforms = lib.platforms.linux;
+    mainProgram = "citron";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ckb-next/default.nix b/nixpkgs/pkgs/tools/misc/ckb-next/default.nix
new file mode 100644
index 000000000000..959493d3e4bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ckb-next/default.nix
@@ -0,0 +1,63 @@
+{ lib, wrapQtAppsHook, fetchFromGitHub, substituteAll, udev, stdenv
+, pkg-config, qtbase, cmake, zlib, kmod, libXdmcp, qttools, qtx11extras, libdbusmenu, gnused
+, withPulseaudio ? stdenv.isLinux, libpulseaudio, quazip
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.6.0";
+  pname = "ckb-next";
+
+  src = fetchFromGitHub {
+    owner = "ckb-next";
+    repo = "ckb-next";
+    rev = "v${version}";
+    hash = "sha256-G0cvET3wMIi4FlBmaTkdTyYtcdVGzK4X0C2HYZr43eg=";
+  };
+
+  buildInputs = [
+    udev
+    qtbase
+    zlib
+    libXdmcp
+    qttools
+    qtx11extras
+    libdbusmenu
+    quazip
+  ] ++ lib.optional withPulseaudio libpulseaudio;
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    pkg-config
+    cmake
+  ];
+
+  cmakeFlags = [
+    "-DINSTALL_DIR_ANIMATIONS=libexec"
+    "-DUDEV_RULE_DIRECTORY=lib/udev/rules.d"
+    "-DFORCE_INIT_SYSTEM=systemd"
+    "-DDISABLE_UPDATER=1"
+  ];
+
+  patches = [
+    ./install-dirs.patch
+    (substituteAll {
+      name = "ckb-next-modprobe.patch";
+      src = ./modprobe.patch;
+      inherit kmod;
+    })
+  ];
+
+  postInstall = ''
+    substituteInPlace "$out/lib/udev/rules.d/99-ckb-next-daemon.rules" \
+      --replace-fail "/usr/bin/env sed" "${lib.getExe gnused}"
+  '';
+
+  meta = with lib; {
+    description = "Driver and configuration tool for Corsair keyboards and mice";
+    homepage = "https://github.com/ckb-next/ckb-next";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    mainProgram = "ckb-next";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch b/nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch
new file mode 100644
index 000000000000..05a661c7ffc0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ckb-next/install-dirs.patch
@@ -0,0 +1,13 @@
+diff --git a/src/daemon/CMakeLists.txt b/src/daemon/CMakeLists.txt
+index a04b80c..2969b3b 100644
+--- a/src/daemon/CMakeLists.txt
++++ b/src/daemon/CMakeLists.txt
+@@ -437,7 +437,7 @@ if ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "launchd")
+ elseif ("${CKB_NEXT_INIT_SYSTEM}" STREQUAL "systemd")
+     install(
+         FILES "${CMAKE_CURRENT_BINARY_DIR}/service/ckb-next-daemon.service"
+-        DESTINATION "${SYSTEMD_UNIT_INSTALL_DIR}"
++        DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/systemd/system"
+         PERMISSIONS
+         OWNER_READ OWNER_WRITE
+         GROUP_READ
diff --git a/nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch b/nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch
new file mode 100644
index 000000000000..257683e11f67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ckb-next/modprobe.patch
@@ -0,0 +1,26 @@
+diff --git a/src/daemon/input_linux.c b/src/daemon/input_linux.c
+index 933e628..c4f97f2 100644
+--- a/src/daemon/input_linux.c
++++ b/src/daemon/input_linux.c
+@@ -70,7 +70,7 @@ int os_inputopen(usbdevice* kb){
+ 
+     // If not available, load the module
+     if(fd < 0){
+-        if(system("modprobe uinput") != 0) {
++        if(system("@kmod@/bin/modprobe uinput") != 0) {
+             ckb_fatal("Failed to load uinput module");
+             return 1;
+         }
+diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp
+index eeadaf8..87de71f 100644
+--- a/src/gui/mainwindow.cpp
++++ b/src/gui/mainwindow.cpp
+@@ -309,7 +309,7 @@ void MainWindow::updateVersion(){
+ #elif defined(Q_OS_LINUX)
+             if(!(QFileInfo("/dev/uinput").exists() || QFileInfo("/dev/input/uinput").exists())){
+                 QProcess modprobe;
+-                modprobe.start("modprobe", QStringList("uinput"));
++                modprobe.start("@kmod@/bin/modprobe", QStringList("uinput"));
+ 
+                 if(!modprobe.waitForFinished())
+                     qDebug() << "Modprobe error";
diff --git a/nixpkgs/pkgs/tools/misc/clac/default.nix b/nixpkgs/pkgs/tools/misc/clac/default.nix
new file mode 100644
index 000000000000..e87fc0bb97ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clac/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "clac";
+  version = "0.3.3-unstable-2021-09-06";
+
+  src = fetchFromGitHub {
+    owner = "soveran";
+    repo = "clac";
+    rev = "beae8c4bc89912f4cd66bb875585fa471692cd54";
+    sha256 = "XaULDkFF9OZW7Hbh60wbGgvCJ6L+3gZNGQ9uQv3G0zU=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    mkdir -p "$out/share/doc/${pname}"
+    cp README* LICENSE "$out/share/doc/${pname}"
+  '';
+
+  meta = with lib; {
+    description = "Interactive stack-based calculator";
+    homepage = "https://github.com/soveran/clac";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.unix;
+    mainProgram = "clac";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/claws/default.nix b/nixpkgs/pkgs/tools/misc/claws/default.nix
new file mode 100644
index 000000000000..05231d2b16e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/claws/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "claws";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "thehowl";
+    repo = pname;
+    hash = "sha256-3zzUBeYfu9x3vRGX1DionLnAs1e44tFj8Z1dpVwjdCg=";
+  };
+
+  vendorHash = "sha256-FP+3Rw5IdCahhx9giQrpepMMtF1pWcyjNglrlu9ju0Q=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/thehowl/claws";
+    description = "Interactive command line client for testing websocket servers";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "claws";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clematis/default.nix b/nixpkgs/pkgs/tools/misc/clematis/default.nix
new file mode 100644
index 000000000000..cba0b6cd5f95
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clematis/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "clematis";
+  version = "2022-04-16";
+
+  src = fetchFromGitHub {
+    owner = "TorchedSammy";
+    repo = "clematis";
+    rev = "cbe74da084b9d3f6893f53721c27cd0f3a45fe93";
+    sha256 = "sha256-TjoXHbY0vUQ2rhwdCJ/s/taRd9/MG0P9HaEw2BOIy/s=";
+  };
+
+  vendorHash = "sha256-YKu+7LFUoQwCH//URIswiaqa0rmnWZJvuSn/68G3TUA=";
+
+  meta = with lib; {
+    description = "Discord rich presence for MPRIS music players";
+    homepage = "https://github.com/TorchedSammy/Clematis";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ misterio77 ];
+    mainProgram = "clematis";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clickclack/default.nix b/nixpkgs/pkgs/tools/misc/clickclack/default.nix
new file mode 100644
index 000000000000..884c2ac84bc1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clickclack/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, SDL2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clickclack";
+  version = "0.2.3";
+
+  src = fetchFromSourcehut {
+    owner = "~proycon";
+    repo = "clickclack";
+    rev = version;
+    hash = "sha256-YmlbGEmZgT/30c+mWQzdz4rKc69d75zhoNUA5FdxdMc=";
+  };
+
+  buildInputs = [
+    SDL2
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "A vibration/audio feedback tool to be used with virtual keyboards";
+    homepage = "https://git.sr.ht/~proycon/clickclack";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dotlambda ];
+    mainProgram = "clickclack";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clini/default.nix b/nixpkgs/pkgs/tools/misc/clini/default.nix
new file mode 100644
index 000000000000..95d86e6fd46d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clini/default.nix
@@ -0,0 +1,21 @@
+{ fetchCrate, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "clini";
+  version = "0.1.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-+HnoYFRG7GGef5lV4CUsUzqPzFUzXDajprLu25SCMQo=";
+  };
+
+  cargoHash = "sha256-hOPj3c3WIISRqP/9Kpc/Yh9Z/wfAkHQ/731+BkWElIQ=";
+
+  meta = with lib; {
+    description = "A simple tool to do basic modification of ini files";
+    homepage = "https://github.com/domgreen/clini";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Flakebi ];
+    mainProgram = "clini";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clipboard-jh/default.nix b/nixpkgs/pkgs/tools/misc/clipboard-jh/default.nix
new file mode 100644
index 000000000000..abd52a5d012e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipboard-jh/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libffi
+, pkg-config
+, wayland-protocols
+, wayland
+, xorg
+, darwin
+, nix-update-script
+, alsa-lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clipboard-jh";
+  version = "0.9.0.1";
+
+  src = fetchFromGitHub {
+    owner = "Slackadays";
+    repo = "clipboard";
+    rev = version;
+    hash = "sha256-iILtyURYCshicgAV3MWkgMQsXHe7Unj1A08W7tUMU2o=";
+  };
+
+  postPatch = ''
+    sed -i "/CMAKE_OSX_ARCHITECTURES/d" CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    libffi
+    wayland-protocols
+    wayland
+    xorg.libX11
+    alsa-lib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+  ];
+
+  cmakeBuildType = "MinSizeRel";
+
+  cmakeFlags = [
+    "-Wno-dev"
+    "-DINSTALL_PREFIX=${placeholder "out"}"
+  ];
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    patchelf $out/bin/cb --add-rpath $out/lib
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Cut, copy, and paste anything, anywhere, all from the terminal";
+    homepage = "https://github.com/Slackadays/clipboard";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dit7ya ];
+    platforms = platforms.all;
+    mainProgram = "cb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clipbuzz/default.nix b/nixpkgs/pkgs/tools/misc/clipbuzz/default.nix
new file mode 100644
index 000000000000..1d4b614846a6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipbuzz/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchzip
+, libX11
+, libXfixes
+, zig
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "clipbuzz";
+  version = "2.0.1";
+
+  src = fetchzip {
+    url = "https://trong.loang.net/~cnx/clipbuzz/snapshot/clipbuzz-${finalAttrs.version}.tar.gz";
+    hash = "sha256-2//IwthAjGyVSZaXjgpM1pUJGYWZVkrJ6JyrVbzOtr8=";
+  };
+
+  nativeBuildInputs = [ zig.hook ];
+
+  buildInputs = [
+    libX11
+    libXfixes
+  ];
+
+  meta = {
+    description = "Buzz on new X11 clipboard events";
+    homepage = "https://trong.loang.net/~cnx/clipbuzz";
+    license = lib.licenses.unlicense;
+    maintainers = [ lib.maintainers.McSinyx ];
+    mainProgram = "clipbuzz";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/clipnotify/default.nix b/nixpkgs/pkgs/tools/misc/clipnotify/default.nix
new file mode 100644
index 000000000000..8f94f974b058
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipnotify/default.nix
@@ -0,0 +1,27 @@
+{ libX11, libXfixes, lib, stdenv, fetchFromGitHub }:
+stdenv.mkDerivation rec {
+  pname = "clipnotify";
+  version = "unstable-2018-02-20";
+
+  src = fetchFromGitHub {
+    owner = "cdown";
+    repo = "clipnotify";
+    rev = "9cb223fbe494c5b71678a9eae704c21a97e3bddd";
+    sha256 = "1x9avjq0fgw0svcbw6b6873qnsqxbacls9sipmcv86xia4bxh8dn";
+  };
+
+  buildInputs = [ libX11 libXfixes ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp clipnotify $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Notify on new X clipboard events";
+    inherit (src.meta) homepage;
+    maintainers = with maintainers; [ jb55 ];
+    license = licenses.publicDomain;
+    mainProgram = "clipnotify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clipster/default.nix b/nixpkgs/pkgs/tools/misc/clipster/default.nix
new file mode 100644
index 000000000000..cad2c4506374
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clipster/default.nix
@@ -0,0 +1,52 @@
+{fetchFromGitHub , lib, stdenv, python3, gtk3, libwnck,
+ gobject-introspection, wrapGAppsHook }:
+
+stdenv.mkDerivation  rec {
+  pname = "clipster";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "mrichar1";
+    repo = "clipster";
+    rev = version;
+    sha256 = "sha256-MLLkFsBBQtb7RFQN+uoEmuCn5bnbkYsqoyWGZtTCI2U=";
+  };
+
+  pythonEnv = python3.withPackages(ps: with ps; [ pygobject3 ]);
+
+  nativeBuildInputs = [ gobject-introspection ];
+  buildInputs =  [ pythonEnv gtk3 libwnck wrapGAppsHook ];
+
+  installPhase = ''
+    sed -i 's/python/python3/g' clipster
+    mkdir -p $out/bin/
+    cp clipster $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "lightweight python clipboard manager";
+    longDescription = ''
+      Clipster was designed to try to add a good selection of useful features, while avoiding bad design decisions or becoming excessively large.
+      Its feature list includes:
+      - Event driven, rather than polling. More efficient, helps with power management.
+      - Control over when it write to disk, for similar reasons.
+      - Command-line options/config for everything.
+      - No global keybindings - that's the job of a Window Manager
+      - Sensible handling of unusual clipboard events. Some apps (Chrome, Emacs) trigger a clipboard 'update event' for every character you select, rather than just one event when you stop selecting.
+      - Preserves the last item in clipboard after an application closes. (Many apps clear the clipboard on exit).
+      - Minimal dependencies, no complicated build/install requirements.
+      - utf-8 support
+      - Proper handling of embedded newlines and control codes.
+      - Smart matching of urls, emails, regexes. (extract_*)
+      - Option to synchronise the SELECTION and CLIPBOARD clipboards. (sync_selections)
+      - Option to track one or both clipboards. (active_selections)
+      - Option to ignore clipboard updates form certain applications. (filter_classes)
+      - Ability to delete items in clipboard history.
+    '';
+    license = licenses.agpl3Only;
+    homepage = "https://github.com/mrichar1/clipster";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.magnetophon ];
+    mainProgram = "clipster";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cloc/default.nix b/nixpkgs/pkgs/tools/misc/cloc/default.nix
new file mode 100644
index 000000000000..14c7b2133c71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cloc/default.nix
@@ -0,0 +1,61 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perlPackages }:
+
+let version = "2.00";
+in stdenv.mkDerivation {
+  pname = "cloc";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "AlDanial";
+    repo = "cloc";
+    rev = "v${version}";
+    sha256 = "sha256-GZvrsVuPLg09yOlDmdHNZ0QLXoftgSYMFkn6PLf1/Pw=";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */Unix)
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = with perlPackages; [
+    perl
+    AlgorithmDiff
+    ParallelForkManager
+    RegexpCommon
+  ];
+
+  makeFlags = [ "prefix=" "DESTDIR=$(out)" "INSTALL=install" ];
+
+  postFixup = "wrapProgram $out/bin/cloc --prefix PERL5LIB : $PERL5LIB";
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    echo -n 'checking --version...'
+    $out/bin/cloc --version | grep '${version}' > /dev/null
+    echo ' ok'
+
+    cat > test.nix <<EOF
+    {a, b}: {
+      test = a
+        + b;
+    }
+    EOF
+
+    echo -n 'checking lines in test.nix...'
+    $out/bin/cloc --quiet --csv test.nix | grep '1,Nix,0,0,4' > /dev/null
+    echo ' ok'
+
+    runHook postInstallCheck
+  '';
+
+  meta = {
+    description = "A program that counts lines of source code";
+    homepage = "https://github.com/AlDanial/cloc";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ rycee ];
+    mainProgram = "cloc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clolcat/default.nix b/nixpkgs/pkgs/tools/misc/clolcat/default.nix
new file mode 100644
index 000000000000..5ba22c69b41b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clolcat/default.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "clolcat";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "IchMageBaume";
+    repo = "clolcat";
+    rev = version;
+    sha256 = "sha256-fLa239dwEXe4Jyy5ntgfU9V0h5wrBsvq6/s2HCis7Sc=";
+  };
+
+  preInstall = "mkdir -p $out/bin";
+
+  makeFlags = [ "DESTDIR=$(out)/bin" ];
+
+  meta = with lib; {
+    description = "Much faster lolcat";
+    homepage = "https://github.com/IchMageBaume/clolcat";
+    platforms = platforms.all;
+    maintainers = [ maintainers.felipeqq2 ];
+    license = licenses.wtfpl;
+    mainProgram = "clolcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cloud-utils/default.nix b/nixpkgs/pkgs/tools/misc/cloud-utils/default.nix
new file mode 100644
index 000000000000..32ef248ca854
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cloud-utils/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, makeWrapper
+, gawk, gnused, util-linux, file
+, wget, python3, qemu-utils
+, e2fsprogs, cdrkit
+, gptfdisk }:
+
+let
+  # according to https://packages.debian.org/sid/cloud-image-utils + https://packages.debian.org/sid/admin/cloud-guest-utils
+  guestDeps = [
+    e2fsprogs gptfdisk gawk gnused util-linux
+  ];
+  binDeps = guestDeps ++ [
+    wget file qemu-utils cdrkit
+  ];
+in stdenv.mkDerivation rec {
+  # NOTICE: if you bump this, make sure to run
+  # $ nix-build nixos/release-combined.nix -A nixos.tests.ec2-nixops
+  # growpart is needed in initrd in nixos/system/boot/grow-partition.nix
+  pname = "cloud-utils";
+  version = "0.32";
+  src = fetchurl {
+    url = "https://launchpad.net/cloud-utils/trunk/${version}/+download/cloud-utils-${version}.tar.gz";
+    sha256 = "0xxdi55lzw7j91zfajw7jhd2ilsqj2dy04i9brlk8j3pvb5ma8hk";
+  };
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 ];
+  installFlags = [ "LIBDIR=$(out)/lib" "BINDIR=$(out)/bin" "MANDIR=$(out)/man/man1" "DOCDIR=$(out)/doc" ];
+
+  # $guest output contains all executables needed for cloud-init and $out the rest + $guest
+  # This is similar to debian's package split into cloud-image-utils and cloud-guest-utils
+  # The reason is to reduce the closure size
+  outputs = [ "out" "guest"];
+
+  postFixup = ''
+    moveToOutput bin/ec2metadata $guest
+    moveToOutput bin/growpart $guest
+    moveToOutput bin/vcs-run $guest
+
+    for i in $out/bin/*; do
+      wrapProgram $i --prefix PATH : "${lib.makeBinPath binDeps}:$out/bin"
+    done
+
+    for i in $guest/bin/*; do
+      wrapProgram $i --prefix PATH : "${lib.makeBinPath guestDeps}:$guest/bin"
+      ln -s $i $out/bin
+    done
+  '';
+
+  dontBuild = true;
+
+  meta = with lib; {
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff b/nixpkgs/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff
new file mode 100644
index 000000000000..aed9112682b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clpeak/clpeak-clhpp2.diff
@@ -0,0 +1,72 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 86fec9e..b9d0341 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -22,7 +22,7 @@ elseif(WIN32 AND ${OpenCL_LIBRARIES} MATCHES "OpenCL.lib")
+   set(OpenCL_LIBRARIES ${OpenCL_LIBRARIES} cfgmgr32.lib)
+ endif()
+ 
+-FIND_PATH(HPP_FOUND CL/cl.hpp PATHS ${OpenCL_INCLUDE_DIRS})
++FIND_PATH(HPP_FOUND CL/cl2.hpp PATHS ${OpenCL_INCLUDE_DIRS})
+ if(NOT HPP_FOUND)
+   list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+   include(BuildCLHpp)
+diff --git a/include/clpeak.h b/include/clpeak.h
+index c090d31..0d9d5e2 100644
+--- a/include/clpeak.h
++++ b/include/clpeak.h
+@@ -1,14 +1,10 @@
+ #ifndef CLPEAK_HPP
+ #define CLPEAK_HPP
+ 
+-#define __CL_ENABLE_EXCEPTIONS
+-
+-#include <CL/cl.hpp>
+-
+ #include <iostream>
+ #include <stdio.h>
+ #include <iomanip>
+-#include <string.h>
++#include <string>
+ #include <sstream>
+ #include <common.h>
+ #include <logger.h>
+diff --git a/include/common.h b/include/common.h
+index 91318cb..6aaca04 100644
+--- a/include/common.h
++++ b/include/common.h
+@@ -1,7 +1,11 @@
+ #ifndef COMMON_H
+ #define COMMON_H
+ 
+-#include <CL/cl.hpp>
++#define CL_HPP_ENABLE_EXCEPTIONS
++#define CL_HPP_MINIMUM_OPENCL_VERSION 120
++#define CL_HPP_TARGET_OPENCL_VERSION 120
++#include <CL/cl2.hpp>
++
+ #if defined(__APPLE__) || defined(__MACOSX) || defined(__FreeBSD__)
+ #include <sys/types.h>
+ #endif
+diff --git a/src/clpeak.cpp b/src/clpeak.cpp
+index 8708463..4a47842 100644
+--- a/src/clpeak.cpp
++++ b/src/clpeak.cpp
+@@ -3,7 +3,7 @@
+ 
+ #define MSTRINGIFY(...) #__VA_ARGS__
+ 
+-static const char *stringifiedKernels =
++static const std::string stringifiedKernels =
+ #include "global_bandwidth_kernels.cl"
+ #include "compute_sp_kernels.cl"
+ #include "compute_hp_kernels.cl"
+@@ -65,7 +65,7 @@ int clPeak::runAll()
+ 
+       cl::Context ctx(CL_DEVICE_TYPE_ALL, cps);
+       vector<cl::Device> devices = ctx.getInfo<CL_CONTEXT_DEVICES>();
+-      cl::Program::Sources source(1, make_pair(stringifiedKernels, (strlen(stringifiedKernels) + 1)));
++      cl::Program::Sources source(1, stringifiedKernels);
+       cl::Program prog = cl::Program(ctx, source);
+ 
+       for (size_t d = 0; d < devices.size(); d++)
diff --git a/nixpkgs/pkgs/tools/misc/clpeak/default.nix b/nixpkgs/pkgs/tools/misc/clpeak/default.nix
new file mode 100644
index 000000000000..4539602320f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clpeak/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, cmake, ocl-icd, opencl-clhpp }:
+
+stdenv.mkDerivation rec {
+  pname = "clpeak";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "krrishnarraj";
+    repo = "clpeak";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "1wkjpvn4r89c3y06rv7gfpwpqw6ljmqwz0w0mljl9y5hn1r4pkx2";
+  };
+
+  patches = [
+    # The cl.hpp header was removed from opencl-clhpp. This patch
+    # updates clpeak to use the new cp2.hpp header. The patch comes
+    # from the following PR and was updated to apply against more
+    # recent versions: https://github.com/krrishnarraj/clpeak/pull/46
+    ./clpeak-clhpp2.diff
+  ];
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ ocl-icd opencl-clhpp ];
+
+  meta = with lib; {
+    description = "A tool which profiles OpenCL devices to find their peak capacities";
+    homepage = "https://github.com/krrishnarraj/clpeak/";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ ];
+    mainProgram = "clpeak";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/clubhouse-cli/default.nix b/nixpkgs/pkgs/tools/misc/clubhouse-cli/default.nix
new file mode 100644
index 000000000000..22148f820d40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/clubhouse-cli/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "clubhouse-cli";
+  version = "2.7.0";
+
+  src = fetchFromGitHub {
+    owner = "andjosh";
+    repo = "clubhouse-cli";
+    rev = "v${version}";
+    hash = "sha256-OGUEPWKL3GBIQHEDljX1gXMRDEztIrJT5ivAIcyW91k=";
+  };
+
+  npmDepsHash = "sha256-QlCLEvmqLVkWwgTVlToYD6bptLp/MVfQ10Wdfr3PIr4=";
+
+  meta = {
+    description = "A command line tool for viewing, creating and updating clubhouse.io stories";
+    homepage = "https://github.com/andjosh/clubhouse-cli";
+    changelog = "https://github.com/andjosh/clubhouse-cli/blob/${src.rev}/CHANGELOG.md";
+    license = lib.licenses.mit;
+    mainProgram = "club";
+    maintainers = with lib.maintainers; [ tobim ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cmdpack/default.nix b/nixpkgs/pkgs/tools/misc/cmdpack/default.nix
new file mode 100644
index 000000000000..0fe2c75d1ea0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cmdpack/default.nix
@@ -0,0 +1,136 @@
+{ stdenv, lib, fetchurl }:
+let
+  mkCmdPackDerivation = { pname, postInstall ? "", description }: stdenv.mkDerivation {
+    inherit pname postInstall;
+
+    version = "1.03";
+
+    src = fetchurl {
+      url = "https://web.archive.org/web/20140330233023/http://www.neillcorlett.com/downloads/cmdpack-1.03-src.tar.gz";
+      sha256 = "0v0a9rpv59w8lsp1cs8f65568qj65kd9qp7854z1ivfxfpq0da2n";
+    };
+
+    buildPhase = ''
+      runHook preBuild
+
+      gcc -o ${pname} src/${pname}.c
+
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/bin
+      cp ${pname} $out/bin
+
+      runHook postInstall
+    '';
+
+    meta = with lib; {
+      inherit description;
+
+      homepage = "https://web.archive.org/web/20140330233023/http://www.neillcorlett.com/cmdpack/";
+      platforms = platforms.all;
+      license = licenses.gpl3Plus;
+      maintainers = with maintainers; [ zane ];
+    };
+  };
+in
+{
+  bin2iso = mkCmdPackDerivation {
+    pname = "bin2iso";
+    description = "Convert CD .BIN to .ISO";
+  };
+
+  bincomp = mkCmdPackDerivation {
+    pname = "bincomp";
+    description = "Compare binary files";
+  };
+
+  brrrip = mkCmdPackDerivation {
+    pname = "brrrip";
+    description = "Rip SNES BRR sound samples";
+  };
+
+  byteshuf = mkCmdPackDerivation {
+    pname = "byteshuf";
+    description = "Shuffle or unshuffle bytes in a file";
+  };
+
+  byteswap = mkCmdPackDerivation {
+    pname = "byteswap";
+    description = "Swap byte order of files";
+  };
+
+  cdpatch = mkCmdPackDerivation {
+    pname = "cdpatch";
+    description = "CD-XA image insert/extract utility";
+  };
+
+  ecm = mkCmdPackDerivation {
+    pname = "ecm";
+    postInstall = "ln $out/bin/ecm $out/bin/unecm";
+    description = "Encoder/decoder for Error Code Modeler format";
+  };
+
+  fakecrc = mkCmdPackDerivation {
+    pname = "fakecrc";
+    description = "Fake the CRC32 of a file";
+  };
+
+  hax65816 = mkCmdPackDerivation {
+    pname = "hax65816";
+    description = "Simple 65816 disassembler";
+  };
+
+  id3point = mkCmdPackDerivation {
+    pname = "id3point";
+    description = "Pointless ID3v1 Tagger";
+  };
+
+  pecompat = mkCmdPackDerivation {
+    pname = "pecompat";
+    description = "Maximize compatibility of a Win32 PE file";
+  };
+
+  rels = mkCmdPackDerivation {
+    pname = "rels";
+    description = "Relative Searcher";
+  };
+
+  screamf = mkCmdPackDerivation {
+    pname = "screamf";
+    description = ".AMF to .S3M converter";
+  };
+
+  subfile = mkCmdPackDerivation {
+    pname = "subfile";
+    description = "Extract a portion of a file";
+  };
+
+  uips = mkCmdPackDerivation {
+    pname = "uips";
+    description = "Universal IPS patch create/apply utility";
+  };
+
+  usfv = mkCmdPackDerivation {
+    pname = "usfv";
+    description = "Universal SFV create/verify utility";
+  };
+
+  vb2rip = mkCmdPackDerivation {
+    pname = "vb2rip";
+    description = "VB2 sound format ripping utility";
+  };
+
+  wordadd = mkCmdPackDerivation {
+    pname = "wordadd";
+    description = "Addition word puzzle solver";
+  };
+
+  zerofill = mkCmdPackDerivation {
+    pname = "zerofill";
+    description = "Create a large, empty file";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cod/default.nix b/nixpkgs/pkgs/tools/misc/cod/default.nix
new file mode 100644
index 000000000000..eba78d6c2263
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cod/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchFromGitHub, buildGoModule, python3 }:
+
+buildGoModule rec {
+  pname = "cod";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "dim-an";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-mT7OkR8fXXTE3TPx9AmH6ehKGLk4CP9euBPs2zVAJnI=";
+  };
+
+  vendorHash = "sha256-kezfBDTgpOTBYKTNlwuP+M5tXU2w/MXz0B5nBJcL1io=";
+
+  ldflags = [ "-s" "-w" "-X main.GitSha=${src.rev}" ];
+
+  nativeCheckInputs = [ python3 ];
+
+  preCheck = ''
+    pushd test/binaries/
+    for f in *.py; do
+      patchShebangs ''$f
+    done
+    popd
+    export COD_TEST_BINARY="''${NIX_BUILD_TOP}/go/bin/cod"
+
+    substituteInPlace test/learn_test.go --replace TestLearnArgparseSubCommand SkipLearnArgparseSubCommand
+  '';
+
+  meta = with lib; {
+    description = "Tool for generating Bash/Fish/Zsh autocompletions based on `--help` output";
+    homepage = "https://github.com/dim-an/cod/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    broken = stdenv.isDarwin;
+    mainProgram = "cod";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/code-minimap/default.nix b/nixpkgs/pkgs/tools/misc/code-minimap/default.nix
new file mode 100644
index 000000000000..34d8547ebd32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/code-minimap/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "code-minimap";
+  version = "0.6.7";
+
+  src = fetchFromGitHub {
+    owner = "wfxr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-d9qcSSiRv1I7NYuLrra5ShIUXT2HVeHGD0WPb+dnQCc=";
+  };
+
+  cargoHash = "sha256-5/UgEzkJw9XDgtS1jKyWh5ijTp3L+UQLuE5CXcyIgTs=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "A high performance code minimap render";
+    homepage = "https://github.com/wfxr/code-minimap";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ bsima ];
+    mainProgram = "code-minimap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/codebraid/default.nix b/nixpkgs/pkgs/tools/misc/codebraid/default.nix
new file mode 100644
index 000000000000..516dd66cf01b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/codebraid/default.nix
@@ -0,0 +1,42 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "codebraid";
+  version = "0.11.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "gpoore";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-E9vzGK9ZEVwF+UBpSkdM+hm6vINen/A+LgnnPpc77QQ=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ setuptools ];
+  propagatedBuildInputs = with python3Packages; [ bespon ];
+  # unfortunately upstream doesn't contain tests
+  checkPhase = ''
+    $out/bin/codebraid --help > /dev/null
+  '';
+  meta = with lib; {
+    homepage = "https://github.com/gpoore/codebraid";
+    description = ''
+      Live code in Pandoc Markdown.
+
+      Codebraid is a Python program that enables executable code in Pandoc
+      Markdown documents. Using Codebraid can be as simple as adding a class to
+      your code blocks' attributes, and then running codebraid rather than
+      pandoc to convert your document from Markdown to another format.
+      codebraid supports almost all of pandoc's options and passes them to
+      pandoc internally.
+
+      Codebraid provides two options for executing code. It includes a built-in
+      code execution system that currently supports Python 3.5+, Julia, Rust,
+      R, Bash, and JavaScript. Code can also be executed using Jupyter kernels,
+      with support for rich output like plots.
+    '';
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ synthetica ];
+    mainProgram = "codebraid";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/codemov/default.nix b/nixpkgs/pkgs/tools/misc/codemov/default.nix
new file mode 100644
index 000000000000..d8cc40e3d861
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/codemov/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeBinaryWrapper
+, pkg-config
+, oniguruma
+, ffmpeg
+, git
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "codemov";
+  version = "unstable-2023-08-08";
+
+  src = fetchFromGitHub {
+    owner = "sloganking";
+    repo = "codemov";
+    rev = "8a4d6e50c21010866ca06f845f30c2aa54c09854";
+    hash = "sha256-nOqh8kXS5mx0AM4NvIcwvC0lAZRHsQwrxI0c+9PeroU=";
+  };
+
+  cargoHash = "sha256-cyzoMD97ofrbm3BDAtl8pSezcM4B2TVbW9V5J6xRVLc=";
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+    pkg-config
+  ];
+
+  buildInputs = [
+    oniguruma
+  ];
+
+  env = {
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
+
+  postInstall = ''
+    wrapProgram $out/bin/codemov \
+      --prefix PATH : ${lib.makeBinPath [ ffmpeg git ]}
+  '';
+
+  meta = with lib; {
+    description = "Create a video of how a git repository's code changes over time";
+    homepage = "https://github.com/sloganking/codemov";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "codemov";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/codevis/default.nix b/nixpkgs/pkgs/tools/misc/codevis/default.nix
new file mode 100644
index 000000000000..c41351f95983
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/codevis/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, oniguruma
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "codevis";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "sloganking";
+    repo = "codevis";
+    rev = "v${version}";
+    hash = "sha256-LZ6NsoyEPUvgcVdbG7U2Vzuz/TLLraScvW97PocUNpU=";
+  };
+
+  cargoHash = "sha256-sQKZJVnRs4IcBKmmaQDoJYBQtnuZW4aEICr6Xa8Flnk=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    oniguruma
+  ];
+
+  env = {
+    RUSTONIG_SYSTEM_LIBONIG = true;
+  };
+
+  meta = with lib; {
+    description = "A tool to take all source code in a folder and render them to one image";
+    homepage = "https://github.com/sloganking/codevis";
+    changelog = "https://github.com/sloganking/codevis/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "codevis";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coinlive/default.nix b/nixpkgs/pkgs/tools/misc/coinlive/default.nix
new file mode 100644
index 000000000000..2d5faff98a02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coinlive/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+, pkg-config
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "coinlive";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "mayeranalytics";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-llw97jjfPsDd4nYi6lb9ug6sApPoD54WlzpJswvdbRs=";
+  };
+
+  cargoSha256 = "sha256-T1TgwnohUDvfpn6GXNP4xJGHM3aenMK+ORxE3z3PPA4=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  checkFlags = [
+    # requires network access
+    "--skip=utils::test_get_infos"
+  ];
+
+  meta = with lib; {
+    description = "Live cryptocurrency prices CLI";
+    homepage = "https://github.com/mayeranalytics/coinlive";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "coinlive";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colord-gtk/default.nix b/nixpkgs/pkgs/tools/misc/colord-gtk/default.nix
new file mode 100644
index 000000000000..decca87739ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colord-gtk/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, fetchurl
+, colord
+, gettext
+, meson
+, ninja
+, gobject-introspection
+, gtk-doc
+, docbook-xsl-ns
+, docbook-xsl-nons
+, docbook_xml_dtd_412
+, libxslt
+, glib
+, withGtk4 ? false
+, gtk3
+, gtk4
+, pkg-config
+, lcms2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "colord-gtk";
+  version = "0.3.1";
+
+  outputs = [ "out" "dev" "devdoc" ];
+
+  src = fetchurl {
+    url = "https://www.freedesktop.org/software/colord/releases/${pname}-${version}.tar.xz";
+    sha256 = "wXa4ibdWMKF/Tj1+8kwJo+EjaOYzSWCHRZyLU6w6Ei0=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    gettext
+    meson
+    ninja
+    gobject-introspection
+    gtk-doc
+    docbook-xsl-ns
+    docbook-xsl-nons
+    docbook_xml_dtd_412
+    libxslt
+  ];
+
+  buildInputs = [
+    glib
+    lcms2
+  ];
+
+  propagatedBuildInputs = [
+    colord
+  ] ++ (if withGtk4 then [
+    gtk4
+  ] else [
+    gtk3
+  ]);
+
+  mesonFlags = [
+    "-Dgtk4=${lib.boolToString withGtk4}"
+    "-Dgtk3=${lib.boolToString (!withGtk4)}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.freedesktop.org/software/colord/intro.html";
+    license = licenses.lgpl21Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+    mainProgram = "cd-convert";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colord/default.nix b/nixpkgs/pkgs/tools/misc/colord/default.nix
new file mode 100644
index 000000000000..2a4c2c001668
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colord/default.nix
@@ -0,0 +1,121 @@
+{ lib
+, stdenv
+, fetchurl
+, nixosTests
+, bash-completion
+, glib
+, polkit
+, pkg-config
+, gettext
+, gusb
+, lcms2
+, sqlite
+, systemd
+, dbus
+, gobject-introspection
+, argyllcms
+, meson
+, mesonEmulatorHook
+, ninja
+, vala
+, libgudev
+, wrapGAppsNoGuiHook
+, shared-mime-info
+, sane-backends
+, docbook_xsl
+, docbook_xsl_ns
+, docbook_xml_dtd_412
+, gtk-doc
+, libxslt
+, enableDaemon ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "colord";
+  version = "1.4.6";
+
+  outputs = [ "out" "dev" "devdoc" "man" "installedTests" ];
+
+  src = fetchurl {
+    url = "https://www.freedesktop.org/software/colord/releases/${pname}-${version}.tar.xz";
+    sha256 = "dAdjGie/5dG2cueuQndwAcEF2GC3tzkig8jGMA3ojm8=";
+  };
+
+  patches = [
+    # Put installed tests into its own output
+    ./installed-tests-path.patch
+  ];
+
+  postPatch = ''
+    for file in data/tests/meson.build lib/colord/cd-test-shared.c lib/colord/meson.build; do
+        substituteInPlace $file --subst-var-by installed_tests_dir "$installedTests"
+    done
+  '';
+
+  mesonFlags = [
+    "--localstatedir=/var"
+    "-Dinstalled_tests=true"
+    "-Dlibcolordcompat=true"
+    "-Dsane=true"
+    "-Dvapi=true"
+    "-Ddaemon=${lib.boolToString enableDaemon}"
+    "-Ddaemon_user=colord"
+  ];
+
+  nativeBuildInputs = [
+    docbook_xml_dtd_412
+    docbook_xsl
+    docbook_xsl_ns
+    gettext
+    gobject-introspection
+    gtk-doc
+    libxslt
+    meson
+    ninja
+    pkg-config
+    shared-mime-info
+    vala
+    wrapGAppsNoGuiHook
+  ] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
+    mesonEmulatorHook
+  ];
+
+  buildInputs = [
+    argyllcms
+    bash-completion
+    dbus
+    glib
+    gusb
+    lcms2
+    libgudev
+    sane-backends
+    sqlite
+    systemd
+  ] ++ lib.optionals enableDaemon [
+    polkit
+  ];
+
+  postInstall = ''
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "${placeholder "out"}/lib/systemd/system";
+  PKG_CONFIG_SYSTEMD_SYSTEMDUSERUNITDIR = "${placeholder "out"}/lib/systemd/user";
+  PKG_CONFIG_SYSTEMD_TMPFILESDIR = "${placeholder "out"}/lib/tmpfiles.d";
+  PKG_CONFIG_BASH_COMPLETION_COMPLETIONSDIR = "${placeholder "out"}/share/bash-completion/completions";
+  PKG_CONFIG_UDEV_UDEVDIR = "${placeholder "out"}/lib/udev";
+
+  passthru = {
+    tests = {
+      installedTests = nixosTests.installed-tests.colord;
+    };
+  };
+
+  meta = with lib; {
+    description = "System service to manage, install and generate color profiles to accurately color manage input and output devices";
+    homepage = "https://www.freedesktop.org/software/colord/";
+    license = licenses.lgpl2Plus;
+    maintainers = [ maintainers.marcweber ] ++ teams.freedesktop.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch b/nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch
new file mode 100644
index 000000000000..6d91cbbcb022
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colord/installed-tests-path.patch
@@ -0,0 +1,72 @@
+diff --git a/data/tests/meson.build b/data/tests/meson.build
+index 8b38f10..250582c 100644
+--- a/data/tests/meson.build
++++ b/data/tests/meson.build
+@@ -17,6 +17,6 @@ if get_option('installed_tests')
+       'test.ccss',
+       'test.sp',
+     ],
+-    install_dir: join_paths(libexecdir, 'installed-tests', 'colord')
++    install_dir: join_paths('@installed_tests_dir@', 'libexec', 'installed-tests', 'colord')
+   )
+ endif
+diff --git a/lib/colord/cd-test-shared.c b/lib/colord/cd-test-shared.c
+index c3b9d23..7577e13 100644
+--- a/lib/colord/cd-test-shared.c
++++ b/lib/colord/cd-test-shared.c
+@@ -45,7 +45,8 @@ cd_test_get_filename (const gchar *filename)
+ 
+ 	/* running in the installed system */
+ 	if (g_getenv ("INSTALLED_TESTS") != NULL) {
+-		return g_build_filename (LIBEXECDIR,
++		return g_build_filename ("@installed_tests_dir@",
++					 "libexec",
+ 					 "installed-tests",
+ 					 PACKAGE_NAME,
+ 					 filename,
+diff --git a/lib/colord/meson.build b/lib/colord/meson.build
+index 61f0518..df71358 100644
+--- a/lib/colord/meson.build
++++ b/lib/colord/meson.build
+@@ -214,20 +214,20 @@ endif
+ if get_option('installed_tests')
+ con2 = configuration_data()
+ con2.set('installedtestsdir',
+-         join_paths(libexecdir, 'installed-tests', 'colord'))
++         join_paths('@installed_tests_dir@', 'libexec', 'installed-tests', 'colord'))
+ configure_file(
+   input : 'colord-daemon.test.in',
+   output : 'colord-daemon.test',
+   configuration : con2,
+   install: true,
+-  install_dir: join_paths('share', 'installed-tests', 'colord'),
++  install_dir: join_paths('@installed_tests_dir@', 'share', 'installed-tests', 'colord'),
+ )
+ configure_file(
+   input : 'colord-private.test.in',
+   output : 'colord-private.test',
+   configuration : con2,
+   install: true,
+-  install_dir: join_paths('share', 'installed-tests', 'colord'),
++  install_dir: join_paths('@installed_tests_dir@', 'share', 'installed-tests', 'colord'),
+ )
+ endif
+ 
+@@ -254,7 +254,7 @@ if get_option('tests')
+       '-DTESTDATADIR="' + testdatadir + '"',
+     ],
+     install : get_option('installed_tests'),
+-    install_dir : join_paths(libexecdir, 'installed-tests', 'colord'),
++    install_dir : join_paths('@installed_tests_dir@','libexec', 'installed-tests', 'colord'),
+   )
+   test('colord-test-private', e)
+   e = executable(
+@@ -278,7 +278,7 @@ if get_option('tests')
+       '-DTESTDATADIR="' + testdatadir + '"',
+     ],
+     install : get_option('installed_tests'),
+-    install_dir : join_paths(libexecdir, 'installed-tests', 'colord'),
++    install_dir : join_paths('@installed_tests_dir@', 'libexec', 'installed-tests', 'colord'),
+   )
+   test('colord-test-daemon', e)
+ endif
diff --git a/nixpkgs/pkgs/tools/misc/colorless/default.nix b/nixpkgs/pkgs/tools/misc/colorless/default.nix
new file mode 100644
index 000000000000..d7613d30d097
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colorless/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchurl
+, stdenvNoCC
+, coreutils
+, bash
+, binSh ? "${bash}/bin/bash"
+, gnused
+, less
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "colorless";
+  version = "109";
+
+  src = fetchurl {
+    url = "http://software.kimmo.suominen.com/${pname}-${version}.tar.gz";
+    sha256 = "039a140fa11cf153cc4d03e4f753b7ff142cab88ff116b7600ccf9edee81927c";
+  };
+
+  makeFlags = [
+    "TOOLPATH=${lib.makeBinPath [ coreutils gnused less ]}"
+    "PREFIX=$(out)"
+    "SHELL=${binSh}"
+  ];
+
+  preInstall = ''
+    mkdir -p $out/bin $out/share/man/man1
+  '';
+
+  postInstall = ''
+    install -Dm644 -t $out/share/doc/colorless LICENSE README.md
+  '';
+
+  strictDeps = true;
+
+  meta = with lib; {
+    homepage = "https://kimmo.suominen.com/sw/colorless";
+    description = "Enable colorised command output and pipe it to less";
+    longDescription = ''
+      colorless is a wrapper that enables colorised output of commands and
+      pipes the output to less(1).
+    '';
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ suominen ];
+    platforms = platforms.unix;
+    mainProgram = "colorless";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colorpanes/default.nix b/nixpkgs/pkgs/tools/misc/colorpanes/default.nix
new file mode 100644
index 000000000000..e89dc66897c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colorpanes/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchFromGitea }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "colorpanes";
+  version = "3.0.1";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "qaOH+LXNDq+utwyI1yzHWNt25AvdAXCTAziGV9ElroU=";
+  };
+
+  cargoSha256 = "eJne4OmV4xHxntTb8HE+2ghX1hZLE3WQ3QqsjVm9E4M=";
+
+  postInstall = ''
+    ln -s $out/bin/colp $out/bin/colorpanes
+  '';
+
+  meta = with lib; {
+    description = "Panes in the 8 bright terminal colors with shadows of the respective darker color";
+    homepage = "https://codeberg.org/annaaurora/colorpanes";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colorpicker/default.nix b/nixpkgs/pkgs/tools/misc/colorpicker/default.nix
new file mode 100644
index 000000000000..8b45da17626c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colorpicker/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gtk2 }:
+
+stdenv.mkDerivation rec {
+  pname = "colorpicker";
+  version = "unstable-2017-09-01";
+
+  src = fetchFromGitHub {
+    owner = "Jack12816";
+    repo = "colorpicker";
+    rev = "a4455b92fde1dfbac81e7852f171093932154a30";
+    sha256 = "z2asxTIP8WcsWcePmIg0k4bOF2JwkqOxNqSpQv4/a40=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 ];
+
+  installPhase = ''
+    install -Dt $out/bin colorpicker
+  '';
+
+  meta = with lib; {
+    description = "Click on a pixel on your screen and print its color value in RGB";
+    homepage = "https://github.com/Jack12816/colorpicker";
+    maintainers = with maintainers; [ jb55 ];
+    license = licenses.mit;
+    mainProgram = "colorpicker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/colorz/default.nix b/nixpkgs/pkgs/tools/misc/colorz/default.nix
new file mode 100644
index 000000000000..f60843afcfb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/colorz/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "colorz";
+  version = "1.0.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0ghd90lgplf051fs5n5bb42zffd3fqpgzkbv6bhjw7r8jqwgcky0";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ pillow scipy ];
+
+  checkPhase = ''
+    $out/bin/colorz --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Color scheme generator";
+    homepage = "https://github.com/metakirby5/colorz";
+    license = licenses.mit;
+    maintainers = with maintainers; [ skykanin ];
+    mainProgram = "colorz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/compdb/default.nix b/nixpkgs/pkgs/tools/misc/compdb/default.nix
new file mode 100644
index 000000000000..0a5e689bb4b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/compdb/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "compdb";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Sarcasm";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-nFAgTrup6V5oE+LP4UWDOCgTVCv2v9HbQbkGW+oDnTg=";
+  };
+
+  meta = with lib; {
+    description = "Command line tool to manipulate compilation databases";
+    license = licenses.mit;
+    homepage = "https://github.com/Sarcasm/compdb";
+    maintainers = [ maintainers.detegr ];
+    mainProgram = "compdb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/complete-alias/default.nix b/nixpkgs/pkgs/tools/misc/complete-alias/default.nix
new file mode 100644
index 000000000000..fdf0c1ae0ab2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/complete-alias/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, stdenvNoCC
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "complete-alias";
+  version = "1.18.0";
+
+  src = fetchFromGitHub {
+    owner = "cykerway";
+    repo = pname;
+    rev = version;
+    sha256 = "18lmdb3inphxyjv08ing5wckqnjq0m5zfl0f15mqzlvf2ypar63x";
+  };
+
+  buildPhase = ''
+    runHook preBuild
+
+    # required for the patchShebangs setup hook
+    chmod +x complete_alias
+
+    patchShebangs complete_alias
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r complete_alias "$out"/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Automagical shell alias completion";
+    homepage = "https://github.com/cykerway/complete-alias";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ tuxinaut ];
+    mainProgram = "complete_alias";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/completely/Gemfile b/nixpkgs/pkgs/tools/misc/completely/Gemfile
new file mode 100644
index 000000000000..bfae92920327
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/completely/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'completely'
diff --git a/nixpkgs/pkgs/tools/misc/completely/Gemfile.lock b/nixpkgs/pkgs/tools/misc/completely/Gemfile.lock
new file mode 100644
index 000000000000..656c96cbc40c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/completely/Gemfile.lock
@@ -0,0 +1,20 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    colsole (0.8.2)
+    completely (0.5.2)
+      colsole (~> 0.6)
+      mister_bin (~> 0.7.2)
+    docopt (0.6.1)
+    mister_bin (0.7.3)
+      colsole (~> 0.7)
+      docopt (~> 0.6)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  completely
+
+BUNDLED WITH
+   2.4.5
diff --git a/nixpkgs/pkgs/tools/misc/completely/default.nix b/nixpkgs/pkgs/tools/misc/completely/default.nix
new file mode 100644
index 000000000000..326887299c0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/completely/default.nix
@@ -0,0 +1,22 @@
+{ lib
+, bundlerApp
+, bundlerUpdateScript
+}:
+
+bundlerApp {
+  pname = "completely";
+
+  gemdir = ./.;
+  exes = [ "completely" ];
+
+  passthru.updateScript = bundlerUpdateScript "completely";
+
+  meta = with lib; {
+    description = "Generate bash completion scripts using a simple configuration file";
+    homepage = "https://github.com/DannyBen/completely";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ zendo ];
+    mainProgram = "completely";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/completely/gemset.nix b/nixpkgs/pkgs/tools/misc/completely/gemset.nix
new file mode 100644
index 000000000000..a078a113f6d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/completely/gemset.nix
@@ -0,0 +1,44 @@
+{
+  colsole = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l29sxy4p9jbvcihckxfsyqx98b8xwzd3hjqvdh1zxw8nv5walnp";
+      type = "gem";
+    };
+    version = "0.8.2";
+  };
+  completely = {
+    dependencies = ["colsole" "mister_bin"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w7cmmsp9m42c8w4j03kr98zy7x7yszw3qsm3ww600dmc0d0xd2b";
+      type = "gem";
+    };
+    version = "0.5.2";
+  };
+  docopt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rvlfbb7kzyagncm4zdpcjwrh682zamgf5rcf5qmj0bd6znkgy3k";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  mister_bin = {
+    dependencies = ["colsole" "docopt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f51zs9wjpslhdadp8yfx4ij0jj1ya92cbzqlfd2wfr19wdr2jgd";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/conserver/default.nix b/nixpkgs/pkgs/tools/misc/conserver/default.nix
new file mode 100644
index 000000000000..30ac050ee0d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/conserver/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, libxcrypt
+, gssapiSupport ? false
+, libkrb5
+, freeipmiSupport ? false
+, freeipmi
+, ipv6Support ? true
+, opensslSupport ? true
+, openssl
+, trustUdsCredSupport ? false
+, udsSupport ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "conserver";
+  version = "8.2.7";
+
+  src = fetchFromGitHub {
+    owner = "bstansell";
+    repo = "conserver";
+    rev = "v${version}";
+    sha256 = "sha256-LiCknqitBoa8E8rNMVgp1004CwkW8G4O5XGKe4NfZI8=";
+  };
+
+  # Remove upon next release since upstream is fixed
+  # https://github.com/bstansell/conserver/pull/82
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/bstansell/conserver/commit/84fc79a459e00dbc87b8cfc943c5045bfcc7aeeb.patch";
+      sha256 = "sha256:1dy8r9z7rv8512fl0rk5gi1vl02hnh7x0i6flvpcc13h6r6fhxyc";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ libxcrypt ]
+    ++ lib.optionals freeipmiSupport [ freeipmi ]
+    ++ lib.optionals gssapiSupport [ libkrb5 ]
+    ++ lib.optionals opensslSupport [ openssl ];
+
+  configureFlags = [ "--with-ccffile=/dev/null" "--with-cffile=/dev/null" ]
+    ++ lib.optionals freeipmiSupport [ "--with-freeipmi=${freeipmi}/include" ]
+    ++ lib.optionals gssapiSupport [ "--with-gssapi=${libkrb5.dev}/include" ]
+    ++ lib.optionals ipv6Support [ "--with-ipv6" ]
+    ++ lib.optionals opensslSupport [ "--with-openssl=${openssl.dev}/include" ]
+    ++ lib.optionals trustUdsCredSupport [ "--with-trust-uds-cred" ]
+    ++ lib.optionals udsSupport [ "--with-uds" ];
+
+  # Disabled due to exist upstream cases failing 8/15 tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://www.conserver.com/";
+    description = "An application that allows multiple users to watch a serial console at the same time";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sarcasticadmin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/contacts/default.nix b/nixpkgs/pkgs/tools/misc/contacts/default.nix
new file mode 100644
index 000000000000..175b7a9ed247
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/contacts/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, xcbuildHook, Foundation, AddressBook }:
+
+stdenv.mkDerivation {
+  version = "1.1a-3";
+  pname = "contacts";
+
+  src = fetchFromGitHub {
+    owner = "dhess";
+    repo = "contacts";
+    rev = "4092a3c6615d7a22852a3bafc44e4aeeb698aa8f";
+    hash = "sha256-Li/c5uf9rfpuU+hduuSm7EmhVwIIkS72dqzmN+0cE3A=";
+  };
+
+  postPatch = ''
+    substituteInPlace contacts.m \
+      --replace "int peopleSort" "long peopleSort"
+  '';
+
+  nativeBuildInputs = [ xcbuildHook ];
+  buildInputs = [ Foundation AddressBook ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp Products/Default/contacts $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Access contacts from the Mac address book from command-line";
+    homepage = "http://www.gnufoo.org/contacts/contacts.html";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ jwiegley ];
+    platforms = platforms.darwin;
+    hydraPlatforms = platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/convbin/default.nix b/nixpkgs/pkgs/tools/misc/convbin/default.nix
new file mode 100644
index 000000000000..96164902dc2c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/convbin/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "convbin";
+  version = "3.7";
+
+  src = fetchFromGitHub {
+    owner = "mateoconlechuga";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-zCRM62xwaPaN8+cg+CeaqK/9hKpZmSBBeUOQqAvQGYw=";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile --replace "-flto" ""
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  checkPhase = ''
+    pushd test
+    patchShebangs test.sh
+    ./test.sh
+    popd
+  '';
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 bin/convbin $out/bin/convbin
+  '';
+
+  meta = with lib; {
+    description = "Converts files to other formats";
+    longDescription = ''
+      This program is used to convert files to other formats,
+      specifically for the TI84+CE and related calculators.
+    '';
+    homepage = "https://github.com/mateoconlechuga/convbin";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ luc65r ];
+    platforms = platforms.all;
+    mainProgram = "convbin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/convfont/default.nix b/nixpkgs/pkgs/tools/misc/convfont/default.nix
new file mode 100644
index 000000000000..d58f7ecc2bea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/convfont/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "convfont";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "drdnar";
+    repo = pname;
+    rev = "v20190438";
+    sha256 = "1lj24yq5gj9hxhy1srk73521q95zyqzkws0q4v271hf5wmqaxa2f";
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    install -Dm755 convfont $out/bin/convfont
+  '';
+
+  meta = with lib; {
+    description = "Converts font for use with FontLibC";
+    homepage = "https://github.com/drdnar/convfont";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ luc65r ];
+    platforms = platforms.all;
+    mainProgram = "convfont";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/convimg/default.nix b/nixpkgs/pkgs/tools/misc/convimg/default.nix
new file mode 100644
index 000000000000..1e37c2636bbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/convimg/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "convimg";
+  version = "9.3";
+
+  src = fetchFromGitHub {
+    owner = "mateoconlechuga";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xnfMHlbQ7XG/mvnWoGkRHhxIK2u7kWJTVnLxd9c5oNU=";
+    fetchSubmodules = true;
+  };
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  checkPhase = ''
+    pushd test
+    patchShebangs test.sh
+    ./test.sh
+    popd
+  '';
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 bin/convimg $out/bin/convimg
+  '';
+
+  meta = with lib; {
+    description = "Image palette quantization";
+    longDescription = ''
+      This program is used to convert images to other formats,
+      specifically for the TI84+CE and related calculators.
+    '';
+    homepage = "https://github.com/mateoconlechuga/convimg";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ luc65r ];
+    platforms = platforms.linux;
+    mainProgram = "convimg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/convmv/default.nix b/nixpkgs/pkgs/tools/misc/convmv/default.nix
new file mode 100644
index 000000000000..8d392f78f47f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/convmv/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "convmv";
+  version = "2.05";
+
+  src = fetchurl {
+    url = "https://www.j3e.de/linux/convmv/convmv-${version}.tar.gz";
+    sha256 = "19hwv197p7c23f43vvav5bs19z9b72jzca2npkjsxgprwj5ardjk";
+  };
+
+  preBuild=''
+    makeFlags="PREFIX=$out"
+  '';
+
+  patchPhase=''
+    tar -xf testsuite.tar
+    patchShebangs .
+  '';
+
+  doCheck = true;
+  checkTarget = "test";
+
+  buildInputs = [ perl ];
+
+  meta = with lib; {
+    description = "Converts filenames from one encoding to another";
+    platforms = platforms.linux ++ platforms.freebsd ++ platforms.cygwin;
+    maintainers = [ ];
+    license = licenses.gpl2Plus;
+    mainProgram = "convmv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/copier/default.nix b/nixpkgs/pkgs/tools/misc/copier/default.nix
new file mode 100644
index 000000000000..2b1a65cf99eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/copier/default.nix
@@ -0,0 +1,58 @@
+{ lib, git, python3, fetchFromGitHub }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "copier";
+  version = "9.1.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "copier-org";
+    repo = "copier";
+    rev = "v${version}";
+    # Conflict on APFS on darwin
+    postFetch = ''
+      rm $out/tests/demo/doc/ma*ana.txt
+    '';
+    hash = "sha256-x5r7Xv4lAOMkR+UIEeSY7LvbYMLpTWYuICYe9ygz1tA=";
+  };
+
+  POETRY_DYNAMIC_VERSIONING_BYPASS = version;
+
+  nativeBuildInputs = [
+    python3.pkgs.poetry-core
+    python3.pkgs.poetry-dynamic-versioning
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    decorator
+    dunamai
+    funcy
+    iteration-utilities
+    jinja2
+    jinja2-ansible-filters
+    mkdocs-material
+    mkdocs-mermaid2-plugin
+    mkdocstrings
+    packaging
+    pathspec
+    plumbum
+    pydantic
+    pygments
+    pyyaml
+    pyyaml-include
+    questionary
+  ];
+
+  makeWrapperArgs = [
+    "--suffix PATH : ${lib.makeBinPath [ git ] }"
+  ];
+
+  meta = with lib; {
+    description = "Library and command-line utility for rendering projects templates";
+    homepage = "https://copier.readthedocs.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jonringer greg ];
+    mainProgram = "copier";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coreboot-configurator/default.nix b/nixpkgs/pkgs/tools/misc/coreboot-configurator/default.nix
new file mode 100644
index 000000000000..2c51fd61fc11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreboot-configurator/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, fetchFromGitHub
+, inkscape
+, meson
+, mkDerivation
+, ninja
+  # We will resolve pkexec from the path because it has a setuid wrapper on
+  # NixOS meaning that we cannot just use the path from the nix store.
+  # Using the path to the wrapper here would make the package incompatible
+  # with non-NixOS systems.
+, pkexecPath ? "pkexec"
+, pkg-config
+, yaml-cpp
+, nvramtool
+, systemd
+, qtbase
+, qtsvg
+, wrapQtAppsHook
+}:
+
+mkDerivation {
+  pname = "coreboot-configurator";
+  version = "unstable-2023-01-17";
+
+  src = fetchFromGitHub {
+    owner = "StarLabsLtd";
+    repo = "coreboot-configurator";
+    rev = "944b575dc873c78627c352f9c1a1493981431a58";
+    sha256 = "sha256-ReWQNzeoyTF66hVnevf6Kkrnt0/PqRHd3oyyPYtx+0M=";
+  };
+
+  nativeBuildInputs = [ inkscape meson ninja pkg-config wrapQtAppsHook ];
+  buildInputs = [ yaml-cpp qtbase qtsvg ];
+
+  postPatch = ''
+    substituteInPlace src/application/*.cpp \
+      --replace '/usr/bin/pkexec' '${pkexecPath}' \
+      --replace '/usr/bin/systemctl' '${lib.getBin systemd}/systemctl' \
+      --replace '/usr/sbin/nvramtool' '${lib.getExe nvramtool}'
+
+    substituteInPlace src/resources/org.coreboot.nvramtool.policy \
+      --replace '/usr/sbin/nvramtool' '${lib.getExe nvramtool}'
+
+    substituteInPlace src/resources/org.coreboot.reboot.policy \
+      --replace '/usr/sbin/reboot' '${lib.getBin systemd}/reboot'
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/share/applications/coreboot-configurator.desktop \
+      --replace '/usr/bin/coreboot-configurator' 'coreboot-configurator'
+  '';
+
+  meta = with lib; {
+    description = "A simple GUI to change settings in Coreboot's CBFS";
+    homepage = "https://support.starlabs.systems/kb/guides/coreboot-configurator";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ danth ];
+    mainProgram = "coreboot-configurator";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix b/nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix
new file mode 100644
index 000000000000..e13b97e0c3a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreboot-utils/default.nix
@@ -0,0 +1,131 @@
+{ lib, stdenv, fetchgit, pkg-config, zlib, pciutils, openssl, coreutils, acpica-tools, makeWrapper, gnugrep, gnused, file, buildEnv }:
+
+let
+  version = "24.02";
+
+  commonMeta = with lib; {
+    description = "Various coreboot-related tools";
+    homepage = "https://www.coreboot.org";
+    license = with licenses; [ gpl2Only gpl2Plus ];
+    maintainers = with maintainers; [ felixsinger ];
+    platforms = platforms.linux;
+  };
+
+  generic = { pname, path ? "util/${pname}", ... }@args: stdenv.mkDerivation (rec {
+    inherit pname version;
+
+    src = fetchgit {
+      url = "https://review.coreboot.org/coreboot";
+      rev = "4845b69db29107ce8d9cd2969b4aad5c7daa6399";
+      sha256 = "sha256-whALKP9MetyMJSmXVf0WYd9dP8AGa+ADAB8cmIqt4HU=";
+    };
+
+    enableParallelBuilding = true;
+
+    postPatch = ''
+      substituteInPlace 3rdparty/vboot/Makefile --replace 'ar qc ' '$$AR qc '
+      cd ${path}
+      patchShebangs .
+    '';
+
+    makeFlags = [
+      "INSTALL=install"
+      "PREFIX=${placeholder "out"}"
+    ];
+
+    meta = commonMeta // args.meta;
+  } // (removeAttrs args [ "meta" ]));
+
+  utils = {
+    msrtool = generic {
+      pname = "msrtool";
+      meta.description = "Dump chipset-specific MSR registers";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      buildInputs = [ pciutils zlib ];
+      preConfigure = "export INSTALL=install";
+    };
+    cbmem = generic {
+      pname = "cbmem";
+      meta.description = "coreboot console log reader";
+    };
+    ifdtool = generic {
+      pname = "ifdtool";
+      meta.description = "Extract and dump Intel Firmware Descriptor information";
+    };
+    intelmetool = generic {
+      pname = "intelmetool";
+      meta.description = "Dump interesting things about Management Engine";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      buildInputs = [ pciutils zlib ];
+    };
+    cbfstool = generic {
+      pname = "cbfstool";
+      meta.description = "Management utility for CBFS formatted ROM images";
+    };
+    nvramtool = generic {
+      pname = "nvramtool";
+      meta.description = "Read and write coreboot parameters and display information from the coreboot table in CMOS/NVRAM";
+      meta.mainProgram = "nvramtool";
+    };
+    superiotool = generic {
+      pname = "superiotool";
+      meta.description = "User-space utility to detect Super I/O of a mainboard and provide detailed information about the register contents of the Super I/O";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      buildInputs = [ pciutils zlib ];
+    };
+    ectool = generic {
+      pname = "ectool";
+      meta.description = "Dump the RAM of a laptop's Embedded/Environmental Controller (EC)";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      preInstall = "mkdir -p $out/sbin";
+    };
+    inteltool = generic {
+      pname = "inteltool";
+      meta.description = "Provides information about Intel CPU/chipset hardware configuration (register contents, MSRs, etc)";
+      meta.platforms = [ "x86_64-linux" "i686-linux" ];
+      buildInputs = [ pciutils zlib ];
+    };
+    amdfwtool = generic {
+      pname = "amdfwtool";
+      meta.description = "Create AMD firmware combination";
+      buildInputs = [ openssl ];
+      nativeBuildInputs = [ pkg-config ];
+      installPhase = ''
+        runHook preInstall
+
+        install -Dm755 amdfwtool $out/bin/amdfwtool
+
+        runHook postInstall
+      '';
+    };
+    acpidump-all = generic {
+      pname = "acpidump-all";
+      path = "util/acpi";
+      meta.description = "Walk through all ACPI tables with their addresses";
+      nativeBuildInputs = [ makeWrapper ];
+      dontBuild = true;
+      installPhase = ''
+        runHook preInstall
+
+        install -Dm755 acpidump-all $out/bin/acpidump-all
+
+        runHook postInstall
+      '';
+      postFixup = ''
+        wrapProgram $out/bin/acpidump-all \
+          --set PATH ${lib.makeBinPath [ coreutils acpica-tools gnugrep gnused file ]}
+      '';
+    };
+  };
+
+in
+utils // {
+  coreboot-utils = (buildEnv {
+    name = "coreboot-utils-${version}";
+    paths = lib.filter (lib.meta.availableOn stdenv.hostPlatform) (lib.attrValues utils);
+    postBuild = "rm -rf $out/sbin";
+  }) // {
+    inherit version;
+    meta = commonMeta;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coreutils/default.nix b/nixpkgs/pkgs/tools/misc/coreutils/default.nix
new file mode 100644
index 000000000000..efcdce15bf02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreutils/default.nix
@@ -0,0 +1,189 @@
+{ lib
+, stdenv
+, fetchurl
+, autoreconfHook
+, buildPackages
+, libiconv
+, perl
+, texinfo
+, xz
+, gmpSupport ? true, gmp
+, aclSupport ? stdenv.isLinux, acl
+, attrSupport ? stdenv.isLinux, attr
+, selinuxSupport ? false, libselinux, libsepol
+# No openssl in default version, so openssl-induced rebuilds aren't too big.
+# It makes *sum functions significantly faster.
+, minimal ? true
+, withOpenssl ? !minimal, openssl
+, withPrefix ? false
+, singleBinary ? "symlinks" # you can also pass "shebangs" or false
+}:
+
+# 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.
+
+assert aclSupport -> acl != null;
+assert selinuxSupport -> libselinux != null && libsepol != null;
+
+let
+  inherit (lib) concatStringsSep isString optional optionals optionalString;
+  isCross = (stdenv.hostPlatform != stdenv.buildPlatform);
+in
+stdenv.mkDerivation rec {
+  pname = "coreutils" + (optionalString (!minimal) "-full");
+  version = "9.5";
+
+  src = fetchurl {
+    url = "mirror://gnu/coreutils/coreutils-${version}.tar.xz";
+    hash = "sha256-zTKO3qyS9qZl3p8yPJO3Eq8YWLwuDYjz9xAEaUcKG4o=";
+  };
+
+  patches = lib.optionals stdenv.hostPlatform.isMusl [
+    # https://lists.gnu.org/archive/html/bug-coreutils/2024-03/msg00089.html
+    ./fix-test-failure-musl.patch
+  ];
+
+  postPatch = ''
+    # The test tends to fail on btrfs, f2fs and maybe other unusual filesystems.
+    sed '2i echo Skipping dd sparse test && exit 77' -i ./tests/dd/sparse.sh
+    sed '2i echo Skipping du threshold test && exit 77' -i ./tests/du/threshold.sh
+    sed '2i echo Skipping cp reflink-auto test && exit 77' -i ./tests/cp/reflink-auto.sh
+    sed '2i echo Skipping cp sparse test && exit 77' -i ./tests/cp/sparse.sh
+    sed '2i echo Skipping env test && exit 77' -i ./tests/env/env.sh
+    sed '2i echo Skipping rm deep-2 test && exit 77' -i ./tests/rm/deep-2.sh
+    sed '2i echo Skipping du long-from-unreadable test && exit 77' -i ./tests/du/long-from-unreadable.sh
+
+    # Some target platforms, especially when building inside a container have
+    # issues with the inotify test.
+    sed '2i echo Skipping tail inotify dir recreate test && exit 77' -i ./tests/tail/inotify-dir-recreate.sh
+
+    # sandbox does not allow setgid
+    sed '2i echo Skipping chmod setgid test && exit 77' -i ./tests/chmod/setgid.sh
+    substituteInPlace ./tests/install/install-C.sh \
+      --replace 'mode3=2755' 'mode3=1755'
+
+    # Fails on systems with a rootfs. Looks like a bug in the test, see
+    # https://lists.gnu.org/archive/html/bug-coreutils/2019-12/msg00000.html
+    sed '2i print "Skipping df skip-rootfs test"; exit 77' -i ./tests/df/skip-rootfs.sh
+
+    # these tests fail in the unprivileged nix sandbox (without nix-daemon) as we break posix assumptions
+    for f in ./tests/chgrp/{basic.sh,recurse.sh,default-no-deref.sh,no-x.sh,posix-H.sh}; do
+      sed '2i echo Skipping chgrp && exit 77' -i "$f"
+    done
+    for f in gnulib-tests/{test-chown.c,test-fchownat.c,test-lchown.c}; do
+      echo "int main() { return 77; }" > "$f"
+    done
+
+    # We don't have localtime in the sandbox
+    for f in gnulib-tests/{test-localtime_r.c,test-localtime_r-mt.c}; do
+      echo "int main() { return 77; }" > "$f"
+    done
+
+    # intermittent failures on builders, unknown reason
+    sed '2i echo Skipping du basic test && exit 77' -i ./tests/du/basic.sh
+  '' + (optionalString (stdenv.hostPlatform.libc == "musl") (concatStringsSep "\n" [
+    ''
+      echo "int main() { return 77; }" > gnulib-tests/test-parse-datetime.c
+      echo "int main() { return 77; }" > gnulib-tests/test-getlogin.c
+    ''
+  ])) + (optionalString stdenv.isAarch64 ''
+    # Sometimes fails: https://github.com/NixOS/nixpkgs/pull/143097#issuecomment-954462584
+    sed '2i echo Skipping cut huge range test && exit 77' -i ./tests/cut/cut-huge-range.sh
+  '');
+
+  outputs = [ "out" "info" ];
+  separateDebugInfo = true;
+
+  nativeBuildInputs = [
+    # autoreconfHook is due to patch, normally only needed for cygwin
+    autoreconfHook
+    perl
+    xz.bin
+  ]
+  ++ optionals stdenv.hostPlatform.isCygwin [
+    # due to patch
+    texinfo
+  ];
+
+  buildInputs = [ ]
+    ++ optional aclSupport acl
+    ++ optional attrSupport attr
+    ++ optional gmpSupport gmp
+    ++ optional withOpenssl openssl
+    ++ optionals selinuxSupport [ libselinux libsepol ]
+    # TODO(@Ericson2314): Investigate whether Darwin could benefit too
+    ++ optional (isCross && stdenv.hostPlatform.libc != "glibc") libiconv;
+
+  hardeningDisable = [ "trivialautovarinit" ];
+
+  configureFlags = [ "--with-packager=https://nixos.org" ]
+    ++ optional (singleBinary != false)
+      ("--enable-single-binary" + optionalString (isString singleBinary) "=${singleBinary}")
+    ++ optional withOpenssl "--with-openssl"
+    ++ optional stdenv.hostPlatform.isSunOS "ac_cv_func_inotify_init=no"
+    ++ optional withPrefix "--program-prefix=g"
+    # the shipped configure script doesn't enable nls, but using autoreconfHook
+    # does so which breaks the build
+    ++ optional stdenv.isDarwin "--disable-nls"
+    ++ optionals (isCross && stdenv.hostPlatform.libc == "glibc") [
+      # TODO(19b98110126fde7cbb1127af7e3fe1568eacad3d): Needed for fstatfs() I
+      # don't know why it is not properly detected cross building with glibc.
+      "fu_cv_sys_stat_statfs2_bsize=yes"
+    ]
+    # /proc/uptime is available on Linux and produces accurate results even if
+    # the boot time is set to the epoch because the system has no RTC. We
+    # explicitly enable it for cases where it can't be detected automatically,
+    # such as when cross-compiling.
+    ++ optional stdenv.hostPlatform.isLinux "gl_cv_have_proc_uptime=yes";
+
+  # The tests are known broken on Cygwin
+  # (http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/19025),
+  # Darwin (http://article.gmane.org/gmane.comp.gnu.core-utils.bugs/19351),
+  # and {Open,Free}BSD.
+  # With non-standard storeDir: https://github.com/NixOS/nix/issues/512
+  doCheck = (!isCross)
+    && (stdenv.hostPlatform.libc == "glibc" || stdenv.hostPlatform.libc == "musl")
+    && !stdenv.isAarch32;
+
+  # Prevents attempts of running 'help2man' on cross-built binaries.
+  PERL = if isCross then "missing" else null;
+
+  enableParallelBuilding = true;
+
+  NIX_LDFLAGS = optionalString selinuxSupport "-lsepol";
+  FORCE_UNSAFE_CONFIGURE = optionalString stdenv.hostPlatform.isSunOS "1";
+  env.NIX_CFLAGS_COMPILE = toString ([]
+    # Work around a bogus warning in conjunction with musl.
+    ++ optional stdenv.hostPlatform.isMusl "-Wno-error"
+    ++ optional stdenv.hostPlatform.isAndroid "-D__USE_FORTIFY_LEVEL=0");
+
+  # Works around a bug with 8.26:
+  # Makefile:3440: *** Recursive variable 'INSTALL' references itself (eventually).  Stop.
+  preInstall = optionalString isCross ''
+    sed -i Makefile -e 's|^INSTALL =.*|INSTALL = ${buildPackages.coreutils}/bin/install -c|'
+  '';
+
+  postInstall = optionalString (isCross && !minimal) ''
+    rm $out/share/man/man1/*
+    cp ${buildPackages.coreutils-full}/share/man/man1/* $out/share/man/man1
+  ''
+  # du: 8.7 M locale + 0.4 M man pages
+  + optionalString minimal ''
+    rm -r "$out/share"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/coreutils/";
+    description = "The GNU Core Utilities";
+    longDescription = ''
+      The GNU Core Utilities are the basic file, shell and text manipulation
+      utilities of the GNU operating system. These are the core utilities which
+      are expected to exist on every operating system.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ das_j ];
+    platforms = with platforms; unix ++ windows;
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/coreutils/fix-test-failure-musl.patch b/nixpkgs/pkgs/tools/misc/coreutils/fix-test-failure-musl.patch
new file mode 100644
index 000000000000..2d54dd27ab3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/coreutils/fix-test-failure-musl.patch
@@ -0,0 +1,23 @@
+From 1defda6356c29c7f731bddb9e9231f594e01d9c9
+(adjusted so it can be applied on coreutils to coreutils tarball)
+
+Reported by Adept's Lab via Pádraig Brady at
+<https://lists.gnu.org/archive/html/bug-coreutils/2024-03/msg00086.html>.
+
+diff --git a/gnulib-tests/test-canonicalize.c b/gnulib-tests/test-canonicalize.c
+index 6763a525c9..5d19285c00 100644
+--- a/gnulib-tests/test-canonicalize.c
++++ b/gnulib-tests/test-canonicalize.c
+@@ -394,9 +394,9 @@ main (void)
+     ASSERT (stat ("/", &st1) == 0);
+     ASSERT (stat ("//", &st2) == 0);
+     bool same = psame_inode (&st1, &st2);
+-#if defined __MVS__ || defined MUSL_LIBC
+-    /* On IBM z/OS and musl libc, "/" and "//" both canonicalize to
+-       themselves, yet they both have st_dev == st_ino == 1.  */
++#if defined __MVS__
++    /* On IBM z/OS, "/" and "//" both canonicalize to themselves, yet they both
++       have st_dev == st_ino == 1.  */
+     same = false;
+ #endif
+     if (same)
diff --git a/nixpkgs/pkgs/tools/misc/cowsay/default.nix b/nixpkgs/pkgs/tools/misc/cowsay/default.nix
new file mode 100644
index 000000000000..874299905e07
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cowsay/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, perl, fetchFromGitHub, fetchpatch, makeWrapper, nix-update-script, testers }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "cowsay";
+  version = "3.7.0";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "cowsay-org";
+    repo = "cowsay";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-t1grmCPQhRgwS64RjEwkK61F2qxxMBKuv0/DzBTnL3s=";
+  };
+
+  patches = [
+    # Install cowthink as a symlink, not a copy
+    # See https://github.com/cowsay-org/cowsay/pull/18
+    (fetchpatch {
+      url = "https://github.com/cowsay-org/cowsay/commit/9e129fa0933cf1837672c97f5ae5ad4a1a10ec11.patch";
+      hash = "sha256-zAYEUAM5MkyMONAl5BXj8hBHRalQVAOdpxgiM+Ewmlw=";
+    })
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl ];
+
+  postInstall = ''
+    wrapProgram $out/bin/cowsay \
+      --suffix COWPATH : $out/share/cowsay/cows
+  '';
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = "cowsay --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "A program which generates ASCII pictures of a cow with a message";
+    homepage = "https://cowsay.diamonds";
+    changelog = "https://github.com/cowsay-org/cowsay/releases/tag/v${finalAttrs.version}";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ rob anthonyroussel ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/cp210x-program/default.nix b/nixpkgs/pkgs/tools/misc/cp210x-program/default.nix
new file mode 100644
index 000000000000..b734008fad2a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cp210x-program/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cp210x-program";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "VCTLabs";
+    repo = "cp210x-program";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-IjKshP12WfFly9cPm6svD4qZW6cT8C7lOVrGenSqbfY=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    hexdump
+    pyusb
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/cp210x-program{.py,}
+  '';
+
+  meta = with lib; {
+    description = "EEPROM tool for Silabs CP210x USB-Serial adapter";
+    homepage = "https://github.com/VCTLabs/cp210x-program";
+    license = licenses.lgpl21Only; # plus/only status unclear
+    maintainers = with maintainers; [ ckie ];
+    mainProgram = "cp210x-program";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cp437/default.nix b/nixpkgs/pkgs/tools/misc/cp437/default.nix
new file mode 100644
index 000000000000..cb4b1b8508cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cp437/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "cp437";
+  version = "0.6";
+
+  src = fetchFromGitHub {
+    owner = "keaston";
+    repo  = "cp437";
+    rev   = "v${version}";
+    sha256 = "18f4mnfnyviqclbhmbhix80k823481ypkwbp26qfvhnxdgzbggcc";
+  };
+
+  installPhase = ''
+    install -Dm755 cp437 -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = ''
+      Emulates an old-style "code page 437" / "IBM-PC" character
+      set terminal on a modern UTF-8 terminal emulator
+    '';
+    homepage = "https://github.com/keaston/cp437";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ jb55 ];
+    mainProgram = "cp437";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cpufetch/default.nix b/nixpkgs/pkgs/tools/misc/cpufetch/default.nix
new file mode 100644
index 000000000000..d4686dd79df4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpufetch/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cpufetch";
+  version = "1.05";
+
+  src = fetchFromGitHub {
+    owner = "Dr-Noob";
+    repo = "cpufetch";
+    rev = "v${version}";
+    sha256 = "sha256-8g4nFV3PgYRagzUG7S2ifpuSaCCZ5HlwsjkQ+wdk4Yw=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    install -Dm755 cpufetch   $out/bin/cpufetch
+    install -Dm644 LICENSE    $out/share/licenses/cpufetch/LICENSE
+    installManPage cpufetch.1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Simplistic yet fancy CPU architecture fetching tool";
+    license = licenses.gpl2Only;
+    homepage = "https://github.com/Dr-Noob/cpufetch";
+    changelog = "https://github.com/Dr-Noob/cpufetch/releases/tag/v${version}";
+    maintainers = with maintainers; [ devhell ];
+    mainProgram = "cpufetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cpulimit/default.nix b/nixpkgs/pkgs/tools/misc/cpulimit/default.nix
new file mode 100644
index 000000000000..75c3ba733b14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpulimit/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "cpulimit";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "opsengine";
+    repo = "cpulimit";
+    rev = "v${version}";
+    sha256 = "1dz045yhcsw1rdamzpz4bk8mw888in7fyqk1q1b3m1yk4pd1ahkh";
+  };
+
+  patches = [ ./remove-sys-sysctl.h.patch ./get-missing-basename.patch ];
+
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp src/cpulimit $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/opsengine/cpulimit";
+    description = "CPU usage limiter";
+    platforms = platforms.unix;
+    license = licenses.gpl2;
+    mainProgram = "cpulimit";
+    maintainers = [ maintainers.jsoo1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cpulimit/get-missing-basename.patch b/nixpkgs/pkgs/tools/misc/cpulimit/get-missing-basename.patch
new file mode 100644
index 000000000000..d27eda0b6fa9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpulimit/get-missing-basename.patch
@@ -0,0 +1,12 @@
+diff --git a/src/process_group.c b/src/process_group.c
+index 06d73a6..3ca66b0 100644
+--- a/src/process_group.c
++++ b/src/process_group.c
+@@ -20,6 +20,7 @@
+  */
+ 
+ #include <string.h>
++#include <libgen.h>
+ #include <stdlib.h>
+ #include <limits.h>
+ #include <sys/time.h>
diff --git a/nixpkgs/pkgs/tools/misc/cpulimit/remove-sys-sysctl.h.patch b/nixpkgs/pkgs/tools/misc/cpulimit/remove-sys-sysctl.h.patch
new file mode 100644
index 000000000000..a152cab3acc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpulimit/remove-sys-sysctl.h.patch
@@ -0,0 +1,21 @@
+Remove references to sys/sysctl.h which were deprecated long ago.
+
+diff --git a/src/cpulimit.c b/src/cpulimit.c
+index 50eabea..eba4615 100644
+--- a/src/cpulimit.c
++++ b/src/cpulimit.c
+@@ -38,7 +38,9 @@
+ #include <string.h>
+ #include <sys/stat.h>
+ #include <sys/time.h>
++#ifdef __APPLE__
+ #include <sys/sysctl.h>
++#endif
+ #include <sys/resource.h>
+ #include <sys/types.h>
+ #include <sys/wait.h>
+
+-#ifdef __APPLE__ || __FREEBSD__
++#if defined(__APPLE__) || defined(__FREEBSD__)
+ #include <libgen.h>
+ #endif
\ No newline at end of file
diff --git a/nixpkgs/pkgs/tools/misc/cpuminer/default.nix b/nixpkgs/pkgs/tools/misc/cpuminer/default.nix
new file mode 100644
index 000000000000..4b7c5fc7f486
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cpuminer/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, curl
+, jansson
+, perl
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cpuminer";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "pooler";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0f44i0z8rid20c2hiyp92xq0q0mjj537r05sa6vdbc0nl0a5q40i";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-build-on-aarch64.patch";
+      url = "https://github.com/pooler/cpuminer/commit/5f02105940edb61144c09a7eb960bba04a10d5b7.patch";
+      hash = "sha256-lGAcwDcXgcJBFhasSEdQIEIY7pp6x/PEXHBsVwAOqhc=";
+    })
+  ];
+
+  postPatch = if stdenv.cc.isClang then "${perl}/bin/perl ./nomacro.pl" else null;
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ curl jansson ];
+
+  configureFlags = [ "CFLAGS=-O3" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/pooler/cpuminer";
+    description = "CPU miner for Litecoin and Bitcoin";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "minerd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/crex/default.nix b/nixpkgs/pkgs/tools/misc/crex/default.nix
new file mode 100644
index 000000000000..d173457d7190
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/crex/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "crex";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "octobanana";
+    repo = "crex";
+    rev = version;
+    sha256 = "086rvwl494z48acgsq3yq11qh1nxm8kbf11adn16aszai4d4ipr3";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt --replace "/usr/local/bin" "bin"
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "Explore, test, and check regular expressions in the terminal";
+    homepage = "https://octobanana.com/software/crex";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+    platforms = platforms.all;
+    mainProgram = "crex";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/crudini/default.nix b/nixpkgs/pkgs/tools/misc/crudini/default.nix
new file mode 100644
index 000000000000..ea77f4db163e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/crudini/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3Packages
+, help2man
+, installShellFiles
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "crudini";
+  version = "0.9.5";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "pixelb";
+    repo = "crudini";
+    rev = version;
+    hash = "sha256-BU4u7uBsNyDOwWUjOIlBWcf1AeUXXZ+johAe+bjws1U=";
+  };
+
+  postPatch = ''
+    patchShebangs crudini.py crudini-help tests/test.sh
+  '';
+
+  nativeBuildInputs = [
+    help2man
+    installShellFiles
+    python3Packages.setuptools
+    python3Packages.setuptools-scm
+    python3Packages.wheel
+  ];
+
+  propagatedBuildInputs = with python3Packages; [ iniparse ];
+
+  postInstall = ''
+    # this just creates the man page
+    make all
+
+    install -Dm444 -t $out/share/doc/${pname} README.md EXAMPLES
+    installManPage *.1
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    pushd tests >/dev/null
+    ./test.sh
+    popd >/dev/null
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "A utility for manipulating ini files ";
+    homepage = "https://www.pixelbeat.org/programs/crudini/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "crudini";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/crypto-tracker/default.nix b/nixpkgs/pkgs/tools/misc/crypto-tracker/default.nix
new file mode 100644
index 000000000000..273a0aa63e4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/crypto-tracker/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "crypto-tracker";
+  version = "0.1.8";
+
+  src = fetchFromGitHub {
+    owner  = "Nox04";
+    repo   = "crypto-tracker";
+    rev    = "v${version}";
+    hash = "sha256-8tTaXpHZWcDq0Jfa9Hf258VYwfimLhYjCAzD4X/Ow0s=";
+  };
+
+  vendorHash = "sha256-ORdDrZ61u76mz2oZyxfdf7iuo9SnuQeDxESt9lORhgQ=";
+
+  meta = with lib; {
+    description = "Program to retrieve the latest price for several cryptocurrencies using the CoinMarketCap API";
+    homepage = "https://github.com/Nox04/crypto-tracker";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tiredofit ];
+    mainProgram = "crypto-tracker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/csv2latex/default.nix b/nixpkgs/pkgs/tools/misc/csv2latex/default.nix
new file mode 100644
index 000000000000..cc286c54e9ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/csv2latex/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "csv2latex";
+  version = "0.23.1";
+
+  src = fetchurl {
+    url = "http://brouits.free.fr/csv2latex/csv2latex-${version}.tar.gz";
+    sha256 = "sha256-k1vQyrVJmfaJ7jVaoW2dkPD7GO8EoDqJY5m8O2U/kYw=";
+  };
+
+  installPhase = ''
+  mkdir -p $out/bin
+  make PREFIX=$out install
+  '';
+
+  meta = with lib; {
+    description = "Command-line CSV to LaTeX file converter";
+    homepage = "http://brouits.free.fr/csv2latex/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.catern ];
+    mainProgram = "csv2latex";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/csv2parquet/default.nix b/nixpkgs/pkgs/tools/misc/csv2parquet/default.nix
new file mode 100644
index 000000000000..0d6050d703a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/csv2parquet/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "csv2parquet";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "domoritz";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-499DC0kLvvP5Oq2WYRb9BIppTdfm41u8hwrPU8b66Zw=";
+  };
+
+  cargoHash = "sha256-GoUmr1NArOyGx1A9E9K/Od0xXR2YxZqBcBdYFumgIJU=";
+
+  meta = with lib; {
+    description = "Convert CSV files to Apache Parquet";
+    homepage = "https://github.com/domoritz/csv2parquet";
+    license = licenses.mit;
+    maintainers = with maintainers; [ john-shaffer ];
+    mainProgram = "csv2parquet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/csvs-to-sqlite/default.nix b/nixpkgs/pkgs/tools/misc/csvs-to-sqlite/default.nix
new file mode 100644
index 000000000000..28537e9631ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/csvs-to-sqlite/default.nix
@@ -0,0 +1,62 @@
+{ lib, python3, fetchFromGitHub, fetchpatch }:
+
+with python3.pkgs; buildPythonApplication rec {
+  pname = "csvs-to-sqlite";
+  version = "1.3";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "simonw";
+    repo = pname;
+    rev = version;
+    hash = "sha256-wV6htULG3lg2IhG2bXmc/9vjcK8/+WA7jm3iJu4ZoOE=";
+  };
+
+  patches = [
+    # https://github.com/simonw/csvs-to-sqlite/pull/92
+    (fetchpatch {
+      name = "pandas2-compatibility-1.patch";
+      url = "https://github.com/simonw/csvs-to-sqlite/commit/fcd5b9c7485bc7b95bf2ed9507f18a60728e0bcb.patch";
+      hash = "sha256-ZmaNWxsqeNw5H5gAih66DLMmzmePD4no1B5mTf8aFvI=";
+    })
+    (fetchpatch {
+      name = "pandas2-compatibility-2.patch";
+      url = "https://github.com/simonw/csvs-to-sqlite/commit/3d190aa44e8d3a66a9a3ca5dc11c6fe46da024df.patch";
+      hash = "sha256-uYUH0Mhn6LIf+AHcn6WuCo5zFuSNWOZBM+AoqkmMnSI=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = [
+    click
+    dateparser
+    pandas
+    py-lru-cache
+    six
+  ];
+
+  pythonRelaxDeps = [
+    "click"
+  ];
+
+  nativeCheckInputs = [
+    cogapp
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # Test needs to be adjusted for click >= 8.
+    "test_if_cog_needs_to_be_run"
+  ];
+
+  meta = with lib; {
+    description = "Convert CSV files into a SQLite database";
+    homepage = "https://github.com/simonw/csvs-to-sqlite";
+    license = licenses.asl20;
+    maintainers = [ maintainers.costrouc ];
+    mainProgram = "csvs-to-sqlite";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cunit/default.nix b/nixpkgs/pkgs/tools/misc/cunit/default.nix
new file mode 100644
index 000000000000..77af6497a573
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cunit/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, autoconf, automake, libtool, autoreconfHook}:
+
+stdenv.mkDerivation rec {
+  pname = "CUnit";
+  version = "2.1-3";
+
+  nativeBuildInputs = [ autoreconfHook autoconf automake ];
+  buildInputs = [libtool];
+
+  src = fetchurl {
+    url = "mirror://sourceforge/cunit/CUnit/${version}/${pname}-${version}.tar.bz2";
+    sha256 = "057j82da9vv4li4z5ri3227ybd18nzyq81f6gsvhifs5z0vr3cpm";
+  };
+
+  meta = {
+    description = "A Unit Testing Framework for C";
+
+    longDescription = ''
+      CUnit is a lightweight system for writing, administering, and running
+      unit tests in C.  It provides C programmers a basic testing functionality
+      with a flexible variety of user interfaces.
+    '';
+
+    homepage = "https://cunit.sourceforge.net/";
+
+    license = lib.licenses.lgpl2;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cutecom/default.nix b/nixpkgs/pkgs/tools/misc/cutecom/default.nix
new file mode 100644
index 000000000000..490d33b123d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cutecom/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitLab, qtserialport, cmake, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "cutecom";
+  version = "0.51.0+patch";
+
+  src = fetchFromGitLab {
+    owner = "cutecom";
+    repo = "cutecom";
+    rev = "70d0c497acf8f298374052b2956bcf142ed5f6ca";
+    sha256 = "X8jeESt+x5PxK3rTNC1h1Tpvue2WH09QRnG2g1eMoEE=";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "/Applications" "$out/Applications"
+  '';
+
+  buildInputs = [ qtserialport ];
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  postInstall = if stdenv.isDarwin then ''
+    mkdir -p $out/Applications
+  '' else ''
+    cd ..
+    mkdir -p "$out"/share/{applications,icons/hicolor/scalable/apps,man/man1}
+    cp cutecom.desktop "$out/share/applications"
+    cp images/cutecom.svg "$out/share/icons/hicolor/scalable/apps"
+    cp cutecom.1 "$out/share/man/man1"
+  '';
+
+  meta = with lib; {
+    description = "A graphical serial terminal";
+    homepage = "https://gitlab.com/cutecom/cutecom/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bennofs ];
+    platforms = platforms.unix;
+    mainProgram = "cutecom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cyberchef/default.nix b/nixpkgs/pkgs/tools/misc/cyberchef/default.nix
new file mode 100644
index 000000000000..ba1a609c9682
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cyberchef/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, fetchzip
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cyberchef";
+  version = "10.18.3";
+
+  src = fetchzip {
+    url = "https://github.com/gchq/CyberChef/releases/download/v${version}/CyberChef_v${version}.zip";
+    sha256 = "sha256-HLYcKF+DCj5QA+0ZJwRpC+iTN5z/S249UnQirNJMLF4=";
+    stripRoot = false;
+  };
+
+  installPhase = ''
+    mkdir -p "$out/share/cyberchef"
+    mv "CyberChef_v${version}.html" index.html
+    mv * "$out/share/cyberchef"
+  '';
+
+  meta = with lib; {
+    description = "The Cyber Swiss Army Knife for encryption, encoding, compression and data analysis";
+    homepage = "https://gchq.github.io/CyberChef";
+    changelog = "https://github.com/gchq/CyberChef/blob/v${version}/CHANGELOG.md";
+    maintainers = with maintainers; [ sebastianblunt ];
+    license = licenses.asl20;
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/cyclonedx-python/default.nix b/nixpkgs/pkgs/tools/misc/cyclonedx-python/default.nix
new file mode 100644
index 000000000000..fa5be39000af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/cyclonedx-python/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+
+      # Requires 'cyclonedx-python-lib = ">= 2.0.0, < 4.0.0"'
+      cyclonedx-python-lib = super.cyclonedx-python-lib.overridePythonAttrs (oldAttrs: rec {
+        version = "3.1.5";
+        src = fetchFromGitHub {
+          owner = "CycloneDX";
+          repo = "cyclonedx-python-lib";
+          rev = "refs/tags/v${version}";
+          hash = "sha256-4lA8OdmvQD94jTeDf+Iz7ZyEQ9fZzCxnXQG9Ir8FKhk=";
+        };
+      });
+    };
+  };
+in
+with py.pkgs;
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "cyclonedx-python";
+  version = "3.11.7";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "CycloneDX";
+    repo = "cyclonedx-python";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-jU/0FkQCyph59TnEE+lckJXsU9whfvWp7dkdfzprYw8=";
+  };
+
+  nativeBuildInputs = with py.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with py.pkgs; [
+    chardet
+    cyclonedx-python-lib
+    packageurl-python
+    pip-requirements-parser
+    setuptools
+    toml
+  ];
+
+  # The tests want access to the cyclonedx binary
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "cyclonedx"
+  ];
+
+  meta = with lib; {
+    description = "Creates CycloneDX Software Bill of Materials (SBOM) from Python projects";
+    homepage = "https://github.com/CycloneDX/cyclonedx-python";
+    changelog = "https://github.com/CycloneDX/cyclonedx-python/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    mainProgram = "cyclonedx-py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dabet/default.nix b/nixpkgs/pkgs/tools/misc/dabet/default.nix
new file mode 100644
index 000000000000..acdc66cbad8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dabet/default.nix
@@ -0,0 +1,25 @@
+{ lib, rustPlatform, fetchFromGitea }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dabet";
+  version = "3.0.1";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-BYE+GGwf84zENf+lPS98OzZQbXxd7kykWL+B3guyVNI=";
+  };
+
+  cargoHash = "sha256-kguQmCXP5+E6e8CSKP18faa93VKToU2pcQixDOBrd+8=";
+
+  meta = with lib; {
+    description = "Print the duration between two times";
+    homepage = "https://codeberg.org/annaaurora/dabet";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+    mainProgram = "dabet";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/daktilo/default.nix b/nixpkgs/pkgs/tools/misc/daktilo/default.nix
new file mode 100644
index 000000000000..e557862b6713
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/daktilo/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+, unixtools
+, pkg-config
+, alsa-lib
+, xorg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "daktilo";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "daktilo";
+    rev = "v${version}";
+    hash = "sha256-gIBWonJGX6IpxyBeMulcfQEExsG1GrBVQLZbBBA1ruc=";
+  };
+
+  cargoHash = "sha256-lBlzXTkhsEboTby5tH7WfsvZxUwtw7sLYVJRozjI1D4=";
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+  ];
+
+  buildInputs = [
+    alsa-lib
+    xorg.libX11
+    xorg.libXi
+    xorg.libXtst
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  nativeCheckInputs = [
+    unixtools.script
+  ];
+
+  postInstall = ''
+    mkdir -p man completions
+
+    OUT_DIR=man $out/bin/daktilo-mangen
+    OUT_DIR=completions $out/bin/daktilo-completions
+
+    installManPage man/daktilo.1
+    installShellCompletion \
+      completions/daktilo.{bash,fish} \
+      --zsh completions/_daktilo
+
+    rm $out/bin/daktilo-{completions,mangen}
+  '';
+
+  meta = with lib; {
+    description = "Turn your keyboard into a typewriter";
+    homepage = "https://github.com/orhun/daktilo";
+    changelog = "https://github.com/orhun/daktilo/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ orhun ];
+    mainProgram = "daktilo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dashing/default.nix b/nixpkgs/pkgs/tools/misc/dashing/default.nix
new file mode 100644
index 000000000000..c7ec598fe309
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dashing/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, dashing }:
+
+buildGoModule rec {
+  pname = "dashing";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "technosophos";
+    repo = pname;
+    rev = version;
+    hash = "sha256-CcEgGPnJGrTXrgo82u5dxQTB/YjFBhHdsv7uggsHG1Y=";
+  };
+
+  vendorHash = "sha256-XeUFmzf6y0S82gMOzkj4AUNFkVvkVOwauYpqY4jeWLM=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = dashing;
+  };
+
+  meta = with lib; {
+    description = "A Dash Generator Script for Any HTML";
+    homepage = "https://github.com/technosophos/dashing";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "dashing";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dasht/default.nix b/nixpkgs/pkgs/tools/misc/dasht/default.nix
new file mode 100644
index 000000000000..4ab9cfdd0e0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dasht/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+, installShellFiles
+, coreutils
+, gnused
+, gnugrep
+, sqlite
+, wget
+, w3m
+, socat
+, gawk
+}:
+
+stdenv.mkDerivation rec {
+  pname   = "dasht";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner  = "sunaku";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "08wssmifxi7pnvn9gqrvpzpkc2qpkfbzbhxh0dk1gff2y2211qqk";
+  };
+
+  deps = lib.makeBinPath [
+    coreutils
+    gnused
+    gnugrep
+    sqlite
+    wget
+    w3m
+    socat
+    gawk
+    (placeholder "out")
+  ];
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp bin/* $out/bin/
+
+    installManPage man/man1/*
+    installShellCompletion --zsh etc/zsh/completions/*
+
+    for i in $out/bin/*; do
+      echo "Wrapping $i"
+      wrapProgram $i --prefix PATH : ${deps};
+    done;
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Search API docs offline, in terminal or browser";
+    homepage    = "https://sunaku.github.io/dasht/man";
+    license     = lib.licenses.isc;
+    platforms   = lib.platforms.unix; #cannot test other
+    maintainers = with lib.maintainers; [ matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/datamash/default.nix b/nixpkgs/pkgs/tools/misc/datamash/default.nix
new file mode 100644
index 000000000000..15cd8234a573
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/datamash/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "datamash";
+  version = "1.8";
+
+  src = fetchurl {
+    url = "mirror://gnu/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-etl+jH72Ft0DqlvWeuJMSIJy2z59H1d0FhwYt18p9v0=";
+  };
+
+  meta = with lib; {
+    description = "A command-line program which performs basic numeric,textual and statistical operations on input textual data files";
+    homepage = "https://www.gnu.org/software/datamash/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub vrthra ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/datefmt/default.nix b/nixpkgs/pkgs/tools/misc/datefmt/default.nix
new file mode 100644
index 000000000000..0b2dd7fae270
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/datefmt/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, datefmt, testers }:
+
+stdenv.mkDerivation rec {
+  pname = "datefmt";
+  version = "0.2.2";
+
+  src = fetchurl {
+    url = "https://cdn.jb55.com/tarballs/datefmt/datefmt-${version}.tar.gz";
+    sha256 = "sha256-HgW/vOGVEmAbm8k3oIwIa+cogq7qmX7MfTmHqxv9lhY=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  passthru.tests.version = testers.testVersion { package = datefmt; };
+
+  meta = with lib; {
+    homepage = "https://jb55.com/datefmt";
+    description = "A tool that formats timestamps in text streams";
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ jb55 ];
+    mainProgram = "datefmt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dateutils/default.nix b/nixpkgs/pkgs/tools/misc/dateutils/default.nix
new file mode 100644
index 000000000000..60219070d96a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dateutils/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, autoreconfHook, tzdata }:
+
+stdenv.mkDerivation rec {
+  version = "0.4.11";
+  pname = "dateutils";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/hroptatyr/dateutils/downloads/${pname}-${version}.tar.xz";
+    sha256 = "sha256-uP6gsJcUu63yArmzQ0zOa1nCgueGkmjQwIuFiA/btEY=";
+  };
+
+  # https://github.com/hroptatyr/dateutils/issues/148
+  postPatch = "rm test/dzone.008.ctst";
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ tzdata ]; # needed for datezone
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A bunch of tools that revolve around fiddling with dates and times in the command line";
+    homepage = "http://www.fresse.org/dateutils/";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.paperdigits ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dbacl/default.nix b/nixpkgs/pkgs/tools/misc/dbacl/default.nix
new file mode 100644
index 000000000000..6a2700f482a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dbacl/default.nix
@@ -0,0 +1,19 @@
+{fetchurl, lib, stdenv}:
+
+stdenv.mkDerivation rec {
+  pname = "dbacl";
+  version = "1.14";
+
+  src = fetchurl {
+    url = "https://www.lbreyer.com/gpl/dbacl-${version}.tar.gz";
+    sha256 = "0224g6x71hyvy7jikfxmgcwww1r5lvk0jx36cva319cb9nmrbrq7";
+  };
+
+  meta = {
+    homepage = "https://dbacl.sourceforge.net/";
+    longDescription = "a digramic Bayesian classifier for text recognition.";
+    maintainers = [];
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dbus-map/default.nix b/nixpkgs/pkgs/tools/misc/dbus-map/default.nix
new file mode 100644
index 000000000000..955a248be7bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dbus-map/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, pkg-config, glib, procps, libxml2 }:
+
+stdenv.mkDerivation {
+  pname = "dbus-map";
+  version = "2015-05-28";
+  src = fetchFromGitHub {
+    owner = "taviso";
+    repo = "dbusmap";
+    rev = "43703fc5e15743309b67131b5ba457b0d6ea7667";
+    sha256 = "1pjqn6w29ci8hfxkn1aynzfc8nvy3pqv3hixbxwr7qx20g4rwvdc";
+  };
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    glib procps libxml2
+  ];
+  installPhase = ''
+    mkdir -p $out/bin
+    mv dbus-map $out/bin
+  '';
+  meta = with lib; {
+    description = "Simple utility for enumerating D-Bus endpoints, an nmap for D-Bus";
+    homepage = "https://github.com/taviso/dbusmap";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    mainProgram = "dbus-map";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ddate/default.nix b/nixpkgs/pkgs/tools/misc/ddate/default.nix
new file mode 100644
index 000000000000..012e00c8f972
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ddate/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "ddate";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "bo0ts";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "1qchxnxvghbma6gp1g78wnjxsri0b72ha9axyk31cplssl7yn73f";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bo0ts/ddate";
+    description = "Discordian version of the date program";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ kovirobi ];
+    platforms = platforms.all;
+    mainProgram = "ddate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ddccontrol/default.nix b/nixpkgs/pkgs/tools/misc/ddccontrol/default.nix
new file mode 100644
index 000000000000..630b06bcfb3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ddccontrol/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, intltool
+, libxml2
+, pciutils
+, pkg-config
+, gtk2
+, ddccontrol-db
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ddccontrol";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "ddccontrol";
+    repo = "ddccontrol";
+    rev = version;
+    sha256 = "sha256-100SITpGbui/gRhFjVZxn6lZRB0najtGHd18oUpByJo=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    intltool
+    pkg-config
+  ];
+
+  buildInputs = [
+    libxml2
+    pciutils
+    gtk2
+    ddccontrol-db
+  ];
+
+  patches = [
+    # Upstream commit, fixed the version number in v1.0.0
+    (fetchpatch {
+      url = "https://github.com/ddccontrol/ddccontrol/commit/fc8c5b5d0f2b64b08b95f4a7d8f47f2fd8ceec34.patch";
+      hash = "sha256-SB1BaolTNCUYgj38nMg1uLUqOHvnwCr8T3cnfu/7rjI=";
+    })
+  ];
+
+  configureFlags = [
+    "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+  ];
+
+  prePatch = ''
+    substituteInPlace configure.ac              \
+      --replace                                 \
+      "\$""{datadir}/ddccontrol-db"             \
+      "${ddccontrol-db}/share/ddccontrol-db"
+
+    substituteInPlace src/ddcpci/Makefile.am    \
+       --replace "chmod 4711" "chmod 0711"
+  '';
+
+  preConfigure = ''
+    intltoolize --force
+  '';
+
+  meta = with lib; {
+    description = "A program used to control monitor parameters by software";
+    homepage = "https://github.com/ddccontrol/ddccontrol";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with lib.maintainers; [ pakhfn ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ddcutil/default.nix b/nixpkgs/pkgs/tools/misc/ddcutil/default.nix
new file mode 100644
index 000000000000..28a31a16d078
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ddcutil/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchurl
+, autoreconfHook
+, pkg-config
+, glib
+, jansson
+, udev
+, libgudev
+, libusb1
+, libdrm
+, xorg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ddcutil";
+  version = "2.1.4";
+
+  src = fetchurl {
+    url = "https://www.ddcutil.com/tarballs/ddcutil-${version}.tar.gz";
+    hash = "sha256-4U/igqtgw2rwyuhEkV1pWYPIyNZEt2N6hlXJ9bDUyRw=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [
+    glib
+    jansson
+    libdrm
+    libgudev
+    libusb1
+    udev
+    xorg.libXext
+    xorg.libXrandr
+  ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "http://www.ddcutil.com/";
+    description = "Query and change Linux monitor settings using DDC/CI and USB";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rnhmjoj ];
+    changelog = "https://github.com/rockowitz/ddcutil/blob/v${version}/CHANGELOG.md";
+    mainProgram = "ddcutil";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix b/nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix
new file mode 100644
index 000000000000..d70994753dbd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/debian-devscripts/default.nix
@@ -0,0 +1,89 @@
+{lib, stdenv, fetchurl, fetchpatch, xz, dpkg
+, libxslt, docbook_xsl, makeWrapper, writeShellScript
+, python3Packages
+, perlPackages, curl, gnupg, diffutils, nano, pkg-config, bash-completion, help2man
+, sendmailPath ? "/run/wrappers/bin/sendmail"
+}:
+
+let
+  inherit (python3Packages) python setuptools;
+  sensible-editor = writeShellScript "sensible-editor" ''
+    exec ''${EDITOR-${nano}/bin/nano} "$@"
+  '';
+in stdenv.mkDerivation rec {
+  version = "2.23.5";
+  pname = "debian-devscripts";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/d/devscripts/devscripts_${version}.tar.xz";
+    hash = "sha256-j0fUVTS/lPKFdgeMhksiJz2+E5koB07IK2uEj55EWG0=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "hardening-check-obey-binutils-env-vars.patch";
+      url = "https://github.com/Debian/devscripts/pull/2/commits/c6a018e0ef50a1b0cb4962a2f96dae7c6f21f1d4.patch";
+      hash = "sha256-UpS239JiAM1IYxNuJLdILq2h0xlR5t0Tzhj47xiMHww=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace scripts/Makefile --replace /usr/share/dpkg ${dpkg}/share/dpkg
+    substituteInPlace scripts/debrebuild.pl --replace /usr/bin/perl ${perlPackages.perl}/bin/perl
+    patchShebangs scripts
+  '';
+
+  nativeBuildInputs = [ makeWrapper pkg-config ];
+  buildInputs = [ xz dpkg libxslt python setuptools curl gnupg diffutils bash-completion help2man ] ++
+    (with perlPackages; [ perl CryptSSLeay LWP TimeDate DBFile FileDesktopEntry ParseDebControl LWPProtocolHttps Moo FileHomeDir IPCRun FileDirList FileTouch ]);
+
+  preConfigure = ''
+    export PERL5LIB="$PERL5LIB''${PERL5LIB:+:}${dpkg}";
+    tgtpy="$out/${python.sitePackages}"
+    mkdir -p "$tgtpy"
+    export PYTHONPATH="$PYTHONPATH''${PYTHONPATH:+:}$tgtpy"
+    find lib po4a scripts -type f -exec sed -r \
+      -e "s@/usr/bin/gpg(2|)@${gnupg}/bin/gpg@g" \
+      -e "s@/usr/(s|)bin/sendmail@${sendmailPath}@g" \
+      -e "s@/usr/bin/diff@${diffutils}/bin/diff@g" \
+      -e "s@/usr/bin/gpgv(2|)@${gnupg}/bin/gpgv@g" \
+      -e "s@(command -v|/usr/bin/)curl@${curl.bin}/bin/curl@g" \
+      -e "s@sensible-editor@${sensible-editor}@g" \
+      -e "s@(^|\W)/bin/bash@\1${stdenv.shell}@g" \
+      -i {} +
+    sed -e "s@/usr/share/sgml/[^ ]*/manpages/docbook.xsl@${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl@" -i scripts/Makefile
+    sed -r \
+      -e "s@/usr( |$|/)@$out\\1@g" \
+      -e "s@/etc( |$|/)@$out/etc\\1@g" \
+      -e 's/ translated_manpages//; s/--install-layout=deb//; s@--root="[^ ]*"@--prefix="'"$out"'"@' \
+      -i Makefile* */Makefile*
+  '';
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+    "COMPL_DIR=/share/bash-completion/completions"
+    "PERLMOD_DIR=/share/devscripts"
+  ];
+
+  postInstall = ''
+    sed -re 's@(^|[ !`"])/bin/bash@\1${stdenv.shell}@g' -i "$out/bin"/*
+    for i in "$out/bin"/*; do
+      wrapProgram "$i" \
+        --prefix PERL5LIB : "$PERL5LIB" \
+        --prefix PERL5LIB : "$out/share/devscripts" \
+        --prefix PYTHONPATH : "$out/${python.sitePackages}" \
+        --prefix PATH : "${dpkg}/bin"
+    done
+    ln -s cvs-debi $out/bin/cvs-debc
+    ln -s debchange $out/bin/dch
+    ln -s pts-subscribe $out/bin/pts-unsubscribe
+  '';
+
+  meta = with lib; {
+    description = "Debian package maintenance scripts";
+    license = licenses.free; # Mix of public domain, Artistic+GPL, GPL1+, GPL2+, GPL3+, and GPL2-only... TODO
+    maintainers = with maintainers; [raskin];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/debootstrap/default.nix b/nixpkgs/pkgs/tools/misc/debootstrap/default.nix
new file mode 100644
index 000000000000..96e003fe7204
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/debootstrap/default.nix
@@ -0,0 +1,102 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, dpkg
+, gawk
+, perl
+, wget
+, binutils
+, bzip2
+, coreutils
+, util-linux
+, gnugrep
+, gnupg1
+, gnutar
+, gnused
+, gzip
+, xz
+, makeWrapper
+, nix-update-script
+, testers
+, debootstrap
+}:
+
+# USAGE like this: debootstrap sid /tmp/target-chroot-directory
+# There is also cdebootstrap now. Is that easier to maintain?
+let binPath = lib.makeBinPath [
+    binutils
+    bzip2
+    coreutils
+    dpkg
+    gawk
+    gnugrep
+    gnupg1
+    gnused
+    gnutar
+    gzip
+    perl
+    wget
+    xz
+  ];
+in stdenv.mkDerivation rec {
+  pname = "debootstrap";
+  version = "1.0.131";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "installer-team";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-rwNcrS2GzVs0JYxeHcpLMG9FDwSpthNmZIemn95hC6g=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    substituteInPlace debootstrap \
+      --replace 'CHROOT_CMD="chroot '  'CHROOT_CMD="${coreutils}/bin/chroot ' \
+      --replace 'CHROOT_CMD="unshare ' 'CHROOT_CMD="${util-linux}/bin/unshare ' \
+      --replace /usr/bin/dpkg ${dpkg}/bin/dpkg \
+      --replace '#!/bin/sh' '#!/bin/bash' \
+      --subst-var-by VERSION ${version}
+
+    d=$out/share/debootstrap
+    mkdir -p $out/{share/debootstrap,bin}
+
+    mv debootstrap $out/bin
+
+    cp -r . $d
+
+    wrapProgram $out/bin/debootstrap \
+      --set PATH ${binPath} \
+      --set-default DEBOOTSTRAP_DIR $d
+
+    mkdir -p $out/man/man8
+    mv debootstrap.8 $out/man/man8
+
+    rm -rf $d/debian
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = debootstrap;
+    };
+  };
+
+  meta = with lib; {
+    changelog = "https://salsa.debian.org/installer-team/debootstrap/-/blob/${version}/debian/changelog";
+    description = "Tool to create a Debian system in a chroot";
+    homepage = "https://wiki.debian.org/Debootstrap";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marcweber ];
+    platforms = platforms.linux;
+    mainProgram = "debootstrap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/depotdownloader/default.nix b/nixpkgs/pkgs/tools/misc/depotdownloader/default.nix
new file mode 100644
index 000000000000..419b58bfa722
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/depotdownloader/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, buildDotnetModule
+, fetchFromGitHub
+}:
+
+buildDotnetModule rec {
+  pname = "depotdownloader";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "SteamRE";
+    repo = "DepotDownloader";
+    rev = "DepotDownloader_${version}";
+    sha256 = "Kgi0u+H5BIAhrjk9e+8H1h0p5Edm3+2twYBPY3JQGps=";
+  };
+
+  projectFile = "DepotDownloader.sln";
+  nugetDeps = ./deps.nix;
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Steam depot downloader utilizing the SteamKit2 library";
+    changelog = "https://github.com/SteamRE/DepotDownloader/releases/tag/DepotDownloader_${version}";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.babbaj ];
+    platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    mainProgram = "DepotDownloader";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/depotdownloader/deps.nix b/nixpkgs/pkgs/tools/misc/depotdownloader/deps.nix
new file mode 100644
index 000000000000..58e2f63ba01d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/depotdownloader/deps.nix
@@ -0,0 +1,15 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "protobuf-net"; version = "3.2.16"; sha256 = "0pwlqlq2p8my2sr8b0cvdav5cm8wpwf3s4gy7s1ba701ac2zyb9y"; })
+  (fetchNuGet { pname = "protobuf-net.Core"; version = "3.2.16"; sha256 = "00znhikq7valr3jaxg66cwli9hf75wkmmpf6rf8p790hf8lxq0c5"; })
+  (fetchNuGet { pname = "QRCoder"; version = "1.4.3"; sha256 = "1hmlqbdyq5n9bsmns5h0dwcxpd2jvqr9a2y6dyc9kbjmc8j1dpla"; })
+  (fetchNuGet { pname = "SteamKit2"; version = "2.5.0-beta.1"; sha256 = "0691285g4z12hv5kpv72l36h45086n14rw56x3dnixcvrjzg2q01"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "7.0.0"; sha256 = "1n9122cy6v3qhsisc9lzwa1m1j62b8pi2678nsmnlyvfpk0zdagm"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+]
diff --git a/nixpkgs/pkgs/tools/misc/depotdownloader/update.sh b/nixpkgs/pkgs/tools/misc/depotdownloader/update.sh
new file mode 100755
index 000000000000..2adbb6037a9d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/depotdownloader/update.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=./. -i bash -p jq curl common-updater-scripts nix coreutils
+
+set -eou pipefail
+
+currentVersion="$(nix eval --raw -f . depotdownloader.version)"
+latestVersion="$(curl -s ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} "https://api.github.com/repos/SteamRE/DepotDownloader/releases?per_page=1" \
+    | jq -r '.[].name' | cut -d' ' -f2)"
+
+if [[ "$currentVersion" = "$latestVersion" ]]; then
+    echo "Already up to date!"
+    exit
+fi
+
+update-source-version depotdownloader "$latestVersion"
+$(nix-build -A depotdownloader.fetch-deps --no-out-link)
diff --git a/nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix b/nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix
new file mode 100644
index 000000000000..ae17b51025dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/desktop-file-utils/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, lib
+, fetchurl
+, pkg-config
+, meson
+, ninja
+, glib
+, libintl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "desktop-file-utils";
+  version = "0.27";
+
+  src = fetchurl {
+    url = "https://www.freedesktop.org/software/${pname}/releases/${pname}-${version}.tar.xz";
+    hash = "sha256-oIF985zjhbZiGIBAfFbx8pgWjAQMIDLO34jVt2r/6DY=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+  ];
+
+  buildInputs = [
+    glib
+    libintl
+  ];
+
+  postPatch = ''
+    substituteInPlace src/install.c \
+      --replace \"update-desktop-database\" \"$out/bin/update-desktop-database\"
+  '';
+
+  setupHook = ./setup-hook.sh;
+
+  meta = with lib; {
+    homepage = "https://www.freedesktop.org/wiki/Software/desktop-file-utils";
+    description = "Command line utilities for working with .desktop files";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh b/nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh
new file mode 100644
index 000000000000..728070e34581
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/desktop-file-utils/setup-hook.sh
@@ -0,0 +1,6 @@
+# Remove mimeinfo cache
+mimeinfoPreFixupPhase() {
+    rm -f $out/share/applications/mimeinfo.cache
+}
+
+preFixupPhases="${preFixupPhases-} mimeinfoPreFixupPhase"
diff --git a/nixpkgs/pkgs/tools/misc/detox/default.nix b/nixpkgs/pkgs/tools/misc/detox/default.nix
new file mode 100644
index 000000000000..570882d59ab9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/detox/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, flex, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "detox";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "dharple";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-cTuK5EIimRVZ1nfuTa1ds6xrawYIAbwNNIkNONd9y4Q=";
+  };
+
+  nativeBuildInputs = [ flex autoreconfHook ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dharple/detox";
+    description = "Utility designed to clean up filenames";
+    changelog = "https://github.com/dharple/detox/blob/v${version}/CHANGELOG.md";
+    longDescription = ''
+      Detox is a utility designed to clean up filenames. It replaces
+      difficult to work with characters, such as spaces, with standard
+      equivalents. It will also clean up filenames with UTF-8 or Latin-1
+      (or CP-1252) characters in them.
+    '';
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    mainProgram = "detox";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dialogbox/default.nix b/nixpkgs/pkgs/tools/misc/dialogbox/default.nix
new file mode 100644
index 000000000000..7012f9d69ad5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dialogbox/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, mkDerivation
+, fetchFromGitHub
+, qmake
+, qtbase
+}:
+
+mkDerivation rec {
+  pname = "dialogbox";
+  version = "1.0+unstable=2020-11-16";
+
+  src = fetchFromGitHub {
+    owner = "martynets";
+    repo = pname;
+    rev = "6989740746f376becc989ab2698e77d14186a0f9";
+    hash = "sha256-paTas3KbV4yZ0ePnrOH1S3bLLHDddFml1h6b6azK4RQ=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+  ];
+
+  buildInputs = [
+    qtbase
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -d $out/{bin,share/doc/dialogbox}
+    install dist/dialogbox $out/bin
+    install README.md $out/share/doc/dialogbox/
+    cp -r demos $out/share/doc/dialogbox/demos
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://github.com/martynets/dialogbox/";
+    description = "Qt-based scriptable engine providing GUI dialog boxes";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+    mainProgram = "dialogbox";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/didu/default.nix b/nixpkgs/pkgs/tools/misc/didu/default.nix
new file mode 100644
index 000000000000..a5a8a790e4ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/didu/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitea }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "didu";
+  version = "2.5.2";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "szYWRN1NZbfpshipwMMJSWJw/NG4w7I+aqwtmqpT0R0=";
+  };
+
+  cargoSha256 = "O1kkfrwv7xiOh3wCV/ce6cqpkMPRRzcXOFESYMAhiKA=";
+
+  meta = with lib; {
+    description = "Duration conversion between units";
+    homepage = "https://codeberg.org/annaaurora/didu";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+    mainProgram = "didu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/didyoumean/default.nix b/nixpkgs/pkgs/tools/misc/didyoumean/default.nix
new file mode 100644
index 000000000000..d7671cf08bbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/didyoumean/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, libxcb
+, openssl
+  # Darwin dependencies
+, AppKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "didyoumean";
+  version = "1.1.4";
+
+  src = fetchFromGitHub {
+    owner = "hisbaan";
+    repo = "didyoumean";
+    rev = "v${version}";
+    sha256 = "sha256-PSEoh1OMElFJ8m4er1vBMkQak3JvLjd+oWNWA46cows=";
+  };
+
+  cargoSha256 = "sha256-QERnohWpkJ0LWkdxHrY6gKxdGqxDkLla7jlG44laojk=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ] ++ lib.optionals stdenv.isLinux [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    libxcb
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    AppKit
+  ];
+
+  postInstall = ''
+    installManPage man/dym.1
+    installShellCompletion completions/dym.{bash,fish}
+    installShellCompletion --zsh completions/_dym
+  '';
+
+  # Clipboard doesn't exist in test environment
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A CLI spelling corrector for when you're unsure";
+    homepage = "https://github.com/hisbaan/didyoumean";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ evanjs wegank ];
+    mainProgram = "dym";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diffoci/default.nix b/nixpkgs/pkgs/tools/misc/diffoci/default.nix
new file mode 100644
index 000000000000..6337b2d500c4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoci/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, buildPackages
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "diffoci";
+  version = "0.1.4";
+
+  src = fetchFromGitHub {
+    owner = "reproducible-containers";
+    repo = "diffoci";
+    rev = "v${version}";
+    hash = "sha256-BTggky5behIxbVxyDZ09uobw0FBopboE9uUBEVgCgR4=";
+  };
+
+  vendorHash = "sha256-4C35LBxSm6EkcOznQY1hT2vX9bwFfps/q76VqqPKBfI=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/reproducible-containers/diffoci/cmd/diffoci/version.Version=v${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall =
+    let
+      diffoci = if stdenv.buildPlatform.canExecute stdenv.hostPlatform then placeholder "out" else buildPackages.diffoci;
+    in
+    ''
+      installShellCompletion --cmd trivy \
+        --bash <(${diffoci}/bin/diffoci completion bash) \
+        --fish <(${diffoci}/bin/diffoci completion fish) \
+        --zsh <(${diffoci}/bin/diffoci completion zsh)
+    '';
+
+  meta = with lib; {
+    description = "Diff for Docker and OCI container images";
+    homepage = "https://github.com/reproducible-containers/diffoci/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jk ];
+    mainProgram = "diffoci";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diffoscope/default.nix b/nixpkgs/pkgs/tools/misc/diffoscope/default.nix
new file mode 100644
index 000000000000..c5ca89f54841
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoscope/default.nix
@@ -0,0 +1,325 @@
+{ lib
+, stdenv
+, abootimg
+, acl
+, apksigcopier
+, apksigner
+, apktool
+, binutils-unwrapped-all-targets
+, bzip2
+, cbfstool
+, cdrkit
+, colord
+, colordiff
+, coreutils
+, cpio
+, db
+, diffutils
+, docutils
+, dtc
+, e2fsprogs
+, enableBloat ? true
+, enjarify
+, fetchurl
+, file
+, findutils
+, fontforge-fonttools
+, ffmpeg
+, fpc
+, gettext
+, ghc
+, ghostscriptX
+, giflib
+, gnumeric
+, gnupg
+, gnutar
+, gzip
+, hdf5
+, help2man
+, html2text
+, imagemagick
+, installShellFiles
+, jdk
+, libarchive
+, libcaca
+, libxmlb
+, llvm
+, lz4
+, lzip
+, mono
+, ocaml
+, odt2txt
+, oggvideotools
+, openssh
+, openssl
+, pdftk
+, pgpdump
+, poppler_utils
+, procyon
+, python3
+, qemu
+, R
+, sng
+, sqlite
+, squashfsTools
+, tcpdump
+, ubootTools
+, unzip
+, wabt
+, xmlbeans
+, xxd
+, xz
+, zip
+, zstd
+  # updater only
+, writeScript
+}:
+
+let
+  python = python3.override {
+    packageOverrides = final: prev: {
+      # version 4 or newer would log the followng error but tests currently don't fail because radare2 is disabled
+      # ValueError: argument TNULL is not a TLSH hex string
+      tlsh = prev.tlsh.overridePythonAttrs ({ src, ... }: let
+        version = "3.19.1";
+      in {
+        inherit version;
+        src = src.override {
+          rev = version;
+          hash = "sha256-ZYEjT/yShfA4+zpbGOtaFOx1nSSOWPtMvskPhHv3c9U=";
+        };
+      });
+    };
+  };
+in
+
+# Note: when upgrading this package, please run the list-missing-tools.sh script as described below!
+python.pkgs.buildPythonApplication rec {
+  pname = "diffoscope";
+  version = "265";
+
+  src = fetchurl {
+    url = "https://diffoscope.org/archive/diffoscope-${version}.tar.bz2";
+    hash = "sha256-YE81R8lTOM3wmv/GIaIBqUq2O6UvnUaHjuXZ00yDU8U=";
+  };
+
+  outputs = [
+    "out"
+    "man"
+  ];
+
+  patches = [
+    ./ignore_links.patch
+    ./openssh-no-dsa.patch # https://salsa.debian.org/reproducible-builds/diffoscope/-/merge_requests/139
+  ];
+
+  postPatch = ''
+    # Upstream doesn't provide a PKG-INFO file
+    sed -i setup.py -e "/'rpm-python',/d"
+
+    # When generating manpage, use the installed version
+    substituteInPlace doc/Makefile --replace "../bin" "$out/bin"
+  '';
+
+  nativeBuildInputs = [
+    docutils
+    help2man
+    installShellFiles
+  ];
+
+  # Most of the non-Python dependencies here are optional command-line tools for various file-format parsers.
+  # To help figuring out what's missing from the list, run: ./pkgs/tools/misc/diffoscope/list-missing-tools.sh
+  #
+  # Still missing these tools:
+  # Android-specific tools:
+  # aapt2
+  # dexdump
+  # Darwin-specific tools:
+  # lipo
+  # otool
+  # Other tools:
+  # docx2txt <- makes tests broken:
+  # > FAILED tests/comparators/test_docx.py::test_diff - IndexError: list index out of range
+  # > FAILED tests/comparators/test_docx.py::test_compare_non_existing - AssertionError
+  # radare2
+  # > FAILED tests/comparators/test_elf_decompiler.py::test_ghidra_diff - IndexError: list index out of range
+  # > FAILED tests/comparators/test_elf_decompiler.py::test_radare2_diff - AssertionError
+  # > FAILED tests/comparators/test_macho_decompiler.py::test_ghidra_diff - assert 0 == 1
+  # > FAILED tests/comparators/test_macho_decompiler.py::test_radare2_diff - AssertionError
+  #
+  # We filter automatically all packages for the host platform (some dependencies are not supported on Darwin, aarch64, etc.).
+  pythonPath = lib.filter (lib.meta.availableOn stdenv.hostPlatform) ([
+    acl
+    binutils-unwrapped-all-targets
+    bzip2
+    cdrkit
+    colordiff
+    coreutils
+    cpio
+    db
+    diffutils
+    dtc
+    e2fsprogs
+    file
+    findutils
+    fontforge-fonttools
+    gettext
+    gnutar
+    gzip
+    html2text
+    libarchive
+    libxmlb
+    lz4
+    lzip
+    openssl
+    pgpdump
+    sng
+    sqlite
+    squashfsTools
+    unzip
+    xxd
+    xz
+    zip
+    zstd
+  ]
+  ++ (with python.pkgs; [
+    argcomplete
+    debian
+    defusedxml
+    jsbeautifier
+    jsondiff
+    libarchive-c
+    progressbar33
+    pypdf
+    python-magic
+    pyxattr
+    rpm
+    tlsh
+  ])
+  ++ lib.optionals enableBloat (
+    [
+      abootimg
+      apksigcopier
+      apksigner
+      apktool
+      cbfstool
+      colord
+      enjarify
+      ffmpeg
+      fpc
+      ghc
+      ghostscriptX
+      giflib
+      gnupg
+      hdf5
+      imagemagick
+      jdk
+      libcaca
+      llvm
+      mono
+      ocaml
+      odt2txt
+      openssh
+      pdftk
+      poppler_utils
+      procyon
+      qemu
+      R
+      tcpdump
+      ubootTools
+      wabt
+      xmlbeans
+    ]
+    ++ (with python.pkgs; [
+      androguard
+      binwalk
+      guestfs
+      h5py
+      pdfminer-six
+      r2pipe
+      # docx2txt, nixpkgs packages another project named the same, which does not work
+    ])
+    # oggvideotools is broken on Darwin, please put it back when it will be fixed?
+    ++ lib.optionals stdenv.isLinux [ oggvideotools ]
+    # This doesn't work on aarch64-darwin
+    ++ lib.optionals (stdenv.hostPlatform.system != "aarch64-darwin") [ gnumeric ]
+  ));
+
+  nativeCheckInputs = with python.pkgs; [
+    pytestCheckHook
+  ] ++ pythonPath;
+
+  pytestFlagsArray = [
+    # Always show more information when tests fail
+    "-vv"
+  ];
+
+  postInstall = ''
+    make -C doc
+    installManPage doc/diffoscope.1
+  '';
+
+  disabledTests = [
+    "test_sbin_added_to_path"
+    "test_diff_meta"
+    "test_diff_meta2"
+
+    # Fails because it fails to determine llvm version
+    "test_item3_deflate_llvm_bitcode"
+  ] ++ lib.optionals stdenv.isDarwin [
+    # Disable flaky tests on Darwin
+    "test_non_unicode_filename"
+    "test_listing"
+    "test_symlink_root"
+
+    # Appears to be a sandbox related issue
+    "test_trim_stderr_in_command"
+    # Seems to be a bug caused by having different versions of rdata than
+    # expected. Will file upstream.
+    "test_item_rdb"
+    # Caused by getting an otool command instead of llvm-objdump. Could be Nix
+    # setup, could be upstream bug. Will file upstream.
+    "test_libmix_differences"
+  ];
+
+  disabledTestPaths = lib.optionals stdenv.isDarwin [
+    "tests/comparators/test_git.py"
+    "tests/comparators/test_java.py"
+    "tests/comparators/test_uimage.py"
+    "tests/comparators/test_device.py"
+    "tests/comparators/test_macho.py"
+  ];
+
+  passthru = {
+    updateScript = writeScript "update-diffoscope" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -eu -o pipefail
+
+      # Expect the text in format of "Latest release: 198 (31 Dec 2021)"'.
+      newVersion="$(curl -s https://diffoscope.org/ | pcregrep -o1 'Latest release: ([0-9]+)')"
+      update-source-version ${pname} "$newVersion"
+    '';
+  };
+
+  meta = with lib; {
+    description = "Perform in-depth comparison of files, archives, and directories";
+    longDescription = ''
+      diffoscope will try to get to the bottom of what makes files or directories
+      different. It will recursively unpack archives of many kinds and transform
+      various binary formats into more human readable form to compare them. It can
+      compare two tarballs, ISO images, or PDF just as easily. The differences can
+      be shown in a text or HTML report.
+
+      diffoscope is developed as part of the "reproducible builds" Debian
+      project and was formerly known as "debbindiff".
+    '';
+    homepage = "https://diffoscope.org/";
+    changelog = "https://diffoscope.org/news/diffoscope-${version}-released/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dezgeg danielfullmer raitobezarius ];
+    platforms = platforms.unix;
+    mainProgram = "diffoscope";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch b/nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch
new file mode 100644
index 000000000000..2830acdd9655
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoscope/ignore_links.patch
@@ -0,0 +1,20 @@
+diff --git a/diffoscope/comparators/directory.py b/diffoscope/comparators/directory.py
+index 5f34d62..36999a3 100644
+--- a/diffoscope/comparators/directory.py
++++ b/diffoscope/comparators/directory.py
+@@ -77,6 +77,7 @@ else:
+         FILE_RE = re.compile(r"^\s*File:.*$")
+         DEVICE_RE = re.compile(r"Device: [0-9a-f]+h/[0-9]+d\s+")
+         INODE_RE = re.compile(r"Inode: [0-9]+\s+")
++        LINKS_RE = re.compile(r"Links: [0-9]+\s+")
+         ACCESS_TIME_RE = re.compile(r"^Access: [0-9]{4}-[0-9]{2}-[0-9]{2}.*$")
+         CHANGE_TIME_RE = re.compile(r"^Change: [0-9]{4}-[0-9]{2}-[0-9]{2}.*$")
+         BIRTH_TIME_RE = re.compile(r"^\s*Birth:.*$")
+@@ -86,6 +87,7 @@ else:
+             line = Stat.FILE_RE.sub("", line)
+             line = Stat.DEVICE_RE.sub("", line)
+             line = Stat.INODE_RE.sub("", line)
++            line = Stat.LINKS_RE.sub("", line)
+             line = Stat.ACCESS_TIME_RE.sub("", line)
+             line = Stat.CHANGE_TIME_RE.sub("", line)
+             line = Stat.BIRTH_TIME_RE.sub("", line)
diff --git a/nixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh b/nixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh
new file mode 100755
index 000000000000..5f4d118cfed7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoscope/list-missing-tools.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+# This script lists all the optional command-line tools that diffoscope can use
+# (i.e. `diffoscope --list-tools`) but are missing from the Nix expression.
+
+diffoscope=$(nix-build --no-out-link -E 'with import ./. {}; diffoscope.override { enableBloat = true; }')/bin/diffoscope
+
+required=$($diffoscope --list-tools | \
+    grep '^External-Tools-Required:' | \
+    cut -d ' ' -f2- | \
+    tr -d ,)
+
+# Uber-hacky!
+pathScript=$(cat $diffoscope | grep PATH)
+
+export PATH=$(nix-build --no-out-link -A which)/bin
+eval "$pathScript"
+
+for tool in $required; do
+    if ! which $tool >/dev/null 2>&1; then
+        echo $tool
+    fi
+done | sort
diff --git a/nixpkgs/pkgs/tools/misc/diffoscope/openssh-no-dsa.patch b/nixpkgs/pkgs/tools/misc/diffoscope/openssh-no-dsa.patch
new file mode 100644
index 000000000000..d8e88f30a92d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diffoscope/openssh-no-dsa.patch
@@ -0,0 +1,29 @@
+diff --git a/tests/comparators/test_openssh_pub_key.py b/tests/comparators/test_openssh_pub_key.py
+index da143097..8d6f3efa 100644
+--- a/tests/comparators/test_openssh_pub_key.py
++++ b/tests/comparators/test_openssh_pub_key.py
+@@ -29,7 +29,7 @@
+ from ..utils.tools import skip_unless_tools_exist, skip_unless_tool_is_at_least
+ 
+ 
+-# Generated by: ssh-keygen -t dsa -C "Test1"
++# Generated by: ssh-keygen -t ed25519 -C "Test1"
+ opensshpubkey1 = load_fixture("test_openssh_pub_key1.pub")
+ # Generated by: ssh-keygen -t rsa -b 4096 -C "Test2"
+ opensshpubkey2 = load_fixture("test_openssh_pub_key2.pub")
+diff --git a/tests/data/openssh_pub_key_expected_diff b/tests/data/openssh_pub_key_expected_diff
+index 0b6ec624..88d1eccf 100644
+--- a/tests/data/openssh_pub_key_expected_diff
++++ b/tests/data/openssh_pub_key_expected_diff
+@@ -1,3 +1,3 @@
+ @@ -1 +1 @@
+--1024 SHA256:v/O+0ETvi2H5TGRXky1RhQ1/WFwLlPpxch5E2Mrj6FM Test1 (DSA)
++-256 SHA256:ix2OOXDuTWjxGTICJcP7fLWIcwOO+wr4FPJHz8fOhtQ Test1 (ED25519)
+ +4096 SHA256:9dH1CMkA6DSfPWU7vNwdPKS5/ppN4LMdvHTP60l7aSA Test2 (RSA)
+diff --git a/tests/data/test_openssh_pub_key1.pub b/tests/data/test_openssh_pub_key1.pub
+index a2674adc..d564f55c 100644
+--- a/tests/data/test_openssh_pub_key1.pub
++++ b/tests/data/test_openssh_pub_key1.pub
+@@ -1 +1 @@
+-ssh-dss AAAAB3NzaC1kc3MAAACBAIa8YajID9g38jwQm8sNBGoGkkwIOv6sQ8k+Bcq8oPXPy1FRXWcra6Kd3iKqApIzLuZUvoYO/f3G2K4lue5yrv72rgwANWmyL4dHVXgcsjwvWwjOl6o4xWTPFspkdNcAAMcZfzG0+w1AOkQxhwMsnK380m3J9a3VOWugUiU4fV1jAAAAFQDzkrIZuJoxlxes564ltb2Vn3hnpQAAAIBHr6uzpiSeSkWLuItB00hHx1RHtBns0zaheNFTTUMGftxtfBU2eBLqObcTlqHJZ3UUY3/YAvD6Ux/uLSgUzEe7JaqvHcgML3K5V4HWIwE0ARRIwzrfU4cAErJObmZZ/OXbXNNRmW2IJgQJI52x4gVuSt0EEuctzASOOvyPA8IekAAAAIA7xe4o0o/ZwUqfWKR9K4QrbPPa6/D4ruFVhMcRJEE/A1LMY1Xo4nVSRU5bxzvMmJPBZvsbR5NEE3CgESqYxp5IPzK8LLyxcf8YxhdHFDYqFL1TbavwaDqtj6/9a/e7+bd8mMYe7zXJUdKWa/Uf+Xm6WRt3HgdLiCEsS2OlpvS2KA== Test1
++ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGo65kxbPUbb4fdujB2AX/XEZQ+23NDDxu3cJvw2E/DF Test1
diff --git a/nixpkgs/pkgs/tools/misc/digitemp/default.nix b/nixpkgs/pkgs/tools/misc/digitemp/default.nix
new file mode 100644
index 000000000000..312127a6f930
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/digitemp/default.nix
@@ -0,0 +1,53 @@
+{ fetchFromGitHub, lib, stdenv }:
+
+stdenv.mkDerivation rec {
+  pname = "digitemp";
+  version = "3.7.2";
+
+  src = fetchFromGitHub {
+    owner = "bcl";
+    repo = "digitemp";
+    rev = "v${version}";
+    sha256 = "19zka5fcdxhhginaspak76l984iqq9v2j6qrwvi5mvca7bcj8f72";
+  };
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "LOCK=no"
+    "ds9097"
+    "ds9097u"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D -m555 -t $out/bin digitemp_*
+    install -D -m444 -t $out/share/doc/${pname} FAQ README
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Temperature logging and reporting using Maxim's iButtons and 1-Wire protocol";
+    longDescription = ''
+      DigiTemp is a command line application used for reading 1-wire sensors like
+      the DS18S20 temperature sensor, or DS2438 battery monitor. DigiTemp supports
+      the following devices:
+
+        DS18S20 (and older DS1820) Temperature Sensor
+        DS18B20 Temperature Sensor
+        DS1822 Temperature Sensor
+        DS2438 Battery monitor
+        DS2409 1-wire coupler (used in 1-wire hubs)
+        DS2422 Counter
+        DS2423 Counter
+
+      The output format can be customized and all settings are stored in a
+      configuration file (.digitemprc) in the current directory. DigiTemp can
+      repeatedly read the sensors and output to stdout and/or to a logfile.
+    '';
+    homepage = "https://www.digitemp.com";
+    license = licenses.gpl2Plus;
+    maintainers = [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dijo/default.nix b/nixpkgs/pkgs/tools/misc/dijo/default.nix
new file mode 100644
index 000000000000..7e6d4c74e96b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dijo/default.nix
@@ -0,0 +1,22 @@
+{ stdenv, lib, rustPlatform, fetchFromGitHub, ncurses, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dijo";
+  version = "0.2.7";
+  buildInputs = [ ncurses ] ++ lib.optional stdenv.isDarwin CoreServices;
+  src = fetchFromGitHub {
+    owner = "NerdyPepper";
+    repo = "dijo";
+    rev = "v${version}";
+    sha256 = "sha256-g+A8BJxqoAvm9LTLrLnClVGtFJCQ2gT0mDGAov/6vXE=";
+  };
+  cargoSha256 = "sha256-o3+KcE7ozu6eUgwsOSr9DOoIo+/BZ3bJZe+WYQLXHpY=";
+
+  meta = with lib; {
+    description = "Scriptable, curses-based, digital habit tracker";
+    homepage = "https://github.com/NerdyPepper/dijo";
+    license = licenses.mit;
+    maintainers = [ ];
+    mainProgram = "dijo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ding-libs/default.nix b/nixpkgs/pkgs/tools/misc/ding-libs/default.nix
new file mode 100644
index 000000000000..db2c2f5e146f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ding-libs/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, check }:
+
+stdenv.mkDerivation rec {
+  pname = "ding-libs";
+  version = "0.6.1";
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/SSSD/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1h97mx2jdv4caiz4r7y8rxfsq78fx0k4jjnfp7x2s7xqvqks66d3";
+  };
+
+  enableParallelBuilding = true;
+  buildInputs = [ check ];
+
+  doCheck = true;
+
+  meta = {
+    description = "'D is not GLib' utility libraries";
+    homepage = "https://pagure.io/SSSD/ding-libs";
+    platforms = with lib.platforms; linux;
+    maintainers = with lib.maintainers; [ ];
+    license = [ lib.licenses.gpl3 lib.licenses.lgpl3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/direnv/default.nix b/nixpkgs/pkgs/tools/misc/direnv/default.nix
new file mode 100644
index 000000000000..4bb9d9bacaff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/direnv/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitHub, buildGoModule, bash, fish, zsh }:
+
+buildGoModule rec {
+  pname = "direnv";
+  version = "2.34.0";
+
+  src = fetchFromGitHub {
+    owner = "direnv";
+    repo = "direnv";
+    rev = "v${version}";
+    sha256 = "sha256-EvzqLS/FiWrbIXDkp0L/T8QNKnRGuQkbMWajI3X3BDw=";
+  };
+
+  vendorHash = "sha256-FfKvLPv+jUT5s2qQ7QlzBMArI+acj7nhpE8FGMPpp5E=";
+
+  # we have no bash at the moment for windows
+  BASH_PATH =
+    lib.optionalString (!stdenv.hostPlatform.isWindows)
+    "${bash}/bin/bash";
+
+  # replace the build phase to use the GNUMakefile instead
+  buildPhase = ''
+    make BASH_PATH=$BASH_PATH
+  '';
+
+  installPhase = ''
+    make install PREFIX=$out
+  '';
+
+  nativeCheckInputs = [ fish zsh ];
+
+  checkPhase = ''
+    export HOME=$(mktemp -d)
+    make test-go test-bash test-fish test-zsh
+  '';
+
+  meta = with lib; {
+    description = "A shell extension that manages your environment";
+    longDescription = ''
+      Once hooked into your shell direnv is looking for an .envrc file in your
+      current directory before every prompt.
+
+      If found it will load the exported environment variables from that bash
+      script into your current environment, and unload them if the .envrc is
+      not reachable from the current path anymore.
+
+      In short, this little tool allows you to have project-specific
+      environment variables.
+    '';
+    homepage = "https://direnv.net";
+    license = licenses.mit;
+    maintainers = [ maintainers.zimbatm ];
+    mainProgram = "direnv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/discocss/default.nix b/nixpkgs/pkgs/tools/misc/discocss/default.nix
new file mode 100644
index 000000000000..b930338c29f4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/discocss/default.nix
@@ -0,0 +1,43 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+, discordAlias ? false
+, discord
+, makeWrapper
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "discocss";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "mlvzk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-of7OMgbuwebnFmbefGD1/dOhyTX1Hy7TccnWSRCweW0=";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm755 discocss $out/bin/discocss
+  '' + lib.optionalString discordAlias ''
+    wrapProgram $out/bin/discocss --set DISCOCSS_DISCORD_BIN ${discord}/bin/Discord
+    ln -s $out/bin/discocss $out/bin/Discord
+    ln -s $out/bin/discocss $out/bin/discord
+    mkdir -p $out/share
+    ln -s ${discord}/share/* $out/share
+  '';
+
+  meta = with lib; {
+    description = "A tiny Discord css-injector";
+    changelog = "https://github.com/mlvzk/discocss/releases/tag/v${version}";
+    homepage = "https://github.com/mlvzk/discocss";
+    license = licenses.mpl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ mlvzk ];
+    mainProgram = "discocss";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/disfetch/default.nix b/nixpkgs/pkgs/tools/misc/disfetch/default.nix
new file mode 100644
index 000000000000..6cd7a2683d60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/disfetch/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "disfetch";
+  version = "3.7";
+
+  src = fetchFromGitHub {
+    owner = "q60";
+    repo = "disfetch";
+    rev = version;
+    sha256 = "sha256-xzOE+Pnx0qb3B9vWWrF5Q0nhUo0QYBUO6j6al8N3deY=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 -t $out/bin disfetch
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Yet another *nix distro fetching program, but less complex";
+    homepage = "https://github.com/q60/disfetch";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ vel ];
+    mainProgram = "disfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diskonaut/default.nix b/nixpkgs/pkgs/tools/misc/diskonaut/default.nix
new file mode 100644
index 000000000000..6193e0a5e816
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diskonaut/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "diskonaut";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "imsnif";
+    repo = "diskonaut";
+    rev = version;
+    sha256 = "1pmbag3r2ka30zmy2rs9jps2qxj2zh0gy4a774v9yhf0b6qjid54";
+  };
+
+  cargoSha256 = "10jrcy8m9ll4136ghq3fhmnphd9g3rw863x708vm17n44kgdxyab";
+
+  # 1 passed; 44 failed https://hydra.nixos.org/build/148943783/nixlog/1
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Terminal disk space navigator";
+    homepage = "https://github.com/imsnif/diskonaut";
+    license = licenses.mit;
+    maintainers = with maintainers; [ evanjs figsoda ];
+    mainProgram = "diskonaut";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diskscan/default.nix b/nixpkgs/pkgs/tools/misc/diskscan/default.nix
new file mode 100644
index 000000000000..7471089f45f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diskscan/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, cmake, ncurses, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "diskscan";
+  version = "0.21";
+
+  src = fetchFromGitHub {
+    owner  = "baruch";
+    repo   = "diskscan";
+    rev    = version;
+    sha256 = "sha256-2y1ncPg9OKxqImBN5O5kXrTsuwZ/Cg/8exS7lWyZY1c=";
+  };
+
+  buildInputs = [ ncurses zlib ];
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    homepage = "https://github.com/baruch/diskscan";
+    description = "Scan HDD/SSD for failed and near failed sectors";
+    platforms = with platforms; linux;
+    maintainers = with maintainers; [ peterhoeg ];
+    license = licenses.gpl3;
+    mainProgram = "diskscan";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/diskus/default.nix b/nixpkgs/pkgs/tools/misc/diskus/default.nix
new file mode 100644
index 000000000000..cfbcfdcca6eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/diskus/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "diskus";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = "diskus";
+    rev = "v${version}";
+    sha256 = "sha256-SKd2CU0F2iR4bSHntu2VKvZyjjf2XJeXJG6XS/fIBMU=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoSha256 = "sha256-qNXv6Z9sKl7rol78UTOSRFML/JCGfOJMGOdt49KHD50=";
+
+  meta = with lib; {
+    description = "A minimal, fast alternative to 'du -sh'";
+    homepage = "https://github.com/sharkdp/diskus";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.fuerbringer ];
+    platforms = platforms.unix;
+    longDescription = ''
+      diskus is a very simple program that computes the total size of the
+      current directory. It is a parallelized version of du -sh.
+    '';
+    mainProgram = "diskus";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/djenrandom/default.nix b/nixpkgs/pkgs/tools/misc/djenrandom/default.nix
new file mode 100644
index 000000000000..51f892a5a453
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/djenrandom/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "djenrandom";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "dj-on-github";
+    repo = "djenrandom";
+    rev = "${version}";
+    hash = "sha256-r5UT8z8vvFZDffsl6CqBXuvBaZ/sl1WLxJi26CxkpAw=";
+  };
+
+  preBuild = ''
+    sed -i s/gcc/${stdenv.cc.targetPrefix}gcc/g Makefile
+  ''
+  + lib.optionalString (!stdenv.hostPlatform.isx86_64) ''
+    sed -i s/-m64//g Makefile
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D djenrandom $out/bin/djenrandom
+    runHook postInstall
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = {
+    homepage = "http://www.deadhat.com/";
+    description = ''
+      A C program to generate random data using several random models,
+      with parameterized non uniformities and flexible output formats
+    '';
+    license = lib.licenses.gpl2Only;
+    # djenrandom uses x86 specific instructions, therefore we can only compile for the x86 architechture
+    platforms = lib.platforms.x86;
+    maintainers = with lib.maintainers; [ orichter thillux ];
+    mainProgram = "djenrandom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dmg2img/default.nix b/nixpkgs/pkgs/tools/misc/dmg2img/default.nix
new file mode 100644
index 000000000000..7f9c41cda32c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dmg2img/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, zlib, bzip2, openssl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "dmg2img";
+  version = "1.6.7";
+
+  src = fetchurl {
+    url = "http://vu1tur.eu.org/tools/dmg2img-${version}.tar.gz";
+    sha256 = "066hqhg7k90xcw5aq86pgr4l7apzvnb4559vj5s010avbk8adbh2";
+  };
+
+  buildInputs = [ zlib bzip2 openssl ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/Homebrew/formula-patches/85fa66a9/dmg2img/openssl-1.1.diff";
+      sha256 = "076sz69hf3ryylplg025vl8sj991cb81g3yazsmrf8anrd7ffmxx";
+    })
+  ];
+
+  patchFlags = [ "-p0" ];
+
+  installPhase = ''
+    install -D dmg2img $out/bin/dmg2img
+    install -D vfdecrypt $out/bin/vfdecrypt
+  '';
+
+  meta = {
+    platforms = lib.platforms.unix;
+    description = "An Apple's compressed dmg to standard (hfsplus) image disk file convert tool";
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix b/nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix
new file mode 100644
index 000000000000..f64a73a338ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docbook2mdoc/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, expat }:
+
+stdenv.mkDerivation rec {
+  pname = "docbook2mdoc";
+  version = "0.0.9";
+
+  src = fetchurl {
+    url = "http://mdocml.bsd.lv/docbook2mdoc/snapshots/${pname}-${version}.tgz";
+    sha256 = "07il80sg89xf6ym4bry6hxdacfzqgbwkxzyf7bjaihmw5jj0lclk";
+  };
+
+  buildInputs = [ expat.dev ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "http://mdocml.bsd.lv/";
+    description = "converter from DocBook V4.x and v5.x XML into mdoc";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ramkromberg ];
+    mainProgram = "docbook2mdoc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docker-ls/default.nix b/nixpkgs/pkgs/tools/misc/docker-ls/default.nix
new file mode 100644
index 000000000000..6f6a322cc28f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-ls/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule, fetchFromGitHub, lib, docker }:
+
+buildGoModule rec {
+  pname = "docker-ls";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "mayflower";
+    repo = "docker-ls";
+    rev = "v${version}";
+    sha256 = "sha256-4+REt0NH4S367qFsyJncVedUrC4t1zw5o0CLTiQfIz8=";
+  };
+
+  vendorHash = "sha256-UulcjQOLEIP++eoYQTEIbCJW51jyE312dMxB8+AKcdU=";
+
+  meta = with lib; {
+    description = "Tools for browsing and manipulating docker registries";
+    longDescription = ''
+      Docker-ls is a set of CLI tools for browsing and manipulating docker registries.
+      In particular, docker-ls can handle authentication and display the sha256 content digests associated
+      with tags.
+    '';
+
+    homepage = "https://github.com/mayflower/docker-ls";
+    maintainers = with maintainers; [ ];
+    platforms = docker.meta.platforms;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile
new file mode 100644
index 000000000000..2c8125a46165
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org' do
+  gem 'docker-sync'
+end
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock
new file mode 100644
index 000000000000..4f14b77d0ef0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/Gemfile.lock
@@ -0,0 +1,29 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    backticks (1.0.2)
+    daemons (1.3.1)
+    docker-compose (1.1.10)
+      backticks (~> 1.0)
+    docker-sync (0.5.9)
+      daemons (~> 1.2, >= 1.2.3)
+      docker-compose (~> 1.1, >= 1.1.7)
+      dotenv (~> 2.1, >= 2.1.1)
+      gem_update_checker (~> 0.2.0, >= 0.2.0)
+      os
+      terminal-notifier (= 2.0.0)
+      thor (~> 0.20, >= 0.20.0)
+    dotenv (2.6.0)
+    gem_update_checker (0.2.0)
+    os (1.0.0)
+    terminal-notifier (2.0.0)
+    thor (0.20.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  docker-sync!
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/default.nix b/nixpkgs/pkgs/tools/misc/docker-sync/default.nix
new file mode 100644
index 000000000000..aa129c0a36db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/default.nix
@@ -0,0 +1,21 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "docker-sync";
+  gemdir = ./.;
+
+  inherit ruby;
+
+  exes = ["docker-sync"];
+
+  passthru.updateScript = bundlerUpdateScript "docker-sync";
+
+  meta = with lib; {
+    description = "Run your application at full speed while syncing your code for development";
+    homepage = "http://docker-sync.io";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    platforms = platforms.unix;
+    mainProgram = "docker-sync";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix b/nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix
new file mode 100644
index 000000000000..aef4d9928ab1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docker-sync/gemset.nix
@@ -0,0 +1,76 @@
+{
+  backticks = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vr28l9vckavnrb9pnqrhcmnk3wsvvpas8jjh165w2rzv3sdkws5";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  daemons = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l5gai3vd4g7aqff0k1mp41j9zcsvm2rbwmqn115a325k9r7pf4w";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  docker-compose = {
+    dependencies = ["backticks"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00v3y182rmpq34dl91iprvhc50vw8hysy2h7iy3ihmmm9pgg71gc";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  docker-sync = {
+    dependencies = ["daemons" "docker-compose" "dotenv" "gem_update_checker" "os" "terminal-notifier" "thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrlcggj7k8w30b76f23p64yx4wg7p7mq9lp6lsnh2ysq9n3cjqg";
+      type = "gem";
+    };
+    version = "0.5.9";
+  };
+  dotenv = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rgl2kqhnxqbjvi9brbvb52iaq1z8yi0pl0bawk4fm6kl9igxr8f";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  gem_update_checker = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ckbz4q3q59kkv138n0cmsyida0wg45pwscxzf5vshxcrxhmq3x7";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  os = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s401gvhqgs2r8hh43ia205mxsy1wc0ib4k76wzkdpspfcnfr1rk";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  terminal-notifier = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1slc0y8pjpw30hy21v8ypafi8r7z9jlj4bjbgz03b65b28i2n3bs";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/docui/default.nix b/nixpkgs/pkgs/tools/misc/docui/default.nix
new file mode 100644
index 000000000000..d226c2fc8f00
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/docui/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "docui";
+  version = "2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "skanehira";
+    repo = "docui";
+    rev = version;
+    hash = "sha256-tHv1caNGiWC9Dc/qR4ij9xGM1lotT0KyrpJpdBsHyks=";
+  };
+
+  vendorHash = "sha256-5xQ5MmGpyzVh4gXZAhCY16iVw8zbCMzMA5IOsPdn7b0=";
+
+  meta = with lib; {
+    description = "TUI Client for Docker";
+    homepage = "https://github.com/skanehira/docui";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aethelz ];
+    broken = stdenv.isDarwin;
+    mainProgram = "docui";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/doitlive/default.nix b/nixpkgs/pkgs/tools/misc/doitlive/default.nix
new file mode 100644
index 000000000000..9e1d83bb4d98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/doitlive/default.nix
@@ -0,0 +1,28 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "doitlive";
+  version = "5.0.0";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-jAoibszDpQJjiNCZDhX3fLniALOG7r9YqaYEySkmMM4=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ setuptools ];
+
+  propagatedBuildInputs = with python3Packages; [ click click-completion click-didyoumean ];
+
+  # disable tests (too many failures)
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Tool for live presentations in the terminal";
+    homepage = "https://github.com/sloria/doitlive";
+    changelog = "https://github.com/sloria/doitlive/blob/${version}/CHANGELOG.rst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mbode ];
+    mainProgram = "doitlive";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/domine/default.nix b/nixpkgs/pkgs/tools/misc/domine/default.nix
new file mode 100644
index 000000000000..a85275acab0e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/domine/default.nix
@@ -0,0 +1,16 @@
+{ buildDartApplication, fetchFromGitHub, lib }:
+
+buildDartApplication rec {
+  pname = "domine";
+  version = "nightly-2023-08-10";
+
+  src = fetchFromGitHub {
+    owner = "breitburg";
+    repo = pname;
+    rev = "d99d02b014d009b0201380a21ddaa57696dc77af";
+    sha256 = "038yfa22q7lzz85czmny3c1lkv8mjv4pq62cbmh054fqvgf3k3s4";
+  };
+
+  pubspecLock = lib.importJSON ./pubspec.lock.json;
+  meta.mainProgram = "domine";
+}
diff --git a/nixpkgs/pkgs/tools/misc/domine/pubspec.lock.json b/nixpkgs/pkgs/tools/misc/domine/pubspec.lock.json
new file mode 100644
index 000000000000..214f3f49b2d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/domine/pubspec.lock.json
@@ -0,0 +1,197 @@
+{
+  "packages": {
+    "args": {
+      "dependency": "direct main",
+      "description": {
+        "name": "args",
+        "sha256": "eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.2"
+    },
+    "async": {
+      "dependency": "transitive",
+      "description": {
+        "name": "async",
+        "sha256": "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.11.0"
+    },
+    "collection": {
+      "dependency": "transitive",
+      "description": {
+        "name": "collection",
+        "sha256": "f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.17.2"
+    },
+    "dart_openai": {
+      "dependency": "direct main",
+      "description": {
+        "name": "dart_openai",
+        "sha256": "707f6975454513f4a6197125b5a0fbe92ab7cbe4b8ea9111e529a09d7a3ce0c3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.0"
+    },
+    "dio": {
+      "dependency": "direct main",
+      "description": {
+        "name": "dio",
+        "sha256": "ce75a1b40947fea0a0e16ce73337122a86762e38b982e1ccb909daa3b9bc4197",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "5.3.2"
+    },
+    "dio_smart_retry": {
+      "dependency": "direct main",
+      "description": {
+        "name": "dio_smart_retry",
+        "sha256": "1a2d0cf73ab56bf5998b375cda2d51f45c77268e712e4073f232cdc7753a94b2",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "5.0.0"
+    },
+    "fetch_api": {
+      "dependency": "transitive",
+      "description": {
+        "name": "fetch_api",
+        "sha256": "7896632eda5af40c4459d673ad601df21d4c3ae6a45997e300a92ca63ec9fe4c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.1"
+    },
+    "fetch_client": {
+      "dependency": "transitive",
+      "description": {
+        "name": "fetch_client",
+        "sha256": "83c07b07a63526a43630572c72715707ca113a8aa3459efbc7b2d366b79402af",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.2"
+    },
+    "http": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http",
+        "sha256": "759d1a329847dd0f39226c688d3e06a6b8679668e350e2891a6474f8b4bb8525",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.0"
+    },
+    "http_parser": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http_parser",
+        "sha256": "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.2"
+    },
+    "js": {
+      "dependency": "transitive",
+      "description": {
+        "name": "js",
+        "sha256": "f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.7"
+    },
+    "lints": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "lints",
+        "sha256": "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.1"
+    },
+    "meta": {
+      "dependency": "transitive",
+      "description": {
+        "name": "meta",
+        "sha256": "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.9.1"
+    },
+    "path": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path",
+        "sha256": "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.8.3"
+    },
+    "source_span": {
+      "dependency": "transitive",
+      "description": {
+        "name": "source_span",
+        "sha256": "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.10.0"
+    },
+    "string_scanner": {
+      "dependency": "transitive",
+      "description": {
+        "name": "string_scanner",
+        "sha256": "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "term_glyph": {
+      "dependency": "transitive",
+      "description": {
+        "name": "term_glyph",
+        "sha256": "a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.1"
+    },
+    "tint": {
+      "dependency": "direct main",
+      "description": {
+        "name": "tint",
+        "sha256": "9652d9a589f4536d5e392cf790263d120474f15da3cf1bee7f1fdb31b4de5f46",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.1"
+    },
+    "typed_data": {
+      "dependency": "transitive",
+      "description": {
+        "name": "typed_data",
+        "sha256": "facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.2"
+    }
+  },
+  "sdks": {
+    "dart": ">=3.0.6 <4.0.0"
+  }
+}
diff --git a/nixpkgs/pkgs/tools/misc/dotacat/default.nix b/nixpkgs/pkgs/tools/misc/dotacat/default.nix
new file mode 100644
index 000000000000..2512ff20d8d5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dotacat/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitLab
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "dotacat";
+  version = "v0.3.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.scd31.com";
+    owner = "stephen";
+    repo = "dotacat";
+    rev = "f3b7e7816bed6b84123e066c57cf4003d77a85f1";
+    hash = "sha256-y+u9PO01W+IzBatGHZpgOD7cRKjdeuy4/VX7/V9cu3Q=";
+  };
+
+  cargoHash = "sha256-ilvsqwvfQejo453veSZ5VMP8XhL7NryrDh+rYJkXk30=";
+
+  meta = with lib; {
+    description = "Like lolcat, but fast";
+    homepage = "https://gitlab.scd31.com/stephen/dotacat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ traxys ];
+    mainProgram = "dotacat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dotter/default.nix b/nixpkgs/pkgs/tools/misc/dotter/default.nix
new file mode 100644
index 000000000000..bcabb2ef8aac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dotter/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, nix-update-script
+, rustPlatform
+, CoreServices
+, which
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dotter";
+  version = "0.13.1";
+
+  src = fetchFromGitHub {
+    owner = "SuperCuber";
+    repo = "dotter";
+    rev = "v${version}";
+    hash = "sha256-Xmdg5ITKWhL5AxTS7z4f9ecigQpBqna+kZclA+mDJhA=";
+  };
+
+  cargoHash = "sha256-W8khm9E5f/PROVJDAUr57nAiTEXV4a0fepzV00HoT8c=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  nativeCheckInputs = [ which ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A dotfile manager and templater written in rust 🦀";
+    homepage = "https://github.com/SuperCuber/dotter";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ linsui ];
+    mainProgram = "dotter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix b/nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix
new file mode 100644
index 000000000000..5f1e53f8105f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dpt-rp1-py/default.nix
@@ -0,0 +1,37 @@
+{ lib, python3Packages, fetchFromGitHub }:
+python3Packages.buildPythonApplication rec {
+  pname = "dpt-rp1-py";
+  version = "0.1.16";
+
+  src = fetchFromGitHub {
+    owner = "janten";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0zvf09b9rzpx5b0w81ziqd7v321hfhgsgvshdx23karj2hf75bvj";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = with python3Packages; [
+    anytree
+    fusepy
+    httpsig
+    pbkdf2
+    pyyaml
+    requests
+    setuptools
+    tqdm
+    urllib3
+    zeroconf
+  ];
+
+  pythonImportsCheck = [ "dptrp1" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/janten/dpt-rp1-py";
+    description = "Python script to manage Sony DPT-RP1 without Digital Paper App";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mt-caret ];
+    mainProgram = "dptrp1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dsq/default.nix b/nixpkgs/pkgs/tools/misc/dsq/default.nix
new file mode 100644
index 000000000000..9d05e567fb10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dsq/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, nix-update-script
+, testers
+, python3
+, curl
+, jq
+, p7zip
+, dsq
+}:
+
+buildGoModule rec {
+  pname = "dsq";
+  version = "0.23.0";
+
+  src = fetchFromGitHub {
+    owner = "multiprocessio";
+    repo = "dsq";
+    rev = "v${version}";
+    hash = "sha256-FZBJe+2y4HV3Pgeap4yvD0a8M/j+6pAJEFpoQVVE1ec=";
+  };
+
+  vendorHash = "sha256-MbBR+OC1OGhZZGcZqc+Jzmabdc5ZfFEwzqP5YMrj6mY=";
+
+  ldflags = [ "-X" "main.Version=${version}" ];
+
+  nativeCheckInputs = [ python3 curl jq p7zip ];
+
+  preCheck = ''
+    substituteInPlace scripts/test.py \
+      --replace 'dsq latest' 'dsq ${version}'
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    7z e testdata/taxi.csv.7z
+    cp "$GOPATH/bin/dsq" .
+    python3 scripts/test.py
+
+    runHook postCheck
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+
+    tests.version = testers.testVersion { package = dsq; };
+  };
+
+  meta = with lib; {
+    mainProgram = "dsq";
+    description = "Commandline tool for running SQL queries against JSON, CSV, Excel, Parquet, and more";
+    homepage = "https://github.com/multiprocessio/dsq";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ liff ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dtach/default.nix b/nixpkgs/pkgs/tools/misc/dtach/default.nix
new file mode 100644
index 000000000000..226c7335f264
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dtach/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "dtach";
+  version = "0.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/dtach/dtach/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1wwj2hlngi8qn2pisvhyfxxs8gyqjlgrrv5lz91w8ly54dlzvs9j";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp dtach $out/bin/dtach
+  '';
+
+  meta = {
+    homepage = "https://dtach.sourceforge.net/";
+    description = "A program that emulates the detach feature of screen";
+
+    longDescription = ''
+      dtach is a tiny program that emulates the detach feature of
+      screen, allowing you to run a program in an environment that is
+      protected from the controlling terminal and attach to it later.
+      dtach does not keep track of the contents of the screen, and
+      thus works best with programs that know how to redraw
+      themselves.
+    '';
+
+    license = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.unix;
+    maintainers = [ ];
+    mainProgram = "dtach";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dtool/default.nix b/nixpkgs/pkgs/tools/misc/dtool/default.nix
new file mode 100644
index 000000000000..9cf22a9da39f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dtool/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dtool";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "guoxbin";
+    repo = "dtool";
+    rev = "v${version}";
+    hash = "sha256-m4H+ANwEbK6vGW3oIVZqnqvMiAKxNJf2TLIGh/G6AU4=";
+  };
+
+  cargoHash = "sha256-r8r3f4yKMQgjtB3j4qE7cqQL18nIqAGPO5RsFErqh2c=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  checkType = "debug";
+
+  meta = with lib; {
+    description = "A command-line tool collection to assist development written in RUST";
+    homepage = "https://github.com/guoxbin/dtool";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ linuxissuper ];
+    mainProgram = "dtool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dua/default.nix b/nixpkgs/pkgs/tools/misc/dua/default.nix
new file mode 100644
index 000000000000..22ae9a7a6431
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dua/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dua";
+  version = "2.29.0";
+
+  src = fetchFromGitHub {
+    owner = "Byron";
+    repo = "dua-cli";
+    rev = "v${version}";
+    hash = "sha256-rO9k1/HOwVJF/QCT2sZy4L0Mv26CiUj9Zafliffj68A=";
+    # Remove unicode file names which leads to different checksums on HFS+
+    # vs. other filesystems because of unicode normalisation.
+    postFetch = ''
+      rm -r $out/tests/fixtures
+    '';
+  };
+
+  cargoHash = "sha256-qn1QDiYHcygomOFwFEy00wsMykrQ9/84Ed4nAUTlA1k=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Foundation
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool to conveniently learn about the disk usage of directories";
+    homepage = "https://github.com/Byron/dua-cli";
+    changelog = "https://github.com/Byron/dua-cli/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ figsoda killercup ];
+    mainProgram = "dua";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/duc/default.nix b/nixpkgs/pkgs/tools/misc/duc/default.nix
new file mode 100644
index 000000000000..0501b681aa3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/duc/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, tokyocabinet, ncurses
+, cairo ? null, pango ? null
+, enableCairo ? stdenv.isLinux
+}:
+
+assert enableCairo -> cairo != null && pango != null;
+
+stdenv.mkDerivation rec {
+  pname = "duc";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "zevv";
+    repo = "duc";
+    rev = version;
+    sha256 = "sha256-ZLNsyp82UnsveEfDKzH8WfRh/Y/PQlXq8Ma+jIZl9Gk=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ tokyocabinet ncurses ] ++
+    lib.optionals enableCairo [ cairo pango ];
+
+  configureFlags =
+    lib.optionals (!enableCairo) [ "--disable-x11" "--disable-cairo" ];
+
+  meta = with lib; {
+    homepage = "http://duc.zevv.nl/";
+    description = "Collection of tools for inspecting and visualizing disk usage";
+    license = licenses.gpl2;
+
+    platforms = platforms.all;
+    maintainers = [ ];
+    mainProgram = "duc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/duf/default.nix b/nixpkgs/pkgs/tools/misc/duf/default.nix
new file mode 100644
index 000000000000..5c2ccb5717fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/duf/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, buildGoModule, installShellFiles }:
+
+buildGoModule rec {
+  pname = "duf";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "muesli";
+    repo = "duf";
+    rev = "v${version}";
+    sha256 = "sha256-bVuqX88KY+ky+fd1FU9GWP78jQc4fRDk9yRSeIesHyI=";
+  };
+
+  vendorHash = "sha256-oihi7E67VQmym9U1gdD802AYxWRrSowhzBiKg0CBDPc=";
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage duf.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/muesli/duf/";
+    description = "Disk Usage/Free Utility";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda penguwin ];
+    mainProgram = "duf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dumptorrent/default.nix b/nixpkgs/pkgs/tools/misc/dumptorrent/default.nix
new file mode 100644
index 000000000000..194d40e1c1cc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dumptorrent/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+    pname = "dumptorrent";
+    version = "1.2";
+
+    src = fetchurl {
+      url = "mirror://sourceforge/dumptorrent/dumptorrent-${version}.tar.gz";
+      sha256 = "073h03bmpfdy15qh37lvppayld2747i4acpyk0pm5nf2raiak0zm";
+    };
+
+    postPatch = ''
+      substituteInPlace Makefile \
+        --replace "gcc" "$CC"
+    '';
+
+    installPhase = ''
+      mkdir -p $out/bin
+      cp ./dumptorrent $out/bin
+    '';
+
+    meta = with lib; {
+      description = "Dump .torrent file information";
+      homepage = "https://sourceforge.net/projects/dumptorrent/";
+      license = licenses.gpl2;
+      maintainers = [ maintainers.zohl ];
+      platforms = platforms.all;
+      mainProgram = "dumptorrent";
+    };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dupd/default.nix b/nixpkgs/pkgs/tools/misc/dupd/default.nix
new file mode 100644
index 000000000000..cf5ab77e7d47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dupd/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, perl, which
+, openssl, sqlite }:
+
+# Instead of writing directly into $HOME, we change the default db location
+# from $HOME/.dupd_sqlite to $HOME/.cache/dupd.sqlite3
+
+stdenv.mkDerivation rec {
+  pname = "dupd";
+  version = "1.7.3";
+
+  src = fetchFromGitHub {
+    owner = "jvirkki";
+    repo  = "dupd";
+    rev   = version;
+    sha256 = "sha256-ZiQroJ5fjBCIjU+M8KRA0N3Mrg9h0NVtfYUIS4cYyhw=";
+  };
+
+  postPatch = ''
+    patchShebangs tests
+
+    # tests need HOME to write the database
+    export HOME=$TMPDIR
+
+    mkdir -p $HOME/.cache
+
+    for f in man/dupd man/dupd.1 src/main.c tests/test.56 tests/test.57 ; do
+      substituteInPlace $f --replace .dupd_sqlite .cache/dupd.sqlite3
+    done
+  '';
+
+  buildInputs = [ openssl sqlite ];
+
+  nativeBuildInputs = [ perl which ];
+
+  makeFlags = [
+    "INSTALL_PREFIX=$(out)"
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "CLI utility to find duplicate files";
+    homepage = "http://www.virkki.com/dupd";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "dupd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dutree/default.nix b/nixpkgs/pkgs/tools/misc/dutree/default.nix
new file mode 100644
index 000000000000..fe47997296e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dutree/default.nix
@@ -0,0 +1,28 @@
+{ fetchFromGitHub, lib, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "dutree";
+  version = "0.2.18";
+
+  src = fetchFromGitHub {
+    owner = "nachoparker";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "17lm8jd07bi499mywg2iq669im34j4x4yhc8a3adxn12f8j0dfg7";
+    # test directory has files with unicode names which causes hash mismatches
+    # It is also not used by any tests or parts of build process
+    postFetch = ''
+      rm -r $out/test
+    '';
+  };
+
+  cargoSha256 = "0gg1w0xx36aswfm0y53nqwwz7zds25ysmklbrc8v2r91j74bhkzw";
+
+  meta = with lib; {
+    description = "A tool to analyze file system usage written in Rust";
+    homepage = "https://github.com/nachoparker/dutree";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "dutree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dvtm/default.nix b/nixpkgs/pkgs/tools/misc/dvtm/default.nix
new file mode 100644
index 000000000000..ea5a051c62b1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dvtm/default.nix
@@ -0,0 +1,20 @@
+{callPackage, fetchurl}:
+callPackage ./dvtm.nix rec {
+  pname = "dvtm";
+  version = "0.15";
+
+  src = fetchurl {
+    url = "https://www.brain-dump.org/projects/dvtm/dvtm-${version}.tar.gz";
+    sha256 = "0475w514b7i3gxk6khy8pfj2gx9l7lv2pwacmq92zn1abv01a84g";
+  };
+
+  patches = [
+    # https://github.com/martanne/dvtm/pull/69
+    # Use self-pipe instead of signal blocking fixes issues on darwin.
+    (fetchurl {
+      url = "https://github.com/martanne/dvtm/commit/1f1ed664d64603f3f1ce1388571227dc723901b2.patch";
+      sha256 = "1cby8x3ckvhzqa8yxlfrwzgm8wk7yz84kr9psdjr7xwpnca1cqrd";
+    })
+  ];
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix b/nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix
new file mode 100644
index 000000000000..feb9c7a92f82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dvtm/dvtm.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, ncurses, customConfig ? null, pname, version, src, patches ? [] }:
+stdenv.mkDerivation {
+
+  inherit pname version src patches;
+
+  CFLAGS = lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
+
+  postPatch = lib.optionalString (customConfig != null) ''
+    cp ${builtins.toFile "config.h" customConfig} ./config.h
+  '';
+
+  nativeBuildInputs = [ ncurses ];
+  buildInputs = [ ncurses ];
+
+  prePatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/share/terminfo $out/share/terminfo
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Dynamic virtual terminal manager";
+    homepage = "http://www.brain-dump.org/projects/dvtm";
+    license = licenses.mit;
+    maintainers = [ maintainers.vrthra ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dvtm/unstable.nix b/nixpkgs/pkgs/tools/misc/dvtm/unstable.nix
new file mode 100644
index 000000000000..4008407f28fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dvtm/unstable.nix
@@ -0,0 +1,27 @@
+{ callPackage, fetchpatch, fetchzip }:
+
+let
+  rev = "7bcf43f8dbd5c4a67ec573a1248114caa75fa3c2";
+in
+callPackage ./dvtm.nix {
+  pname = "dvtm-unstable";
+  version = "unstable-2021-03-09";
+
+  src = fetchzip {
+    urls = [
+      "https://github.com/martanne/dvtm/archive/${rev}.tar.gz"
+      "https://git.sr.ht/~martanne/dvtm/archive/${rev}.tar.gz"
+    ];
+    hash = "sha256-UtkNsW0mvLfbPSAIIZ1yvX9xzIDtiBeXCjhN2R8JhDc=";
+  };
+
+  patches = [
+    # https://github.com/martanne/dvtm/pull/69
+    # Use self-pipe instead of signal blocking fixes issues on darwin.
+    (fetchpatch {
+      name = "use-self-pipe-fix-darwin";
+      url = "https://github.com/martanne/dvtm/commit/1f1ed664d64603f3f1ce1388571227dc723901b2.patch";
+      sha256 = "14j3kks7b1v6qq12442v1da3h7khp02rp0vi0qrz0rfgkg1zilpb";
+    })
+  ];
+}
diff --git a/nixpkgs/pkgs/tools/misc/dwarf2json/default.nix b/nixpkgs/pkgs/tools/misc/dwarf2json/default.nix
new file mode 100644
index 000000000000..3bd0fa4b94a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dwarf2json/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "dwarf2json";
+  version = "unstable-2021-04-15";
+
+  src = fetchFromGitHub {
+    owner = "volatilityfoundation";
+    repo = "dwarf2json";
+    rev = "e8a1ce85dc33bf2039adc7f8a5f47f3016153720";
+    sha256 = "sha256-hnS00glAcj78mZp5as63CsEn+dcr+GNEkz8iC3KM0h0=";
+  };
+
+  vendorHash = "sha256-tgs0l+sYdAxMHwVTew++keNpDyrHmevpmOBVIiuL+34=";
+
+  meta = with lib; {
+    homepage = "https://github.com/volatilityfoundation/dwarf2json";
+    description = "Convert ELF/DWARF symbol and type information into vol3's intermediate JSON";
+    license = licenses.vol-sl;
+    maintainers = with maintainers; [ arkivm ];
+    mainProgram = "dwarf2json";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dwt1-shell-color-scripts/default.nix b/nixpkgs/pkgs/tools/misc/dwt1-shell-color-scripts/default.nix
new file mode 100644
index 000000000000..e7c7287b5311
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dwt1-shell-color-scripts/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitLab
+, installShellFiles
+}:
+
+stdenvNoCC.mkDerivation {
+  pname = "dwt1-shell-color-scripts";
+  version = "unstable-2023-03-27";
+
+  src = fetchFromGitLab {
+    owner = "dwt1";
+    repo = "shell-color-scripts";
+    rev = "576735cf656ece1bfd314e617b91c0e9d486d262";
+    hash = "sha256-1iDcUv6uVq5LzFgZo36RRKqAzKoYKZW/MnlbneayvCY=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = ''
+    patchShebangs ./colorscript.sh
+    patchShebangs ./colorscripts
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/shell-color-scripts
+    install -Dm755 colorscript.sh $out/bin/colorscript
+    cp -r colorscripts $out/share/shell-color-scripts/colorscripts
+
+    installManPage colorscript.1
+    installShellCompletion --fish completions/colorscript.fish
+    installShellCompletion --zsh completions/_colorscript
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/bin/colorscript \
+      --replace "/opt/shell-color-scripts/colorscripts" \
+                "$out/share/shell-color-scripts/colorscripts"
+  '';
+
+  meta = {
+    homepage = "https://gitlab.com/dwt1/shell-color-scripts";
+    description = "A collection of shell color scripts collected by dt (Derek Taylor)";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ ];
+    platforms = lib.platforms.all;
+    mainProgram = "colorscript";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix b/nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix
new file mode 100644
index 000000000000..0c04f70f26f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/dynamic-colors/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "dynamic-colors";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner  = "peterhoeg";
+    repo   = "dynamic-colors";
+    rev    = "v${version}";
+    sha256 = "sha256-jSdwq9WwYZP8MK6z7zJa0q93xfanr6iuvAt8YQkQxxE=";
+  };
+
+  PREFIX = placeholder "out";
+
+  postPatch = ''
+    substituteInPlace bin/dynamic-colors \
+      --replace /usr/share/dynamic-colors $out/share/dynamic-colors
+  '';
+
+  meta = with lib; {
+    description = "Change terminal colors on the fly";
+    homepage    = "https://github.com/peterhoeg/dynamic-colors";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms   = platforms.unix;
+    mainProgram = "dynamic-colors";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ea/default.nix b/nixpkgs/pkgs/tools/misc/ea/default.nix
new file mode 100644
index 000000000000..d45f3b431dcd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ea/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, rustPlatform
+, installShellFiles
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ea";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "dduan";
+    repo = "ea";
+    rev = version;
+    hash = "sha256-VXSSe5d7VO3LfjumzN9a7rrKRedOtOzTdLVQWgV1ED8=";
+  };
+
+  cargoPatches = [
+    # https://github.com/dduan/ea/pull/64
+    (fetchpatch {
+      name = "update-guard.patch";
+      url = "https://github.com/dduan/ea/commit/068aa36d7a472c7a4bac855f2404e7094dec7d58.patch";
+      hash = "sha256-iK3fjB6zSDqe0yMUIFjP1nEFLYLFg7dy6+b0T6mC1GA=";
+    })
+  ];
+
+  cargoHash = "sha256-/MkLWAbEr14CYdqSwJP1vNYxK7pAmMLdhiV61UQEbME=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    libiconv
+  ];
+
+  postInstall = ''
+    installManPage docs/ea.1
+  '';
+
+  meta = with lib; {
+    description = "Makes file paths from CLI output actionable";
+    homepage = "https://github.com/dduan/ea";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ deejayem ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/easeprobe/default.nix b/nixpkgs/pkgs/tools/misc/easeprobe/default.nix
new file mode 100644
index 000000000000..70181956339c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/easeprobe/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "easeprobe";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "megaease";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vdbzDwFpCYVgH9T8e62+1hnMyWsWrT7e6WPaAlBc2H0=";
+  };
+
+  vendorHash = "sha256-ZB6q8XvDVSF5/kx2Avq0PYBkYqSoMD6YHhuXRrotFgk=";
+
+  subPackages = [ "cmd/easeprobe" ];
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-extldflags -static"
+    "-X github.com/megaease/easeprobe/global.Ver=${version}"
+    "-X github.com/megaease/easeprobe/pkg/version.REPO=megaease/easeprobe"
+  ];
+
+  meta = with lib; {
+    description = "A simple, standalone, and lightweight tool that can do health/status checking, written in Go";
+    homepage = "https://github.com/megaease/easeprobe";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "easeprobe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/edid-decode/default.nix b/nixpkgs/pkgs/tools/misc/edid-decode/default.nix
new file mode 100644
index 000000000000..f6bcff31a00f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/edid-decode/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchgit
+, unstableGitUpdater
+}:
+
+stdenv.mkDerivation {
+  pname = "edid-decode";
+  version = "unstable-2024-04-02";
+
+  outputs = [
+    "out"
+    "man"
+  ];
+
+  src = fetchgit {
+    url = "git://linuxtv.org/edid-decode.git";
+    rev = "3d635499e4aca3319f0796ba787213c981c5a770";
+    hash = "sha256-bqzO39YM/3h9p37xaGJAw9xERgWOD+4yqO/XQiq/QqM=";
+  };
+
+  preBuild = ''
+    export DESTDIR=$out
+    export bindir=/bin
+    export mandir=/share/man
+  '';
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    description = "EDID decoder and conformance tester";
+    homepage = "https://git.linuxtv.org/edid-decode.git";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ Madouura ];
+    platforms = platforms.all;
+    mainProgram = "edid-decode";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/edid-generator/default.nix b/nixpkgs/pkgs/tools/misc/edid-generator/default.nix
new file mode 100644
index 000000000000..fc7f01226972
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/edid-generator/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, dos2unix
+, edid-decode
+, hexdump
+, zsh
+}:
+
+# Usage:
+#   hardware.firmware = [(edid-generator.overrideAttrs {
+#     clean = true;
+#     modelines = ''
+#       Modeline "PG278Q_60"      241.50   2560 2608 2640 2720   1440 1443 1448 1481   -hsync +vsync
+#       Modeline "PG278Q_120"     497.75   2560 2608 2640 2720   1440 1443 1448 1525   +hsync -vsync
+#       Modeline "U2711_60"       241.50   2560 2600 2632 2720   1440 1443 1448 1481   -hsync +vsync
+#     '';
+#   })];
+
+stdenv.mkDerivation {
+  pname = "edid-generator";
+  version = "master-2023-11-20";
+
+  # so `hardware.firmware` doesn't compress it
+  compressFirmware = false;
+
+  src = fetchFromGitHub {
+    owner = "akatrevorjay";
+    repo = "edid-generator";
+    rev = "476a016d8b488df749bf6d6efbf7b9fbfb2e3cb8";
+    sha256 = "sha256-UGxze273VB5cQDWrv9X/Lam6WbOu9U3bro8GcVbEvws=";
+  };
+
+  nativeBuildInputs = [ dos2unix edid-decode hexdump zsh ];
+
+  postPatch = ''
+    patchShebangs modeline2edid
+  '';
+
+  passAsFile = [ "modelines" ];
+  clean = false;
+  modelines = "";
+
+  configurePhase = ''
+    test "$clean" != 1 || rm *x*.S
+    ./modeline2edid - <"$modelinesPath"
+
+    for file in *.S ; do
+      echo "--- generated file: $file"
+      cat "$file"
+    done
+    make clean
+  '';
+
+  buildPhase = ''
+    make all
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    for file in *.bin ; do
+      echo "validating $file"
+      edid-decode <"$file"
+    done
+  '';
+
+  installPhase = ''
+    install -Dm 444 *.bin -t "$out/lib/firmware/edid"
+  '';
+
+  meta = {
+    description = "Hackerswork to generate an EDID blob from given Xorg Modelines";
+    homepage = "https://github.com/akatrevorjay/edid-generator";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ flokli nazarewk ];
+    platforms = lib.platforms.all;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/edid-generator.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/edir/default.nix b/nixpkgs/pkgs/tools/misc/edir/default.nix
new file mode 100644
index 000000000000..13cd4ed1c737
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/edir/default.nix
@@ -0,0 +1,29 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "edir";
+  version = "2.29";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-5b86/M8xqzwWMCRtsH1qwmooyfOhORgXgctRjzQEmlU=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    platformdirs
+  ];
+
+  meta = with lib; {
+    description = "Program to rename and remove files and directories using your editor";
+    homepage = "https://github.com/bulletmark/edir";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ guyonvarch ];
+    platforms = platforms.all;
+    mainProgram = "edir";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/edk2-uefi-shell/default.nix b/nixpkgs/pkgs/tools/misc/edk2-uefi-shell/default.nix
new file mode 100644
index 000000000000..7547f9b3e476
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/edk2-uefi-shell/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, edk2
+, llvmPackages
+, util-linux
+, nasm
+, python3
+}:
+edk2.mkDerivation "ShellPkg/ShellPkg.dsc" (finalAttrs: {
+  pname = "edk2-uefi-shell";
+  inherit (edk2) version;
+
+  nativeBuildInputs = [ util-linux nasm python3 ]
+    ++ lib.optionals stdenv.cc.isClang [ llvmPackages.bintools llvmPackages.llvm ];
+  strictDeps = true;
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.cc.isClang [ "-fno-pic" "-Qunused-arguments" ]);
+
+  # Set explicitly to use Python 3 from nixpkgs. Otherwise, the build system will detect and try to
+  # use `/usr/bin/python3` on Darwin when sandboxing is disabled.
+  PYTHON_COMMAND = "${lib.getBin python3}/bin/python3";
+
+  # We only have a .efi file in $out which shouldn't be patched or stripped
+  dontPatchELF = true;
+  dontStrip = true;
+
+  # GUID hardcoded to match ShellPkg.dsc
+  installPhase = ''
+    runHook preInstall
+    install -D -m0644 Build/Shell/RELEASE*/*/Shell_EA4BB293-2D7F-4456-A681-1F22F42CD0BC.efi $out/shell.efi
+    runHook postInstall
+  '';
+
+  passthru.efi = "${finalAttrs.finalPackage}/shell.efi";
+
+  meta = {
+    inherit (edk2.meta) license platforms;
+    description = "UEFI Shell from Tianocore EFI development kit";
+    homepage = "https://github.com/tianocore/tianocore.github.io/wiki/ShellPkg";
+    maintainers = with lib.maintainers; [ LunNova ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/eget/default.nix b/nixpkgs/pkgs/tools/misc/eget/default.nix
new file mode 100644
index 000000000000..1bf2b7f10110
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eget/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, pandoc
+, installShellFiles
+, nix-update-script
+, testers
+, eget
+}:
+
+buildGoModule rec {
+  pname = "eget";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "zyedidia";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-OOqfZ2uS3sYBH9xrlQN1iSNdNE9RGi6qiDXfPgf2aB0=";
+  };
+
+  vendorHash = "sha256-A3lZtV0pXh4KxINl413xGbw2Pz7OzvIQiFSRubH428c=";
+
+  ldflags = [ "-s" "-w" "-X main.Version=v${version}" ];
+
+  nativeBuildInputs = [ pandoc installShellFiles ];
+
+  postInstall = ''
+    pandoc man/eget.md -s -t man -o eget.1
+    installManPage eget.1
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      package = eget;
+      command = "eget -v";
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Easily install prebuilt binaries from GitHub";
+    homepage = "https://github.com/zyedidia/eget";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zendo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ego/default.nix b/nixpkgs/pkgs/tools/misc/ego/default.nix
new file mode 100644
index 000000000000..67a71a196bd7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ego/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeBinaryWrapper
+, acl
+, xorg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ego";
+  version = "1.1.7";
+
+  src = fetchFromGitHub {
+    owner = "intgr";
+    repo = "ego";
+    rev = version;
+    hash = "sha256-613RM7Ldye0wHAH3VMhzhyT5WVTybph3gS/WNMrsgGI=";
+  };
+
+  buildInputs = [ acl ];
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  cargoHash = "sha256-3leKejQ8kxamjwQPH1vg2I1CYc3r8k3pYfTWpOkqq8I=";
+
+  # requires access to /root
+  checkFlags = [
+    "--skip tests::test_check_user_homedir"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/ego --prefix PATH : ${lib.makeBinPath [ xorg.xhost ]}
+  '';
+
+  meta = {
+    description = "Run Linux desktop applications under a different local user";
+    homepage = "https://github.com/intgr/ego";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ dit7ya ];
+    mainProgram = "ego";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/elfcat/default.nix b/nixpkgs/pkgs/tools/misc/elfcat/default.nix
new file mode 100644
index 000000000000..2344eb717547
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/elfcat/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "elfcat";
+  version = "0.1.8";
+
+  src = fetchFromGitHub {
+    owner = "ruslashev";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-NzFKNCCPWBj/fhaEJF34nyeyvLMeQwIcQgTlYc6mgYo=";
+  };
+
+  cargoHash = "sha256-Dc+SuLwbLFcNSr9RiNSc7dgisBOvOUEIDR8dFAkC/O0=";
+
+  meta = with lib; {
+    description = "ELF visualizer, generates HTML files from ELF binaries";
+    homepage = "https://github.com/ruslashev/elfcat";
+    license = licenses.zlib;
+    maintainers = with maintainers; [ moni ];
+    mainProgram = "elfcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/eludris/default.nix b/nixpkgs/pkgs/tools/misc/eludris/default.nix
new file mode 100644
index 000000000000..e3fc67fcacb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eludris/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, openssl
+, pkg-config
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "eludris";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "eludris";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-TVYgimkGUSITB3IaMlMd10PWomqyJRvONvJwiW85U4M=";
+  };
+
+  cargoHash = "sha256-5B9D19jFh5+eNTjiho22CFsn51nmwLry08zSDWvs1OU=";
+
+  cargoBuildFlags = [ "-p eludris" ];
+  cargoTestFlags = [ "-p eludris" ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "A simple CLI to help you with setting up and managing your Eludris instance";
+    mainProgram = "eludris";
+    homepage = "https://github.com/eludris/eludris/tree/main/cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ooliver1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/empty/0.6-Makefile.patch b/nixpkgs/pkgs/tools/misc/empty/0.6-Makefile.patch
new file mode 100644
index 000000000000..6fb494cdf54c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/empty/0.6-Makefile.patch
@@ -0,0 +1,13 @@
+diff --git a/Makefile b/Makefile
+index 1fe4c41..2c69558 100644
+--- a/Makefile
++++ b/Makefile
+@@ -16,7 +16,7 @@ LIBS =	-lutil
+ PREFIX = /usr/local
+ 
+ all:
+-	${CC} ${CFLAGS} -Wall ${LIBS} -o empty empty.c
++	${CC} ${CFLAGS} -Wall -o empty empty.c ${LIBS}
+ 
+ FreeBSD:	all
+ NetBSD:		all
diff --git a/nixpkgs/pkgs/tools/misc/empty/default.nix b/nixpkgs/pkgs/tools/misc/empty/default.nix
new file mode 100644
index 000000000000..29dfa606dd44
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/empty/default.nix
@@ -0,0 +1,47 @@
+{ fetchzip, lib, stdenv, which }:
+
+stdenv.mkDerivation rec {
+  pname = "empty";
+  version = "0.6.21b";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/${pname}/${pname}/${pname}-${version}.tgz";
+    sha256 = "1rkixh2byr70pdxrwr4lj1ckh191rjny1m5xbjsa7nqw1fw6c2xs";
+    stripRoot = false;
+  };
+
+  patches = [
+    ./0.6-Makefile.patch
+  ];
+
+  nativeBuildInputs = [ which ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postPatch = ''
+    rm empty
+  '';
+
+  meta = with lib; {
+    homepage = "https://empty.sourceforge.net";
+    description = "A simple tool to automate interactive terminal applications";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    longDescription = ''
+      The empty utility provides an interface to execute and/or interact with
+      processes under pseudo-terminal sessions (PTYs). This tool is definitely
+      useful in programming of shell scripts designed to communicate with
+      interactive programs like telnet, ssh, ftp, etc. In some cases empty can
+      be the simplest replacement for TCL/expect or other similar programming
+      tools because empty:
+
+      - can be easily invoked directly from shell prompt or script
+      - does not use TCL, Perl, PHP, Python or anything else as an underlying language
+      - is written entirely in C
+      - has small and simple source code
+      - can easily be ported to almost all UNIX-like systems
+    '';
+    maintainers = [ maintainers.djwf ];
+    mainProgram = "empty";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/emv/default.nix b/nixpkgs/pkgs/tools/misc/emv/default.nix
new file mode 100644
index 000000000000..a317805e463c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/emv/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "emv";
+  version = "1.95";
+
+  src = fetchurl {
+    url = "http://www.i0i0.de/toolchest/emv";
+    sha256 = "7e0e12afa45ef5ed8025e5f2c6deea0ff5f512644a721f7b1b95b63406a8f7ce";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -pv $out/bin
+    cp $src $out/bin/emv
+    chmod +x $out/bin/emv
+  '';
+
+  meta = {
+    homepage = "http://www.i0i0.de/toolchest/emv";
+    description = "Editor Move: Rename files with your favourite text editor";
+    license = lib.licenses.publicDomain;
+    platforms = lib.platforms.unix;
+    mainProgram = "emv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/encpipe/default.nix b/nixpkgs/pkgs/tools/misc/encpipe/default.nix
new file mode 100644
index 000000000000..f3ab870b0f05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/encpipe/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "encpipe";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "jedisct1";
+    repo = "encpipe";
+    rev = version;
+    hash = "sha256-YlEKSWzZuQyDi0mbwJh9Dfn4gKiOeqihSHPt4yY6YdY=";
+    fetchSubmodules = true;
+  };
+
+  installFlags = [
+    "PREFIX=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "An encryption tool";
+    homepage = "https://github.com/jedisct1/encpipe";
+    license = licenses.isc;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "encpipe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/enjarify/default.nix b/nixpkgs/pkgs/tools/misc/enjarify/default.nix
new file mode 100644
index 000000000000..0a146dc02f32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/enjarify/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, python3, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "enjarify";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-VDBC5n2jWLNJsilX+PV1smL5JeBDj23jYFRwdObXwYs=";
+  };
+
+  installPhase = ''
+    pypath="$out/${python3.sitePackages}"
+    mkdir -p $out/bin $pypath
+    mv enjarify $pypath
+
+    cat << EOF > $out/bin/enjarify
+    #!${runtimeShell}
+    export PYTHONPATH=$pypath
+    exec ${python3.interpreter} -O -m enjarify.main "\$@"
+    EOF
+    chmod +x $out/bin/enjarify
+  '';
+
+  buildInputs = [ ];
+
+  meta = with lib; {
+    description = "Tool for translating Dalvik bytecode to equivalent Java bytecode";
+    homepage = "https://github.com/google/enjarify/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    mainProgram = "enjarify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ent/default.nix b/nixpkgs/pkgs/tools/misc/ent/default.nix
new file mode 100644
index 000000000000..3152e00503bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ent/default.nix
@@ -0,0 +1,32 @@
+{lib, stdenv, fetchurl, unzip}:
+
+stdenv.mkDerivation {
+  pname = "ent";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://www.fourmilab.ch/random/random.zip";
+    sha256 = "1v39jlj3lzr5f99avzs2j2z6anqqd64bzm1pdf6q84a5n8nxckn1";
+  };
+
+  # Work around the "unpacker appears to have produced no directories"
+  # case that happens when the archive doesn't have a subdirectory.
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ unzip ];
+
+  buildFlags = lib.optional stdenv.cc.isClang "CC=clang";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ent $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Pseudorandom Number Sequence Test Program";
+    homepage = "https://www.fourmilab.ch/random/";
+    platforms = platforms.all;
+    license = licenses.publicDomain;
+    mainProgram = "ent";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/entr/default.nix b/nixpkgs/pkgs/tools/misc/entr/default.nix
new file mode 100644
index 000000000000..6d00d4128a51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/entr/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "entr";
+  version = "5.5";
+
+  src = fetchurl {
+    url = "https://eradman.com/entrproject/code/${pname}-${version}.tar.gz";
+    hash = "sha256-EowM4u/qWua9P9M8PNMeFh6wwCYJ2HF6036VtBZW5SY=";
+  };
+
+  postPatch = ''
+    substituteInPlace entr.c --replace /bin/cat ${coreutils}/bin/cat
+    substituteInPlace entr.1 --replace /bin/cat cat
+  '';
+  dontAddPrefix = true;
+  doCheck = true;
+  checkTarget = "test";
+  installFlags = [ "PREFIX=$(out)" ];
+
+  TARGET_OS = stdenv.hostPlatform.uname.system;
+
+  meta = with lib; {
+    homepage = "https://eradman.com/entrproject/";
+    description = "Run arbitrary commands when files change";
+    changelog = "https://github.com/eradman/entr/raw/${version}/NEWS";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub synthetica ];
+    mainProgram = "entr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/enumer/default.nix b/nixpkgs/pkgs/tools/misc/enumer/default.nix
new file mode 100644
index 000000000000..c10cfdccd91f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/enumer/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "enumer";
+  version = "1.5.9";
+
+  src = fetchFromGitHub {
+    owner = "dmarkham";
+    repo = "enumer";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-NYL36GBogFM48IgIWhFa1OLZNUeEi0ppS6KXybnPQks=";
+  };
+
+  vendorHash = "sha256-CJCay24FlzDmLjfZ1VBxih0f+bgBNu+Xn57QgWT13TA=";
+
+  meta = with lib; {
+    description = "Go tool to auto generate methods for enums";
+    homepage = "https://github.com/dmarkham/enumer";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ hexa ];
+    mainProgram = "enumer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/envchain/default.nix b/nixpkgs/pkgs/tools/misc/envchain/default.nix
new file mode 100644
index 000000000000..643eb86cb576
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/envchain/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, libedit, libsecret, ncurses, pkg-config, readline, Security }:
+
+stdenv.mkDerivation rec {
+  pname = "envchain";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "sorah";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QUy38kJzMbYOyT86as4/yq2ctcszSnB8a3eVWxgd4Fo=";
+  };
+
+  postPatch = ''
+    sed -i -e "s|-ltermcap|-lncurses|" Makefile
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libsecret readline ]
+    ++ lib.optionals stdenv.isDarwin [ libedit ncurses Security ];
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  meta = with lib; {
+    description = "Set environment variables with macOS keychain or D-Bus secret service";
+    homepage = "https://github.com/sorah/envchain";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+    mainProgram = "envchain";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/envsubst/default.nix b/nixpkgs/pkgs/tools/misc/envsubst/default.nix
new file mode 100644
index 000000000000..8cd59df31b1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/envsubst/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "envsubst";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "a8m";
+    repo = "envsubst";
+    rev = "v${version}";
+    sha256 = "sha256-gfzqf/CXSwGXBK5VHJnepFZ1wB3WElpEp6ra9JI4WtY=";
+  };
+
+  vendorHash = "sha256-L0MbABgUniuI5NXc4ffBUsQRI716W/FiH38bGthpXzI=";
+
+  postInstall = ''
+    install -Dm444 -t $out/share/doc/${pname} LICENSE *.md
+  '';
+
+  meta = with lib; {
+    description = "Environment variables substitution for Go";
+    homepage = "https://github.com/a8m/envsubst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nicknovitski ];
+    mainProgram = "envsubst";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/eot-utilities/default.nix b/nixpkgs/pkgs/tools/misc/eot-utilities/default.nix
new file mode 100644
index 000000000000..bb9279687b1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eot-utilities/default.nix
@@ -0,0 +1,21 @@
+{lib, stdenv, fetchurl, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "eot_utilities";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "https://www.w3.org/Tools/eot-utils/eot-utilities-${version}.tar.gz";
+    sha256 = "0cb41riabss23hgfg7vxhky09d6zqwjy1nxdvr3l2bh5qzd4kvaf";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = {
+    homepage = "https://www.w3.org/Tools/eot-utils/";
+    description = "Create Embedded Open Type from OpenType or TrueType font";
+    license = lib.licenses.w3c;
+    maintainers = with lib.maintainers; [ leenaars ];
+    platforms = with lib.platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/esphome/dashboard.nix b/nixpkgs/pkgs/tools/misc/esphome/dashboard.nix
new file mode 100644
index 000000000000..6d72dc40ca0d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esphome/dashboard.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+}:
+
+buildPythonPackage rec {
+  pname = "esphome-dashboard";
+  version = "20240319.0";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-jiEXZWw8A4RcsRbypFpWkt8O3Ib1cNcOQO1zHt96aQU=";
+  };
+
+  # no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "esphome_dashboard"
+  ];
+
+  meta = with lib; {
+    description = "ESPHome dashboard";
+    homepage = "https://esphome.io/";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/esphome/default.nix b/nixpkgs/pkgs/tools/misc/esphome/default.nix
new file mode 100644
index 000000000000..972ac63e83dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esphome/default.nix
@@ -0,0 +1,134 @@
+{ lib
+, callPackage
+, python3Packages
+, fetchFromGitHub
+, installShellFiles
+, platformio
+, esptool
+, git
+, inetutils
+, stdenv
+}:
+
+let
+  python = python3Packages.python.override {
+    packageOverrides = self: super: {
+      esphome-dashboard = self.callPackage ./dashboard.nix { };
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "esphome";
+  version = "2024.3.2";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-WeTajznndw01jXIEnOiSEy9psLuMeAC6j7UmHg0+Fys=";
+  };
+
+  nativeBuildInputs = with python.pkgs; [
+    setuptools
+    argcomplete
+    installShellFiles
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = true;
+
+  postPatch = ''
+    # drop coverage testing
+    sed -i '/--cov/d' pytest.ini
+  '';
+
+  # Remove esptool and platformio from requirements
+  ESPHOME_USE_SUBPROCESS = "";
+
+  # esphome has optional dependencies it does not declare, they are
+  # loaded when certain config blocks are used, like `font`, `image`
+  # or `animation`.
+  # They have validation functions like:
+  # - validate_cryptography_installed
+  # - validate_pillow_installed
+  propagatedBuildInputs = with python.pkgs; [
+    aioesphomeapi
+    argcomplete
+    click
+    colorama
+    cryptography
+    esphome-dashboard
+    icmplib
+    kconfiglib
+    packaging
+    paho-mqtt
+    pillow
+    platformio
+    protobuf
+    pyparsing
+    pyserial
+    python-magic
+    pyyaml
+    requests
+    ruamel-yaml
+    tornado
+    tzdata
+    tzlocal
+    voluptuous
+  ];
+
+  makeWrapperArgs = [
+    # platformio is used in esphome/platformio_api.py
+    # esptool is used in esphome/__main__.py
+    # git is used in esphome/writer.py
+    # inetutils is used in esphome/dashboard/status/ping.py
+    "--prefix PATH : ${lib.makeBinPath [ platformio esptool git inetutils ]}"
+    "--prefix PYTHONPATH : ${python.pkgs.makePythonPath propagatedBuildInputs}" # will show better error messages
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ stdenv.cc.cc.lib ]}"
+    "--set ESPHOME_USE_SUBPROCESS ''"
+  ];
+
+  # Needed for tests
+  __darwinAllowLocalNetworking = true;
+
+  nativeCheckInputs = with python3Packages; [
+    hypothesis
+    mock
+    pytest-asyncio
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  postCheck = ''
+    $out/bin/esphome --help > /dev/null
+  '';
+
+  postInstall =
+    let
+      argcomplete = lib.getExe' python3Packages.argcomplete "register-python-argcomplete";
+    in
+    ''
+      installShellCompletion --cmd esphome \
+        --bash <(${argcomplete} --shell bash esphome) \
+        --zsh <(${argcomplete} --shell zsh esphome) \
+        --fish <(${argcomplete} --shell fish esphome)
+    '';
+
+  passthru = {
+    dashboard = python.pkgs.esphome-dashboard;
+    updateScript = callPackage ./update.nix { };
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/esphome/esphome/releases/tag/${version}";
+    description = "Make creating custom firmwares for ESP32/ESP8266 super easy";
+    homepage = "https://esphome.io/";
+    license = with licenses; [
+      mit # The C++/runtime codebase of the ESPHome project (file extensions .c, .cpp, .h, .hpp, .tcc, .ino)
+      gpl3Only # The python codebase and all other parts of this codebase
+    ];
+    maintainers = with maintainers; [ globin hexa ];
+    mainProgram = "esphome";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/esphome/update.nix b/nixpkgs/pkgs/tools/misc/esphome/update.nix
new file mode 100644
index 000000000000..6b05162f3955
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esphome/update.nix
@@ -0,0 +1,23 @@
+{ writeShellScript
+, lib
+, curl
+, jq
+, git
+, gnugrep
+, gnused
+, nix-update
+}:
+
+writeShellScript "update-esphome" ''
+  PATH=${lib.makeBinPath [ curl gnugrep gnused jq git nix-update ]}
+
+  LATEST=$(curl https://api.github.com/repos/esphome/esphome/releases/latest | jq -r '.name')
+  echo "Latest version: $LATEST"
+
+  DASHBOARD_VERSION=$(curl https://raw.githubusercontent.com/esphome/esphome/$LATEST/requirements.txt | \
+    grep "esphome-dashboard==" | sed "s/.*=//")
+  echo "Dashboard version: $DASHBOARD_VERSION"
+
+  nix-update esphome.dashboard --version $DASHBOARD_VERSION
+  nix-update esphome --version $LATEST
+''
diff --git a/nixpkgs/pkgs/tools/misc/esptool-ck/default.nix b/nixpkgs/pkgs/tools/misc/esptool-ck/default.nix
new file mode 100644
index 000000000000..2dd6415324e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esptool-ck/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "esptool-ck";
+  version = "0.4.13";
+
+  src = fetchFromGitHub {
+    owner = "igrr";
+    repo = "esptool-ck";
+    rev = "0.4.13";
+    sha256 = "1cb81b30a71r7i0gmkh2qagfx9lhq0myq5i37fk881bq6g7i5n2k";
+  };
+
+  makeFlags = [ "VERSION=${version}" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp esptool $out/bin
+  '';
+
+  meta = with lib; {
+    description = "ESP8266/ESP32 build helper tool";
+    homepage = "https://github.com/igrr/esptool-ck";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "esptool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/esptool/default.nix b/nixpkgs/pkgs/tools/misc/esptool/default.nix
new file mode 100644
index 000000000000..67eaacddaf6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/esptool/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, fetchFromGitHub
+, python3
+, softhsm
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "esptool";
+  version = "4.7.0";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "espressif";
+    repo = "esptool";
+    rev = "v${version}";
+    hash = "sha256-yrEwCg0e+8jZorL6jcqeuKUCFoV0oP9HVFh1n/ezjPg=";
+  };
+
+  postPatch = ''
+    patchShebangs ci
+
+    substituteInPlace test/test_espsecure_hsm.py \
+      --replace "/usr/lib/softhsm" "${lib.getLib softhsm}/lib/softhsm"
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    bitstring
+    cryptography
+    ecdsa
+    intelhex
+    pyserial
+    reedsolo
+    pyyaml
+    python-pkcs11
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pyelftools
+    pytestCheckHook
+    softhsm
+  ];
+
+  # tests mentioned in `.github/workflows/test_esptool.yml`
+  checkPhase = ''
+    runHook preCheck
+
+    export SOFTHSM2_CONF=$(mktemp)
+    echo "directories.tokendir = $(mktemp -d)" > "$SOFTHSM2_CONF"
+    ./ci/setup_softhsm2.sh
+
+    pytest test/test_imagegen.py
+    pytest test/test_espsecure.py
+    pytest test/test_espsecure_hsm.py
+    pytest test/test_merge_bin.py
+    pytest test/test_image_info.py
+    pytest test/test_modules.py
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "ESP8266 and ESP32 serial bootloader utility";
+    homepage = "https://github.com/espressif/esptool";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dezgeg dotlambda ] ++ teams.lumiguide.members;
+    platforms = with platforms; linux ++ darwin;
+    mainProgram = "esptool.py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ethtool/default.nix b/nixpkgs/pkgs/tools/misc/ethtool/default.nix
new file mode 100644
index 000000000000..eb1911170beb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ethtool/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, libmnl
+, pkg-config
+, writeScript
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ethtool";
+  version = "6.1";
+
+  src = fetchurl {
+    url = "mirror://kernel/software/network/${pname}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-xB/Igf+lpAQy0t2CnrRMZKSd7kgucWuqz5Jixk2qj5A=";
+  };
+
+  patches = [
+    # Patch that fixes build with musl libc
+    # NOTE remove on next release, since it is applied in upstream
+    (fetchpatch {
+      name = "Fix-build-with-musl-libc.patch";
+      url = "https://git.kernel.org/pub/scm/network/ethtool/ethtool.git/patch/marvell.c?id=41be533331fc3c6b711dbe532405782d3b8be5d1";
+      sha256 = "sha256-CItvt/eeNJkr1sOzaaHZhAnaybDutL9cT2O6XwQll+M=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libmnl
+  ];
+
+  passthru = {
+    updateScript = writeScript "update-ethtool" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -eu -o pipefail
+
+      # Expect the text in format of '<a href="ethtool-VER.tar.xz">...</a>'
+      # The page always lists versions newest to oldest. Pick the first one.
+      new_version="$(curl -s https://mirrors.edge.kernel.org/pub/software/network/ethtool/ |
+          pcregrep -o1 '<a href="ethtool-([0-9.]+)[.]tar[.]xz">' |
+          head -n1)"
+      update-source-version ${pname} "$new_version"
+    '';
+  };
+
+  meta = with lib; {
+    description = "Utility for controlling network drivers and hardware";
+    homepage = "https://www.kernel.org/pub/software/network/ethtool/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bjornfor ];
+    mainProgram = "ethtool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ets/default.nix b/nixpkgs/pkgs/tools/misc/ets/default.nix
new file mode 100644
index 000000000000..7d9103e7b350
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ets/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, installShellFiles }:
+
+buildGoModule rec {
+  pname = "ets";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "zmwangx";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-XWIDo5msTMTLr60x1R9cwsiZIDG6G+uHWx8idt4F2iA=";
+  };
+
+  # https://github.com/zmwangx/ets/pull/18/
+  patches = [ (fetchpatch {
+    url = "https://github.com/zmwangx/ets/commit/600ec17a9c86ca63cd022d00439cdc4978e2afa9.patch";
+    sha256 = "sha256-SGCISHkWNFubgKkQYx8Vf5/fknNDfPNYkSuw1mMhZaE=";
+  }) ];
+
+  vendorHash = "sha256-+8dXfqOu8XTw2uEx3GAynQSHtzifejZtddr1CdxrupA=";
+
+  ldflags = [ "-s" "-w" "-X main.version=v${version}-nixpkgs" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preBuild = ''
+    rm -rf fixtures
+  '';
+
+  postInstall = ''
+    installManPage ets.1
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command output timestamper";
+    homepage = "https://github.com/zmwangx/ets/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cameronfyfe ];
+    mainProgram = "ets";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/eva/default.nix b/nixpkgs/pkgs/tools/misc/eva/default.nix
new file mode 100644
index 000000000000..b15957a909a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/eva/default.nix
@@ -0,0 +1,21 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "eva";
+  version = "0.3.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-eX2d9h6zNbheS68j3lyhJW05JZmQN2I2MdcmiZB8Mec=";
+  };
+
+  cargoSha256 = "sha256-gnym2sedyzQzubOtj64Yoh+sKT+sa60w/Z72hby7Pms=";
+
+  meta = with lib; {
+    description = "A calculator REPL, similar to bc";
+    homepage = "https://github.com/NerdyPepper/eva";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nrdxp ma27 figsoda ];
+    mainProgram = "eva";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/evhz/default.nix b/nixpkgs/pkgs/tools/misc/evhz/default.nix
new file mode 100644
index 000000000000..712606c6913a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/evhz/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+}:
+
+stdenv.mkDerivation {
+  pname = "evhz";
+  version = "unstable-2021-09-20";
+
+  src = fetchFromSourcehut {
+    owner = "~iank";
+    repo = "evhz";
+    rev = "35b7526e0655522bbdf92f6384f4e9dff74f38a0";
+    hash = "sha256-lC0CeN9YVhkSiooC59Dbom811jHvPDQcYl+KADUwVdQ=";
+  };
+
+  buildPhase = "gcc -o evhz evhz.c";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv evhz $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Show mouse refresh rate under linux + evdev";
+    homepage = "https://git.sr.ht/~iank/evhz";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ Tungsten842 ];
+    platforms = platforms.linux;
+    mainProgram = "evhz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/expect/default.nix b/nixpkgs/pkgs/tools/misc/expect/default.nix
new file mode 100644
index 000000000000..e2457ad63e13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/expect/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, buildPackages, fetchurl, tcl, makeWrapper, autoreconfHook, fetchpatch, substituteAll }:
+
+tcl.mkTclDerivation rec {
+  pname = "expect";
+  version = "5.45.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/expect/Expect/${version}/expect${version}.tar.gz";
+    hash = "sha256-Safag7C92fRtBKBN7sGcd2e7mjI+QMR4H4nK92C5LDQ=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/buildroot/buildroot/c05e6aa361a4049eabd8b21eb64a34899ef83fc7/package/expect/0001-enable-cross-compilation.patch";
+      hash = "sha256-yyzE0Jjac5qaj7Svn4VpMiAqSNLYrw7VZbtFqgMVncs=";
+    })
+    (substituteAll {
+      src = ./fix-cross-compilation.patch;
+      tcl = "${buildPackages.tcl}/bin/tclsh";
+    })
+    # The following patches fix compilation with clang 15+
+    (fetchpatch {
+      url = "https://sourceforge.net/p/expect/patches/24/attachment/0001-Add-prototype-to-function-definitions.patch";
+      hash = "sha256-X2Vv6VVM3KjmBHo2ukVWe5YTVXRmqe//Kw2kr73OpZs=";
+    })
+    (fetchpatch {
+      url = "https://sourceforge.net/p/expect/patches/_discuss/thread/b813ca9895/6759/attachment/expect-configure-c99.patch";
+      hash = "sha256-PxQQ9roWgVXUoCMxkXEgu+it26ES/JuzHF6oML/nk54=";
+    })
+    # Include `sys/ioctl.h` and `util.h` on Darwin, which are required for `ioctl` and `openpty`.
+    ./fix-darwin-clang16.patch
+  ];
+
+  postPatch = ''
+    sed -i "s,/bin/stty,$(type -p stty),g" configure.in
+  '';
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper ];
+
+  strictDeps = true;
+  hardeningDisable = [ "format" ];
+
+  postInstall = ''
+    tclWrapperArgs+=(--prefix PATH : ${lib.makeBinPath [ tcl ]})
+    ${lib.optionalString stdenv.isDarwin "tclWrapperArgs+=(--prefix DYLD_LIBRARY_PATH : $out/lib/expect${version})"}
+  '';
+
+  outputs = [ "out" "dev" ];
+
+  meta = with lib; {
+    description = "A tool for automating interactive applications";
+    homepage = "https://expect.sourceforge.net/";
+    license = licenses.publicDomain;
+    platforms = platforms.unix;
+    mainProgram = "expect";
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/expect/fix-cross-compilation.patch b/nixpkgs/pkgs/tools/misc/expect/fix-cross-compilation.patch
new file mode 100644
index 000000000000..8edc4bea39d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/expect/fix-cross-compilation.patch
@@ -0,0 +1,11 @@
+--- a/Makefile.in	2022-09-07 21:46:37.090519258 +0200
++++ b/Makefile.in	2022-09-07 21:46:21.462592279 +0200
+@@ -380,7 +380,7 @@
+ 	cp $(DIST_ROOT)/$(PKG_DIR).tar.gz $(top_builddir)
+ 
+ $(SCRIPTS):
+-	$(TCLSH) $(srcdir)/fixline1 $(SHORT_BINDIR) < $(srcdir)/example/$@ > $@
++	@tcl@ $(srcdir)/fixline1 $(SHORT_BINDIR) < $(srcdir)/example/$@ > $@
+ 
+ ## We cannot use TCL_LIBS below (after TCL_LIB_SPEC) because its
+ ## expansion references the contents of LIBS, which contains linker
diff --git a/nixpkgs/pkgs/tools/misc/expect/fix-darwin-clang16.patch b/nixpkgs/pkgs/tools/misc/expect/fix-darwin-clang16.patch
new file mode 100644
index 000000000000..9454769c99c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/expect/fix-darwin-clang16.patch
@@ -0,0 +1,31 @@
+diff -ur a/exp_win.c b/exp_win.c
+--- a/exp_win.c	2018-02-02 14:15:52.000000000 -0500
++++ b/exp_win.c	2023-10-10 07:47:33.082690432 -0400
+@@ -39,7 +39,8 @@
+ /* Sigh.  On AIX 2.3, termios.h exists but does not define TIOCGWINSZ */
+ /* Instead, it has to come from ioctl.h.  However, As I said above, this */
+ /* can't be cavalierly included on all machines, even when it exists. */
+-#if defined(HAVE_TERMIOS) && !defined(HAVE_TIOCGWINSZ_IN_TERMIOS_H)
++/* Darwin also has termios.h, but it requires ioctl.h for `ioctl`. */
++#if defined(HAVE_TERMIOS) && (defined(__APPLE__) || !defined(HAVE_TIOCGWINSZ_IN_TERMIOS_H))
+ #  include <sys/ioctl.h>
+ #endif
+ 
+diff -ur d/pty_termios.c c/pty_termios.c
+--- d/pty_termios.c	2023-10-10 07:59:23.244452442 -0400
++++ c/pty_termios.c	2023-10-10 08:00:35.303231582 -0400
+@@ -7,7 +7,13 @@
+ 
+ */
+ 
+-#include <pty.h> /* openpty */
++/* openpty */
++#ifdef __APPLE__
++#include <util.h>
++#else /* pty.h is Linux-specific */
++#include <pty.h>
++#endif
++
+ #include <stdio.h>
+ #include <signal.h>
+ 
diff --git a/nixpkgs/pkgs/tools/misc/f2/default.nix b/nixpkgs/pkgs/tools/misc/f2/default.nix
new file mode 100644
index 000000000000..f97c2b8e80c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/f2/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "f2";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "ayoisaiah";
+    repo = "f2";
+    rev = "v${version}";
+    sha256 = "sha256-vpyI6WtK/0UpPiB8y+HpPd0IsKKkMHa/eIreYo32iAA=";
+  };
+
+  vendorHash = "sha256-Bz3Igjcyq4rkMkgv1J3+JiAqroAjxyAvHw4d4eZJgAM=";
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  # has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command-line batch renaming tool";
+    homepage = "https://github.com/ayoisaiah/f2";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zendo ];
+    mainProgram = "f2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/faketty/default.nix b/nixpkgs/pkgs/tools/misc/faketty/default.nix
new file mode 100644
index 000000000000..228cdf7f2f2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/faketty/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "faketty";
+  version = "1.0.16";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-BlQnVjYPFUfEurFUE2MHOL2ad56Nu/atzRuFu4OoCSI=";
+  };
+
+  cargoHash = "sha256-q9jx03XYA977481B9xuUfaaMBDbSVx4xREj4Q1Ti/Yw=";
+
+  postPatch = ''
+    patchShebangs tests/test.sh
+  '';
+
+  meta = with lib; {
+    description = "A wrapper to execute a command in a pty, even if redirecting the output";
+    homepage = "https://github.com/dtolnay/faketty";
+    changelog = "https://github.com/dtolnay/faketty/releases/tag/${version}";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "faketty";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fasd/default.nix b/nixpkgs/pkgs/tools/misc/fasd/default.nix
new file mode 100644
index 000000000000..76c7731e27f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fasd/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub } :
+
+stdenv.mkDerivation rec {
+  pname = "fasd";
+  version = "unstable-2016-08-11";
+
+  src = fetchFromGitHub {
+    owner = "clvv";
+    repo = pname;
+    rev = "90b531a5daaa545c74c7d98974b54cbdb92659fc";
+    sha256 = "0i22qmhq3indpvwbxz7c472rdyp8grag55x7iyjz8gmyn8gxjc11";
+  };
+
+  installPhase = ''
+    PREFIX=$out make install
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/clvv/fasd";
+    description = "Quick command-line access to files and directories for POSIX shells";
+    license = licenses.mit;
+
+    longDescription = ''
+      Fasd is a command-line productivity booster.
+      Fasd offers quick access to files and directories for POSIX shells. It is
+      inspired by tools like autojump, z and v. Fasd keeps track of files and
+      directories you have accessed, so that you can quickly reference them in the
+      command line.
+    '';
+
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ];
+    mainProgram = "fasd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fbcat/default.nix b/nixpkgs/pkgs/tools/misc/fbcat/default.nix
new file mode 100644
index 000000000000..d90ec77b6d5e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fbcat/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, netpbm
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fbcat";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "jwilk";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ORzcd8XGy2BfwuPK5UX+K5Z+FYkb+tdg/gHl3zHjvbk=";
+  };
+
+  postPatch = ''
+    substituteInPlace fbgrab \
+      --replace 'pnmtopng' '${netpbm}/bin/pnmtopng' \
+      --replace 'fbcat' "$out/bin/fbcat"
+  '';
+
+  installFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    homepage = "http://jwilk.net/software/fbcat";
+    description = "Framebuffer screenshot tool";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/fbmark/default.nix b/nixpkgs/pkgs/tools/misc/fbmark/default.nix
new file mode 100644
index 000000000000..fe8bca0e2240
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fbmark/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "fbmark";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "caramelli";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0n2czl2sy1k6r5ri0hp7jgq84xcwrx4x43bqvw1b4na99mqhyahn";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Linux Framebuffer Benchmark";
+    homepage = "https://github.com/caramelli/fbmark";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ davidak ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fclones/default.nix b/nixpkgs/pkgs/tools/misc/fclones/default.nix
new file mode 100644
index 000000000000..deb97aced8ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fclones/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fclones";
+  version = "0.34.0";
+
+  src = fetchFromGitHub {
+    owner = "pkolaczk";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-JgeajCubRz9hR6uvRAw1HXdKa6Ua+l/Im/bYXdx1gL0=";
+  };
+
+  cargoHash = "sha256-mEgFfg8I+JJuUEvj+sia2aL3BVg3HteQorZ2EOiLo64=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.AppKit
+  ];
+
+  # device::test_physical_device_name test fails on Darwin
+  doCheck = !stdenv.isDarwin;
+
+  checkFlags = [
+    # ofborg sometimes fails with "Resource temporarily unavailable"
+    "--skip=cache::test::return_none_if_different_transform_was_used"
+  ];
+
+  meta = with lib; {
+    description = "Efficient Duplicate File Finder and Remover";
+    homepage = "https://github.com/pkolaczk/fclones";
+    changelog = "https://github.com/pkolaczk/fclones/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cyounkins figsoda ];
+    mainProgram = "fclones";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fclones/gui.nix b/nixpkgs/pkgs/tools/misc/fclones/gui.nix
new file mode 100644
index 000000000000..8dff1eec4928
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fclones/gui.nix
@@ -0,0 +1,56 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, wrapGAppsHook4
+, gdk-pixbuf
+, gtk4
+, libadwaita
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fclones-gui";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "pkolaczk";
+    repo = "fclones-gui";
+    rev = "v${version}";
+    hash = "sha256-ad7wyoCjSQ8i6c+4IorImqAY2Q6pwBtI2JkkbkGa46U=";
+  };
+
+  cargoHash = "sha256-7+I0Tj+DcrItU2apB1iMiYiTv9AeDparke86HkJNF3A=";
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    gtk4
+    libadwaita
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.IOKit
+  ];
+
+  postInstall = ''
+    substituteInPlace snap/gui/fclones-gui.desktop \
+      --replace Exec=fclones-gui Exec=$out/bin/fclones-gui \
+      --replace 'Icon=''${SNAP}/meta/gui/fclones-gui.png' Icon=fclones-gui
+
+    install -Dm444 snap/gui/fclones-gui.desktop -t $out/share/applications
+    install -Dm444 snap/gui/fclones-gui.png -t $out/share/pixmaps
+  '';
+
+  meta = with lib; {
+    description = "Interactive duplicate file remover";
+    mainProgram = "fclones-gui";
+    homepage = "https://github.com/pkolaczk/fclones-gui";
+    changelog = "https://github.com/pkolaczk/fclones-gui/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fcp/default.nix b/nixpkgs/pkgs/tools/misc/fcp/default.nix
new file mode 100644
index 000000000000..61db506bc1ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fcp/default.nix
@@ -0,0 +1,34 @@
+{ expect, fetchFromGitHub, lib, rustPlatform, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fcp";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "svetlitski";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0f242n8w88rikg1srimdifadhggrb2r1z0g65id60ahb4bjm8a0x";
+  };
+
+  cargoSha256 = "0gw7gjfwc4r03rg6z65ml0y37sh4yf716isqs0mb4jqkp7rwfbc9";
+
+  nativeBuildInputs = [ expect ];
+
+  # character_device fails with "File name too long" on darwin
+  doCheck = !stdenv.isDarwin;
+
+  postPatch = ''
+    patchShebangs tests/*.exp
+  '';
+
+  meta = with lib; {
+    description = "A significantly faster alternative to the classic Unix cp(1) command";
+    homepage = "https://github.com/svetlitski/fcp";
+    changelog = "https://github.com/svetlitski/fcp/releases/tag/v${version}";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "fcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fd/default.nix b/nixpkgs/pkgs/tools/misc/fd/default.nix
new file mode 100644
index 000000000000..eddcb4b7784d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fd/default.nix
@@ -0,0 +1,55 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles, rust-jemalloc-sys, testers, fd }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fd";
+  version = "9.0.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = "fd";
+    rev = "v${version}";
+    hash = "sha256-xcrvAWbSvUUtbFXyENy3eQimxt5aXzFrHnL6VptyydA=";
+  };
+
+  cargoHash = "sha256-z4PV8k6avaLwo58yJq47WEUJGw3JCW1GZGviBaPTs+8=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ rust-jemalloc-sys ];
+
+  # skip flaky test
+  checkFlags = [
+    "--skip=test_owner_current_group"
+    # Fails if the filesystem performs UTF-8 validation (such as ZFS with utf8only=on)
+    "--skip=test_exec_invalid_utf8"
+    "--skip=test_invalid_utf8"
+  ];
+
+  postInstall = ''
+    installManPage doc/fd.1
+
+    installShellCompletion --cmd fd \
+      --bash <($out/bin/fd --gen-completions bash) \
+      --fish <($out/bin/fd --gen-completions fish)
+    installShellCompletion --zsh contrib/completion/_fd
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = fd;
+  };
+
+  meta = with lib; {
+    description = "A simple, fast and user-friendly alternative to find";
+    longDescription = ''
+      `fd` is a simple, fast and user-friendly alternative to `find`.
+
+      While it does not seek to mirror all of `find`'s powerful functionality,
+      it provides sensible (opinionated) defaults for 80% of the use cases.
+    '';
+    homepage = "https://github.com/sharkdp/fd";
+    changelog = "https://github.com/sharkdp/fd/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dywedir figsoda globin ma27 zowoq ];
+    mainProgram = "fd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fdtools/default.nix b/nixpkgs/pkgs/tools/misc/fdtools/default.nix
new file mode 100644
index 000000000000..0815ae04d623
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fdtools/default.nix
@@ -0,0 +1,87 @@
+{ stdenv, lib, fetchurl, skawarePackages }:
+
+let
+  pname = "fdtools";
+  # When you update, check whether we can drop the skalibs pin.
+  version = "2020.05.04";
+  sha256 = "0lnafcp4yipi0dl8gh33zjs8wlpz0mim8mwmiz9s49id0b0fmlla";
+  skalibs = skawarePackages.skalibs_2_10;
+
+in stdenv.mkDerivation {
+  inherit pname version;
+
+  src = fetchurl {
+    url = "https://code.dogmap.org/${pname}/releases/${pname}-${version}.tar.bz2";
+    inherit sha256;
+  };
+
+  patches = [ ./new-skalibs.patch ];
+  outputs = [ "bin" "lib" "dev" "doc" "out" ];
+
+  buildInputs = [
+    # temporary, until fdtools catches up to skalibs
+    skalibs
+  ];
+
+  configurePhase = ''
+    cd ${pname}-${version}
+    sed -e 's|gcc|$CC|' \
+      conf-compile/defaults/host_link.sh \
+      > conf-compile/host_link.sh
+    sed -e 's|gcc|$CC|' \
+      conf-compile/defaults/host_compile.sh \
+      > conf-compile/host_compile.sh
+
+    echo "${skalibs.lib}/lib/skalibs/sysdeps" \
+      > conf-compile/depend_skalibs_sysdeps
+  '';
+
+  buildPhase = ''
+    bash package/build
+  '';
+
+  installPhase = ''
+    mkdir -p $bin/bin
+    tools=( grabconsole multitee pipecycle recvfd seek0 sendfd setblock setstate statfile vc-get vc-lock vc-switch )
+
+    for t in "''${tools[@]}"; do
+      mv "command/$t" "$bin/bin/$t"
+    done
+
+    mkdir -p $lib/lib
+    mkdir -p $dev/include
+    docdir=$doc/share/doc/${pname}
+    mkdir -p $docdir
+
+    mv library/fdtools.a $lib/lib/fdtools.a
+    mv include/fdtools.h $dev/include/fdtools.h
+
+    ${skawarePackages.cleanPackaging.commonFileActions {
+       noiseFiles = [
+         "conf-compile/**/*"
+         "src/**/*"
+         "src/.**/*"
+         "compile/**/*"
+         "package/{build,check,compile,elsewhere,install,install_commands,own,run,sharing,upgrade,upgrade_version,url_src,url_src_latest,versions}"
+       ];
+       docFiles = [
+         "package/INSTALL"
+         "package/LICENSE"
+         "package/README"
+       ];
+    }} $docdir
+
+    ${skawarePackages.cleanPackaging.checkForRemainingFiles}
+
+    # we don’t use this, but nixpkgs requires it
+    touch $out
+  '';
+
+  meta = {
+    homepage = "https://code.dogmap.org/fdtools/";
+    description = "A set of utilities for working with file descriptors";
+    license = lib.licenses.gpl2Only;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fdtools/new-skalibs.patch b/nixpkgs/pkgs/tools/misc/fdtools/new-skalibs.patch
new file mode 100644
index 000000000000..76c5396f8a88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fdtools/new-skalibs.patch
@@ -0,0 +1,223 @@
+diff -Naur misc/fdtools-2020.05.04/src/check_exit_exec.c misc-new/fdtools-2020.05.04/src/check_exit_exec.c
+--- misc/fdtools-2020.05.04/src/check_exit_exec.c	2015-03-16 04:55:56.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/check_exit_exec.c	2021-01-22 10:50:25.529955213 +0100
+@@ -2,6 +2,7 @@
+ #include <unistd.h>
+ #include <errno.h>
+ 
++#include <skalibs/exec.h>
+ #include <skalibs/stddjb.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+@@ -14,7 +15,7 @@
+ 
+   if (str_equal(arg, ":")) {
+     ++argv;
+-    pathexec0((char const**)argv);
++    mexec0((char const**)argv);
+     DIE1(exec, argv[0]);
+   }
+ }
+diff -Naur misc/fdtools-2020.05.04/src/grabconsole.c misc-new/fdtools-2020.05.04/src/grabconsole.c
+--- misc/fdtools-2020.05.04/src/grabconsole.c	2020-04-24 06:01:22.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/grabconsole.c	2021-01-22 10:43:27.887754936 +0100
+@@ -4,6 +4,7 @@
+ #include <errno.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -26,6 +27,6 @@
+   if (fd_grabconsole(fd)!=0) DIE0(tioccons);
+ 
+   argv+=2;
+-  pathexec0((char const**)argv);
++  mexec0((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/pipecycle.c misc-new/fdtools-2020.05.04/src/pipecycle.c
+--- misc/fdtools-2020.05.04/src/pipecycle.c	2015-03-16 04:55:56.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/pipecycle.c	2021-01-22 10:47:58.033220790 +0100
+@@ -4,6 +4,7 @@
+ #include <unistd.h>
+ #include <signal.h>
+ 
++#include <skalibs/exec.h>
+ #include <skalibs/stddjb.h>
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -56,7 +57,7 @@
+       if (fd_shuffle(2, current, wanted)!=0) DIE0(dup);
+     }
+     read(start[0], &j, 1);
+-    pathexec(args);
++    mexec(args);
+     DIE1(exec, args[0]);
+   }
+ 
+diff -Naur misc/fdtools-2020.05.04/src/recvfd.c misc-new/fdtools-2020.05.04/src/recvfd.c
+--- misc/fdtools-2020.05.04/src/recvfd.c	2020-04-28 09:35:05.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/recvfd.c	2021-01-22 10:47:14.180994779 +0100
+@@ -7,6 +7,7 @@
+ #include <limits.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+ #include "fdtools.h"
+@@ -69,9 +70,9 @@
+       named_fd=duped;
+     }
+     buf[int_fmt(buf, named_fd)]='\0';
+-    if (pathexec_env(argv[i]+1, buf)==0) DIE0(alloc);
++    if (env_mexec(argv[i]+1, buf)==0) DIE0(alloc);
+   }
+   argv+=nfds+1;
+-  pathexec0((char const**)argv);
++  mexec0((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/sendfd.c misc-new/fdtools-2020.05.04/src/sendfd.c
+--- misc/fdtools-2020.05.04/src/sendfd.c	2015-03-16 06:48:39.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/sendfd.c	2021-01-22 10:43:07.207634214 +0100
+@@ -7,6 +7,7 @@
+ #include <limits.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+ #include "fdtools.h"
+@@ -40,6 +41,6 @@
+   argv+=nfds;
+   if (*argv==NULL) _exit(0);
+   ++argv;
+-  pathexec0((char const**)argv);
++  mexec0((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/setstate.c misc-new/fdtools-2020.05.04/src/setstate.c
+--- misc/fdtools-2020.05.04/src/setstate.c	2020-05-04 10:04:21.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/setstate.c	2021-01-22 10:45:05.084304318 +0100
+@@ -8,6 +8,7 @@
+ #include <errno.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/intattr.h"
+ #include "prjlibs-c/diewarn.h"
+@@ -167,6 +168,6 @@
+   }
+ 
+   argv+=2;
+-  pathexec_run(argv[0], (char const**)argv, (char const**)environ);
++  mexec_ae(argv[0], (char const**)argv, (char const**)environ);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/statfile.c misc-new/fdtools-2020.05.04/src/statfile.c
+--- misc/fdtools-2020.05.04/src/statfile.c	2015-03-22 00:33:44.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/statfile.c	2021-01-22 10:48:23.673351183 +0100
+@@ -6,6 +6,7 @@
+ #include <errno.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/warn.h"
+@@ -15,7 +16,7 @@
+ char const* PROG="statfile";
+ 
+ static void set(char const* const var, char const* const val) {
+-  if (pathexec_env(var, val)==0) DIE0(alloc);
++  if (env_mexec(var, val)==0) DIE0(alloc);
+ }
+ 
+ static void set64n(char const* const var, time_t t, unsigned int nsec) {
+@@ -178,6 +179,6 @@
+   }
+ 
+   argv+=3;
+-  pathexec((char const**)argv);
++  mexec((char const**)argv);
+   DIE1(exec, argv[0]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/vc-get-linux.c misc-new/fdtools-2020.05.04/src/vc-get-linux.c
+--- misc/fdtools-2020.05.04/src/vc-get-linux.c	2020-04-28 07:04:49.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/vc-get-linux.c	2021-01-22 10:47:34.649100757 +0100
+@@ -10,6 +10,7 @@
+ #include <sys/sysmacros.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -38,7 +39,7 @@
+       errno=0;
+       if (ioctl(fd, VT_OPENQRY, &vtnum)<0 || vtnum==-1) DIE0(vt_qry);
+       bufnum[ulong_fmt(bufnum, vtnum)]='\0';
+-      if (pathexec_env("TTY", buf)==0) DIE0(alloc);
++      if (env_mexec("TTY", buf)==0) DIE0(alloc);
+     }
+     fd_close(fd);
+ 
+@@ -50,12 +51,12 @@
+       if (fstat(fd, &statbuf)!=0) DIE1(stat, buf);
+       buf[ulong_fmt(buf, minor(statbuf.st_rdev))]='\0';
+     }
+-    if (pathexec_env("VCNUM", buf)==0) DIE0(alloc);
++    if (env_mexec("VCNUM", buf)==0) DIE0(alloc);
+ 
+     buf[ulong_fmt(buf, fd)]='\0';
+-    if (pathexec_env("VCFD", buf)==0) DIE0(alloc);
++    if (env_mexec("VCFD", buf)==0) DIE0(alloc);
+   }
+ 
+-  pathexec((char const**)argv+2);
++  mexec((char const**)argv+2);
+   DIE1(exec, argv[2]);
+ }
+diff -Naur misc/fdtools-2020.05.04/src/vc-lock-linux.c misc-new/fdtools-2020.05.04/src/vc-lock-linux.c
+--- misc/fdtools-2020.05.04/src/vc-lock-linux.c	2015-03-20 05:59:42.000000000 +0100
++++ misc-new/fdtools-2020.05.04/src/vc-lock-linux.c	2021-01-22 10:48:36.857417751 +0100
+@@ -8,6 +8,7 @@
+ #include <sys/ioctl.h>
+ #include <sys/vt.h>
+ 
++#include <skalibs/exec.h>
+ #include <skalibs/stddjb.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+@@ -79,7 +80,7 @@
+       WARN0(fork);
+     } else if (pid==0) {
+       sigprocmask(SIG_SETMASK, &old_set, NULLP);
+-      pathexec((char const**)argv);
++      mexec((char const**)argv);
+       DIE1(exec, *argv);
+     } else {
+       int status;
+diff -Naur misc/fdtools-2020.05.04/src/vc-switch-linux.c misc-new/fdtools-2020.05.04/src/vc-switch-linux.c
+--- misc/fdtools-2020.05.04/src/vc-switch-linux.c	2020-04-28 07:14:04.000000000 +0200
++++ misc-new/fdtools-2020.05.04/src/vc-switch-linux.c	2021-01-22 10:42:41.259480648 +0100
+@@ -10,6 +10,7 @@
+ #include <sys/sysmacros.h>
+ 
+ #include <skalibs/stddjb.h>
++#include <skalibs/exec.h>
+ #include "prjlibs-c/constants.h"
+ #include "prjlibs-c/diewarn.h"
+ #include "prjlibs-c/types.h"
+@@ -36,6 +37,6 @@
+   if (ioctl(fd, VT_ACTIVATE, ttyno)<0) DIE0(vt_act);
+   if (!scan) fd_close(fd);
+ 
+-  pathexec0((char const**)argv+3);
++  mexec0((char const**)argv+3);
+   DIE1(exec, argv[3]);
+ }
diff --git a/nixpkgs/pkgs/tools/misc/fdupes/default.nix b/nixpkgs/pkgs/tools/misc/fdupes/default.nix
new file mode 100644
index 000000000000..fefb3992749b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fdupes/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, ncurses
+, pcre2
+, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fdupes";
+  version = "2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "adrianlopezroche";
+    repo = "fdupes";
+    rev = "v${version}";
+    hash = "sha256-BW6a5vKRAuXs/zWPHhtZs6Y4scyCEfqHEAkGUSUiwkI=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+  buildInputs = [
+    ncurses
+    pcre2
+    sqlite
+  ];
+
+  meta = with lib; {
+    description = "Identifies duplicate files residing within specified directories";
+    longDescription = ''
+      fdupes searches the given path for duplicate files.
+      Such files are found by comparing file sizes and MD5 signatures,
+      followed by a byte-by-byte comparison.
+    '';
+    homepage = "https://github.com/adrianlopezroche/fdupes";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.maggesi ];
+    mainProgram = "fdupes";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fedifetcher/default.nix b/nixpkgs/pkgs/tools/misc/fedifetcher/default.nix
new file mode 100644
index 000000000000..ac34847ab234
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fedifetcher/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchFromGitHub, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "fedifetcher";
+  version = "7.0.4";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "nanos";
+    repo = "FediFetcher";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-19ZpOpvDj2/qMufH2qPPAj8hRPlViSuC64WqJp6+xSk=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    defusedxml
+    python-dateutil
+    requests
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD find_posts.py $out/bin/fedifetcher
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A tool for Mastodon that automatically fetches missing replies and posts from other fediverse instances";
+    longDescription = ''
+      FediFetcher is a tool for Mastodon that automatically fetches missing
+      replies and posts from other fediverse instances, and adds them to your
+      own Mastodon instance.
+    '';
+    homepage = "https://blog.thms.uk/fedifetcher";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "fedifetcher";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fend/default.nix b/nixpkgs/pkgs/tools/misc/fend/default.nix
new file mode 100644
index 000000000000..9b977f6d0d47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fend/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, darwin
+, pandoc
+, pkg-config
+, openssl
+, installShellFiles
+, copyDesktopItems
+, makeDesktopItem
+, nix-update-script
+, testers
+, writeText
+, runCommand
+, fend
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fend";
+  version = "1.4.6";
+
+  src = fetchFromGitHub {
+    owner = "printfn";
+    repo = "fend";
+    rev = "v${version}";
+    hash = "sha256-xqWAL1xMUUL2AtxnZ4oXWmNoks0pL63uqKoNc0Vvw/4=";
+  };
+
+  cargoHash = "sha256-0ov/uzBEa8Wzw5T0mSMnnmJYucBLUe0Qlwel6pVRorc=";
+
+  nativeBuildInputs = [ pandoc installShellFiles pkg-config copyDesktopItems ];
+  buildInputs = [ pkg-config openssl ] ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  postBuild = ''
+    patchShebangs --build ./documentation/build.sh
+    ./documentation/build.sh
+  '';
+
+  preFixup = ''
+    installManPage documentation/fend.1
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    [[ "$($out/bin/fend "1 km to m")" = "1000 m" ]]
+  '';
+
+  postInstall = ''
+    install -D -m 444 $src/icon/icon.svg $out/share/icons/hicolor/scalable/apps/fend.svg
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "fend";
+      desktopName = "fend";
+      genericName = "Calculator";
+      comment = "Arbitrary-precision unit-aware calculator";
+      icon = "fend";
+      exec = "fend";
+      terminal = true;
+      categories = [ "Utility" "Calculator" "ConsoleOnly" ];
+    })
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests = {
+      version = testers.testVersion { package = fend; };
+      units = testers.testEqualContents {
+        assertion = "fend does simple math and unit conversions";
+        expected = writeText "expected" ''
+          36 kph
+        '';
+        actual = runCommand "actual" { } ''
+          ${lib.getExe fend} '(100 meters) / (10 seconds) to kph' > $out
+        '';
+      };
+    };
+  };
+
+  meta = with lib; {
+    description = "Arbitrary-precision unit-aware calculator";
+    homepage = "https://github.com/printfn/fend";
+    changelog = "https://github.com/printfn/fend/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ djanatyn liff ];
+    mainProgram = "fend";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fet-sh/default.nix b/nixpkgs/pkgs/tools/misc/fet-sh/default.nix
new file mode 100644
index 000000000000..689eb0395f40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fet-sh/default.nix
@@ -0,0 +1,30 @@
+{ stdenvNoCC, lib, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "fet-sh";
+  version = "1.9";
+
+  src = fetchFromGitHub {
+    owner = "6gk";
+    repo = "fet.sh";
+    rev = "v${version}";
+    sha256 = "sha256-xhX2nVteC3T3IjQh++mYlm0btDJQbyQa6b8sGualV0E=";
+  };
+
+  postPatch = ''
+    patchShebangs fet.sh
+  '';
+
+  installPhase = ''
+    install -m755 -D fet.sh $out/bin/fet.sh
+  '';
+
+  meta = with lib; {
+    description = "A fetch written in posix shell without any external commands";
+    homepage = "https://github.com/6gk/fet.sh";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ elkowar ];
+    mainProgram = "fet.sh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fetch-scm/default.nix b/nixpkgs/pkgs/tools/misc/fetch-scm/default.nix
new file mode 100644
index 000000000000..a5bc1f65a904
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fetch-scm/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, guile }:
+
+stdenv.mkDerivation rec {
+  pname = "fetch-scm";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "KikyTokamuro";
+    repo = "fetch.scm";
+    rev = "v${version}";
+    sha256 = "sha256-WdYi8EVxQ6xPtld8JyZlUmgpxroevBehtkRANovMh2E=";
+  };
+
+  dontBuild = true;
+
+  buildInputs = [ guile ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 fetch.scm $out/bin/fetch-scm
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "System information fetcher written in GNU Guile Scheme";
+    homepage = "https://github.com/KikyTokamuro/fetch.scm";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ vel ];
+    mainProgram = "fetch-scm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fetchutils/default.nix b/nixpkgs/pkgs/tools/misc/fetchutils/default.nix
new file mode 100644
index 000000000000..d1c830f877d6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fetchutils/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenvNoCC, fetchFromGitHub, bash, scdoc }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "fetchutils";
+  version = "unstable-2021-03-16";
+
+  src = fetchFromGitHub {
+    owner = "kiedtl";
+    repo = pname;
+    rev = "882781a297e86f4ad4eaf143e0777fb3e7c69526";
+    sha256 = "sha256-ONrVZC6GBV5v3TeBekW9ybZjDHF3FNyXw1rYknqKRbk=";
+  };
+
+  buildInputs = [ bash scdoc ];
+
+  installFlags = [ "PREFIX=$(out)/" ];
+
+  postPatch = ''
+    patchShebangs --host src/*
+  '';
+
+  meta = with lib; {
+    description = "A collection of small shell utilities to fetch system information";
+    homepage = "https://github.com/lptstr/fetchutils";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ moni ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fffuu/default.nix b/nixpkgs/pkgs/tools/misc/fffuu/default.nix
new file mode 100644
index 000000000000..53f8397a6d45
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fffuu/default.nix
@@ -0,0 +1,52 @@
+{ mkDerivation, haskellPackages, fetchFromGitHub, lib }:
+
+mkDerivation {
+  pname = "fffuu";
+  version = "unstable-2018-05-26";
+
+  src = fetchFromGitHub {
+    owner = "diekmann";
+    repo = "Iptables_Semantics";
+    rev = "e0a2516bd885708fce875023b474ae341cbdee29";
+    sha256 = "1qc7p44dqja6qrjbjdc2xn7n9v41j5v59sgjnxjj5k0mxp58y1ch";
+  };
+
+  postPatch = ''
+    substituteInPlace haskell_tool/fffuu.cabal \
+      --replace "containers >=0.5 && <0.6" "containers >= 0.6" \
+      --replace "optparse-generic >= 1.2.3 && < 1.3" "optparse-generic >= 1.2.3" \
+      --replace "split >= 0.2.3 && <= 0.2.4" "split >= 0.2.3"
+  '';
+
+  preCompileBuildDriver = ''
+    cd haskell_tool
+  '';
+
+  isLibrary = false;
+
+  isExecutable = true;
+
+  # fails with sandbox
+  doCheck = false;
+
+  libraryHaskellDepends = with haskellPackages; [
+    base
+    containers
+    split
+    parsec
+    optparse-generic
+  ];
+
+  executableHaskellDepends = with haskellPackages; [ base ];
+
+  testHaskellDepends = with haskellPackages; [
+    tasty
+    tasty-hunit
+    tasty-golden
+  ];
+
+  description = "Fancy Formal Firewall Universal Understander";
+  homepage = "https://github.com/diekmann/Iptables_Semantics/tree/master/haskell_tool";
+  license = lib.licenses.bsd2;
+  maintainers = [ ];
+}
diff --git a/nixpkgs/pkgs/tools/misc/ffsend/default.nix b/nixpkgs/pkgs/tools/misc/ffsend/default.nix
new file mode 100644
index 000000000000..ae377b63812f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ffsend/default.nix
@@ -0,0 +1,93 @@
+{ lib, stdenv, fetchFromGitLab, fetchpatch, rustPlatform, pkg-config, openssl
+, installShellFiles
+, Security, AppKit
+
+, x11Support ? stdenv.isLinux || stdenv.hostPlatform.isBSD
+, xclip ? null, xsel ? null
+, preferXsel ? false # if true and xsel is non-null, use it instead of xclip
+}:
+
+let
+  usesX11 = stdenv.isLinux || stdenv.isBSD;
+in
+
+assert (x11Support && usesX11) -> xclip != null || xsel != null;
+
+rustPlatform.buildRustPackage rec {
+  pname = "ffsend";
+  version = "0.2.76";
+
+  src = fetchFromGitLab {
+    owner = "timvisee";
+    repo = "ffsend";
+    rev = "v${version}";
+    sha256 = "sha256-L1j1lXPxy9nWMeED9uzQHV5y7XTE6+DB57rDnXa4kMo=";
+  };
+
+  cargoHash = "sha256-r1yIPV2sW/EpHJpdaJyi6pzE+rtNkBIxSUJF+XA8kbA=";
+
+  cargoPatches = [
+
+    # Update dependencies (needed for the below patch to merge cleanly)
+    (fetchpatch {
+      name = "Update-dependencies-1";
+      url = "https://github.com/timvisee/ffsend/commit/afb004680b9ed672c7e87ff23f16bb2c51fea06e.patch";
+      hash = "sha256-eDcbyi05aOq+muVWdLmlLzLXUKcrv/9Y0R+0aHgL4+s=";
+    })
+
+    # Disable unused features in prettytable-rs crate (needed for the below patch to merge cleanly)
+    (fetchpatch {
+      name = "Disable-unused-features";
+      url = "https://github.com/timvisee/ffsend/commit/9b8dee12ea839f911ed207ff9602d929cab5d34b.patch";
+      hash = "sha256-6LK1Fqov+zEbPZ4+B6JCLXtXmgSad9vr9YO2oYodBSM=";
+    })
+
+    # Update dependencies (needed for the below patch to merge cleanly)
+    (fetchpatch {
+      name = "Update-dependencies-2";
+      url = "https://github.com/timvisee/ffsend/commit/fd5b38f9ab9cbc5f962d1024f4809eb36ba8986c.patch";
+      hash = "sha256-BDZKrVtQHpOewmB2Lb6kUfy02swcNK+CYZ3lj3kwFV4=";
+    })
+
+    # Fix seg fault
+    (fetchpatch {
+      name = "Fix-segfault";
+      url = "https://github.com/timvisee/ffsend/commit/3c1c2dc28ca1d88c45f87496a7a96052f5c37858.patch";
+      hash = "sha256-2hWlFXDopNy26Df74nJoB1J8qzPEOpf61wEOEtxOVx8=";
+    })
+  ];
+
+  nativeBuildInputs = [ installShellFiles ]
+    ++ lib.optionals stdenv.isLinux [ pkg-config ];
+  buildInputs =
+    if stdenv.isDarwin then [ Security AppKit ]
+    else [ openssl ];
+
+  preBuild = lib.optionalString (x11Support && usesX11) (
+    if preferXsel && xsel != null then ''
+      export XSEL_PATH="${xsel}/bin/xsel"
+    '' else ''
+      export XCLIP_PATH="${xclip}/bin/xclip"
+    ''
+  );
+
+  postInstall = ''
+    installShellCompletion contrib/completions/ffsend.{bash,fish} --zsh contrib/completions/_ffsend
+  '';
+  # There's also .elv and .ps1 completion files but I don't know where to install those
+
+  meta = with lib; {
+    description = "Easily and securely share files from the command line. A fully featured Firefox Send client";
+    longDescription = ''
+      Easily and securely share files and directories from the command line through a safe, private
+      and encrypted link using a single simple command. Files are shared using the Send service and
+      may be up to 2GB. Others are able to download these files with this tool, or through their
+      web browser.
+    '';
+    homepage = "https://gitlab.com/timvisee/ffsend";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ lilyball equirosa ];
+    platforms = platforms.unix;
+    mainProgram = "ffsend";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fiano/default.nix b/nixpkgs/pkgs/tools/misc/fiano/default.nix
new file mode 100644
index 000000000000..ba4b415b283e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fiano/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "fiano";
+
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "linuxboot";
+    repo = "fiano";
+    rev = "v${version}";
+    hash = "sha256-QX0XMec99YbYWyfRThhwDaNjKstkUEz6wsisBynprmg=";
+  };
+
+  subPackages = [
+    "cmds/cbfs"
+    "cmds/create-ffs"
+    "cmds/fmap"
+    "cmds/fspinfo"
+    "cmds/glzma"
+    "cmds/guid2english"
+    "cmds/microcode"
+    "cmds/utk"
+  ];
+
+  vendorHash = "sha256-00ZSAVEmk2pNjv6fo++gnpIheK8lo4AVWf+ghXappnI=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Go-based tools for modifying UEFI firmware";
+    homepage = "https://github.com/linuxboot/fiano";
+    changelog = "https://github.com/linuxboot/fiano/blob/v${version}/RELEASES.md";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.jmbaur ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/figlet/default.nix b/nixpkgs/pkgs/tools/misc/figlet/default.nix
new file mode 100644
index 000000000000..746def80c6d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/figlet/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, fetchpatch, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "figlet";
+  version = "2.2.5";
+
+  # some tools can be found here ftp://ftp.figlet.org/pub/figlet/util/
+  src = fetchurl {
+    url = "ftp://ftp.figlet.org/pub/figlet/program/unix/figlet-${version}.tar.gz";
+    sha256 = "0za1ax15x7myjl8jz271ybly8ln9kb9zhm1gf6rdlxzhs07w925z";
+  };
+
+  contributed = fetchzip {
+    url = "ftp://ftp.figlet.org/pub/figlet/fonts/contributed.tar.gz";
+    hash = "sha256-AyvAoc3IqJeKWgJftBahxb/KJjudeJIY4KD6mElNagQ=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://git.alpinelinux.org/aports/plain/main/figlet/musl-fix-cplusplus-decls.patch?h=3.4-stable&id=71776c73a6f04b6f671430f702bcd40b29d48399";
+      name = "musl-fix-cplusplus-decls.patch";
+      sha256 = "1720zgrfk9makznqkbjrnlxm7nnhk6zx7g458fv53337n3g3zn7j";
+    })
+    (fetchpatch {
+      url = "https://github.com/cmatsuoka/figlet/commit/9a50c1795bc32e5a698b855131ee87c8d7762c9e.patch";
+      name = "unistd-on-darwin.patch";
+      sha256 = "hyfY87N+yuAwjsBIjpgvcdJ1IbzlR4A2yUJQSzShCRI=";
+    })
+  ];
+
+  makeFlags = [ "prefix=$(out)" "CC:=$(CC)" "LD:=$(CC)" ];
+
+  postInstall = "cp -ar ${contributed}/* $out/share/figlet/";
+
+  doCheck = true;
+
+  meta = {
+    description = "Program for making large letters out of ordinary text";
+    homepage = "http://www.figlet.org/";
+    license = lib.licenses.afl21;
+    maintainers = with lib.maintainers; [ ehmry ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/file/32-bit-time_t.patch b/nixpkgs/pkgs/tools/misc/file/32-bit-time_t.patch
new file mode 100644
index 000000000000..19c595215d65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/file/32-bit-time_t.patch
@@ -0,0 +1,38 @@
+https://github.com/file/file/commit/218fdf813fd5ccecbb8887a1b62509cd1c6dd3a1.patch
+
+From 218fdf813fd5ccecbb8887a1b62509cd1c6dd3a1 Mon Sep 17 00:00:00 2001
+From: Christos Zoulas <christos@zoulas.com>
+Date: Fri, 28 Jul 2023 14:38:25 +0000
+Subject: [PATCH] deal with 32 bit time_t
+
+---
+ src/file.h | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/src/file.h b/src/file.h
+index 2e0494d2f..78f574ea1 100644
+--- a/src/file.h
++++ b/src/file.h
+@@ -27,7 +27,7 @@
+  */
+ /*
+  * file.h - definitions for file(1) program
+- * @(#)$File: file.h,v 1.247 2023/07/27 19:40:22 christos Exp $
++ * @(#)$File: file.h,v 1.248 2023/07/28 14:38:25 christos Exp $
+  */
+ 
+ #ifndef __file_h__
+@@ -159,9 +159,11 @@
+ /*
+  * Dec 31, 23:59:59 9999
+  * we need to make sure that we don't exceed 9999 because some libc
+- * implementations like muslc crash otherwise
++ * implementations like muslc crash otherwise. If you are unlucky
++ * to be running on a system with a 32 bit time_t, then it is even less.
+  */
+-#define	MAX_CTIME	CAST(time_t, 0x3afff487cfULL)
++#define	MAX_CTIME \
++    CAST(time_t, sizeof(time_t) > 4 ? 0x3afff487cfULL : 0x7fffffffULL)
+ 
+ #define FILE_BADSIZE CAST(size_t, ~0ul)
+ #define MAXDESC	64		/* max len of text description/MIME type */
diff --git a/nixpkgs/pkgs/tools/misc/file/default.nix b/nixpkgs/pkgs/tools/misc/file/default.nix
new file mode 100644
index 000000000000..8cff5ccd70af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/file/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, file, zlib, libgnurx
+, testers
+}:
+
+# 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 (finalAttrs: {
+  pname = "file";
+  version = "5.45";
+
+  src = fetchurl {
+    urls = [
+      "https://astron.com/pub/file/${finalAttrs.pname}-${finalAttrs.version}.tar.gz"
+      "https://distfiles.macports.org/file/${finalAttrs.pname}-${finalAttrs.version}.tar.gz"
+    ];
+    hash = "sha256-/Jf1ECm7DiyfTjv/79r2ePDgOe6HK53lwAKm0Jx4TYI=";
+  };
+
+  outputs = [ "out" "dev" "man" ];
+
+  patches = [
+    # Upstream patch to fix 32-bit tests.
+    # Will be included in 5.46+ releases.
+    ./32-bit-time_t.patch
+  ];
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) file;
+  buildInputs = [ zlib ]
+    ++ lib.optional stdenv.hostPlatform.isWindows libgnurx;
+
+  # https://bugs.astron.com/view.php?id=382
+  doCheck = !stdenv.buildPlatform.isMusl;
+
+  makeFlags = lib.optional stdenv.hostPlatform.isWindows "FILE_COMPILE=file";
+
+  passthru.tests.pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
+
+  meta = with lib; {
+    homepage = "https://darwinsys.com/file";
+    description = "A program that shows the type of files";
+    maintainers = with maintainers; [ doronbehar ];
+    license = licenses.bsd2;
+    pkgConfigModules = [ "libmagic" ];
+    platforms = platforms.all;
+    mainProgram = "file";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/filebench/default.nix b/nixpkgs/pkgs/tools/misc/filebench/default.nix
new file mode 100644
index 000000000000..b8d4c6fa7a89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/filebench/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, autoreconfHook, bison, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "filebench";
+  version = "1.4.9.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/filebench/${pname}-${version}.tar.gz";
+    sha256 = "13hmx67lsz367sn8lrvz1780mfczlbiz8v80gig9kpkpf009yksc";
+  };
+
+  nativeBuildInputs = [ autoreconfHook bison flex ];
+
+  meta = with lib; {
+    description = "File system and storage benchmark that can generate both micro and macro workloads";
+    homepage = "https://sourceforge.net/projects/filebench/";
+    license = licenses.cddl;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "filebench";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fileschanged/default.nix b/nixpkgs/pkgs/tools/misc/fileschanged/default.nix
new file mode 100644
index 000000000000..5644a01fa75a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fileschanged/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, gamin }:
+
+stdenv.mkDerivation rec {
+  pname = "fileschanged";
+  version = "0.6.9";
+
+  src = fetchurl {
+    url = "mirror://savannah/fileschanged/fileschanged-${version}.tar.gz";
+    sha256 = "0ajc9h023vzpnlqqjli4wbvs0q36nr5p9msc3wzbic8rk687qcxc";
+  };
+
+  buildInputs = [ gamin ];
+
+  patches = [./unused-variables.debian.patch];
+
+  doCheck = true;
+
+  meta = {
+    homepage = "https://www.nongnu.org/fileschanged/";
+    description = "A command-line utility that reports when files have been altered";
+    license = lib.licenses.gpl3Plus;
+
+    longDescription = ''
+      This utility is a client to FAM (File Alteration Monitor) servers
+      like FAM or Gamin. You give it some filenames on the command line
+      and then it monitors those files for changes. When it discovers
+      that a file has been altered, it displays the filename on the
+      standard-output or executes a given command.
+    '';
+
+    platforms = lib.platforms.linux;
+    mainProgram = "fileschanged";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch b/nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch
new file mode 100644
index 000000000000..73d307f9413d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fileschanged/unused-variables.debian.patch
@@ -0,0 +1,48 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 07_unused_variables.dpatch by Colin Watson <cjwatson@ubuntu.com>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: GCC 4.6 warns about unused variables, and fileschanged builds with
+## DP: -Werror, so deal with unused variable warnings.
+
+@DPATCH@
+diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' fileschanged-0.6.5~/src/monitor.c fileschanged-0.6.5/src/monitor.c
+--- fileschanged-0.6.5~/src/monitor.c	2006-04-19 20:42:29.000000000 +0100
++++ fileschanged-0.6.5/src/monitor.c	2011-09-14 01:17:23.000000000 +0100
+@@ -84,6 +84,7 @@
+ 	  retval = FAMMonitorDirectory (c, node->filename, &node->request,
+ 					(void *) node);
+ 	  //printf ("FAMMonitorDirectory returns %d (reqnum %d)\n", retval, node->request.reqnum);
++	  (void) retval;
+ 	}
+       else if (S_ISREG (node->statbuf.st_mode))
+ 	{
+@@ -91,6 +92,7 @@
+ 	  retval = FAMMonitorFile (c, node->filename, &node->request,
+ 				   (void *) node);
+ 	  //printf ("FAMMonitorFile returns %d (reqnum %d)\n", retval, node->request.reqnum);
++	  (void) retval;
+ 	}
+       monitor_handle_events (c, list, 0, 30);
+     }
+
+diff -r -U3 fileschanged-0.6.9-orig/src/main.c fileschanged-0.6.9/src/main.c
+--- fileschanged-0.6.9-orig/src/main.c  2012-04-13 01:31:59.160601022 +0400
++++ fileschanged-0.6.9/src/main.c       2012-04-13 01:32:47.549599643 +0400
+@@ -126,6 +126,7 @@
+     {
+       retval = process_file (filelist, filelist_len, arguments.args[i]);
+     }
++  (void) retval;
+   return 0;
+ }
+ 
+@@ -168,6 +169,7 @@
+ 
+   if (fileptr != stdin)
+     fclose (fileptr);
++  (void) retval;
+   return 0;
+ }
+ int 
+
diff --git a/nixpkgs/pkgs/tools/misc/findup/default.nix b/nixpkgs/pkgs/tools/misc/findup/default.nix
new file mode 100644
index 000000000000..eaba884d79d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/findup/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, testers
+, zig_0_10
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "findup";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "booniepepper";
+    repo = "findup";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-Tpyiy5oJQ04lqVEOFshFC0+90VoNILQ+N6Dd7lbuH/Q=";
+  };
+
+  nativeBuildInputs = [ zig_0_10.hook ];
+
+  passthru.tests.version = testers.testVersion { package = finalAttrs.finalPackage; };
+
+  meta = {
+    homepage = "https://github.com/booniepepper/findup";
+    description = "Search parent directories for sentinel files";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ booniepepper ];
+    mainProgram = "findup";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/findutils/default.nix b/nixpkgs/pkgs/tools/misc/findutils/default.nix
new file mode 100644
index 000000000000..b37eaeaea1be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/findutils/default.nix
@@ -0,0 +1,96 @@
+{ lib, stdenv, fetchurl
+, coreutils
+}:
+
+# 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 = "findutils";
+  version = "4.9.0";
+
+  src = fetchurl {
+    url = "mirror://gnu/findutils/${pname}-${version}.tar.xz";
+    sha256 = "sha256-or+4wJ1DZ3DtxZ9Q+kg+eFsWGjt7nVR1c8sIBl/UYv4=";
+  };
+
+  postPatch = ''
+    substituteInPlace xargs/xargs.c --replace 'char default_cmd[] = "echo";' 'char default_cmd[] = "${coreutils}/bin/echo";'
+  '';
+
+  patches = [ ./no-install-statedir.patch ];
+
+  buildInputs = [ coreutils ]; # bin/updatedb script needs to call sort
+
+  # Since glibc-2.25 the i686 tests hang reliably right after test-sleep.
+  doCheck
+    =  !stdenv.hostPlatform.isDarwin
+    && !(stdenv.hostPlatform.libc == "glibc" && stdenv.hostPlatform.isi686)
+    && (stdenv.hostPlatform.libc != "musl")
+    && stdenv.hostPlatform == stdenv.buildPlatform;
+
+  outputs = [ "out" "info" "locate"];
+
+  configureFlags = [
+    # "sort" need not be on the PATH as a run-time dep, so we need to tell
+    # configure where it is. Covers the cross and native case alike.
+    "SORT=${coreutils}/bin/sort"
+    "--localstatedir=/var/cache"
+  ];
+
+  CFLAGS = lib.optionals stdenv.isDarwin [
+    # TODO: Revisit upstream issue https://savannah.gnu.org/bugs/?59972
+    # https://github.com/Homebrew/homebrew-core/pull/69761#issuecomment-770268478
+    "-D__nonnull\\(params\\)="
+  ];
+
+  postInstall = ''
+    moveToOutput bin/locate $locate
+    moveToOutput bin/updatedb $locate
+  '';
+
+  # can't move man pages in postInstall because the multi-output hook will move them back to $out
+  postFixup = ''
+    moveToOutput share/man/man5 $locate
+    moveToOutput share/man/man1/locate.1.gz $locate
+    moveToOutput share/man/man1/updatedb.1.gz $locate
+  '';
+
+  enableParallelBuilding = true;
+
+  # bionic libc is super weird and has issues with fortify outside of its own libc, check this comment:
+  # https://github.com/NixOS/nixpkgs/pull/192630#discussion_r978985593
+  # or you can check libc/include/sys/cdefs.h in bionic source code
+  hardeningDisable = lib.optional (stdenv.hostPlatform.libc == "bionic") "fortify";
+
+  meta = {
+    homepage = "https://www.gnu.org/software/findutils/";
+    description = "GNU Find Utilities, the basic directory searching utilities of the GNU operating system";
+
+    longDescription = ''
+      The GNU Find Utilities are the basic directory searching
+      utilities of the GNU operating system.  These programs are
+      typically used in conjunction with other programs to provide
+      modular and powerful directory search and file locating
+      capabilities to other commands.
+
+      The tools supplied with this package are:
+
+          * find - search for files in a directory hierarchy;
+          * xargs - build and execute command lines from standard input.
+
+      The following are available in the locate output:
+
+          * locate - list files in databases that match a pattern;
+          * updatedb - update a file name database;
+    '';
+
+    platforms = lib.platforms.all;
+
+    license = lib.licenses.gpl3Plus;
+
+    mainProgram = "find";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch b/nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch
new file mode 100644
index 000000000000..a7a48038a3aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/findutils/no-install-statedir.patch
@@ -0,0 +1,11 @@
+--- a/locate/Makefile.in
++++ b/locate/Makefile.in
+@@ -2357,7 +2357,7 @@ updatedb: updatedb.sh Makefile
+ 	chmod +x $@
+ 
+ install-data-hook:
+-	$(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(localstatedir)
++	#$(top_srcdir)/build-aux/mkinstalldirs $(DESTDIR)$(localstatedir)
+ 
+ dblocation.texi:
+ 	echo '@set LOCATE_DB $(LOCATE_DB)' > $@.tmp
diff --git a/nixpkgs/pkgs/tools/misc/flameshot/default.nix b/nixpkgs/pkgs/tools/misc/flameshot/default.nix
new file mode 100644
index 000000000000..7b7b58381e9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flameshot/default.nix
@@ -0,0 +1,52 @@
+{ mkDerivation
+, lib
+, fetchFromGitHub
+, qtbase
+, cmake
+, qttools
+, qtsvg
+, nix-update-script
+, fetchpatch
+, kguiaddons
+}:
+
+mkDerivation rec {
+  pname = "flameshot";
+  version = "12.1.0";
+
+  src = fetchFromGitHub {
+    owner = "flameshot-org";
+    repo = "flameshot";
+    rev = "v${version}";
+    sha256 = "sha256-omyMN8d+g1uYsEw41KmpJCwOmVWLokEfbW19vIvG79w=";
+  };
+
+  patches = [
+    # https://github.com/flameshot-org/flameshot/pull/3166
+    (fetchpatch {
+      name = "10-fix-wayland.patch";
+      url = "https://github.com/flameshot-org/flameshot/commit/5fea9144501f7024344d6f29c480b000b2dcd5a6.patch";
+      sha256 = "sha256-SnjVbFMDKD070vR4vGYrwLw6scZAFaQA4b+MbI+0W9E=";
+    })
+  ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  cmakeFlags = [
+    (lib.cmakeBool "USE_WAYLAND_CLIPBOARD" true)
+  ];
+
+  nativeBuildInputs = [ cmake qttools qtsvg ];
+  buildInputs = [ qtbase kguiaddons ];
+
+  meta = with lib; {
+    description = "Powerful yet simple to use screenshot software";
+    homepage = "https://github.com/flameshot-org/flameshot";
+    mainProgram = "flameshot";
+    maintainers = with maintainers; [ scode oxalica ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/flashrom/default.nix b/nixpkgs/pkgs/tools/misc/flashrom/default.nix
new file mode 100644
index 000000000000..b2b9583db232
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flashrom/default.nix
@@ -0,0 +1,48 @@
+{ fetchurl
+, stdenv
+, installShellFiles
+, lib
+, libftdi1
+, libjaylink
+, libusb1
+, pciutils
+, pkg-config
+, jlinkSupport ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "flashrom";
+  version = "1.3.0";
+
+  src = fetchurl {
+    url = "https://download.flashrom.org/releases/flashrom-v${version}.tar.bz2";
+    hash = "sha256-oFMjRFPM0BLnnzRDvcxhYlz5e3/Xy0zdi/v/vosUliM=";
+  };
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+  buildInputs = [ libftdi1 libusb1 ]
+    ++ lib.optionals (!stdenv.isDarwin) [ pciutils ]
+    ++ lib.optional jlinkSupport libjaylink;
+
+  postPatch = ''
+    substituteInPlace util/flashrom_udev.rules \
+      --replace 'GROUP="plugdev"' 'TAG+="uaccess", TAG+="udev-acl"'
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" "libinstall" ]
+    ++ lib.optional jlinkSupport "CONFIG_JLINK_SPI=yes"
+    ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [ "CONFIG_INTERNAL_X86=no" "CONFIG_INTERNAL_DMI=no" "CONFIG_RAYER_SPI=no" ];
+
+  postInstall = ''
+    install -Dm644 util/flashrom_udev.rules $out/lib/udev/rules.d/flashrom.rules
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.flashrom.org";
+    description = "Utility for reading, writing, erasing and verifying flash ROM chips";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ fpletz felixsinger ];
+    platforms = platforms.all;
+    mainProgram = "flashrom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/flexoptix-app/default.nix b/nixpkgs/pkgs/tools/misc/flexoptix-app/default.nix
new file mode 100644
index 000000000000..662193f35328
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flexoptix-app/default.nix
@@ -0,0 +1,56 @@
+{ lib, appimageTools, fetchurl, asar }: let
+  pname = "flexoptix-app";
+  version = "5.21.2-latest";
+
+  src = fetchurl {
+    name = "${pname}-${version}.AppImage";
+    url = "https://flexbox.reconfigure.me/download/electron/linux/x64/FLEXOPTIX%20App.${version}.AppImage";
+    hash = "sha256-BnNRwD09CE1EZDg3Hn3khN4FZ8Hj5LLAunk+NKU5BJo=";
+  };
+
+  udevRules = fetchurl {
+    url = "https://www.flexoptix.net/static/frontend/Flexoptix/default/en_US/files/99-tprogrammer.rules";
+    hash = "sha256-OZe5dV50xq99olImbo7JQxPjRd7hGyBIVwFvtR9cIVc=";
+  };
+
+  appimageContents = (appimageTools.extract { inherit pname version src; }).overrideAttrs (oA: {
+    buildCommand = ''
+      ${oA.buildCommand}
+
+      # Get rid of the autoupdater
+      ${asar}/bin/asar extract $out/resources/app.asar app
+      patch -p0 < ${./disable-autoupdate.patch}
+      ${asar}/bin/asar pack app $out/resources/app.asar
+    '';
+  });
+
+in appimageTools.wrapAppImage {
+  inherit pname version;
+  src = appimageContents;
+
+  multiArch = false; # no 32bit needed
+  extraPkgs = { pkgs, ... }@args: [
+    pkgs.hidapi
+  ] ++ appimageTools.defaultFhsEnvArgs.multiPkgs args;
+
+  extraInstallCommands = ''
+    # Add desktop convencience stuff
+    install -Dm444 ${appimageContents}/flexoptix-app.desktop -t $out/share/applications
+    install -Dm444 ${appimageContents}/flexoptix-app.png -t $out/share/pixmaps
+    substituteInPlace $out/share/applications/flexoptix-app.desktop \
+      --replace 'Exec=AppRun' "Exec=$out/bin/${pname} --"
+
+    # Add udev rules
+    mkdir -p $out/lib/udev/rules.d
+    ln -s ${udevRules} $out/lib/udev/rules.d/99-tprogrammer.rules
+  '';
+
+  meta = {
+    description = "Configure FLEXOPTIX Universal Transceivers in seconds";
+    homepage = "https://www.flexoptix.net";
+    changelog = "https://www.flexoptix.net/en/flexoptix-app/?os=linux#flexapp__modal__changelog";
+    license = lib.licenses.unfree;
+    maintainers = with lib.maintainers; [ das_j ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/flexoptix-app/disable-autoupdate.patch b/nixpkgs/pkgs/tools/misc/flexoptix-app/disable-autoupdate.patch
new file mode 100644
index 000000000000..d71133951e72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flexoptix-app/disable-autoupdate.patch
@@ -0,0 +1,16 @@
+--- app/electron/jsComponents/mainWindowEvents.js	2024-02-18 12:53:41.115773007 -0500
++++ app/electron/jsComponents/mainWindowEvents.js2	2024-02-18 23:22:20.003280203 -0500
+@@ -128,7 +128,12 @@
+ 
+ 	if (app.isPackaged) {
+ 		global.mainWindow.webContents.once("did-finish-load", function () {
+-			autoUpdater.checkForUpdates();
++			global.mainWindow.loadURL(
++				url.format({
++					...global.APPLICATION_URL_OBJECT,
++					slashes: true,
++				}),
++			);
+ 		});
+ 	} else {
+ 		global.mainWindow.webContents.openDevTools();
diff --git a/nixpkgs/pkgs/tools/misc/flitter/default.nix b/nixpkgs/pkgs/tools/misc/flitter/default.nix
new file mode 100644
index 000000000000..958c5ebc3209
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flitter/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, ocamlPackages
+, fetchFromGitHub
+, makeWrapper
+, python3
+}:
+
+ocamlPackages.buildDunePackage {
+  pname = "flitter";
+  # request to tag releases: https://github.com/alexozer/flitter/issues/34
+  version = "unstable-2020-10-05";
+
+  duneVersion = "3";
+
+  src = fetchFromGitHub {
+    owner = "alexozer";
+    repo = "flitter";
+    rev = "666c5483bc93efa6d01e0b7a927461269f8e14de";
+    sha256 = "1k3m7bjq5yrrq7vhnbdykni65dsqhq6knnv9wvwq3svb3n07z4w3";
+  };
+
+  # compatibility with core >= 0.15
+  patches = [ ./flitter.patch ];
+
+  # https://github.com/alexozer/flitter/issues/28
+  postPatch = ''
+    for f in src/*.ml; do
+      substituteInPlace "$f" \
+        --replace 'Unix.gettimeofday' 'Caml_unix.gettimeofday' \
+        --replace 'Core_kernel' 'Core' \
+        --replace 'sexp_option' 'option[@sexp.option]' \
+        --replace 'sexp_list' 'list[@sexp.list]'
+    done
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = with ocamlPackages; [
+    core_unix
+    lwt_ppx
+    sexp_pretty
+    color
+    notty
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/flitter \
+      --prefix PATH : "${python3.withPackages (pp: [ pp.pynput ])}/bin"
+  '';
+
+  meta = with lib; {
+    description = "A Livesplit-inspired speedrunning split timer for Linux/macOS terminal";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fgaz ];
+    homepage = "https://github.com/alexozer/flitter";
+    platforms = platforms.unix;
+    mainProgram = "flitter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/flitter/flitter.patch b/nixpkgs/pkgs/tools/misc/flitter/flitter.patch
new file mode 100644
index 000000000000..f59b8a22eb67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flitter/flitter.patch
@@ -0,0 +1,13 @@
+diff --git a/src/dune b/src/dune
+index a50b09a..54cc770 100644
+--- a/src/dune
++++ b/src/dune
+@@ -1,7 +1,7 @@
+ (library
+   (name flitter)
+   (wrapped false)
+-  (libraries core lwt.unix notty notty.unix re color sexp_pretty)
++  (libraries core core_kernel.caml_unix lwt.unix notty notty.unix re color sexp_pretty)
+   (preprocess (pps lwt_ppx ppx_sexp_conv))
+   )
+ 
diff --git a/nixpkgs/pkgs/tools/misc/flowgger/default.nix b/nixpkgs/pkgs/tools/misc/flowgger/default.nix
new file mode 100644
index 000000000000..c9517043adc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/flowgger/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, stdenv
+, fetchCrate
+, pkg-config
+, openssl
+, capnproto
+, CoreServices
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "flowgger";
+  version = "0.3.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-PRlcfSVfQWt+rQEJjblY7/AMrjhGYO2/G7EX60aGApA=";
+  };
+
+  cargoHash = "sha256-hp2LrEVWo0gk95dPROqVcHEEG5N9fWms0mZkY9QILg0=";
+
+  nativeBuildInputs = [
+    pkg-config
+    capnproto
+  ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin CoreServices;
+
+  checkFlags = [
+    # test failed
+    "--skip=flowgger::encoder::ltsv_encoder::test_ltsv_full_encode_multiple_sd"
+    "--skip=flowgger::encoder::ltsv_encoder::test_ltsv_full_encode_no_sd"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/awslabs/flowgger";
+    description = "A fast, simple and lightweight data collector written in Rust";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [];
+    mainProgram = "flowgger";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fltrdr/default.nix b/nixpkgs/pkgs/tools/misc/fltrdr/default.nix
new file mode 100644
index 000000000000..25cbf8059335
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fltrdr/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, icu, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fltrdr";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    repo   = "fltrdr";
+    owner  = "octobanana";
+    rev    = version;
+    sha256 = "1vpci7vqzcpdd21zgigyz38k77r9fc81dmiwsvfr8w7gad5sg6sj";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ icu openssl ];
+
+  meta = with lib; {
+    homepage = "https://octobanana.com/software/fltrdr";
+    description = "A TUI text reader for the terminal";
+
+    longDescription = ''
+      Fltrdr, or flat-reader, is an interactive text reader for the terminal. It
+      is flat in the sense that the reader is word-based. It creates a
+      horizontal stream of words, ignoring all newline characters and reducing
+      extra whitespace. Its purpose is to facilitate reading, scanning, and
+      searching text. The program has a play mode that moves the reader forward
+      one word at a time, along with a configurable words per minute (WPM),
+      setting.
+    '';
+
+    platforms   = platforms.linux; # can only test linux
+    license     = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+    mainProgram = "fltrdr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fluent-bit/default.nix b/nixpkgs/pkgs/tools/misc/fluent-bit/default.nix
new file mode 100644
index 000000000000..86ae31ba214d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluent-bit/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, flex
+, bison
+, systemd
+, postgresql
+, openssl
+, libyaml
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "fluent-bit";
+  version = "3.0.3";
+
+  src = fetchFromGitHub {
+    owner = "fluent";
+    repo = "fluent-bit";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-nlBzD9u7DsCbJq9FxsbsP8F/tPklZ43NV8T2eiwWE24=";
+  };
+
+  nativeBuildInputs = [ cmake flex bison ];
+
+  buildInputs = [ openssl libyaml postgresql ]
+    ++ lib.optionals stdenv.isLinux [ systemd ];
+
+  cmakeFlags = [
+    "-DFLB_RELEASE=ON"
+    "-DFLB_METRICS=ON"
+    "-DFLB_HTTP_SERVER=ON"
+    "-DFLB_OUT_PGSQL=ON"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString (
+    # Used by the embedded luajit, but is not predefined on older mac SDKs.
+    lib.optionals stdenv.isDarwin [ "-DTARGET_OS_IPHONE=0" ]
+    # Assumes GNU version of strerror_r, and the posix version has an
+    # incompatible return type.
+    ++ lib.optionals (!stdenv.hostPlatform.isGnu) [ "-Wno-int-conversion" ]
+  );
+
+  outputs = [ "out" "dev" ];
+
+  postPatch = ''
+    substituteInPlace src/CMakeLists.txt \
+      --replace /lib/systemd $out/lib/systemd
+  '';
+
+  meta = {
+    changelog = "https://github.com/fluent/fluent-bit/releases/tag/v${finalAttrs.version}";
+    description = "Log forwarder and processor, part of Fluentd ecosystem";
+    homepage = "https://fluentbit.io";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.samrose lib.maintainers.fpletz ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/Gemfile b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile
new file mode 100644
index 000000000000..0ad3a4dde385
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile
@@ -0,0 +1,13 @@
+source "https://rubygems.org"
+
+gem 'fluentd'
+gem 'fluent-plugin-record-reformer'
+gem 'fluent-plugin-s3'
+gem 'fluent-plugin-kinesis'
+gem 'fluent-plugin-kafka'
+gem 'fluent-plugin-elasticsearch'
+gem 'fluent-plugin-mongo'
+gem 'fluent-plugin-webhdfs'
+gem 'fluent-plugin-rewrite-tag-filter'
+gem 'fluent-plugin-cloudwatch-logs'
+gem 'fluent-plugin-concat'
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock
new file mode 100644
index 000000000000..f8d002614fe5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/Gemfile.lock
@@ -0,0 +1,169 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.8.1)
+      public_suffix (>= 2.0.2, < 6.0)
+    aws-eventstream (1.2.0)
+    aws-partitions (1.677.0)
+    aws-sdk-cloudwatchlogs (1.58.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-core (3.168.4)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.651.0)
+      aws-sigv4 (~> 1.5)
+      jmespath (~> 1, >= 1.6.1)
+      nokogiri (~> 1.0)
+    aws-sdk-firehose (1.50.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kinesis (1.42.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kms (1.61.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.117.2)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.4)
+    aws-sdk-sqs (1.52.1)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sigv4 (1.5.2)
+      aws-eventstream (~> 1, >= 1.0.2)
+    bson (4.15.0)
+    concurrent-ruby (1.1.10)
+    cool.io (1.7.1)
+    digest-crc (0.6.4)
+      rake (>= 12.0.0, < 14.0.0)
+    elastic-transport (8.1.0)
+      faraday (< 3)
+      multi_json
+    elasticsearch (8.5.2)
+      elastic-transport (~> 8)
+      elasticsearch-api (= 8.5.2)
+    elasticsearch-api (8.5.2)
+      multi_json
+    excon (0.95.0)
+    faraday (1.10.2)
+      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-httpclient (1.0.1)
+    faraday-multipart (1.0.4)
+      multipart-post (~> 2)
+    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)
+    fluent-config-regexp-type (1.0.0)
+      fluentd (> 1.0.0, < 2)
+    fluent-plugin-cloudwatch-logs (0.14.3)
+      aws-sdk-cloudwatchlogs (~> 1.0)
+      fluentd (>= 1.8.0)
+    fluent-plugin-concat (2.5.0)
+      fluentd (>= 0.14.0, < 2)
+    fluent-plugin-elasticsearch (5.2.4)
+      elasticsearch
+      excon
+      faraday (~> 1.10)
+      fluentd (>= 0.14.22)
+    fluent-plugin-kafka (0.18.1)
+      fluentd (>= 0.10.58, < 2)
+      ltsv
+      ruby-kafka (>= 1.4.0, < 2)
+    fluent-plugin-kinesis (3.4.2)
+      aws-sdk-firehose (~> 1, != 1.9, != 1.5, != 1.15)
+      aws-sdk-kinesis (~> 1, != 1.5, != 1.4, != 1.14)
+      fluentd (>= 0.14.22, < 2)
+      google-protobuf (~> 3)
+    fluent-plugin-mongo (1.6.0)
+      fluentd (>= 0.14.22, < 2)
+      mongo (>= 2.15.0, < 2.19.0)
+    fluent-plugin-record-reformer (0.9.1)
+      fluentd
+    fluent-plugin-rewrite-tag-filter (2.4.0)
+      fluent-config-regexp-type
+      fluentd (>= 0.14.2, < 2)
+    fluent-plugin-s3 (1.7.2)
+      aws-sdk-s3 (~> 1.60)
+      aws-sdk-sqs (~> 1.23)
+      fluentd (>= 0.14.22, < 2)
+    fluent-plugin-webhdfs (1.5.0)
+      fluentd (>= 0.14.22)
+      webhdfs (>= 0.10.0)
+    fluentd (1.15.3)
+      bundler
+      cool.io (>= 1.4.5, < 2.0.0)
+      http_parser.rb (>= 0.5.1, < 0.9.0)
+      msgpack (>= 1.3.1, < 2.0.0)
+      serverengine (>= 2.3.0, < 3.0.0)
+      sigdump (~> 0.2.2)
+      strptime (>= 0.2.4, < 1.0.0)
+      tzinfo (>= 1.0, < 3.0)
+      tzinfo-data (~> 1.0)
+      webrick (>= 1.4.2, < 1.8.0)
+      yajl-ruby (~> 1.0)
+    google-protobuf (3.21.12)
+    http_parser.rb (0.8.0)
+    jmespath (1.6.2)
+    ltsv (0.1.2)
+    mini_portile2 (2.8.2)
+    mongo (2.18.2)
+      bson (>= 4.14.1, < 5.0.0)
+    msgpack (1.6.0)
+    multi_json (1.15.0)
+    multipart-post (2.2.3)
+    nokogiri (1.15.2)
+      mini_portile2 (2.8.2)
+      racc (1.6.2)
+    public_suffix (5.0.1)
+    racc (1.6.2)
+    rake (13.0.6)
+    ruby-kafka (1.5.0)
+      digest-crc
+    ruby2_keywords (0.0.5)
+    serverengine (2.3.0)
+      sigdump (~> 0.2.2)
+    sigdump (0.2.4)
+    strptime (0.2.5)
+    tzinfo (2.0.5)
+      concurrent-ruby (~> 1.0)
+    tzinfo-data (1.2022.7)
+      tzinfo (>= 1.0.0)
+    webhdfs (0.10.2)
+      addressable
+    webrick (1.7.0)
+    yajl-ruby (1.4.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  fluent-plugin-cloudwatch-logs
+  fluent-plugin-concat
+  fluent-plugin-elasticsearch
+  fluent-plugin-kafka
+  fluent-plugin-kinesis
+  fluent-plugin-mongo
+  fluent-plugin-record-reformer
+  fluent-plugin-rewrite-tag-filter
+  fluent-plugin-s3
+  fluent-plugin-webhdfs
+  fluentd
+
+BUNDLED WITH
+   2.3.26
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/default.nix b/nixpkgs/pkgs/tools/misc/fluentd/default.nix
new file mode 100644
index 000000000000..18752acb98d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/default.nix
@@ -0,0 +1,19 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript, nixosTests }:
+
+bundlerEnv {
+  inherit ruby;
+
+  pname = "fluentd";
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "fluentd";
+  passthru.tests.fluentd = nixosTests.fluentd;
+
+  meta = with lib; {
+    description = "A data collector";
+    homepage    = "https://www.fluentd.org/";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ offline nicknovitski ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fluentd/gemset.nix b/nixpkgs/pkgs/tools/misc/fluentd/gemset.nix
new file mode 100644
index 000000000000..16417bb0e4e9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fluentd/gemset.nix
@@ -0,0 +1,686 @@
+{
+  mini_portile2 = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z7f38iq37h376n9xbl4gajdrnwzq284c9v1py4imw3gri2d5cj6";
+      type = "gem";
+    };
+    version = "2.8.2";
+  };
+  racc = {
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09jgz6r0f7v84a7jz9an85q8vvmp743dqcsdm3z9c8rqcqv6pljq";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default" "development" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mr2ibfk874ncv0qbdkynay738w2mfinlkhnbd5lyk5yiw5q1p10";
+      type = "gem";
+    };
+    version = "1.15.2";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ypdmpdn20hxp5vwxz3zc04r5xcwqc25qszdlg41h8ghdqbllwmw";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  aws-eventstream = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c6w07lm5ssn0v06sh90g3swqb42ma65pfz0qlk3hqlj1fs5zd9b";
+      type = "gem";
+    };
+    version = "1.677.0";
+  };
+  aws-sdk-cloudwatchlogs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yhwbr3g9brh7g8vjxygfvhlc9sa04g5bzyhkdcdkl7faqpy93z3";
+      type = "gem";
+    };
+    version = "1.58.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "131acgw2hi893n0dfbczs42bkc41afhyrmd9w8zx5y8r1k5zd6rc";
+      type = "gem";
+    };
+    version = "3.168.4";
+  };
+  aws-sdk-firehose = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02lznpqdmla1i5ilxn6kkbdwasl2w4m9ml09whig9wwrlwjfkdnm";
+      type = "gem";
+    };
+    version = "1.50.0";
+  };
+  aws-sdk-kinesis = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n6jdkcyh9cm4f15zmmgpzwxbal5dg2w17xcm65d1gf9dwajsjda";
+      type = "gem";
+    };
+    version = "1.42.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ajp7yvnf95d60xmg618xznfwsy8h1vrkzj33r1bsf2gsfp50vzy";
+      type = "gem";
+    };
+    version = "1.61.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xpb8c8zw1c0grbw1rcc0ynlys1301vm9kkqy4ls3i2zqk5v6n91";
+      type = "gem";
+    };
+    version = "1.117.2";
+  };
+  aws-sdk-sqs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hirj20g7nnyf0xhxwvgfl12nypm1r5id16ccc8y1rbasclxs897";
+      type = "gem";
+    };
+    version = "1.52.1";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11hkna2av47bl0yprgp8k4ya70rc3m2ib5w10fn0piplgkkmhz7m";
+      type = "gem";
+    };
+    version = "1.5.2";
+  };
+  bson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19vgs9rzzyvd7jfrzynjnc6518q0ffpfciyicfywbp77zl8nc9hk";
+      type = "gem";
+    };
+    version = "4.15.0";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s4fpn3mqiizpmpy2a24k4v365pv75y50292r8ajrv4i1p5b2k14";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  "cool.io" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dfq4h168wzvs9cvn2mm8648ynkl936pgjva2p8ik34p6d620537";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  digest-crc = {
+    dependencies = ["rake"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1czaak53w8n13y1fr0q23gp0fhklvxjac5n562qj3xk6sh5ad0x2";
+      type = "gem";
+    };
+    version = "0.6.4";
+  };
+  elastic-transport = {
+    dependencies = ["faraday" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w5l26fwyby8pjcyyap015q5lxc619j8ig6af5slbp9l2x7kjaby";
+      type = "gem";
+    };
+    version = "8.1.0";
+  };
+  elasticsearch = {
+    dependencies = ["elastic-transport" "elasticsearch-api"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mwrf667p3n0xdashlk3m66a7vcqsg4vnr5icm7jgdd71qr4yvds";
+      type = "gem";
+    };
+    version = "8.5.2";
+  };
+  elasticsearch-api = {
+    dependencies = ["multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "138s5rcy5j63sjf6k8av8gaxn46nh8nf1bwxyxfygyy3q2q9m4vs";
+      type = "gem";
+    };
+    version = "8.5.2";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08idrrnpwzr87wc5yhyv6id1f6zigr3nfn45mff01605b0zghdby";
+      type = "gem";
+    };
+    version = "0.95.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 = "1d5ipsv069dhgv9zhxgj8pz4j52yhgvfm01aq881yz7qgjd7ilxp";
+      type = "gem";
+    };
+    version = "1.10.2";
+  };
+  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-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 = "09871c4hd7s5ws1wl4gs7js1k2wlby6v947m2bbzg43pnld044lh";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  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";
+  };
+  fluent-config-regexp-type = {
+    dependencies = ["fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hk0vxcmlbid7n6piyv3x83j5gyiz7in397l9x3c6nh69wicy7gm";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  fluent-plugin-cloudwatch-logs = {
+    dependencies = ["aws-sdk-cloudwatchlogs" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "139d7qv4my818mhjp0104ns9dlndlvrb6dgxa2rkv6jlzlamjpjb";
+      type = "gem";
+    };
+    version = "0.14.3";
+  };
+  fluent-plugin-concat = {
+    dependencies = ["fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b9z6hrjcsvccfimmgczzcbhvf2zwyqzvsdc29i2biqhk1mcwn3k";
+      type = "gem";
+    };
+    version = "2.5.0";
+  };
+  fluent-plugin-elasticsearch = {
+    dependencies = ["elasticsearch" "excon" "faraday" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "136nsmi15vcn0var59j1vqkysvmcp7y8fva25gkcx3hx1l92bxwh";
+      type = "gem";
+    };
+    version = "5.2.4";
+  };
+  fluent-plugin-kafka = {
+    dependencies = ["fluentd" "ltsv" "ruby-kafka"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ggiq89brahyamnw4sn4pmfqsw8xjz2k9k9hajsjlzkm9djppdwf";
+      type = "gem";
+    };
+    version = "0.18.1";
+  };
+  fluent-plugin-kinesis = {
+    dependencies = ["aws-sdk-firehose" "aws-sdk-kinesis" "fluentd" "google-protobuf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07n5pzfz143hlvbzbx5rczb33ai9kdp48vhdak100m6xpaqkvc2p";
+      type = "gem";
+    };
+    version = "3.4.2";
+  };
+  fluent-plugin-mongo = {
+    dependencies = ["fluentd" "mongo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m3fa6fwpzxw08lnczsif5c7v33yryyvgb1lbp7a7qjhipvb6jfm";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  fluent-plugin-record-reformer = {
+    dependencies = ["fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gwfrfyi9is4l9q4ih3c4l3c9qvyh00jnd2qajdpdh5xjj2m7akn";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  fluent-plugin-rewrite-tag-filter = {
+    dependencies = ["fluent-config-regexp-type" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vjvn8ph87cl2dl0dbaap69rciglsdma1y5ghn2vm5mvh5h7xbs6";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  fluent-plugin-s3 = {
+    dependencies = ["aws-sdk-s3" "aws-sdk-sqs" "fluentd"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04yvxhynjqm35dycrxqwfw9r7mv6ycyda1wvki27z5hpsdy57b1m";
+      type = "gem";
+    };
+    version = "1.7.2";
+  };
+  fluent-plugin-webhdfs = {
+    dependencies = ["fluentd" "webhdfs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1llpsbd5n2lgxbq16px5hbp3zfw65bdp46b08v87b6rmn3h47aiv";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  fluentd = {
+    dependencies = ["cool.io" "http_parser.rb" "msgpack" "serverengine" "sigdump" "strptime" "tzinfo" "tzinfo-data" "webrick" "yajl-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jn1i14zaw2pf4j6i7g7cj0h8j94wrcbn0an8w44h7g5mazl98nn";
+      type = "gem";
+    };
+    version = "1.15.3";
+  };
+  google-protobuf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dcgkhjiaxha3yznyxxzm8a4n4jf61rk7kgbxy4sdkb865zbn2ab";
+      type = "gem";
+    };
+    version = "3.21.12";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gj4fmls0mf52dlr928gaq0c0cb0m3aqa9kaa6l0ikl2zbqk42as";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  ltsv = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wrjvc5079zhpn62k1yflrf7js6vaysrg1qwggf7bj2zi0p5rhys";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  mongo = {
+    dependencies = ["bson"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ldpcyqhgvdn7rd1vdbv2n3xnr6ajw7964yb9gr44nv7z35fd7kn";
+      type = "gem";
+    };
+    version = "2.18.2";
+  };
+  msgpack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q03pb0vq8388s431nbxabsfxnch6p304c8vnjlk0zzpcv713yr3";
+      type = "gem";
+    };
+    version = "1.6.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 = "1n0kvnrcrjn31jb97kcx3wj1f5kkjza7yygfq8rxzf3i57g7jaa6";
+      type = "gem";
+    };
+    version = "2.2.3";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hz0bx2qs2pwb0bwazzsah03ilpf3aai8b7lk7s35jsfzwbkjq35";
+      type = "gem";
+    };
+    version = "5.0.1";
+  };
+  rake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15whn7p9nrkxangbs9hh75q585yfn66lv0v2mhj6q6dl6x8bzr2w";
+      type = "gem";
+    };
+    version = "13.0.6";
+  };
+  ruby-kafka = {
+    dependencies = ["digest-crc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13i3fvjy0n1n1aa71b30nwx2xchhsps3yhi17r0s6ay7wr26jr7p";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  serverengine = {
+    dependencies = ["sigdump"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1snxfmkmmxpdica8629gdl6qj3xradcx787ccvhfa90gh8wyfqqj";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  sigdump = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mqf06iw7rymv54y7rgbmfi6ppddgjjmxzi3hrw658n1amp1gwhb";
+      type = "gem";
+    };
+    version = "0.2.4";
+  };
+  strptime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ycs0xz58kymf7yp4h56f0nid2z7g3s18dj7pa3p790pfzzpgvcq";
+      type = "gem";
+    };
+    version = "0.2.5";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rx114mpqnw2k4h98vc0rs0x0bmf0img84yh8mkkjkal07cjydf5";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  tzinfo-data = {
+    dependencies = ["tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0drm9pygji01pyimxq65ngdvgpn228g7fhffmrqw0xn7l2rdhclp";
+      type = "gem";
+    };
+    version = "1.2022.7";
+  };
+  webhdfs = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pkdsj8ybjfp1sr7gzdxd7van5fpmhc9v2c5g3hifdx4s4yzhcq7";
+      type = "gem";
+    };
+    version = "0.10.2";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  yajl-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lni4jbyrlph7sz8y49q84pb0sbj82lgwvnjnsiv01xf26f4v5wc";
+      type = "gem";
+    };
+    version = "1.4.3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fntsample/default.nix b/nixpkgs/pkgs/tools/misc/fntsample/default.nix
new file mode 100644
index 000000000000..6600b7fab72b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fntsample/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchFromGitHub
+, cmake
+, pkg-config
+, cairo
+, fontconfig
+, freetype
+, glib
+, libXdmcp
+, makeWrapper
+, pango
+, pcre
+, perlPackages
+}:
+
+let
+  ucd-blocks = fetchurl {
+    url = "https://www.unicode.org/Public/15.0.0/ucd/Blocks.txt";
+    hash = "sha256-Up3F0PY4bVLy9W4AS7+rSM4tWH7qnTi6VGxAUkkb2CA=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "fntsample";
+  version = "5.4";
+
+  src = fetchFromGitHub {
+    owner = "eugmes";
+    repo = pname;
+    rev = "release/${version}";
+    hash = "sha256-O5RT68wPWwzCb51JZWWNcIubWoM7NZw/MRiaHXPDmF0=";
+  };
+
+  cmakeFlags = [
+    "-DUNICODE_BLOCKS=${ucd-blocks.outPath}"
+  ];
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [
+    cairo
+    fontconfig
+    freetype
+    glib
+    libXdmcp
+    pango
+    perlPackages.perl
+    pcre
+  ];
+
+  postFixup =
+    let
+      perlPath = with perlPackages; makePerlPath [
+        ExporterTiny
+        ListMoreUtils
+        PDFAPI2
+        libintl-perl
+      ];
+    in ''
+    for cmd in pdfoutline pdf-extract-outline; do
+      wrapProgram "$out/bin/$cmd" --prefix PERL5LIB : "${perlPath}"
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/eugmes/fntsample";
+    description = "PDF and PostScript font samples generator";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+  };
+}
+# TODO: factor/package ucd-blocks
diff --git a/nixpkgs/pkgs/tools/misc/foma/default.nix b/nixpkgs/pkgs/tools/misc/foma/default.nix
new file mode 100644
index 000000000000..5d82f699e7d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/foma/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, zlib, flex, bison, readline, darwin }:
+
+stdenv.mkDerivation rec {
+  pname = "foma";
+  version = "0.10.0alpha";
+
+  src = fetchFromGitHub {
+    owner = "mhulden";
+    repo = "foma";
+    rev = "82f9acdef234eae8b7619ccc3a386cc0d7df62bc";
+    sha256 = "1vf01l18j8cksnavbabcckp9gg692w6v5lg81xrzv6f5v14zp4nr";
+  };
+
+  sourceRoot = "${src.name}/foma";
+
+  nativeBuildInputs = [ flex bison ]
+    ++ lib.optional stdenv.isDarwin darwin.cctools;
+  buildInputs = [ zlib readline ];
+
+  makeFlags = [
+    "CC:=$(CC)"
+    "RANLIB:=$(RANLIB)"
+    "prefix=$(out)"
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    "AR:=$(AR)" # libtool is used for darwin
+  ];
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace '-ltermcap' ' '
+  '';
+
+  meta = with lib; {
+    description = "A multi-purpose finite-state toolkit designed for applications ranging from natural language processing to research in automata theory";
+    homepage = "https://github.com/mhulden/foma";
+    license = licenses.asl20;
+    maintainers = [ maintainers.tckmn ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fondu/default.nix b/nixpkgs/pkgs/tools/misc/fondu/default.nix
new file mode 100644
index 000000000000..9435d0487b76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fondu/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, CoreServices }:
+
+stdenv.mkDerivation rec {
+  version = "060102";
+  pname = "fondu";
+
+  src = fetchurl {
+    url = "http://fondu.sourceforge.net/fondu_src-${version}.tgz";
+    sha256 = "152prqad9jszjmm4wwqrq83zk13ypsz09n02nrk1gg0fcxfm7fr2";
+  };
+
+  postConfigure = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile --replace /System/Library/Frameworks/CoreServices.framework/CoreServices "-framework CoreServices"
+  '';
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  makeFlags = [ "DESTDIR=$(out)" ];
+
+  hardeningDisable = [ "fortify" ];
+
+  meta = {
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/font-config-info/default.nix b/nixpkgs/pkgs/tools/misc/font-config-info/default.nix
new file mode 100644
index 000000000000..20133eb0df77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/font-config-info/default.nix
@@ -0,0 +1,47 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, gtk3
+, xsettingsd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "font-config-info";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "derat";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "14z7hg9c7q8wliyqv68kp080mmk2rh6kpww6pn87hy7lwq20l2b7";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    gtk3
+    xsettingsd
+  ];
+
+  postPatch = ''
+    substituteInPlace font-config-info.c --replace "dump_xsettings |" "${xsettingsd}/bin/dump_xsettings |"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D -t $out/bin font-config-info
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Prints a Linux system's font configuration";
+    homepage = "https://github.com/derat/font-config-info";
+    license = with licenses; [ bsd3 ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ romildo ];
+    mainProgram = "font-config-info";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fontfor/default.nix b/nixpkgs/pkgs/tools/misc/fontfor/default.nix
new file mode 100644
index 000000000000..b973317b722e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fontfor/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, pkg-config
+, expat
+, fontconfig
+, freetype
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fontfor";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "7sDream";
+    repo = "fontfor";
+    rev = "v${version}";
+    sha256 = "sha256-/UoZ+5X6Csoyqc+RSP0Hree7NtCDs7BjsqcpALxAazc=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+  buildInputs = [
+    expat
+    fontconfig
+    freetype
+  ];
+
+  cargoHash = "sha256-j1Qf0IKlAUEyiGAUoF7IlEbPIv2pGkn+YMCoFdF9oUE=";
+
+  meta = with lib; {
+    description = "Find fonts which can show a specified character and preview them in browser";
+    homepage = "https://github.com/7sDream/fontfor";
+    license = with licenses; [ gpl3Plus ];
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.linux;
+    mainProgram = "fontfor";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fontforge/default.nix b/nixpkgs/pkgs/tools/misc/fontforge/default.nix
new file mode 100644
index 000000000000..d7a083baaf77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fontforge/default.nix
@@ -0,0 +1,79 @@
+{ stdenv, fetchFromGitHub, lib, fetchpatch
+, cmake, uthash, pkg-config
+, python, freetype, zlib, glib, giflib, libpng, libjpeg, libtiff, libxml2, cairo, pango
+, readline, woff2, zeromq
+, withSpiro ? false, libspiro
+, withGTK ? false, gtk3
+, withGUI ? withGTK
+, withPython ? true
+, withExtras ? true
+, Carbon, Cocoa
+}:
+
+assert withGTK -> withGUI;
+
+stdenv.mkDerivation rec {
+  pname = "fontforge";
+  version = "20230101";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-/RYhvL+Z4n4hJ8dmm+jbA1Ful23ni2DbCRZC5A3+pP0=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2024-25081.CVE-2024-25082.patch";
+      url = "https://github.com/fontforge/fontforge/commit/216eb14b558df344b206bf82e2bdaf03a1f2f429.patch";
+      hash = "sha256-aRnir09FSQMT50keoB7z6AyhWAVBxjSQsTRvBzeBuHU=";
+    })
+  ];
+
+  # use $SOURCE_DATE_EPOCH instead of non-deterministic timestamps
+  postPatch = ''
+    find . -type f -name '*.c' -exec sed -r -i 's#\btime\(&(.+)\)#if (getenv("SOURCE_DATE_EPOCH")) \1=atol(getenv("SOURCE_DATE_EPOCH")); else &#g' {} \;
+    sed -r -i 's#author\s*!=\s*NULL#& \&\& !getenv("SOURCE_DATE_EPOCH")#g'                            fontforge/cvexport.c fontforge/dumppfa.c fontforge/print.c fontforge/svg.c fontforge/splineutil2.c
+    sed -r -i 's#\bb.st_mtime#getenv("SOURCE_DATE_EPOCH") ? atol(getenv("SOURCE_DATE_EPOCH")) : &#g'  fontforge/parsepfa.c fontforge/sfd.c fontforge/svg.c
+    sed -r -i 's#^\s*ttf_fftm_dump#if (!getenv("SOURCE_DATE_EPOCH")) ttf_fftm_dump#g'                 fontforge/tottf.c
+    sed -r -i 's#sprintf\(.+ author \);#if (!getenv("SOURCE_DATE_EPOCH")) &#g'                        fontforgeexe/fontinfo.c
+  '';
+
+  # do not use x87's 80-bit arithmetic, rouding errors result in very different font binaries
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isi686 "-msse2 -mfpmath=sse";
+
+  nativeBuildInputs = [ pkg-config cmake ];
+  buildInputs = [
+    readline uthash woff2 zeromq
+    python freetype zlib glib giflib libpng libjpeg libtiff libxml2
+  ]
+    ++ lib.optionals withSpiro [ libspiro ]
+    ++ lib.optionals withGUI [ gtk3 cairo pango ]
+    ++ lib.optionals stdenv.isDarwin [ Carbon Cocoa ];
+
+  cmakeFlags = [ "-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" ]
+    ++ lib.optional (!withSpiro) "-DENABLE_LIBSPIRO=OFF"
+    ++ lib.optional (!withGUI) "-DENABLE_GUI=OFF"
+    ++ lib.optional (!withGTK) "-DENABLE_X11=ON"
+    ++ lib.optional withExtras "-DENABLE_FONTFORGE_EXTRAS=ON";
+
+  preConfigure = ''
+    # The way $version propagates to $version of .pe-scripts (https://github.com/dejavu-fonts/dejavu-fonts/blob/358190f/scripts/generate.pe#L19)
+    export SOURCE_DATE_EPOCH=$(date -d ${version} +%s)
+  '';
+
+  postInstall =
+    # get rid of the runtime dependency on python
+    lib.optionalString (!withPython) ''
+      rm -r "$out/share/fontforge/python"
+    '';
+
+  meta = with lib; {
+    description = "A font editor";
+    homepage = "https://fontforge.github.io";
+    platforms = platforms.all;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.erictapen ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix b/nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix
new file mode 100644
index 000000000000..ea4acfc5f0bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fontforge/fontforge-fonttools.nix
@@ -0,0 +1 @@
+{ fontforge }: fontforge.override { withExtras = true; }
diff --git a/nixpkgs/pkgs/tools/misc/fortune/default.nix b/nixpkgs/pkgs/tools/misc/fortune/default.nix
new file mode 100644
index 000000000000..516cfc201eb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fortune/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchurl, cmake, recode, perl, rinutils, withOffensive ? false }:
+
+stdenv.mkDerivation rec {
+  pname = "fortune-mod";
+  version = "3.20.0";
+
+  # We use fetchurl instead of fetchFromGitHub because the release pack has some
+  # special files.
+  src = fetchurl {
+    url = "https://github.com/shlomif/fortune-mod/releases/download/${pname}-${version}/${pname}-${version}.tar.xz";
+    sha256 = "sha256-MQG+lfuJxISNSD5ykw2o0D9pJXN6I9eIA9a1XEL+IJQ=";
+  };
+
+  nativeBuildInputs = [ cmake perl rinutils ];
+
+  buildInputs = [ recode ];
+
+  cmakeFlags = [
+    "-DLOCALDIR=${placeholder "out"}/share/fortunes"
+  ] ++ lib.optional (!withOffensive) "-DNO_OFFENSIVE=true";
+
+  patches = [ (builtins.toFile "not-a-game.patch" ''
+    diff --git a/CMakeLists.txt b/CMakeLists.txt
+    index 865e855..5a59370 100644
+    --- a/CMakeLists.txt
+    +++ b/CMakeLists.txt
+    @@ -154,7 +154,7 @@ ENDMACRO()
+     my_exe(
+         "fortune"
+         "fortune/fortune.c"
+    -    "games"
+    +    "bin"
+     )
+
+     my_exe(
+    --
+  '') ];
+
+  postFixup = lib.optionalString (!withOffensive) ''
+    rm $out/share/games/fortunes/men-women*
+  '';
+
+  meta = with lib; {
+    mainProgram = "fortune";
+    description = "A program that displays a pseudorandom message from a database of quotations";
+    license = licenses.bsdOriginal;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ vonfry ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fpart/default.nix b/nixpkgs/pkgs/tools/misc/fpart/default.nix
new file mode 100644
index 000000000000..d72a0bc9f85a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fpart/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, fts }:
+
+stdenv.mkDerivation rec {
+  pname = "fpart";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "martymac";
+    repo = "fpart";
+    rev = "${pname}-${version}";
+    sha256 = "sha256-kAvGLd5W633fRS+qVD/yclreFfcauyLygQGtzv7AP24=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ fts ];
+
+  postInstall = ''
+    sed "s|^FPART_BIN=.*|FPART_BIN=\"$out/bin/fpart\"|" \
+        -i "$out/bin/fpsync"
+  '';
+
+  meta = with lib; {
+    description = "Split file trees into bags (called \"partitions\")";
+    longDescription = ''
+      Fpart is a tool that helps you sort file trees and pack them into bags
+      (called "partitions").
+
+      It splits a list of directories and file trees into a certain number of
+      partitions, trying to produce partitions with the same size and number of
+      files. It can also produce partitions with a given number of files or a
+      limited size.
+
+      Once generated, partitions are either printed as file lists to stdout
+      (default) or to files. Those lists can then be used by third party programs.
+
+      Fpart also includes a live mode, which allows it to crawl very large
+      filesystems and produce partitions in live. Hooks are available to act on
+      those partitions (e.g. immediately start a transfer using rsync(1))
+      without having to wait for the filesystem traversal job to be finished.
+      Used this way, fpart can be seen as a powerful data migration tool.
+    '';
+    homepage = "http://contribs.martymac.org/";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fpp/default.nix b/nixpkgs/pkgs/tools/misc/fpp/default.nix
new file mode 100644
index 000000000000..d8f575b1363b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fpp/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, python3, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "fpp";
+  version = "0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "facebook";
+    repo = "PathPicker";
+    rev = version;
+    sha256 = "sha256-4BkdGvG/RyF3JBnd/X5r5nboEHG4aqahcYHDunMv2zU=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = ''
+    substituteInPlace fpp --replace 'PYTHONCMD="python3"' 'PYTHONCMD="${python3.interpreter}"'
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/fpp $out/bin
+    cp -r fpp src $out/share/fpp
+    ln -s $out/share/fpp/fpp $out/bin/fpp
+    installManPage debian/usr/share/man/man1/fpp.1
+  '';
+
+  meta = {
+    description = "CLI program that accepts piped input and presents files for selection";
+    homepage = "https://facebook.github.io/PathPicker/";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.all;
+    mainProgram = "fpp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fre/default.nix b/nixpkgs/pkgs/tools/misc/fre/default.nix
new file mode 100644
index 000000000000..807529f200dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fre/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fre";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "camdencheek";
+    repo = "fre";
+    rev = "v${version}";
+    hash = "sha256-cYqEPohqUmewvBUoGJQfa4ATxw2uny5+nUKtNzrxK38=";
+  };
+
+  cargoHash = "sha256-BEIrjHsIrNkFEEjCrTKwsJL9hptmVOI8x3ZWoo9ZUvQ=";
+
+  meta = with lib; {
+    description = "A CLI tool for tracking your most-used directories and files";
+    homepage = "https://github.com/camdencheek/fre";
+    changelog = "https://github.com/camdencheek/fre/blob/${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ gaykitty ];
+    mainProgram = "fre";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/frei/default.nix b/nixpkgs/pkgs/tools/misc/frei/default.nix
new file mode 100644
index 000000000000..6e8a2181abb1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/frei/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "frei";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "alexcoder04";
+    repo = "frei";
+    rev = "v${version}";
+    sha256 = "sha256-9CV6B7fRHXl73uI2JRv3RiaFczLHHBOd7/8UoCAwK6w=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Modern replacement for free";
+    homepage = "https://github.com/alexcoder04/frei";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ infinidoge ];
+    mainProgram = "frei";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/freshfetch/Cargo.lock b/nixpkgs/pkgs/tools/misc/freshfetch/Cargo.lock
new file mode 100644
index 000000000000..24cfb7e9de96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/freshfetch/Cargo.lock
@@ -0,0 +1,587 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7404febffaa47dac81aa44dba71523c9d069b1bdc50a77db41195149e17f68e5"
+dependencies = [
+ "memchr",
+]
+
+[[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 = "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 = "bstr"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a40b47ad93e1a5404e6c18dec46b628214fee441c70f4ab5d6942142cc268a3d"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"
+
+[[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",
+]
+
+[[package]]
+name = "clap"
+version = "2.33.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clml_rs"
+version = "0.3.0"
+source = "git+https://github.com/K4rakara/clml-rs#eecf1378f4e85a9b3dc91e8a15d497a2fd75906f"
+dependencies = [
+ "lazy_static",
+ "rand",
+ "regex",
+]
+
+[[package]]
+name = "cmd_lib"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42443b644d30f401746fb4483fba96b13076e1ef6cb5bca7d6a14d1d8f9f2bd9"
+dependencies = [
+ "cmd_lib_core",
+ "cmd_lib_macros",
+]
+
+[[package]]
+name = "cmd_lib_core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c50c50a1536e882455aeaff22015146ea143b9106fc8e116669dd078ec7b7fc8"
+
+[[package]]
+name = "cmd_lib_macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d202b0cfc28d8928ba89138c0a8248cf921b9870c6c9d60c9951092df5b62b2"
+dependencies = [
+ "cmd_lib_core",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b"
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
+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.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2584f639eb95fea8c798496315b297cf81b9b58b6d30ab066a75455333cf4b12"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7e9d99fa91428effe99c5c6d4634cdeba32b8cf784fc428a2a687f61a952c49"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "lazy_static",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+
+[[package]]
+name = "freshfetch"
+version = "0.2.0"
+dependencies = [
+ "chrono",
+ "clap",
+ "clml_rs",
+ "cmd_lib",
+ "cmd_lib_core",
+ "lazy_static",
+ "mlua",
+ "regex",
+ "sysinfo",
+ "term_size",
+ "uname",
+ "users",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "322f4de77956e22ed0e5032c359a0f1273f1f7f0d79bfa3b8ffbc730d7fbcc5c"
+dependencies = [
+ "libc",
+]
+
+[[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.93"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9385f66bf6105b241aa65a61cb923ef20efc665cb9f9bb50ac2f0c4b7f378d41"
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "lua-src"
+version = "543.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029180f994b9b36f47d905f92569b516acf7d073778e2e781c15ee375b1ca27d"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "luajit-src"
+version = "210.1.3+restyfe08842"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36d3de8377d8e0492b646527befb7eb826a9ecd2dc8c1f81ab0e654bc03a029b"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+
+[[package]]
+name = "memoffset"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f83fb6581e8ed1f85fd45c116db8405483899489e38406156c25eb743554361d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mlua"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f2fc8e1085d53b72898c59ceee1980b5826b0c98ce99886b7518f0ead00e5cb"
+dependencies = [
+ "bstr",
+ "cc",
+ "lazy_static",
+ "lua-src",
+ "luajit-src",
+ "num-traits",
+ "pkg-config",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
+dependencies = [
+ "winapi",
+]
+
+[[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 = "once_cell"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a152013215dca273577e18d2bf00fa862b89b24169fb78c4c95aeb07992c9cec"
+dependencies = [
+ "unicode-xid",
+]
+
+[[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 = "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 = "regex"
+version = "1.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24d5f089152e60f62d28b835fbff2cd2e8dc0baf1ac13343bef92ab7eed84548"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "sysinfo"
+version = "0.15.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de94457a09609f33fec5e7fceaf907488967c6c7c75d64da6a7ce6ffdb8b5abd"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "core-foundation-sys",
+ "doc-comment",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "term_size"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "time"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "uname"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8"
+dependencies = [
+ "libc",
+]
+
+[[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 = "users"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa4227e95324a443c9fcb06e03d4d85e91aabe9a5a02aa818688b6918b6af486"
+dependencies = [
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[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"
diff --git a/nixpkgs/pkgs/tools/misc/freshfetch/default.nix b/nixpkgs/pkgs/tools/misc/freshfetch/default.nix
new file mode 100644
index 000000000000..0723c18048b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/freshfetch/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, AppKit
+, CoreFoundation
+, DiskArbitration
+, Foundation
+, IOKit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "freshfetch";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "k4rakara";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1l9zngr5l12g71j85iyph4jjri3crxc2pi9q0gczrrzvs03439mn";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "clml_rs-0.3.0" = "sha256-KTAm0TCNHGeuOmqmLcZfjl2mQmWcCxWaTPOzA38qbUM=";
+    };
+  };
+
+  # freshfetch depends on rust nightly features
+  RUSTC_BOOTSTRAP = 1;
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    AppKit
+    CoreFoundation
+    DiskArbitration
+    Foundation
+    IOKit
+  ];
+
+  meta = with lib; {
+    description = "A fresh take on neofetch";
+    homepage = "https://github.com/k4rakara/freshfetch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "freshfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsearch/default.nix b/nixpkgs/pkgs/tools/misc/fsearch/default.nix
new file mode 100644
index 000000000000..a9e3b6caa352
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsearch/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gtk3
+, pcre2
+, glib
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+, gettext
+, icu
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fsearch";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "cboxdoerfer";
+    repo = pname;
+    rev = version;
+    hash = "sha256-VBcoDxh4ip2zLBcXVHDe9s1lVRQF4bZJKsGUt6sPcos=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+    gettext
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    pcre2
+    icu
+  ];
+
+  preFixup = ''
+    substituteInPlace $out/share/applications/io.github.cboxdoerfer.FSearch.desktop \
+      --replace "Exec=fsearch" "Exec=$out/bin/fsearch"
+  '';
+
+  meta = with lib; {
+    description = "A fast file search utility for Unix-like systems based on GTK+3";
+    homepage = "https://github.com/cboxdoerfer/fsearch.git";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ artturin ];
+    platforms = platforms.unix;
+    mainProgram = "fsearch";
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/fsearch.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fselect/default.nix b/nixpkgs/pkgs/tools/misc/fselect/default.nix
new file mode 100644
index 000000000000..feeb9f3a3d21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fselect/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, installShellFiles, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fselect";
+  version = "0.8.5";
+
+  src = fetchFromGitHub {
+    owner = "jhspetersson";
+    repo = "fselect";
+    rev = version;
+    sha256 = "sha256-gEiKv1YbNNWexNfzUULbe0fT0ueJ9TJojhBHp31i6OY=";
+  };
+
+  cargoHash = "sha256-eqzqIyQHHklxo3aojCvY06TUPSqChoz6yZ2zzpgRNqs=";
+
+  nativeBuildInputs = [ installShellFiles ];
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  postInstall = ''
+    installManPage docs/fselect.1
+  '';
+
+  meta = with lib; {
+    description = "Find files with SQL-like queries";
+    homepage = "https://github.com/jhspetersson/fselect";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "fselect";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsmark/default.nix b/nixpkgs/pkgs/tools/misc/fsmark/default.nix
new file mode 100644
index 000000000000..2c2aa2c6fef8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsmark/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "fsmark";
+  version = "3.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/fsmark/${version}/fs_mark-${version}.tar.gz";
+    sha256 = "15f8clcz49qsfijdmcz165ysp8v4ybsm57d3dxhhlnq1bp1i9w33";
+  };
+
+  patchPhase = ''
+    sed -i Makefile -e 's/-static //'
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp fs_mark $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Synchronous write workload file system benchmark";
+    homepage = "https://sourceforge.net/projects/fsmark/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "fs_mark";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsmon/default.nix b/nixpkgs/pkgs/tools/misc/fsmon/default.nix
new file mode 100644
index 000000000000..f704de4f6515
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsmon/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fsmon";
+  version = "1.8.5";
+
+  src = fetchFromGitHub {
+    owner = "nowsecure";
+    repo = "fsmon";
+    rev = "refs/tags/${version}";
+    hash = "sha256-vAlAnGeFMgLIKaqUusBV7QalYh0+dZdifUvZwebk65U=";
+  };
+
+  installPhase = ''
+    make install PREFIX=$out
+  '';
+
+  meta = with lib; {
+    description = "FileSystem Monitor utility";
+    homepage = "https://github.com/nowsecure/fsmon";
+    changelog = "https://github.com/nowsecure/fsmon/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "fsmon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsql/default.nix b/nixpkgs/pkgs/tools/misc/fsql/default.nix
new file mode 100644
index 000000000000..d9f3b3ae8f90
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsql/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "fsql";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "kshvmdn";
+    repo = "fsql";
+    rev = "v${version}";
+    sha256 = "sha256-U6TPszqsZvoz+9GIB0wNYMRJqIDLOp/BZO3/k8FC0Gs=";
+  };
+
+  vendorHash = "sha256-+laTnx6Xkrv3QQel5opqYQSuFmo54UMI2A653xbBWzQ=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Search through your filesystem with SQL-esque queries";
+    homepage = "https://github.com/kshvmdn/fsql";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "fsql";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fsrx/default.nix b/nixpkgs/pkgs/tools/misc/fsrx/default.nix
new file mode 100644
index 000000000000..63f3b9728f1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fsrx/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, rustPlatform, testers, fsrx }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fsrx";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "thatvegandev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hzfpjunP20WCt3erYu7AO7A3nz+UMKdFzWUA5jASbVA=";
+  };
+
+  cargoSha256 = "sha256-bRStmz2sJnhCKpvoQfc/ZP9B2ZdNHYNEHd+wZErdS1Y=";
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = fsrx;
+    };
+  };
+
+  meta = with lib; {
+    description = "A flow state reader in the terminal";
+    homepage = "https://github.com/thatvegandev/fsrx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ MoritzBoehme ];
+    mainProgram = "fsrx";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fuc/default.nix b/nixpkgs/pkgs/tools/misc/fuc/default.nix
new file mode 100644
index 000000000000..f94895dcf357
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fuc/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, clippy
+, rustfmt
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fuc";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "SUPERCILEX";
+    repo = "fuc";
+    rev = version;
+    hash = "sha256-7hXSw79hIxfPRm7nSQhdG3/M9cZ+hN4X0kRHR2PDK0U=";
+  };
+
+  cargoHash = "sha256-hnfH8ET4PVbi5qzXxa3gbOHYnlVqXA15efUefF+6zfs=";
+
+  RUSTC_BOOTSTRAP = 1;
+
+  cargoBuildFlags = [ "--workspace" "--bin cpz" "--bin rmz" ];
+
+  nativeCheckInputs = [ clippy rustfmt ];
+
+  meta = with lib; {
+    description = "Modern, performance focused unix commands";
+    homepage = "https://github.com/SUPERCILEX/fuc";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fw/default.nix b/nixpkgs/pkgs/tools/misc/fw/default.nix
new file mode 100644
index 000000000000..54d263fc112f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fw/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libgit2
+, openssl
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fw";
+  version = "2.19.1";
+
+  src = fetchFromGitHub {
+    owner = "brocode";
+    repo = "fw";
+    rev = "v${version}";
+    hash = "sha256-fG1N/3Er7BvXOJTMGooaIMa5I9iNwnH+1om2jcWkI68=";
+  };
+
+  cargoHash = "sha256-1d2uX/A1HZAmAI3d0iet1NkG0IFuJpVnhWxpY0jVVUI=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libgit2
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  env = {
+    OPENSSL_NO_VENDOR = true;
+  };
+
+  meta = with lib; {
+    description = "A workspace productivity booster";
+    homepage = "https://github.com/brocode/fw";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "fw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fwup/default.nix b/nixpkgs/pkgs/tools/misc/fwup/default.nix
new file mode 100644
index 000000000000..904aca205214
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fwup/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, DiskArbitration
+, pkg-config
+, bzip2
+, libarchive
+, libconfuse
+, libsodium
+, xz
+, zlib
+, coreutils
+, dosfstools
+, mtools
+, unzip
+, zip
+, which
+, xdelta
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fwup";
+  version = "1.10.2";
+
+  src = fetchFromGitHub {
+    owner = "fhunleth";
+    repo = "fwup";
+    rev = "v${version}";
+    sha256 = "sha256-SuagtYfLD8yXFpLHNl1J0m5/iapYU+Si6tJl0paStTY=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    bzip2
+    libarchive
+    libconfuse
+    libsodium
+    xz
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    DiskArbitration
+  ];
+
+  propagatedBuildInputs = [
+    coreutils
+    unzip
+    zip
+  ] ++ lib.optionals doCheck [
+    mtools
+    dosfstools
+  ];
+
+  nativeCheckInputs = [
+    which
+    xdelta
+  ];
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Configurable embedded Linux firmware update creator and runner";
+    homepage = "https://github.com/fhunleth/fwup";
+    license = licenses.asl20;
+    maintainers = [ maintainers.georgewhewell ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fx-cast-bridge/default.nix b/nixpkgs/pkgs/tools/misc/fx-cast-bridge/default.nix
new file mode 100644
index 000000000000..722905df951f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fx-cast-bridge/default.nix
@@ -0,0 +1,58 @@
+{ lib, buildNpmPackage, fetchFromGitHub, avahi-compat, nodejs_18, python3 }:
+
+buildNpmPackage rec {
+  pname = "fx-cast-bridge";
+  version = "0.3.1";
+
+  nodejs = nodejs_18;
+
+  src = fetchFromGitHub {
+    owner = "hensm";
+    repo = "fx_cast";
+    rev = "v${version}";
+    hash = "sha256-hB4NVJW2exHoKsMp0CKzHerYgj8aR77rV+ZsCoWA1Dg=";
+  };
+  sourceRoot = "${src.name}/app";
+  npmDepsHash = "sha256-GLrDRZqKcX1PDGREx+MLZ1TEjr88r9nz4TvZ9nvo40g=";
+
+  nativeBuildInputs = [ python3 ];
+  buildInputs = [ avahi-compat ];
+
+  postPatch = ''
+    substituteInPlace bin/lib/paths.js \
+      --replace "../../../" "../../"
+  '';
+
+  dontNpmInstall = true;
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,lib/mozilla/native-messaging-hosts}
+
+    substituteInPlace dist/app/fx_cast_bridge.json \
+      --replace "$(realpath dist/app/fx_cast_bridge.sh)" "$out/bin/fx_cast_bridge"
+    mv dist/app/fx_cast_bridge.json $out/lib/mozilla/native-messaging-hosts
+
+    rm dist/app/fx_cast_bridge.sh
+    mv dist/app $out/lib/fx_cast_bridge
+    mv node_modules $out/lib/fx_cast_bridge/node_modules
+
+    echo "#! /bin/sh
+    NODE_PATH=\"$out/lib/node_modules\" \\
+      exec ${nodejs}/bin/node \\
+      $out/lib/fx_cast_bridge/src/main.js \\
+      --_name fx_cast_bridge \"\$@\"
+    " >$out/bin/fx_cast_bridge
+    chmod +x $out/bin/fx_cast_bridge
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Implementation of the Chrome Sender API (Chromecast) within Firefox";
+    homepage = "https://hensm.github.io/fx_cast/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "fx_cast_bridge";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix
new file mode 100644
index 000000000000..fba442e4aa0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, lib, fetchzip, substituteAll, dpkg, autoPatchelfHook, cups, tcl, tk, xorg, makeWrapper }:
+let
+  debPlatform =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "amd64"
+    else if stdenv.hostPlatform.system == "i686-linux" then "i386"
+         else throw "Unsupported system: ${stdenv.hostPlatform.system}";
+in
+stdenv.mkDerivation rec {
+  pname = "fxlinuxprintutil";
+  version = "1.1.1-1";
+
+  # https://support-fb.fujifilm.com/driver_downloads/fxlinuxpdf112119031.zip is gone
+  src = fetchzip {
+    url = "https://github.com/NixOS/nixpkgs/files/12232817/fxlinuxpdf112119031.zip";
+    sha256 = "1mv07ch6ysk9bknfmjqsgxb803sj6vfin29s9knaqv17jvgyh0n3";
+  };
+
+  patches = [
+    # replaces references to “path/to/fxlputil” via $0 that are broken by our wrapProgram
+    # with /nix/store/fxlinuxprintutil/bin/fxlputil
+    ./fxlputil.patch
+
+    # replaces the code that looks for Tcl packages in the working directory and /usr/lib
+    # or /usr/lib64 with /nix/store/fxlinuxprintutil/lib
+    ./fxlputil.tcl.patch
+
+    # replaces the code that looks for X11’s locale.alias in /usr/share/X11/locale or
+    # /usr/lib/X11/locale with /nix/store/libX11/share/X11/locale
+    (substituteAll {
+      src = ./fxlocalechk.tcl.patch;
+      inherit (xorg) libX11;
+    })
+  ];
+
+  nativeBuildInputs = [ dpkg autoPatchelfHook makeWrapper ];
+  buildInputs = [ cups tcl tk ];
+
+  sourceRoot = ".";
+  unpackCmd = "dpkg-deb -x $curSrc/${pname}_${version}_${debPlatform}.deb .";
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out
+    mv usr/bin $out
+    mv usr/lib $out
+
+    wrapProgram $out/bin/fxlputil --prefix PATH : ${lib.makeBinPath [ tcl tk ]}
+  '';
+
+  meta = with lib; {
+    description = "Optional configuration tool for fxlinuxprint";
+    homepage = "https://onlinesupport.fujixerox.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ delan ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch
new file mode 100644
index 000000000000..fbf211065e9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlocalechk.tcl.patch
@@ -0,0 +1,18 @@
+diff --git a/usr/bin/fxlocalechk.tcl b/usr/bin/fxlocalechk.tcl
+index f0ebc6c..c3486fe 100755
+--- a/usr/bin/fxlocalechk.tcl
++++ b/usr/bin/fxlocalechk.tcl
+@@ -12,12 +12,7 @@
+ #THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ 
+ #i18N
+-#---- check locale with environment variable
+-set locale_alias_path  /usr/share/X11/locale
+-
+-if {[file exists $locale_alias_path/locale.alias] != 1} {
+-    set locale_alias_path /usr/lib/X11/locale
+-}
++set locale_alias_path @libX11@/share/X11/locale
+ 
+ proc conv_locale {alias} {
+     global env envL locale_alias_path
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch
new file mode 100644
index 000000000000..972152b2cc3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.patch
@@ -0,0 +1,28 @@
+diff --git a/usr/bin/fxlputil b/usr/bin/fxlputil
+index cdac66d..aa86d02 100755
+--- a/usr/bin/fxlputil
++++ b/usr/bin/fxlputil
+@@ -7,17 +7,19 @@
+ #	TCL=`which fxlputil`
+ #fi
+ 
++wrapper=$(dirname $0)/fxlputil
++
+ #set LC_ALL
+-locale=`tclsh $0lo.tcl`
++locale=`tclsh ${wrapper}lo.tcl`
+ 
+ case $locale in
+ 	"ja")
+-		env LC_ALL=ja_JP.UTF-8 wish $0.tcl $1
++		env LC_ALL=ja_JP.UTF-8 wish ${wrapper}.tcl $1
+ 		;;
+ 	"en")
+-		env LC_ALL=en_US.ISO8859-1 wish $0.tcl $1
++		env LC_ALL=en_US.ISO8859-1 wish ${wrapper}.tcl $1
+ 		;;
+ 	*)
+-		env LC_ALL=C wish $0.tcl $1
++		env LC_ALL=C wish ${wrapper}.tcl $1
+ 		;;
+ esac
diff --git a/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch
new file mode 100644
index 000000000000..2bfbab450cb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fxlinuxprintutil/fxlputil.tcl.patch
@@ -0,0 +1,21 @@
+diff --git a/usr/bin/fxlputil.tcl b/usr/bin/fxlputil.tcl
+index 02eeaf6..788ed5a 100755
+--- a/usr/bin/fxlputil.tcl
++++ b/usr/bin/fxlputil.tcl
+@@ -25,14 +25,8 @@ catch {namespace import combobox::*}
+ 
+ 
+ 
+-lappend auto_path $cwd
+-
+-if {[lsearch $auto_path /usr/lib] == -1} {
+-	lappend auto_path /usr/lib
+-}
+-if {[lsearch $auto_path /usr/lib64] == -1} {
+-	lappend auto_path /usr/lib64
+-}
++# https://stackoverflow.com/a/23287132
++lappend auto_path [file join [file dirname [file dirname [info script]]] lib]
+ 
+ package require fxlputil
+ 
diff --git a/nixpkgs/pkgs/tools/misc/fzy/default.nix b/nixpkgs/pkgs/tools/misc/fzy/default.nix
new file mode 100644
index 000000000000..b7186e08d3db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/fzy/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "fzy";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "jhawthorn";
+    repo = "fzy";
+    rev = version;
+    sha256 = "1gkzdvj73f71388jvym47075l9zw61v6l8wdv2lnc0mns6dxig0k";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A better fuzzy finder";
+    homepage = "https://github.com/jhawthorn/fzy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dywedir ];
+    platforms = platforms.all;
+    mainProgram = "fzy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/g203-led/default.nix b/nixpkgs/pkgs/tools/misc/g203-led/default.nix
new file mode 100644
index 000000000000..f2db4f58d591
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/g203-led/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv
+, fetchFromGitHub
+, python3
+}:
+stdenv.mkDerivation rec {
+  pname = "g203-led";
+  version = "unstable-2021-05-08";
+  src = fetchFromGitHub {
+    owner = "smasty";
+    repo = pname;
+    rev = "f9d10ba3aa8f9359f928bbab0a2ea00cefc69f4b";
+    sha256 = "1fhaimci80xmihg84bgrml61zr56pi9rkxfbs13vvw9dwjf031k0";
+  };
+
+  buildInputs = [
+    (python3.withPackages (ps: with ps; [
+      pyusb
+    ]))
+  ];
+
+  postPatch = ''
+    patchShebangs g203-led.py
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D g203-led.py $out/bin/g203-led
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Logitech G203 Prodigy / G203 LightSync Mouse LED control for Linux";
+    longDescription = ''
+      Allows you to control the LED lighting of your G203 Prodigy
+      or G203 LightSync Mouse programmatically.
+      Inspired by and based on g810-led.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ r-burns ];
+    homepage = "https://github.com/smasty/g203-led";
+    platforms = platforms.linux;
+    mainProgram = "g203-led";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/g933-utils/default.nix b/nixpkgs/pkgs/tools/misc/g933-utils/default.nix
new file mode 100644
index 000000000000..de084fb74bf4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/g933-utils/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, rustPlatform, udev, pkg-config }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "g933-utils";
+  version = "unstable-2021-11-19";
+
+  src = fetchFromGitHub {
+    owner = "ashkitten";
+    repo = "g933-utils";
+    rev = "1fc8cec375ed0d6f72191eadec788a49f51032d1";
+    sha256 = "sha256-kGLMRqZHzRuXQNTjIuLz8JPC1c/ZK38msfkTIVnaomg=";
+  };
+
+  cargoSha256 = "sha256-FBX5hrS8tNWN83XX+x+s/mYyvO1h6V63bXCx7y0R8bY=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ udev ];
+
+  meta = with lib; {
+    description = "An application to configure Logitech wireless G933/G533 headsets";
+    homepage = "https://github.com/ashkitten/g933-utils";
+    license = licenses.mit;
+    maintainers = with maintainers; [ seqizz ];
+    platforms = platforms.linux;
+    mainProgram = "g933-utils";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gams/default.nix b/nixpkgs/pkgs/tools/misc/gams/default.nix
new file mode 100644
index 000000000000..be71618aae20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gams/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, unzip, file, licenseFile ? null, optgamsFile ? null}:
+
+assert licenseFile != null;
+
+stdenv.mkDerivation rec {
+  version = "25.0.2";
+  pname = "gams";
+  src = fetchurl {
+    url = "https://d37drm4t2jghv5.cloudfront.net/distributions/${version}/linux/linux_x64_64_sfx.exe";
+    sha256 = "4f95389579f33ff7c2586838a2c19021aa0746279555cbb51aa6e0efd09bd297";
+  };
+  unpackCmd = "unzip $src";
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ file ];
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/share/gams"
+    cp -a * "$out/share/gams"
+
+    cp ${licenseFile} $out/share/gams/gamslice.txt
+  '' + lib.optionalString (optgamsFile != null) ''
+    cp ${optgamsFile} $out/share/gams/optgams.def
+    ln -s $out/share/gams/optgams.def $out/bin/optgams.def
+  '';
+
+  postFixup = ''
+    for f in $out/share/gams/*; do
+      if [[ -x $f ]] && [[ -f $f ]] && [[ ! $f =~ .*\.so$ ]]; then
+        if patchelf \
+          --set-rpath "$out/share/gams" \
+          --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) $f; then
+          ln -s $f $out/bin/$(basename $f)
+        fi
+      fi
+    done
+  '';
+
+  meta = with lib;{
+    description = "General Algebraic Modeling System";
+    longDescription = ''
+      The General Algebraic Modeling System is a high-level modeling system for mathematical optimization.
+      GAMS is designed for modeling and solving linear, nonlinear, and mixed-integer optimization problems.
+    '';
+    homepage = "https://www.gams.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.Scriptkiddi ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/gaphor/default.nix b/nixpkgs/pkgs/tools/misc/gaphor/default.nix
new file mode 100644
index 000000000000..48f9fa7a7bba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gaphor/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, copyDesktopItems
+, gobject-introspection
+, poetry-core
+, wrapGAppsHook
+, gtksourceview4
+, pango
+, gaphas
+, generic
+, jedi
+, pycairo
+, pygobject3
+, tinycss2
+, gtk3
+, librsvg
+, makeDesktopItem
+, python
+}:
+
+buildPythonApplication rec {
+  pname = "gaphor";
+  version = "2.8.2";
+
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-+qqsSLjdY2I19fxdfkOEQ9DhTTHccUDll4O5yqtLiz0=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    gobject-introspection
+    poetry-core
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtksourceview4
+    pango
+  ];
+
+  propagatedBuildInputs = [
+    gaphas
+    generic
+    jedi
+    pycairo
+    pygobject3
+    tinycss2
+  ];
+
+  desktopItems = makeDesktopItem {
+    name = pname;
+    exec = "gaphor";
+    icon = "gaphor";
+    comment = meta.description;
+    desktopName = "Gaphor";
+  };
+
+  # Disable automatic wrapGAppsHook to prevent double wrapping
+  dontWrapGApps = true;
+
+  postInstall = ''
+    install -Dm644 $out/${python.sitePackages}/gaphor/ui/icons/hicolor/scalable/apps/org.gaphor.Gaphor.svg $out/share/pixmaps/gaphor.svg
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}" \
+      --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+      --set GDK_PIXBUF_MODULE_FILE "${librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache"
+    )
+  '';
+
+  meta = with lib; {
+    description = "Simple modeling tool written in Python";
+    maintainers = with maintainers; [ wolfangaukang ];
+    homepage = "https://github.com/gaphor/gaphor";
+    license = licenses.asl20;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gavin-bc/default.nix b/nixpkgs/pkgs/tools/misc/gavin-bc/default.nix
new file mode 100644
index 000000000000..ad8364d41ce4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gavin-bc/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, stdenv
+, fetchFromGitea
+, editline
+, readline
+, historyType ? "internal"
+, predefinedBuildType ? "BSD"
+}:
+
+assert lib.elem historyType [ "editline" "readline" "internal" ];
+assert lib.elem predefinedBuildType [ "BSD" "GNU" "GDH" "DBG" "" ];
+stdenv.mkDerivation (finalAttrs: {
+  pname = "gavin-bc";
+  version = "6.5.0";
+
+  src = fetchFromGitea {
+    domain = "git.gavinhoward.com";
+    owner = "gavin";
+    repo = "bc";
+    rev = finalAttrs.version;
+    hash = "sha256-V0L5OmpcI0Zu5JvESjuhp4wEs5Bu/CvjF6B5WllTEqo=";
+  };
+
+  buildInputs =
+    (lib.optional (historyType == "editline") editline)
+    ++ (lib.optional (historyType == "readline") readline);
+
+  configureFlags = [
+    "--disable-nls"
+  ]
+  ++ (lib.optional (predefinedBuildType != "") "--predefined-build-type=${predefinedBuildType}")
+  ++ (lib.optional (historyType == "editline") "--enable-editline")
+  ++ (lib.optional (historyType == "readline") "--enable-readline")
+  ++ (lib.optional (historyType == "internal") "--enable-internal-history");
+
+  meta = {
+    homepage = "https://git.gavinhoward.com/gavin/bc";
+    description = "Gavin Howard's BC calculator implementation";
+    changelog = "https://git.gavinhoward.com/gavin/bc/raw/tag/${finalAttrs.version}/NEWS.md";
+    license = lib.licenses.bsd2;
+    maintainers = [ lib.maintainers.AndersonTorres ];
+    platforms = lib.platforms.unix;
+    broken = stdenv.isDarwin;
+  };
+})
+# TODO: cover most of configure settings
diff --git a/nixpkgs/pkgs/tools/misc/gay/default.nix b/nixpkgs/pkgs/tools/misc/gay/default.nix
new file mode 100644
index 000000000000..d1129702f867
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gay/default.nix
@@ -0,0 +1,22 @@
+{ lib,
+  python3,
+  fetchPypi,
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gay";
+  version = "1.2.9";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-x+RVVgQvJwV5j7DLYS7AnXb4OMJ4v+l0awUuonQIgzY=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/ms-jpq/gay";
+    description = "Colour your text / terminal to be more gay";
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres CodeLongAndProsper90 ];
+    mainProgram = "gay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gazelle-origin/default.nix b/nixpkgs/pkgs/tools/misc/gazelle-origin/default.nix
new file mode 100644
index 000000000000..924c0ba8df7b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gazelle-origin/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, bencoder
+, pyyaml
+, requests
+}:
+buildPythonApplication rec {
+  pname = "gazelle-origin";
+  version = "3.0.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    # Use the spinfast319 fork, since it seems that upstream
+    # at <https://github.com/x1ppy/gazelle-origin> is inactive
+    owner = "spinfast319";
+    rev = version;
+    hash = "sha256-+yMKnfG2f+A1/MxSBFLaHfpCgI2m968iXqt+2QanM/c=";
+  };
+
+  propagatedBuildInputs = [
+    bencoder
+    pyyaml
+    requests
+  ];
+
+  pythonImportsCheck = [ "gazelleorigin" ];
+
+  meta = with lib; {
+    description = "Tool for generating origin files using the API of Gazelle-based torrent trackers";
+    homepage = "https://github.com/spinfast319/gazelle-origin";
+    # TODO license is unspecified in the upstream, as well as the fork
+    license = licenses.unfree;
+    maintainers = with maintainers; [ somasis ];
+    mainProgram = "gazelle-origin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch b/nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch
new file mode 100644
index 000000000000..9c437deca07c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gbdfed/Makefile.patch
@@ -0,0 +1,15 @@
+diff --git "a/Makefile.in" "b/Makefile.in"
+index b482958..472b8da 100644
+--- "a/Makefile.in"
++++ "b/Makefile.in"
+@@ -27,9 +27,7 @@ MKINSTALLDIRS = ./mkinstalldirs
+ CC = @CC@
+ CFLAGS = @XX_CFLAGS@ @CFLAGS@
+ 
+-DEFINES = @DEFINES@ -DG_DISABLE_DEPRECATED \
+-	-DGDK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED \
+-	-DGTK_DISABLE_DEPRECATED
++DEFINES = @DEFINES@
+ 
+ SRCS = bdf.c \
+        bdfcons.c \
diff --git a/nixpkgs/pkgs/tools/misc/gbdfed/default.nix b/nixpkgs/pkgs/tools/misc/gbdfed/default.nix
new file mode 100644
index 000000000000..0d709117b924
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gbdfed/default.nix
@@ -0,0 +1,33 @@
+ { lib, stdenv, fetchurl, pkg-config, freetype, gtk }:
+
+stdenv.mkDerivation rec {
+  version = "1.6";
+  pname = "gbdfed";
+
+  src = fetchurl {
+    url = "http://sofia.nmsu.edu/~mleisher/Software/gbdfed/${pname}-${version}.tar.bz2";
+    sha256 = "0g09k6wim58hngxncq2brr7mwjm92j3famp0vs4b3p48wr65vcjx";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ freetype gtk ];
+
+  patches = [ ./Makefile.patch ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    description = "Bitmap Font Editor";
+    longDescription = ''
+      gbdfed lets you interactively create new bitmap font files or modify existing ones.
+      It allows editing multiple fonts and multiple glyphs,
+      it allows cut and paste operations between fonts and glyphs and editing font properties.
+      The editor works natively with BDF fonts.
+    '';
+    homepage = "http://sofia.nmsu.edu/~mleisher/Software/gbdfed/";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.linquize ];
+    platforms = lib.platforms.all;
+    mainProgram = "gbdfed";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/geekbench/4.nix b/nixpkgs/pkgs/tools/misc/geekbench/4.nix
new file mode 100644
index 000000000000..789f92babf80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/geekbench/4.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, addOpenGLRunpath
+, makeWrapper
+, ocl-icd
+, vulkan-loader
+}:
+
+stdenv.mkDerivation rec {
+  pname = "geekbench";
+  version = "4.4.4";
+
+  src = fetchurl {
+    url = "https://cdn.geekbench.com/Geekbench-${version}-Linux.tar.gz";
+    sha256 = "sha256-KVsBE0ueWewmoVY/vzxX2sKhRTzityPNR+wmTwZBWiI=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
+  buildInputs = [ stdenv.cc.cc ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r geekbench.plar geekbench4 geekbench_x86_64 $out/bin
+
+    for f in geekbench4 geekbench_x86_64 ; do
+      wrapProgram $out/bin/$f \
+        --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
+          addOpenGLRunpath.driverLink
+          ocl-icd
+          vulkan-loader
+       ]}"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform benchmark";
+    homepage = "https://geekbench.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.michalrus ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "geekbench4";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/geekbench/5.nix b/nixpkgs/pkgs/tools/misc/geekbench/5.nix
new file mode 100644
index 000000000000..49efe2ea0bf9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/geekbench/5.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, addOpenGLRunpath
+, makeWrapper
+, ocl-icd
+, vulkan-loader
+}:
+
+let
+  inherit (stdenv.hostPlatform.uname) processor;
+  version = "5.5.1";
+  sources = {
+    "x86_64-linux" = {
+      url = "https://cdn.geekbench.com/Geekbench-${version}-Linux.tar.gz";
+      hash = "sha256-MgN+VcPcjzYP4Wt/uxiNMTh+p1mA5I2M8CgzDjI5xAQ=";
+    };
+    "aarch64-linux" = {
+      url = "https://cdn.geekbench.com/Geekbench-${version}-LinuxARMPreview.tar.gz";
+      hash = "sha256-nrPKnsMqvw6+HGQAKxkQi/6lPEEca1VrDCaJUUuMvW8=";
+    };
+  };
+in
+stdenv.mkDerivation {
+  inherit version;
+  pname = "geekbench";
+
+  src = fetchurl (sources.${stdenv.system} or (throw "unsupported system ${stdenv.hostPlatform.system}"));
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
+
+  buildInputs = [ stdenv.cc.cc.lib ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r geekbench.plar geekbench5 geekbench_${processor} $out/bin
+
+    for f in geekbench5 geekbench_${processor} ; do
+      wrapProgram $out/bin/$f \
+        --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
+          addOpenGLRunpath.driverLink
+          ocl-icd
+          vulkan-loader
+       ]}"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform benchmark";
+    homepage = "https://geekbench.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.michalrus ];
+    platforms = builtins.attrNames sources;
+    mainProgram = "geekbench5";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/geekbench/6.nix b/nixpkgs/pkgs/tools/misc/geekbench/6.nix
new file mode 100644
index 000000000000..373d93dc193c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/geekbench/6.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, addOpenGLRunpath
+, makeWrapper
+, ocl-icd
+, vulkan-loader
+}:
+
+let
+  inherit (stdenv.hostPlatform.uname) processor;
+  version = "6.2.0";
+  sources = {
+    "x86_64-linux" = {
+      url = "https://cdn.geekbench.com/Geekbench-${version}-Linux.tar.gz";
+      hash = "sha256-QoxSw825qqx1vzhzW9TZg03BPNvgOCokBWARGUhjCGY=";
+    };
+    "aarch64-linux" = {
+      url = "https://cdn.geekbench.com/Geekbench-${version}-LinuxARMPreview.tar.gz";
+      hash = "sha256-m2uz5Rk34rm9Bx3j5FjFigOIKaj2c4I+uXKzU4cK4D4=";
+    };
+  };
+  geekbench_avx2 = lib.optionalString stdenv.isx86_64 "geekbench_avx2";
+in
+stdenv.mkDerivation {
+  inherit version;
+  pname = "geekbench";
+
+  src = fetchurl (sources.${stdenv.system} or (throw "unsupported system ${stdenv.hostPlatform.system}"));
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
+
+  buildInputs = [ stdenv.cc.cc.lib ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r geekbench.plar geekbench-workload.plar geekbench6 geekbench_${processor} ${geekbench_avx2} $out/bin
+
+    for f in geekbench6 geekbench_${processor} ${geekbench_avx2} ; do
+      wrapProgram $out/bin/$f \
+        --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
+          addOpenGLRunpath.driverLink
+          ocl-icd
+          vulkan-loader
+        ]}"
+    done
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform benchmark";
+    homepage = "https://geekbench.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.michalrus ];
+    platforms = builtins.attrNames sources;
+    mainProgram = "geekbench6";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/geteltorito/default.nix b/nixpkgs/pkgs/tools/misc/geteltorito/default.nix
new file mode 100644
index 000000000000..5fb2209ee8c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/geteltorito/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, perl, ronn, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "geteltorito";
+  version = "0.6";
+
+  src = fetchurl {
+    url = "https://userpages.uni-koblenz.de/~krienke/ftp/noarch/geteltorito/geteltorito-${version}.tar.gz";
+    sha256 = "1gkbm9ahj2mgqrkrfpibzclsriqgsbsvjh19fr815vpd9f6snkxv";
+  };
+
+  buildInputs = [ perl ronn ];
+
+  unpackCmd = "";
+  dontBuild = true;
+  configurePhase = "";
+  installPhase = ''
+    # reformat README to ronn markdown
+    cat > README.new <<EOF
+    geteltorito -- ${meta.description}
+    ===========
+
+    ## SYNOPSIS
+
+    EOF
+
+    # skip the first two lines
+    # -e reformat function call
+    # -e reformat example
+    # -e make everything else (that is no code) that contains `: ` a list item
+    tail -n +3 README | sed \
+        -e 's/^\(call:\s*\)\(getelt.*\)$/\1`\2`/' \
+        -e 's/^\(example:\s*\)\(getelt.*\)$/\1 `\2`/' \
+        -e 's/^\(.*: \)/- \1/g' \
+           >> README.new
+    mkdir -p $out/man/man1
+    ronn --roff README.new --pipe > $out/man/man1/geteltorito.1
+    install -vD geteltorito $out/bin/geteltorito
+  '';
+
+  meta = with lib; {
+    description = "Extract the initial/default boot image from a CD image if existent";
+    homepage = "https://userpages.uni-koblenz.de/~krienke/ftp/noarch/geteltorito/";
+    maintainers = [ maintainers.Profpatsch ];
+    license = licenses.gpl2;
+    mainProgram = "geteltorito";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/getopt/default.nix b/nixpkgs/pkgs/tools/misc/getopt/default.nix
new file mode 100644
index 000000000000..6b6cbf66b13f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/getopt/default.nix
@@ -0,0 +1,28 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "getopt";
+  version = "1.1.6";
+  src = fetchurl {
+    url = "http://frodo.looijaard.name/system/files/software/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1zn5kp8ar853rin0ay2j3p17blxy16agpp8wi8wfg4x98b31vgyh";
+  };
+
+  # This should be fine on Linux and Darwin. Clang 16 requires it because otherwise getopt will
+  # attempt to use C library functions without declaring them, which is raised as an error.
+  env.NIX_CFLAGS_COMPILE = "-D__GNU_LIBRARY__";
+
+  makeFlags = [
+    "WITHOUT_GETTEXT=1"
+    "LIBCGETOPT=0"
+    "prefix=${placeholder "out"}"
+    "CC:=$(CC)"
+  ];
+
+  meta = {
+    platforms = lib.platforms.unix;
+    homepage = "http://frodo.looijaard.name/project/getopt";
+    description = "Parses command-line arguments from shell scripts";
+    mainProgram = "getopt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/getoptions/default.nix b/nixpkgs/pkgs/tools/misc/getoptions/default.nix
new file mode 100644
index 000000000000..9860430515e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/getoptions/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenvNoCC, fetchFromGitHub, shellspec, busybox-sandbox-shell, ksh, mksh, yash, zsh }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "getoptions";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "ko1nksm";
+    repo = "getoptions";
+    rev = "v${version}";
+    hash = "sha256-kUQ0dPjPr/A/btgFQu13ZLklnI284Ij74hCYbGgzF3A=";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  doCheck = true;
+
+  nativeCheckInputs = [ shellspec ksh mksh yash zsh ]
+    ++ lib.lists.optional (!stdenvNoCC.isDarwin) busybox-sandbox-shell;
+
+  # Disable checks against yash, since shellspec seems to be broken for yash>=2.54
+  # (see: https://github.com/NixOS/nixpkgs/pull/218264#pullrequestreview-1434402054)
+  preCheck = ''
+    sed -i '/shellspec -s posh/d' Makefile
+    sed -i '/shellspec -s yash/d' Makefile
+    '' + lib.strings.optionalString stdenvNoCC.isDarwin ''
+    sed -i "/shellspec -s 'busybox ash'/d" Makefile
+  '';
+
+  checkTarget = "testall";
+
+  meta = with lib; {
+    description = "An elegant option/argument parser for shell scripts (full support for bash and all POSIX shells)";
+    homepage = "https://github.com/ko1nksm/getoptions";
+    license = licenses.cc0;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ matrss ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-actions-cache/default.nix b/nixpkgs/pkgs/tools/misc/gh-actions-cache/default.nix
new file mode 100644
index 000000000000..2575beabf82a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-actions-cache/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "gh-actions-cache";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "actions";
+    repo = "gh-actions-cache";
+    rev = "v${version}";
+    hash = "sha256-GVha3xxLTBTiKfAjGb2q9btsGYzWQivGLyZ4Gg0s/N0=";
+  };
+
+  vendorHash = "sha256-4/Zt+ga3abEPtR0FjWIsDpOiG1bfVtVuLuXP8aHbzqk=";
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  # Needed for tests.
+  # https://github.com/actions/gh-actions-cache/issues/53#issuecomment-1464954495
+  env.GH_TOKEN = "dummy-token-to-facilitate-rest-client";
+
+  meta = {
+    description = "gh extension to manage GitHub Actions caches";
+    homepage = "https://github.com/actions/gh-actions-cache";
+    changelog = "https://github.com/actions/gh-actions-cache/releases/tag/${src.rev}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ amesgen ];
+    mainProgram = "gh-actions-cache";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-cal/default.nix b/nixpkgs/pkgs/tools/misc/gh-cal/default.nix
new file mode 100644
index 000000000000..98334e0afd55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-cal/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, pkg-config
+, openssl
+, Security
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "gh-cal";
+  version = "0.1.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-x9DekflZoXxH964isWCi6YuV3v/iIyYOuRYVgKaUBx0=";
+  };
+
+  cargoSha256 = "sha256-73gqk0DjhaLGIEP5VQQlubPomxHQyg4RnY5XTgE7msQ=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "GitHub contributions calender terminal viewer";
+    homepage = "https://github.com/mrshmllow/gh-cal";
+    license = licenses.mit;
+    maintainers = with maintainers; [ loicreynier ];
+    mainProgram = "gh-cal";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-dash/default.nix b/nixpkgs/pkgs/tools/misc/gh-dash/default.nix
new file mode 100644
index 000000000000..82201e0bd53d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-dash/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, testers
+, gh-dash
+}:
+
+buildGoModule rec {
+  pname = "gh-dash";
+  version = "3.14.0";
+
+  src = fetchFromGitHub {
+    owner = "dlvhdr";
+    repo = "gh-dash";
+    rev = "v${version}";
+    hash = "sha256-6YPUGOQ2KBfu+3XAgub9Cpz0QBrU2kV+gq13tUtzY+w=";
+  };
+
+  vendorHash = "sha256-jCf9FWAhZK5hTzyy8N4r5dfUYTgESmsn8iKxCccgWiM=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/dlvhdr/gh-dash/cmd.Version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion { package = gh-dash; };
+  };
+
+  meta = {
+    changelog = "https://github.com/dlvhdr/gh-dash/releases/tag/${src.rev}";
+    description = "Github Cli extension to display a dashboard with pull requests and issues";
+    homepage = "https://github.com/dlvhdr/gh-dash";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ amesgen ];
+    mainProgram = "gh-dash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-eco/default.nix b/nixpkgs/pkgs/tools/misc/gh-eco/default.nix
new file mode 100644
index 000000000000..329ef60c1b4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-eco/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+}:
+
+buildGoModule rec {
+  pname = "gh-eco";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "coloradocolby";
+    repo = "gh-eco";
+    rev = "v${version}";
+    sha256 = "sha256-TE1AymNlxjUtkBnBO/VBjYaqLuRyxL75s6sMidKUXTE=";
+  };
+
+  vendorHash = "sha256-K85fYV1uP/qSw8GPoG1u6UQo94vQOUo4cd9Ro+UApQ0=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/coloradocolby/gh-eco";
+    description = "gh extension to explore the ecosystem";
+    license = licenses.mit;
+    maintainers = with maintainers; [ helium ];
+    mainProgram = "gh-eco";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/gh-markdown-preview/default.nix b/nixpkgs/pkgs/tools/misc/gh-markdown-preview/default.nix
new file mode 100644
index 000000000000..68f041dbbf2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-markdown-preview/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, gh-markdown-preview
+, testers
+}:
+
+buildGoModule rec {
+  pname = "gh-markdown-preview";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "yusukebe";
+    repo = "gh-markdown-preview";
+    rev = "v${version}";
+    hash = "sha256-UBveXL4/3GxxIVjqG0GuTbkGkzXFc/stew2s+dTj9BI=";
+  };
+
+  vendorHash = "sha256-O6Q9h5zcYAoKLjuzGu7f7UZY0Y5rL2INqFyJT2QZJ/E=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/yusukebe/gh-markdown-preview/cmd.Version=${version}"
+  ];
+
+  # Tests need network
+  doCheck = false;
+
+  passthru.tests = {
+    version = testers.testVersion { package = gh-markdown-preview; };
+  };
+
+  meta = {
+    description = "gh extension to preview Markdown looking like on GitHub";
+    homepage = "https://github.com/yusukebe/gh-markdown-preview";
+    changelog = "https://github.com/yusukebe/gh-markdown-preview/releases/tag/${src.rev}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ amesgen ];
+    mainProgram = "gh-markdown-preview";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gh-ost/default.nix b/nixpkgs/pkgs/tools/misc/gh-ost/default.nix
new file mode 100644
index 000000000000..91798cfae8c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gh-ost/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, gh-ost }:
+
+buildGoModule rec {
+  pname = "gh-ost";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "github";
+    repo = "gh-ost";
+    rev = "v${version}";
+    hash = "sha256-dTz4w+OJXe2+ygsYsQ9tanDyaMXvdh8W3d8xpjQMapI=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.AppVersion=${version}"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = gh-ost;
+  };
+
+  meta = with lib; {
+    description = "Triggerless online schema migration solution for MySQL";
+    homepage = "https://github.com/github/gh-ost";
+    license = licenses.mit;
+    mainProgram = "gh-ost";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ghostie/Cargo.lock b/nixpkgs/pkgs/tools/misc/ghostie/Cargo.lock
new file mode 100644
index 000000000000..8e696d2b3c72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ghostie/Cargo.lock
@@ -0,0 +1,2665 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "216261ddc8289130e551ddcd5ce8a064710c0d064a4d2895c67151c92b5443f6"
+
+[[package]]
+name = "async-attributes"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-broadcast"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d26004fe83b2d1cd3a97609b21e39f9a31535822210fe83205d2ce48866ea61"
+dependencies = [
+ "event-listener",
+ "futures-core",
+ "parking_lot",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14485364214912d3b19cc3435dde4df66065127f05fa0d75c712f36f12c2f28"
+dependencies = [
+ "concurrent-queue 1.2.4",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue 2.0.0",
+ "fastrand",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+ "tokio",
+]
+
+[[package]]
+name = "async-io"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "concurrent-queue 2.0.0",
+ "futures-lite",
+ "libc",
+ "log",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685"
+dependencies = [
+ "event-listener",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-recursion"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7d78656ba01f1b93024b7c3a0467f1608e4be67d725749fdcd7d2c7678fd7a2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-attributes",
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524"
+
+[[package]]
+name = "async-trait"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e805d94e6b5001b651426cf4cd446b1ab5f319d27bab5c644f61de0a804360c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
+
+[[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 = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "blocking"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc"
+dependencies = [
+ "async-channel",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "boxfnonce"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5988cb1d626264ac94100be357308f29ff7cbdd3b36bda27f450a4ee3f713426"
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
+
+[[package]]
+name = "cache-padded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cc"
+version = "1.0.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4"
+
+[[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.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
+dependencies = [
+ "iana-time-zone",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
+dependencies = [
+ "heck 0.4.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clokwerk"
+version = "0.4.0-rc1"
+source = "git+https://github.com/attriaayush/clokwerk#f8180dfe64a98d39a5cded998998a3df8809b92c"
+dependencies = [
+ "chrono",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "1.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af4780a44ab5696ea9e28294517f1fffb421a83a25af521333c838635509db9c"
+dependencies = [
+ "cache-padded",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd7bef69dc86e3c610e4e7aed41035e2a7ed12e72dd7530f61327a6579a4390b"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "console"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c050367d967ced717c04b65d8c619d863ef9292ce0c5760028655a2fb298718c"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "terminal_size",
+ "unicode-width",
+ "winapi",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.7.1",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4a41a86530d0fe7f5d9ea779916b7cadd2d4f9add748b99c2c029cbbdfaf453"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06416d667ff3e3ad2df1cd8cd8afae5da26cf9cec4d0825040f88b5ca659a2f0"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "820a9a2af1669deeef27cb271f476ffd196a2c4b6731336011e0ba63e2c7cf71"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a08a6e2fcc370a089ad3b4aaf54db3b1b4cee38ddabce5896b33eb693275f470"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "daemonize"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70c24513e34f53b640819f0ac9f705b673fcf4006d7aab8778bee72ebfc89815"
+dependencies = [
+ "boxfnonce",
+ "libc",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "907076dfda823b0b36d2a1bb5f90c96660a5bbcd7729e10727f07858f22c4edc"
+dependencies = [
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dialoguer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92e7e37ecef6857fdc0c0c5d42fd5b0938e46590c2183cc92dd310a6d078eb1"
+dependencies = [
+ "console",
+ "tempfile",
+ "zeroize",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "either"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb"
+dependencies = [
+ "enumflags2_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fake"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d68f517805463f3a896a9d29c1d6ff09d3579ded64a7201b4069f8f9c0d52fd"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fallible-streaming-iterator"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
+
+[[package]]
+name = "fastrand"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
+
+[[package]]
+name = "futures-task"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
+
+[[package]]
+name = "futures-util"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "ghostie"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-std",
+ "cfg-if",
+ "chrono",
+ "clap",
+ "clokwerk",
+ "crossterm",
+ "daemonize",
+ "dialoguer",
+ "dirs",
+ "fake",
+ "futures",
+ "lazy_static",
+ "notify-rust",
+ "open",
+ "opener",
+ "rand",
+ "regex",
+ "reqwest",
+ "rusqlite",
+ "serde",
+ "serde_json",
+ "serial_test",
+ "sysinfo",
+ "thiserror",
+ "tui",
+ "which",
+]
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"
+dependencies = [
+ "hashbrown",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+dependencies = [
+ "cxx",
+ "cxx-build",
+]
+
+[[package]]
+name = "idna"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f88c5561171189e69df9d98bcf18fd5f9558300f7ea7b801eb8a0fd748bd8745"
+
+[[package]]
+name = "itoa"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
+
+[[package]]
+name = "js-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[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.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"
+dependencies = [
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+ "value-bag",
+]
+
+[[package]]
+name = "mac-notification-sys"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5"
+dependencies = [
+ "cc",
+ "dirs-next",
+ "objc-foundation",
+ "objc_id",
+ "time",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[package]]
+name = "mio"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "notify-rust"
+version = "4.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368e89ea58df747ce88be669ae44e79783c1d30bfd540ad0fc520b3f41f0b3b0"
+dependencies = [
+ "mac-notification-sys",
+ "serde",
+ "tauri-winrt-notification",
+ "zbus",
+ "zvariant",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc51db7b362b205941f71232e56c625156eb9a929f8cf74a428fd5bc094a4afc"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
+
+[[package]]
+name = "open"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8"
+dependencies = [
+ "pathdiff",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "opener"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea3ebcd72a54701f56345f16785a6d3ac2df7e986d273eb4395c0b01db17952"
+dependencies = [
+ "bstr",
+ "winapi",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12fc0523e3bd51a692c8850d075d74dc062ccf251c0110668cbd921917118a13"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.77"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b03b84c3b2d099b81f0953422b4d4ad58761589d0229b5506356afca05a3670a"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-stream"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44630c059eacfd6e08bdaa51b1db2ce33119caa4ddc1235e923109aa5f25ccb1"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "polling"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab4609a838d88b73d8238967b60dd115cc08d38e2bbaf51ee1e4b695f89122e2"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "libc",
+ "log",
+ "wepoll-ffi",
+ "winapi",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eda0fc3b0fb7c975631757e14d9049da17374063edb6ebbcbc54d880d4fe94e9"
+dependencies = [
+ "once_cell",
+ "thiserror",
+ "toml",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11bafc859c6815fbaffbbbf4229ecb767ac913fecb27f9ad4343662e9ef099ea"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[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.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e060280438193c554f654141c9ea9417886713b7acd75974c85b18a69a88e0b"
+dependencies = [
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cac410af5d00ab6884528b4ab69d1e8e146e8d471201800fa1b4524126de6ad3"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e076559ef8e241f2ae3479e36f97bd5741c0330689e217ad51ce2c76808b868a"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68cc60575865c7831548863cc02356512e3f1dc2f3f82cb837d7fc4cc8f3c97c"
+dependencies = [
+ "base64",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "rusqlite"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01e213bc3ecb39ac32e81e51ebe31fd888a940515173e3a18a35f8c6e896422a"
+dependencies = [
+ "bitflags",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "smallvec",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+
+[[package]]
+name = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
+
+[[package]]
+name = "security-framework"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f1d362ca8fc9c3e3a7484440752472d68a6caa98f1ab81d99b5dfe517cec852"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fe39d9fbb0ebf5eb2c7cb7e2a47e4f462fad1379f1166b8ae49ad9eae89a7ca"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serial_test"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92761393ee4dc3ff8f4af487bd58f4307c9329bbedea02cac0089ad9c411e153"
+dependencies = [
+ "dashmap",
+ "futures",
+ "lazy_static",
+ "log",
+ "parking_lot",
+ "serial_test_derive",
+]
+
+[[package]]
+name = "serial_test_derive"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b6f5d1c3087fb119617cff2966fe3808a80e5eb59a8c1601d5994d66f4346a5"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+dependencies = [
+ "sha1_smol",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7ac893c7d471c8a21f31cfe213ec4f6d9afeed25537c772e08ef3f005f8729e"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339f799d8b549e3744c7ac7feb216383e4005d94bdb22561b3ab8f3b808ae9fb"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sysinfo"
+version = "0.26.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c375d5fd899e32847b8566e10598d6e9f1d9b55ec6de3cdf9e7da4bdc51371bc"
+dependencies = [
+ "cfg-if",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi",
+]
+
+[[package]]
+name = "tauri-winrt-notification"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c58de036c4d2e20717024de2a3c4bf56c301f07b21bc8ef9b57189fce06f1f3b"
+dependencies = [
+ "quick-xml",
+ "strum",
+ "windows",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "time"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
+dependencies = [
+ "serde",
+ "time-core",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+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 = "1.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76ce4a75fb488c605c54bf610f221cea8b0dafb53333c1a67e8ee199dcd2ae3"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "tui"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccdd26cbd674007e649a272da4475fb666d3aa0ad0531da7136db6fab0e5bad1"
+dependencies = [
+ "bitflags",
+ "cassowary",
+ "crossterm",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "uds_windows"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+dependencies = [
+ "tempfile",
+ "winapi",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
+dependencies = [
+ "ctor",
+ "version_check",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[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 = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23639446165ca5a5de86ae1d8896b737ae80319560fbaa4c2887b7da6e7ebd7d"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "wepoll-ffi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "which"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b55551e42cbdf2ce2bedd2203d0cc08dba002c27510f86dab6d0ce304cba3dfe"
+dependencies = [
+ "either",
+ "libc",
+]
+
+[[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 = "windows"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
+dependencies = [
+ "windows_aarch64_msvc 0.39.0",
+ "windows_i686_gnu 0.39.0",
+ "windows_i686_msvc 0.39.0",
+ "windows_x86_64_gnu 0.39.0",
+ "windows_x86_64_msvc 0.39.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc 0.36.1",
+ "windows_i686_gnu 0.36.1",
+ "windows_i686_msvc 0.36.1",
+ "windows_x86_64_gnu 0.36.1",
+ "windows_x86_64_msvc 0.36.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc 0.42.0",
+ "windows_i686_gnu 0.42.0",
+ "windows_i686_msvc 0.42.0",
+ "windows_x86_64_gnu 0.42.0",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc 0.42.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "zbus"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d8f1a037b2c4a67d9654dc7bdfa8ff2e80555bbefdd3c1833c1d1b27c963a6b"
+dependencies = [
+ "async-broadcast",
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "async-recursion",
+ "async-task",
+ "async-trait",
+ "byteorder",
+ "derivative",
+ "dirs",
+ "enumflags2",
+ "event-listener",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hex",
+ "lazy_static",
+ "nix",
+ "once_cell",
+ "ordered-stream",
+ "rand",
+ "serde",
+ "serde_repr",
+ "sha1",
+ "static_assertions",
+ "tracing",
+ "uds_windows",
+ "winapi",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f8fb5186d1c87ae88cf234974c240671238b4a679158ad3b94ec465237349a6"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn",
+]
+
+[[package]]
+name = "zbus_names"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f34f314916bd89bdb9934154627fab152f4f28acdda03e7c4c68181b214fe7e3"
+dependencies = [
+ "serde",
+ "static_assertions",
+ "zvariant",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
+
+[[package]]
+name = "zvariant"
+version = "3.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "576cc41e65c7f283e5460f5818073e68fb1f1631502b969ef228c2e03c862efb"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fd4aafc0dee96ae7242a24249ce9babf21e1562822f03df650d4e68c20e41ed"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/nixpkgs/pkgs/tools/misc/ghostie/default.nix b/nixpkgs/pkgs/tools/misc/ghostie/default.nix
new file mode 100644
index 000000000000..0a4e1cb695e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ghostie/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, sqlite
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ghostie";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "attriaayush";
+    repo = "ghostie";
+    rev = "v${version}";
+    sha256 = "sha256-lEjJLmBA3dlIVxc8E+UvR7u154QGeCfEbxdgUxAS3Cw=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "clokwerk-0.4.0-rc1" = "sha256-GQDWEN2arDDRu2ft8QYdXsNhBEIhBNZTnLoLy27cbAI=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+    sqlite
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Cocoa
+  ];
+
+  # 4 out of 5 tests are notification tests which do not work in nix builds
+  doCheck = false;
+
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "Github notifications in your terminal";
+    homepage = "https://github.com/attriaayush/ghostie";
+    changelog = "https://github.com/attriaayush/ghostie/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    broken = stdenv.isx86_64 && stdenv.isDarwin;
+    mainProgram = "ghostie";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gibo/default.nix b/nixpkgs/pkgs/tools/misc/gibo/default.nix
new file mode 100644
index 000000000000..edd166f00f56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gibo/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, coreutils, findutils, git }:
+
+stdenv.mkDerivation rec {
+  pname = "gibo";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "simonwhitaker";
+    repo = "gibo";
+    rev = version;
+    sha256 = "07j3sv9ar9l074krajw8nfmsfmdp836irsbd053dbqk2v880gfm6";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/bash-completion/completions
+    cp gibo $out/bin
+    cp gibo-completion.bash $out/share/bash-completion/completions
+
+    sed -e 's|\<git |${git}/bin/git |g' \
+        -e 's|\<basename |${coreutils}/bin/basename |g' \
+        -i "$out/bin/gibo"
+    sed -e 's|\<find |${findutils}/bin/find |g' \
+        -i "$out/share/bash-completion/completions/gibo-completion.bash"
+  '';
+
+  meta = {
+    homepage = "https://github.com/simonwhitaker/gibo";
+    license = lib.licenses.publicDomain;
+    description = "A shell script for easily accessing gitignore boilerplates";
+    platforms = lib.platforms.unix;
+    mainProgram = "gibo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix b/nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix
new file mode 100644
index 000000000000..3a2ad84a4430
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gif-for-cli/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3Packages
+, ffmpeg
+, zlib
+, libjpeg
+}:
+
+python3Packages.buildPythonApplication {
+  pname = "gif-for-cli";
+  version = "1.1.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "gif-for-cli";
+    rev = "31f8aa2d617d6d6e941154f60e287c38dd9a74d5";
+    hash = "sha256-Bl5o492BUAn1KsscnlMIXCzJuy7xWUsdnxIKZKaRM3M=";
+  };
+
+  patches = [
+    # https://github.com/google/gif-for-cli/pull/36
+    (fetchpatch {
+      name = "pillow-10-compatibility.patch";
+      url = "https://github.com/google/gif-for-cli/commit/49b13ec981e197cbc10f920b7b25a97c4cc6a61c.patch";
+      hash = "sha256-B8wfkdhSUY++St6DzgaJ1xF1mZKvi8oxLXbo63yemDM=";
+    })
+  ];
+
+  # coverage is not needed to build and test this package
+  postPatch = ''
+    sed -i '/coverage>=/d' setup.py
+  '';
+
+  buildInputs = [
+    zlib
+    libjpeg
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    ffmpeg
+    pillow
+    requests
+    x256
+  ];
+
+  meta = with lib; {
+    description = "Render gifs as ASCII art in your cli";
+    longDescription = "Takes in a GIF, short video, or a query to the Tenor GIF API and converts it to animated ASCII art.";
+    homepage = "https://github.com/google/gif-for-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Scriptkiddi ];
+    mainProgram = "gif-for-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gigalixir/default.nix b/nixpkgs/pkgs/tools/misc/gigalixir/default.nix
new file mode 100644
index 000000000000..d03d353a088b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gigalixir/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, python3
+, fetchPypi
+, git
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gigalixir";
+  version = "1.12.1";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-T16+0F28/SxDl53GGTRzKbG+ghbL/80NkY08WpCixhA=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "'pytest-runner'," "" \
+      --replace "cryptography==" "cryptography>="
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    pygments
+    pyopenssl
+    qrcode
+    requests
+    rollbar
+    stripe
+  ];
+
+  nativeCheckInputs = [
+    git
+  ] ++ (with python3.pkgs; [
+    httpretty
+    pytestCheckHook
+    sure
+  ]);
+
+  disabledTests = [
+    # Test requires network access
+    "test_rollback_without_version"
+    # These following test's are now depraced and removed, check out these commits:
+    # https://github.com/gigalixir/gigalixir-cli/commit/00b758ed462ad8eff6ff0b16cd37fa71f75b2d7d
+    # https://github.com/gigalixir/gigalixir-cli/commit/76fa25f96e71fd75cc22e5439b4a8f9e9ec4e3e5
+    "test_create_config"
+    "test_delete_free_database"
+    "test_get_free_databases"
+  ];
+
+  pythonImportsCheck = [
+    "gigalixir"
+  ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Gigalixir Command-Line Interface";
+    homepage = "https://github.com/gigalixir/gigalixir-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "gigalixir";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/github-backup/default.nix b/nixpkgs/pkgs/tools/misc/github-backup/default.nix
new file mode 100644
index 000000000000..4ff25301c8c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/github-backup/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3
+, fetchPypi
+, git
+, git-lfs
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "github-backup";
+  version = "0.45.1";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-+dQVewMHSF0SnOKmgwc9pmqXAJGLjSqwS9YQHdvEmKo=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ git git-lfs ])
+  ];
+
+  # has no unit tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Backup a github user or organization";
+    homepage = "https://github.com/josegonzalez/python-github-backup";
+    changelog = "https://github.com/josegonzalez/python-github-backup/blob/${version}/CHANGES.rst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+    mainProgram = "github-backup";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/github-copilot-cli/default.nix b/nixpkgs/pkgs/tools/misc/github-copilot-cli/default.nix
new file mode 100644
index 000000000000..644f3f983b8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/github-copilot-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildNpmPackage, fetchzip }:
+
+buildNpmPackage rec {
+  pname = "github-copilot-cli";
+  version = "0.1.36";
+
+  src = fetchzip {
+    url = "https://registry.npmjs.org/@githubnext/${pname}/-/${pname}-${version}.tgz";
+    hash = "sha256-7n+7sN61OrqMVGaKll85+HwX7iGG9M/UW5lf2Pd5sRU=";
+  };
+
+  npmDepsHash = "sha256-h0StxzGbl3ZeOQ4Jy1BgJ5sJ0pAbubMCRsiIOYpU04w=";
+
+  postPatch = ''
+    cp ${./package-lock.json} package-lock.json
+  '';
+
+  dontNpmBuild = true;
+
+  meta = with lib; {
+    description = "A CLI experience for letting GitHub Copilot help you on the command line";
+    homepage = "https://githubnext.com/projects/copilot-cli/";
+    license = licenses.unfree; # upstream has no license
+    maintainers = [ maintainers.malo ];
+    platforms = platforms.all;
+    mainProgram = "github-copilot-cli";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/github-copilot-cli/package-lock.json b/nixpkgs/pkgs/tools/misc/github-copilot-cli/package-lock.json
new file mode 100644
index 000000000000..03bc0c1fc339
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/github-copilot-cli/package-lock.json
@@ -0,0 +1,3329 @@
+{
+  "name": "@githubnext/github-copilot-cli",
+  "version": "0.1.36",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "@githubnext/github-copilot-cli",
+      "version": "0.1.36",
+      "dependencies": {
+        "applicationinsights": "^2.9.1",
+        "axios": "^1.6.0",
+        "chalk": "^5.1.0",
+        "cli-highlight": "^2.1.11",
+        "commander": "^9.4.1",
+        "get-stream": "^6.0.1",
+        "immer": "^9.0.16",
+        "ink": "^3.2.0",
+        "ink-divider": "^3.0.0",
+        "ink-select-input": "^4.2.1",
+        "ink-spinner": "^4.0.3",
+        "ink-text-input": "^4.0.3",
+        "inquirer": "^9.1.4",
+        "marked": "^4.2.12",
+        "marked-terminal": "^5.1.1",
+        "ora": "^6.1.2",
+        "radash": "^9.1.0",
+        "react": "17",
+        "react-devtools-core": "^4.28.4",
+        "react-dom": "17",
+        "react-query": "^3.39.2",
+        "semver": "^5.7.2",
+        "simple-update-notifier": "^1.1.0",
+        "tiny-invariant": "^1.3.1",
+        "tough-cookie": "^4.1.3",
+        "ts-dedent": "^2.2.0",
+        "use-zustand": "^0.0.1",
+        "uuid": "^9.0.0",
+        "zustand": "^4.1.4"
+      },
+      "bin": {
+        "github-copilot-cli": "cli.js"
+      },
+      "devDependencies": {
+        "@types/inquirer": "^9.0.2",
+        "@types/node": "^18.8.3",
+        "@types/react": "^18.0.25",
+        "@types/uuid": "^8.3.4",
+        "esbuild": "^0.15.10",
+        "genversion": "^3.1.1",
+        "typescript": "^4.8.4"
+      }
+    },
+    "node_modules/@azure/abort-controller": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz",
+      "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==",
+      "dependencies": {
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/@azure/core-auth": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz",
+      "integrity": "sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==",
+      "dependencies": {
+        "@azure/abort-controller": "^1.0.0",
+        "@azure/core-util": "^1.1.0",
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@azure/core-rest-pipeline": {
+      "version": "1.10.1",
+      "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz",
+      "integrity": "sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA==",
+      "dependencies": {
+        "@azure/abort-controller": "^1.0.0",
+        "@azure/core-auth": "^1.4.0",
+        "@azure/core-tracing": "^1.0.1",
+        "@azure/core-util": "^1.0.0",
+        "@azure/logger": "^1.0.0",
+        "form-data": "^4.0.0",
+        "http-proxy-agent": "^5.0.0",
+        "https-proxy-agent": "^5.0.0",
+        "tslib": "^2.2.0",
+        "uuid": "^8.3.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@azure/core-rest-pipeline/node_modules/uuid": {
+      "version": "8.3.2",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+      "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+      "bin": {
+        "uuid": "dist/bin/uuid"
+      }
+    },
+    "node_modules/@azure/core-tracing": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz",
+      "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==",
+      "dependencies": {
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=12.0.0"
+      }
+    },
+    "node_modules/@azure/core-util": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.2.0.tgz",
+      "integrity": "sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng==",
+      "dependencies": {
+        "@azure/abort-controller": "^1.0.0",
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@azure/logger": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz",
+      "integrity": "sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==",
+      "dependencies": {
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@azure/opentelemetry-instrumentation-azure-sdk": {
+      "version": "1.0.0-beta.5",
+      "resolved": "https://registry.npmjs.org/@azure/opentelemetry-instrumentation-azure-sdk/-/opentelemetry-instrumentation-azure-sdk-1.0.0-beta.5.tgz",
+      "integrity": "sha512-fsUarKQDvjhmBO4nIfaZkfNSApm1hZBzcvpNbSrXdcUBxu7lRvKsV5DnwszX7cnhLyVOW9yl1uigtRQ1yDANjA==",
+      "dependencies": {
+        "@azure/core-tracing": "^1.0.0",
+        "@azure/logger": "^1.0.0",
+        "@opentelemetry/api": "^1.4.1",
+        "@opentelemetry/core": "^1.15.2",
+        "@opentelemetry/instrumentation": "^0.41.2",
+        "tslib": "^2.2.0"
+      },
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/@babel/runtime": {
+      "version": "7.23.8",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz",
+      "integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==",
+      "dependencies": {
+        "regenerator-runtime": "^0.14.0"
+      },
+      "engines": {
+        "node": ">=6.9.0"
+      }
+    },
+    "node_modules/@colors/colors": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
+      "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==",
+      "optional": true,
+      "engines": {
+        "node": ">=0.1.90"
+      }
+    },
+    "node_modules/@esbuild/android-arm": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
+      "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@esbuild/linux-loong64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
+      "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
+      "cpu": [
+        "loong64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/@ljharb/through": {
+      "version": "2.3.11",
+      "resolved": "https://registry.npmjs.org/@ljharb/through/-/through-2.3.11.tgz",
+      "integrity": "sha512-ccfcIDlogiXNq5KcbAwbaO7lMh3Tm1i3khMPYpxlK8hH/W53zN81KM9coerRLOnTGu3nfXIniAmQbRI9OxbC0w==",
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/@microsoft/applicationinsights-web-snippet": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.0.1.tgz",
+      "integrity": "sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ=="
+    },
+    "node_modules/@opentelemetry/api": {
+      "version": "1.7.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz",
+      "integrity": "sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==",
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "node_modules/@opentelemetry/core": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.20.0.tgz",
+      "integrity": "sha512-lSRvk5AIdD6CtgYJcJXh0wGibQ3S/8bC2qbqKs9wK8e0K1tsWV6YkGFOqVc+jIRlCbZoIBeZzDe5UI+vb94uvg==",
+      "dependencies": {
+        "@opentelemetry/semantic-conventions": "1.20.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": ">=1.0.0 <1.8.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation": {
+      "version": "0.41.2",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.41.2.tgz",
+      "integrity": "sha512-rxU72E0pKNH6ae2w5+xgVYZLzc5mlxAbGzF4shxMVK8YC2QQsfN38B2GPbj0jvrKWWNUElfclQ+YTykkNg/grw==",
+      "dependencies": {
+        "@types/shimmer": "^1.0.2",
+        "import-in-the-middle": "1.4.2",
+        "require-in-the-middle": "^7.1.1",
+        "semver": "^7.5.1",
+        "shimmer": "^1.2.1"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": "^1.3.0"
+      }
+    },
+    "node_modules/@opentelemetry/instrumentation/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/@opentelemetry/resources": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.20.0.tgz",
+      "integrity": "sha512-nOpV0vGegSq+9ze2cEDvO3BMA5pGBhmhKZiAlj+xQZjiEjPmJtdHIuBLRvptu2ahcbFJw85gIB9BYHZOvZK1JQ==",
+      "dependencies": {
+        "@opentelemetry/core": "1.20.0",
+        "@opentelemetry/semantic-conventions": "1.20.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": ">=1.0.0 <1.8.0"
+      }
+    },
+    "node_modules/@opentelemetry/sdk-trace-base": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.20.0.tgz",
+      "integrity": "sha512-BAIZ0hUgnhdb3OBQjn1FKGz/Iwie4l+uOMKklP7FGh7PTqEAbbzDNMJKaZQh6KepF7Fq+CZDRKslD3yrYy2Tzw==",
+      "dependencies": {
+        "@opentelemetry/core": "1.20.0",
+        "@opentelemetry/resources": "1.20.0",
+        "@opentelemetry/semantic-conventions": "1.20.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "peerDependencies": {
+        "@opentelemetry/api": ">=1.0.0 <1.8.0"
+      }
+    },
+    "node_modules/@opentelemetry/semantic-conventions": {
+      "version": "1.20.0",
+      "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.20.0.tgz",
+      "integrity": "sha512-3zLJJCgTKYpbqFX8drl8hOCHtdchELC+kGqlVcV4mHW1DiElTtv1Nt9EKBptTd1IfL56QkuYnWJ3DeHd2Gtu/A==",
+      "engines": {
+        "node": ">=14"
+      }
+    },
+    "node_modules/@tootallnate/once": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+      "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/@types/inquirer": {
+      "version": "9.0.7",
+      "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.7.tgz",
+      "integrity": "sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==",
+      "dev": true,
+      "dependencies": {
+        "@types/through": "*",
+        "rxjs": "^7.2.0"
+      }
+    },
+    "node_modules/@types/node": {
+      "version": "18.19.8",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.8.tgz",
+      "integrity": "sha512-g1pZtPhsvGVTwmeVoexWZLTQaOvXwoSq//pTL0DHeNzUDrFnir4fgETdhjhIxjVnN+hKOuh98+E1eMLnUXstFg==",
+      "dev": true,
+      "dependencies": {
+        "undici-types": "~5.26.4"
+      }
+    },
+    "node_modules/@types/prop-types": {
+      "version": "15.7.11",
+      "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
+      "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
+      "devOptional": true
+    },
+    "node_modules/@types/react": {
+      "version": "18.2.48",
+      "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.48.tgz",
+      "integrity": "sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==",
+      "devOptional": true,
+      "dependencies": {
+        "@types/prop-types": "*",
+        "@types/scheduler": "*",
+        "csstype": "^3.0.2"
+      }
+    },
+    "node_modules/@types/scheduler": {
+      "version": "0.16.8",
+      "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
+      "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
+      "devOptional": true
+    },
+    "node_modules/@types/shimmer": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.5.tgz",
+      "integrity": "sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww=="
+    },
+    "node_modules/@types/through": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.33.tgz",
+      "integrity": "sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==",
+      "dev": true,
+      "dependencies": {
+        "@types/node": "*"
+      }
+    },
+    "node_modules/@types/uuid": {
+      "version": "8.3.4",
+      "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
+      "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==",
+      "dev": true
+    },
+    "node_modules/@types/yoga-layout": {
+      "version": "1.9.2",
+      "resolved": "https://registry.npmjs.org/@types/yoga-layout/-/yoga-layout-1.9.2.tgz",
+      "integrity": "sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw=="
+    },
+    "node_modules/acorn": {
+      "version": "8.11.3",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+      "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+      "bin": {
+        "acorn": "bin/acorn"
+      },
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/acorn-import-assertions": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+      "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+      "peerDependencies": {
+        "acorn": "^8"
+      }
+    },
+    "node_modules/agent-base": {
+      "version": "6.0.2",
+      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+      "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+      "dependencies": {
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6.0.0"
+      }
+    },
+    "node_modules/ansi-escapes": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+      "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+      "dependencies": {
+        "type-fest": "^0.21.3"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ansi-escapes/node_modules/type-fest": {
+      "version": "0.21.3",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+      "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ansi-regex": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+      "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/ansi-styles": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/ansicolors": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz",
+      "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg=="
+    },
+    "node_modules/any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+      "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
+    },
+    "node_modules/applicationinsights": {
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-2.9.2.tgz",
+      "integrity": "sha512-wlDiD7v0BQNM8oNzsf9C836R5ze25u+CuCEZsbA5xMIXYYBxkqkWE/mo9GFJM7rsKaiGqpxEwWmePHKD2Lwy2w==",
+      "dependencies": {
+        "@azure/core-auth": "^1.5.0",
+        "@azure/core-rest-pipeline": "1.10.1",
+        "@azure/core-util": "1.2.0",
+        "@azure/opentelemetry-instrumentation-azure-sdk": "^1.0.0-beta.5",
+        "@microsoft/applicationinsights-web-snippet": "^1.0.1",
+        "@opentelemetry/api": "^1.7.0",
+        "@opentelemetry/core": "^1.19.0",
+        "@opentelemetry/sdk-trace-base": "^1.19.0",
+        "@opentelemetry/semantic-conventions": "^1.19.0",
+        "cls-hooked": "^4.2.2",
+        "continuation-local-storage": "^3.2.1",
+        "diagnostic-channel": "1.1.1",
+        "diagnostic-channel-publishers": "1.0.8"
+      },
+      "engines": {
+        "node": ">=8.0.0"
+      },
+      "peerDependencies": {
+        "applicationinsights-native-metrics": "*"
+      },
+      "peerDependenciesMeta": {
+        "applicationinsights-native-metrics": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/arr-rotate": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/arr-rotate/-/arr-rotate-1.0.0.tgz",
+      "integrity": "sha512-yOzOZcR9Tn7enTF66bqKorGGH0F36vcPaSWg8fO0c0UYb3LX3VMXj5ZxEqQLNOecAhlRJ7wYZja5i4jTlnbIfQ==",
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/astral-regex": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+      "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/async": {
+      "version": "3.2.5",
+      "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+      "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
+      "dev": true
+    },
+    "node_modules/async-hook-jl": {
+      "version": "1.7.6",
+      "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz",
+      "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==",
+      "dependencies": {
+        "stack-chain": "^1.3.7"
+      },
+      "engines": {
+        "node": "^4.7 || >=6.9 || >=7.3"
+      }
+    },
+    "node_modules/async-listener": {
+      "version": "0.6.10",
+      "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz",
+      "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==",
+      "dependencies": {
+        "semver": "^5.3.0",
+        "shimmer": "^1.1.0"
+      },
+      "engines": {
+        "node": "<=0.11.8 || >0.11.10"
+      }
+    },
+    "node_modules/asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+    },
+    "node_modules/auto-bind": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz",
+      "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==",
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/axios": {
+      "version": "1.6.5",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.5.tgz",
+      "integrity": "sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg==",
+      "dependencies": {
+        "follow-redirects": "^1.15.4",
+        "form-data": "^4.0.0",
+        "proxy-from-env": "^1.1.0"
+      }
+    },
+    "node_modules/balanced-match": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+      "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+    },
+    "node_modules/base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+      "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/big-integer": {
+      "version": "1.6.52",
+      "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+      "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
+      "engines": {
+        "node": ">=0.6"
+      }
+    },
+    "node_modules/bl": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
+      "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==",
+      "dependencies": {
+        "buffer": "^6.0.3",
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.4.0"
+      }
+    },
+    "node_modules/brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/broadcast-channel": {
+      "version": "3.7.0",
+      "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz",
+      "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==",
+      "dependencies": {
+        "@babel/runtime": "^7.7.2",
+        "detect-node": "^2.1.0",
+        "js-sha3": "0.8.0",
+        "microseconds": "0.2.0",
+        "nano-time": "1.0.0",
+        "oblivious-set": "1.0.0",
+        "rimraf": "3.0.2",
+        "unload": "2.2.0"
+      }
+    },
+    "node_modules/buffer": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+      "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.2.1"
+      }
+    },
+    "node_modules/call-bind": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+      "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
+      "dependencies": {
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.1",
+        "set-function-length": "^1.1.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/cardinal": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz",
+      "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==",
+      "dependencies": {
+        "ansicolors": "~0.3.2",
+        "redeyed": "~2.1.0"
+      },
+      "bin": {
+        "cdl": "bin/cdl.js"
+      }
+    },
+    "node_modules/chalk": {
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz",
+      "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==",
+      "engines": {
+        "node": "^12.17.0 || ^14.13 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/chardet": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+      "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
+    },
+    "node_modules/ci-info": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+      "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
+    },
+    "node_modules/cjs-module-lexer": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
+      "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ=="
+    },
+    "node_modules/cli-boxes": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
+      "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/cli-cursor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+      "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+      "dependencies": {
+        "restore-cursor": "^3.1.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/cli-highlight": {
+      "version": "2.1.11",
+      "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz",
+      "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==",
+      "dependencies": {
+        "chalk": "^4.0.0",
+        "highlight.js": "^10.7.1",
+        "mz": "^2.4.0",
+        "parse5": "^5.1.1",
+        "parse5-htmlparser2-tree-adapter": "^6.0.0",
+        "yargs": "^16.0.0"
+      },
+      "bin": {
+        "highlight": "bin/highlight"
+      },
+      "engines": {
+        "node": ">=8.0.0",
+        "npm": ">=5.0.0"
+      }
+    },
+    "node_modules/cli-highlight/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/cli-spinners": {
+      "version": "2.9.2",
+      "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+      "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/cli-table3": {
+      "version": "0.6.3",
+      "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz",
+      "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==",
+      "dependencies": {
+        "string-width": "^4.2.0"
+      },
+      "engines": {
+        "node": "10.* || >= 12.*"
+      },
+      "optionalDependencies": {
+        "@colors/colors": "1.5.0"
+      }
+    },
+    "node_modules/cli-truncate": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz",
+      "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==",
+      "dependencies": {
+        "slice-ansi": "^3.0.0",
+        "string-width": "^4.2.0"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/cli-width": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
+      "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/cliui": {
+      "version": "7.0.4",
+      "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+      "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^7.0.0"
+      }
+    },
+    "node_modules/cliui/node_modules/wrap-ansi": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+      "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
+      }
+    },
+    "node_modules/clone": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+      "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/cls-hooked": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz",
+      "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==",
+      "dependencies": {
+        "async-hook-jl": "^1.7.6",
+        "emitter-listener": "^1.0.1",
+        "semver": "^5.4.1"
+      },
+      "engines": {
+        "node": "^4.7 || >=6.9 || >=7.3 || >=8.2.1"
+      }
+    },
+    "node_modules/code-excerpt": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-3.0.0.tgz",
+      "integrity": "sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==",
+      "dependencies": {
+        "convert-to-spaces": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/color-convert": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+      "dependencies": {
+        "color-name": "~1.1.4"
+      },
+      "engines": {
+        "node": ">=7.0.0"
+      }
+    },
+    "node_modules/color-name": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+    },
+    "node_modules/combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dependencies": {
+        "delayed-stream": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
+    "node_modules/commander": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
+      "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
+      "engines": {
+        "node": "^12.20.0 || >=14"
+      }
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+    },
+    "node_modules/continuation-local-storage": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz",
+      "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==",
+      "dependencies": {
+        "async-listener": "^0.6.0",
+        "emitter-listener": "^1.1.1"
+      }
+    },
+    "node_modules/convert-to-spaces": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-1.0.2.tgz",
+      "integrity": "sha512-cj09EBuObp9gZNQCzc7hByQyrs6jVGE+o9kSJmeUoj+GiPiJvi5LYqEH/Hmme4+MTLHM+Ejtq+FChpjjEnsPdQ==",
+      "engines": {
+        "node": ">= 4"
+      }
+    },
+    "node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+      "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+      "devOptional": true
+    },
+    "node_modules/debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/defaults": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+      "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
+      "dependencies": {
+        "clone": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/define-data-property": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
+      "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+      "dependencies": {
+        "get-intrinsic": "^1.2.1",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/detect-node": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
+      "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g=="
+    },
+    "node_modules/diagnostic-channel": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-1.1.1.tgz",
+      "integrity": "sha512-r2HV5qFkUICyoaKlBEpLKHjxMXATUf/l+h8UZPGBHGLy4DDiY2sOLcIctax4eRnTw5wH2jTMExLntGPJ8eOJxw==",
+      "dependencies": {
+        "semver": "^7.5.3"
+      }
+    },
+    "node_modules/diagnostic-channel-publishers": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-1.0.8.tgz",
+      "integrity": "sha512-HmSm9hXxSPxA9BaLGY98QU1zsdjeCk113KjAYGPCen1ZP6mhVaTPzHd6UYv5r21DnWANi+f+NyPOHruGT9jpqQ==",
+      "peerDependencies": {
+        "diagnostic-channel": "*"
+      }
+    },
+    "node_modules/diagnostic-channel/node_modules/semver": {
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+      "dependencies": {
+        "lru-cache": "^6.0.0"
+      },
+      "bin": {
+        "semver": "bin/semver.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/ejs": {
+      "version": "3.1.9",
+      "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz",
+      "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==",
+      "dev": true,
+      "dependencies": {
+        "jake": "^10.8.5"
+      },
+      "bin": {
+        "ejs": "bin/cli.js"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/emitter-listener": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz",
+      "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==",
+      "dependencies": {
+        "shimmer": "^1.2.0"
+      }
+    },
+    "node_modules/emoji-regex": {
+      "version": "8.0.0",
+      "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+      "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+    },
+    "node_modules/esbuild": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
+      "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
+      "dev": true,
+      "hasInstallScript": true,
+      "bin": {
+        "esbuild": "bin/esbuild"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "optionalDependencies": {
+        "@esbuild/android-arm": "0.15.18",
+        "@esbuild/linux-loong64": "0.15.18",
+        "esbuild-android-64": "0.15.18",
+        "esbuild-android-arm64": "0.15.18",
+        "esbuild-darwin-64": "0.15.18",
+        "esbuild-darwin-arm64": "0.15.18",
+        "esbuild-freebsd-64": "0.15.18",
+        "esbuild-freebsd-arm64": "0.15.18",
+        "esbuild-linux-32": "0.15.18",
+        "esbuild-linux-64": "0.15.18",
+        "esbuild-linux-arm": "0.15.18",
+        "esbuild-linux-arm64": "0.15.18",
+        "esbuild-linux-mips64le": "0.15.18",
+        "esbuild-linux-ppc64le": "0.15.18",
+        "esbuild-linux-riscv64": "0.15.18",
+        "esbuild-linux-s390x": "0.15.18",
+        "esbuild-netbsd-64": "0.15.18",
+        "esbuild-openbsd-64": "0.15.18",
+        "esbuild-sunos-64": "0.15.18",
+        "esbuild-windows-32": "0.15.18",
+        "esbuild-windows-64": "0.15.18",
+        "esbuild-windows-arm64": "0.15.18"
+      }
+    },
+    "node_modules/esbuild-android-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
+      "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-android-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
+      "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "android"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-darwin-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
+      "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-darwin-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
+      "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-freebsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
+      "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-freebsd-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
+      "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "freebsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-32": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
+      "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
+      "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-arm": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
+      "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
+      "cpu": [
+        "arm"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
+      "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-mips64le": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
+      "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
+      "cpu": [
+        "mips64el"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-ppc64le": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
+      "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
+      "cpu": [
+        "ppc64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-riscv64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
+      "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
+      "cpu": [
+        "riscv64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-linux-s390x": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
+      "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
+      "cpu": [
+        "s390x"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "linux"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-netbsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
+      "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "netbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-openbsd-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
+      "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "openbsd"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-sunos-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
+      "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "sunos"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-32": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
+      "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
+      "cpu": [
+        "ia32"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
+      "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
+      "cpu": [
+        "x64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/esbuild-windows-arm64": {
+      "version": "0.15.18",
+      "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
+      "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
+      "cpu": [
+        "arm64"
+      ],
+      "dev": true,
+      "optional": true,
+      "os": [
+        "win32"
+      ],
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/esprima": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+      "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+      "bin": {
+        "esparse": "bin/esparse.js",
+        "esvalidate": "bin/esvalidate.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/external-editor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+      "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+      "dependencies": {
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
+        "tmp": "^0.0.33"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/figures": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+      "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+      "dependencies": {
+        "escape-string-regexp": "^1.0.5"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/filelist": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+      "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+      "dev": true,
+      "dependencies": {
+        "minimatch": "^5.0.1"
+      }
+    },
+    "node_modules/filelist/node_modules/brace-expansion": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+      "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0"
+      }
+    },
+    "node_modules/filelist/node_modules/minimatch": {
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+      "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/find-package": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/find-package/-/find-package-1.0.0.tgz",
+      "integrity": "sha512-yVn71XCCaNgxz58ERTl8nA/8YYtIQDY9mHSrgFBfiFtdNNfY0h183Vh8BRkKxD8x9TUw3ec290uJKhDVxqGZBw==",
+      "dev": true,
+      "dependencies": {
+        "parents": "^1.0.1"
+      }
+    },
+    "node_modules/follow-redirects": {
+      "version": "1.15.5",
+      "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+      "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/RubenVerborgh"
+        }
+      ],
+      "engines": {
+        "node": ">=4.0"
+      },
+      "peerDependenciesMeta": {
+        "debug": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/form-data": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/fs.realpath": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+      "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+      "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/genversion": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/genversion/-/genversion-3.2.0.tgz",
+      "integrity": "sha512-OIYSX6XYA8PHecLDCTri30hadSZfAjZ8Iq1+BBDXqLWP4dRLuJNLoNjsSWtTpw97IccK2LDWzkEstxAB8GdN7g==",
+      "dev": true,
+      "dependencies": {
+        "commander": "^7.2.0",
+        "ejs": "^3.1.9",
+        "find-package": "^1.0.0"
+      },
+      "bin": {
+        "genversion": "bin/genversion.js"
+      },
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/genversion/node_modules/commander": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+      "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+      "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+      "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
+      "dependencies": {
+        "function-bind": "^1.1.2",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "hasown": "^2.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-stream": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+      "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.1.1",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+      "dependencies": {
+        "get-intrinsic": "^1.1.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-flag": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/has-property-descriptors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+      "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+      "dependencies": {
+        "get-intrinsic": "^1.2.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-proto": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+      "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-symbols": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+      "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/hasown": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+      "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+      "dependencies": {
+        "function-bind": "^1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/highlight.js": {
+      "version": "10.7.3",
+      "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz",
+      "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==",
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/http-proxy-agent": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+      "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+      "dependencies": {
+        "@tootallnate/once": "2",
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/https-proxy-agent": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+      "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+      "dependencies": {
+        "agent-base": "6",
+        "debug": "4"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+      "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/ieee754": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+      "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/immer": {
+      "version": "9.0.21",
+      "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
+      "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==",
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/immer"
+      }
+    },
+    "node_modules/import-in-the-middle": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz",
+      "integrity": "sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==",
+      "dependencies": {
+        "acorn": "^8.8.2",
+        "acorn-import-assertions": "^1.9.0",
+        "cjs-module-lexer": "^1.2.2",
+        "module-details-from-path": "^1.0.3"
+      }
+    },
+    "node_modules/indent-string": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+      "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "dependencies": {
+        "once": "^1.3.0",
+        "wrappy": "1"
+      }
+    },
+    "node_modules/inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+      "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+    },
+    "node_modules/ink": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/ink/-/ink-3.2.0.tgz",
+      "integrity": "sha512-firNp1q3xxTzoItj/eOOSZQnYSlyrWks5llCTVX37nJ59K3eXbQ8PtzCguqo8YI19EELo5QxaKnJd4VxzhU8tg==",
+      "dependencies": {
+        "ansi-escapes": "^4.2.1",
+        "auto-bind": "4.0.0",
+        "chalk": "^4.1.0",
+        "cli-boxes": "^2.2.0",
+        "cli-cursor": "^3.1.0",
+        "cli-truncate": "^2.1.0",
+        "code-excerpt": "^3.0.0",
+        "indent-string": "^4.0.0",
+        "is-ci": "^2.0.0",
+        "lodash": "^4.17.20",
+        "patch-console": "^1.0.0",
+        "react-devtools-core": "^4.19.1",
+        "react-reconciler": "^0.26.2",
+        "scheduler": "^0.20.2",
+        "signal-exit": "^3.0.2",
+        "slice-ansi": "^3.0.0",
+        "stack-utils": "^2.0.2",
+        "string-width": "^4.2.2",
+        "type-fest": "^0.12.0",
+        "widest-line": "^3.1.0",
+        "wrap-ansi": "^6.2.0",
+        "ws": "^7.5.5",
+        "yoga-layout-prebuilt": "^1.9.6"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "@types/react": ">=16.8.0",
+        "react": ">=16.8.0"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/ink-divider": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/ink-divider/-/ink-divider-3.0.0.tgz",
+      "integrity": "sha512-Mqb9WArtEZCtXw622aHhJqPK157QNc+8ssl9/RvAZlS6nZRCKyW4mYOYCudQh6dSuFGt9eG5yaqT1mJaGmwu+w==",
+      "dependencies": {
+        "prop-types": "^15.7.2",
+        "string-width": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "peerDependencies": {
+        "ink": ">=3.0.0",
+        "react": ">=16.8.0"
+      }
+    },
+    "node_modules/ink-select-input": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/ink-select-input/-/ink-select-input-4.2.2.tgz",
+      "integrity": "sha512-E5AS2Vnd4CSzEa7Rm+hG47wxRQo1ASfh4msKxO7FHmn/ym+GKSSsFIfR+FonqjKNDPXYJClw8lM47RdN3Pi+nw==",
+      "dependencies": {
+        "arr-rotate": "^1.0.0",
+        "figures": "^3.2.0",
+        "lodash.isequal": "^4.5.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "ink": "^3.0.5",
+        "react": "^16.5.2 || ^17.0.0"
+      }
+    },
+    "node_modules/ink-spinner": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/ink-spinner/-/ink-spinner-4.0.3.tgz",
+      "integrity": "sha512-uJ4nbH00MM9fjTJ5xdw0zzvtXMkeGb0WV6dzSWvFv2/+ks6FIhpkt+Ge/eLdh0Ah6Vjw5pLMyNfoHQpRDRVFbQ==",
+      "dependencies": {
+        "cli-spinners": "^2.3.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "ink": ">=3.0.5",
+        "react": ">=16.8.2"
+      }
+    },
+    "node_modules/ink-text-input": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/ink-text-input/-/ink-text-input-4.0.3.tgz",
+      "integrity": "sha512-eQD01ik9ltmNoHmkeQ2t8LszYkv2XwuPSUz3ie/85qer6Ll/j0QSlSaLNl6ENHZakBHdCBVZY04iOXcLLXA0PQ==",
+      "dependencies": {
+        "chalk": "^4.1.0",
+        "type-fest": "^0.15.1"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "peerDependencies": {
+        "ink": "^3.0.0-3",
+        "react": "^16.5.2 || ^17.0.0"
+      }
+    },
+    "node_modules/ink-text-input/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/ink-text-input/node_modules/type-fest": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.15.1.tgz",
+      "integrity": "sha512-n+UXrN8i5ioo7kqT/nF8xsEzLaqFra7k32SEsSPwvXVGyAcRgV/FUQN/sgfptJTR1oRmmq7z4IXMFSM7im7C9A==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ink/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/inquirer": {
+      "version": "9.2.12",
+      "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.12.tgz",
+      "integrity": "sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==",
+      "dependencies": {
+        "@ljharb/through": "^2.3.11",
+        "ansi-escapes": "^4.3.2",
+        "chalk": "^5.3.0",
+        "cli-cursor": "^3.1.0",
+        "cli-width": "^4.1.0",
+        "external-editor": "^3.1.0",
+        "figures": "^5.0.0",
+        "lodash": "^4.17.21",
+        "mute-stream": "1.0.0",
+        "ora": "^5.4.1",
+        "run-async": "^3.0.0",
+        "rxjs": "^7.8.1",
+        "string-width": "^4.2.3",
+        "strip-ansi": "^6.0.1",
+        "wrap-ansi": "^6.2.0"
+      },
+      "engines": {
+        "node": ">=14.18.0"
+      }
+    },
+    "node_modules/inquirer/node_modules/bl": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+      "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+      "dependencies": {
+        "buffer": "^5.5.0",
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.4.0"
+      }
+    },
+    "node_modules/inquirer/node_modules/buffer": {
+      "version": "5.7.1",
+      "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+      "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ],
+      "dependencies": {
+        "base64-js": "^1.3.1",
+        "ieee754": "^1.1.13"
+      }
+    },
+    "node_modules/inquirer/node_modules/escape-string-regexp": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+      "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inquirer/node_modules/figures": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz",
+      "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==",
+      "dependencies": {
+        "escape-string-regexp": "^5.0.0",
+        "is-unicode-supported": "^1.2.0"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inquirer/node_modules/is-interactive": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+      "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/inquirer/node_modules/log-symbols": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+      "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+      "dependencies": {
+        "chalk": "^4.1.0",
+        "is-unicode-supported": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inquirer/node_modules/log-symbols/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/inquirer/node_modules/log-symbols/node_modules/is-unicode-supported": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inquirer/node_modules/ora": {
+      "version": "5.4.1",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+      "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
+      "dependencies": {
+        "bl": "^4.1.0",
+        "chalk": "^4.1.0",
+        "cli-cursor": "^3.1.0",
+        "cli-spinners": "^2.5.0",
+        "is-interactive": "^1.0.0",
+        "is-unicode-supported": "^0.1.0",
+        "log-symbols": "^4.1.0",
+        "strip-ansi": "^6.0.0",
+        "wcwidth": "^1.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/inquirer/node_modules/ora/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/inquirer/node_modules/ora/node_modules/is-unicode-supported": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+      "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-ci": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+      "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+      "dependencies": {
+        "ci-info": "^2.0.0"
+      },
+      "bin": {
+        "is-ci": "bin.js"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.13.1",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+      "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
+      "dependencies": {
+        "hasown": "^2.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-interactive": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+      "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-unicode-supported": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+      "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/jake": {
+      "version": "10.8.7",
+      "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz",
+      "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==",
+      "dev": true,
+      "dependencies": {
+        "async": "^3.2.3",
+        "chalk": "^4.0.2",
+        "filelist": "^1.0.4",
+        "minimatch": "^3.1.2"
+      },
+      "bin": {
+        "jake": "bin/cli.js"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/jake/node_modules/chalk": {
+      "version": "4.1.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+      "dev": true,
+      "dependencies": {
+        "ansi-styles": "^4.1.0",
+        "supports-color": "^7.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/chalk?sponsor=1"
+      }
+    },
+    "node_modules/js-sha3": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
+      "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q=="
+    },
+    "node_modules/js-tokens": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+      "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+    },
+    "node_modules/lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+    },
+    "node_modules/lodash.isequal": {
+      "version": "4.5.0",
+      "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+      "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
+    },
+    "node_modules/log-symbols": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz",
+      "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==",
+      "dependencies": {
+        "chalk": "^5.0.0",
+        "is-unicode-supported": "^1.1.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/loose-envify": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+      "dependencies": {
+        "js-tokens": "^3.0.0 || ^4.0.0"
+      },
+      "bin": {
+        "loose-envify": "cli.js"
+      }
+    },
+    "node_modules/lru-cache": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+      "dependencies": {
+        "yallist": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/marked": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
+      "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
+      "bin": {
+        "marked": "bin/marked.js"
+      },
+      "engines": {
+        "node": ">= 12"
+      }
+    },
+    "node_modules/marked-terminal": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.2.0.tgz",
+      "integrity": "sha512-Piv6yNwAQXGFjZSaiNljyNFw7jKDdGrw70FSbtxEyldLsyeuV5ZHm/1wW++kWbrOF1VPnUgYOhB2oLL0ZpnekA==",
+      "dependencies": {
+        "ansi-escapes": "^6.2.0",
+        "cardinal": "^2.1.1",
+        "chalk": "^5.2.0",
+        "cli-table3": "^0.6.3",
+        "node-emoji": "^1.11.0",
+        "supports-hyperlinks": "^2.3.0"
+      },
+      "engines": {
+        "node": ">=14.13.1 || >=16.0.0"
+      },
+      "peerDependencies": {
+        "marked": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0"
+      }
+    },
+    "node_modules/marked-terminal/node_modules/ansi-escapes": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz",
+      "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==",
+      "dependencies": {
+        "type-fest": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/marked-terminal/node_modules/type-fest": {
+      "version": "3.13.1",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
+      "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
+      "engines": {
+        "node": ">=14.16"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/match-sorter": {
+      "version": "6.3.3",
+      "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.3.tgz",
+      "integrity": "sha512-sgiXxrRijEe0SzHKGX4HouCpfHRPnqteH42UdMEW7BlWy990ZkzcvonJGv4Uu9WE7Y1f8Yocm91+4qFPCbmNww==",
+      "dependencies": {
+        "@babel/runtime": "^7.23.8",
+        "remove-accents": "0.5.0"
+      }
+    },
+    "node_modules/microseconds": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz",
+      "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA=="
+    },
+    "node_modules/mime-db": {
+      "version": "1.52.0",
+      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mime-types": {
+      "version": "2.1.35",
+      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+      "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+      "dependencies": {
+        "mime-db": "1.52.0"
+      },
+      "engines": {
+        "node": ">= 0.6"
+      }
+    },
+    "node_modules/mimic-fn": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+      "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/module-details-from-path": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz",
+      "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="
+    },
+    "node_modules/ms": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+      "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+    },
+    "node_modules/mute-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz",
+      "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==",
+      "engines": {
+        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+      }
+    },
+    "node_modules/mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
+      "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
+      "dependencies": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
+    "node_modules/nano-time": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz",
+      "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==",
+      "dependencies": {
+        "big-integer": "^1.6.16"
+      }
+    },
+    "node_modules/node-emoji": {
+      "version": "1.11.0",
+      "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz",
+      "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==",
+      "dependencies": {
+        "lodash": "^4.17.21"
+      }
+    },
+    "node_modules/object-assign": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+      "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/oblivious-set": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz",
+      "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw=="
+    },
+    "node_modules/once": {
+      "version": "1.4.0",
+      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+      "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/onetime": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+      "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+      "dependencies": {
+        "mimic-fn": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ora": {
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz",
+      "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==",
+      "dependencies": {
+        "chalk": "^5.0.0",
+        "cli-cursor": "^4.0.0",
+        "cli-spinners": "^2.6.1",
+        "is-interactive": "^2.0.0",
+        "is-unicode-supported": "^1.1.0",
+        "log-symbols": "^5.1.0",
+        "stdin-discarder": "^0.1.0",
+        "strip-ansi": "^7.0.1",
+        "wcwidth": "^1.0.1"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ora/node_modules/ansi-regex": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+      "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+      }
+    },
+    "node_modules/ora/node_modules/cli-cursor": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+      "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+      "dependencies": {
+        "restore-cursor": "^4.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ora/node_modules/restore-cursor": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+      "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+      "dependencies": {
+        "onetime": "^5.1.0",
+        "signal-exit": "^3.0.2"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/ora/node_modules/strip-ansi": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+      "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
+      "dependencies": {
+        "ansi-regex": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+      }
+    },
+    "node_modules/os-tmpdir": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+      "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/parents": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz",
+      "integrity": "sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg==",
+      "dev": true,
+      "dependencies": {
+        "path-platform": "~0.11.15"
+      }
+    },
+    "node_modules/parse5": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
+      "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug=="
+    },
+    "node_modules/parse5-htmlparser2-tree-adapter": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+      "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
+      "dependencies": {
+        "parse5": "^6.0.1"
+      }
+    },
+    "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+      "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
+    },
+    "node_modules/patch-console": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-1.0.0.tgz",
+      "integrity": "sha512-nxl9nrnLQmh64iTzMfyylSlRozL7kAXIaxw1fVcLYdyhNkJCRUzirRZTikXGJsg+hc4fqpneTK6iU2H1Q8THSA==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/path-is-absolute": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+      "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/path-parse": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+      "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+    },
+    "node_modules/path-platform": {
+      "version": "0.11.15",
+      "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz",
+      "integrity": "sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/prop-types": {
+      "version": "15.8.1",
+      "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+      "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+      "dependencies": {
+        "loose-envify": "^1.4.0",
+        "object-assign": "^4.1.1",
+        "react-is": "^16.13.1"
+      }
+    },
+    "node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
+    "node_modules/psl": {
+      "version": "1.9.0",
+      "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+      "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+    },
+    "node_modules/punycode": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/querystringify": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ=="
+    },
+    "node_modules/radash": {
+      "version": "9.5.0",
+      "resolved": "https://registry.npmjs.org/radash/-/radash-9.5.0.tgz",
+      "integrity": "sha512-t0s8BJlvrk8YPaOS8X0J2xzqAsBlXAUkDEjoBXwlzaXsXNCpBILjT9OvWlabLa2KB/r4XrhThdXjxMs7SiCyIw==",
+      "engines": {
+        "node": ">=14.18.0"
+      }
+    },
+    "node_modules/react": {
+      "version": "17.0.2",
+      "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
+      "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/react-devtools-core": {
+      "version": "4.28.5",
+      "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-4.28.5.tgz",
+      "integrity": "sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==",
+      "dependencies": {
+        "shell-quote": "^1.6.1",
+        "ws": "^7"
+      }
+    },
+    "node_modules/react-dom": {
+      "version": "17.0.2",
+      "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
+      "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "scheduler": "^0.20.2"
+      },
+      "peerDependencies": {
+        "react": "17.0.2"
+      }
+    },
+    "node_modules/react-is": {
+      "version": "16.13.1",
+      "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+      "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+    },
+    "node_modules/react-query": {
+      "version": "3.39.3",
+      "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.3.tgz",
+      "integrity": "sha512-nLfLz7GiohKTJDuT4us4X3h/8unOh+00MLb2yJoGTPjxKs2bc1iDhkNx2bd5MKklXnOD3NrVZ+J2UXujA5In4g==",
+      "dependencies": {
+        "@babel/runtime": "^7.5.5",
+        "broadcast-channel": "^3.4.1",
+        "match-sorter": "^6.0.2"
+      },
+      "funding": {
+        "type": "github",
+        "url": "https://github.com/sponsors/tannerlinsley"
+      },
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      },
+      "peerDependenciesMeta": {
+        "react-dom": {
+          "optional": true
+        },
+        "react-native": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/react-reconciler": {
+      "version": "0.26.2",
+      "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.26.2.tgz",
+      "integrity": "sha512-nK6kgY28HwrMNwDnMui3dvm3rCFjZrcGiuwLc5COUipBK5hWHLOxMJhSnSomirqWwjPBJKV1QcbkI0VJr7Gl1Q==",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1",
+        "scheduler": "^0.20.2"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      },
+      "peerDependencies": {
+        "react": "^17.0.2"
+      }
+    },
+    "node_modules/readable-stream": {
+      "version": "3.6.2",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+      "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+      "dependencies": {
+        "inherits": "^2.0.3",
+        "string_decoder": "^1.1.1",
+        "util-deprecate": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/redeyed": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz",
+      "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==",
+      "dependencies": {
+        "esprima": "~4.0.0"
+      }
+    },
+    "node_modules/regenerator-runtime": {
+      "version": "0.14.1",
+      "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+      "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
+    },
+    "node_modules/remove-accents": {
+      "version": "0.5.0",
+      "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz",
+      "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A=="
+    },
+    "node_modules/require-directory": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+      "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/require-in-the-middle": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.2.0.tgz",
+      "integrity": "sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw==",
+      "dependencies": {
+        "debug": "^4.1.1",
+        "module-details-from-path": "^1.0.3",
+        "resolve": "^1.22.1"
+      },
+      "engines": {
+        "node": ">=8.6.0"
+      }
+    },
+    "node_modules/requires-port": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+      "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ=="
+    },
+    "node_modules/resolve": {
+      "version": "1.22.8",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+      "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
+      "dependencies": {
+        "is-core-module": "^2.13.0",
+        "path-parse": "^1.0.7",
+        "supports-preserve-symlinks-flag": "^1.0.0"
+      },
+      "bin": {
+        "resolve": "bin/resolve"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/restore-cursor": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+      "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+      "dependencies": {
+        "onetime": "^5.1.0",
+        "signal-exit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/rimraf": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+      "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+      "dependencies": {
+        "glob": "^7.1.3"
+      },
+      "bin": {
+        "rimraf": "bin.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/run-async": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz",
+      "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==",
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/rxjs": {
+      "version": "7.8.1",
+      "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
+      "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
+      "dependencies": {
+        "tslib": "^2.1.0"
+      }
+    },
+    "node_modules/safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/feross"
+        },
+        {
+          "type": "patreon",
+          "url": "https://www.patreon.com/feross"
+        },
+        {
+          "type": "consulting",
+          "url": "https://feross.org/support"
+        }
+      ]
+    },
+    "node_modules/safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
+    "node_modules/scheduler": {
+      "version": "0.20.2",
+      "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
+      "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
+      "dependencies": {
+        "loose-envify": "^1.1.0",
+        "object-assign": "^4.1.1"
+      }
+    },
+    "node_modules/semver": {
+      "version": "5.7.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+      "bin": {
+        "semver": "bin/semver"
+      }
+    },
+    "node_modules/set-function-length": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz",
+      "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==",
+      "dependencies": {
+        "define-data-property": "^1.1.1",
+        "function-bind": "^1.1.2",
+        "get-intrinsic": "^1.2.2",
+        "gopd": "^1.0.1",
+        "has-property-descriptors": "^1.0.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/shell-quote": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz",
+      "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/shimmer": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz",
+      "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw=="
+    },
+    "node_modules/signal-exit": {
+      "version": "3.0.7",
+      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+      "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+    },
+    "node_modules/simple-update-notifier": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz",
+      "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==",
+      "dependencies": {
+        "semver": "~7.0.0"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/simple-update-notifier/node_modules/semver": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+      "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+      "bin": {
+        "semver": "bin/semver.js"
+      }
+    },
+    "node_modules/slice-ansi": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz",
+      "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "astral-regex": "^2.0.0",
+        "is-fullwidth-code-point": "^3.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/stack-chain": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz",
+      "integrity": "sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug=="
+    },
+    "node_modules/stack-utils": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+      "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
+      "dependencies": {
+        "escape-string-regexp": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/stack-utils/node_modules/escape-string-regexp": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+      "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/stdin-discarder": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz",
+      "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==",
+      "dependencies": {
+        "bl": "^5.0.0"
+      },
+      "engines": {
+        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/string_decoder": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+      "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+      "dependencies": {
+        "safe-buffer": "~5.2.0"
+      }
+    },
+    "node_modules/string-width": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+      "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-ansi": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+      "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-color": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-hyperlinks": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
+      "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
+      "dependencies": {
+        "has-flag": "^4.0.0",
+        "supports-color": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/supports-preserve-symlinks-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+      "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/thenify": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
+      "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
+      "dependencies": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "node_modules/thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
+      "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
+      "dependencies": {
+        "thenify": ">= 3.1.0 < 4"
+      },
+      "engines": {
+        "node": ">=0.8"
+      }
+    },
+    "node_modules/tiny-invariant": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
+      "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw=="
+    },
+    "node_modules/tmp": {
+      "version": "0.0.33",
+      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+      "dependencies": {
+        "os-tmpdir": "~1.0.2"
+      },
+      "engines": {
+        "node": ">=0.6.0"
+      }
+    },
+    "node_modules/tough-cookie": {
+      "version": "4.1.3",
+      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
+      "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==",
+      "dependencies": {
+        "psl": "^1.1.33",
+        "punycode": "^2.1.1",
+        "universalify": "^0.2.0",
+        "url-parse": "^1.5.3"
+      },
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/ts-dedent": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
+      "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
+      "engines": {
+        "node": ">=6.10"
+      }
+    },
+    "node_modules/tslib": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+      "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+    },
+    "node_modules/type-fest": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.12.0.tgz",
+      "integrity": "sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==",
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/typescript": {
+      "version": "4.9.5",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz",
+      "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==",
+      "dev": true,
+      "bin": {
+        "tsc": "bin/tsc",
+        "tsserver": "bin/tsserver"
+      },
+      "engines": {
+        "node": ">=4.2.0"
+      }
+    },
+    "node_modules/undici-types": {
+      "version": "5.26.5",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+      "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+      "dev": true
+    },
+    "node_modules/universalify": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+      "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
+      "engines": {
+        "node": ">= 4.0.0"
+      }
+    },
+    "node_modules/unload": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz",
+      "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==",
+      "dependencies": {
+        "@babel/runtime": "^7.6.2",
+        "detect-node": "^2.0.4"
+      }
+    },
+    "node_modules/url-parse": {
+      "version": "1.5.10",
+      "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+      "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
+      "dependencies": {
+        "querystringify": "^2.1.1",
+        "requires-port": "^1.0.0"
+      }
+    },
+    "node_modules/use-sync-external-store": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+      "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+      "peerDependencies": {
+        "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+      }
+    },
+    "node_modules/use-zustand": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/use-zustand/-/use-zustand-0.0.1.tgz",
+      "integrity": "sha512-axjswesUfXirTQ1CC1F4r0dkaI7g2nMEftyvg23Wq4PnAbLogswzj+o5gbnnnQaQOMXKHxNZIlYpKfuTnL466Q==",
+      "peerDependencies": {
+        "react": "*"
+      }
+    },
+    "node_modules/util-deprecate": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+      "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+    },
+    "node_modules/uuid": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+      "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+      "funding": [
+        "https://github.com/sponsors/broofa",
+        "https://github.com/sponsors/ctavan"
+      ],
+      "bin": {
+        "uuid": "dist/bin/uuid"
+      }
+    },
+    "node_modules/wcwidth": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+      "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
+      "dependencies": {
+        "defaults": "^1.0.3"
+      }
+    },
+    "node_modules/widest-line": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
+      "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
+      "dependencies": {
+        "string-width": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrap-ansi": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+      "dependencies": {
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+    },
+    "node_modules/ws": {
+      "version": "7.5.9",
+      "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
+      "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==",
+      "engines": {
+        "node": ">=8.3.0"
+      },
+      "peerDependencies": {
+        "bufferutil": "^4.0.1",
+        "utf-8-validate": "^5.0.2"
+      },
+      "peerDependenciesMeta": {
+        "bufferutil": {
+          "optional": true
+        },
+        "utf-8-validate": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/y18n": {
+      "version": "5.0.8",
+      "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+      "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yallist": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+    },
+    "node_modules/yargs": {
+      "version": "16.2.0",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+      "dependencies": {
+        "cliui": "^7.0.2",
+        "escalade": "^3.1.1",
+        "get-caller-file": "^2.0.5",
+        "require-directory": "^2.1.1",
+        "string-width": "^4.2.0",
+        "y18n": "^5.0.5",
+        "yargs-parser": "^20.2.2"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yargs-parser": {
+      "version": "20.2.9",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+      "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yoga-layout-prebuilt": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmjs.org/yoga-layout-prebuilt/-/yoga-layout-prebuilt-1.10.0.tgz",
+      "integrity": "sha512-YnOmtSbv4MTf7RGJMK0FvZ+KD8OEe/J5BNnR0GHhD8J/XcG/Qvxgszm0Un6FTHWW4uHlTgP0IztiXQnGyIR45g==",
+      "dependencies": {
+        "@types/yoga-layout": "1.9.2"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/zustand": {
+      "version": "4.4.7",
+      "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.4.7.tgz",
+      "integrity": "sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==",
+      "dependencies": {
+        "use-sync-external-store": "1.2.0"
+      },
+      "engines": {
+        "node": ">=12.7.0"
+      },
+      "peerDependencies": {
+        "@types/react": ">=16.8",
+        "immer": ">=9.0",
+        "react": ">=16.8"
+      },
+      "peerDependenciesMeta": {
+        "@types/react": {
+          "optional": true
+        },
+        "immer": {
+          "optional": true
+        },
+        "react": {
+          "optional": true
+        }
+      }
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/tools/misc/gitrs/default.nix b/nixpkgs/pkgs/tools/misc/gitrs/default.nix
new file mode 100644
index 000000000000..4ce36855ef67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gitrs/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+, pkg-config
+, libiconv
+, darwin
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gitrs";
+  version = "v0.3.6";
+
+  src = fetchFromGitHub {
+    owner = "mccurdyc";
+    repo = pname;
+    rev = version;
+    hash = "sha256-+43XJroPNWmdUC6FDL84rZWrJm5fzuUXfpDkAMyVQQg=";
+  };
+
+  cargoHash = "sha256-2TXm1JTs0Xkid91A5tdi6Kokm0K1NOPmlocwFXv48uw=";
+
+  nativeBuildInputs = [
+    pkg-config # for openssl
+  ];
+
+  buildInputs = [ openssl.dev ]
+    ++ lib.optionals stdenv.isDarwin [
+    libiconv
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  meta = with lib; {
+    description = "A simple, opinionated, tool, written in Rust, for declaratively managing Git repos on your machine";
+    homepage = "https://github.com/mccurdyc/gitrs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mccurdyc ];
+    mainProgram = "gitrs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/glasgow/default.nix b/nixpkgs/pkgs/tools/misc/glasgow/default.nix
new file mode 100644
index 000000000000..77f3eb01d96a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/glasgow/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, python3
+, fetchFromGitHub
+, sdcc
+, yosys
+, icestorm
+, nextpnr
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "glasgow";
+  version = "unstable-2023-09-20";
+  # python -m setuptools_scm
+  realVersion = "0.1.dev1798+g${lib.substring 0 7 src.rev}";
+
+  src = fetchFromGitHub {
+    owner = "GlasgowEmbedded";
+    repo = "glasgow";
+    rev = "e9a9801d5be3dcba0ee188dd8a6e9115e337795d";
+    sha256 = "sha256-ztB3I/jrDSm1gKB1e5igivUVloq+YYhkshDlWg75NMA=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.setuptools-scm
+    sdcc
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiohttp
+    amaranth
+    appdirs
+    bitarray
+    crc
+    fx2
+    libusb1
+    packaging
+    pyvcd
+    setuptools
+  ];
+
+  nativeCheckInputs = [ yosys icestorm nextpnr ];
+
+  enableParallelBuilding = true;
+
+  preBuild = ''
+    make -C firmware LIBFX2=${python3.pkgs.fx2}/share/libfx2
+    cp firmware/glasgow.ihex software/glasgow
+    cd software
+    export SETUPTOOLS_SCM_PRETEND_VERSION="${realVersion}"
+  '';
+
+  # installCheck tries to build_ext again
+  doInstallCheck = false;
+
+  postInstall = ''
+    mkdir -p $out/etc/udev/rules.d
+    cp $src/config/99-glasgow.rules $out/etc/udev/rules.d
+  '';
+
+  checkPhase = ''
+    # tests attempt to cache bitstreams
+    # for linux:
+    export XDG_CACHE_HOME=$TMPDIR
+    # for darwin:
+    export HOME=$TMPDIR
+    ${python3.interpreter} -W ignore::DeprecationWarning test.py
+  '';
+
+  makeWrapperArgs = [
+    "--set" "YOSYS" "${yosys}/bin/yosys"
+    "--set" "ICEPACK" "${icestorm}/bin/icepack"
+    "--set" "NEXTPNR_ICE40" "${nextpnr}/bin/nextpnr-ice40"
+  ];
+
+  meta = with lib; {
+    description = "Software for Glasgow, a digital interface multitool";
+    homepage = "https://github.com/GlasgowEmbedded/Glasgow";
+    license = licenses.bsd0;
+    maintainers = with maintainers; [ emily thoughtpolice ];
+    mainProgram = "glasgow";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/go-ios/default.nix b/nixpkgs/pkgs/tools/misc/go-ios/default.nix
new file mode 100644
index 000000000000..a5f204c9d04d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/go-ios/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+}:
+
+buildGoModule rec {
+  pname = "go-ios";
+  version = "1.0.121";
+
+  src = fetchFromGitHub {
+    owner = "danielpaulus";
+    repo = "go-ios";
+    rev = "v${version}";
+    sha256 = "sha256-zWaEtfxrJYaROQ05nBQvM5fiIRSG+hCecU+BVnpIuck=";
+  };
+
+  vendorHash = "sha256-0Wi9FCTaOD+kzO5cRjpqbXHqx5UAKSGu+hc9bpj+PWo=";
+
+  excludedPackages = [
+    "restapi"
+  ];
+
+  checkFlags = [
+    "-tags=fast"
+  ];
+
+  postInstall = ''
+    # aligns the binary with what is expected from go-ios
+    mv $out/bin/go-ios $out/bin/ios
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "An operating system independent implementation of iOS device features";
+    homepage = "https://github.com/danielpaulus/go-ios";
+    license = licenses.mit;
+    maintainers = with maintainers; [ eyjhb ];
+    mainProgram = "ios";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/go.rice/default.nix b/nixpkgs/pkgs/tools/misc/go.rice/default.nix
new file mode 100644
index 000000000000..3ee268f2a829
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/go.rice/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-rice";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "GeertJohan";
+    repo = "go.rice";
+    rev = "v${version}";
+    sha256 = "sha256-jO4otde/m52L2NrE88aXRjdGDBNxnbP1Zt+5fEqfNIc=";
+  };
+
+  vendorHash = "sha256-VlpdZcqg7yWUADN8oD/IAgAXVdzJeIeymx2Pu/7E21o=";
+
+  subPackages = [ "." "rice" ];
+
+  meta = with lib; {
+    description = "A Go package that makes working with resources such as html, js, css, images, templates very easy";
+    homepage = "https://github.com/GeertJohan/go.rice";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ blaggacao ];
+    mainProgram = "rice";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/goaccess/default.nix b/nixpkgs/pkgs/tools/misc/goaccess/default.nix
new file mode 100644
index 000000000000..68169debff5b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/goaccess/default.nix
@@ -0,0 +1,45 @@
+{
+  lib,
+  stdenv,
+  autoreconfHook,
+  fetchFromGitHub,
+  gettext,
+  libmaxminddb,
+  ncurses,
+  openssl,
+  withGeolocation ? true,
+}:
+
+stdenv.mkDerivation rec {
+  pname = "goaccess";
+  version = "1.9.2";
+
+  src = fetchFromGitHub {
+    owner = "allinurl";
+    repo = "goaccess";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-FAooBAP2RbqAp7NTJNBdbRVldGCbx3SvOoTaiQ9Fl/I=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [
+    ncurses
+    openssl
+  ] ++ lib.optionals withGeolocation [ libmaxminddb ] ++ lib.optionals stdenv.isDarwin [ gettext ];
+
+  configureFlags = [
+    "--enable-utf8"
+    "--with-openssl"
+  ] ++ lib.optionals withGeolocation [ "--enable-geoip=mmdb" ];
+
+  meta = with lib; {
+    description = "Real-time web log analyzer and interactive viewer that runs in a terminal in *nix systems";
+    homepage = "https://goaccess.io";
+    changelog = "https://github.com/allinurl/goaccess/raw/v${version}/ChangeLog";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ederoyd46 ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "goaccess";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/godu/default.nix b/nixpkgs/pkgs/tools/misc/godu/default.nix
new file mode 100644
index 000000000000..7bd29ed43661
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/godu/default.nix
@@ -0,0 +1,25 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "godu";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "viktomas";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-fJeSUAuNELZZ1DcybNsYd2ZX93VYWsLum5tHp68ZVlo=";
+  };
+
+  vendorHash = "sha256-8cZCeZ0gqxqbwB0WuEOFmEUNQd3/KcLeN0eLGfWG8BY=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Utility helping to discover large files/folders";
+    homepage = "https://github.com/viktomas/godu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rople380 ];
+    mainProgram = "godu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gomi/default.nix b/nixpkgs/pkgs/tools/misc/gomi/default.nix
new file mode 100644
index 000000000000..76ef724332e5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gomi/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "gomi";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "b4b4r07";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YsR2KU5Np6xQHkjM8KAoDp/XZ/9DkwBlMbu2IX5OQlk=";
+  };
+
+  vendorHash = "sha256-n31LUfdgbLQ/KmcFi8LdqmDHXgzbSCc+dnustGvc5SY=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Replacement for UNIX rm command";
+    homepage = "https://github.com/b4b4r07/gomi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ozkutuk ];
+    mainProgram = "gomi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/google-cloud-bigtable-tool/default.nix b/nixpkgs/pkgs/tools/misc/google-cloud-bigtable-tool/default.nix
new file mode 100644
index 000000000000..3c61159bf972
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/google-cloud-bigtable-tool/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "google-cloud-bigtable-tool";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "googleapis";
+    repo = "cloud-bigtable-cbt-cli";
+    rev = "v.${version}";
+    hash = "sha256-N5nbWMj7kLIdRiwBUWFz4Rat88Wx01i3hceMxAvSjaA=";
+  };
+
+  vendorHash = "sha256-kwvEfvHs6XF84bB3Ss1307OjId0nh/0Imih1fRFdY0M=";
+
+  preCheck = ''
+    buildFlagsArray+="-short"
+  '';
+
+  meta = with lib; {
+    description = "Google Cloud Bigtable Tool";
+    longDescription = ''
+      `cbt` is the Google Cloud Bigtable Tool. A CLI utility to interact with Google Cloud Bigtable.
+      The cbt CLI is a command-line interface for performing several different operations on Cloud Bigtable.
+      It is written in Go using the Go client library for Cloud Bigtable.
+      An overview of its usage can be found in the [Google Cloud docs](https://cloud.google.com/bigtable/docs/cbt-overview).
+      For information about Bigtable in general, see the [overview of Bigtable](https://cloud.google.com/bigtable/docs/overview).
+    '';
+    homepage = "https://github.com/googleapis/cloud-bigtable-cbt-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ totoroot ];
+    mainProgram = "cbt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/google-cloud-sql-proxy/default.nix b/nixpkgs/pkgs/tools/misc/google-cloud-sql-proxy/default.nix
new file mode 100644
index 000000000000..1043b4982018
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/google-cloud-sql-proxy/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGo122Module
+, fetchFromGitHub
+}:
+
+buildGo122Module rec {
+  pname = "google-cloud-sql-proxy";
+  version = "2.9.0";
+
+  src = fetchFromGitHub {
+    owner = "GoogleCloudPlatform";
+    repo = "cloud-sql-proxy";
+    rev = "v${version}";
+    hash = "sha256-V1Q6DFWSIIff2FuOyE5XwtJN8RObGlhpW/nMWFmNoxI=";
+  };
+
+  subPackages = [ "." ];
+
+  vendorHash = "sha256-sAVMmDeHXEgQXb/Xi4nXYztXjuykE0TFebkeubMTZ3k=";
+
+  preCheck = ''
+    buildFlagsArray+="-short"
+  '';
+
+  meta = with lib; {
+    description = "Utility for ensuring secure connections to Google Cloud SQL instances";
+    longDescription = ''
+      The Cloud SQL Auth Proxy is a utility for ensuring secure connections to your Cloud SQL instances.
+      It provides IAM authorization, allowing you to control who can connect to your instance through IAM permissions,
+      and TLS 1.3 encryption, without having to manage certificates.
+      See the [Connecting Overview](https://cloud.google.com/sql/docs/mysql/connect-overview) page for more information
+      on connecting to a Cloud SQL instance, or the [About the Proxy](https://cloud.google.com/sql/docs/mysql/sql-proxy)
+      page for details on how the Cloud SQL Proxy works.
+    '';
+    homepage = "https://github.com/GoogleCloudPlatform/cloud-sql-proxy";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nicknovitski totoroot ];
+    mainProgram = "cloud-sql-proxy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/goose/default.nix b/nixpkgs/pkgs/tools/misc/goose/default.nix
new file mode 100644
index 000000000000..dcb6acec4d9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/goose/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "goose";
+  version = "3.19.2";
+
+  src = fetchFromGitHub {
+    owner = "pressly";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-kGa3vZSFQ8Dgndc0qRnFnQwlU2hst6j3UFUXw+tfYR0=";
+  };
+
+  proxyVendor = true;
+  vendorHash = "sha256-aoBxReKRk7dkFR/fJ5uHDZrJRGutLTU2BhDWCTBN2BA=";
+
+  # skipping: end-to-end tests require a docker daemon
+  postPatch = ''
+    rm -r tests/e2e
+    rm -r tests/gomigrations
+    rm -r tests/vertica
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.gooseVersion=${version}"
+  ];
+
+  checkFlags = [
+    # NOTE:
+    # - skipping: these also require a docker daemon
+    # - these are for go tests that live outside of the /tests directory
+    "-skip=TestClickUpDown|TestClickHouseFirstThree|TestLockModeAdvisorySession|TestDialectStore|TestGoMigrationStats|TestPostgresSessionLocker"
+  ];
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "Database migration tool which supports SQL migrations and Go functions";
+    homepage = "https://pressly.github.io/goose/";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "goose";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/goreleaser/default.nix b/nixpkgs/pkgs/tools/misc/goreleaser/default.nix
new file mode 100644
index 000000000000..7b121ac3f9a7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/goreleaser/default.nix
@@ -0,0 +1,61 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, buildPackages
+, testers
+, goreleaser
+}:
+buildGoModule rec {
+  pname = "goreleaser";
+  version = "1.25.1";
+
+  src = fetchFromGitHub {
+    owner = "goreleaser";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-WYpFSV4dMz6sYNc45iXE/oOTmyZqMqHBZlx+00NZHbU=";
+  };
+
+  vendorHash = "sha256-vI/S4QtN72tmBVZ2PPcavotJBkl+bdXO9OFqlOGw1J8=";
+
+  ldflags =
+    [ "-s" "-w" "-X main.version=${version}" "-X main.builtBy=nixpkgs" ];
+
+  # tests expect the source files to be a build repo
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall =
+    let emulator = stdenv.hostPlatform.emulator buildPackages;
+    in ''
+      ${emulator} $out/bin/goreleaser man > goreleaser.1
+      installManPage ./goreleaser.1
+      installShellCompletion --cmd goreleaser \
+        --bash <(${emulator} $out/bin/goreleaser completion bash) \
+        --fish <(${emulator} $out/bin/goreleaser completion fish) \
+        --zsh  <(${emulator} $out/bin/goreleaser completion zsh)
+    '';
+
+  passthru.tests.version = testers.testVersion {
+    package = goreleaser;
+    command = "goreleaser -v";
+    inherit version;
+  };
+
+  meta = with lib; {
+    description = "Deliver Go binaries as fast and easily as possible";
+    homepage = "https://goreleaser.com";
+    maintainers = with maintainers; [
+      c0deaddict
+      sarcasticadmin
+      techknowlogick
+      developer-guy
+      caarlos0
+    ];
+    license = licenses.mit;
+    mainProgram = "goreleaser";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gosu/default.nix b/nixpkgs/pkgs/tools/misc/gosu/default.nix
new file mode 100644
index 000000000000..8b5a5fb88d33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gosu/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, gosu }:
+
+buildGoModule rec {
+  pname = "gosu";
+  version = "1.17";
+
+  src = fetchFromGitHub {
+    owner = "tianon";
+    repo = "gosu";
+    rev = version;
+    hash = "sha256-ziviUXqCpCGECewyZNLDKSjnpmz/3i5DKrIKZlLwl4o=";
+  };
+
+  vendorHash = "sha256-fygLYSO0kpMFJd6WQp/uLYkELkyaOPZ9V8BrJcIcMuU=";
+
+  ldflags = [ "-d" "-s" "-w" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = gosu;
+  };
+
+  meta = with lib; {
+    description = "Tool that avoids TTY and signal-forwarding behavior of sudo and su";
+    mainProgram = "gosu";
+    homepage = "https://github.com/tianon/gosu";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gotify-cli/default.nix b/nixpkgs/pkgs/tools/misc/gotify-cli/default.nix
new file mode 100644
index 000000000000..296f3d19a88d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gotify-cli/default.nix
@@ -0,0 +1,31 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "gotify-cli";
+  version = "2.2.3";
+
+  src = fetchFromGitHub {
+    owner = "gotify";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-mOIomHNA20gKU7uh2Sf4NqqLNjNnD5hgOTUu9DuduiI=";
+  };
+
+  vendorHash = "sha256-ObJfUIy2GwogFm2/uCmShEXnIxDTqWWXCZPu9KJVFOA=";
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/gotify
+  '';
+
+  ldflags = [
+    "-X main.Version=${version}" "-X main.Commit=${version}" "-X main.BuildDate=1970-01-01"
+  ];
+
+  meta = with lib; {
+    license = licenses.mit;
+    homepage = "https://github.com/gotify/cli";
+    description = "A command line interface for pushing messages to gotify/server";
+    maintainers = with maintainers; [ ];
+    mainProgram = "gotify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gotify-desktop/default.nix b/nixpkgs/pkgs/tools/misc/gotify-desktop/default.nix
new file mode 100644
index 000000000000..90b1bec1f5a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gotify-desktop/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, rustPlatform, openssl, pkg-config, stdenv}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gotify-desktop";
+  version = "1.3.6";
+
+  src = fetchFromGitHub {
+    owner = "desbma";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-epolESdf9+2lI+AJ8hMpVPakS1f8fYam+JniiPLIHCs=";
+  };
+
+  cargoHash = "sha256-VJ/k6sfBCuokXGpfZ9zGQ7ucbHLweUSgBhlChwko69g=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ];
+
+  meta = with lib; {
+    description = "Small Gotify daemon to send messages as desktop notifications";
+    homepage = "https://github.com/desbma/gotify-desktop";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bryanasdev000 genofire ];
+    broken = stdenv.isDarwin;
+    mainProgram = "gotify-desktop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gparted/default.nix b/nixpkgs/pkgs/tools/misc/gparted/default.nix
new file mode 100644
index 000000000000..7c068656385d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gparted/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv, fetchurl, gettext, coreutils, gnused, gnome
+, gnugrep, parted, glib, libuuid, pkg-config, gtkmm3, libxml2
+, gpart, hdparm, procps, util-linux, polkit, wrapGAppsHook, substituteAll
+, mtools, dosfstools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gparted";
+  version = "1.6.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gparted/${pname}-${version}.tar.gz";
+    sha256 = "sha256-m59Rs85JTdy1mlXhrmZ5wJQ2YE4zHb9aU21g3tbG6ls=";
+  };
+
+  # Tries to run `pkexec --version` to get version.
+  # however the binary won't be suid so it returns
+  # an error preventing the program from detection
+  patches = [
+    (substituteAll {
+      src = ./polkit.patch;
+      polkit_version = polkit.version;
+    })
+  ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [ "--disable-doc" ];
+
+  buildInputs = [ parted glib libuuid gtkmm3 libxml2 polkit.bin gnome.adwaita-icon-theme  ];
+  nativeBuildInputs = [ gettext pkg-config wrapGAppsHook ];
+
+  preConfigure = ''
+    # For ITS rules
+    addToSearchPath "XDG_DATA_DIRS" "${polkit.out}/share"
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+       --prefix PATH : "${lib.makeBinPath [ gpart hdparm util-linux procps coreutils gnused gnugrep mtools dosfstools ]}"
+    )
+  '';
+
+  # Doesn't get installed automaticallly if PREFIX != /usr
+  postInstall = ''
+    install -D -m0644 org.gnome.gparted.policy \
+      $out/share/polkit-1/actions/org.gnome.gparted.policy
+  '';
+
+  meta = with lib; {
+    description = "Graphical disk partitioning tool";
+    longDescription = ''
+      GNOME Partition Editor for creating, reorganizing, and deleting disk
+      partitions. GParted enables you to change the partition organization
+      while preserving the partition contents.
+    '';
+    homepage = "https://gparted.org";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    mainProgram = "gparted";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gparted/polkit.patch b/nixpkgs/pkgs/tools/misc/gparted/polkit.patch
new file mode 100644
index 000000000000..a42ed785de94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gparted/polkit.patch
@@ -0,0 +1,12 @@
+diff -ru old/gparted-1.0.0/configure gparted-1.0.0/configure
+--- old/gparted-1.0.0/configure	2019-05-29 12:02:13.000000000 -0400
++++ gparted-1.0.0/configure	2019-08-08 18:09:52.792795781 -0400
+@@ -16145,7 +16145,7 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pkexec >= $PKEXEC_REQUIRED_VERSION" >&5
+ $as_echo_n "checking for pkexec >= $PKEXEC_REQUIRED_VERSION... " >&6; }
+ PKEXEC_REQUIRED_INT=`echo "$PKEXEC_REQUIRED_VERSION" | $AWK -F. '{print $1 * 10000 + $2}'`
+-PKEXEC_VERSION_OUTPUT=`pkexec --version 2> /dev/null` ||
++PKEXEC_VERSION_OUTPUT='pkexec version @polkit_version@' ||
+ 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+ $as_echo "not found" >&6; }
+ if test "x$PKEXEC_VERSION_OUTPUT" != 'x'; then
diff --git a/nixpkgs/pkgs/tools/misc/gpick/default.nix b/nixpkgs/pkgs/tools/misc/gpick/default.nix
new file mode 100644
index 000000000000..0d421212a3d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gpick/default.nix
@@ -0,0 +1,46 @@
+{ stdenv
+, fetchFromGitHub
+, cmake
+, wrapGAppsHook
+, boost
+, pkg-config
+, gtk3
+, ragel
+, lua
+, fetchpatch
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gpick";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "thezbyg";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Z17YpdAAr2wvDFkrAosyCN6Y/wsFVkiB9IDvXuP9lYo=";
+  };
+
+  patches = [
+    # gpick/cmake/Version.cmake
+    ./dot-version.patch
+
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/archlinux/svntogit-community/1d53a9aace4bb60300e52458bb1577d248cb87cd/trunk/buildfix.diff";
+      hash = "sha256-DnRU90VPyFhLYTk4GPJoiVYadJgtYgjMS4MLgmpYLP0=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config wrapGAppsHook ];
+  buildInputs = [ boost gtk3 ragel lua ];
+
+  meta = with lib; {
+    description = "Advanced color picker written in C++ using GTK+ toolkit";
+    homepage = "http://www.gpick.org/";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.vanilla ];
+    platforms = platforms.linux;
+    mainProgram = "gpick";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gpick/dot-version.patch b/nixpkgs/pkgs/tools/misc/gpick/dot-version.patch
new file mode 100644
index 000000000000..b460fbc98b21
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gpick/dot-version.patch
@@ -0,0 +1,10 @@
+diff --git a/.version b/.version
+new file mode 100644
+index 0000000..abc36c9
+--- /dev/null
++++ b/.version
+@@ -0,0 +1,4 @@
++0.3
++0
++dd27232a4dd08cf6271ecc2a7e96da25f8071ed5
++2022-05-08
diff --git a/nixpkgs/pkgs/tools/misc/gradescope-submit/default.nix b/nixpkgs/pkgs/tools/misc/gradescope-submit/default.nix
new file mode 100644
index 000000000000..89e7dc89438c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gradescope-submit/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchFromGitHub
+, ocamlPackages
+}:
+
+ocamlPackages.buildDunePackage rec {
+  pname = "gradescope_submit";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "nmittu";
+    repo = "gradescope-submit";
+    rev = version;
+    hash = "sha256-BVNXipgw0wz3PRGYvur8jrXZw/6i0fZ+MOZHzXzlFOk=";
+  };
+
+  buildInputs = with ocamlPackages; [
+    core
+    core_unix
+    cohttp
+    cohttp-lwt-unix
+    lambdasoup
+    toml
+    yojson
+    lwt_ssl
+  ];
+
+  meta = with lib; {
+    description = "A small script to submit to Gradescope via GitHub";
+    homepage = "https://github.com/nmittu/gradescope-submit";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "submit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grafterm/default.nix b/nixpkgs/pkgs/tools/misc/grafterm/default.nix
new file mode 100644
index 000000000000..a15ab6e5ed0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grafterm/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "grafterm";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "slok";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-0pM36rAmwx/P1KAlmVaGoSj8eb9JucYycNC2R867dVo=";
+  };
+
+  vendorHash = "sha256-veg5B68AQhkSZg8YA/e4FbqJNG0YGwnUQFsAdscz0QI=";
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Command-line tool for rendering metrics dashboards inspired by Grafana";
+    homepage = "https://github.com/slok/grafterm";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ arikgrahl ];
+    mainProgram = "grafterm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grass-sass/default.nix b/nixpkgs/pkgs/tools/misc/grass-sass/default.nix
new file mode 100644
index 000000000000..457822052d01
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grass-sass/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "grass";
+  version = "0.13.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-JFfNj+IMwIZ+DkaCy3mobSAaq4YphhMpGkx/P33UdJE=";
+  };
+
+  cargoHash = "sha256-WzG+yOjxTX2ms2JMpZJYcaKZw0gc9g6/OUe/T7oyK20=";
+
+  # tests require rust nightly
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A Sass compiler written purely in Rust";
+    homepage = "https://github.com/connorskees/grass";
+    changelog = "https://github.com/connorskees/grass/blob/master/CHANGELOG.md#${replaceStrings [ "." ] [ "" ] version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "grass";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/graylog/5.1.nix b/nixpkgs/pkgs/tools/misc/graylog/5.1.nix
new file mode 100644
index 000000000000..2a77925e0b37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/graylog/5.1.nix
@@ -0,0 +1,9 @@
+{ callPackage, lib, ...}:
+let
+  buildGraylog = callPackage ./graylog.nix {};
+in buildGraylog {
+  version = "5.1.11";
+  sha256 = "sha256-xvG9COKMNgHg5zzyCRfXsfrW3C2Gwbdxf8PMXQnJ2yg=";
+  maintainers = [ lib.maintainers.f2k1de ];
+  license = lib.licenses.sspl;
+}
diff --git a/nixpkgs/pkgs/tools/misc/graylog/5.2.nix b/nixpkgs/pkgs/tools/misc/graylog/5.2.nix
new file mode 100644
index 000000000000..e262d84f3f09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/graylog/5.2.nix
@@ -0,0 +1,9 @@
+{ callPackage, lib, ...}:
+let
+  buildGraylog = callPackage ./graylog.nix {};
+in buildGraylog {
+  version = "5.2.4";
+  sha256 = "sha256-TbZMRMLpYlg6wrsC+tDEk8sLYJ1nwJum/rL30CEGQcw=";
+  maintainers = [ lib.maintainers.f2k1de ];
+  license = lib.licenses.sspl;
+}
diff --git a/nixpkgs/pkgs/tools/misc/graylog/graylog.nix b/nixpkgs/pkgs/tools/misc/graylog/graylog.nix
new file mode 100644
index 000000000000..4608d6fa3f57
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/graylog/graylog.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, makeWrapper, openjdk11_headless, openjdk17_headless, systemd, nixosTests}:
+
+{ version, sha256, maintainers, license }:
+stdenv.mkDerivation rec {
+  pname = "graylog_${lib.versions.majorMinor version}";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://packages.graylog2.org/releases/graylog/graylog-${version}.tgz";
+    inherit sha256;
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  makeWrapperArgs = [
+    "--set-default" "JAVA_HOME" "${if (lib.versionAtLeast version "5.0") then openjdk17_headless else openjdk11_headless}"
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ systemd ]}"
+  ];
+
+  passthru.tests = { inherit (nixosTests) graylog; };
+
+  installPhase = ''
+    mkdir -p $out
+    cp -r {graylog.jar,bin,plugin} $out
+  '' + lib.optionalString (lib.versionOlder version "4.3") ''
+    cp -r lib $out
+  '' + ''
+    wrapProgram $out/bin/graylogctl $makeWrapperArgs
+  '';
+
+  meta = with lib; {
+    description = "Open source log management solution";
+    homepage    = "https://www.graylog.org/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    inherit license;
+    inherit maintainers;
+    mainProgram = "graylogctl";
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/graylog/plugins.nix b/nixpkgs/pkgs/tools/misc/graylog/plugins.nix
new file mode 100644
index 000000000000..7907a4c9a225
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/graylog/plugins.nix
@@ -0,0 +1,304 @@
+{ lib, stdenv, fetchurl, unzip, graylog-5_1 }:
+
+let
+  inherit (lib)
+    licenses
+    maintainers
+    platforms
+    sourceTypes
+    ;
+
+  glPlugin = a@{
+    pluginName,
+    version,
+    installPhase ? ''
+      mkdir -p $out/bin
+      cp $src $out/bin/${pluginName}-${version}.jar
+    '',
+    ...
+  }:
+    stdenv.mkDerivation (a // {
+      inherit installPhase;
+      dontUnpack = true;
+      nativeBuildInputs = [ unzip ];
+      meta = a.meta // {
+        platforms = graylog-5_1.meta.platforms;
+        maintainers = (a.meta.maintainers or []) ++ [ maintainers.fadenb ];
+        sourceProvenance = with sourceTypes; [ binaryBytecode ];
+      };
+    });
+in {
+  aggregates = glPlugin rec {
+    name = "graylog-aggregates-${version}";
+    pluginName = "graylog-plugin-aggregates";
+    version = "2.4.0";
+    src = fetchurl {
+      url = "https://github.com/cvtienhoven/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1c48almnjr0b6nvzagnb9yddqbcjs7yhrd5yc5fx9q7w3vxi50zp";
+    };
+    meta = {
+      homepage = "https://github.com/cvtienhoven/graylog-plugin-aggregates";
+      description = "A plugin that enables users to execute term searches and get notified when the given criteria are met";
+    };
+  };
+  auth_sso = glPlugin rec {
+    name = "graylog-auth-sso-${version}";
+    pluginName = "graylog-plugin-auth-sso";
+    version = "3.3.0";
+    src = fetchurl {
+      url = "https://github.com/Graylog2/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1g47hlld8vzicd47b5i9n2816rbrhv18vjq8gp765c7mdg4a2jn8";
+    };
+    meta = {
+      homepage = "https://github.com/Graylog2/graylog-plugin-auth-sso";
+      description = "SSO support for Graylog through trusted HTTP headers set by load balancers or authentication proxies";
+    };
+  };
+  dnsresolver = glPlugin rec {
+    name = "graylog-dnsresolver-${version}";
+    pluginName = "graylog-plugin-dnsresolver";
+    version = "1.2.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0djlyd4w4mrrqfbrs20j1xw0fygqsb81snz437v9bf80avmcyzg1";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-dnsresolver";
+      description = "Message filter plugin can be used to do DNS lookups for the source field in Graylog messages";
+    };
+  };
+  enterprise-integrations = glPlugin rec {
+    name = "graylog-enterprise-integrations-${version}";
+    pluginName = "graylog-plugin-enterprise-integrations";
+    version = "3.3.9";
+    src = fetchurl {
+      url = "https://downloads.graylog.org/releases/graylog-enterprise-integrations/graylog-enterprise-integrations-plugins-${version}.tgz";
+      sha256 = "0yr2lmf50w8qw5amimmym6y4jxga4d7s7cbiqs5sqzvipgsknbwj";
+    };
+    installPhase = ''
+      mkdir -p $out/bin
+      tar --strip-components=2 -xf $src
+      cp ${pluginName}-${version}.jar $out/bin/${pluginName}-${version}.jar
+    '';
+    meta = {
+      homepage = "https://docs.graylog.org/en/3.3/pages/integrations.html#enterprise";
+      description = "Integrations are tools that help Graylog work with external systems (unfree enterprise integrations)";
+      license = licenses.unfree;
+    };
+  };
+  filter-messagesize = glPlugin rec {
+    name = "graylog-filter-messagesize-${version}";
+    pluginName = "graylog-plugin-filter-messagesize";
+    version = "0.0.2";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1vx62yikd6d3lbwsfiyf9j6kx8drvn4xhffwv27fw5jzhfqr61ji";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-filter-messagesize";
+      description = "Prints out all messages that have an estimated size crossing a configured threshold during processing";
+    };
+  };
+  integrations = glPlugin rec {
+    name = "graylog-integrations-${version}";
+    pluginName = "graylog-plugin-integrations";
+    version = "3.3.9";
+    src = fetchurl {
+      url = "https://downloads.graylog.org/releases/graylog-integrations/graylog-integrations-plugins-${version}.tgz";
+      sha256 = "0q858ffmkinngyqqsaszcrx93zc4fg43ny0xb7vm0p4wd48hjyqc";
+    };
+    installPhase = ''
+      mkdir -p $out/bin
+      tar --strip-components=2 -xf $src
+      cp ${pluginName}-${version}.jar $out/bin/${pluginName}-${version}.jar
+    '';
+    meta = {
+      homepage = "https://github.com/Graylog2/graylog-plugin-integrations";
+      description = "A collection of open source Graylog integrations that will be released together";
+    };
+  };
+  internal-logs = glPlugin rec {
+    name = "graylog-internal-logs-${version}";
+    pluginName = "graylog-plugin-internal-logs";
+    version = "2.4.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1jyy0wkjapv3xv5q957xxv2pcnd4n1yivkvkvg6cx7kv1ip75xwc";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-internal-logs";
+      description = "Graylog plugin to record internal logs of Graylog efficiently instead of sending them over the network";
+    };
+  };
+  ipanonymizer = glPlugin rec {
+    name = "graylog-ipanonymizer-${version}";
+    pluginName = "graylog-plugin-ipanonymizer";
+    version = "1.1.2";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0hd66751hp97ddkn29s1cmjmc2h1nrp431bq7d2wq16iyxxlygri";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-ipanonymizer";
+      description = "A graylog-server plugin that replaces the last octet of IP addresses in messages with xxx";
+    };
+  };
+  jabber = glPlugin rec {
+    name = "graylog-jabber-${version}";
+    pluginName = "graylog-plugin-jabber";
+    version = "2.4.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0zy27q8y0bv7i5nypsfxad4yiw121sbwzd194jsz2w08jhk3skl5";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-jabber";
+      description = "Jabber Alarmcallback Plugin for Graylog";
+    };
+  };
+  metrics = glPlugin rec {
+    name = "graylog-metrics-${version}";
+    pluginName = "graylog-plugin-metrics";
+    version = "1.3.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1v1yzmqp43kxigh3fymdwki7pn21sk2ym3kk4nn4qv4zzkhz59vp";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-metrics";
+      description = "An output plugin for integrating Graphite, Ganglia and StatsD with Graylog";
+    };
+  };
+  mongodb-profiler = glPlugin rec {
+    name = "graylog-mongodb-profiler-${version}";
+    pluginName = "graylog-plugin-mongodb-profiler";
+    version = "2.0.1";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1hadxyawdz234lal3dq5cy3zppl7ixxviw96iallyav83xyi23i8";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-mongodb-profiler";
+      description = "Graylog input plugin that reads MongoDB profiler data";
+    };
+  };
+  pagerduty = glPlugin rec {
+    name = "graylog-pagerduty-${version}";
+    pluginName = "graylog-plugin-pagerduty";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0xhcwfwn7c77giwjilv7k7aijnj9azrjbjgd0r3p6wdrw970f27r";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-pagerduty";
+      description = "An alarm callback plugin for integrating PagerDuty into Graylog";
+    };
+  };
+  redis = glPlugin rec {
+    name = "graylog-redis-${version}";
+    pluginName = "graylog-plugin-redis";
+    version = "0.1.1";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0dfgh6w293ssagas5y0ixwn0vf54i5iv61r5p2q0rbv2da6xvhbw";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-redis";
+      description = "Redis plugin for Graylog";
+    };
+  };
+  slack = glPlugin rec {
+    name = "graylog-slack-${version}";
+    pluginName = "graylog-plugin-slack";
+    version = "3.1.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "067p8g94b007gypwyyi8vb6qhwdanpk8ah57abik54vv14jxg94k";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-slack";
+      description = "Can notify Slack or Mattermost channels about triggered alerts in Graylog (Alarm Callback)";
+    };
+  };
+  smseagle = glPlugin rec {
+    name = "graylog-smseagle-${version}";
+    pluginName = "graylog-plugin-smseagle";
+    version = "1.0.1";
+    src = fetchurl {
+      url = "https://bitbucket.org/proximus/smseagle-graylog/raw/b99cfc349aafc7c94d4c2503f7c3c0bde67684d1/jar/graylog-plugin-smseagle-1.0.1.jar";
+      sha256 = "sha256-rvvftzPskXRGs1Z9dvd/wFbQoIoNtEQIFxMIpSuuvf0=";
+    };
+    meta = {
+      homepage = "https://bitbucket.org/proximus/smseagle-graylog/";
+      description = "Alert/notification callback plugin for integrating the SMSEagle into Graylog";
+      license = licenses.gpl3Only;
+    };
+  };
+  snmp = glPlugin rec {
+    name = "graylog-snmp-${version}";
+    pluginName = "graylog-plugin-snmp";
+    version = "0.3.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1hkaklwzcsvqq45b98chwqxqdgnnbj4dg68agsll13yq4zx37qpp";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-snmp";
+      description = "Graylog plugin to receive SNMP traps";
+    };
+  };
+  spaceweather = glPlugin rec {
+    name = "graylog-spaceweather-${version}";
+    pluginName = "graylog-plugin-spaceweather";
+    version = "1.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/spaceweather-input.jar";
+      sha256 = "1mwqy3fhyy4zdwyrzvbr565xwf96xs9d3l70l0khmrm848xf8wz4";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-spaceweather";
+      description = "Correlate proton density to the response time of your app and the ion temperature to your exception rate";
+    };
+  };
+  splunk = glPlugin rec {
+    name = "graylog-splunk-${version}";
+    pluginName = "graylog-plugin-splunk";
+    version = "0.5.0-rc.1";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/graylog-plugin-splunk/releases/download/0.5.0-rc.1/graylog-plugin-splunk-0.5.0-rc.1.jar";
+      sha256 = "sha256-EwF/Dc8GmMJBTxH9xGZizUIMTGSPedT4bprorN6X9Os=";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-splunk";
+      description = "Graylog output plugin that forwards one or more streams of data to Splunk via TCP";
+      license = licenses.gpl3Only;
+    };
+  };
+  twiliosms = glPlugin rec {
+    name = "graylog-twiliosms-${version}";
+    pluginName = "graylog-plugin-twiliosms";
+    version = "1.0.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "0kwfv1zfj0fmxh9i6413bcsaxrn1vdwrzb6dphvg3dx27wxn1j1a";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-twiliosms";
+      description = "An alarm callback plugin for integrating the Twilio SMS API into Graylog";
+    };
+  };
+  twitter = glPlugin rec {
+    name = "graylog-twitter-${version}";
+    pluginName = "graylog-plugin-twitter";
+    version = "2.0.0";
+    src = fetchurl {
+      url = "https://github.com/graylog-labs/${pluginName}/releases/download/${version}/${pluginName}-${version}.jar";
+      sha256 = "1pi34swy9nzq35a823zzvqrjhb6wsg302z31vk2y656sw6ljjxyh";
+    };
+    meta = {
+      homepage = "https://github.com/graylog-labs/graylog-plugin-twitter";
+      description = "Graylog input plugin that reads Twitter messages based on keywords in realtime";
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grc/default.nix b/nixpkgs/pkgs/tools/misc/grc/default.nix
new file mode 100644
index 000000000000..e8f4282fb193
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grc/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, fetchFromGitHub
+, buildPythonApplication
+, installShellFiles
+}:
+
+buildPythonApplication rec {
+  pname = "grc";
+  version = "1.13";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "garabik";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1h0h88h484a9796hai0wasi1xmjxxhpyxgixn6fgdyc5h69gv8nl";
+  };
+
+  postPatch = ''
+    for f in grc grcat; do
+      substituteInPlace $f \
+        --replace /usr/local/ $out/
+    done
+
+    # Support for absolute store paths.
+    substituteInPlace grc.conf \
+      --replace "^([/\w\.]+\/)" "^([/\w\.\-]+\/)"
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+
+    ./install.sh "$out" "$out"
+    installShellCompletion --zsh --name _grc _grc
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "http://kassiopeia.juls.savba.sk/~garabik/software/grc.html";
+    description = "A generic text colouriser";
+    longDescription = ''
+      Generic Colouriser is yet another colouriser (written in Python) for
+      beautifying your logfiles or output of commands.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ azahi lovek323 AndersonTorres peterhoeg ];
+    platforms = platforms.unix;
+    mainProgram = "grc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grex/default.nix b/nixpkgs/pkgs/tools/misc/grex/default.nix
new file mode 100644
index 000000000000..d68deba131ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grex/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "grex";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "pemistahl";
+    repo = "grex";
+    rev = "v${version}";
+    hash = "sha256-Ut2H2H66XN1+wHpYivnuhil21lbd7bwIcIcMyIimdis=";
+  };
+
+  cargoHash = "sha256-ZRE1vKgi0/UtSe2bdN0BLdtDfAauTfwcqOcl3y63fAA=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/grex --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "A command-line tool for generating regular expressions from user-provided test cases";
+    homepage = "https://github.com/pemistahl/grex";
+    changelog = "https://github.com/pemistahl/grex/releases/tag/v${version}";
+    license = licenses.asl20;
+    mainProgram = "grex";
+    maintainers = with maintainers; [ SuperSandro2000 mfrw ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grit/default.nix b/nixpkgs/pkgs/tools/misc/grit/default.nix
new file mode 100644
index 000000000000..448224c9e9ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grit/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "grit";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "climech";
+    repo = "grit";
+    rev = "v${version}";
+    sha256 = "sha256-c8wBwmXFjpst6UxL5zmTxMR4bhzpHYljQHiJFKiNDms=";
+  };
+
+  vendorHash = "sha256-iMMkjJ5dnlr0oSCifBQPWkInQBCp1bh23s+BcKzDNCg=";
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A multitree-based personal task manager";
+    homepage = "https://github.com/climech/grit";
+    license = licenses.mit;
+    maintainers = [ maintainers.ivar ];
+    mainProgram = "grit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grizzly/default.nix b/nixpkgs/pkgs/tools/misc/grizzly/default.nix
new file mode 100644
index 000000000000..ffe6a4352bc0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grizzly/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "grizzly";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "grafana";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-IM7NrykF2Fiudijo5q0I/FewvS/rs3lzSpvzc6dl5Ds=";
+  };
+
+  vendorHash = "sha256-GrzMfOwNEjVQd1uCijcsfdIDO6UPzuHEDnJExupB9Jg=";
+
+  subPackages = [ "cmd/grr" ];
+
+  meta = with lib; {
+    description = "A utility for managing Jsonnet dashboards against the Grafana API";
+    homepage = "https://grafana.github.io/grizzly/";
+    license = licenses.asl20;
+    maintainers = with lib.maintainers; [ nrhtr ];
+    platforms = platforms.unix;
+    mainProgram = "grr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/grub/add-hidden-menu-entries.patch b/nixpkgs/pkgs/tools/misc/grub/add-hidden-menu-entries.patch
new file mode 100644
index 000000000000..836a9853708f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/add-hidden-menu-entries.patch
@@ -0,0 +1,204 @@
+diff --git a/grub-core/commands/legacycfg.c b/grub-core/commands/legacycfg.c
+index e9e9d94ef..54e08a1b4 100644
+--- a/grub-core/commands/legacycfg.c
++++ b/grub-core/commands/legacycfg.c
+@@ -143,7 +143,7 @@ legacy_file (const char *filename)
+ 	    args[0] = oldname;
+ 	    grub_normal_add_menu_entry (1, args, NULL, NULL, "legacy",
+ 					NULL, NULL,
+-					entrysrc, 0);
++					entrysrc, 0, 0);
+ 	    grub_free (args);
+ 	    entrysrc[0] = 0;
+ 	    grub_free (oldname);
+@@ -205,7 +205,7 @@ legacy_file (const char *filename)
+ 	}
+       args[0] = entryname;
+       grub_normal_add_menu_entry (1, args, NULL, NULL, NULL,
+-				  NULL, NULL, entrysrc, 0);
++				  NULL, NULL, entrysrc, 0, 0);
+       grub_free (args);
+     }
+ 
+diff --git a/grub-core/commands/menuentry.c b/grub-core/commands/menuentry.c
+index 720e6d8ea..50632ccce 100644
+--- a/grub-core/commands/menuentry.c
++++ b/grub-core/commands/menuentry.c
+@@ -78,7 +78,7 @@ grub_normal_add_menu_entry (int argc, const char **args,
+ 			    char **classes, const char *id,
+ 			    const char *users, const char *hotkey,
+ 			    const char *prefix, const char *sourcecode,
+-			    int submenu)
++			    int submenu, int hidden)
+ {
+   int menu_hotkey = 0;
+   char **menu_args = NULL;
+@@ -188,8 +188,11 @@ grub_normal_add_menu_entry (int argc, const char **args,
+   (*last)->args = menu_args;
+   (*last)->sourcecode = menu_sourcecode;
+   (*last)->submenu = submenu;
++  (*last)->hidden = hidden;
++
++  if (!hidden)
++    menu->size++;
+ 
+-  menu->size++;
+   return GRUB_ERR_NONE;
+ 
+  fail:
+@@ -286,7 +289,8 @@ grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args)
+ 				       users,
+ 				       ctxt->state[2].arg, 0,
+ 				       ctxt->state[3].arg,
+-				       ctxt->extcmd->cmd->name[0] == 's');
++				       ctxt->extcmd->cmd->name[0] == 's',
++               ctxt->extcmd->cmd->name[0] == 'h');
+ 
+   src = args[argc - 1];
+   args[argc - 1] = NULL;
+@@ -303,7 +307,8 @@ grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args)
+ 				  ctxt->state[0].args, ctxt->state[4].arg,
+ 				  users,
+ 				  ctxt->state[2].arg, prefix, src + 1,
+-				  ctxt->extcmd->cmd->name[0] == 's');
++				  ctxt->extcmd->cmd->name[0] == 's',
++          ctxt->extcmd->cmd->name[0] == 'h');
+ 
+   src[len - 1] = ch;
+   args[argc - 1] = src;
+@@ -311,7 +316,7 @@ grub_cmd_menuentry (grub_extcmd_context_t ctxt, int argc, char **args)
+   return r;
+ }
+ 
+-static grub_extcmd_t cmd, cmd_sub;
++static grub_extcmd_t cmd, cmd_sub, cmd_hidden;
+ 
+ void
+ grub_menu_init (void)
+@@ -327,6 +332,12 @@ grub_menu_init (void)
+ 				  | GRUB_COMMAND_FLAG_EXTRACTOR,
+ 				  N_("BLOCK"), N_("Define a submenu."),
+ 				  options);
++  cmd_hidden = grub_register_extcmd ("hiddenentry", grub_cmd_menuentry,
++                  GRUB_COMMAND_FLAG_BLOCKS
++                  | GRUB_COMMAND_ACCEPT_DASH
++                  | GRUB_COMMAND_FLAG_EXTRACTOR,
++                  N_("BLOCK"), N_("Define a hidden menu entry."),
++                  options);
+ }
+ 
+ void
+diff --git a/grub-core/normal/menu.c b/grub-core/normal/menu.c
+index 6a90e091f..4236f55bc 100644
+--- a/grub-core/normal/menu.c
++++ b/grub-core/normal/menu.c
+@@ -37,6 +37,8 @@
+    entry failing to boot.  */
+ #define DEFAULT_ENTRY_ERROR_DELAY_MS  2500
+ 
++#define MENU_INCLUDE_HIDDEN 0x10000
++
+ grub_err_t (*grub_gfxmenu_try_hook) (int entry, grub_menu_t menu,
+ 				     int nested) = NULL;
+ 
+@@ -80,8 +82,20 @@ grub_menu_get_entry (grub_menu_t menu, int no)
+ {
+   grub_menu_entry_t e;
+ 
+-  for (e = menu->entry_list; e && no > 0; e = e->next, no--)
+-    ;
++  if (no & MENU_INCLUDE_HIDDEN) {
++    no &= ~MENU_INCLUDE_HIDDEN;
++
++    for (e = menu->entry_list; e && no > 0; e = e->next, no--)
++      ;
++  } else {
++    for (e = menu->entry_list; e && no > 0; e = e->next, no--) {
++      /* Skip hidden entries */
++      while (e && e->hidden)
++        e = e->next;
++    }
++    while (e && e->hidden)
++      e = e->next;
++  }
+ 
+   return e;
+ }
+@@ -93,10 +107,10 @@ get_entry_index_by_hotkey (grub_menu_t menu, int hotkey)
+   grub_menu_entry_t entry;
+   int i;
+ 
+-  for (i = 0, entry = menu->entry_list; i < menu->size;
++  for (i = 0, entry = menu->entry_list; entry;
+        i++, entry = entry->next)
+     if (entry->hotkey == hotkey)
+-      return i;
++      return i | MENU_INCLUDE_HIDDEN;
+ 
+   return -1;
+ }
+@@ -509,6 +523,10 @@ get_entry_number (grub_menu_t menu, const char *name)
+       grub_menu_entry_t e = menu->entry_list;
+       int i;
+ 
++       /* Skip hidden entries */
++      while (e && e->hidden)
++        e = e->next;
++
+       grub_errno = GRUB_ERR_NONE;
+ 
+       for (i = 0; e; i++)
+@@ -520,6 +538,10 @@ get_entry_number (grub_menu_t menu, const char *name)
+ 	      break;
+ 	    }
+ 	  e = e->next;
++
++    /* Skip hidden entries */
++    while (e && e->hidden)
++      e = e->next;
+ 	}
+ 
+       if (! e)
+diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c
+index b1321eb26..d2e46cac8 100644
+--- a/grub-core/normal/menu_text.c
++++ b/grub-core/normal/menu_text.c
+@@ -289,7 +289,11 @@ print_entries (grub_menu_t menu, const struct menu_viewer_data *data)
+       print_entry (data->geo.first_entry_y + i, data->offset == i,
+ 		   e, data);
+       if (e)
+-	e = e->next;
++	      e = e->next;
++
++      /* Skip hidden entries */
++      while (e && e->hidden)
++        e = e->next;
+     }
+ 
+   grub_term_gotoxy (data->term,
+diff --git a/include/grub/menu.h b/include/grub/menu.h
+index ee2b5e910..eb8a86ba9 100644
+--- a/include/grub/menu.h
++++ b/include/grub/menu.h
+@@ -58,6 +58,8 @@ struct grub_menu_entry
+ 
+   int submenu;
+ 
++  int hidden;
++
+   /* The next element.  */
+   struct grub_menu_entry *next;
+ };
+diff --git a/include/grub/normal.h b/include/grub/normal.h
+index 218cbabcc..bcb412466 100644
+--- a/include/grub/normal.h
++++ b/include/grub/normal.h
+@@ -145,7 +145,7 @@ grub_normal_add_menu_entry (int argc, const char **args, char **classes,
+ 			    const char *id,
+ 			    const char *users, const char *hotkey,
+ 			    const char *prefix, const char *sourcecode,
+-			    int submenu);
++			    int submenu, int hidden);
+ 
+ grub_err_t
+ grub_normal_set_password (const char *user, const char *password);
diff --git a/nixpkgs/pkgs/tools/misc/grub/default.nix b/nixpkgs/pkgs/tools/misc/grub/default.nix
new file mode 100644
index 000000000000..f92f765a6fab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/default.nix
@@ -0,0 +1,214 @@
+{ lib, stdenv, runCommand, fetchFromSavannah, fetchpatch, flex, bison, python3, autoconf, automake, libtool, bash
+, rsync, gettext, ncurses, libusb-compat-0_1, freetype, qemu, lvm2, unifont, pkg-config
+, buildPackages
+, nixosTests
+, fuse # only needed for grub-mount
+, runtimeShell
+, zfs ? null
+, efiSupport ? false
+, zfsSupport ? false
+, xenSupport ? false
+, kbdcompSupport ? false, ckbcomp
+}:
+
+let
+  pcSystems = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "i386";
+  };
+
+  efiSystemsBuild = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "x86_64";
+    armv7l-linux.target = "arm";
+    aarch64-linux.target = "aarch64";
+    riscv32-linux.target = "riscv32";
+    riscv64-linux.target = "riscv64";
+  };
+
+  # For aarch64, we need to use '--target=aarch64-efi' when building,
+  # but '--target=arm64-efi' when installing. Insanity!
+  efiSystemsInstall = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "x86_64";
+    armv7l-linux.target = "arm";
+    aarch64-linux.target = "arm64";
+    riscv32-linux.target = "riscv32";
+    riscv64-linux.target = "riscv64";
+  };
+
+  canEfi = lib.any (system: stdenv.hostPlatform.system == system) (lib.mapAttrsToList (name: _: name) efiSystemsBuild);
+  inPCSystems = lib.any (system: stdenv.hostPlatform.system == system) (lib.mapAttrsToList (name: _: name) pcSystems);
+
+  gnulib = fetchFromSavannah {
+    repo = "gnulib";
+    # NOTE: keep in sync with bootstrap.conf!
+    rev = "9f48fb992a3d7e96610c4ce8be969cff2d61a01b";
+    hash = "sha256-mzbF66SNqcSlI+xmjpKpNMwzi13yEWoc1Fl7p4snTto=";
+  };
+
+  src = fetchFromSavannah {
+    repo = "grub";
+    rev = "grub-2.12";
+    hash = "sha256-lathsBb2f7urh8R86ihpTdwo3h1hAHnRiHd5gCLVpBc=";
+  };
+
+  # HACK: the translations are stored on a different server,
+  # not versioned and not included in the git repo, so fetch them
+  # and hope they don't change often
+  locales = runCommand "grub-locales" {
+    nativeBuildInputs = [rsync];
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = "sha256-XzW2e7Xe7Pi297eV/fD2B/6uONEz9UjL2EHDCY0huTA=";
+  }
+  ''
+    mkdir -p po
+    ${src}/linguas.sh
+
+    mv po $out
+  '';
+in (
+
+assert efiSupport -> canEfi;
+assert zfsSupport -> zfs != null;
+assert !(efiSupport && xenSupport);
+
+stdenv.mkDerivation rec {
+  pname = "grub";
+  version = "2.12";
+  inherit src;
+
+  patches = [
+    ./fix-bash-completion.patch
+    ./add-hidden-menu-entries.patch
+  ];
+
+  postPatch = if kbdcompSupport then ''
+    sed -i util/grub-kbdcomp.in -e 's@\bckbcomp\b@${ckbcomp}/bin/ckbcomp@'
+  '' else ''
+    echo '#! ${runtimeShell}' > util/grub-kbdcomp.in
+    echo 'echo "Compile grub2 with { kbdcompSupport = true; } to enable support for this command."' >> util/grub-kbdcomp.in
+  '';
+
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [ bison flex python3 pkg-config gettext freetype autoconf automake ];
+  buildInputs = [ ncurses libusb-compat-0_1 freetype lvm2 fuse libtool bash ]
+    ++ lib.optional doCheck qemu
+    ++ lib.optional zfsSupport zfs;
+
+  strictDeps = true;
+
+  hardeningDisable = [ "all" ];
+
+  separateDebugInfo = !xenSupport;
+
+  preConfigure =
+    '' for i in "tests/util/"*.in
+       do
+         sed -i "$i" -e's|/bin/bash|${stdenv.shell}|g'
+       done
+
+       # Apparently, the QEMU executable is no longer called
+       # `qemu-system-i386', even on i386.
+       #
+       # In addition, use `-nodefaults' to avoid errors like:
+       #
+       #  chardev: opening backend "stdio" failed
+       #  qemu: could not open serial device 'stdio': Invalid argument
+       #
+       # See <http://www.mail-archive.com/qemu-devel@nongnu.org/msg22775.html>.
+       sed -i "tests/util/grub-shell.in" \
+           -e's/qemu-system-i386/qemu-system-x86_64 -nodefaults/g'
+
+      unset CPP # setting CPP intereferes with dependency calculation
+
+      patchShebangs .
+
+      GNULIB_REVISION=$(. bootstrap.conf; echo $GNULIB_REVISION)
+      if [ "$GNULIB_REVISION" != ${gnulib.rev} ]; then
+        echo "This version of GRUB requires a different gnulib revision!"
+        echo "We have: ${gnulib.rev}"
+        echo "GRUB needs: $GNULIB_REVISION"
+        exit 1
+      fi
+
+      cp -f --no-preserve=mode ${locales}/* po
+
+      ./bootstrap --no-git --gnulib-srcdir=${gnulib}
+
+      substituteInPlace ./configure --replace '/usr/share/fonts/unifont' '${unifont}/share/fonts'
+    '';
+
+  postConfigure = ''
+    # make sure .po files are up to date to workaround
+    # parallel `msgmerge --update` on autogenerated .po files:
+    #   https://github.com/NixOS/nixpkgs/pull/248747#issuecomment-1676301670
+    make dist
+  '';
+
+  configureFlags = [
+    "--enable-grub-mount" # dep of os-prober
+  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    # grub doesn't do cross-compilation as usual and tries to use unprefixed
+    # tools to target the host. Provide toolchain information explicitly for
+    # cross builds.
+    #
+    # Ref: # https://github.com/buildroot/buildroot/blob/master/boot/grub2/grub2.mk#L108
+    "TARGET_CC=${stdenv.cc.targetPrefix}cc"
+    "TARGET_NM=${stdenv.cc.targetPrefix}nm"
+    "TARGET_OBJCOPY=${stdenv.cc.targetPrefix}objcopy"
+    "TARGET_RANLIB=${stdenv.cc.targetPrefix}ranlib"
+    "TARGET_STRIP=${stdenv.cc.targetPrefix}strip"
+  ] ++ lib.optional zfsSupport "--enable-libzfs"
+    ++ lib.optionals efiSupport [ "--with-platform=efi" "--target=${efiSystemsBuild.${stdenv.hostPlatform.system}.target}" "--program-prefix=" ]
+    ++ lib.optionals xenSupport [ "--with-platform=xen" "--target=${efiSystemsBuild.${stdenv.hostPlatform.system}.target}"];
+
+  # save target that grub is compiled for
+  grubTarget = if efiSupport
+               then "${efiSystemsInstall.${stdenv.hostPlatform.system}.target}-efi"
+               else lib.optionalString inPCSystems "${pcSystems.${stdenv.hostPlatform.system}.target}-pc";
+
+  doCheck = false;
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    # Avoid a runtime reference to gcc
+    sed -i $out/lib/grub/*/modinfo.sh -e "/grub_target_cppflags=/ s|'.*'|' '|"
+    # just adding bash to buildInputs wasn't enough to fix the shebang
+    substituteInPlace $out/lib/grub/*/modinfo.sh \
+      --replace ${buildPackages.bash} "/usr/bin/bash"
+  '';
+
+  passthru.tests = {
+    nixos-grub = nixosTests.grub;
+    nixos-install-simple = nixosTests.installer.simple;
+    nixos-install-grub-uefi = nixosTests.installer.simpleUefiGrub;
+    nixos-install-grub-uefi-spec = nixosTests.installer.simpleUefiGrubSpecialisation;
+  };
+
+  meta = with lib; {
+    description = "GNU GRUB, the Grand Unified Boot Loader";
+
+    longDescription =
+      '' GNU GRUB is a Multiboot boot loader. It was derived from GRUB, GRand
+         Unified Bootloader, which was originally designed and implemented by
+         Erich Stefan Boleyn.
+
+         Briefly, the boot loader is the first software program that runs when a
+         computer starts.  It is responsible for loading and transferring
+         control to the operating system kernel software (such as the Hurd or
+         the Linux).  The kernel, in turn, initializes the rest of the
+         operating system (e.g., GNU).
+      '';
+
+    homepage = "https://www.gnu.org/software/grub/";
+
+    license = licenses.gpl3Plus;
+
+    platforms = if xenSupport then [ "x86_64-linux" "i686-linux" ] else platforms.gnu ++ platforms.linux;
+
+    maintainers = [ maintainers.samueldr ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch b/nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch
new file mode 100644
index 000000000000..97cecdce373f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/fix-bash-completion.patch
@@ -0,0 +1,24 @@
+diff -ubr grub-2.00-orig/util/bash-completion.d/grub-completion.bash.in grub-2.00/util/bash-completion.d/grub-completion.bash.in
+--- grub-2.00-orig/util/bash-completion.d/grub-completion.bash.in	2012-10-16 19:02:36.342733957 +0200
++++ grub-2.00/util/bash-completion.d/grub-completion.bash.in	2012-10-16 19:04:48.262733941 +0200
+@@ -17,6 +17,12 @@
+ # along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
+ # bash completion for grub
+ 
++have()
++{
++    unset -v have
++    _have $1 && have=yes
++}
++
+ __grub_dir() {
+     local i c=1 boot_dir
+ 
+@@ -479,6 +485,7 @@
+ have ${__grub_script_check_program} && \
+  complete -F _grub_script_check -o filenames ${__grub_script_check_program}
+ 
++unset -f have
+ 
+ # Local variables:
+ # mode: shell-script
diff --git a/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg
new file mode 100644
index 000000000000..e9883149ab5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg
@@ -0,0 +1 @@
+normal (memdisk)/grub.cfg
diff --git a/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg
new file mode 100644
index 000000000000..69115b7101c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg
@@ -0,0 +1,10 @@
+# The parentheses around ${root} here to match Grub's config file syntax
+if search -s -f /boot/grub/grub.cfg ; then
+        echo "Reading (${root})/boot/grub/grub.cfg"
+	configfile /boot/grub/grub.cfg
+fi
+
+if search -s -f /grub/grub.cfg ; then
+	echo "Reading (${root})/grub/grub.cfg"
+	configfile /grub/grub.cfg
+fi
diff --git a/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix
new file mode 100644
index 000000000000..b6883e570802
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub/pvgrub_image/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, grub2_xen }:
+
+let
+  efiSystemsBuild = {
+    i686-linux.target = "i386";
+    x86_64-linux.target = "x86_64";
+    armv7l-linux.target = "arm";
+    aarch64-linux.target = "aarch64";
+    riscv32-linux.target = "riscv32";
+    riscv64-linux.target = "riscv64";
+  };
+
+in (
+
+stdenv.mkDerivation rec {
+  name = "pvgrub-image";
+
+  configs = ./configs;
+
+  buildInputs = [ grub2_xen ];
+
+  buildCommand = ''
+    cp "${configs}"/* .
+    tar -cf memdisk.tar grub.cfg
+    # We include all modules except all_video.mod as otherwise grub will fail printing "no symbol table"
+    # if we include it.
+    grub-mkimage -O "${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen" -c grub-bootstrap.cfg \
+      -m memdisk.tar -o "grub-${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen.bin" \
+      $(ls "${grub2_xen}/lib/grub/${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen/" |grep 'mod''$'|grep -v '^all_video\.mod''$')
+    mkdir -p "$out/lib/grub-xen"
+    cp "grub-${efiSystemsBuild.${stdenv.hostPlatform.system}.target}-xen.bin" $out/lib/grub-xen/
+  '';
+
+  meta = with lib; {
+    description = "PvGrub image for use for booting PV Xen guests";
+
+    longDescription =
+      '' This package provides a PvGrub image for booting Para-Virtualized (PV)
+         Xen guests
+      '';
+
+    platforms = platforms.gnu ++ platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/grub4dos/default.nix b/nixpkgs/pkgs/tools/misc/grub4dos/default.nix
new file mode 100644
index 000000000000..f00720af15ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/grub4dos/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, nasm }:
+
+let arch =
+  if stdenv.isi686 then "i386"
+  else if stdenv.isx86_64 then "x86_64"
+  else throw "Unknown architecture";
+in stdenv.mkDerivation {
+  pname = "grub4dos";
+  version = "0.4.6a-2019-05-12";
+
+  src = fetchFromGitHub {
+    owner = "chenall";
+    repo = "grub4dos";
+    rev = "e8224a2d20760139ffaeafa07838e2c3c54de783";
+    sha256 = "0i7n71za43qnlsxfvjrv1z5g1w5jl9snpbnas7rw97rry7cgyswf";
+  };
+
+  nativeBuildInputs = [ nasm ];
+
+  hardeningDisable = [ "stackprotector" ];
+
+  configureFlags = [ "--host=${arch}-pc-linux-gnu" ];
+
+  postInstall = ''
+    mv $out/lib/grub/${arch}-pc/* $out/lib/grub
+    rmdir $out/lib/grub/${arch}-pc
+    chmod +x $out/lib/grub/bootlace.com
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  # make[2]: *** No rule to make target 'pre_stage2_fullsize', needed by 'all-am'.  Stop.
+  enableParallelBuilding = false;
+
+  meta = with lib; {
+    homepage = "http://grub4dos.chenall.net/";
+    description = "GRUB for DOS is the dos extension of GRUB";
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    # Needs a port to modern binutils:
+    #   https://github.com/chenall/grub4dos/issues/160
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix b/nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix
new file mode 100644
index 000000000000..a1c163f6784e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gsmartcontrol/default.nix
@@ -0,0 +1,47 @@
+{ fetchurl, lib, stdenv, smartmontools, autoreconfHook, gettext, gtkmm3, pkg-config, wrapGAppsHook, pcre-cpp, gnome }:
+
+stdenv.mkDerivation rec {
+  pname = "gsmartcontrol";
+  version = "1.1.4";
+
+  src = fetchurl {
+    url = "https://github.com/ashaduri/gsmartcontrol/releases/download/v${version}/gsmartcontrol-${version}.tar.bz2";
+    sha256 = "sha256-/ECfK4qEzEC7ED1sgkAbnUwBgtWjsiPJOVnHrWYZGEc=";
+  };
+
+  patches = [
+    ./fix-paths.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace data/org.gsmartcontrol.policy --replace "/usr/sbin" $out/bin
+  '';
+
+  nativeBuildInputs = [ autoreconfHook gettext pkg-config wrapGAppsHook ];
+  buildInputs = [ gtkmm3 pcre-cpp gnome.adwaita-icon-theme ];
+
+  enableParallelBuilding = true;
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : "${lib.makeBinPath [ smartmontools ]}"
+    )
+  '';
+
+  meta = {
+    description = "Hard disk drive health inspection tool";
+    longDescription = ''
+      GSmartControl is a graphical user interface for smartctl (from
+      smartmontools package), which is a tool for querying and controlling
+      SMART (Self-Monitoring, Analysis, and Reporting Technology) data on
+      modern hard disk drives.
+
+      It allows you to inspect the drive's SMART data to determine its health,
+      as well as run various tests on it.
+    '';
+    homepage = "https://gsmartcontrol.shaduri.dev/";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [qknight];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch b/nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch
new file mode 100644
index 000000000000..b8ec19eb2563
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gsmartcontrol/fix-paths.patch
@@ -0,0 +1,33 @@
+diff --git a/data/gsmartcontrol-root.in b/data/gsmartcontrol-root.in
+--- a/data/gsmartcontrol-root.in
++++ b/data/gsmartcontrol-root.in
+@@ -8,7 +8,7 @@
+ # Run gsmartcontrol with root, asking for root password first.
+ # export GSMARTCONTROL_SU to override a su command (e.g. "kdesu -c").
+ 
+-EXEC_BIN="@prefix@/sbin/gsmartcontrol";
++EXEC_BIN="@prefix@/bin/gsmartcontrol";
+ prog_name="gsmartcontrol"
+ 
+ 
+@@ -118,7 +118,7 @@
+ # Add @prefix@/sbin as well (freebsd seems to require it).
+ # Note that beesu won't show a GUI login box if /usr/sbin is before /usr/bin,
+ # so add it first as well.
+-EXTRA_PATHS="/usr/bin:/usr/sbin:/usr/local/sbin:@prefix@/sbin";
++EXTRA_PATHS="/usr/bin:/usr/sbin:/usr/local/sbin:@prefix@/bin";
+ export PATH="$EXTRA_PATHS:$PATH"
+ 
+ 
+diff --git a/src/Makefile.am b/src/Makefile.am
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -24,7 +24,7 @@
+ # endif
+ 
+ 
+-sbin_PROGRAMS = gsmartcontrol
++bin_PROGRAMS = gsmartcontrol
+ 
+ gsmartcontrol_LDADD = $(top_builddir)/src/applib/libapplib.a \
+ 	$(top_builddir)/src/libdebug/libdebug.a \
diff --git a/nixpkgs/pkgs/tools/misc/gti/default.nix b/nixpkgs/pkgs/tools/misc/gti/default.nix
new file mode 100644
index 000000000000..9e396f33e6a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gti/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gti";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "rwos";
+    repo = "gti";
+    rev = "v${version}";
+    sha256 = "sha256-DUDCFcaB38Xkp3lLfEhjGC0j430dphXFBVhGzm7/Bp0=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace 'CC=cc' 'CC=${stdenv.cc.targetPrefix}cc'
+  '';
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  installPhase = ''
+    install -D gti $out/bin/gti
+    installManPage gti.6
+    installShellCompletion --cmd gti \
+      --bash completions/gti.bash \
+      --zsh completions/gti.zsh
+  '';
+
+  meta = with lib; {
+    homepage = "https://r-wos.org/hacks/gti";
+    license = licenses.mit;
+    description = "Humorous typo-based git runner; drives a car over the terminal";
+    maintainers = with maintainers; [ fadenb ];
+    platforms = platforms.unix;
+    mainProgram = "gti";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gtkterm/default.nix b/nixpkgs/pkgs/tools/misc/gtkterm/default.nix
new file mode 100644
index 000000000000..85636afb9d38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gtkterm/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchFromGitHub, meson, ninja, pkg-config, gtk3, vte, libgudev, wrapGAppsHook, pcre2 }:
+
+stdenv.mkDerivation rec {
+  pname = "gtkterm";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "Jeija";
+    repo = "gtkterm";
+    rev = version;
+    sha256 = "sha256-4Z+8fs4VEk2+Ci1X3oUuInylTdIbQ5AiPenFqnyNXvc=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    vte
+    libgudev
+    pcre2
+  ];
+
+  meta = with lib; {
+    description = "A simple, graphical serial port terminal emulator";
+    homepage = "https://github.com/Jeija/gtkterm";
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      GTKTerm is a simple, graphical serial port terminal emulator for
+      Linux and possibly other POSIX-compliant operating systems. It
+      can be used to communicate with all kinds of devices with a
+      serial interface, such as embedded computers, microcontrollers,
+      modems, GPS receivers, CNC machines and more.
+    '';
+    maintainers = with maintainers; [ wentasah ];
+    platforms = platforms.linux;
+    mainProgram = "gtkterm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gummy/default.nix b/nixpkgs/pkgs/tools/misc/gummy/default.nix
new file mode 100644
index 000000000000..9d5b473c3b9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gummy/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, testers
+, gummy
+, cmake
+, libX11
+, libXext
+, sdbus-cpp
+, udev
+, coreutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gummy";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "fushko";
+    repo = "gummy";
+    rev = version;
+    sha256 = "sha256-dw2yOXTS61OIe+NOq8MPydhkZvTit13eC7cbL5nFseg=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    libX11
+    libXext
+    sdbus-cpp
+    udev
+  ];
+
+  cmakeFlags = [
+    "-DUDEV_DIR=${placeholder "out"}/lib/udev"
+  ];
+
+  # Fixes the "gummy start" command, without this it cannot find the binary.
+  # Setting this through cmake does not seem to work.
+  postPatch = ''
+    substituteInPlace src/gummy/gummy.cpp \
+      --replace "CMAKE_INSTALL_DAEMON_PATH" "\"${placeholder "out"}/libexec/gummyd\""
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/lib/udev/99-gummy.rules \
+      --replace "/bin/chmod" "${coreutils}/bin/chmod"
+
+    ln -s $out/libexec/gummyd $out/bin/gummyd
+  '';
+
+  passthru.tests.version = testers.testVersion { package = gummy; };
+
+  meta = with lib; {
+    homepage = "https://github.com/Fushko/gummy";
+    description = "Brightness and temperature manager for X11";
+    longDescription = ''
+      CLI screen manager for X11 that allows automatic and manual brightness/temperature adjustments,
+      via backlight (currently only for embedded displays) and gamma. Multiple monitors are supported.
+    '';
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.ivar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/gwe/default.nix b/nixpkgs/pkgs/tools/misc/gwe/default.nix
new file mode 100644
index 000000000000..d889230ed228
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/gwe/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, wrapGAppsHook
+, pkg-config
+, meson
+, ninja
+, cmake
+, gobject-introspection
+, desktop-file-utils
+, python3
+, gtk3
+, libdazzle
+, libappindicator-gtk3
+, libnotify
+, nvidia_x11
+ }:
+
+let
+ pythonEnv = python3.withPackages (pypkgs: with pypkgs; [
+   injector
+   matplotlib
+   peewee
+   pynvml
+   pygobject3
+   xlib
+   pyxdg
+   requests
+   rx
+   gtk3
+   reactivex
+ ]);
+in stdenv.mkDerivation rec {
+  pname = "gwe";
+  version = "0.15.7";
+
+  src = fetchFromGitLab {
+    owner = "leinardi";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0/VQD3WuSMShsPjydOxVEufBZqVOCTFO3UbJpsy+oLE=";
+  };
+
+  prePatch = ''
+    patchShebangs scripts/{make_local_manifest,meson_post_install}.py
+
+    substituteInPlace gwe/repository/nvidia_repository.py \
+      --replace "from py3nvml import py3nvml" "import pynvml" \
+      --replace "py3nvml.py3nvml" "pynvml" \
+      --replace "py3nvml" "pynvml"
+  '';
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    pkg-config
+    meson
+    ninja
+    cmake
+    gobject-introspection
+    desktop-file-utils
+    pythonEnv
+  ];
+
+  buildInputs = [
+    gtk3
+    libdazzle
+    libappindicator-gtk3
+    libnotify
+  ];
+
+  postInstall = ''
+    mv $out/bin/gwe $out/lib/gwe-bin
+
+    makeWrapper ${pythonEnv}/bin/python $out/bin/gwe \
+      --add-flags "$out/lib/gwe-bin" \
+      --prefix LD_LIBRARY_PATH : "/run/opengl-driver/lib" \
+      --prefix PATH : "${builtins.concatStringsSep ":" [ (lib.makeBinPath [ nvidia_x11 nvidia_x11.settings ]) "/run/wrappers/bin" ]}" \
+      --unset "SHELL" \
+      ''${gappsWrapperArgs[@]}
+  '';
+
+  meta = with lib; {
+    description = "System utility designed to provide information, control the fans and overclock your NVIDIA card";
+    homepage = "https://gitlab.com/leinardi/gwe";
+    platforms = platforms.linux;
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.ivar ];
+    mainProgram = "gwe";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/h/default.nix b/nixpkgs/pkgs/tools/misc/h/default.nix
new file mode 100644
index 000000000000..6e4ae6381e75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/h/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, ruby }:
+
+stdenv.mkDerivation rec {
+  pname = "h";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "zimbatm";
+    repo = "h";
+    rev = "v${version}";
+    hash = "sha256-eitUKOo2c1c+SyctkUW/SUb2RCKUoU6nJplfJVdwBSs=";
+  };
+
+  buildInputs = [ ruby ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp h $out/bin/h
+    cp up $out/bin/up
+  '';
+
+  meta = with lib; {
+    description = "faster shell navigation of projects";
+    homepage = "https://github.com/zimbatm/h";
+    license = licenses.mit;
+    maintainers = [ maintainers.zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/h5utils/default.nix b/nixpkgs/pkgs/tools/misc/h5utils/default.nix
new file mode 100644
index 000000000000..f0267608d3a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/h5utils/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, lib
+, hdf5, libpng, libjpeg
+, hdf4 ? null
+, libmatheval ? null
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.13.2";
+  pname = "h5utils";
+
+  # fetchurl is used instead of fetchFromGitHub because the git repo version requires
+  # additional tools to build compared to the tarball release; see the README for details.
+  src = fetchurl {
+    url = "https://github.com/stevengj/h5utils/releases/download/${version}/h5utils-${version}.tar.gz";
+    sha256 = "sha256-7qeFWoI1+st8RU5hEDCY5VZY2g3fS23luCqZLl8CQ1E=";
+  };
+
+  # libdf is an alternative name for libhdf (hdf4)
+  preConfigure = lib.optionalString (hdf4 != null)
+  ''
+    substituteInPlace configure \
+    --replace "-ldf" "-lhdf" \
+  '';
+
+  preBuild = lib.optionalString hdf5.mpiSupport "export CC=${hdf5.mpi}/bin/mpicc";
+
+  buildInputs = with lib; [ hdf5 libjpeg libpng ] ++ optional hdf5.mpiSupport hdf5.mpi
+    ++ optional (hdf4 != null) hdf4
+    ++ optional (libmatheval != null) libmatheval;
+
+  meta = with lib; {
+    description = "A set of utilities for visualization and conversion of scientific data in the free, portable HDF5 format";
+    homepage = "https://github.com/stevengj/h5utils";
+    changelog = "https://github.com/NanoComp/h5utils/releases/tag/${version}";
+    license = with licenses; [ mit gpl2 ];
+    maintainers = with maintainers; [ sfrijters ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/hackertyper/default.nix b/nixpkgs/pkgs/tools/misc/hackertyper/default.nix
new file mode 100644
index 000000000000..da9af1eca922
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hackertyper/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation {
+  pname = "hackertyper";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner  = "Hurricane996";
+    repo   = "Hackertyper";
+    rev    = "8d08e3200c65817bd8c5bd0baa5032919315853b";
+    sha256 = "0shri0srihw9fk027k61qkxr9ikwkn28aaamrhps6lg0vpbqpx2w";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  buildInputs = [ ncurses ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/hackertyper -v
+  '';
+
+  meta = with lib; {
+    description = "A C rewrite of hackertyper.net";
+    homepage = "https://github.com/Hurricane996/Hackertyper";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.marius851000 ];
+    mainProgram = "hackertyper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hacksaw/default.nix b/nixpkgs/pkgs/tools/misc/hacksaw/default.nix
new file mode 100644
index 000000000000..5532fa181f64
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hacksaw/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchCrate, rustPlatform, pkg-config, libXrandr, libX11, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hacksaw";
+  version = "1.0.4";
+
+  nativeBuildInputs = [ pkg-config python3 ];
+
+  buildInputs = [ libXrandr libX11 ];
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "1l6i91xb81p1li1j2jm0r2rx8dbzl2yh468cl3dw0lqpqy4i65hx";
+  };
+
+  cargoSha256 = "1rykc06lq3bkblsrj68rbil63yqdnvxkxlppq1w74wf0d6cwjc08";
+
+  meta = with lib; {
+    description = "Lightweight selection tool for usage in screenshot scripts etc";
+    homepage = "https://github.com/neXromancers/hacksaw";
+    license = with licenses; [ mpl20 ];
+    maintainers = with maintainers; [ TethysSvensson ];
+    platforms = platforms.linux;
+    mainProgram = "hacksaw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hakuneko/default.nix b/nixpkgs/pkgs/tools/misc/hakuneko/default.nix
new file mode 100644
index 000000000000..0359da603ccb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hakuneko/default.nix
@@ -0,0 +1,98 @@
+{ autoPatchelfHook
+, dpkg
+, fetchurl
+, makeDesktopItem
+, makeWrapper
+, udev
+, stdenv
+, lib
+, wrapGAppsHook
+, alsa-lib
+, nss
+, nspr
+, systemd
+, xorg
+}:
+let
+  desktopItem = makeDesktopItem {
+    desktopName = "HakuNeko Desktop";
+    genericName = "Manga & Anime Downloader";
+    categories = [ "Network" "FileTransfer" ];
+    exec = "hakuneko";
+    icon = "hakuneko-desktop";
+    name = "hakuneko-desktop";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "hakuneko";
+  version = "6.1.7";
+
+  src = {
+    "x86_64-linux" = fetchurl {
+      url = "https://github.com/manga-download/hakuneko/releases/download/v${version}/hakuneko-desktop_${version}_linux_amd64.deb";
+      sha256 = "06bb17d7a06bb0601053eaaf423f9176f06ff3636cc43ffc024438e1962dcd02";
+    };
+    "i686-linux" = fetchurl {
+      url = "https://github.com/manga-download/hakuneko/releases/download/v${version}/hakuneko-desktop_${version}_linux_i386.deb";
+      sha256 = "32017d26bafffaaf0a83dd6954d3926557014af4022a972371169c56c0e3d98b";
+    };
+  }."${stdenv.hostPlatform.system}" or (throw "unsupported system ${stdenv.hostPlatform.system}");
+
+  dontBuild = true;
+  dontConfigure = true;
+  dontPatchELF = true;
+  dontWrapGApps = true;
+
+  # TODO: migrate off autoPatchelfHook and use nixpkgs' electron
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    makeWrapper
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    nss
+    nspr
+    xorg.libXScrnSaver
+    xorg.libXtst
+    systemd
+  ];
+
+  unpackPhase = ''
+    # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here
+    dpkg --fsys-tarfile $src | tar --extract
+  '';
+
+  installPhase = ''
+    cp -R usr "$out"
+    # Overwrite existing .desktop file.
+    cp "${desktopItem}/share/applications/hakuneko-desktop.desktop" \
+       "$out/share/applications/hakuneko-desktop.desktop"
+  '';
+
+  runtimeDependencies = [
+    (lib.getLib udev)
+  ];
+
+  postFixup = ''
+    makeWrapper $out/lib/hakuneko-desktop/hakuneko $out/bin/hakuneko \
+      "''${gappsWrapperArgs[@]}"
+  '';
+
+  meta = with lib; {
+    description = "Manga & Anime Downloader";
+    homepage = "https://sourceforge.net/projects/hakuneko/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unlicense;
+    maintainers = with maintainers; [
+      nloomans
+    ];
+    platforms = [
+      "x86_64-linux"
+      "i686-linux"
+    ];
+    mainProgram = "hakuneko";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/halp/default.nix b/nixpkgs/pkgs/tools/misc/halp/default.nix
new file mode 100644
index 000000000000..e88e23f7cfe7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/halp/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+, unixtools
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "halp";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "halp";
+    rev = "v${version}";
+    hash = "sha256-SeBponGeQWKjbiS4GL8YA7y92BqLL+ja6ZSKAI3CeRM=";
+  };
+
+  cargoHash = "sha256-/mzbLsIc0PW5yx/m9eq3IWYM6i1MKvmOY+17/Bwjguk=";
+
+  patches = [
+    # patch tests to point to the correct target directory
+    ./fix-target-dir.patch
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  nativeCheckInputs = [
+    unixtools.script
+  ];
+
+  # tests are failing on darwin
+  doCheck = !stdenv.isDarwin;
+
+  checkFlags = [
+    # requires internet access
+    "--skip=helper::docs::cheat::tests::test_fetch_cheat_sheet"
+  ];
+
+  postPatch = ''
+    substituteInPlace src/helper/args/mod.rs \
+      --subst-var-by releaseDir target/${stdenv.hostPlatform.rust.rustcTargetSpec}/$cargoCheckType
+  '';
+
+  preCheck = ''
+    export NO_COLOR=1
+    export OUT_DIR=target
+  '';
+
+  postInstall = ''
+    mkdir -p man completions
+
+    OUT_DIR=man $out/bin/halp-mangen
+    OUT_DIR=completions $out/bin/halp-completions
+
+    installManPage man/halp.1
+    installShellCompletion \
+      completions/halp.{bash,fish} \
+      --zsh completions/_halp
+
+    rm $out/bin/halp-{completions,mangen,test}
+  '';
+
+  meta = with lib; {
+    description = "A CLI tool to get help with CLI tools";
+    homepage = "https://github.com/orhun/halp";
+    changelog = "https://github.com/orhun/halp/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "halp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/halp/fix-target-dir.patch b/nixpkgs/pkgs/tools/misc/halp/fix-target-dir.patch
new file mode 100644
index 000000000000..0bc1c8e3b542
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/halp/fix-target-dir.patch
@@ -0,0 +1,13 @@
+--- a/src/helper/args/mod.rs
++++ b/src/helper/args/mod.rs
+@@ -129,9 +129,7 @@ mod tests {
+ 
+     /// Returns the path of the test binary.
+     fn get_test_bin() -> String {
+-        PathBuf::from(env!("CARGO_MANIFEST_DIR"))
+-            .join("target")
+-            .join("debug")
++        PathBuf::from("@releaseDir@")
+             .join(format!("{}-test", env!("CARGO_PKG_NAME")))
+             .to_string_lossy()
+             .to_string()
diff --git a/nixpkgs/pkgs/tools/misc/handlr/default.nix b/nixpkgs/pkgs/tools/misc/handlr/default.nix
new file mode 100644
index 000000000000..1022763b7540
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/handlr/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, shared-mime-info, libiconv, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "handlr";
+  version = "unstable-2021-08-29";
+
+  src = fetchFromGitHub {
+    owner = "chmln";
+    repo = pname;
+    rev = "90e78ba92d0355cb523abf268858f3123fd81238";
+    sha256 = "sha256-wENhlUBwfNg/r7yMKa1cQI1fbFw+qowwK8EdO912Yys=";
+  };
+
+  cargoSha256 = "sha256-30fSOzWq1CoIabPWGWndi/SaCN/ckxjlbtzuwV8rk6M=";
+
+  nativeBuildInputs = [ installShellFiles shared-mime-info ];
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  preCheck = ''
+    export HOME=$TEMPDIR
+  '';
+
+  postInstall = ''
+    installShellCompletion \
+      --zsh  completions/_handlr \
+      --bash  completions/handlr \
+      --fish completions/handlr.fish
+  '';
+
+  meta = with lib; {
+    description = "Alternative to xdg-open to manage default applications with ease";
+    homepage = "https://github.com/chmln/handlr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mredaelli artturin ];
+    mainProgram = "handlr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hashit/default.nix b/nixpkgs/pkgs/tools/misc/hashit/default.nix
new file mode 100644
index 000000000000..a7bcde7ab5fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hashit/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, nix-update-script, meson, ninja, pkg-config, vala, pantheon, python3, libgee, gtk3, desktop-file-utils, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "hashit";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "artemanufrij";
+    repo = pname;
+    rev = version;
+    sha256 = "1s8fbzg1z2ypn55xg1pfm5xh15waq55fkp49j8rsqiq8flvg6ybf";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    vala
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    libgee
+    pantheon.granite
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A simple app for checking usual checksums - Designed for elementary OS";
+    homepage = "https://github.com/artemanufrij/hashit";
+    license = licenses.gpl2Plus;
+    maintainers = teams.pantheon.members;
+    platforms = platforms.linux;
+    mainProgram = "com.github.artemanufrij.hashit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hashpump/default.nix b/nixpkgs/pkgs/tools/misc/hashpump/default.nix
new file mode 100644
index 000000000000..11b0650d849d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hashpump/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, openssl, lib }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "hashpump";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "bwall";
+    repo = "HashPump";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-xL/1os17agwFtdq0snS3ZJzwJhk22ujxfWLH65IMMEM=";
+  };
+
+  makeFlags = [ "INSTALLLOCATION=${placeholder "out"}/bin/" ];
+
+  buildInputs = [ openssl ];
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+    ./hashpump --test
+    runHook postCheck
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = {
+    description = "A tool to exploit the hash length extension attack in various hashing algorithms";
+    homepage = "https://github.com/bwall/HashPump";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ t4ccer ];
+    platforms = lib.platforms.linux;
+    mainProgram = "hashpump";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/haste-client/Gemfile b/nixpkgs/pkgs/tools/misc/haste-client/Gemfile
new file mode 100644
index 000000000000..06dd69c0179e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/haste-client/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'haste'
diff --git a/nixpkgs/pkgs/tools/misc/haste-client/Gemfile.lock b/nixpkgs/pkgs/tools/misc/haste-client/Gemfile.lock
new file mode 100644
index 000000000000..3f395ed9ef82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/haste-client/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    faraday (0.17.3)
+      multipart-post (>= 1.2, < 3)
+    haste (0.2.3)
+      faraday (~> 0.9)
+      json
+    json (2.5.1)
+    multipart-post (2.1.1)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  haste
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/haste-client/default.nix b/nixpkgs/pkgs/tools/misc/haste-client/default.nix
new file mode 100644
index 000000000000..eb4b6f868294
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/haste-client/default.nix
@@ -0,0 +1,18 @@
+{ lib
+, bundlerApp
+}:
+
+bundlerApp {
+  pname = "haste";
+  gemdir = ./.;
+  exes = [ "haste" ];
+
+  meta = with lib; {
+    description = "Command line interface to the AnyStyle Parser and Finder";
+    homepage    = "https://rubygems.org/gems/haste";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ shamilton ];
+    platforms   = platforms.unix;
+    mainProgram = "haste";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/haste-client/gemset.nix b/nixpkgs/pkgs/tools/misc/haste-client/gemset.nix
new file mode 100644
index 000000000000..e6cbbff11aa6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/haste-client/gemset.nix
@@ -0,0 +1,491 @@
+{
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13aghksmni2sl15y7wfpx6k5l3lfd8j9gdyqi6cbw6jgc7bqyyn2";
+      type = "gem";
+    };
+    version = "0.17.3";
+  };
+  haste = {
+    dependencies = ["faraday" "json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jaq0kvlxwvd0jq9pl707saqnaaal3dis13mqwfjbj121gr4hq4q";
+      type = "gem";
+    };
+    version = "0.2.3";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lrirj0gw420kw71bjjlqkqhqbrplla61gbv1jzgsz6bv90qr3ci";
+      type = "gem";
+    };
+    version = "2.5.1";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "maglev";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.8";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "1.9";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.0";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.1";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.2";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.3";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.4";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.5";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "maglev";
+      version = "2.6";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+    } {
+      engine = "rbx";
+      version = "1.8";
+    } {
+      engine = "rbx";
+      version = "1.9";
+    } {
+      engine = "rbx";
+      version = "2.0";
+    } {
+      engine = "rbx";
+      version = "2.1";
+    } {
+      engine = "rbx";
+      version = "2.2";
+    } {
+      engine = "rbx";
+      version = "2.3";
+    } {
+      engine = "rbx";
+      version = "2.4";
+    } {
+      engine = "rbx";
+      version = "2.5";
+    } {
+      engine = "rbx";
+      version = "2.6";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.8";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "1.9";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.0";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.1";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.2";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.3";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.4";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.5";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    } {
+      engine = "ruby";
+      version = "2.6";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zgw9zlwh2a6i1yvhhc4a84ry1hv824d6g2iw2chs3k5aylpmpfj";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix b/nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix
new file mode 100644
index 000000000000..1999d9ad0d56
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdaps-gl/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, freeglut, libGL, libGLU }:
+
+stdenv.mkDerivation rec {
+  pname = "hdaps-gl";
+  version = "0.0.7";
+  src = fetchFromGitHub {
+    owner = "linux-thinkpad";
+    repo = "hdaps-gl";
+    rev = version;
+    sha256 = "0jywsrcr1wzkjig5cvz014c3r026sbwscbkv7zh1014lkjm0kyyh";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ freeglut libGL libGLU ];
+
+  meta = with lib; {
+    description = "GL-based laptop model that rotates in real-time via hdaps";
+    homepage = "https://github.com/linux-thinkpad/hdaps-gl";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.symphorien ];
+    mainProgram = "hdaps-gl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch b/nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch
new file mode 100644
index 000000000000..7b0dddc2ae47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/byteswap.patch
@@ -0,0 +1,28 @@
+diff -Nuar --exclude '*~' hddtemp-0.3-beta15.orig/src/sata.c hddtemp-0.3-beta15/src/sata.c
+--- hddtemp-0.3-beta15.orig/src/sata.c	2006-05-14 02:09:55.579437498 -0700
++++ hddtemp-0.3-beta15/src/sata.c	2006-05-14 02:06:08.495948437 -0700
+@@ -88,7 +88,9 @@
+     return strdup(_("unknown"));
+   else
+   {
++		//fprintf(stderr,"sata_model1=%s\n",identify + 54);
+     sata_fixstring(identify + 54, 24);
++		//fprintf(stderr,"sata_model2=%s\n",identify + 54);
+     return strdup(identify + 54);
+   }
+ }
+diff -Nuar --exclude '*~' hddtemp-0.3-beta15.orig/src/satacmds.c hddtemp-0.3-beta15/src/satacmds.c
+--- hddtemp-0.3-beta15.orig/src/satacmds.c	2006-05-14 02:09:40.983470339 -0700
++++ hddtemp-0.3-beta15/src/satacmds.c	2006-05-14 02:09:02.319557333 -0700
+@@ -98,7 +98,10 @@
+   /* convert from big-endian to host byte order */
+   for (p = end ; p != s;) {
+     unsigned short *pp = (unsigned short *) (p -= 2);
+-    *pp = ntohs(*pp);
++		char tmp = p[0];
++		p[0] = p[1];
++		p[1] = tmp;
++    //*pp = ntohs(*pp);
+   }
+ 
+   /* strip leading blanks */
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/default.nix b/nixpkgs/pkgs/tools/misc/hddtemp/default.nix
new file mode 100644
index 000000000000..3bdd7e84f3ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl }:
+let
+  db = fetchurl {
+    url = "mirror://savannah/hddtemp/hddtemp.db";
+    sha256 = "1fr6qgns6qv7cr40lic5yqwkkc7yjmmgx8j0z6d93csg3smzhhya";
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "hddtemp";
+  version = "0.3-beta15";
+
+  src = fetchurl {
+    url = "mirror://savannah/hddtemp/hddtemp-${version}.tar.bz2";
+    sha256 = "sha256-YYVBWEBUCT1TvootnoHJcXTzDwCvkcuHAKl+RC1571s=";
+  };
+
+  # from Gentoo
+  patches = [ ./byteswap.patch ./dontwake.patch ./execinfo.patch ./satacmds.patch ];
+
+  configureFlags = [
+    "--with-db-path=${placeholder "out"}/share/${pname}/hddtemp.db"
+  ];
+
+  postInstall = ''
+    install -Dm444 ${db} $out/share/${pname}/hddtemp.db
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Tool for displaying hard disk temperature";
+    homepage = "https://savannah.nongnu.org/projects/hddtemp/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+    mainProgram = "hddtemp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch b/nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch
new file mode 100644
index 000000000000..969da7a70e40
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/dontwake.patch
@@ -0,0 +1,20 @@
+--- hddtemp-0.3-beta15/src/sata.c	2012-07-01 16:35:01.681708074 +0200
++++ hddtemp-0.3-beta15/src/sata.c	2012-07-01 16:33:58.172109699 +0200
+@@ -125,6 +125,17 @@
+     dsk->fd = -1;
+     return GETTEMP_NOSENSOR;
+   }
++
++  switch(ata_get_powermode(dsk->fd)) {
++  case PWM_STANDBY:
++  case PWM_SLEEPING:
++    if (!wakeup)
++      return GETTEMP_DRIVE_SLEEP;
++  case PWM_UNKNOWN:
++  case PWM_ACTIVE: /* active or idle */
++  default:
++    break;
++  }
+   
+   /* get SMART values */
+   if(sata_enable_smart(dsk->fd) != 0) {
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch b/nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch
new file mode 100644
index 000000000000..1e7239535d4d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/execinfo.patch
@@ -0,0 +1,21 @@
+--- hddtemp-0.3-beta15/configure.in~	2005-10-17 19:14:19 +0000
++++ hddtemp-0.3-beta15/configure.in	2006-12-11 18:23:22 +0000
+@@ -18,6 +18,7 @@
+ AC_HEADER_STDC
+ AC_CHECK_HEADERS(fcntl.h)
+ AC_CHECK_HEADERS(netinet/in.h)
++AC_CHECK_HEADERS(execinfo.h)
+ AC_CHECK_TYPE(in_addr_t, ,[AC_DEFINE_UNQUOTED([in_addr_t], [uint32_t], [Define to 'uint32_t' if <netinet/in.h> does not define.])], [#include <netinet/in.h>])
+ 
+ # Checks for typedefs, structures, and compiler characteristics.
+--- hddtemp-0.3-beta15/src/backtrace.c-orig	2006-12-11 18:20:41 +0000
++++ hddtemp-0.3-beta15/src/backtrace.c	2006-12-11 18:23:28 +0000
+@@ -18,7 +18,7 @@
+ 
+ #include <features.h>
+ 
+-#if defined(__i386__) && defined(__GLIBC__)
++#ifdef HAS_EXECINFO_H
+ 
+ #include <execinfo.h>
+ 
diff --git a/nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch b/nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch
new file mode 100644
index 000000000000..d67e0681f33f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hddtemp/satacmds.patch
@@ -0,0 +1,26 @@
+diff -Naurp hddtemp-0.3-beta15-orig/src/satacmds.c hddtemp-0.3-beta15/src/satacmds.c
+--- hddtemp-0.3-beta15-orig/src/satacmds.c	2007-02-10 14:25:15.000000000 +0100
++++ hddtemp-0.3-beta15/src/satacmds.c	2007-02-10 14:26:53.000000000 +0100
+@@ -54,7 +54,6 @@ int sata_pass_thru(int device, unsigned 
+   unsigned char cdb[16];
+   unsigned char sense[32];
+   int dxfer_direction;
+-  int ret;
+   
+   memset(cdb, 0, sizeof(cdb));
+   cdb[0] = ATA_16;
+@@ -78,13 +77,7 @@ int sata_pass_thru(int device, unsigned 
+     cdb[6] = cmd[1];
+   cdb[14] = cmd[0];
+ 
+-  ret = scsi_SG_IO(device, cdb, sizeof(cdb), buffer, cmd[3] * 512, sense, sizeof(sense), dxfer_direction);
+- 
+-  /* Verify SATA magics */
+-  if (sense[0] != 0x72 || sense[7] != 0x0e || sense[9] != 0x0e || sense[10] != 0x00)
+-    return 1;		  
+-  else 
+-    return ret;
++  return scsi_SG_IO(device, cdb, sizeof(cdb), buffer, cmd[3] * 512, sense, sizeof(sense), dxfer_direction);
+ }
+ 
+ void sata_fixstring(unsigned char *s, int bytecount)
diff --git a/nixpkgs/pkgs/tools/misc/hdf4/darwin-aarch64.patch b/nixpkgs/pkgs/tools/misc/hdf4/darwin-aarch64.patch
new file mode 100644
index 000000000000..cff81e581176
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf4/darwin-aarch64.patch
@@ -0,0 +1,11 @@
+--- a/hdf/src/hdfi.h	2021-06-16 16:31:31.000000000 +1200
++++ b/hdf/src/hdfi.h	2021-06-16 16:42:26.000000000 +1200
+@@ -1343,7 +1343,7 @@
+ #endif /* IA64 */
+ 
+ /* Linux AArch64 */
+-#if defined __aarch64__
++#if defined __aarch64__ && !defined __APPLE__
+ 
+ #ifdef GOT_MACHINE
+ If you get an error on this line more than one machine type has been defined.
diff --git a/nixpkgs/pkgs/tools/misc/hdf4/default.nix b/nixpkgs/pkgs/tools/misc/hdf4/default.nix
new file mode 100644
index 000000000000..2636cb71717b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf4/default.nix
@@ -0,0 +1,148 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchurl
+, fixDarwinDylibNames
+, cmake
+, libjpeg
+, uselibtirpc ? stdenv.isLinux
+, libtirpc
+, zlib
+, szipSupport ? false
+, szip
+, javaSupport ? false
+, jdk
+, fortranSupport ? false
+, gfortran
+, netcdfSupport ? false
+}:
+stdenv.mkDerivation rec {
+  pname = "hdf";
+  version = "4.2.15";
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF/releases/HDF${version}/src/hdf-${version}.tar.bz2";
+    sha256 = "04nbgfxyj5jg4d6sr28162cxbfwqgv0sa7vz1ayzvm8wbbpkbq5x";
+  };
+
+  patches = [
+    # Note that the PPC, SPARC and s390 patches are only needed so the aarch64 patch applies cleanly
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-ppc.patch";
+      sha256 = "0dbbfpsvvqzy9zyfv38gd81zzc44gxjib9sd8scxqnkkqprj6jq0";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-4.2.4-sparc.patch";
+      sha256 = "0ip4prcjpa404clm87ib7l71605mws54x9492n9pbz5yb51r9aqh";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-s390.patch";
+      sha256 = "0aiqbr4s1l19y3r3y4wjd5fkv9cfc8rlr4apbh1p0d57wyvqa7i3";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-arm.patch";
+      sha256 = "157k1avvkpf3x89m1fv4a1kgab6k3jv74rskazrmjivgzav4qaw3";
+    })
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/hdf/raw/edbe5f49646b609f5bc9aeeee5a2be47e9556e8c/f/hdf-aarch64.patch";
+      sha256 = "112svcsilk16ybbsi8ywnxfl2p1v44zh3rfn4ijnl8z08vfqrvvs";
+    })
+    ./darwin-aarch64.patch
+  ];
+
+  nativeBuildInputs = [
+    cmake
+  ] ++ lib.optionals stdenv.isDarwin [
+    fixDarwinDylibNames
+  ] ++ lib.optional fortranSupport gfortran;
+
+  buildInputs = [
+    libjpeg
+    zlib
+  ]
+  ++ lib.optional javaSupport jdk
+  ++ lib.optional szipSupport szip
+  ++ lib.optional uselibtirpc libtirpc;
+
+  preConfigure = lib.optionalString uselibtirpc ''
+    # Make tirpc discovery work with CMAKE_PREFIX_PATH
+    substituteInPlace config/cmake/FindXDR.cmake \
+      --replace 'find_path(XDR_INCLUDE_DIR NAMES rpc/types.h PATHS "/usr/include" "/usr/include/tirpc")' \
+                'find_path(XDR_INCLUDE_DIR NAMES rpc/types.h PATH_SUFFIXES include/tirpc)'
+  '' + lib.optionalString szipSupport ''
+    export SZIP_INSTALL=${szip}
+  '';
+
+  cmakeFlags = [
+    "-DBUILD_SHARED_LIBS=ON"
+    "-DHDF4_BUILD_TOOLS=ON"
+    "-DHDF4_BUILD_UTILS=ON"
+    "-DHDF4_BUILD_WITH_INSTALL_NAME=OFF"
+    "-DHDF4_ENABLE_JPEG_LIB_SUPPORT=ON"
+    "-DHDF4_ENABLE_NETCDF=${if netcdfSupport then "ON" else "OFF"}"
+    "-DHDF4_ENABLE_Z_LIB_SUPPORT=ON"
+    "-DJPEG_DIR=${libjpeg}"
+  ] ++ lib.optionals javaSupport [
+    "-DHDF4_BUILD_JAVA=ON"
+    "-DJAVA_HOME=${jdk}"
+  ] ++ lib.optionals szipSupport [
+    "-DHDF4_ENABLE_SZIP_ENCODING=ON"
+    "-DHDF4_ENABLE_SZIP_SUPPORT=ON"
+  ] ++ (if fortranSupport
+  then [
+    "-DHDF4_BUILD_FORTRAN=ON"
+    "-DCMAKE_Fortran_FLAGS=-fallow-argument-mismatch"
+  ]
+  else [ "-DHDF4_BUILD_FORTRAN=OFF" ]
+  );
+
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_CFLAGS_COMPILE = toString [
+      "-Wno-error=implicit-function-declaration"
+      "-Wno-error=implicit-int"
+    ];
+  };
+
+  doCheck = true;
+
+  excludedTests = lib.optionals stdenv.isDarwin [
+    "MFHDF_TEST-hdftest"
+    "MFHDF_TEST-hdftest-shared"
+    "HDP-dumpsds-18"
+    "NC_TEST-nctest"
+  ];
+
+  checkPhase =
+    let
+      excludedTestsRegex = lib.optionalString (excludedTests != [ ]) "(${lib.concatStringsSep "|" excludedTests})";
+    in
+    ''
+      runHook preCheck
+      ctest -E "${excludedTestsRegex}" --output-on-failure
+      runHook postCheck
+    '';
+
+  outputs = [ "bin" "dev" "out" ];
+
+  postInstall = ''
+    moveToOutput bin "$bin"
+  '';
+
+  passthru = {
+    inherit
+      uselibtirpc
+      libtirpc
+      szipSupport
+      szip
+      javaSupport
+      jdk
+      ;
+  };
+
+  meta = with lib; {
+    description = "Data model, library, and file format for storing and managing data";
+    homepage = "https://support.hdfgroup.org/products/hdf4/";
+    maintainers = with maintainers; [ knedlsepp ];
+    platforms = platforms.unix;
+    license = licenses.bsdOriginal;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdf5/1.10.nix b/nixpkgs/pkgs/tools/misc/hdf5/1.10.nix
new file mode 100644
index 000000000000..dda8fd3a8fa4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf5/1.10.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchurl
+, removeReferencesTo
+, zlibSupport ? true
+, zlib
+, enableShared ? !stdenv.hostPlatform.isStatic
+, javaSupport ? false
+, jdk
+}:
+
+let inherit (lib) optional; in
+
+stdenv.mkDerivation rec {
+  version = "1.10.11";
+  pname = "hdf5";
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-${lib.versions.majorMinor version}/${pname}-${version}/src/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-Cvx32lxGIXcJR1u++8qRwMtvHqYozNjDYZbPbFpN4wQ=";
+  };
+
+  outputs = [ "out" "dev" ];
+
+  buildInputs = optional javaSupport jdk;
+
+  nativeBuildInputs = [ removeReferencesTo ];
+
+  propagatedBuildInputs = optional zlibSupport zlib;
+
+  configureFlags = optional enableShared "--enable-shared"
+    ++ optional javaSupport "--enable-java";
+
+  patches = [ ];
+
+  postInstall = ''
+    find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
+    moveToOutput 'bin/h5cc' "''${!outputDev}"
+    moveToOutput 'bin/h5c++' "''${!outputDev}"
+    moveToOutput 'bin/h5fc' "''${!outputDev}"
+    moveToOutput 'bin/h5pcc' "''${!outputDev}"
+  '';
+
+  meta = {
+    description = "Data model, library, and file format for storing and managing data";
+    longDescription = ''
+      HDF5 supports an unlimited variety of datatypes, and is designed for flexible and efficient
+      I/O and for high volume and complex data. HDF5 is portable and is extensible, allowing
+      applications to evolve in their use of HDF5. The HDF5 Technology suite includes tools and
+      applications for managing, manipulating, viewing, and analyzing data in the HDF5 format.
+    '';
+    license = lib.licenses.bsd3; # Lawrence Berkeley National Labs BSD 3-Clause variant
+    homepage = "https://www.hdfgroup.org/HDF5/";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdf5/default.nix b/nixpkgs/pkgs/tools/misc/hdf5/default.nix
new file mode 100644
index 000000000000..c6855a47f8e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdf5/default.nix
@@ -0,0 +1,127 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, removeReferencesTo
+, cppSupport ? true
+, fortranSupport ? false
+, fortran
+, zlibSupport ? true
+, zlib
+, szipSupport ? false
+, szip
+, mpiSupport ? false
+, mpi
+, enableShared ? !stdenv.hostPlatform.isStatic
+, enableStatic ? stdenv.hostPlatform.isStatic
+, javaSupport ? false
+, jdk
+, usev110Api ? false
+, threadsafe ? false
+, python3
+}:
+
+# cpp and mpi options are mutually exclusive
+# (--enable-unsupported could be used to force the build)
+assert !cppSupport || !mpiSupport;
+
+let inherit (lib) optional optionals; in
+
+stdenv.mkDerivation rec {
+  version = "1.14.3";
+  pname = "hdf5"
+    + lib.optionalString cppSupport "-cpp"
+    + lib.optionalString fortranSupport "-fortran"
+    + lib.optionalString mpiSupport "-mpi"
+    + lib.optionalString threadsafe "-threadsafe";
+
+  src = fetchurl {
+    url =
+      let
+        majorMinor = lib.versions.majorMinor version;
+        majorMinorPatch = with lib.versions; "${major version}.${minor version}.${patch version}";
+      in
+      "https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-${majorMinor}/hdf5-${majorMinorPatch}/src/hdf5-${version}.tar.bz2";
+    sha256 = "sha256-lCXyJO110SgLtG1vJpI92Tj5BA5+rr9X5m7HNXwI+Rc=";
+  };
+
+  passthru = {
+    inherit
+      cppSupport
+      fortranSupport
+      fortran
+      zlibSupport
+      zlib
+      szipSupport
+      szip
+      mpiSupport
+      mpi
+      ;
+  };
+
+  outputs = [ "out" "dev" "bin" ];
+
+  nativeBuildInputs = [ removeReferencesTo cmake ]
+    ++ optional fortranSupport fortran;
+
+  buildInputs = optional fortranSupport fortran
+    ++ optional szipSupport szip
+    ++ optional javaSupport jdk;
+
+  propagatedBuildInputs = optional zlibSupport zlib
+    ++ optional mpiSupport mpi;
+
+  cmakeFlags = [
+    "-DHDF5_INSTALL_CMAKE_DIR=${placeholder "dev"}/lib/cmake"
+    "-DBUILD_STATIC_LIBS=${lib.boolToString enableStatic}"
+  ] ++ lib.optional stdenv.isDarwin "-DHDF5_BUILD_WITH_INSTALL_NAME=ON"
+    ++ lib.optional cppSupport "-DHDF5_BUILD_CPP_LIB=ON"
+    ++ lib.optional fortranSupport "-DHDF5_BUILD_FORTRAN=ON"
+    ++ lib.optional szipSupport "-DHDF5_ENABLE_SZIP_SUPPORT=ON"
+    ++ lib.optionals mpiSupport [ "-DHDF5_ENABLE_PARALLEL=ON" ]
+    ++ lib.optional enableShared "-DBUILD_SHARED_LIBS=ON"
+    ++ lib.optional javaSupport "-DHDF5_BUILD_JAVA=ON"
+    ++ lib.optional usev110Api "-DDEFAULT_API_VERSION=v110"
+    ++ lib.optionals threadsafe [ "-DDHDF5_ENABLE_THREADSAFE:BOOL=ON" "-DHDF5_BUILD_HL_LIB=OFF" ]
+  ;
+
+  postInstall = ''
+    find "$out" -type f -exec remove-references-to -t ${stdenv.cc} '{}' +
+    moveToOutput 'bin/' "''${!outputBin}"
+    moveToOutput 'bin/h5cc' "''${!outputDev}"
+    moveToOutput 'bin/h5c++' "''${!outputDev}"
+    moveToOutput 'bin/h5fc' "''${!outputDev}"
+    moveToOutput 'bin/h5pcc' "''${!outputDev}"
+    moveToOutput 'bin/h5hlcc' "''${!outputDev}"
+    moveToOutput 'bin/h5hlc++' "''${!outputDev}"
+  '' + lib.optionalString enableShared
+  # The shared build creates binaries with -shared suffixes,
+  # so we remove these suffixes.
+  ''
+    pushd ''${!outputBin}/bin
+    for file in *-shared; do
+      mv "$file" "''${file%%-shared}"
+    done
+    popd
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests = {
+    inherit (python3.pkgs) h5py;
+  };
+
+  meta = with lib; {
+    description = "Data model, library, and file format for storing and managing data";
+    longDescription = ''
+      HDF5 supports an unlimited variety of datatypes, and is designed for flexible and efficient
+      I/O and for high volume and complex data. HDF5 is portable and is extensible, allowing
+      applications to evolve in their use of HDF5. The HDF5 Technology suite includes tools and
+      applications for managing, manipulating, viewing, and analyzing data in the HDF5 format.
+    '';
+    license = licenses.bsd3; # Lawrence Berkeley National Labs BSD 3-Clause variant
+    maintainers = [ maintainers.markuskowa ];
+    homepage = "https://www.hdfgroup.org/HDF5/";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdfview/0001-Hardcode-isUbuntu-false-to-avoid-hostname-dependency.patch b/nixpkgs/pkgs/tools/misc/hdfview/0001-Hardcode-isUbuntu-false-to-avoid-hostname-dependency.patch
new file mode 100644
index 000000000000..fde26e0dca83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdfview/0001-Hardcode-isUbuntu-false-to-avoid-hostname-dependency.patch
@@ -0,0 +1,38 @@
+From e5eb394458e19ce8f8a231e8b2005c80c64fd426 Mon Sep 17 00:00:00 2001
+From: Jiajie Chen <c@jia.je>
+Date: Fri, 15 Jul 2022 10:13:23 +0800
+Subject: [PATCH] Hardcode isUbuntu=false to avoid hostname dependency.
+
+The original build.xml detects whether the system is ubuntu based on its
+hostname, which is useless in nixpkgs and brings additional dependency.
+
+As suggested by @risicle in #180613, we can simply hardcode isUbuntu to
+false.
+
+Signed-off-by: Jiajie Chen <c@jia.je>
+---
+ build.xml | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/build.xml b/build.xml
+index c4f0974..15a6078 100644
+--- a/build.xml
++++ b/build.xml
+@@ -143,11 +143,9 @@
+         </and>
+     </condition>
+ 
+-    <exec executable="hostname" outputproperty="computer.hostname"/>
+-
+-    <condition property="isUbuntu">
+-        <contains string="${computer.hostname}" substring="ubuntu" />
+-    </condition>
++    <!-- Since we do not package .deb nor .rpm files, we can safely
++        hardcode isUbuntu = false. -->
++    <property name="isUbuntu" value="false" />
+ 
+     <!-- Build 64-bit binary.
+        Note: os.arch gives the architecture of the JVM, NOT the OS;
+-- 
+2.36.1
+
diff --git a/nixpkgs/pkgs/tools/misc/hdfview/default.nix b/nixpkgs/pkgs/tools/misc/hdfview/default.nix
new file mode 100644
index 000000000000..b559a494d456
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdfview/default.nix
@@ -0,0 +1,84 @@
+{ lib, stdenv, fetchurl, ant, jdk, hdf4, hdf5, makeDesktopItem, copyDesktopItems, strip-nondeterminism, stripJavaArchivesHook }:
+
+stdenv.mkDerivation rec {
+  pname = "hdfview";
+  version = "3.3.1";
+
+  src = fetchurl {
+    url = "https://support.hdfgroup.org/ftp/HDF5/releases/HDF-JAVA/${pname}-${version}/src/${pname}-${version}.tar.gz";
+    sha256 = "sha256-WcGYceMOB8gCycJSW4KdApy2gIBgTnE/d0PxGZClUqg=";
+  };
+
+  patches = [
+    # Hardcode isUbuntu=false to avoid calling hostname to detect os
+    ./0001-Hardcode-isUbuntu-false-to-avoid-hostname-dependency.patch
+    # Disable signing on macOS
+    ./disable-mac-signing.patch
+    # Remove timestamp comment from generated versions.properties file
+    ./remove-properties-timestamp.patch
+  ];
+
+  nativeBuildInputs = [
+    ant
+    jdk
+    copyDesktopItems
+    strip-nondeterminism
+    stripJavaArchivesHook
+  ];
+
+  HDFLIBS = (hdf4.override { javaSupport = true; }).out;
+  HDF5LIBS = (hdf5.override { javaSupport = true; }).out;
+
+  buildPhase =
+    let
+      arch = if stdenv.isx86_64 then "x86_64" else "aarch64";
+    in
+    ''
+      runHook preBuild
+
+      ant createJPackage -Dmachine.arch=${arch}
+
+      runHook postBuild
+    '';
+
+  desktopItem = makeDesktopItem rec {
+    name = "HDFView";
+    desktopName = name;
+    exec = name;
+    icon = name;
+    comment = meta.description;
+    categories = [ "Science" "DataVisualization" ];
+  };
+
+  installPhase = ''
+    runHook preInstall
+  '' + lib.optionalString stdenv.isLinux ''
+    mkdir -p $out/bin $out/lib
+    cp -a build/dist/HDFView/bin/HDFView $out/bin/
+    cp -a build/dist/HDFView/lib/app $out/lib/
+    cp -a build/dist/HDFView/lib/libapplauncher.so $out/lib/
+    ln -s ${jdk}/lib/openjdk $out/lib/runtime
+
+    mkdir -p $out/share/applications $out/share/icons/hicolor/32x32/apps
+    cp src/HDFView.png $out/share/icons/hicolor/32x32/apps/
+  '' + lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    cp -a build/dist/HDFView.app $out/Applications/
+  '' + ''
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    # Remove build timestamp from javadoc files
+    find $out/lib/app{,/mods}/doc/javadocs -name "*.html" -exec strip-nondeterminism --type javadoc {} +
+  '';
+
+  meta = {
+    description = "A visual tool for browsing and editing HDF4 and HDF5 files";
+    license = lib.licenses.free; # BSD-like
+    homepage = "https://www.hdfgroup.org/downloads/hdfview";
+    platforms = lib.platforms.linux ++ lib.platforms.darwin;
+    maintainers = with lib.maintainers; [ jiegec ];
+    mainProgram = "HDFView";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hdfview/disable-mac-signing.patch b/nixpkgs/pkgs/tools/misc/hdfview/disable-mac-signing.patch
new file mode 100644
index 000000000000..d7d67f7ac608
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdfview/disable-mac-signing.patch
@@ -0,0 +1,26 @@
+diff --git a/build.xml b/build.xml
+index 70ab3e2..9460321 100644
+--- a/build.xml
++++ b/build.xml
+@@ -1802,13 +1802,6 @@
+             description="Create the final package for distribution" />
+ 
+     <target name="createJPackageMac" depends="createJPackageBase" if="${isAppMac}">
+-        <!-- unlock keychain -->
+-        <exec executable="security" dir="${dist.dir}" failonerror="true">
+-            <arg value="unlock-keychain" />
+-            <arg value="-p" />
+-            <arg value="${login.keychain_key}" />
+-            <arg value="login.keychain" />
+-        </exec>
+ 
+         <echo> Create the mac jpackage</echo>
+         <exec executable="${java.home}/bin/jpackage">
+@@ -1864,7 +1857,6 @@
+             <arg value="app-image" />
+             <arg value="--icon" />
+             <arg value="${basedir}/package_files/macosx/HDFView.icns" />
+-            <arg value="--mac-sign" />
+             <arg value="--mac-package-identifier" />
+             <arg value="HDFView.hdfgroup.org" />
+             <arg value="--mac-package-name" />
diff --git a/nixpkgs/pkgs/tools/misc/hdfview/remove-properties-timestamp.patch b/nixpkgs/pkgs/tools/misc/hdfview/remove-properties-timestamp.patch
new file mode 100644
index 000000000000..8e3790487f2d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdfview/remove-properties-timestamp.patch
@@ -0,0 +1,14 @@
+diff --git a/build.xml b/build.xml
+index fcc4931..2afeb6c 100644
+--- a/build.xml
++++ b/build.xml
+@@ -345,6 +345,9 @@
+             <entry key="HDF5_VERSION" value="${hdf5.version}"/>
+             <entry key="HDFVIEW_VERSION" value="${app.version}"/>
+         </propertyfile>
++        <exec executable="sed" failonerror="true">
++            <arg line="-i /#/d ${classes.dir}/hdf/versions.properties" />
++        </exec>
+     </target>
+ 
+     <target name="compile" depends="clean, create-property-file, compileobj, compilehdf4, compilefits, compilenc2, compilehdf5">
diff --git a/nixpkgs/pkgs/tools/misc/hdl-dump/default.nix b/nixpkgs/pkgs/tools/misc/hdl-dump/default.nix
new file mode 100644
index 000000000000..8990a447dc0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hdl-dump/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "hdl-dump";
+  version = "unstable-2022-09-19";
+
+  src = fetchFromGitHub {
+    owner = "ps2homebrew";
+    repo = pname;
+    rev = "87d3099d2ba39a15e86ebc7dc725e8eaa49f2d5f";
+    hash = "sha256-eBqF4OGEaLQXQ4JMtD/Yn+f97RzKVsnC+4oyiEhLTUM=";
+  };
+
+  makeFlags = [ "RELEASE=yes" ];
+
+  installPhase = ''
+    install -Dm755 hdl_dump -t $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ps2homebrew/hdl-dump";
+    description = "PlayStation 2 HDLoader image dump/install utility";
+    platforms = platforms.linux;
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ makefu ];
+    mainProgram = "hdl_dump";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/heatseeker/default.nix b/nixpkgs/pkgs/tools/misc/heatseeker/default.nix
new file mode 100644
index 000000000000..24da793445cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/heatseeker/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, rustPlatform, coreutils }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "heatseeker";
+  version = "1.7.2";
+
+  src = fetchFromGitHub {
+    owner = "rschmitt";
+    repo = "heatseeker";
+    rev = "v${version}";
+    sha256 = "sha256-SU5HLAFA7IHnVhsmVtxskteeKKIEvvVSqHIeEk5BkfA=";
+  };
+
+  cargoSha256 = "sha256-RHD2/Uvj8NWpZ+xK16xTN5K/hDWYhwHnu2E5NslGFQI=";
+
+  # https://github.com/rschmitt/heatseeker/issues/42
+  # I've suggested using `/usr/bin/env stty`, but doing that isn't quite as simple
+  # as a substitution, and this works since we have the path to coreutils stty.
+  patchPhase = ''
+    substituteInPlace src/screen/unix.rs --replace "/bin/stty" "${coreutils}/bin/stty"
+  '';
+
+  # some tests require a tty, this variable turns them off for Travis CI,
+  # which we can also make use of
+  TRAVIS = "true";
+
+  meta = with lib; {
+    description = "A general-purpose fuzzy selector";
+    homepage = "https://github.com/rschmitt/heatseeker";
+    license = licenses.mit;
+    maintainers = [ maintainers.michaelpj ];
+    mainProgram = "hs";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hebcal/default.nix b/nixpkgs/pkgs/tools/misc/hebcal/default.nix
new file mode 100644
index 000000000000..80d52592c742
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hebcal/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version = "4.24";
+  pname = "hebcal";
+
+  src = fetchFromGitHub {
+    owner = "hebcal";
+    repo = "hebcal";
+    rev = "v${version}";
+    sha256 = "sha256-iWp2S3s8z/y4dZ66Ogqu7Yf4gTUvSS1J5F7d0ifRbcY=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://hebcal.github.io";
+    description = "A perpetual Jewish Calendar";
+    longDescription = "Hebcal is a program which prints out the days in the Jewish calendar for a given Gregorian year. Hebcal is fairly flexible in terms of which events in the Jewish calendar it displays.";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.hhm ];
+    platforms = platforms.all;
+    mainProgram = "hebcal";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/heimdall/default.nix b/nixpkgs/pkgs/tools/misc/heimdall/default.nix
new file mode 100644
index 000000000000..422363ef418a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/heimdall/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, cmake, zlib, libusb1
+, enableGUI ? false, qtbase ? null
+}:
+
+mkDerivation rec {
+  pname = "heimdall${lib.optionalString enableGUI "-gui"}";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner  = "Benjamin-Dobell";
+    repo   = "Heimdall";
+    rev    = "v${version}";
+    sha256 = "1ygn4snvcmi98rgldgxf5hwm7zzi1zcsihfvm6awf9s6mpcjzbqz";
+  };
+
+  buildInputs = [
+    zlib
+    libusb1
+  ] ++ lib.optional enableGUI qtbase;
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [
+    "-DDISABLE_FRONTEND=${if enableGUI then "OFF" else "ON"}"
+    "-DLIBUSB_LIBRARY=${libusb1}"
+  ];
+
+  preConfigure = ''
+    # Give ownership of the Galaxy S USB device to the logged in user.
+    substituteInPlace heimdall/60-heimdall.rules --replace 'MODE="0666"' 'TAG+="uaccess"'
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace libpit/CMakeLists.txt --replace "-std=gnu++11" ""
+  '';
+
+  installPhase = lib.optionalString (stdenv.isDarwin && enableGUI) ''
+    mkdir -p $out/Applications
+    mv bin/heimdall-frontend.app $out/Applications/heimdall-frontend.app
+    wrapQtApp $out/Applications/heimdall-frontend.app/Contents/MacOS/heimdall-frontend
+  '' + ''
+    mkdir -p $out/{bin,share/doc/heimdall,lib/udev/rules.d}
+    install -m755 -t $out/bin                bin/*
+    install -m644 -t $out/lib/udev/rules.d   ../heimdall/60-heimdall.rules
+    install -m644 ../Linux/README   $out/share/doc/heimdall/README.linux
+    install -m644 ../OSX/README.txt $out/share/doc/heimdall/README.osx
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "http://www.glassechidna.com.au/products/heimdall/";
+    description = "A cross-platform tool suite to flash firmware onto Samsung Galaxy S devices";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+    mainProgram = "heimdall";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hex/default.nix b/nixpkgs/pkgs/tools/misc/hex/default.nix
new file mode 100644
index 000000000000..ef64cbea0559
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hex/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, testers
+, hex
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hex";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "sitkevij";
+    repo = "hex";
+    rev = "v${version}";
+    hash = "sha256-YctXDhCMJvDQLPsuhzdyYDUIlFE2vKltNtrFFeE7YE8=";
+  };
+
+  cargoHash = "sha256-Nlha9Zn0qaQhpN2ivbBvpIPxCN2I7BtJJULb6sYdpdo=";
+
+  passthru.tests.version = testers.testVersion {
+    package = hex;
+    version = "hx ${version}";
+  };
+
+  meta = with lib; {
+    description = "Futuristic take on hexdump, made in Rust";
+    homepage = "https://github.com/sitkevij/hex";
+    changelog = "https://github.com/sitkevij/hex/releases/tag/v${version}";
+    mainProgram = "hx";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ivar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hexd/default.nix b/nixpkgs/pkgs/tools/misc/hexd/default.nix
new file mode 100644
index 000000000000..140db3435083
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hexd/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "hexd";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "FireyFly";
+    repo = "hexd";
+    rev = "v${version}";
+    sha256 = "sha256-b/dROBQVPEiMBTcu4MTi6Lf6ChkFZqZrJ1V0j54rrFY=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Colourful, human-friendly hexdump tool";
+    homepage = "https://github.com/FireyFly/hexd";
+    maintainers = [ maintainers.FireyFly ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+    mainProgram = "hexd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hexdiff/default.nix b/nixpkgs/pkgs/tools/misc/hexdiff/default.nix
new file mode 100644
index 000000000000..937a07bee78b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hexdiff/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "hexdiff";
+  version = "unstable-2018-01-24";
+
+  src = fetchFromGitHub {
+    owner = "ahroach";
+    repo = "hexdiff";
+    rev = "3e96f27e65167c619ede35ab04232163dc273e69";
+    sha256 = "sha256-G6Qi7e4o+0ahcslJ8UfJrdoc8NNkY+nl6kyDlkJCo9I=";
+  };
+
+  dontConfigure = true;
+
+  buildPhase = ''
+    runHook preBuild
+
+    $CC -o hexdiff hexdiff.c
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D hexdiff  -t $out/bin/
+
+    runHook postInstall
+  '';
+
+  meta = {
+    homepage = "https://github.com/ahroach/hexdiff";
+    description = "A terminal application for differencing two binary files, with color-coded output";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ rogarb ];
+    platforms = lib.platforms.linux;
+    mainProgram = "hexdiff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hexyl/default.nix b/nixpkgs/pkgs/tools/misc/hexyl/default.nix
new file mode 100644
index 000000000000..fa68fb4a2d43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hexyl/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hexyl";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-di7SBuB4LsnqlP3BdMcsSLj4zpyKA/ninVpRyR9AJaI=";
+  };
+
+  cargoHash = "sha256-fXrdOiCmRgMPJxZIS/SkTkZZkag8ZUhNnMlU4k1m/+0=";
+
+  meta = with lib; {
+    description = "A command-line hex viewer";
+    longDescription = ''
+      `hexyl` is a simple hex viewer for the terminal. It uses a colored
+      output to distinguish different categories of bytes (NULL bytes,
+      printable ASCII characters, ASCII whitespace characters, other ASCII
+      characters and non-ASCII).
+    '';
+    homepage = "https://github.com/sharkdp/hexyl";
+    changelog = "https://github.com/sharkdp/hexyl/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dywedir figsoda SuperSandro2000 ];
+    mainProgram = "hexyl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hhpc/default.nix b/nixpkgs/pkgs/tools/misc/hhpc/default.nix
new file mode 100644
index 000000000000..71c39c68acce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hhpc/default.nix
@@ -0,0 +1,29 @@
+{lib, stdenv, fetchFromGitHub, xorg, pkg-config}:
+
+stdenv.mkDerivation rec {
+  pname = "hhpc";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "aktau";
+    repo = "hhpc";
+    rev = "v${version}";
+    sha256 = "1djsw1r38mh6zx0rbyn2cfa931hyddib4fl3i27c4z7xinl709ss";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ xorg.libX11 ];
+
+  installPhase = ''
+      mkdir -p $out/bin
+      cp hhpc $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Hides the mouse pointer in X11";
+    maintainers = with maintainers; [ nico202 ];
+    platforms = platforms.unix;
+    license = lib.licenses.bsd3;
+    mainProgram = "hhpc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hid-listen/default.nix b/nixpkgs/pkgs/tools/misc/hid-listen/default.nix
new file mode 100644
index 000000000000..62c2d7beb2ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hid-listen/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchzip }:
+stdenv.mkDerivation rec {
+  pname = "hid-listen";
+  version = "1.01";
+
+  src = fetchzip {
+    name = "hid_listen_${version}";
+    url = "https://www.pjrc.com/teensy/hid_listen_${version}.zip";
+    sha256 = "0sd4dvi39fl4vy880mg531ryks5zglfz5mdyyqr7x6qv056ffx9w";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv ./hid_listen $out/bin/hid_listen
+  '';
+
+  meta = with lib; {
+    description = "A tool thats prints debugging information from usb HID devices";
+    homepage = "https://www.pjrc.com/teensy/hid_listen.html";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ tomsmeets ];
+    platforms = platforms.linux;
+    mainProgram = "hid_listen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hid-tools/default.nix b/nixpkgs/pkgs/tools/misc/hid-tools/default.nix
new file mode 100644
index 000000000000..82c61caf020a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hid-tools/default.nix
@@ -0,0 +1,53 @@
+{ python3
+, lib
+, fetchFromGitLab
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "hid-tools";
+  version = "0.7";
+
+  format = "pyproject";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.freedesktop.org";
+    owner = "libevdev";
+    repo = "hid-tools";
+    rev = version;
+    hash = "sha256-h880jJcZDc9pIPf+nr30wu2i9y3saAKFZpooJ4MF67E=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    hatchling
+    pypandoc
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    libevdev
+    parse
+    pyyaml
+    click
+    pyudev
+    typing-extensions
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  # Tests require /dev/uhid
+  # https://gitlab.freedesktop.org/libevdev/hid-tools/-/issues/18#note_166353
+  doCheck = false;
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace-fail "pypandoc_binary" "pypandoc"
+  '';
+
+  meta = with lib; {
+    description = "Python scripts to manipulate HID data";
+    homepage = "https://gitlab.freedesktop.org/libevdev/hid-tools";
+    license = licenses.mit;
+    maintainers = teams.freedesktop.members;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hidrd/default.nix b/nixpkgs/pkgs/tools/misc/hidrd/default.nix
new file mode 100644
index 000000000000..5ce3e969f276
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hidrd/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation {
+  pname = "hidrd";
+  version = "unstable-2019-06-03";
+
+  src = fetchFromGitHub {
+    owner = "DIGImend";
+    repo = "hidrd";
+    rev = "6c0ed39708a5777ac620f902f39c8a0e03eefe4e";
+    sha256 = "1rnhq6b0nrmphdig1qrpzpbpqlg3943gzpw0v7p5rwcdynb6bb94";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "HID report descriptor I/O library and conversion tool";
+    homepage = "https://github.com/DIGImend/hidrd";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pacien ];
+    platforms = platforms.all;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/hidrd.x86_64-darwin
+    mainProgram = "hidrd-convert";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hiksink/default.nix b/nixpkgs/pkgs/tools/misc/hiksink/default.nix
new file mode 100644
index 000000000000..05d7e1c9f44e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hiksink/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, Security
+, openssl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hiksink";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "CornerBit";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-k/cBCc7DywyBbAzCRCHdrOVmo+QVCsSgDn8hcyTIUI8=";
+  };
+
+  cargoSha256 = "sha256-vqzXpSPBwY7m/Fdob0mHH0OXnzyQwFk7x2kk9Tgez3M=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "Tool to convert Hikvision camera events to MQTT";
+    homepage = "https://github.com/CornerBit/HikSink";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "hik_sink";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hoard/default.nix b/nixpkgs/pkgs/tools/misc/hoard/default.nix
new file mode 100644
index 000000000000..4bdf7b7127b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hoard/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hoard";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "Hyde46";
+    repo = "hoard";
+    rev = "v${version}";
+    hash = "sha256-c9iSbxkHwLOeATkO7kzTyLD0VAwZUzCvw5c4FyuR5/E=";
+  };
+
+  cargoHash = "sha256-4EeeD1ySR4M1i2aaKJP/BNSn+t1l8ingiv2ZImFFn1A=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "CLI command organizer written in rust";
+    homepage = "https://github.com/hyde46/hoard";
+    changelog = "https://github.com/Hyde46/hoard/blob/${src.rev}/CHANGES.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ builditluc figsoda ];
+    mainProgram = "hoard";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/homesick/Gemfile b/nixpkgs/pkgs/tools/misc/homesick/Gemfile
new file mode 100644
index 000000000000..fb1d6a5584f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem "homesick"
diff --git a/nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock b/nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock
new file mode 100644
index 000000000000..accc917e240f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    homesick (1.1.6)
+      thor (>= 0.14.0)
+    thor (0.20.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  homesick
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/homesick/default.nix b/nixpkgs/pkgs/tools/misc/homesick/default.nix
new file mode 100644
index 000000000000..663990ffac80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/default.nix
@@ -0,0 +1,29 @@
+{ lib, bundlerEnv, bundlerUpdateScript, git }:
+bundlerEnv {
+  pname = "homesick";
+
+  gemdir = ./.;
+
+  # Cannot use `wrapProgram` because the the help is aware of the file name.
+  postInstall = ''
+    rm $out/bin/thor
+    sed 1a'ENV["PATH"] = "${git}/bin:#{ENV["PATH"] ? ":#{ENV["PATH"]}" : "" }"' -i $out/bin/homesick
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "homesick";
+
+  meta = with lib; {
+    description = "Your home directory is your castle. Don't leave your dotfiles behind";
+    longDescription =
+      ''
+        Homesick is sorta like rip, but for dotfiles. It uses git to clone a repository containing
+        dotfiles, and saves them in ~/.homesick. It then allows you to symlink all the dotfiles into
+        place with a single command.
+      '';
+    homepage = "https://github.com/technicalpickles/homesick";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaronschif nicknovitski ];
+    platforms = platforms.unix;
+    mainProgram = "homesick";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/homesick/gemset.nix b/nixpkgs/pkgs/tools/misc/homesick/gemset.nix
new file mode 100644
index 000000000000..4a01696c2c79
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/homesick/gemset.nix
@@ -0,0 +1,19 @@
+{
+  homesick = {
+    dependencies = ["thor"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lxvnp4ncbx0irlblfxbd1f8h4hl11hgmyiy35q79w137r3prxml";
+      type = "gem";
+    };
+    version = "1.1.6";
+  };
+  thor = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmqpyj642sk4g16nkbq6pj856adpv91lp4krwhqkh2iw63aszdl";
+      type = "gem";
+    };
+    version = "0.20.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hostmux/default.nix b/nixpkgs/pkgs/tools/misc/hostmux/default.nix
new file mode 100644
index 000000000000..27e714a5e7f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hostmux/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, openssh
+, tmux
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "hostmux";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "hukl";
+    repo = "hostmux";
+    rev = finalAttrs.version;
+    hash = "sha256-odN7QFsU3MsWW8VabVjZH+8+AUFOUio8eF9ORv9iPEA=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = [
+    openssh
+    tmux
+  ];
+
+  postPatch = ''
+    substituteInPlace hostmux \
+      --replace "SSH_CMD=ssh" "SSH_CMD=${openssh}/bin/ssh" \
+      --replace "tmux -2" "${tmux}/bin/tmux -2" \
+      --replace "tmux s" "${tmux}/bin/tmux s"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 hostmux $out/bin/hostmux
+    installManPage man/hostmux.1
+    installShellCompletion --zsh zsh-completion/_hostmux
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Small wrapper script for tmux to easily connect to a series of hosts via ssh and open a split pane for each of the hosts";
+    homepage = "https://github.com/hukl/hostmux";
+    license = lib.licenses.mit;
+    mainProgram = "hostmux";
+    maintainers = with lib.maintainers; [ fernsehmuell ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/hostsblock/default.nix b/nixpkgs/pkgs/tools/misc/hostsblock/default.nix
new file mode 100644
index 000000000000..0346c81c66db
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hostsblock/default.nix
@@ -0,0 +1,73 @@
+{ lib, coreutils, curl, fetchFromGitHub, unzip, p7zip, gnused, gnugrep, stdenv
+, blacklist ? [ "adwords.google.com" ]
+, whitelist ? [
+  ".dropbox.com"
+  " www.malwaredomainlists.com"
+  " www.arcamax.com"
+  " www.instructables.com"
+  " goo.gl"
+  " www.reddit.com"
+  " t.co"
+  " bit.ly"
+  " www.viddler.com"
+  " viddler.com"
+  " tinyurl.com"
+  " ompldr.org"
+  " www.ompldr.org"
+  "login.yahoo.com"
+  " l.yimg.com"
+  ".bp.blogspot.com"
+] }:
+
+stdenv.mkDerivation {
+  pname = "hostsblock";
+  version = "20161213";
+
+  src = fetchFromGitHub {
+    owner = "gaenserich";
+    repo = "hostsblock";
+    rev = "91cacbdfbfb5e7ae9ba3babf8de41e135270c310";
+    sha256 = "1w91fbgf8v2nn0a6m8l6kd455km2j1lvpvqil4yxhrg018aigax0";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -Dm744 src/hostsblock.sh $out/bin/hostsblock
+    install -Dm744 src/hostsblock-urlcheck.sh $out/bin/hostsblock-urlcheck
+
+    mkdir -p $out/lib
+    install -Dm644 src/hostsblock-common.sh $out/lib/
+
+    mkdir -p $out/etc
+    install -Dm644 conf/hostsblock.conf $out/etc/
+    ${lib.concatMapStrings (d: "echo ${d} >> $out/etc/black.list\n") blacklist}
+    ${lib.concatMapStrings (d: "echo ${d} >> $out/etc/white.list\n") whitelist}
+    install -Dm644 conf/hosts.head $out/etc/
+
+    for f in $out/bin/* $out/lib/* $out/etc/hostsblock.conf; do
+      substituteInPlace $f --replace "/dev/shm" "/tmp"
+      substituteInPlace $f --replace "/usr/lib/" "$out/lib/"
+      substituteInPlace $f --replace "/etc/hostsblock/" "$out/etc/"
+      sed --in-place --regexp-extended "s|([\` ])curl |\1${curl}/bin/curl |g" $f
+      substituteInPlace $f --replace grep ${gnugrep}/bin/grep
+      substituteInPlace $f --replace " sed " " ${gnused}/bin/sed "
+      sed --in-place --regexp-extended "s|([^_])unzip |\1${unzip}/bin/unzip |" $f
+      sed --in-place --regexp-extended "s|7za([^,])|${p7zip}/bin/7za\1|g" $f
+    done
+
+    echo "postprocess(){ ${coreutils}/bin/true; }" >> $out/etc/hostsblock.conf
+
+    mkdir -p $out/share/dbus-1/system-services
+    install -Dm644 systemd/hostsblock.service $out/share/dbus-1/system-services
+    install -Dm644 systemd/hostsblock.timer $out/share/dbus-1/system-services
+  '';
+
+  meta = with lib; {
+    description = "An ad- and malware-blocking script for Linux";
+    homepage = "http://gaenserich.github.io/hostsblock/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.nicknovitski ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/hpcg/default.nix b/nixpkgs/pkgs/tools/misc/hpcg/default.nix
new file mode 100644
index 000000000000..77621bd6f158
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hpcg/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, mpi } :
+
+stdenv.mkDerivation rec {
+  pname = "hpcg";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://www.hpcg-benchmark.org/downloads/${pname}-${version}.tar.gz";
+    sha256 = "197lw2nwmzsmfsbvgvi8z7kj69n374kgfzzp8pkmk7mp2vkk991k";
+  };
+
+  dontConfigure = true;
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ mpi ];
+
+  makeFlags = [ "arch=Linux_MPI" ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/hpcg
+
+    cp bin/xhpcg $out/bin
+    cp bin/hpcg.dat $out/share/hpcg
+  '';
+
+  meta = with lib; {
+    description = "HPC conjugate gradient benchmark";
+    homepage = "https://www.hpcg-benchmark.org";
+    platforms = platforms.linux;
+    license = licenses.bsd3;
+    maintainers = [ maintainers.markuskowa ];
+    mainProgram = "xhpcg";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/hpl/default.nix b/nixpkgs/pkgs/tools/misc/hpl/default.nix
new file mode 100644
index 000000000000..0521afc4ef26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hpl/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, blas, lapack, mpi } :
+
+assert (!blas.isILP64) && (!lapack.isILP64);
+
+stdenv.mkDerivation rec {
+  pname = "hpl";
+  version = "2.3";
+
+  src = fetchurl {
+    url = "http://www.netlib.org/benchmark/hpl/${pname}-${version}.tar.gz";
+    sha256 = "0c18c7fzlqxifz1bf3izil0bczv3a7nsv0dn6winy3ik49yw3i9j";
+  };
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    # only contains the static lib
+    rm -r $out/lib
+
+    install -D testing/ptest/HPL.dat $out/share/hpl/HPL.dat
+  '';
+
+  buildInputs = [ blas lapack mpi ];
+
+  meta = with lib; {
+    description = "Portable Implementation of the Linpack Benchmark for Distributed-Memory Computers";
+    homepage = "http://www.netlib.org/benchmark/hpl/";
+    platforms = platforms.unix;
+    license = licenses.bsdOriginal;
+    maintainers = [ maintainers.markuskowa ];
+    mainProgram = "xhpl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hsd/default.nix b/nixpkgs/pkgs/tools/misc/hsd/default.nix
new file mode 100644
index 000000000000..a1e82076cca4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hsd/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, buildNpmPackage
+, fetchFromGitHub
+, python3
+, unbound
+, darwin
+}:
+
+buildNpmPackage rec {
+  pname = "hsd";
+  version = "6.1.1";
+
+  src = fetchFromGitHub {
+    owner = "handshake-org";
+    repo = "hsd";
+    rev = "v${version}";
+    hash = "sha256-T57kDEQwHIyW7xVXrzjJdUcocST9ks4x3JR8yytH8P4=";
+  };
+
+  npmDepsHash = "sha256-EBrCuRckBg42k6ZUoB25xObv3lULnSPNJ2nO9l/TWvA=";
+
+  nativeBuildInputs = [
+    python3
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.cctools
+  ];
+
+  buildInputs = [
+    unbound
+  ];
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/handshake-org/hsd/blob/${src.rev}/CHANGELOG.md";
+    description = "Implementation of the Handshake protocol";
+    homepage = "https://github.com/handshake-org/hsd";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ d-xo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile
new file mode 100644
index 000000000000..a7c369cc6804
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'html-proofer'
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock
new file mode 100644
index 000000000000..846b465bfd8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/Gemfile.lock
@@ -0,0 +1,60 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    Ascii85 (1.1.0)
+    addressable (2.8.5)
+      public_suffix (>= 2.0.2, < 6.0)
+    afm (0.2.2)
+    async (2.6.3)
+      console (~> 1.10)
+      fiber-annotation
+      io-event (~> 1.1)
+      timers (~> 4.1)
+    console (1.23.1)
+      fiber-annotation
+      fiber-local
+    ethon (0.16.0)
+      ffi (>= 1.15.0)
+    ffi (1.15.5)
+    fiber-annotation (0.2.0)
+    fiber-local (1.0.0)
+    hashery (2.1.2)
+    html-proofer (5.0.8)
+      addressable (~> 2.3)
+      async (~> 2.1)
+      nokogiri (~> 1.13)
+      pdf-reader (~> 2.11)
+      rainbow (~> 3.0)
+      typhoeus (~> 1.3)
+      yell (~> 2.0)
+      zeitwerk (~> 2.5)
+    io-event (1.2.3)
+    mini_portile2 (2.8.4)
+    nokogiri (1.15.4)
+      mini_portile2 (~> 2.8.2)
+      racc (~> 1.4)
+    pdf-reader (2.11.0)
+      Ascii85 (~> 1.0)
+      afm (~> 0.2.1)
+      hashery (~> 2.0)
+      ruby-rc4
+      ttfunk
+    public_suffix (5.0.3)
+    racc (1.7.1)
+    rainbow (3.1.1)
+    ruby-rc4 (0.1.5)
+    timers (4.3.5)
+    ttfunk (1.7.0)
+    typhoeus (1.4.0)
+      ethon (>= 0.9.0)
+    yell (2.2.2)
+    zeitwerk (2.6.11)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  html-proofer
+
+BUNDLED WITH
+   2.4.17
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/default.nix b/nixpkgs/pkgs/tools/misc/html-proofer/default.nix
new file mode 100644
index 000000000000..cc4f6f69f263
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/default.nix
@@ -0,0 +1,21 @@
+{ bundlerEnv, ruby, lib, bundlerUpdateScript }:
+
+bundlerEnv rec {
+  name = "${pname}-${version}";
+  pname = "html-proofer";
+  version = (import ./gemset.nix).html-proofer.version;
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript pname;
+
+  meta = with lib; {
+    description = "A tool to validate HTML files";
+    homepage    = "https://github.com/gjtorikian/html-proofer";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms   = platforms.unix;
+    mainProgram = "htmlproofer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix b/nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix
new file mode 100644
index 000000000000..45ad23f7ab0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/html-proofer/gemset.nix
@@ -0,0 +1,250 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33";
+      type = "gem";
+    };
+    version = "2.8.5";
+  };
+  afm = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06kj9hgd0z8pj27bxp2diwqh6fv7qhwwm17z64rhdc4sfn76jgn8";
+      type = "gem";
+    };
+    version = "0.2.2";
+  };
+  Ascii85 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ds4v9xgsyvijnlflak4dzf1qwmda9yd5bv8jwsb56nngd399rlw";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  async = {
+    dependencies = ["console" "fiber-annotation" "io-event" "timers"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0806cya8kq9glg6vifa9j4zjf81drwa84hdzx71ah98zz317hvhb";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  console = {
+    dependencies = ["fiber-annotation" "fiber-local"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04cpbx4bsw3k20xgvz6cs1gi41q9mmagc95x2zk6ar49a25z89sb";
+      type = "gem";
+    };
+    version = "1.23.1";
+  };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17ix0mijpsy3y0c6ywrk5ibarmvqzjsirjyprpsy3hwax8fdm85v";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  fiber-annotation = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vcmynyvhny8n4p799rrhcx0m033hivy0s1gn30ix8rs7qsvgvs";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  fiber-local = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrxxb09fc7aicb9zb0pmn5akggjy21dmxkdl3w949y4q05rldr9";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  hashery = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qj8815bf7q6q7llm5rzdz279gzmpqmqqicxnzv066a020iwqffj";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  html-proofer = {
+    dependencies = ["addressable" "async" "nokogiri" "pdf-reader" "rainbow" "typhoeus" "yell" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lzh3lb3l2qid3sh3da0fgjdwdly2g5jia6drzpn1dn1b92a7wwm";
+      type = "gem";
+    };
+    version = "5.0.8";
+  };
+  io-event = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0046p1q98xrys4bzcx74k658fv1fiigdgcd0az0pm12n2hjcms6r";
+      type = "gem";
+    };
+    version = "1.2.3";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02mj8mpd6ck5gpcnsimx5brzggw5h5mmmpq2djdypfq16wcw82qq";
+      type = "gem";
+    };
+    version = "2.8.4";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k9w2z0953mnjrsji74cshqqp08q7m1r6zhadw1w0g34xzjh3a74";
+      type = "gem";
+    };
+    version = "1.15.4";
+  };
+  pdf-reader = {
+    dependencies = ["Ascii85" "afm" "hashery" "ruby-rc4" "ttfunk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09sx25jpnip2sp6wh5sn5ad7za78rfi95qp5iiczfh43z4jqa8q3";
+      type = "gem";
+    };
+    version = "2.11.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n9j7mczl15r3kwqrah09cxj8hxdfawiqxa60kga2bmxl9flfz9k";
+      type = "gem";
+    };
+    version = "5.0.3";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11v3l46mwnlzlc371wr3x6yylpgafgwdf0q7hc7c1lzx6r414r5g";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  rainbow = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0smwg4mii0fm38pyb5fddbmrdpifwv22zv3d3px2xx497am93503";
+      type = "gem";
+    };
+    version = "3.1.1";
+  };
+  ruby-rc4 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00vci475258mmbvsdqkmqadlwn6gj9m01sp7b5a3zd90knil1k00";
+      type = "gem";
+    };
+    version = "0.1.5";
+  };
+  timers = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pjzipnmzfywvgsr3gxwj6nmg47lz4700g0q71jgcy1z6rb7dn7p";
+      type = "gem";
+    };
+    version = "4.3.5";
+  };
+  ttfunk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15iaxz9iak5643bq2bc0jkbjv8w2zn649lxgvh5wg48q9d4blw13";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m22yrkmbj81rzhlny81j427qdvz57yk5wbcf3km0nf3bl6qiygz";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  yell = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g16kcdhdfvczn7x81jiq6afg3bdxmb73skqjyjlkp5nqcy6y5hx";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mwdd445w63khz13hpv17m2br5xngyjl3jdj08xizjbm78i2zrxd";
+      type = "gem";
+    };
+    version = "2.6.11";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hueadm/default.nix b/nixpkgs/pkgs/tools/misc/hueadm/default.nix
new file mode 100644
index 000000000000..6afa6607129f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hueadm/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "hueadm";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "bahamas10";
+    repo = "hueadm";
+    rev = "v${version}";
+    hash = "sha256-QNjkfE8V/lUkYP8NAf11liKXILBk3wSNm3NSrgaH+nc=";
+  };
+
+  npmDepsHash = "sha256-EbwHbPe8QvT6ekH20q+ihGmwpAHykwkwoJ6vwAf0FlA=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "Command line management interface to Philips Hue";
+    homepage = "https://github.com/bahamas10/hueadm";
+    license = lib.licenses.mit;
+    maintainers = [ ];
+    mainProgram = "hueadm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hunt/default.nix b/nixpkgs/pkgs/tools/misc/hunt/default.nix
new file mode 100644
index 000000000000..2c135e028513
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hunt/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hunt";
+  version = "2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "LyonSyonII";
+    repo = "hunt-rs";
+    rev = "v${version}";
+    sha256 = "sha256-cpqietS/yTI5ONkH4jjIUOVATutd2vj9xmxRbBwmzeI=";
+  };
+
+  cargoHash = "sha256-LWZaU+zHbfiogWXW9XGA3iP95u3qqh2LX9LL2lsQPLg=";
+
+  meta = with lib; {
+    description = "Simplified Find command made with Rust";
+    homepage = "https://github.com/LyonSyonII/hunt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "hunt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hwatch/default.nix b/nixpkgs/pkgs/tools/misc/hwatch/default.nix
new file mode 100644
index 000000000000..6ba928a29d08
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hwatch/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchFromGitHub, rustPlatform, testers, hwatch, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hwatch";
+  version = "0.3.12";
+
+  src = fetchFromGitHub {
+    owner = "blacknon";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-Klv1VIJv4/R7HvvB6H+WxTeJxQYFqAFU3HC6oafD/90=";
+  };
+
+  cargoHash = "sha256-Aos/QP8tLiKFmAZss19jn5h/murZR2jgTYRYalUONHw=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd hwatch \
+      --bash $src/completion/bash/hwatch-completion.bash \
+      --fish $src/completion/fish/hwatch.fish \
+      --zsh $src/completion/zsh/_hwatch \
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = hwatch;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/blacknon/hwatch";
+    description = "Modern alternative to the watch command";
+    longDescription = ''
+      A modern alternative to the watch command, records the differences in
+      execution results and can check this differences at after.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ hamburger1984 ];
+    mainProgram = "hwatch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hyfetch/default.nix b/nixpkgs/pkgs/tools/misc/hyfetch/default.nix
new file mode 100644
index 000000000000..2e906541bda1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hyfetch/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "hyfetch";
+  version = "1.4.11";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "hykilpikonna";
+    repo = "hyfetch";
+    rev = "refs/tags/${version}";
+    hash = "sha256-xzN/tbS5BUvpKeozesE99gNp3NRDjvf4Qx7BHLc4svo=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    typing-extensions
+    setuptools
+  ];
+
+  # No test available
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "hyfetch"
+  ];
+
+  meta = with lib; {
+    description = "neofetch with pride flags <3";
+    longDescription = ''
+      HyFetch is a command-line system information tool fork of neofetch.
+      HyFetch displays information about your system next to your OS logo
+      in ASCII representation. The ASCII representation is then colored in
+      the pattern of the pride flag of your choice. The main purpose of
+      HyFetch is to be used in screenshots to show other users what
+      operating system or distribution you are running, what theme or
+      icon set you are using, etc.
+    '';
+    homepage = "https://github.com/hykilpikonna/HyFetch";
+    license = licenses.mit;
+    mainProgram = "hyfetch";
+    maintainers = with maintainers; [ yisuidenghua ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hyperfine/default.nix b/nixpkgs/pkgs/tools/misc/hyperfine/default.nix
new file mode 100644
index 000000000000..16de5fa76f3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hyperfine/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hyperfine";
+  version = "1.18.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = "hyperfine";
+    rev = "v${version}";
+    hash = "sha256-9YfnCHiG9TDOsEAcrrb0GOxdq39Q+TiltWKwnr3ObAQ=";
+  };
+
+  cargoHash = "sha256-E2y/hQNcpW6b/ZJBlsp+2RDH2OgpX4kbn36aBHA5X6U=";
+
+  nativeBuildInputs = [ installShellFiles ];
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  postInstall = ''
+    installManPage doc/hyperfine.1
+
+    installShellCompletion \
+      $releaseDir/build/hyperfine-*/out/hyperfine.{bash,fish} \
+      --zsh $releaseDir/build/hyperfine-*/out/_hyperfine
+  '';
+
+  meta = with lib; {
+    description = "Command-line benchmarking tool";
+    homepage = "https://github.com/sharkdp/hyperfine";
+    changelog = "https://github.com/sharkdp/hyperfine/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda thoughtpolice ];
+    mainProgram = "hyperfine";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix b/nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix
new file mode 100644
index 000000000000..d1646f92c7ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hyperledger-fabric/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "hyperledger-fabric";
+  version = "2.5.5";
+
+  src = fetchFromGitHub {
+    owner = "hyperledger";
+    repo = "fabric";
+    rev = "v${version}";
+    hash = "sha256-Ev9a+d15kr6apKyGR5xTa/2I3cByyPSTW2Y+HAQk9GU=";
+  };
+
+  vendorHash = null;
+
+  postPatch = ''
+    # Broken
+    rm cmd/peer/main_test.go
+    # Requires network
+    rm cmd/osnadmin/main_test.go
+  '';
+
+  subPackages = [
+    "cmd/configtxgen"
+    "cmd/configtxlator"
+    "cmd/cryptogen"
+    "cmd/discover"
+    "cmd/ledgerutil"
+    "cmd/orderer"
+    "cmd/osnadmin"
+    "cmd/peer"
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/hyperledger/fabric/common/metadata.Version=${version}"
+    "-X github.com/hyperledger/fabric/common/metadata.CommitSha=${src.rev}"
+  ];
+
+  meta = with lib; {
+    description = "High-performance, secure, permissioned blockchain network";
+    longDescription = ''
+      Hyperledger Fabric is an enterprise-grade permissioned distributed ledger
+      framework for developing solutions and applications. Its modular and
+      versatile design satisfies a broad range of industry use cases. It offers
+      a unique approach to consensus that enables performance at scale while
+      preserving privacy.
+    '';
+    homepage = "https://wiki.hyperledger.org/display/fabric";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/hyperpotamus/default.nix b/nixpkgs/pkgs/tools/misc/hyperpotamus/default.nix
new file mode 100644
index 000000000000..869b8aea9143
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/hyperpotamus/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "hyperpotamus";
+  version = "0.39.0";
+
+  src = fetchFromGitHub {
+    owner = "pmarkert";
+    repo = "hyperpotamus";
+    rev = "v${version}";
+    hash = "sha256-dExkvObz+PNjqAZnigZHs/DCSHq31jDg9pgFmmtPmWk=";
+  };
+
+  npmDepsHash = "sha256-cH0VEhs4q13gnFKQmmu8fXjueBu/u7xtySE6HTm+bik=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    description = "YAML based HTTP script processing engine";
+    homepage = "https://github.com/pmarkert/hyperpotamus";
+    license = lib.licenses.mit;
+    mainProgram = "hyperpotamus";
+    maintainers = with lib.maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/i3minator/default.nix b/nixpkgs/pkgs/tools/misc/i3minator/default.nix
new file mode 100644
index 000000000000..d56ee6eadc7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/i3minator/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, python3Packages, glibcLocales }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "i3minator";
+  version = "0.0.4";
+
+  src = fetchFromGitHub {
+    owner = "carlesso";
+    repo = "i3minator";
+    rev = version;
+    sha256 = "07dic5d2m0zw0psginpl43xn0mpxw7wilj49d02knz69f7c416lm";
+  };
+
+  LC_ALL = "en_US.UTF-8";
+  buildInputs = [ glibcLocales ];
+  propagatedBuildInputs = [ python3Packages.pyyaml python3Packages.i3-py ];
+
+  # No tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "i3 project manager similar to tmuxinator";
+    mainProgram = "i3minator";
+    longDescription = ''
+      A simple "workspace manager" for i3. It allows to quickly
+      manage workspaces defining windows and their layout. The
+      project is inspired by tmuxinator and uses i3-py.
+    '';
+    homepage = "https://github.com/carlesso/i3minator";
+    license = lib.licenses.wtfpl;
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = lib.platforms.linux;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/i3nator/default.nix b/nixpkgs/pkgs/tools/misc/i3nator/default.nix
new file mode 100644
index 000000000000..4c62e4ca8050
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/i3nator/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "i3nator";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "pitkley";
+    repo = pname;
+    rev = version;
+    sha256 = "10rxvxq48dhzlw5p9fsj6x0ci4pap85s9b192zakgvk4h97ifp2p";
+  };
+
+  cargoSha256 = "04sx1dsznvh60s2yd9bzbvj6fgjvj37vv33qpww13fyph832i37g";
+
+  meta = with lib; {
+    description = "Tmuxinator for the i3 window manager";
+    homepage = "https://github.com/pitkley/i3nator";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ mpoquet ];
+    mainProgram = "i3nator";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/iam-policy-json-to-terraform/default.nix b/nixpkgs/pkgs/tools/misc/iam-policy-json-to-terraform/default.nix
new file mode 100644
index 000000000000..a015f3dabfac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/iam-policy-json-to-terraform/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "iam-policy-json-to-terraform";
+  version = "1.8.2";
+
+  src = fetchFromGitHub {
+    owner = "flosell";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ovmWZpeHt1L8zNzG7+2BohteSjpYADMivi+AP0Vm8/E=";
+  };
+
+  vendorHash = "sha256-1WTc7peTJI3IvHJqznqRz29uQ2NG0CZpAAzlyYymZCQ=";
+
+  meta = with lib; {
+    description = "Small tool to convert an IAM Policy in JSON format into a Terraform aws_iam_policy_document ";
+    homepage = "https://github.com/flosell/iam-policy-json-to-terraform";
+    changelog = "https://github.com/flosell/iam-policy-json-to-terraform/releases/tag/${version}";
+    license = licenses.asl20;
+    maintainers = [ maintainers.ivankovnatsky ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/iay/default.nix b/nixpkgs/pkgs/tools/misc/iay/default.nix
new file mode 100644
index 000000000000..1ef3d332e75d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/iay/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, openssl
+, pkg-config
+, AppKit
+, Cocoa
+, Foundation
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "iay";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "aaqaishtyaq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vk+1RbAmzRf2bbvbSpO+upVW4VrtYWM+5iiH73N+dsc=";
+  };
+
+  cargoHash = "sha256-+PpmxVPyRx/xF7jQGy/07xqALmdNp2uL3HZVOeRicqY=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    openssl
+  ]
+  ++ lib.optionals stdenv.isDarwin [
+    AppKit
+    Cocoa
+    Foundation
+    Security
+  ];
+
+  NIX_LDFLAGS = lib.optionals stdenv.isDarwin [ "-framework" "AppKit" ];
+
+  meta = with lib; {
+    description = "Minimalistic, blazing-fast, and extendable prompt for bash and zsh";
+    homepage = "https://github.com/aaqaishtyaq/iay";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aaqaishtyaq omasanori ];
+    mainProgram = "iay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ibus-theme-tools/default.nix b/nixpkgs/pkgs/tools/misc/ibus-theme-tools/default.nix
new file mode 100644
index 000000000000..05c56edd3697
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ibus-theme-tools/default.nix
@@ -0,0 +1,30 @@
+{ lib, python3Packages, fetchFromGitHub, gettext }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ibus-theme-tools";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "openSUSE";
+    repo = "IBus-Theme-Tools";
+    rev = "v${version}";
+    sha256 = "0i8vwnikwd1bfpv4xlgzc51gn6s18q58nqhvcdiyjzcmy3z344c2";
+  };
+
+  buildInputs = [ gettext ];
+
+  propagatedBuildInputs = with python3Packages; [ tinycss2 pygobject3 ];
+
+  # No test.
+  doCheck = false;
+
+  pythonImportsCheck = [ "ibus_theme_tools" ];
+
+  meta = with lib; {
+    description = "Generate the IBus GTK or GNOME Shell theme from existing themes";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ hollowman6 ];
+    homepage = "https://github.com/openSUSE/IBus-Theme-Tools";
+    mainProgram = "ibus-theme-tools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ical2orgpy/default.nix b/nixpkgs/pkgs/tools/misc/ical2orgpy/default.nix
new file mode 100644
index 000000000000..ac5607b4a819
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ical2orgpy/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ical2orgpy";
+  version = "0.5";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "ical2org-py";
+    repo = "ical2org.py";
+    rev = version;
+    hash = "sha256-vBi1WYXMuDFS/PnwFQ/fqN5+gIvtylXidfZklyd6LcI=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    future
+    icalendar
+    pytz
+    tzlocal
+    recurring-ical-events
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    freezegun
+    pytestCheckHook
+    pyyaml
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/ical2org-py/ical2org.py/blob/${src.rev}/CHANGELOG.rst";
+    description = "Converting ICAL file into org-mode format";
+    homepage = "https://github.com/ical2org-py/ical2org.py";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ StillerHarpo ];
+    mainProgram = "ical2orgpy";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/ictree/default.nix b/nixpkgs/pkgs/tools/misc/ictree/default.nix
new file mode 100644
index 000000000000..c8ffdc090c20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ictree/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ictree";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "NikitaIvanovV";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-77Wo6jN8VUGTXBuGL0a9kvSIixdyEQoxqqNsHq9jcWw=";
+    fetchSubmodules = true;
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Like tree but interactive";
+    homepage = "https://github.com/NikitaIvanovV/ictree";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ foo-dogsquared ];
+    mainProgram = "ictree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix b/nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix
new file mode 100644
index 000000000000..3071aab6d101
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ideviceinstaller/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, usbmuxd
+, libimobiledevice
+, libzip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ideviceinstaller";
+  version = "1.1.1+date=2023-04-30";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "71ec5eaa30d2780c2614b6b227a2229ea3aeb1e9";
+    hash = "sha256-YsQwAlt71vouYJzXl0P7b3fG/MfcwI947GtvN4g3/gM=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    usbmuxd
+    libimobiledevice
+    libzip
+  ];
+
+  # the package uses zip_get_num_entries, which is deprecated
+  env.NIX_CFLAGS_COMPILE = toString [
+    "-Wno-error=deprecated-declarations"
+  ];
+
+  preAutoreconf = ''
+    export RELEASE_VERSION=${version}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/libimobiledevice/ideviceinstaller";
+    description = "List/modify installed apps of iOS devices";
+    longDescription = ''
+      ideviceinstaller is a tool to interact with the installation_proxy
+      of an iOS device allowing to install, upgrade, uninstall, archive, restore
+      and enumerate installed or archived apps.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ aristid ];
+    mainProgram = "ideviceinstaller";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/idevicerestore/default.nix b/nixpkgs/pkgs/tools/misc/idevicerestore/default.nix
new file mode 100644
index 000000000000..55fa9fcda8ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/idevicerestore/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, curl
+, libimobiledevice
+, libirecovery
+, libzip
+, libusbmuxd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "idevicerestore";
+  version = "1.0.0+date=2023-05-23";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "609f7f058487596597e8e742088119fdd46729df";
+    hash = "sha256-VXtXAitPC1+pxZlkGBg+u6yYhyM/jVpSgDO/6dXh5V4=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl
+    libimobiledevice
+    libirecovery
+    libzip
+    libusbmuxd
+    # Not listing other dependencies specified in
+    # https://github.com/libimobiledevice/idevicerestore/blob/8a882038b2b1e022fbd19eaf8bea51006a373c06/README#L20
+    # because they are inherited `libimobiledevice`.
+  ];
+
+  preAutoreconf = ''
+    export RELEASE_VERSION=${version}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/libimobiledevice/idevicerestore";
+    description = "Restore/upgrade firmware of iOS devices";
+    longDescription = ''
+      The idevicerestore tool allows to restore firmware files to iOS devices.
+
+      It is a full reimplementation of all granular steps which are performed during
+      restore of a firmware to a device.
+
+      In general, upgrades and downgrades are possible, however subject to
+      availability of SHSH blobs from Apple for signing the firmare files.
+
+      To restore a device to some firmware, simply run the following:
+      $ sudo idevicerestore -l
+
+      This will download and restore a device to the latest firmware available.
+    '';
+    license = licenses.lgpl21Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ nh2 ];
+    mainProgram = "idevicerestore";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/idutils/default.nix b/nixpkgs/pkgs/tools/misc/idutils/default.nix
new file mode 100644
index 000000000000..cbdf1b761049
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/idutils/default.nix
@@ -0,0 +1,61 @@
+{ fetchurl, lib, stdenv, emacs, gnulib, autoconf, bison, automake, gettext, gperf, texinfo, perl, rsync, darwin }:
+
+stdenv.mkDerivation rec {
+  pname = "idutils";
+  version = "4.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/idutils/idutils-${version}.tar.xz";
+    sha256 = "1hmai3422iaqnp34kkzxdnywl7n7pvlxp11vrw66ybxn9wxg90c1";
+  };
+
+  preConfigure = ''
+    # replace embedded gnulib tests with those from gnulib package
+    bash -O extglob -c "cd gnulib-tests; rm -r !(Makefile.am)"
+    substituteInPlace ./configure.ac --replace "AC_PREREQ(2.61)" "AC_PREREQ(2.64)"
+    ./bootstrap --force --gnulib-srcdir=${gnulib} --skip-po --bootstrap-sync --no-git
+    '';
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    emacs
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  nativeBuildInputs = [ gnulib autoconf bison automake gettext gperf texinfo perl rsync ];
+
+  doCheck = !stdenv.isDarwin;
+
+  patches = [ ./nix-mapping.patch ];
+
+  meta = with lib; {
+    description = "Text searching utility";
+
+    longDescription = ''
+      An "ID database" is a binary file containing a list of file
+      names, a list of tokens, and a sparse matrix indicating which
+      tokens appear in which files.
+
+      With this database and some tools to query it, many
+      text-searching tasks become simpler and faster.  For example,
+      you can list all files that reference a particular `\#include'
+      file throughout a huge source hierarchy, search for all the
+      memos containing references to a project, or automatically
+      invoke an editor on all files containing references to some
+      function or variable.  Anyone with a large software project to
+      maintain, or a large set of text files to organize, can benefit
+      from the ID utilities.
+
+      Although the name `ID' is short for `identifier', the ID
+      utilities handle more than just identifiers; they also treat
+      other kinds of tokens, most notably numeric constants, and the
+      contents of certain character strings.
+    '';
+
+    homepage = "https://www.gnu.org/software/idutils/";
+    license = licenses.gpl3Plus;
+
+    maintainers = with maintainers; [ gfrascadorio ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch b/nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch
new file mode 100644
index 000000000000..6f92ffa07b52
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/idutils/nix-mapping.patch
@@ -0,0 +1,12 @@
+Recognize `.nix' files as text files.
+
+--- idutils-4.5/libidu/id-lang.map	2009-05-17 16:38:42.000000000 +0200
++++ idutils-4.5/libidu/id-lang.map	2010-07-04 15:52:48.000000000 +0200
+@@ -88,6 +88,7 @@ GNUmakefile		make
+ *.doc			text
+ *.txt			text
+ *.org			text
++*.nix			text
+ 
+ *.m4			m4
+ *.ac			m4
diff --git a/nixpkgs/pkgs/tools/misc/ikill/default.nix b/nixpkgs/pkgs/tools/misc/ikill/default.nix
new file mode 100644
index 000000000000..b5c18e5dfd97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ikill/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ikill";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "pjmp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hOQBBwxkVnTkAZJi84qArwAo54fMC0zS+IeYMV04kUs=";
+  };
+
+  cargoSha256 = "sha256-zKa2FP0lBS2XjgPWfyPZ60aHyeAe0uNIFbmuX4Uo1rA=";
+
+  meta = with lib; {
+    description = "Interactively kill running processes";
+    homepage = "https://github.com/pjmp/ikill";
+    maintainers = with maintainers; [ zendo ];
+    license = [ licenses.mit ];
+    platforms = platforms.linux;
+    mainProgram = "ikill";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ili2c/default.nix b/nixpkgs/pkgs/tools/misc/ili2c/default.nix
new file mode 100644
index 000000000000..d4ac13046377
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ili2c/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, ant
+, jdk8
+, jre8
+, makeWrapper
+, stripJavaArchivesHook
+}:
+
+let
+  jdk = jdk8;
+  jre = jre8;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ili2c";
+  version = "5.1.1"; # There are newer versions, but they use gradle
+
+  nativeBuildInputs = [
+    ant
+    jdk
+    makeWrapper
+    stripJavaArchivesHook
+  ];
+
+  src = fetchFromGitHub {
+    owner = "claeis";
+    repo = "ili2c";
+    rev = "ili2c-${finalAttrs.version}";
+    hash = "sha256-FHhx+f253+UdbFjd2fOlUY1tpQ6pA2aVu9CBSwUVoKQ=";
+  };
+
+  patches = [
+    # avoids modifying Version.properties file because that would insert the current timestamp into the file
+    ./dont-use-build-timestamp.patch
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    ant jar
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm644 build/jar/ili2c.jar -t $out/share/ili2c
+    makeWrapper ${jre}/bin/java $out/bin/ili2c \
+        --add-flags "-jar $out/share/ili2c/ili2c.jar"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "The INTERLIS Compiler";
+    longDescription = ''
+      Checks the syntactical correctness of an INTERLIS data model.
+    '';
+    homepage = "https://www.interlis.ch/downloads/ili2c";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode # source bundles dependencies as jars
+    ];
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; teams.geospatial.members ++ [ das-g ];
+    platforms = platforms.linux;
+    mainProgram = "ili2c";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/ili2c/dont-use-build-timestamp.patch b/nixpkgs/pkgs/tools/misc/ili2c/dont-use-build-timestamp.patch
new file mode 100644
index 000000000000..e3388c54ab53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ili2c/dont-use-build-timestamp.patch
@@ -0,0 +1,29 @@
+diff --git a/build.xml b/build.xml
+index d0493d8..50d4286 100644
+--- a/build.xml
++++ b/build.xml
+@@ -221,11 +221,6 @@
+     </jar>
+   </target>
+   <target depends="init,compile-core,copyres" name="jar-core">
+-    <propertyfile file="${versionfile}">
+-	<!-- <entry  key="versionMicro" type="int" value="1" operation="+"/> -->
+-	<entry  key="versionDate" type="date" value="now" pattern="yyyyMMdd"/>
+-    </propertyfile>
+-
+     <jar jarfile="${build}/jar/${ant.project.name}-core.jar">
+ 	<!-- fileset dir="${build}/classes" excludes="ch/interlis/ili2c/tests/**/*.class" includes="ch/interlis/models/**/*.class,ch/interlis/ili2c/parser/**/*.class,ch/interlis/ili2c/generator/**/*.class,ch/interlis/ili2c/modelscan/**/*.class,ch/interlis/ili2c/metamodel/**/*.class,ch/interlis/ili2c/config/**/*.class,ch/interlis/ili2c/CompilerLogEvent.class,ch/interlis/ili2c/Ili2cException.class,ch/interlis/ili2c/Ili2cFailure.class,ch/interlis/ili2c/gui/UserSettings.class,ch/interlis/ilirepository/ReposManager.class,ch/interlis/ilirepository/impl/RepositoryAccessException.class,ch/interlis/ilirepository/Dataset.class"/--> 
+ 	<fileset dir="${build}/classes-core" excludes="ch/interlis/ili2c/tests/**/*.class" />
+diff --git a/src-core/ch/interlis/ili2c/metamodel/TransferDescription.java b/src-core/ch/interlis/ili2c/metamodel/TransferDescription.java
+index 9e165af..86d8f89 100644
+--- a/src-core/ch/interlis/ili2c/metamodel/TransferDescription.java
++++ b/src-core/ch/interlis/ili2c/metamodel/TransferDescription.java
+@@ -219,7 +219,7 @@ public static final String MIMETYPE_XTF = "application/interlis+xml;version=2.3"
+       ret.append(branch);
+       ret.append('-');
+       }
+-      ret.append(resVersion.getString("versionDate"));
++      ret.append("nixpkgs");
+       version = ret.toString();
+   }
+   return version;
diff --git a/nixpkgs/pkgs/tools/misc/immich-cli/default.nix b/nixpkgs/pkgs/tools/misc/immich-cli/default.nix
new file mode 100644
index 000000000000..82d8e96ec798
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/immich-cli/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage {
+  pname = "immich-cli";
+  version = "2.0.6";
+
+  src = fetchFromGitHub {
+    owner = "immich-app";
+    repo = "immich";
+    # Using a fixed commit until upstream has release tags for cli.
+    rev = "014adf175ad50a61f92804666940e267ab329064";
+    hash = "sha256-MK3Watq5/Zp+rymCIfWxAXSgBPDE13g23uDnW7A5x9g=";
+  };
+
+  npmDepsHash = "sha256-ssxOXKE1t/bSb972w/cBeK61IrqPLmx9ODMn6D+2Ezw=";
+
+  postPatch = ''
+    cd cli
+  '';
+
+  meta = {
+    description = "CLI utilities for Immich to help upload images and videos";
+    homepage = "https://github.com/immich-app/immich";
+    license = lib.licenses.mit;
+    mainProgram = "immich";
+    maintainers = with lib.maintainers; [ felschr pineapplehunter ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/inav-blackbox-tools/default.nix b/nixpkgs/pkgs/tools/misc/inav-blackbox-tools/default.nix
new file mode 100644
index 000000000000..43524f6a3fe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inav-blackbox-tools/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, cairo }:
+
+stdenv.mkDerivation rec {
+  pname = "inav-blackbox-tools";
+  version = "unstable-2021-04-22";
+
+  src = fetchFromGitHub {
+    owner = "iNavFlight";
+    repo = "blackbox-tools";
+    rev = "0109e2fb9b44d593e60bca4cef4098d83c55c373";
+    sha256 = "1rdlw74dqq0hahnka2w2pgvs172vway2x6v8byxl2s773l22k4ln";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ cairo ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    cp obj/{blackbox_decode,blackbox_render,encoder_testbed} "$out/bin"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tools for working with blackbox flight logs";
+    homepage = "https://github.com/inavflight/blackbox-tools";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ expipiplus1 ];
+    platforms = platforms.all;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/inav-blackbox-tools.x86_64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/infracost/default.nix b/nixpkgs/pkgs/tools/misc/infracost/default.nix
new file mode 100644
index 000000000000..ddec6c3c5d89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/infracost/default.nix
@@ -0,0 +1,68 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "infracost";
+  version = "0.10.33";
+
+  src = fetchFromGitHub {
+    owner = "infracost";
+    rev = "v${version}";
+    repo = "infracost";
+    sha256 = "sha256-zIAf6lD9XFmrAgvVmIY+tXLn4FmkkdimjVCWasK7OCc=";
+  };
+  vendorHash = "sha256-ji9TpUcq0aUAn5vV5dnaC15i0Uli2Qsz/BrOKB3/Rl4=";
+
+  ldflags = [ "-s" "-w" "-X github.com/infracost/infracost/internal/version.Version=v${version}" ];
+
+  subPackages = [ "cmd/infracost" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preCheck = ''
+    # Feed in all tests for testing
+    # This is because subPackages above limits what is built to just what we
+    # want but also limits the tests
+    unset subPackages
+
+    # checkFlags aren't correctly passed through via buildGoModule so we use buildFlagsArray
+    # -short only runs the unit-tests tagged short
+    # move to checkFlags after https://github.com/NixOS/nixpkgs/pull/173702
+    buildFlagsArray+="-short"
+
+    # remove tests that require networking
+    rm cmd/infracost/{breakdown,diff,hcl,run}_test.go
+  '';
+
+  postInstall = ''
+    export INFRACOST_SKIP_UPDATE_CHECK=true
+    installShellCompletion --cmd infracost \
+      --bash <($out/bin/infracost completion --shell bash) \
+      --fish <($out/bin/infracost completion --shell fish) \
+      --zsh <($out/bin/infracost completion --shell zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    export INFRACOST_SKIP_UPDATE_CHECK=true
+    $out/bin/infracost --help
+    $out/bin/infracost --version | grep "v${version}"
+
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://infracost.io";
+    changelog = "https://github.com/infracost/infracost/releases/tag/v${version}";
+    description = "Cloud cost estimates for Terraform in your CLI and pull requests";
+    longDescription = ''
+      Infracost shows hourly and monthly cost estimates for a Terraform project.
+      This helps developers, DevOps et al. quickly see the cost breakdown and
+      compare different deployment options upfront.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ davegallant jk kashw2 ];
+    mainProgram = "infracost";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ink/default.nix b/nixpkgs/pkgs/tools/misc/ink/default.nix
new file mode 100644
index 000000000000..30df6e9691fa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ink/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, libinklevel }:
+
+stdenv.mkDerivation rec {
+  pname = "ink";
+  version = "0.5.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1fk0b8vic04a3i3vmq73hbk7mzbi57s8ks6ighn3mvr6m2v8yc9d";
+  };
+
+  buildInputs = [
+    libinklevel
+  ];
+
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
+    description = "A command line tool for checking the ink level of your locally connected printer";
+    longDescription = ''
+      Ink is a command line tool for checking the ink level of your locally connected printer on a system which runs Linux or FreeBSD. Canon BJNP network printers are supported too.
+    '';
+    homepage = "https://ink.sourceforge.net/";
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ platforms.freebsd;
+    maintainers = with maintainers; [ samb96 ];
+    mainProgram = "ink";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/inklingreader/default.nix b/nixpkgs/pkgs/tools/misc/inklingreader/default.nix
new file mode 100644
index 000000000000..efe1eeb34aeb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inklingreader/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, gtk3
+, librsvg
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "inklingreader";
+  version = "unstable-2017-09-07";
+
+  src = fetchFromGitHub {
+    owner = "roelj";
+    repo = "inklingreader";
+    rev = "90f9d0d7f5353657f4d25fd75635e29c10c08d2e";
+    sha256 = "sha256-852m8g61r+NQhCYz9ghSbCG0sjao2E8B9GS06NG4GyY=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+  buildInputs = [
+    gtk3
+    librsvg
+    libusb1
+  ];
+
+  meta = {
+    homepage = "https://github.com/roelj/inklingreader";
+    description = "A GNU/Linux-friendly version of the Wacom Inkling SketchManager";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ totoroot ];
+    platforms = lib.platforms.linux;
+    mainProgram = "inklingreader";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/inspec/Gemfile b/nixpkgs/pkgs/tools/misc/inspec/Gemfile
new file mode 100644
index 000000000000..b1627ca5e5d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inspec/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+gem "inspec"
+gem "inspec-bin"
diff --git a/nixpkgs/pkgs/tools/misc/inspec/Gemfile.lock b/nixpkgs/pkgs/tools/misc/inspec/Gemfile.lock
new file mode 100644
index 000000000000..503207134db0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inspec/Gemfile.lock
@@ -0,0 +1,643 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.0.4.3)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    addressable (2.8.4)
+      public_suffix (>= 2.0.2, < 6.0)
+    ast (2.4.2)
+    aws-eventstream (1.2.0)
+    aws-partitions (1.749.0)
+    aws-sdk-alexaforbusiness (1.58.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-amplify (1.32.0)
+      aws-sdk-core (~> 3, >= 3.120.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-apigateway (1.81.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-apigatewayv2 (1.44.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-applicationautoscaling (1.51.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-athena (1.64.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-autoscaling (1.63.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-batch (1.47.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-budgets (1.52.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudformation (1.77.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudfront (1.76.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudhsm (1.41.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudhsmv2 (1.44.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudtrail (1.58.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudwatch (1.72.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudwatchevents (1.46.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cloudwatchlogs (1.62.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-codecommit (1.53.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-codedeploy (1.52.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-codepipeline (1.55.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cognitoidentity (1.31.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-cognitoidentityprovider (1.53.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-configservice (1.89.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-core (3.171.0)
+      aws-eventstream (~> 1, >= 1.0.2)
+      aws-partitions (~> 1, >= 1.651.0)
+      aws-sigv4 (~> 1.5)
+      jmespath (~> 1, >= 1.6.1)
+    aws-sdk-costandusagereportservice (1.43.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-databasemigrationservice (1.53.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-dynamodb (1.84.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ec2 (1.375.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ecr (1.58.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ecrpublic (1.16.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ecs (1.114.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-efs (1.59.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-eks (1.83.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticache (1.84.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticbeanstalk (1.54.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticloadbalancing (1.42.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticloadbalancingv2 (1.84.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-elasticsearchservice (1.69.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-emr (1.53.0)
+      aws-sdk-core (~> 3, >= 3.121.2)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-eventbridge (1.24.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-firehose (1.51.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-glue (1.88.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-guardduty (1.67.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-iam (1.77.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kafka (1.54.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kinesis (1.45.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-kms (1.63.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-lambda (1.95.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-mq (1.40.0)
+      aws-sdk-core (~> 3, >= 3.120.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-networkfirewall (1.26.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-networkmanager (1.30.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-organizations (1.59.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ram (1.26.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-rds (1.176.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-redshift (1.91.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-route53 (1.71.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-route53domains (1.43.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-route53resolver (1.40.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-s3 (1.120.1)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sdk-kms (~> 1)
+      aws-sigv4 (~> 1.4)
+    aws-sdk-s3control (1.43.0)
+      aws-sdk-core (~> 3, >= 3.122.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-secretsmanager (1.46.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-securityhub (1.79.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-servicecatalog (1.60.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ses (1.41.0)
+      aws-sdk-core (~> 3, >= 3.120.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-shield (1.51.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-signer (1.32.0)
+      aws-sdk-core (~> 3, >= 3.120.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-simpledb (1.29.0)
+      aws-sdk-core (~> 3, >= 3.120.0)
+      aws-sigv2 (~> 1.0)
+    aws-sdk-sms (1.43.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-sns (1.60.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-sqs (1.53.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-ssm (1.150.0)
+      aws-sdk-core (~> 3, >= 3.165.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-states (1.39.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-synthetics (1.19.0)
+      aws-sdk-core (~> 3, >= 3.121.2)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-transfer (1.34.0)
+      aws-sdk-core (~> 3, >= 3.112.0)
+      aws-sigv4 (~> 1.1)
+    aws-sdk-waf (1.43.0)
+      aws-sdk-core (~> 3, >= 3.122.0)
+      aws-sigv4 (~> 1.1)
+    aws-sigv2 (1.1.0)
+    aws-sigv4 (1.5.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.2)
+      ms_rest_azure (~> 0.12.0)
+    azure_mgmt_security (0.19.0)
+      ms_rest_azure (~> 0.12.0)
+    azure_mgmt_storage (0.23.0)
+      ms_rest_azure (~> 0.12.0)
+    bson (4.15.0)
+    builder (3.2.4)
+    chef-config (18.2.7)
+      addressable
+      chef-utils (= 18.2.7)
+      fuzzyurl
+      mixlib-config (>= 2.2.12, < 4.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      tomlrb (~> 1.2)
+    chef-telemetry (1.1.1)
+      chef-config
+      concurrent-ruby (~> 1.0)
+    chef-utils (18.2.7)
+      concurrent-ruby
+    coderay (1.1.3)
+    concurrent-ruby (1.2.2)
+    cookstyle (7.32.2)
+      rubocop (= 1.25.1)
+    declarative (0.0.20)
+    diff-lcs (1.5.0)
+    docker-api (2.2.0)
+      excon (>= 0.47.0)
+      multi_json
+    domain_name (0.5.20190701)
+      unf (>= 0.0.5, < 1.0.0)
+    erubi (1.12.0)
+    excon (0.99.0)
+    faraday (1.10.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-cookie_jar (0.0.7)
+      faraday (>= 0.8.0)
+      http-cookie (~> 1.0.0)
+    faraday-em_http (1.0.0)
+    faraday-em_synchrony (1.0.0)
+    faraday-excon (1.1.0)
+    faraday-follow_redirects (0.3.0)
+      faraday (>= 1, < 3)
+    faraday-httpclient (1.0.1)
+    faraday-multipart (1.0.4)
+      multipart-post (~> 2)
+    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)
+    faraday_middleware (1.0.0)
+      faraday (~> 1.0)
+    ffi (1.15.5)
+    fuzzyurl (0.9.0)
+    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.4.0)
+      builder (>= 2.1.2)
+      rexml (~> 3.0)
+    hashie (4.1.0)
+    highline (2.1.0)
+    http-cookie (1.0.5)
+      domain_name (~> 0.5)
+    httpclient (2.8.3)
+    i18n (1.12.0)
+      concurrent-ruby (~> 1.0)
+    inifile (3.0.0)
+    inspec (5.21.29)
+      cookstyle
+      faraday_middleware (>= 0.12.2, < 1.1)
+      inspec-core (= 5.21.29)
+      mongo (= 2.13.2)
+      progress_bar (~> 1.3.3)
+      rake
+      train (~> 3.10)
+      train-aws (~> 0.2)
+      train-habitat (~> 0.1)
+      train-winrm (~> 0.2)
+    inspec-bin (5.21.29)
+      inspec (= 5.21.29)
+    inspec-core (5.21.29)
+      addressable (~> 2.4)
+      chef-telemetry (~> 1.0, >= 1.0.8)
+      faraday (>= 1, < 3)
+      faraday-follow_redirects (~> 0.3)
+      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.10)
+      tty-prompt (~> 0.17)
+      tty-table (~> 0.10)
+    jmespath (1.6.2)
+    json (2.6.3)
+    jwt (2.7.0)
+    license-acceptance (2.1.13)
+      pastel (~> 0.7)
+      tomlrb (>= 1.2, < 3.0)
+      tty-box (~> 0.6)
+      tty-prompt (~> 0.20)
+    little-plugger (1.1.4)
+    logging (2.3.1)
+      little-plugger (~> 1.1)
+      multi_json (~> 1.14)
+    memoist (0.16.2)
+    method_source (1.0.0)
+    mini_mime (1.1.2)
+    minitest (5.18.0)
+    mixlib-config (3.0.27)
+      tomlrb
+    mixlib-log (3.0.9)
+    mixlib-shellout (3.2.7)
+      chef-utils
+    mongo (2.13.2)
+      bson (>= 4.8.2, < 5.0.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.3.0)
+    net-scp (4.0.0)
+      net-ssh (>= 2.6.5, < 8.0.0)
+    net-ssh (7.1.0)
+    nori (2.6.0)
+    options (2.3.2)
+    os (1.1.4)
+    parallel (1.23.0)
+    parser (3.2.2.0)
+      ast (~> 2.4.1)
+    parslet (1.8.2)
+    pastel (0.8.0)
+      tty-color (~> 0.5)
+    progress_bar (1.3.3)
+      highline (>= 1.6, < 3)
+      options (~> 2.3.0)
+    pry (0.14.2)
+      coderay (~> 1.1)
+      method_source (~> 1.0)
+    public_suffix (5.0.1)
+    rainbow (3.1.1)
+    rake (13.0.6)
+    regexp_parser (2.8.0)
+    representable (3.2.0)
+      declarative (< 0.1.0)
+      trailblazer-option (>= 0.1.1, < 0.2.0)
+      uber (< 0.2.0)
+    retriable (3.1.2)
+    rexml (3.2.5)
+    rspec (3.11.0)
+      rspec-core (~> 3.11.0)
+      rspec-expectations (~> 3.11.0)
+      rspec-mocks (~> 3.11.0)
+    rspec-core (3.11.0)
+      rspec-support (~> 3.11.0)
+    rspec-expectations (3.11.1)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.11.0)
+    rspec-its (1.3.0)
+      rspec-core (>= 3.0.0)
+      rspec-expectations (>= 3.0.0)
+    rspec-mocks (3.11.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.11.0)
+    rspec-support (3.11.1)
+    rubocop (1.25.1)
+      parallel (~> 1.10)
+      parser (>= 3.1.0.0)
+      rainbow (>= 2.2.2, < 4.0)
+      regexp_parser (>= 1.8, < 3.0)
+      rexml
+      rubocop-ast (>= 1.15.1, < 2.0)
+      ruby-progressbar (~> 1.7)
+      unicode-display_width (>= 1.4.0, < 3.0)
+    rubocop-ast (1.28.0)
+      parser (>= 3.2.1.0)
+    ruby-progressbar (1.13.0)
+    ruby2_keywords (0.0.5)
+    rubyntlm (0.6.3)
+    rubyzip (2.3.2)
+    semverse (3.0.2)
+    signet (0.17.0)
+      addressable (~> 2.8)
+      faraday (>= 0.17.5, < 3.a)
+      jwt (>= 1.5, < 3.0)
+      multi_json (~> 1.10)
+    sslshake (1.3.1)
+    strings (0.2.1)
+      strings-ansi (~> 0.2)
+      unicode-display_width (>= 1.5, < 3.0)
+      unicode_utils (~> 1.4)
+    strings-ansi (0.2.0)
+    thor (1.2.1)
+    timeliness (0.3.10)
+    tomlrb (1.3.0)
+    trailblazer-option (0.1.2)
+    train (3.10.7)
+      activesupport (>= 6.0.3.1)
+      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.10.7)
+      train-winrm (~> 0.2)
+    train-aws (0.2.24)
+      aws-sdk-alexaforbusiness (~> 1.0)
+      aws-sdk-amplify (~> 1.32.0)
+      aws-sdk-apigateway (~> 1.0)
+      aws-sdk-apigatewayv2 (~> 1.0)
+      aws-sdk-applicationautoscaling (>= 1.46, < 1.52)
+      aws-sdk-athena (~> 1.0)
+      aws-sdk-autoscaling (>= 1.22, < 1.64)
+      aws-sdk-batch (>= 1.36, < 1.48)
+      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.47)
+      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.32)
+      aws-sdk-cognitoidentityprovider (>= 1.46, < 1.54)
+      aws-sdk-configservice (~> 1.21)
+      aws-sdk-core (~> 3.0)
+      aws-sdk-costandusagereportservice (~> 1.6)
+      aws-sdk-databasemigrationservice (>= 1.42, < 1.54)
+      aws-sdk-dynamodb (~> 1.31)
+      aws-sdk-ec2 (~> 1.70)
+      aws-sdk-ecr (~> 1.18)
+      aws-sdk-ecrpublic (~> 1.3)
+      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-emr (~> 1.53.0)
+      aws-sdk-eventbridge (~> 1.24.0)
+      aws-sdk-firehose (~> 1.0)
+      aws-sdk-glue (>= 1.71, < 1.89)
+      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-mq (~> 1.40.0)
+      aws-sdk-networkfirewall (>= 1.6.0)
+      aws-sdk-networkmanager (>= 1.13.0)
+      aws-sdk-organizations (>= 1.17, < 1.60)
+      aws-sdk-ram (>= 1.21, < 1.27)
+      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-s3control (~> 1.43.0)
+      aws-sdk-secretsmanager (>= 1.42, < 1.47)
+      aws-sdk-securityhub (~> 1.0)
+      aws-sdk-servicecatalog (>= 1.48, < 1.61)
+      aws-sdk-ses (~> 1.41.0)
+      aws-sdk-shield (~> 1.30)
+      aws-sdk-signer (~> 1.32.0)
+      aws-sdk-simpledb (~> 1.29.0)
+      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.40)
+      aws-sdk-synthetics (~> 1.19.0)
+      aws-sdk-transfer (>= 1.26, < 1.35)
+      aws-sdk-waf (~> 1.43.0)
+    train-core (3.10.7)
+      addressable (~> 2.5)
+      ffi (!= 1.13.0)
+      json (>= 1.8, < 3.0)
+      mixlib-shellout (>= 2.0, < 4.0)
+      net-scp (>= 1.2, < 5.0)
+      net-ssh (>= 2.9, < 8.0)
+    train-habitat (0.2.22)
+    train-winrm (0.2.13)
+      winrm (>= 2.3.6, < 3.0)
+      winrm-elevated (~> 1.2.2)
+      winrm-fs (~> 1.0)
+    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.1)
+      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 (2.0.6)
+      concurrent-ruby (~> 1.0)
+    uber (0.1.0)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.8.2)
+    unicode-display_width (2.4.2)
+    unicode_utils (1.4.0)
+    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)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  inspec!
+  inspec-bin!
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/inspec/default.nix b/nixpkgs/pkgs/tools/misc/inspec/default.nix
new file mode 100644
index 000000000000..759b1fcaed87
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inspec/default.nix
@@ -0,0 +1,20 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "inspec";
+  gemdir = ./.;
+
+  inherit ruby;
+
+  exes = ["inspec"];
+
+  passthru.updateScript = bundlerUpdateScript "inspec";
+
+  meta = with lib; {
+    description = "Inspec is an open-source testing framework for infrastructure with a human- and machine-readable language for specifying compliance, security and policy requirements";
+    homepage = "https://inspec.io/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dylanmtaylor ];
+    mainProgram = "inspec";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/inspec/gemset.nix b/nixpkgs/pkgs/tools/misc/inspec/gemset.nix
new file mode 100644
index 000000000000..ac2a8914427f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/inspec/gemset.nix
@@ -0,0 +1,2230 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15m0b1im6i401ab51vzr7f8nk8kys1qa0snnl741y3sir3xd07jp";
+      type = "gem";
+    };
+    version = "7.0.4.3";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15s8van7r2ad3dq6i03l3z4hqnvxcq75a3h72kxvf9an53sqma20";
+      type = "gem";
+    };
+    version = "2.8.4";
+  };
+  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 = "1pyis1nvnbjxk12a43xvgj2gv0mvp4cnkc1gzw0v1018r61399gz";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  aws-partitions = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12n41py8jfxf9p3gy62ikw8n7wd0cmczk3i2fzxb4ms2xvkxv7b0";
+      type = "gem";
+    };
+    version = "1.749.0";
+  };
+  aws-sdk-alexaforbusiness = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hbb2fpmxb77bp4mm3z24k8vhcc8y9ngjz9jarb54v4lbs8cmlq6";
+      type = "gem";
+    };
+    version = "1.58.0";
+  };
+  aws-sdk-amplify = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fv4w1npqglxm9sl6939akjw3y1ivhpl55i75azvbzx0f7abh3b8";
+      type = "gem";
+    };
+    version = "1.32.0";
+  };
+  aws-sdk-apigateway = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1m3vxlx20hjd14hc90k4lvqvhblh4c9m14pbnqp3k271zpaljnzx";
+      type = "gem";
+    };
+    version = "1.81.0";
+  };
+  aws-sdk-apigatewayv2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lq2qzxk396kbmbxcsx8ic61758zl3ynxymwia1wzdxwkpsxks71";
+      type = "gem";
+    };
+    version = "1.44.0";
+  };
+  aws-sdk-applicationautoscaling = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lp008dcyiqcz90fkck5dgx23ycgk04rhd0n1ywz14rg45844nfn";
+      type = "gem";
+    };
+    version = "1.51.0";
+  };
+  aws-sdk-athena = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qzdnv42x0q2f53zsvj7i56b49n82zbx3qikcf9mp2bgxsbddvg8";
+      type = "gem";
+    };
+    version = "1.64.0";
+  };
+  aws-sdk-autoscaling = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wr9dkf88h46s9n173imvbm6233a8d3cmcnvbm2s3bz0glzp0k4c";
+      type = "gem";
+    };
+    version = "1.63.0";
+  };
+  aws-sdk-batch = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xd8yvvxdmha951h8b1qjijx3l21c9pwjr6nifaxjylpx5897fc0";
+      type = "gem";
+    };
+    version = "1.47.0";
+  };
+  aws-sdk-budgets = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qmlqplc5l72p3mgpin3wjcdny4fbnq9lwcn55vphp8kgdzvv74p";
+      type = "gem";
+    };
+    version = "1.52.0";
+  };
+  aws-sdk-cloudformation = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1634skrhc9nj46smvclx3767qvj02ydqjw15rkww1pigqvh46mcz";
+      type = "gem";
+    };
+    version = "1.77.0";
+  };
+  aws-sdk-cloudfront = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jfrqwrvp9iv7sf24w0bbw094nz87w1gvrbq1725b0d0bry66ydy";
+      type = "gem";
+    };
+    version = "1.76.0";
+  };
+  aws-sdk-cloudhsm = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gis7ggljdsygb64knxfg6vxn8rbk5zfgcxqrjhvf4812hqzv4sp";
+      type = "gem";
+    };
+    version = "1.41.0";
+  };
+  aws-sdk-cloudhsmv2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10fcy73lvivjdywklkqhp70jik2fscp0cz54qdzjpdhwvvpvgnfk";
+      type = "gem";
+    };
+    version = "1.44.0";
+  };
+  aws-sdk-cloudtrail = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zfppjsasqbdhv9vvvjqif3b4mxgchw0i66hyxpc2gswk2a5803j";
+      type = "gem";
+    };
+    version = "1.58.0";
+  };
+  aws-sdk-cloudwatch = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vls66mnkmxd05wqadgh7hfknj7yhnsfdms43cy607jv057lcqn4";
+      type = "gem";
+    };
+    version = "1.72.0";
+  };
+  aws-sdk-cloudwatchevents = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xfyviddwll6n4lxl3g57x86gic9ycppnmpnl90jsbgy2dp12632";
+      type = "gem";
+    };
+    version = "1.46.0";
+  };
+  aws-sdk-cloudwatchlogs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1paqyv0m55ag25liwmgqdj1vwi3yd231hvn419i0y1wg5ffcsg7j";
+      type = "gem";
+    };
+    version = "1.62.0";
+  };
+  aws-sdk-codecommit = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vzpfsnnvwp21d9rsdaaml8fsigbwj344ghqw9834m4y3g7xax80";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-codedeploy = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g8lp4ci1b40rx754hf2vfpzl4v9zi5vjakzmc1r9fg58x0v9wyv";
+      type = "gem";
+    };
+    version = "1.52.0";
+  };
+  aws-sdk-codepipeline = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kvzsssfas7m2sxmfirnl0bp49m079bgj8lg5rlj2gri3wdgkx3f";
+      type = "gem";
+    };
+    version = "1.55.0";
+  };
+  aws-sdk-cognitoidentity = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k7d4riiczkkxi4l3nh8nd2sn449j73s9cwcbk6b37lnkvq81kq2";
+      type = "gem";
+    };
+    version = "1.31.0";
+  };
+  aws-sdk-cognitoidentityprovider = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j2v3m0d5d756nm98xgf10kz4cz68a8m9xlwzlqh86smqcml6v25";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-configservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lky7k2fqzqs8lpm3wqa5vw1b7np8g82hi39m6fsk1wvahx6kiwa";
+      type = "gem";
+    };
+    version = "1.89.0";
+  };
+  aws-sdk-core = {
+    dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0732vv8zi67z25fss1sdvqx0vv1ap3w6hz1avxzwznkjp002vj39";
+      type = "gem";
+    };
+    version = "3.171.0";
+  };
+  aws-sdk-costandusagereportservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l9df1dji0m1sj6w5gjmxd0bjv7q858pnhwjhfkr0mfdk1dnsjbj";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-databasemigrationservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kppbmbd26bmbwy1f803symy36kbigf5mdgd91jh5r2l63418m46";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-dynamodb = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h7sl8236mgq0q6mzbznrq3wksr3jd4m8lwj6bkz678z6mxa0fal";
+      type = "gem";
+    };
+    version = "1.84.0";
+  };
+  aws-sdk-ec2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zj67jzg81nr3da2mwh27b22ps2waz41fhvc2f2khdfjazi7knqv";
+      type = "gem";
+    };
+    version = "1.375.0";
+  };
+  aws-sdk-ecr = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cyscy0v5xsk8x946r125bidrzx7y4fam09ra8pl8xjp5a0706ig";
+      type = "gem";
+    };
+    version = "1.58.0";
+  };
+  aws-sdk-ecrpublic = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15iz3wnc2z3n0f9lnbfgqyyi0bg6l65dyn5wc09p8wilg6jlib5c";
+      type = "gem";
+    };
+    version = "1.16.0";
+  };
+  aws-sdk-ecs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pkz2fy63wr6wfzmwyscfzsjn4443cp7y4kzvirg1gcyq1cpyxgy";
+      type = "gem";
+    };
+    version = "1.114.0";
+  };
+  aws-sdk-efs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r16nqsqhlc429p9hd1j226fkd9xq6x4ybm01sj482vjg4wsq4qg";
+      type = "gem";
+    };
+    version = "1.59.0";
+  };
+  aws-sdk-eks = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12k9i7syfmxlk5dracwvin03bjhy8abyd58180z4zmq77al0dn24";
+      type = "gem";
+    };
+    version = "1.83.0";
+  };
+  aws-sdk-elasticache = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wydzznzk4zhy3bh4ra8b2dsdhhib4ahnppni72zhr3dvda0pxfg";
+      type = "gem";
+    };
+    version = "1.84.0";
+  };
+  aws-sdk-elasticbeanstalk = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13haliasq2k74xhk0sl2rb9x14vk980rnp2rzm5d0jls42mkkzsm";
+      type = "gem";
+    };
+    version = "1.54.0";
+  };
+  aws-sdk-elasticloadbalancing = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jf2mcb1lqqm5dpmrhrlszmf9hb98kj6i7yw118lqn5dkb1mjjy1";
+      type = "gem";
+    };
+    version = "1.42.0";
+  };
+  aws-sdk-elasticloadbalancingv2 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yzyk4q2g3hx74fhr7y37n8zp349g71micwzix5gwbjhfpjizy72";
+      type = "gem";
+    };
+    version = "1.84.0";
+  };
+  aws-sdk-elasticsearchservice = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rz8hs78cd1lxcha29y751hxrv6yhcw6q9rvpcg24bgf81d4n4ag";
+      type = "gem";
+    };
+    version = "1.69.0";
+  };
+  aws-sdk-emr = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wybb0aadsk8x3whwlid58g40613c9rrl48g43ikgpqz9f3b44ac";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-eventbridge = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cj1pwvhwal1qvmaiwi42lhsak7mb61bmm7j1g4gmscxg36l3bj2";
+      type = "gem";
+    };
+    version = "1.24.0";
+  };
+  aws-sdk-firehose = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z0dvga01xg6pahy5p4bfc8s73n3ycjr0h3cxvhy8kcymynswn1k";
+      type = "gem";
+    };
+    version = "1.51.0";
+  };
+  aws-sdk-glue = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1608aiav3iz6jcxdlprcax5984gq5m20dyg8w8caqjkgrrgkyd3f";
+      type = "gem";
+    };
+    version = "1.88.0";
+  };
+  aws-sdk-guardduty = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12wvpgzqw7lswxchsbwmn0csp5lj521a1fx6f0dv8s26swnmhdsk";
+      type = "gem";
+    };
+    version = "1.67.0";
+  };
+  aws-sdk-iam = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0crb3m1apj6kszp9aqmc2lqw99i1xkxbp5fl1s5748718kld4s8v";
+      type = "gem";
+    };
+    version = "1.77.0";
+  };
+  aws-sdk-kafka = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pxzjmdb5bqrqnivmw7li2qliam0dm6v56idv50slds96q6jck61";
+      type = "gem";
+    };
+    version = "1.54.0";
+  };
+  aws-sdk-kinesis = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k14773dyzwcjcb9a1pqbh0vqzjlb19cwf0ydw7pch5g8x5fs5g2";
+      type = "gem";
+    };
+    version = "1.45.0";
+  };
+  aws-sdk-kms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v87zi28dfmrv7bv91yfldccnpd63n295siirbz7wqv1rajn8n02";
+      type = "gem";
+    };
+    version = "1.63.0";
+  };
+  aws-sdk-lambda = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a0l6yxmvc1hxlmhg4lcsh6yljmsav8p1rprlnnjvhgszhp3gcv3";
+      type = "gem";
+    };
+    version = "1.95.0";
+  };
+  aws-sdk-mq = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pr2v6lf2rcnfsdbs5s5ig5mlvnfm1xwy2y8jcyp9w4s933ps9fg";
+      type = "gem";
+    };
+    version = "1.40.0";
+  };
+  aws-sdk-networkfirewall = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ai74sc8q0vvnkicl4dyq1xikclpmdd0rbzlqpww64wd5q2i6myp";
+      type = "gem";
+    };
+    version = "1.26.0";
+  };
+  aws-sdk-networkmanager = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ldlvhcvbs5r2dzfa2wglacywnqgijbr9iqalq0jhbv4aknmgfjy";
+      type = "gem";
+    };
+    version = "1.30.0";
+  };
+  aws-sdk-organizations = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b5zy7hc67k5pmmnv90p5skd12a61gk1swqlq4a5vn3kjlmg57al";
+      type = "gem";
+    };
+    version = "1.59.0";
+  };
+  aws-sdk-ram = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rm6sr5kvdy9q1xjg00c80648l8j3cpc6l5fakfxiqhp256bf2ac";
+      type = "gem";
+    };
+    version = "1.26.0";
+  };
+  aws-sdk-rds = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15jril7gd5ax0pabbj6gxfnh30x2c9ffw4dv31vb8k7rpdrzkzj8";
+      type = "gem";
+    };
+    version = "1.176.0";
+  };
+  aws-sdk-redshift = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1smv2621gzrhk0wbnmyb2kdqcjp8z8wldy1vfypdcpgvlj9m2wvk";
+      type = "gem";
+    };
+    version = "1.91.0";
+  };
+  aws-sdk-route53 = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xcg7rl6lllm4syxgw496976dnsmfwvxw4131klaycfx9dixz1kc";
+      type = "gem";
+    };
+    version = "1.71.0";
+  };
+  aws-sdk-route53domains = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12in1rcjnni4xza6mdmp3avrb4hgkfk8dzsiqp97yvpywd1dbara";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-route53resolver = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vcwh47pgr745wyl0zwjjhr29yynjgl9w8d0qpnqn1i8ywbnxn9b";
+      type = "gem";
+    };
+    version = "1.40.0";
+  };
+  aws-sdk-s3 = {
+    dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mapdzm97rv22pca1hvvshwsafa12gd2yv2fcy63dfjn5vjjq893";
+      type = "gem";
+    };
+    version = "1.120.1";
+  };
+  aws-sdk-s3control = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kf3i430b6lwzf7dmm506jvm7xy0rj4zhc9kywcg4rc1fp0bmzh3";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-secretsmanager = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xkx39yi2mlwyh3lyg6h39nzj5n059nc6idaqlnsjlrkkrh3i13i";
+      type = "gem";
+    };
+    version = "1.46.0";
+  };
+  aws-sdk-securityhub = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vp8hkmwl0p7xasbzhgnsk3ikj6l34vgyd3g9yg5nfsr4098almv";
+      type = "gem";
+    };
+    version = "1.79.0";
+  };
+  aws-sdk-servicecatalog = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zjxbpr5jj3znrsynazcjznaqcqbfpy646nzvl3c83gcwrsqj8s7";
+      type = "gem";
+    };
+    version = "1.60.0";
+  };
+  aws-sdk-ses = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xii4i4dia1w6hizfxvni8jawpikv9g26ixiw349x33l09f12cbw";
+      type = "gem";
+    };
+    version = "1.41.0";
+  };
+  aws-sdk-shield = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xd1baasgazrfc1b2pr196jycj14rb6kdkxjkqa0rnd0ml9xwiwj";
+      type = "gem";
+    };
+    version = "1.51.0";
+  };
+  aws-sdk-signer = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ysspl6n2rw5hr3bz38k46k04nkbri0c54fc109kgw57fxfwq3fk";
+      type = "gem";
+    };
+    version = "1.32.0";
+  };
+  aws-sdk-simpledb = {
+    dependencies = ["aws-sdk-core" "aws-sigv2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15vrakmbxz7pg9vf2gi8ssb6jg4k5jwrsik6x0hkjf3n4g3vfgqs";
+      type = "gem";
+    };
+    version = "1.29.0";
+  };
+  aws-sdk-sms = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z40zf3v3isqsc6ipmv8v6f28a0bsrba2rivgya98hk1wyivxn4w";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sdk-sns = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10kn9nsh7jn0ikmxybhxh3wgczlpp3pcanqvmc3cjh1sahy8sb1n";
+      type = "gem";
+    };
+    version = "1.60.0";
+  };
+  aws-sdk-sqs = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rp62fmz4lc32qj2phqmrdic4j4la34xp2a6vlg4v6lqz2y2fjhs";
+      type = "gem";
+    };
+    version = "1.53.0";
+  };
+  aws-sdk-ssm = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16p7l4mgzs6al3rpb35318gc06vp757vjb99brbkx8ppyg78cdir";
+      type = "gem";
+    };
+    version = "1.150.0";
+  };
+  aws-sdk-states = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00ja9hkx4rdgd0242l8vmbfmb1qgvys3xs2ryap3ms3qaa76sach";
+      type = "gem";
+    };
+    version = "1.39.0";
+  };
+  aws-sdk-synthetics = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10zh51r45pzbnx8fxjz8pppwlgbzpbvs4kaji1mi53cwpfprlhsz";
+      type = "gem";
+    };
+    version = "1.19.0";
+  };
+  aws-sdk-transfer = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "017zpcqssv138y7nqzwqpvcnsbq2jws6g22996n64kcr2azj28gn";
+      type = "gem";
+    };
+    version = "1.34.0";
+  };
+  aws-sdk-waf = {
+    dependencies = ["aws-sdk-core" "aws-sigv4"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "036655pbqkvzwd05svimvn2v96srz370zmhczg1jzsca0249hxfr";
+      type = "gem";
+    };
+    version = "1.43.0";
+  };
+  aws-sigv2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bnsw26vd0z3gayrqxhjg94ccjdygpk00bmhdjhzagmgngmdbhrk";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  aws-sigv4 = {
+    dependencies = ["aws-eventstream"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11hkna2av47bl0yprgp8k4ya70rc3m2ib5w10fn0piplgkkmhz7m";
+      type = "gem";
+    };
+    version = "1.5.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 = "1p4hsa7xha8ifml58hmkxdkp7vyhm7sw624xam1mrq0hvzawvkm3";
+      type = "gem";
+    };
+    version = "0.18.2";
+  };
+  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 = "0ik06knz7fxn9q2x874d7q1v2fb00askwh36wbl75fnsi2m5m6rq";
+      type = "gem";
+    };
+    version = "0.23.0";
+  };
+  bson = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19vgs9rzzyvd7jfrzynjnc6518q0ffpfciyicfywbp77zl8nc9hk";
+      type = "gem";
+    };
+    version = "4.15.0";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  chef-config = {
+    dependencies = ["addressable" "chef-utils" "fuzzyurl" "mixlib-config" "mixlib-shellout" "tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13581xgpdvdyd0zvdankharj9aahs99vmihcknm66v03a37q7y6x";
+      type = "gem";
+    };
+    version = "18.2.7";
+  };
+  chef-telemetry = {
+    dependencies = ["chef-config" "concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l9icc3nfdj28mip85vf31v5l60qsfqq3a5dscv7jryh1k94y05x";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  chef-utils = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q5by0q1i443lds626cyq78jhzkwb6b1f8vcbv82q790q06vg1w9";
+      type = "gem";
+    };
+    version = "18.2.7";
+  };
+  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 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  cookstyle = {
+    dependencies = ["rubocop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0np0y94x1rgn13bwkd4hc5ysimn9ax57ihrpz5rl4fwrn3lybm1s";
+      type = "gem";
+    };
+    version = "7.32.2";
+  };
+  declarative = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yczgnqrbls7shrg63y88g7wand2yp9h6sf56c9bdcksn5nds8c0";
+      type = "gem";
+    };
+    version = "0.0.20";
+  };
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwvjahnp7cpmracd8x732rjgnilqv2sx7d1gfrysslc3h039fa9";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  docker-api = {
+    dependencies = ["excon" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g7dbniz15b3l2sy6xh0j0998dr5jypf3xg3bsygp0108vv7waxy";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lcqjsmixjp52bnlgzh4lg9ppsk52x9hpwdjd53k8jnbah2602h0";
+      type = "gem";
+    };
+    version = "0.5.20190701";
+  };
+  erubi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08s75vs9cxlc4r1q2bjg4br8g9wc5lc5x5vl0vv4zq5ivxsdpgi7";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j826kfvzn7nc5pv950n270r0sx1702k988ad11cdlav3dcxxw09";
+      type = "gem";
+    };
+    version = "0.99.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 = "1c760q0ks4vj4wmaa7nh1dgvgqiwaw0mjr7v8cymy7i3ffgjxx90";
+      type = "gem";
+    };
+    version = "1.10.3";
+  };
+  faraday-cookie_jar = {
+    dependencies = ["faraday" "http-cookie"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00hligx26w9wdnpgsrf0qdnqld4rdccy8ym6027h5m735mpvxjzk";
+      type = "gem";
+    };
+    version = "0.0.7";
+  };
+  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-follow_redirects = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y87p3yk15bjbk0z9mf01r50lzxvp7agr56lbm9gxiz26mb9fbfr";
+      type = "gem";
+    };
+    version = "0.3.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 = "09871c4hd7s5ws1wl4gs7js1k2wlby6v947m2bbzg43pnld044lh";
+      type = "gem";
+    };
+    version = "1.0.4";
+  };
+  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";
+  };
+  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 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  fuzzyurl = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03qchs33vfwbsv5awxg3acfmlcrf5xbhnbrc83fdpamwya0glbjl";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  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" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kd2q59xpm39hpvmmvyi6g3f1fr05xjbnxwkrdqz4xy7hirqi79q";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  hashie = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02bsx12ihl78x0vdm37byp78jjw2ff6035y7rrmbd90qxjwxr43q";
+      type = "gem";
+    };
+    version = "4.1.0";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f8cr014j7mdqpdb9q17fp5vb5b8n1pswqaif91s3ylg5x3pygfn";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13rilvlv8kwbzqfb644qp6hrbsj82cbqmnzcvqip1p6vqx36sxbk";
+      type = "gem";
+    };
+    version = "1.0.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 = "1vdcchz7jli1p0gnc669a7bj3q1fv09y9ppf0y3k0vb1jwdwrqwi";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  inifile = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c5zmk7ia63yw5l2k14qhfdydxwi1sah1ppjdiicr4zcalvfn0xi";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  inspec = {
+    dependencies = ["cookstyle" "faraday_middleware" "inspec-core" "mongo" "progress_bar" "rake" "train" "train-aws" "train-habitat" "train-winrm"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y2p1dm8b648gw6sabgq45mj0wvc683xq4jvh286vmfhkld8ibgh";
+      type = "gem";
+    };
+    version = "5.21.29";
+  };
+  inspec-bin = {
+    dependencies = ["inspec"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02lq4qnmxdc3vn5wwrb5m526js14jvj5c3wczln2skmqg5yr6pbh";
+      type = "gem";
+    };
+    version = "5.21.29";
+  };
+  inspec-core = {
+    dependencies = ["addressable" "chef-telemetry" "faraday" "faraday-follow_redirects" "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 = "1irzd4nms4fpv5llkqsx8mlgyhgsibkzk293w31yixarg3jbnvd7";
+      type = "gem";
+    };
+    version = "5.21.29";
+  };
+  jmespath = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cdw9vw2qly7q7r41s7phnac264rbsdqgj4l0h4nqgbjb157g393";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  jwt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09yj3z5snhaawh2z1w45yyihzmh57m6m7dp8ra8gxavhj5kbiq5p";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  license-acceptance = {
+    dependencies = ["pastel" "tomlrb" "tty-box" "tty-prompt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12h5a3j57h50xkfpdz9gr42k0v8g1qxn2pnj5hbbzbmdhydjbjzf";
+      type = "gem";
+    };
+    version = "2.1.13";
+  };
+  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 = "1zflchpx4g8c110gjdcs540bk5a336nq6nmx379rdg56xw0pjd02";
+      type = "gem";
+    };
+    version = "2.3.1";
+  };
+  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 = "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ic7i5z88zcaqnpzprf7saimq2f6sad57g5mkkqsrqrcd6h3mx06";
+      type = "gem";
+    };
+    version = "5.18.0";
+  };
+  mixlib-config = {
+    dependencies = ["tomlrb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j0122lv2qgccl61njqi0pj6sp6nb85y07gcmw16bwg4k0c8nx6p";
+      type = "gem";
+    };
+    version = "3.0.27";
+  };
+  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 = "0zkwg76y96nkh1mv0k92ybq46cr06v1wmic16129ls3yqzwx3xj6";
+      type = "gem";
+    };
+    version = "3.2.7";
+  };
+  mongo = {
+    dependencies = ["bson"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mkksik7mffwm29dz0pxjfz87rmm578nqzg8bc4kp076xqjwn2xp";
+      type = "gem";
+    };
+    version = "2.13.2";
+  };
+  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 = "0lgyysrpl50wgcb9ahg29i4p01z0irb3p9lirygma0kkfr5dgk9x";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  net-scp = {
+    dependencies = ["net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1si2nq9l6jy5n2zw1q59a5gaji7v9vhy8qx08h4fg368906ysbdk";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yx0pb5fmziz92bw8qzbh8vf20lr56nd3s6q8h0gsgr307lki687";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  nori = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066wc774a2zp4vrq3k7k8p0fhv30ymqmxma1jj7yg5735zls8agn";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  options = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1s650nwnabx66w584m1cyw82icyym6hv5kzfsbp38cinkr5klh9j";
+      type = "gem";
+    };
+    version = "2.3.2";
+  };
+  os = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gwd20smyhxbm687vdikfh1gpi96h8qb1x28s2pdcysf6dm6v0ap";
+      type = "gem";
+    };
+    version = "1.1.4";
+  };
+  parallel = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jcc512l38c0c163ni3jgskvq1vc3mr8ly5pvjijzwvfml9lf597";
+      type = "gem";
+    };
+    version = "1.23.0";
+  };
+  parser = {
+    dependencies = ["ast"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s5afi89p76k8vpwiqvh343pm5l23ijqlpszhz65afym3zpkxhzx";
+      type = "gem";
+    };
+    version = "3.2.2.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";
+  };
+  progress_bar = {
+    dependencies = ["highline" "options"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "04kv6h5mdjd9zf8mcf2dplxls06n2jf72281s74k6b2ar731hc47";
+      type = "gem";
+    };
+    version = "1.3.3";
+  };
+  pry = {
+    dependencies = ["coderay" "method_source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0k9kqkd9nps1w1r1rb7wjr31hqzkka2bhi8b518x78dcxppm9zn4";
+      type = "gem";
+    };
+    version = "0.14.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hz0bx2qs2pwb0bwazzsah03ilpf3aai8b7lk7s35jsfzwbkjq35";
+      type = "gem";
+    };
+    version = "5.0.1";
+  };
+  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";
+  };
+  regexp_parser = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17xizkw5ryw8hhq64iqxmzdrrdxpc5lhkqc1fgm1aj0zsk1r2950";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  representable = {
+    dependencies = ["declarative" "trailblazer-option" "uber"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kms3r6w6pnryysnaqqa9fsn0v73zx1ilds9d1c565n3xdzbyafc";
+      type = "gem";
+    };
+    version = "3.2.0";
+  };
+  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 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19dyb6rcvgi9j2mksd29wfdhfdyzqk7yjhy1ai77559hbhpg61w9";
+      type = "gem";
+    };
+    version = "3.11.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "118hkfw9b11hvvalr7qlylwal5h8dihagm9xg7k4gskg7587hca6";
+      type = "gem";
+    };
+    version = "3.11.0";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0l1bzk6a68i1b2qix83vs40r0pbjawv67hixiq2qxsja19bbq3bc";
+      type = "gem";
+    };
+    version = "3.11.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 = "1vsqp9dij2rj9aapcn3sz7qzw0d8ln7x9p46h9rzd3jzb7his9kk";
+      type = "gem";
+    };
+    version = "3.11.2";
+  };
+  rspec-support = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c01iicvrjk6vv744jgh0y4kk9d0kg2rd2ihdyzvg5p06xm2fpzq";
+      type = "gem";
+    };
+    version = "3.11.1";
+  };
+  rubocop = {
+    dependencies = ["parallel" "parser" "rainbow" "regexp_parser" "rexml" "rubocop-ast" "ruby-progressbar" "unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l3q96il8zx5zl041lxvmfrndxxpk08fksza1gqshhjjzms7c2rk";
+      type = "gem";
+    };
+    version = "1.25.1";
+  };
+  rubocop-ast = {
+    dependencies = ["parser"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0n2gsafg6p7nr1z8i1hkvp2qqkkbg842ba183dnl0h08xd9ms6q5";
+      type = "gem";
+    };
+    version = "1.28.0";
+  };
+  ruby-progressbar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cwvyb7j47m7wihpfaq7rc47zwwx9k4v7iqd9s1xch5nm53rrz40";
+      type = "gem";
+    };
+    version = "1.13.0";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.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";
+  };
+  semverse = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vrh6p0756n3gjnk6am1cc4kmw6wzzd02hcajj27rlsqg3p6lwn9";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  signet = {
+    dependencies = ["addressable" "faraday" "jwt" "multi_json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0100rclkhagf032rg3r0gf3f4znrvvvqrimy6hpa73f21n9k2a0x";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+  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 = "1yynb0qhhhplmpzavfrrlwdnd1rh7rkwzcs4xf0mpy2wr6rr6clk";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  strings-ansi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "120wa6yjc63b84lprglc52f40hx3fx920n4dmv14rad41rv2s9lh";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  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";
+  };
+  trailblazer-option = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18s48fndi2kfvrfzmq6rxvjfwad347548yby0341ixz1lhpg3r10";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  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 = "04ixvxhpv33h8wcirplzgp5pix2xipx5hfxxlrjp579hrcs38sjy";
+      type = "gem";
+    };
+    version = "3.10.7";
+  };
+  train-aws = {
+    dependencies = ["aws-sdk-alexaforbusiness" "aws-sdk-amplify" "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-ecrpublic" "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-emr" "aws-sdk-eventbridge" "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-mq" "aws-sdk-networkfirewall" "aws-sdk-networkmanager" "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-s3control" "aws-sdk-secretsmanager" "aws-sdk-securityhub" "aws-sdk-servicecatalog" "aws-sdk-ses" "aws-sdk-shield" "aws-sdk-signer" "aws-sdk-simpledb" "aws-sdk-sms" "aws-sdk-sns" "aws-sdk-sqs" "aws-sdk-ssm" "aws-sdk-states" "aws-sdk-synthetics" "aws-sdk-transfer" "aws-sdk-waf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vl7yfzcd6mq5lmjgagxbdhjhyv5rj2piap3w28zdwqkbyyhir8b";
+      type = "gem";
+    };
+    version = "0.2.24";
+  };
+  train-core = {
+    dependencies = ["addressable" "ffi" "json" "mixlib-shellout" "net-scp" "net-ssh"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1f0yxh5mpr7rdn3660jf5iwc3rhv4l82dd9mhcrm6v85901rvj9c";
+      type = "gem";
+    };
+    version = "3.10.7";
+  };
+  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 = "07haiwh7jcg00mmiarj5g7k9kclq40yqd4j4r3c01qn2cq1sw2xb";
+      type = "gem";
+    };
+    version = "0.2.13";
+  };
+  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 = "1j4y8ik82azjxshgd4i1v4wwhsv3g9cngpygxqkkz69qaa8cxnzw";
+      type = "gem";
+    };
+    version = "0.23.1";
+  };
+  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 = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  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 = "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch";
+      type = "gem";
+    };
+    version = "0.0.8.2";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gi82k102q7bkmfi7ggn9ciypn897ylln1jk9q67kjhr39fj043a";
+      type = "gem";
+    };
+    version = "2.4.2";
+  };
+  unicode_utils = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0h1a5yvrxzlf0lxxa1ya31jcizslf774arnsd89vgdhk4g7x08mr";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  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";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/instaloader/default.nix b/nixpkgs/pkgs/tools/misc/instaloader/default.nix
new file mode 100644
index 000000000000..4b36d0909bf4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/instaloader/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildPythonPackage
+, pythonOlder
+, fetchFromGitHub
+, setuptools
+, sphinx
+, requests
+}:
+
+buildPythonPackage rec {
+  pname = "instaloader";
+  version = "4.11";
+  format = "pyproject";
+
+  disabled = pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "instaloader";
+    repo = "instaloader";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-EqE184tYW815Hp42EB5g0l9f5AWpYSqH+cY4z4zsCSQ=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [
+    requests
+    sphinx
+  ];
+
+  pythonImportsCheck = [ "instaloader" ];
+
+  meta = with lib; {
+    homepage = "https://instaloader.github.io/";
+    description = "Download pictures (or videos) along with their captions and other metadata from Instagram";
+    maintainers = with maintainers; [ creator54 ];
+    license = licenses.mit;
+    mainProgram = "instaloader";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/interactsh/default.nix b/nixpkgs/pkgs/tools/misc/interactsh/default.nix
new file mode 100644
index 000000000000..894bf1445723
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/interactsh/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "interactsh";
+  version = "1.1.9";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-IpKsKfu2mVLyrR0wnbraV/0aaX7uRleGbl3q4bv90Eg=";
+  };
+
+  vendorHash = "sha256-xUMEmeoE3Th37kgz5LJg3F27RlKBoIhRf0VfRzkgV2A=";
+
+  modRoot = ".";
+  subPackages = [
+    "cmd/interactsh-client"
+    "cmd/interactsh-server"
+  ];
+
+  # Test files are not part of the release tarball
+  doCheck = false;
+
+  meta = with lib; {
+    description = "An Out of bounds interaction gathering server and client library";
+    longDescription = ''
+      Interactsh is an Open-Source Solution for Out of band Data Extraction,
+      A tool designed to detect bugs that cause external interactions,
+      For example - Blind SQLi, Blind CMDi, SSRF, etc.
+    '';
+    homepage = "https://github.com/projectdiscovery/interactsh";
+    changelog = "https://github.com/projectdiscovery/interactsh/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hanemile ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/intermodal/default.nix b/nixpkgs/pkgs/tools/misc/intermodal/default.nix
new file mode 100644
index 000000000000..e4a296333569
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/intermodal/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "intermodal";
+  version = "0.1.13";
+
+  src = fetchFromGitHub {
+    owner = "casey";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-hKMO7ZicXSYESXWKmDC2ILD996KoYDXS5HJExyXMdX4=";
+  };
+
+  cargoHash = "sha256-7vtUMG6mxAHKnbouyTsaUf1myJssxYoqAIOjc6m86Fo=";
+
+  # include_hidden test tries to use `chflags` on darwin
+  checkFlagsArray = lib.optionals stdenv.isDarwin [ "--skip=subcommand::torrent::create::tests::include_hidden" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd imdl \
+      --bash <($out/bin/imdl completions bash) \
+      --fish <($out/bin/imdl completions fish) \
+      --zsh  <($out/bin/imdl completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "User-friendly and featureful command-line BitTorrent metainfo utility";
+    homepage = "https://github.com/casey/intermodal";
+    changelog = "https://github.com/casey/intermodal/releases/tag/v${version}";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ Br1ght0ne xrelkd ];
+    mainProgram = "imdl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/invoice/default.nix b/nixpkgs/pkgs/tools/misc/invoice/default.nix
new file mode 100644
index 000000000000..ea7ce5c2205a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/invoice/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "invoice";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "maaslalani";
+    repo = "invoice";
+    rev = "v${version}";
+    hash = "sha256-WtQ4nF31uIoplY18GZNs41ZOCxmbIu71YpEGk8aTGww=";
+  };
+
+  vendorHash = "sha256-8VhBflnpsJ5h8S6meDFZKCcS2nz5u4kPE9W710gJG4U=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Command line invoice generator";
+    homepage = "https://github.com/maaslalani/invoice";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "invoice";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/iotools/default.nix b/nixpkgs/pkgs/tools/misc/iotools/default.nix
new file mode 100644
index 000000000000..17330d9c19cb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/iotools/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "iotools";
+  version = "unstable-2017-12-11";
+
+  src = fetchFromGitHub {
+    owner = "adurbin";
+    repo = pname;
+    rev = "18949fdc4dedb1da3f51ee83a582b112fb9f2c71";
+    sha256 = "0vymnah44d5bzsjhfmxkcrlrikkp0db22k7a1s8bknz7glk9fldn";
+  };
+
+  makeFlags = [ "DEBUG=0" "STATIC=0" ];
+
+  installPhase = ''
+    install -Dm755 iotools -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Set of simple command line tools which allow access to
+      hardware device registers";
+    longDescription = ''
+      Provides a set of simple command line tools which allow access to
+      hardware device registers. Supported register interfaces include PCI,
+      IO, memory mapped IO, SMBus, CPUID, and MSR. Also included are some
+      utilities which allow for simple arithmetic, logical, and other
+      operations.
+    '';
+    homepage = "https://github.com/adurbin/iotools";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ felixsinger ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    mainProgram = "iotools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ipad_charge/default.nix b/nixpkgs/pkgs/tools/misc/ipad_charge/default.nix
new file mode 100644
index 000000000000..fdbab82aabcd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ipad_charge/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, libusb1 }:
+
+stdenv.mkDerivation rec {
+  pname = "ipad_charge";
+  version = "2015-02-03";
+
+  src = fetchFromGitHub {
+    sha256 = "0f40hqx1dbqpwrhyf42h5982jwqv8j5zp5hwwakz6600hyqvnnz7";
+    rev = "bb24e1c3a79016cfdffb9d28189485766d655ec6";
+    repo = "ipad_charge";
+    owner = "mkorenkov";
+  };
+
+  buildInputs = [ libusb1 ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace " -o root -g root" "" \
+      --replace "/usr" "$out" \
+      --replace "/etc/udev" "$out/lib/udev"
+    substituteInPlace *.rules \
+      --replace "/usr" "$out"
+  '';
+
+  enableParallelBuilding = true;
+
+  preInstall = ''
+    mkdir -p $out/{bin,lib/udev/rules.d}
+  '';
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Apple device USB charging utility for Linux";
+    longDescription = ''
+      USB charging control utility used to enable/disable charging of an Apple
+      device connected to USB port. For a list of supported devices, see
+      https://github.com/mkorenkov/ipad_charge#supported-devices.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    mainProgram = "ipad_charge";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ipbt/default.nix b/nixpkgs/pkgs/tools/misc/ipbt/default.nix
new file mode 100644
index 000000000000..3b9b6d1496ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ipbt/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, perl, ncurses }:
+
+stdenv.mkDerivation rec {
+  version = "20210215.5a9cb02";
+  pname = "ipbt";
+
+  src = fetchurl {
+    url = "https://www.chiark.greenend.org.uk/~sgtatham/ipbt/ipbt-${version}.tar.gz";
+    sha256 = "0w6blpv22jjivzr58y440zv6djvi5iccdmj4y2md52fbpjngmsha";
+  };
+
+  nativeBuildInputs = [ perl ];
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    description = "A high-tech ttyrec player for Unix";
+    homepage = "https://www.chiark.greenend.org.uk/~sgtatham/ipbt/";
+    license = licenses.mit;
+    maintainers = [ maintainers.tckmn ];
+    platforms = platforms.unix;
+    mainProgram = "ipbt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ipxe/default.nix b/nixpkgs/pkgs/tools/misc/ipxe/default.nix
new file mode 100644
index 000000000000..293c32b3e6ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ipxe/default.nix
@@ -0,0 +1,112 @@
+{ stdenv, lib, fetchFromGitHub, unstableGitUpdater, buildPackages
+, gnu-efi, mtools, openssl, perl, xorriso, xz
+, syslinux ? null
+, embedScript ? null
+, additionalTargets ? {}
+, additionalOptions ? []
+}:
+
+let
+  targets = additionalTargets // lib.optionalAttrs stdenv.isx86_64 {
+    "bin-x86_64-efi/ipxe.efi" = null;
+    "bin-x86_64-efi/ipxe.efirom" = null;
+    "bin-x86_64-efi/ipxe.usb" = "ipxe-efi.usb";
+    "bin-x86_64-efi/snp.efi" = null;
+  } // lib.optionalAttrs stdenv.hostPlatform.isx86 {
+    "bin/ipxe.dsk" = null;
+    "bin/ipxe.usb" = null;
+    "bin/ipxe.iso" = null;
+    "bin/ipxe.lkrn" = null;
+    "bin/undionly.kpxe" = null;
+  } // lib.optionalAttrs stdenv.isAarch32 {
+    "bin-arm32-efi/ipxe.efi" = null;
+    "bin-arm32-efi/ipxe.efirom" = null;
+    "bin-arm32-efi/ipxe.usb" = "ipxe-efi.usb";
+    "bin-arm32-efi/snp.efi" = null;
+  } // lib.optionalAttrs stdenv.isAarch64 {
+    "bin-arm64-efi/ipxe.efi" = null;
+    "bin-arm64-efi/ipxe.efirom" = null;
+    "bin-arm64-efi/ipxe.usb" = "ipxe-efi.usb";
+    "bin-arm64-efi/snp.efi" = null;
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "ipxe";
+  version = "unstable-2024-02-08";
+
+  nativeBuildInputs = [ gnu-efi mtools openssl perl xorriso xz ] ++ lib.optional stdenv.hostPlatform.isx86 syslinux;
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+
+  strictDeps = true;
+
+  src = fetchFromGitHub {
+    owner = "ipxe";
+    repo = "ipxe";
+    rev = "a846c4ccfc7db212dff792e081991df17268b4d5";
+    hash = "sha256-4BvAwZ09EZJXBkdkZHLw0qjOqasNaN6RF4wmTfPVTWc=";
+  };
+
+  postPatch = lib.optionalString stdenv.hostPlatform.isAarch64 ''
+    substituteInPlace src/util/genfsimg --replace "	syslinux " "	true "
+  ''; # calling syslinux on a FAT image isn't going to work
+
+  # not possible due to assembler code
+  hardeningDisable = [ "pic" "stackprotector" ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  makeFlags =
+    [ "ECHO_E_BIN_ECHO=echo" "ECHO_E_BIN_ECHO_E=echo" # No /bin/echo here.
+      "CROSS=${stdenv.cc.targetPrefix}"
+    ] ++ lib.optional (embedScript != null) "EMBED=${embedScript}";
+
+
+  enabledOptions = [
+    "PING_CMD"
+    "IMAGE_TRUST_CMD"
+    "DOWNLOAD_PROTO_HTTP"
+    "DOWNLOAD_PROTO_HTTPS"
+  ] ++ additionalOptions;
+
+  configurePhase = ''
+    runHook preConfigure
+    for opt in ${lib.escapeShellArgs enabledOptions}; do echo "#define $opt" >> src/config/general.h; done
+    substituteInPlace src/Makefile.housekeeping --replace '/bin/echo' echo
+  '' + lib.optionalString stdenv.hostPlatform.isx86 ''
+    substituteInPlace src/util/genfsimg --replace /usr/lib/syslinux ${syslinux}/share/syslinux
+  '' + ''
+    runHook postConfigure
+  '';
+
+  preBuild = "cd src";
+
+  buildFlags = lib.attrNames targets;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    ${lib.concatStringsSep "\n" (lib.mapAttrsToList (from: to:
+      if to == null
+      then "cp -v ${from} $out"
+      else "cp -v ${from} $out/${to}") targets)}
+
+    # Some PXE constellations especially with dnsmasq are looking for the file with .0 ending
+    # let's provide it as a symlink to be compatible in this case.
+    ln -s undionly.kpxe $out/undionly.kpxe.0
+
+    runHook postInstall
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.updateScript = unstableGitUpdater {};
+
+  meta = with lib;
+    { description = "Network boot firmware";
+      homepage = "https://ipxe.org/";
+      license = licenses.gpl2Only;
+      platforms = platforms.linux;
+    };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ised/default.nix b/nixpkgs/pkgs/tools/misc/ised/default.nix
new file mode 100644
index 000000000000..9f6b716b4293
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ised/default.nix
@@ -0,0 +1,18 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "ised";
+  version = "2.7.1";
+  src = fetchurl {
+    url = "mirror://sourceforge/project/ised/${pname}-${version}.tar.bz2";
+    sha256 = "0fhha61whkkqranqdxg792g0f5kgp5m3m6z1iqcvjh2c34rczbmb";
+  };
+
+  meta = {
+    description = "A numeric sequence editor";
+    maintainers = with lib.maintainers; [ raskin ];
+    platforms = with lib.platforms; linux;
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "ised";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/isoimagewriter/default.nix b/nixpkgs/pkgs/tools/misc/isoimagewriter/default.nix
new file mode 100644
index 000000000000..1ffb0f51db51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/isoimagewriter/default.nix
@@ -0,0 +1,31 @@
+{ lib, mkDerivation, fetchurl, cmake, extra-cmake-modules, wrapQtAppsHook,
+karchive, kcoreaddons, kcrash, kiconthemes, kwidgetsaddons, solid, qgpgme }:
+mkDerivation rec {
+  pname = "isoimagewriter";
+  version = "1.0.0";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/${pname}-${version}.tar.xz";
+    hash = "sha256-ppAiMD7Bvra3tPDWjlnkGZ08mGh2fLnrI8bdGZngal0=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules wrapQtAppsHook ];
+  buildInputs = [
+    karchive
+    kcoreaddons
+    kcrash
+    kiconthemes
+    kwidgetsaddons
+    solid
+    qgpgme
+  ];
+
+  meta = {
+    description = "A program to write hybrid ISO files onto USB disks";
+    homepage = "https://invent.kde.org/utilities/isoimagewriter";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ k900 ];
+    mainProgram = "isoimagewriter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ix/default.nix b/nixpkgs/pkgs/tools/misc/ix/default.nix
new file mode 100644
index 000000000000..52781f8a08bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ix/default.nix
@@ -0,0 +1,37 @@
+{ lib, resholve, fetchurl, bash, curl }:
+
+resholve.mkDerivation {
+  pname = "ix";
+  version = "20190815";
+
+  src = fetchurl {
+    url = "http://ix.io/client";
+    hash = "sha256-p/j/Nz7tzLJV7HgUwVsiwN1WxCx4Por+HyRgFTTRgnU=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 $src $out/bin/ix
+    substituteInPlace $out/bin/ix \
+      --replace '$echo ' ""
+
+    runHook postInstall
+  '';
+
+  solutions.default = {
+    scripts = [ "bin/ix" ];
+    interpreter = "${lib.getExe bash}";
+    inputs = [ curl ];
+  };
+
+  meta = with lib; {
+    homepage = "http://ix.io";
+    description = "Command line pastebin";
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.all;
+    mainProgram = "ix";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jdiskreport/default.nix b/nixpkgs/pkgs/tools/misc/jdiskreport/default.nix
new file mode 100644
index 000000000000..6490d68ce0b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jdiskreport/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, unzip, jre, makeDesktopItem, copyDesktopItems }:
+
+let
+  desktopItem = makeDesktopItem {
+    desktopName = "JDiskReport";
+    genericName = "A graphical utility to visualize disk usage";
+    categories = [ "Utility" ];
+    exec = "jdiskreport";
+    name = "jdiskreport";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "jdiskreport";
+  version = "1.4.1";
+
+  src = fetchurl {
+    url = "https://www.jgoodies.com/download/jdiskreport/jdiskreport-${lib.replaceStrings ["."] ["_"] version}.zip";
+    sha256 = "0d5mzkwsbh9s9b1vyvpaawqc09b0q41l2a7pmwf7386b1fsx6d58";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems unzip ];
+  inherit jre;
+
+  installPhase = ''
+    runHook preInstall
+
+    unzip $src
+
+    jar=$(ls */*.jar)
+
+    mkdir -p $out/share/java
+    mv $jar $out/share/java
+
+    mkdir -p $out/bin
+    cat > $out/bin/jdiskreport <<EOF
+    #! $SHELL -e
+    exec $jre/bin/java -jar $out/share/java/$(basename $jar)
+    EOF
+    chmod +x $out/bin/jdiskreport
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    homepage = "http://www.jgoodies.com/freeware/jdiskreport/";
+    description = "A graphical utility to visualize disk usage";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.unfreeRedistributable; #TODO freedist, libs under BSD-3
+    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    maintainers = with maintainers; [ kylesferrazza ];
+    mainProgram = "jdiskreport";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jdupes/default.nix b/nixpkgs/pkgs/tools/misc/jdupes/default.nix
new file mode 100644
index 000000000000..8e29307ad24a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jdupes/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchFromGitea, libjodycode }:
+
+stdenv.mkDerivation rec {
+  pname = "jdupes";
+  version = "1.27.3";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "jbruchon";
+    repo  = "jdupes";
+    rev   = "v${version}";
+    hash = "sha256-hR5nl8G7TYVm4ol/jgo7iOb4dLr2MovgjKSXCD2UwMg=";
+    # Unicode file names lead to different checksums on HFS+ vs. other
+    # filesystems because of unicode normalisation. The testdir
+    # directories have such files and will be removed.
+    postFetch = "rm -r $out/testdir";
+  };
+
+  buildInputs = [ libjodycode ];
+
+  dontConfigure = true;
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ] ++ lib.optionals stdenv.isLinux [
+    "ENABLE_DEDUPE=1"
+    "STATIC_DEDUPE_H=1"
+  ] ++ lib.optionals stdenv.cc.isGNU [
+    "HARDEN=1"
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = false; # broken Makefile, the above also removes tests
+
+  postInstall = ''
+    install -Dm444 -t $out/share/doc/jdupes CHANGES.txt LICENSE.txt README.md
+  '';
+
+  meta = with lib; {
+    description = "A powerful duplicate file finder and an enhanced fork of 'fdupes'";
+    longDescription = ''
+      jdupes is a program for identifying and taking actions upon
+      duplicate files. This fork known as 'jdupes' is heavily modified
+      from and improved over the original.
+    '';
+    homepage = "https://github.com/jbruchon/jdupes";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "jdupes";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jfrog-cli/default.nix b/nixpkgs/pkgs/tools/misc/jfrog-cli/default.nix
new file mode 100644
index 000000000000..cc778b6f6692
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jfrog-cli/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nodejs
+, nix-update-script
+}:
+
+buildGoModule rec {
+  pname = "jfrog-cli";
+  version = "2.56.0";
+
+  src = fetchFromGitHub {
+    owner = "jfrog";
+    repo = "jfrog-cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-a7zCPyKV9kZ34XxVBYotcMvXUVrieunFpKGBK1Jhvo4=";
+  };
+
+  vendorHash = "sha256-q0PXbLTS5Po3xTK+CkU7BtZ6tk1PfH3zVAVK1IbmitY=";
+
+  # Upgrade the Go version during the vendoring FOD build because it fails otherwise.
+  overrideModAttrs = _: {
+    preBuild = ''
+      substituteInPlace go.mod --replace-fail 'go 1.20' 'go 1.21'
+    '';
+    postInstall = ''
+      cp go.mod "$out/go.mod"
+    '';
+  };
+
+  # Copy the modified go.mod we got from the vendoring process.
+  preBuild = ''
+    cp vendor/go.mod go.mod
+  '';
+
+  postPatch = ''
+    # Patch out broken test cleanup.
+    substituteInPlace artifactory_test.go \
+      --replace-fail \
+      'deleteReceivedReleaseBundle(t, "cli-tests", "2")' \
+      '// deleteReceivedReleaseBundle(t, "cli-tests", "2")'
+  '';
+
+  postInstall = ''
+    # Name the output the same way as the original build script does
+    mv $out/bin/jfrog-cli $out/bin/jf
+  '';
+
+  # Some of the tests require a writable $HOME
+  preCheck = "export HOME=$TMPDIR";
+
+  nativeCheckInputs = [ nodejs ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://github.com/jfrog/jfrog-cli";
+    description = "Client for accessing to JFrog's Artifactory and Mission Control through their respective REST APIs";
+    changelog = "https://github.com/jfrog/jfrog-cli/releases/tag/v${version}";
+    license = licenses.asl20;
+    mainProgram = "jf";
+    maintainers = with maintainers; [ detegr aidalgol ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/journaldriver/default.nix b/nixpkgs/pkgs/tools/misc/journaldriver/default.nix
new file mode 100644
index 000000000000..a5174c4b309e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/journaldriver/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchgit, rustPlatform, pkg-config, openssl, systemd }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "journaldriver";
+  version = "5656.0.0";
+  cargoSha256 = "0jxv7skqgkk2j28jzs0gqnic0pqbdpgy8ryhz613pn0cslgy1p5q";
+
+  src = fetchgit {
+    url = "https://code.tvl.fyi/depot.git:/ops/journaldriver.git";
+    sha256 = "0bnf67k6pkw4rngn58b5zm19danr4sh2g6rfd4k5w2sa1lzqai04";
+
+    # TVL revision r/5656; as of 2023-01-13 the revision tag is
+    # unavailable through git, hence the pinned hash.
+    rev = "4e191353228197ce548d63cb9955e53661244f9c";
+  };
+
+  buildInputs = [ openssl systemd ];
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "Log forwarder from journald to Stackdriver Logging";
+    homepage = "https://code.tvl.fyi/about/ops/journaldriver";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.tazjin ];
+    platforms = platforms.linux;
+    mainProgram = "journaldriver";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jsonwatch/default.nix b/nixpkgs/pkgs/tools/misc/jsonwatch/default.nix
new file mode 100644
index 000000000000..2f0e3b89149c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jsonwatch/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jsonwatch";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "dbohdan";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-TGW04P8t0mAXza7I7qp6QRXA/MDE3m1dlRC7bMf2dSk=";
+  };
+
+  cargoSha256 = "sha256-Gjb7v3kz11iOml3Ykxhy43KNxzaprgMbb5DpPNChLTc=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  meta = with lib; {
+    description = "Like watch -d but for JSON";
+    longDescription = ''
+      jsonwatch is a command line utility with which you can track
+      changes in JSON data delivered by a shell command or a web
+      (HTTP/HTTPS) API. jsonwatch requests data from the designated
+      source repeatedly at a set interval and displays the
+      differences when the data changes.
+    '';
+    homepage = "https://github.com/dbohdan/jsonwatch";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fab ];
+    # never built on aarch64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin && stdenv.isAarch64;
+    mainProgram = "jsonwatch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jstest-gtk/default.nix b/nixpkgs/pkgs/tools/misc/jstest-gtk/default.nix
new file mode 100644
index 000000000000..1b201396b7ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jstest-gtk/default.nix
@@ -0,0 +1,30 @@
+{ stdenv, lib, fetchFromGitLab, cmake, pkg-config, gtkmm3, libsigcxx, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "jstest-gtk";
+  version = "2018-07-10";
+
+  src = fetchFromGitLab {
+    owner = pname;
+    repo = pname;
+    rev = "62f6e2d7d44620e503149510c428df9e004c9f3b";
+    sha256 = "0icbbhrj5aqljhiavdy3hic60vp0zzfzyg0d6vpjaqkbzd5pv9d8";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ gtkmm3 libsigcxx xorg.libX11 ];
+
+  meta = with lib; {
+    description = "A simple joystick tester based on Gtk+";
+    longDescription = ''
+      It provides you with a list of attached joysticks, a way to display which
+      buttons and axis are pressed, a way to remap axis and buttons and a way
+      to calibrate your joystick.
+    '';
+    homepage = "https://jstest-gtk.gitlab.io/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wucke13 ];
+    platforms = platforms.linux;
+    mainProgram = "jstest-gtk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jugglinglab/default.nix b/nixpkgs/pkgs/tools/misc/jugglinglab/default.nix
new file mode 100644
index 000000000000..64b91a68d948
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jugglinglab/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, maven
+, fetchFromGitHub
+, makeWrapper
+, wrapGAppsHook
+, jre
+}:
+
+let
+  platformName = {
+    "x86_64-linux" = "linux-x86-64";
+    "aarch64-linux" = "linux-aarch64";
+    "x86_64-darwin" = "darwin-x86-64";
+    "aarch64-darwin" = "darwin-aarch64";
+  }.${stdenv.system} or null;
+in
+maven.buildMavenPackage rec {
+  pname = "jugglinglab";
+  version = "1.6.5";
+
+  src = fetchFromGitHub {
+    owner = "jkboyce";
+    repo = "jugglinglab";
+    rev = "v${version}";
+    hash = "sha256-Y87uHFpVs4A/wErNO2ZF6Su0v4LEvaE9nIysrqFoY8w=";
+  };
+
+  patches = [
+    # make sure mvnHash doesn't change when maven is updated
+    ./fix-default-maven-plugin-versions.patch
+  ];
+
+  mvnHash = "sha256-1Uzo9nRw+YR/sd7CC9MTPe/lttkRX6BtmcsHaagP1Do=";
+
+  # fix jar timestamps for reproducibility
+  mvnParameters = "-Dproject.build.outputTimestamp=1980-01-01T00:00:02Z";
+
+  nativeBuildInputs = [
+    makeWrapper
+    wrapGAppsHook
+  ];
+
+  dontWrapGApps = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm644 bin/JugglingLab.jar -t $out/share/jugglinglab
+    ${lib.optionalString (platformName != null) ''
+      install -Dm755 bin/ortools-lib/ortools-${platformName}/* -t $out/lib/ortools-lib
+    ''}
+
+    runHook postInstall
+  '';
+
+  # gappsWrapperArgs are set in preFixup
+  postFixup = ''
+    makeWrapper ${jre}/bin/java $out/bin/jugglinglab \
+        "''${gappsWrapperArgs[@]}" \
+        --add-flags "-Xss2048k -Djava.library.path=$out/lib/ortools-lib" \
+        --add-flags "-jar $out/share/jugglinglab/JugglingLab.jar"
+  '';
+
+  meta = with lib; {
+    description = "A program to visualize different juggling pattens";
+    homepage = "https://jugglinglab.org/";
+    license = licenses.gpl2Only;
+    mainProgram = "jugglinglab";
+    maintainers = with maintainers; [ wnklmnn tomasajt ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/jugglinglab/fix-default-maven-plugin-versions.patch b/nixpkgs/pkgs/tools/misc/jugglinglab/fix-default-maven-plugin-versions.patch
new file mode 100644
index 000000000000..a2f74b19b61f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/jugglinglab/fix-default-maven-plugin-versions.patch
@@ -0,0 +1,70 @@
+diff --git a/pom.xml b/pom.xml
+index 93fd6be..5f929c3 100644
+--- a/pom.xml
++++ b/pom.xml
+@@ -42,6 +43,65 @@
+ 
+     <build>
+         <plugins>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-enforcer-plugin</artifactId>
++                <version>3.4.1</version>
++                <executions>
++                    <execution>
++                        <id>require-all-plugin-versions-to-be-set</id>
++                        <phase>validate</phase>
++                        <goals>
++                            <goal>enforce</goal>
++                        </goals>
++                        <configuration>
++                            <rules>
++                                <requirePluginVersions />
++                            </rules>
++                        </configuration>
++                    </execution>
++                </executions>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-compiler-plugin</artifactId>
++                <version>3.12.1</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-surefire-plugin</artifactId>
++                <version>3.2.3</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-jar-plugin</artifactId>
++                <version>3.3.0</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-clean-plugin</artifactId>
++                <version>3.3.2</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-install-plugin</artifactId>
++                <version>3.1.1</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-site-plugin</artifactId>
++                <version>4.0.0-M13</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-resources-plugin</artifactId>
++                <version>3.3.1</version>
++            </plugin>
++            <plugin>
++                <groupId>org.apache.maven.plugins</groupId>
++                <artifactId>maven-deploy-plugin</artifactId>
++                <version>3.1.1</version>
++            </plugin>
+ 
+             <!-- remove existing `bin/JugglingLab.jar` -->
+             <!-- otherwise on overwrite Maven creates `bin/original-JugglingLab.jar` -->
diff --git a/nixpkgs/pkgs/tools/misc/kakoune-cr/default.nix b/nixpkgs/pkgs/tools/misc/kakoune-cr/default.nix
new file mode 100644
index 000000000000..9a9fa5c9162a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kakoune-cr/default.nix
@@ -0,0 +1,50 @@
+{ lib, crystal, fetchFromGitHub, fetchurl, jq, bash }:
+let
+  icon = fetchurl {
+    url = "https://github.com/mawww/kakoune/raw/master/doc/kakoune_logo.svg";
+    hash = "sha256-JxhIEmjiGrisaarA1sX1AfzNjHNIm9xjyPs/nG1uL/U=";
+  };
+in
+crystal.buildCrystalPackage rec {
+  pname = "kakoune.cr";
+  version = "unstable-2021-11-12";
+
+  src = fetchFromGitHub {
+    owner = "alexherbo2";
+    repo = "kakoune.cr";
+    rev = "43d4276e1d173839f335ff60f205b89705892e00";
+    hash = "sha256-xFrxbnZl/49vGKdkESPa6LpK0ckq4Jv5GNLL/G0qA1w=";
+  };
+
+  buildInputs = [ bash ];
+  propagatedUserEnvPkgs = [ jq ];
+
+  format = "shards";
+  shardsFile = ./shards.nix;
+  lockFile = ./shard.lock;
+
+  preConfigure = ''
+    substituteInPlace src/kakoune/version.cr --replace \
+      '`git describe --tags --always`' \
+      '"${version}"'
+  '';
+
+  postInstall = ''
+    install -Dm555 share/kcr/commands/*/kcr-* -t $out/bin
+    install -Dm444 share/kcr/applications/kcr.desktop -t $out/share/applications
+    install -Dm444 ${icon} $out/share/icons/hicolor/scalable/apps/kcr.svg
+    cp -r share/kcr $out/share/
+  '';
+
+  installCheckPhase = ''
+    $out/bin/kcr --help
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/alexherbo2/kakoune.cr";
+    description = "A command-line tool for Kakoune";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ malte-v ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kakoune-cr/shard.lock b/nixpkgs/pkgs/tools/misc/kakoune-cr/shard.lock
new file mode 100644
index 000000000000..79981b8460d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kakoune-cr/shard.lock
@@ -0,0 +1,10 @@
+version: 2.0
+shards:
+  fifo:
+    git: https://github.com/alexherbo2/fifo.cr.git
+    version: 0.1.0+git.commit.37a2cc2718af0f8a1c50071106d7a5ca3a0d3da2
+
+  rsub:
+    git: https://github.com/alexherbo2/rsub.cr.git
+    version: 0.1.0+git.commit.43c6b9836ee281328bccfdf8c669bab26448e3b3
+
diff --git a/nixpkgs/pkgs/tools/misc/kakoune-cr/shards.nix b/nixpkgs/pkgs/tools/misc/kakoune-cr/shards.nix
new file mode 100644
index 000000000000..b4160f403c74
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kakoune-cr/shards.nix
@@ -0,0 +1,14 @@
+{
+  fifo = {
+    owner = "alexherbo2";
+    repo = "fifo.cr";
+    rev = "37a2cc2718af0f8a1c50071106d7a5ca3a0d3da2";
+    sha256 = "0syh2819dzsfb562z645sajfh7xplhh3mxdachjnzlsdfqkxw85r";
+  };
+  rsub = {
+    owner = "alexherbo2";
+    repo = "rsub.cr";
+    rev = "43c6b9836ee281328bccfdf8c669bab26448e3b3";
+    sha256 = "144p83y3d02jy4gapify53x3i4i51yva6ajbvgi8rx0zj2ajgr0d";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kalker/default.nix b/nixpkgs/pkgs/tools/misc/kalker/default.nix
new file mode 100644
index 000000000000..ef152524da7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kalker/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, gmp
+, mpfr
+, libmpc
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kalker";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = "PaddiM8";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Ri0Os+/AqGWgf/2V5D7xvelOC3JTOMjNzjq56mhA3G4=";
+  };
+
+  cargoHash = "sha256-0+NYbVMIUarLppBZu6mtyGd+2fvkjEUq0TX7urBq3XI=";
+
+  buildInputs = [ gmp mpfr libmpc ];
+
+  outputs = [ "out" "lib" ];
+
+  # Cargo.lock is outdated
+  preConfigure = ''
+    cargo metadata --offline
+  '';
+
+  postInstall = ''
+    moveToOutput "lib" "$lib"
+  '';
+
+  env.CARGO_FEATURE_USE_SYSTEM_LIBS = "1";
+
+  meta = with lib; {
+    homepage = "https://kalker.strct.net";
+    changelog = "https://github.com/PaddiM8/kalker/releases/tag/v${version}";
+    description = "A command line calculator";
+    longDescription = ''
+      A command line calculator that supports math-like syntax with user-defined
+      variables, functions, derivation, integration, and complex numbers
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda lovesegfault ];
+    mainProgram = "kalker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kargo/default.nix b/nixpkgs/pkgs/tools/misc/kargo/default.nix
new file mode 100644
index 000000000000..2097d47aa1ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kargo/default.nix
@@ -0,0 +1,39 @@
+{ lib, fetchurl, python3Packages }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  version = "0.4.8";
+  pname = "kargo";
+
+  src = fetchurl {
+    url = "mirror://pypi/k/kargo/${pname}-${version}.tar.gz";
+    sha256 = "1iq3vrmglag9gpsir03yz7556m0bz99nwb2mf594378cqzbr6db3";
+  };
+
+  propagatedBuildInputs = [
+    ansible-core
+    boto
+    cffi
+    cryptography
+    libcloud
+    markupsafe
+    netaddr
+    pyasn1
+    requests
+    setuptools
+  ];
+
+  checkPhase = ''
+    HOME=$TMPDIR $out/bin/kargo -v
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/kubespray/kargo-cli";
+    description = "A tool helps to deploy a kubernetes cluster with Ansible";
+    platforms = platforms.all;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "kargo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kb/default.nix b/nixpkgs/pkgs/tools/misc/kb/default.nix
new file mode 100644
index 000000000000..85a72adebcdd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kb/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "kb";
+  version = "0.1.7";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "gnebbia";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-K8EAqZbl2e0h03fFwaKIclZTZARDQp1tRo44znxwW0I=";
+  };
+
+  postPatch = ''
+    # `attr` module is not available. And `attrs` defines another `attr` package
+    # that shadows it.
+    substituteInPlace setup.py \
+      --replace \
+        "install_requires=[\"colored\",\"toml\",\"attr\",\"attrs\",\"gitpython\"]," \
+        "install_requires=[\"colored\",\"toml\",\"attrs\",\"gitpython\"],"
+
+    # pytest coverage reporting isn't necessary
+    substituteInPlace setup.cfg \
+      --replace \
+      "addopts = --cov=kb --cov-report term-missing" ""
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colored
+    toml
+    attrs
+    gitpython
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "A minimalist command line knowledge base manager";
+    longDescription = ''
+      kb is a text-oriented minimalist command line knowledge base manager. kb
+      can be considered a quick note collection and access tool oriented toward
+      software developers, penetration testers, hackers, students or whoever has
+      to collect and organize notes in a clean way. Although kb is mainly
+      targeted on text-based note collection, it supports non-text files as well
+      (e.g., images, pdf, videos and others).
+    '';
+    homepage = "https://github.com/gnebbia/kb";
+    changelog = "https://github.com/gnebbia/kb/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wesleyjrz ];
+    mainProgram = "kb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kcollectd/default.nix b/nixpkgs/pkgs/tools/misc/kcollectd/default.nix
new file mode 100644
index 000000000000..dc45a18fe3dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kcollectd/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, fetchFromGitLab
+, mkDerivation
+, qtbase
+, cmake
+, kconfig
+, kio
+, kiconthemes
+, kxmlgui
+, ki18n
+, kguiaddons
+, extra-cmake-modules
+, boost
+, shared-mime-info
+, rrdtool
+, breeze-icons
+}:
+
+mkDerivation rec {
+  pname = "kcollectd";
+  version = "0.12.1";
+  src = fetchFromGitLab {
+    owner = "aerusso";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-bUVL5eRQ5UkSZo562pnyEcj0fVoSC5WHRq4BfN67jEM=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    shared-mime-info
+  ];
+
+  buildInputs = [
+    qtbase
+    kconfig
+    kio
+    kxmlgui
+    kiconthemes
+    ki18n
+    kguiaddons
+    boost
+    rrdtool
+    # otherwise some buttons are blank
+    breeze-icons
+  ];
+
+  meta = with lib; {
+    description = "A graphical frontend to collectd";
+    homepage = "https://www.antonioerusso.com/projects/kcollectd/";
+    maintainers = [ maintainers.symphorien ];
+    license = [ lib.licenses.gpl3Plus ];
+    platforms = lib.platforms.linux;
+    mainProgram = "kcollectd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kepubify/default.nix b/nixpkgs/pkgs/tools/misc/kepubify/default.nix
new file mode 100644
index 000000000000..1820b3a4dca6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kepubify/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "kepubify";
+  version = "4.0.4";
+
+  src = fetchFromGitHub {
+    owner = "pgaskin";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-H6W+C5twXit7Z9hLIJKAftbnvYDA9HAb9tR6yeQGRKI=";
+  };
+
+  vendorHash = "sha256-QOMLwDDvrDQAaK4M4QhBFTGD1CzblkDoA3ZqtCoRHtQ=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  excludedPackages = [ "kobotest" ];
+
+  meta = with lib; {
+    description = "EPUB to KEPUB converter";
+    homepage = "https://pgaskin.net/kepubify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zowoq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kermit/default.nix b/nixpkgs/pkgs/tools/misc/kermit/default.nix
new file mode 100644
index 000000000000..bccecde01cc7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kermit/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, ncurses, libxcrypt }:
+
+stdenv.mkDerivation {
+  pname = "kermit";
+  version = "9.0.302";
+
+  src = fetchurl {
+    url = "ftp://ftp.kermitproject.org/kermit/archives/cku302.tar.gz";
+    sha256 = "0487mh6s99ijqf1pfmbm302pa5i4pzmm8s439hdl1ffs5g8jqpqd";
+  };
+
+  buildInputs = [ ncurses libxcrypt ];
+
+  unpackPhase = ''
+    mkdir -p src
+    pushd src
+    tar xvzf $src
+  '';
+
+  postPatch = ''
+    sed -i -e 's@-I/usr/include/ncurses@@' \
+      -e 's@/usr/local@'"$out"@ makefile
+  '';
+
+  buildPhase = "make -f makefile linux KFLAGS='-D_IO_file_flags' LNKFLAGS='-lcrypt -lresolv'";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/man/man1
+    make -f makefile install
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.kermitproject.org/ck90.html";
+    description = "Portable Scriptable Network and Serial Communication Software";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/keychain/default.nix b/nixpkgs/pkgs/tools/misc/keychain/default.nix
new file mode 100644
index 000000000000..edb0bc34e776
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/keychain/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, makeWrapper
+, coreutils
+, openssh
+, gnupg
+, perl
+, procps
+, gnugrep
+, gawk
+, findutils
+, gnused
+}:
+
+stdenv.mkDerivation rec {
+  pname = "keychain";
+  version = "2.8.5";
+
+  src = fetchFromGitHub {
+    owner = "funtoo";
+    repo = "keychain";
+    rev = version;
+    sha256 = "1bkjlg0a2bbdjhwp37ci1rwikvrl4s3xlbf2jq2z4azc96dr83mj";
+  };
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp keychain $out/bin/keychain
+    installManPage keychain.1
+    wrapProgram $out/bin/keychain \
+      --prefix PATH ":" "${lib.makeBinPath [ coreutils findutils gawk gnupg gnugrep gnused openssh procps ]}" \
+  '';
+
+  meta = with lib; {
+    description = "Keychain management tool";
+    longDescription = ''
+      Keychain helps you to manage SSH and GPG keys in a convenient and secure
+      manner. It acts as a frontend to ssh-agent and ssh-add, but allows you
+      to easily have one long running ssh-agent process per system, rather
+      than the norm of one ssh-agent per login session.
+
+      This dramatically reduces the number of times you need to enter your
+      passphrase. With keychain, you only need to enter a passphrase once
+      every time your local machine is rebooted. Keychain also makes it easy
+      for remote cron jobs to securely "hook in" to a long-running ssh-agent
+      process, allowing your scripts to take advantage of key-based logins.
+    '';
+    homepage = "https://www.funtoo.org/Keychain";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sigma ];
+    mainProgram = "keychain";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/keymapviz/default.nix b/nixpkgs/pkgs/tools/misc/keymapviz/default.nix
new file mode 100644
index 000000000000..6ed68a43b31f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/keymapviz/default.nix
@@ -0,0 +1,23 @@
+{ fetchFromGitHub, lib, python3 }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "keymapviz";
+  version = "1.14.1";
+
+  src = fetchFromGitHub {
+    owner = "yskoht";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-eCvwgco22uPEDDsT8FfTRon1xCGy5p1PBp0pDfNprMs=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ regex ];
+
+  meta = with lib; {
+    description = "A qmk keymap.c visualizer";
+    homepage = "https://github.com/yskoht/keymapviz";
+    license = licenses.mit;
+    maintainers = with maintainers; [ lom ];
+    mainProgram = "keymapviz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kicli/default.nix b/nixpkgs/pkgs/tools/misc/kicli/default.nix
new file mode 100644
index 000000000000..61eb8fe28ae6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kicli/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+}:
+buildGoModule rec {
+  pname = "kicli";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "anned20";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Mt1lHOC8gBcLQ6kArUvlPrH+Y/63mIQTCsUY2UTJE2c=";
+  };
+
+  vendorHash = "sha256-+8L/9NJ3dzP4k+LXkPD208uFGeARv7aT39bhH+R08e0=";
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://github.com/anned20/kicli";
+    description = "CLI interface to the Kimai time tracking project";
+    license = licenses.mit;
+    maintainers = with maintainers; [ poelzi ];
+    platforms = platforms.all;
+    mainProgram = "kicli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/killport/default.nix b/nixpkgs/pkgs/tools/misc/killport/default.nix
new file mode 100644
index 000000000000..d043385f2069
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/killport/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "killport";
+  version = "0.9.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-eyRI4ZVp9HPMvpzyV9sQdh2r966pCdyUPnEhxGkzH3Q=";
+  };
+
+  cargoHash = "sha256-QQ43dT9BTu7qCzpnTGKzlVL6jKDXofXStYWYNLHSuVs=";
+
+  nativeBuildInputs = [ rustPlatform.bindgenHook ];
+
+  meta = with lib; {
+    description = "A command-line tool to easily kill processes running on a specified port";
+    homepage = "https://github.com/jkfran/killport";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sno2wman ];
+    mainProgram = "killport";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kisslicer/default.nix b/nixpkgs/pkgs/tools/misc/kisslicer/default.nix
new file mode 100644
index 000000000000..c016c0b88f4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kisslicer/default.nix
@@ -0,0 +1,61 @@
+{ fetchzip
+, libX11
+, libGLU, libGL
+, makeWrapper
+, lib, stdenv
+}:
+
+let
+
+  libPath = lib.makeLibraryPath [
+    libGLU libGL
+    stdenv.cc.cc
+    libX11
+  ];
+
+  inidir = "\\\${XDG_CONFIG_HOME:-\\$HOME/.config}/kisslicer";
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "kisslicer";
+  version = "1.6.3";
+
+  src = fetchzip {
+    url = "https://www.kisslicer.com/uploads/1/5/3/8/15381852/kisslicer_linux64_${version}_release.zip";
+    sha256 = "1xmywj5jrcsqv1d5x3mphhvafs4mfm9l12npkhk7l03qxbwg9j82";
+    stripRoot = false;
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    libGLU libGL
+    libX11
+  ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -p * $out/bin
+  '';
+
+  fixupPhase = ''
+    chmod 755 $out/bin/KISSlicer
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath ${libPath}   $out/bin/KISSlicer
+    wrapProgram $out/bin/KISSlicer \
+      --add-flags "-inidir ${inidir}" \
+      --run "mkdir -p ${inidir}"
+  '';
+
+  meta = with lib; {
+    description = "Convert STL files into Gcode";
+    homepage = "http://www.kisslicer.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = [ maintainers.cransom ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kitty-img/default.nix b/nixpkgs/pkgs/tools/misc/kitty-img/default.nix
new file mode 100644
index 000000000000..c47c4e6fc80d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kitty-img/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromSourcehut }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kitty-img";
+  version = "1.0.0";
+
+  src = fetchFromSourcehut {
+    owner = "~zethra";
+    repo = "kitty-img";
+    rev = version;
+    hash = "sha256-5thx4ADmJE29bxN+ZO3hF0jhgXK+boqt8oj4Sygl5SU=";
+  };
+
+  cargoHash = "sha256-Ai1Esw83V3jbPDDQyNh8bTNLQBYBonIDkWP3AFgN78U=";
+
+  meta = with lib; {
+    description = "Print images inline in kitty";
+    homepage = "https://git.sr.ht/~zethra/kitty-img";
+    changelog = "https://git.sr.ht/~zethra/kitty-img/refs/${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ gaykitty ];
+    mainProgram = "kitty-img";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kodi-cli/default.nix b/nixpkgs/pkgs/tools/misc/kodi-cli/default.nix
new file mode 100644
index 000000000000..10b9cea73d76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kodi-cli/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, curl, bash, jq, youtube-dl, gnome }:
+
+stdenv.mkDerivation rec {
+  pname = "kodi-cli";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "nawar";
+    repo = pname;
+    rev = version;
+    sha256 = "0f9wdq2fg8hlpk3qbjfkb3imprxkvdrhxfkcvr3dwfma0j2yfwam";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -a kodi-cli $out/bin
+    wrapProgram $out/bin/kodi-cli --prefix PATH : ${lib.makeBinPath [ curl bash ]}
+    cp -a playlist_to_kodi $out/bin
+    wrapProgram $out/bin/playlist_to_kodi --prefix PATH : ${lib.makeBinPath [ curl bash gnome.zenity jq youtube-dl ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/nawar/kodi-cli";
+    description = "Kodi/XBMC bash script to send Kodi commands using JSON RPC. It also allows sending YouTube videos to Kodi";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.pstn ];
+ };
+}
diff --git a/nixpkgs/pkgs/tools/misc/krapslog/default.nix b/nixpkgs/pkgs/tools/misc/krapslog/default.nix
new file mode 100644
index 000000000000..909d047f834a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/krapslog/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "krapslog";
+  version = "0.5.4";
+
+  src = fetchFromGitHub {
+    owner = "acj";
+    repo = "krapslog-rs";
+    rev = version;
+    sha256 = "sha256-nYKqPaO7sA9aWPqngLoTq2PkpAi9zCADFZhYwIK1L2s=";
+  };
+
+  cargoHash = "sha256-Ybz2hNRMWSRuF6tWKsm0Ka7TOKwKvssA9/i6Hqk1tEE=";
+
+  buildInputs = lib.optional stdenv.isDarwin libiconv;
+
+  meta = with lib; {
+    description = "Visualize a log file with sparklines";
+    homepage = "https://github.com/acj/krapslog-rs";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ yanganto ];
+    mainProgram = "krapslog";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kronometer/default.nix b/nixpkgs/pkgs/tools/misc/kronometer/default.nix
new file mode 100644
index 000000000000..06fafedf42ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kronometer/default.nix
@@ -0,0 +1,25 @@
+{
+  mkDerivation, fetchurl, lib,
+  extra-cmake-modules, kdoctools,
+  kconfig, kcrash, kinit
+}:
+
+mkDerivation rec {
+  pname = "kronometer";
+  version = "2.3.0";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/src/${pname}-${version}.tar.xz";
+    sha256 = "sha256-dbnhom8PRo0Bay3DzS2P0xQSrJaMXD51UadQL3z6xHY=";
+  };
+
+  meta = with lib; {
+    homepage = "https://kde.org/applications/utilities/kronometer/";
+    description = "A stopwatch application";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "kronometer";
+  };
+  nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+  propagatedBuildInputs = [ kconfig kcrash kinit ];
+}
diff --git a/nixpkgs/pkgs/tools/misc/krunner-translator/default.nix b/nixpkgs/pkgs/tools/misc/krunner-translator/default.nix
new file mode 100644
index 000000000000..c97428b9469c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/krunner-translator/default.nix
@@ -0,0 +1,54 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, krunner
+, kconfigwidgets
+, ktextwidgets
+, kservice
+, ki18n
+, translate-shell
+, qtbase
+, qtdeclarative
+, qtlocation
+}:
+
+stdenv.mkDerivation rec {
+  pname = "krunner-translator";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "naraesk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "8MusGvNhTxa8Sm8WiSwRaVIfZOeXmgcO4T6H9LqFGLs=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  dontWrapQtApps = true;
+
+  buildInputs = [
+    krunner
+    kconfigwidgets
+    ktextwidgets
+    kservice
+    ki18n
+    qtbase
+    qtdeclarative
+    qtlocation
+  ];
+
+  postPatch = ''
+    substituteInPlace src/translateShellProcess.cpp --replace "start(\"trans\", arguments);" "start(\"${translate-shell}/bin/trans\", arguments);"
+  '';
+
+  meta = with lib; {
+    description = "A plugin for KRunner which integrates a translator, supports Google Translate, Bing Translator, youdao and Baidu Fanyi";
+    homepage = "https://github.com/naraesk/krunner-translator";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pongo1231 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ksnip/default.nix b/nixpkgs/pkgs/tools/misc/ksnip/default.nix
new file mode 100644
index 000000000000..05920cb7c790
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ksnip/default.nix
@@ -0,0 +1,87 @@
+{ stdenv
+, lib
+, cmake
+, extra-cmake-modules
+, fetchFromGitHub
+, fetchpatch
+, kcolorpicker
+, kimageannotator
+, wrapQtAppsHook
+, qtsvg
+, qttools
+, qtx11extras
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ksnip";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "ksnip";
+    repo = "ksnip";
+    rev = "v${version}";
+    sha256 = "sha256-n7YwDXd73hyrzb6L8utZFuHh9HnjVtkU6CC4jfWPj/I=";
+  };
+
+  patches = [
+    # Fix build with latest kImageAnnotator
+    (fetchpatch {
+      url = "https://github.com/ksnip/ksnip/commit/76f4b381971eead6ff31b8bf3bb64bb5717469c3.patch";
+      hash = "sha256-JWoI974qDNZIzr/8oksI8m6g3XNWEaQRGsqSfvQrmao=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    wrapQtAppsHook
+    qttools
+  ];
+
+  buildInputs = [
+    kcolorpicker
+    kimageannotator
+    qtsvg
+    qtx11extras
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ksnip/ksnip";
+    description = "Cross-platform screenshot tool with many annotation features";
+    longDescription = ''
+      Features:
+
+      - Supports Linux (X11, Plasma Wayland, GNOME Wayland and xdg-desktop-portal Wayland), Windows and macOS.
+      - Screenshot of a custom rectangular area that can be drawn with mouse cursor.
+      - Screenshot of last selected rectangular area without selecting again.
+      - Screenshot of the screen/monitor where the mouse cursor is currently located.
+      - Screenshot of full-screen, including all screens/monitors.
+      - Screenshot of window that currently has focus.
+      - Screenshot of window under mouse cursor.
+      - Screenshot with or without mouse cursor.
+      - Capture mouse cursor as annotation item that can be moved and deleted.
+      - Customizable capture delay for all capture options.
+      - Upload screenshots directly to imgur.com in anonymous or user mode.
+      - Upload screenshots via custom user defined scripts.
+      - Command-line support, for capturing screenshots and saving to default location, filename and format.
+      - Filename wildcards for Year ($Y), Month ($M), Day ($D), Time ($T) and Counter (multiple # characters for number with zero-leading padding).
+      - Print screenshot or save it to PDF/PS.
+      - Annotate screenshots with pen, marker, rectangles, ellipses, texts and other tools.
+      - Annotate screenshots with stickers and add custom stickers.
+      - Obfuscate image regions with blur and pixelate.
+      - Add effects to image (Drop Shadow, Grayscale, invert color or Border).
+      - Add watermarks to captured images.
+      - Global hotkeys for capturing screenshots (currently only for Windows and X11).
+      - Tabs for screenshots and images.
+      - Open existing images via dialog, drag-and-drop or paste from clipboard.
+      - Run as single instance application (secondary instances send cli parameter to primary instance).
+      - Pin screenshots in frameless windows that stay atop other windows.
+      - User-defined actions for taking screenshot and post-processing.
+      - Many configuration options.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ x3ro ];
+    platforms = platforms.linux;
+    mainProgram = "ksnip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/kt/default.nix b/nixpkgs/pkgs/tools/misc/kt/default.nix
new file mode 100644
index 000000000000..2e0bfbc1b102
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/kt/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "kt";
+  version = "13.1.0";
+
+  src = fetchFromGitHub {
+    owner = "fgeller";
+    repo = "kt";
+    rev = "v${version}";
+    sha256 = "sha256-1UGsiMMmAyIQZ62hNIi0uzyX2uNL03EWupIazjznqDc=";
+  };
+
+  vendorHash = "sha256-PeNpDro6G78KLN6B2CDhsTKamRTWQyxPJYWuuv6sUyw=";
+
+  ldflags = [ "-s" "-w" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Kafka command line tool";
+    homepage = "https://github.com/fgeller/kt";
+    maintainers = with maintainers; [ utdemir ];
+    platforms = with platforms; unix;
+    license = licenses.mit;
+    mainProgram = "kt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/latex2html/default.nix b/nixpkgs/pkgs/tools/misc/latex2html/default.nix
new file mode 100644
index 000000000000..f3cca8872b23
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/latex2html/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper
+, ghostscript, netpbm, perl }:
+# TODO: withTex
+
+stdenv.mkDerivation rec {
+  pname = "latex2html";
+  version = "2024";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-MF+S6x+k+lkutJQ60HCxFpdR96K3AFZcP/4guK9RvsA=";
+  };
+
+  buildInputs = [ ghostscript netpbm perl ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  configurePhase = ''
+    ./configure \
+      --prefix="$out" \
+      --without-mktexlsr \
+      --with-texpath=$out/share/texmf/tex/latex/html
+  '';
+
+  postInstall = ''
+    for p in $out/bin/{latex2html,pstoimg}; do \
+      wrapProgram $p --add-flags '--tmp="''${TMPDIR:-/tmp}"'
+    done
+  '';
+
+  meta = with lib; {
+    description = "LaTeX-to-HTML translator";
+    longDescription = ''
+      A Perl program that translates LaTeX into HTML (HyperText Markup
+      Language), optionally creating separate HTML files corresponding to each
+      unit (e.g., section) of the document. LaTeX2HTML proceeds by interpreting
+      LaTeX (to the best of its abilities). It contains definitions from a wide
+      variety of classes and packages, and users may add further definitions by
+      writing Perl scripts that provide information about class/package
+      commands.
+    '';
+
+    homepage = "https://www.ctan.org/pkg/latex2html";
+
+    license = licenses.gpl2;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ yurrriq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lavat/default.nix b/nixpkgs/pkgs/tools/misc/lavat/default.nix
new file mode 100644
index 000000000000..6cd38f6f34a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lavat/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+,
+}:
+let
+  version = "2.1.0";
+in
+stdenv.mkDerivation {
+  pname = "lavat";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "AngelJumbo";
+    repo = "lavat";
+    rev = "v${version}";
+    hash = "sha256-wGtuYgZS03gXYgdNdugGu/UlROQTrQ3C1inJ/aTUBKk=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp lavat $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Lava lamp simulation in the terminal";
+    longDescription = ''
+      Lavat puts ascii metaballs in your terminal to make it look a bit like a
+      lava lamp.
+
+      Lavat contains various options, including those to change the color and
+      speed of the metaballs. For a full list, run `lavat -h`
+    '';
+    maintainers = [ maintainers.minion3665 ];
+    license = licenses.mit;
+    homepage = "https://github.com/AngelJumbo/lavat";
+    platforms = platforms.all;
+    mainProgram = "lavat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lazycli/default.nix b/nixpkgs/pkgs/tools/misc/lazycli/default.nix
new file mode 100644
index 000000000000..70b5f345690e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lazycli/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lazycli";
+  version = "0.1.15";
+
+  src = fetchFromGitHub {
+    owner = "jesseduffield";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1qq167hc7pp9l0m40ysphfljakmm8hjjnhpldvb0kbc825h0z8z5";
+  };
+
+  cargoSha256 = "sha256-1BIUXepR7ppEkTLDOCZz9RBv+RazNMXnCnH1rvzVFgs=";
+
+  checkFlags = [
+    # currently broken: https://github.com/jesseduffield/lazycli/pull/20
+    "--skip=command::test_run_command_fail"
+  ];
+
+  meta = with lib; {
+    description = "A tool to static turn CLI commands into TUIs";
+    homepage = "https://github.com/jesseduffield/lazycli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lazycli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lazydocker/default.nix b/nixpkgs/pkgs/tools/misc/lazydocker/default.nix
new file mode 100644
index 000000000000..59a6ad16ce9d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lazydocker/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, lazydocker, testers }:
+
+buildGoModule rec {
+  pname = "lazydocker";
+  version = "0.23.1";
+
+  src = fetchFromGitHub {
+    owner = "jesseduffield";
+    repo = "lazydocker";
+    rev = "v${version}";
+    sha256 = "sha256-nW3eaSisXLqoWZ+5YLLCfC1k4lTXWd5ZqY2xTM/I0PY=";
+  };
+
+  vendorHash = null;
+
+  postPatch = ''
+    rm -f pkg/config/app_config_test.go
+  '';
+
+  excludedPackages = [ "scripts" "test/printrandom" ];
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = lazydocker;
+  };
+
+  meta = with lib; {
+    description = "A simple terminal UI for both docker and docker-compose";
+    homepage = "https://github.com/jesseduffield/lazydocker";
+    license = licenses.mit;
+    maintainers = with maintainers; [ das-g Br1ght0ne ];
+    mainProgram = "lazydocker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch b/nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch
new file mode 100644
index 000000000000..d388467559a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lbdb/add-methods-to-rc.patch
@@ -0,0 +1,11 @@
+--- a/lbdb.rc.in
++++ b/lbdb.rc.in
+@@ -40,7 +40,7 @@
+ # - m_vcf        search a vcard (according to RFC2426) file.
+ # - m_khard      search a CardDAV address book via khard
+ 
+-METHODS="m_inmail m_passwd m_finger"
++METHODS="@MODULES@"
+ 
+ 
+ #
diff --git a/nixpkgs/pkgs/tools/misc/lbdb/default.nix b/nixpkgs/pkgs/tools/misc/lbdb/default.nix
new file mode 100644
index 000000000000..43dab4772d5f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lbdb/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, perl
+, bsd-finger
+, withAbook ? true, abook
+, withGnupg ? true, gnupg
+, withGoobook ? true, goobook
+, withKhard ? true, khard
+, withMu ? true, mu
+}:
+
+let
+  perl' = perl.withPackages (p: with p; [
+    AuthenSASL
+    ConvertASN1
+    IOSocketSSL
+    perlldap
+  ]);
+in
+stdenv.mkDerivation rec {
+  pname = "lbdb";
+  version = "0.48.1";
+
+  src = fetchurl {
+    url = "https://www.spinnaker.de/lbdb/download/lbdb_${version}.tar.gz";
+    sha256 = "1gr5l2fr9qbdccga8bhsrpvz6jxigvfkdxrln9wyf2xpps5cdjxh";
+  };
+
+  buildInputs = [ perl' ]
+    ++ lib.optional (!stdenv.isDarwin) bsd-finger
+    ++ lib.optional withAbook abook
+    ++ lib.optional withGnupg gnupg
+    ++ lib.optional withGoobook goobook
+    ++ lib.optional withKhard khard
+    ++ lib.optional withMu mu;
+
+  configureFlags = [ ]
+    ++ lib.optional withAbook "--with-abook"
+    ++ lib.optional withGnupg "--with-gpg"
+    ++ lib.optional withGoobook "--with-goobook"
+    ++ lib.optional withKhard "--with-khard"
+    ++ lib.optional withMu "--with-mu";
+
+  patches = [
+    ./add-methods-to-rc.patch
+    # fix undefined exec_prefix. Remove with the next release
+    (fetchpatch {
+      url = "https://github.com/RolandRosenfeld/lbdb/commit/60b7bae255011f59212d96adfbded459d6a27129.patch";
+      sha256 = "129zg086glmlalrg395jq8ljcp787dl3rxjf9v7apsd8mqfdkl2v";
+      excludes = [ "debian/changelog" ];
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.spinnaker.de/lbdb/";
+    description = "The Little Brother's Database";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ kaiha bfortz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lcdf-typetools/default.nix b/nixpkgs/pkgs/tools/misc/lcdf-typetools/default.nix
new file mode 100644
index 000000000000..eaa2ce01347b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lcdf-typetools/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "lcdf-typetools";
+  version = "2.110";
+
+  src = fetchFromGitHub {
+    owner = "kohler";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hoILYYCef2R1v6aN9V+FoYnXYaKsnGN2jlpb/QFAN/w=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  configureFlags = [ "--without-kpathsea" ];
+
+  meta = with lib; {
+    description = "Utilities for manipulating OpenType, PostScript Type 1, and Multiple Master fonts";
+    homepage = "https://www.lcdf.org/type";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ldapvi/default.nix b/nixpkgs/pkgs/tools/misc/ldapvi/default.nix
new file mode 100644
index 000000000000..4be3b9e9024c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ldapvi/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchgit, openldap, openssl, popt, glib, libxcrypt, ncurses, readline, pkg-config, cyrus_sasl, autoconf, automake }:
+
+stdenv.mkDerivation {
+  pname = "ldapvi";
+  version = "unstable-2012-04-28";
+
+  # use latest git, it includes some important patches since 2007 release
+  src = fetchgit {
+    url = "http://www.lichteblau.com/git/ldapvi.git";
+    rev = "f1d42bad66cc4623d1ff21fbd5dddbf5009d3e40";
+    sha256 = "3ef3103030ecb04d7fe80180e3fd490377cf81fb2af96782323fddabc3225030";
+  };
+
+  nativeBuildInputs = [ pkg-config autoconf automake ];
+  buildInputs = [ openldap openssl popt glib libxcrypt ncurses readline cyrus_sasl ];
+
+  preConfigure = ''
+    cd ldapvi
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "Interactive LDAP client for Unix terminals";
+    longDescription = ''
+      ldapvi is an interactive LDAP client for Unix terminals. Using it, you
+      can update LDAP entries with a text editor.
+    '';
+    homepage = "http://www.lichteblau.com/ldapvi/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ];
+    platforms = lib.platforms.linux;
+    mainProgram = "ldapvi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ldmtool/default.nix b/nixpkgs/pkgs/tools/misc/ldmtool/default.nix
new file mode 100644
index 000000000000..6a1527ea8fe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ldmtool/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, gtk-doc, pkg-config, libuuid,
+  libtool, readline, gobject-introspection, json-glib, lvm2, libxslt, docbook_xsl
+, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "ldmtool";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "mdbooth";
+    repo = "libldm";
+    rev = "libldm-${version}";
+    sha256 = "1fy5wbmk8kwl86lzswq0d1z2j5y023qzfm2ppm8knzv9c47kniqk";
+  };
+
+  patches = [
+    # Remove useage of deprecrated G_PARAM_PRIVATE
+    (fetchpatch {
+      url = "https://github.com/mdbooth/libldm/commit/ee1b37a034038f09d61b121cc8b3651024acc46f.patch";
+      sha256 = "02y34kbcpcpffvy1n9yqngvdldmxmvdkha1v2xjqvrnclanpigcp";
+    })
+  ];
+
+  preConfigure = ''
+    sed -i docs/reference/ldmtool/Makefile.am \
+      -e 's|-nonet http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl|--nonet ${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl|g'
+  '';
+
+  # glib-2.62 deprecations
+  env.NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  configureScript = "sh autogen.sh";
+
+  nativeBuildInputs = [ pkg-config autoconf automake gobject-introspection ];
+  buildInputs = [ gtk-doc lvm2 libxslt.bin
+    libtool readline json-glib libuuid
+  ];
+
+  meta = with lib; {
+    description = "Tool and library for managing Microsoft Windows Dynamic Disks";
+    homepage = "https://github.com/mdbooth/libldm";
+    maintainers = with maintainers; [ jensbin ];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    mainProgram = "ldmtool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/leanify/default.nix b/nixpkgs/pkgs/tools/misc/leanify/default.nix
new file mode 100644
index 000000000000..86aef217e110
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/leanify/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libiconv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "leanify";
+  version = "unstable-2023-12-17";
+
+  src = fetchFromGitHub {
+    owner = "JayXon";
+    repo = "Leanify";
+    rev = "9daa4303cdc03f6b90b72c369e6377c6beb75c39";
+    hash = "sha256-fLazKCQnOT3bN3Kz25Q80RLk54EU5U6HCf6kPLcXn9c=";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile \
+      --replace-fail "-flto" "" \
+      --replace-fail "lib/LZMA/Alloc.o" "lib/LZMA/CpuArch.o lib/LZMA/Alloc.o" \
+      --replace-quiet "-Werror" ""
+  '';
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp leanify $out/bin/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Lightweight lossless file minifier/optimizer";
+    longDescription = ''
+      Leanify is a lightweight lossless file minifier/optimizer.
+      It removes unnecessary data (debug information, comments, metadata, etc.) and recompress the file to reduce file size.
+      It will not reduce image quality at all.
+    '';
+    homepage = "https://github.com/JayXon/Leanify";
+    changelog = "https://github.com/JayXon/Leanify/blob/master/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = [ maintainers.mynacol ];
+    platforms = platforms.all;
+    mainProgram = "leanify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ledit/default.nix b/nixpkgs/pkgs/tools/misc/ledit/default.nix
new file mode 100644
index 000000000000..e6470ea3fb8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ledit/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, ocamlPackages }:
+
+stdenv.mkDerivation {
+  pname = "ledit";
+  version = "2.06";
+
+  src = fetchFromGitHub {
+    owner = "chetmurthy";
+    repo = "ledit";
+    rev = "3dbd668d9c69aab5ccd61f6b906c14122ae3271d";
+    hash = "sha256-9+isvwOw5Iw5OToztqZ5PiQPj6Pxl2ZqAC7UMF+tCM4=";
+  };
+
+  preBuild = ''
+    substituteInPlace Makefile --replace /bin/rm rm --replace /usr/local/ $out/
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = with ocamlPackages; [
+    ocaml
+    findlib
+    camlp5
+  ];
+
+  buildInputs = with ocamlPackages; [
+    camlp5
+    camlp-streams
+  ];
+
+
+  meta = with lib; {
+    homepage = "http://pauillac.inria.fr/~ddr/ledit/";
+    description = "A line editor, allowing to use shell commands with control characters like in emacs";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.delta ];
+    mainProgram = "ledit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lektor/default.nix b/nixpkgs/pkgs/tools/misc/lektor/default.nix
new file mode 100644
index 000000000000..aef55ffb9b1f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lektor/default.nix
@@ -0,0 +1,105 @@
+{ lib
+, fetchFromGitHub
+, fetchNpmDeps
+, fetchPypi
+, nodejs
+, npmHooks
+, python3
+}:
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      mistune = super.mistune.overridePythonAttrs (old: rec {
+        version = "2.0.5";
+        src = fetchPypi {
+          inherit (old) pname;
+          inherit version;
+          hash = "sha256-AkYRPLJJLbh1xr5Wl0p8iTMzvybNkokchfYxUc7gnTQ=";
+        };
+      });
+    };
+  };
+in
+python.pkgs.buildPythonApplication rec {
+  pname = "lektor";
+  version = "3.4.0b8";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "lektor";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-FtmRW4AS11zAX2jvGY8XTsPrN3mhHkIWoFY7sXmqG/U=";
+  };
+
+  npmDeps = fetchNpmDeps {
+    src = "${src}/frontend";
+    hash = "sha256-Z7LP9rrVSzKoLITUarsnRbrhIw7W7TZSZUgV/OT+m0M=";
+  };
+
+  npmRoot = "frontend";
+
+  nativeBuildInputs = [
+    python.pkgs.hatch-vcs
+    python.pkgs.hatchling
+    nodejs
+    npmHooks.npmConfigHook
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    babel
+    click
+    exifread
+    filetype
+    flask
+    inifile
+    jinja2
+    markupsafe
+    marshmallow
+    marshmallow-dataclass
+    mistune
+    pillow
+    pip
+    python-slugify
+    requests
+    watchfiles
+    werkzeug
+  ];
+
+  nativeCheckInputs = with python.pkgs; [
+    pytest-click
+    pytest-mock
+    pytestCheckHook
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "werkzeug"
+  ];
+
+  postInstall = ''
+    cp -r lektor/translations "$out/${python.sitePackages}/lektor/"
+  '';
+
+  pythonImportsCheck = [
+    "lektor"
+  ];
+
+  disabledTests = [
+    # Tests require network access
+    "test_path_installed_plugin_is_none"
+    "test_VirtualEnv_run_pip_install"
+    # expects FHS paths
+    "test_VirtualEnv_executable"
+  ];
+
+  meta = with lib; {
+    description = "A static content management system";
+    homepage = "https://www.getlektor.com/";
+    changelog = "https://github.com/lektor/lektor/blob/v${version}/CHANGES.md";
+    license = licenses.bsd0;
+    mainProgram = "lektor";
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lemmeknow/default.nix b/nixpkgs/pkgs/tools/misc/lemmeknow/default.nix
new file mode 100644
index 000000000000..aa5c3786831a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lemmeknow/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lemmeknow";
+  version = "0.8.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-Q82tP4xNWAooFjHeJCFmuULnWlFbgca/9Y2lm8rVXKs=";
+  };
+
+  cargoHash = "sha256-slV9RxdFCEx1El7hngWGv+5CqDSQsU2ACF2nWQLOTU0=";
+
+  meta = with lib; {
+    description = "A tool to identify anything";
+    homepage = "https://github.com/swanandx/lemmeknow";
+    changelog = "https://github.com/swanandx/lemmeknow/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda Br1ght0ne ];
+    mainProgram = "lemmeknow";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lemmy-help/default.nix b/nixpkgs/pkgs/tools/misc/lemmy-help/default.nix
new file mode 100644
index 000000000000..8c0f7110226e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lemmy-help/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lemmy-help";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "numToStr";
+    repo = "lemmy-help";
+    rev = "v${version}";
+    sha256 = "sha256-HcIvHuuzQj4HsRJyn1A9nXiGDGAcz1nqTsC7sROt7OI=";
+  };
+
+  buildFeatures = [ "cli" ];
+
+  cargoSha256 = "sha256-BCwpiBPvnLgbpOaXgUK2EDXnT8d4jo7aqgM6uwl80eg=";
+
+  meta = with lib; {
+    description = "A CLI for generating vim help docs from emmylua comments";
+    longDescription = ''
+      `lemmy-help` is an emmylua parser as well as a CLI which takes that parsed tree and converts it into vim help docs.
+    '';
+    homepage = "https://github.com/numToStr/lemmy-help";
+    changelog = "https://github.com/numToStr/lemmy-help/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lemmy-help";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lerpn/default.nix b/nixpkgs/pkgs/tools/misc/lerpn/default.nix
new file mode 100644
index 000000000000..8e35a5b0b107
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lerpn/default.nix
@@ -0,0 +1,34 @@
+{ python3
+, lib
+, fetchFromGitea
+}:
+
+python3.pkgs.buildPythonApplication {
+  pname = "lerpn";
+  version = "unstable-2023-06-09";
+
+  src = fetchFromGitea {
+    domain = "gitea.alexisvl.rocks";
+    owner = "alexisvl";
+    repo = "lerpn";
+    rev = "b65e56cfbbb38f8200e7b0c18b3a585ae768c6e2";
+    hash = "sha256-4xqBHcOWHAvQtXS9CJWTGTdE4SGHxjghZY+/KPUgX70=";
+  };
+
+  checkPhase = ''
+    runHook preCheck
+    patchShebangs test
+
+    substituteInPlace test --replace "#raise TestFailedException()" "sys.exit(1)"
+    ./test
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitea.alexisvl.rocks/alexisvl/lerpn";
+    description = "Curses RPN calculator written in straight Python";
+    maintainers = with maintainers; [ ckie ];
+    license = licenses.gpl3Plus;
+    mainProgram = "lerpn";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lesspipe/default.nix b/nixpkgs/pkgs/tools/misc/lesspipe/default.nix
new file mode 100644
index 000000000000..5bc3f97c3c78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lesspipe/default.nix
@@ -0,0 +1,128 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, perl
+, procps
+, bash
+
+# shell referenced dependencies
+, resholve
+, binutils-unwrapped
+, file
+, gnugrep
+, coreutils
+, gnused
+, gnutar
+, iconv
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lesspipe";
+  version = "2.11";
+
+  src = fetchFromGitHub {
+    owner = "wofr06";
+    repo = "lesspipe";
+    rev = "v${version}";
+    hash = "sha256-jJrKiRdrargk0JzcPWxBZGyOpMfTIONHG8HNRecazVo=";
+  };
+
+  nativeBuildInputs = [ perl makeWrapper ];
+  buildInputs = [ perl bash ];
+  strictDeps = true;
+
+  postPatch = ''
+    patchShebangs --build configure
+    substituteInPlace configure --replace '/etc/bash_completion.d' '/share/bash-completion/completions'
+  '';
+
+  configureFlags = [ "--shell=${bash}/bin/bash" "--prefix=/" ];
+  configurePlatforms = [ ];
+
+  dontBuild = true;
+
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postInstall = ''
+    # resholve doesn't see strings in an array definition
+    substituteInPlace $out/bin/lesspipe.sh --replace 'nodash strings' "nodash ${binutils-unwrapped}/bin/strings"
+
+    ${resholve.phraseSolution "lesspipe.sh" {
+      scripts = [ "bin/lesspipe.sh" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = [
+        coreutils
+        file
+        gnugrep
+        gnused
+        gnutar
+        iconv
+        procps
+        ncurses
+      ];
+      keep = [ "$prog" "$c1" "$c2" "$c3" "$c4" "$c5" "$cmd" "$colorizer" "$HOME" ];
+      fake = {
+        # script guards usage behind has_cmd test function, it's safe to leave these external and optional
+        external = [
+          "cpio" "isoinfo" "cabextract" "bsdtar" "rpm2cpio" "bsdtar" "unzip" "ar" "unrar" "rar" "7zr" "7za" "isoinfo"
+          "gzip" "bzip2" "lzip" "lzma" "xz" "brotli" "compress" "zstd" "lz4"
+          "archive_color" "bat" "batcat" "pygmentize" "source-highlight" "vimcolor" "code2color"
+
+          "w3m" "lynx" "elinks" "html2text" "dtc" "pdftotext" "pdftohtml" "pdfinfo" "ps2ascii" "procyon" "ccze"
+          "mdcat" "pandoc" "docx2txt" "libreoffice" "pptx2md" "mdcat" "xlscat" "odt2txt" "wvText" "antiword" "catdoc"
+          "broken_catppt" "sxw2txt" "groff" "mandoc" "unrtf" "dvi2tty" "pod2text" "perldoc" "h5dump" "ncdump" "matdump"
+          "djvutxt" "openssl" "gpg" "plistutil" "plutil" "id3v2" "csvlook" "jq" "zlib-flate" "lessfilter"
+        ] ++ lib.optional stdenv.isDarwin [
+          # resholve only identifies this on darwin
+          # call site is gaurded by || so it's safe to leave dynamic
+          "locale"
+        ];
+        builtin = [ "setopt" ];
+      };
+      execer = [
+        "cannot:${iconv}/bin/iconv"
+      ];
+    }}
+    ${resholve.phraseSolution "lesscomplete" {
+      scripts = [ "bin/lesscomplete" ];
+      interpreter = "${bash}/bin/bash";
+      inputs = [
+        coreutils
+        file
+        gnugrep
+        gnused
+        gnutar
+      ];
+      keep = [ "$prog" "$c1" "$c2" "$c3" "$c4" "$c5" "$cmd" ];
+      fake = {
+        # script guards usage behind has_cmd test function, it's safe to leave these external and optional
+        external = [
+          "cpio" "isoinfo" "cabextract" "bsdtar" "rpm2cpio" "bsdtar" "unzip" "ar" "unrar" "rar" "7zr" "7za" "isoinfo"
+          "gzip" "bzip2" "lzip" "lzma" "xz" "brotli" "compress" "zstd" "lz4"
+        ];
+        builtin = [ "setopt" ];
+      };
+    }}
+  '';
+
+  meta = with lib; {
+    description = "A preprocessor for less";
+    longDescription = ''
+      Usually lesspipe.sh is called as an input filter to less. With the help
+      of that filter less will display the uncompressed contents of compressed
+      (gzip, bzip2, compress, rar, 7-zip, lzip, xz or lzma) files. For files
+      containing archives and directories, a table of contents will be
+      displayed (e.g tar, ar, rar, jar, rpm and deb formats). Other supported
+      formats include nroff, pdf, ps, dvi, shared library, MS word, OASIS
+      (e.g. Openoffice), NetCDF, html, mp3, jpg, png, iso images, MacOSX bom,
+      plist and archive formats, perl storable data and gpg encrypted files.
+      This does require additional helper programs being installed.
+    '';
+    homepage = "https://github.com/wofr06/lesspipe";
+    platforms = platforms.all;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.martijnvermaat ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix
new file mode 100644
index 000000000000..4e997c65565a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-client.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, boost, libbitcoin, libbitcoin-protocol }:
+
+stdenv.mkDerivation rec {
+  pname = "libbitcoin-client";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-5qbxixaozHFsOcBxnuGEfNJyGL8UaYCOPwPakfc0bAg=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  propagatedBuildInputs = [ libbitcoin libbitcoin-protocol ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with lib; {
+    description = "Bitcoin client query library";
+    homepage = "https://github.com/libbitcoin/libbitcoin-client";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
new file mode 100644
index 000000000000..f14c19e0e474
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, boost, libbitcoin-client, libbitcoin-network }:
+
+stdenv.mkDerivation rec {
+  pname = "libbitcoin-explorer";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-NUAtjrfRbZg5ewQo4PZ1HEoG8GRrsPcNb78UYMHqdyo=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libbitcoin-client libbitcoin-network ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+    "--with-bash-completiondir=$out/share/bash-completion/completions"
+  ];
+
+  meta = with lib; {
+    description = "Bitcoin command line tool";
+    mainProgram = "bx";
+    homepage = "https://github.com/libbitcoin/libbitcoin-explorer";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ asymmetric ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix
new file mode 100644
index 000000000000..bc4186c9b8e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-network.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, boost, libbitcoin, zeromq }:
+
+stdenv.mkDerivation rec {
+  pname = "libbitcoin-network";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zDT92bvA779mzTodpKugCoxapB6vY2jCMSGZEkJLTXQ=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libbitcoin zeromq ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with lib; {
+    description = "Bitcoin P2P Network Library";
+    homepage = "https://libbitcoin.info/";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ asymmetric ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix
new file mode 100644
index 000000000000..6014c6c5c779
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin-protocol.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, boost, libbitcoin, secp256k1, zeromq }:
+
+stdenv.mkDerivation rec {
+  pname = "libbitcoin-protocol";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "libbitcoin";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-xf0qQQnZ8h6ent1sgkVTo55+9drZM8Zbx0deYZnLBho=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libbitcoin secp256k1 ];
+  propagatedBuildInputs = [ zeromq ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with lib; {
+    description = "Bitcoin Blockchain Query Protocol";
+    homepage = "https://libbitcoin.info/";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ asymmetric ];
+
+    # AGPL with a lesser clause
+    license = licenses.agpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix
new file mode 100644
index 000000000000..cebd5090bfe5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libbitcoin/libbitcoin.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, autoreconfHook
+, boost, secp256k1 }:
+
+stdenv.mkDerivation rec {
+  pname = "libbitcoin";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7fxj2hnuGRUS4QSQ1w0s3looe9pMvE2U50/yhNyBMf0=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  propagatedBuildInputs = [ secp256k1 ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-tests=no"
+    "--with-boost=${boost.dev}"
+    "--with-boost-libdir=${boost.out}/lib"
+  ];
+
+  meta = with lib; {
+    description = "C++ library for building bitcoin applications";
+    homepage = "https://libbitcoin.info/";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ ];
+    # AGPL with a lesser clause
+    license = licenses.agpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libgen-cli/default.nix b/nixpkgs/pkgs/tools/misc/libgen-cli/default.nix
new file mode 100644
index 000000000000..45192447bdca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libgen-cli/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "libgen-cli";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "ciehanski";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-EicXsxAvVe/umpcOn4dVlTexaAol1qYPg/h5MU5dysM=";
+  };
+
+  vendorHash = "sha256-q1EPjnVq382gEKVmGKWYgKRcU6Y0rm1Et5ExzOmyeo4=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installShellCompletion --cmd libgen-cli \
+      --bash <($out/bin/libgen-cli completion bash) \
+      --fish <($out/bin/libgen-cli completion fish) \
+      --zsh <($out/bin/libgen-cli completion zsh)
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ciehanski/libgen-cli";
+    description =
+      "A CLI tool used to access the Library Genesis dataset; written in Go";
+    longDescription = ''
+      libgen-cli is a command line interface application which allows users to
+      quickly query the Library Genesis dataset and download any of its
+      contents.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zaninime ];
+    mainProgram = "libgen-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/libpff/default.nix b/nixpkgs/pkgs/tools/misc/libpff/default.nix
new file mode 100644
index 000000000000..62ee7c8f447c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/libpff/default.nix
@@ -0,0 +1,28 @@
+{ stdenv
+, lib
+, fetchzip
+, pkg-config
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "libpff";
+  version = "20211114";
+
+  src = fetchzip {
+    url = "https://github.com/libyal/libpff/releases/download/${version}/libpff-alpha-${version}.tar.gz";
+    sha256 = "sha256-UmGRBgi78nDSuuOXi/WmODojWU5AbQGKNQwLseoh714=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  outputs = [ "bin" "dev" "out" ];
+
+  meta = {
+    description = "Library and tools to access the Personal Folder File (PFF) and the Offline Folder File (OFF) format";
+    homepage = "https://github.com/libyal/libpff";
+    downloadPage = "https://github.com/libyal/libpff/releases";
+    changelog = "https://github.com/libyal/libpff/blob/${version}/ChangeLog";
+    license = lib.licenses.lgpl3Only;
+    maintainers = with lib.maintainers; [ hacker1024 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/librespeed-cli/default.nix b/nixpkgs/pkgs/tools/misc/librespeed-cli/default.nix
new file mode 100644
index 000000000000..8751d9ab43d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/librespeed-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "librespeed-cli";
+  version = "1.0.10";
+
+  src = fetchFromGitHub {
+    owner = "librespeed";
+    repo = "speedtest-cli";
+    rev = "v${version}";
+    sha256 = "sha256-LFGlKYWUaHi/byoRPD6zsdr0U5r0zWxxRa2NJNB2yb8=";
+  };
+
+  vendorHash = "sha256-psZyyySpY06J+ji+9uHUtX7Ks1hzZC3zINszYP75NfQ=";
+
+  # Tests have additional requirements
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command line client for LibreSpeed";
+    homepage = "https://github.com/librespeed/speedtest-cli";
+    license = with licenses; [ lgpl3Only ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "speedtest-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lice/default.nix b/nixpkgs/pkgs/tools/misc/lice/default.nix
new file mode 100644
index 000000000000..f873907c51ef
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lice/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonPackage, fetchPypi , setuptools, pytestCheckHook }:
+
+buildPythonPackage rec {
+  pname = "lice";
+  version = "0.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "0skyyirbidknfdzdvsjga8zb4ar6xpd5ilvz11dfm2a9yxh3d59d";
+  };
+
+  propagatedBuildInputs = [ setuptools ];
+
+  nativeCheckInputs = [ pytestCheckHook ];
+  meta = with lib; {
+    description = "Print license based on selection and user options";
+    homepage = "https://github.com/licenses/lice";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ swflint ];
+    platforms = platforms.unix;
+    mainProgram = "lice";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/license-cli/default.nix b/nixpkgs/pkgs/tools/misc/license-cli/default.nix
new file mode 100644
index 000000000000..bf3de443e302
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/license-cli/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, fetchFromSourcehut
+, rustPlatform
+, installShellFiles
+, scdoc
+, makeWrapper
+
+# Script dependencies.
+, fzf
+, wl-clipboard
+, xclip
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "license-cli";
+  version = "3.1.0";
+
+  src = fetchFromSourcehut {
+    owner = "~zethra";
+    repo = "license";
+    rev = version;
+    hash = "sha256-OGS26mE5rjxlZOaBWhYc7C8aM3Lq2xX0f31LgckjJF8=";
+  };
+
+  cargoHash = "sha256-Zj9t/e6QhiOxU8mlVRBKEbviSTKXM4WQ3lqtoCcMbMI=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  preInstall = ''
+    ${scdoc}/bin/scdoc < doc/license.scd > license.1
+  '';
+
+  postInstall = ''
+    installShellCompletion completions/license.{bash,fish}
+    installShellCompletion --zsh completions/_license
+    installManPage ./license.1
+
+    install -Dm0755 ./scripts/set-license -t $out/bin
+    wrapProgram $out/bin/set-license \
+      --prefix PATH : "$out/bin" \
+      --prefix PATH : ${lib.makeBinPath [ fzf ]}
+
+    install -Dm0755 ./scripts/copy-header -t $out/bin
+    wrapProgram $out/bin/copy-header \
+      --prefix PATH : "$out/bin" \
+      --prefix PATH : ${lib.makeBinPath [ wl-clipboard xclip ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~zethra/license";
+    description = "Command-line tool to easily add license to your project";
+    license = licenses.mpl20;
+    mainProgram = "license";
+    maintainers = with maintainers; [ foo-dogsquared ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/license-generator/default.nix b/nixpkgs/pkgs/tools/misc/license-generator/default.nix
new file mode 100644
index 000000000000..2aa2235e7c3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/license-generator/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchCrate, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "license-generator";
+  version = "1.0.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-ijA/AqLeQ9/XLeCriWNUA6R3iKyq+QPDH5twSvqFmEA=";
+  };
+
+  cargoHash = "sha256-FfkCV4anPHElGGIOYDSzHam5ohVGpOgtu/nM0aw9HzU=";
+
+  meta = with lib; {
+    description = "Command-line tool for generating license files";
+    homepage = "https://github.com/azu/license-generator";
+    license = licenses.mit;
+    maintainers = with maintainers; [ loicreynier ];
+    mainProgram = "license-generator";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/licensor/default.nix b/nixpkgs/pkgs/tools/misc/licensor/default.nix
new file mode 100644
index 000000000000..2972eb8bbb61
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/licensor/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "licensor";
+  version = "unstable-2021-02-03";
+
+  src = fetchFromGitHub {
+    owner = "raftario";
+    repo = pname;
+    rev = "1897882a708ec6ed65a9569ae0e07d6ea576c652";
+    sha256 = "0x0lkfrj7jka0p6nx6i9syz0bnzya5z9np9cw09zm1c9njv9mm32";
+  };
+
+  cargoSha256 = "1h66d1brx441bg7vzbqdish4avgmc6h7rrkw2qf1siwmplwqqhw0";
+
+  # https://github.com/raftario/licensor/issues/67
+  postPatch = ''
+    sed "/Copyright (c) 2021/s/2021/$(date +%Y)/" -i tests/integration.rs
+  '';
+
+  meta = with lib; {
+    description = "Write licenses to stdout";
+    homepage = "https://github.com/raftario/licensor";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "licensor";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lifecycled/default.nix b/nixpkgs/pkgs/tools/misc/lifecycled/default.nix
new file mode 100644
index 000000000000..728424f8d89e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lifecycled/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+buildGoModule rec {
+  pname = "lifecycled";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "buildkite";
+    repo = "lifecycled";
+    rev = "v${version}";
+    sha256 = "sha256-zskN2T0+1xZPjppggeGpPFuQ8/AgPNyN77F33rDoghc=";
+  };
+
+  vendorHash = "sha256-q5wYKSLHRzL+UGn29kr8+mUupOPR1zohTscbzjMRCS0=";
+
+  postInstall = ''
+    mkdir -p $out/lib/systemd/system
+    substitute init/systemd/lifecycled.unit $out/lib/systemd/system/lifecycled.service \
+      --replace /usr/bin/lifecycled $out/bin/lifecycled
+  '';
+
+  meta = with lib; {
+    description = "A daemon for responding to AWS AutoScaling Lifecycle Hooks";
+    homepage = "https://github.com/buildkite/lifecycled/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cole-h grahamc ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/Cargo.lock b/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/Cargo.lock
new file mode 100644
index 000000000000..daaa1802698f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/Cargo.lock
@@ -0,0 +1,1212 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "anstream"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f58811cfac344940f1a400b6e6231ce35171f614f26439e80f8c1465c5cc0c"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58f54d10c6dfa51283a066ceab3ec1ab78d13fae00aa49243a45e4571fb79dfd"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "bluez-async"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce7d4413c940e8e3cb6afc122d3f4a07096aca259d286781128683fc9f39d9b"
+dependencies = [
+ "async-trait",
+ "bitflags 2.4.0",
+ "bluez-generated",
+ "dbus",
+ "dbus-tokio",
+ "futures",
+ "itertools",
+ "log",
+ "serde",
+ "serde-xml-rs",
+ "thiserror",
+ "tokio",
+ "uuid",
+]
+
+[[package]]
+name = "bluez-generated"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d1c659dbc82f0b8ca75606c91a371e763589b7f6acf36858eeed0c705afe367"
+dependencies = [
+ "dbus",
+]
+
+[[package]]
+name = "btleplug"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1ad24f1a9171b691da81fd0a0ae6859ef471979a4d68372515bafc2f4586df1"
+dependencies = [
+ "async-trait",
+ "bitflags 1.3.2",
+ "bluez-async",
+ "cocoa",
+ "dashmap",
+ "dbus",
+ "futures",
+ "jni",
+ "jni-utils",
+ "libc",
+ "log",
+ "objc",
+ "once_cell",
+ "serde",
+ "serde_bytes",
+ "static_assertions",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "uuid",
+ "windows",
+]
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c8d502cbaec4595d2e7d5f61e318f05417bd2b66fdc3809498f0d3fdf0bea27"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap-verbosity-flag"
+version = "2.1.1"
+source = "git+https://github.com/ShayBoxs-Forks/clap-verbosity-flag.git#5807fd33f935a71ade25e2e6d5aa1b8727c8e63f"
+dependencies = [
+ "clap",
+ "tracing",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5891c7bc0edb3e1c2204fc5e94009affabeb1821c9e5fdc3959536c5c0bb984d"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9fd1a5729c4548118d7d70ff234a44868d00489a4b6597b0b020918a0e91a1a"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7cc57abe963c6d3b9d8be5b06ba7c8957a930305ca90304f24ef040aa6f961"
+
+[[package]]
+name = "cocoa"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics",
+ "foreign-types 0.5.0",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "931d3837c286f56e3c58423ce4eba12d08db2374461a785c86f672b08b5650d6"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.3.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core-graphics"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "970a29baf4110c26fedbc7f82107d42c23f7e88e404c4577ed73fe99ff85a212"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.5.0",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bb142d41022986c1d8ff29103a1411c8a3dfad3552f87a4f8dc50d61d4f4e33"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "libc",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "dbus"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
+dependencies = [
+ "futures-channel",
+ "futures-util",
+ "libc",
+ "libdbus-sys",
+ "winapi",
+]
+
+[[package]]
+name = "dbus-tokio"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "007688d459bc677131c063a3a77fb899526e17b7980f390b69644bdbc41fad13"
+dependencies = [
+ "dbus",
+ "libc",
+ "tokio",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared 0.1.1",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965"
+dependencies = [
+ "foreign-types-macros",
+ "foreign-types-shared 0.3.1",
+]
+
+[[package]]
+name = "foreign-types-macros"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "jni"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec"
+dependencies = [
+ "cesu8",
+ "combine",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jni-utils"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "259e9f2c3ead61de911f147000660511f07ab00adeed1d84f5ac4d0386e7a6c4"
+dependencies = [
+ "dashmap",
+ "futures",
+ "jni",
+ "log",
+ "once_cell",
+ "static_assertions",
+ "uuid",
+]
+
+[[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.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libdbus-sys"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "lighthouse"
+version = "1.1.1"
+dependencies = [
+ "btleplug",
+ "clap",
+ "clap-verbosity-flag",
+ "serde",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "uuid",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5486aed0026218e61b8a01d5fbd5a0a134649abb71a0e53b7bc088529dced86e"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi",
+ "windows-sys",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "object"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ac5bbd07aea88c60a577a1ce218075ffd59208b2d7ca97adf9bfc5aeb21ebe"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[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 = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "serde"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-xml-rs"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb3aa78ecda1ebc9ec9847d5d3aba7d618823446a049ba2491940506da6e2782"
+dependencies = [
+ "log",
+ "serde",
+ "thiserror",
+ "xml-rs",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "2.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tokio"
+version = "1.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "nu-ansi-term",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[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 = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47430998a7b5d499ccee752b41567bc3afc57e1327dc855b1a2aa44ce29b5fa1"
diff --git a/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/default.nix b/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/default.nix
new file mode 100644
index 000000000000..4ddd33ff1872
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lighthouse-steamvr/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchFromGitHub, lib, rustPlatform, pkg-config, dbus }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "Lighthouse";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "ShayBox";
+    repo = pname;
+    rev = version;
+    sha256 = "0g0cs54j1vmcig5nc8sqgx30nfn2zjs40pvv30j5g9cyyszbzwkw";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "clap-verbosity-flag-2.1.1" = "1213bsb0bpvv6621j9zicjsqy05sv21gh6inrvszqwcmj6fxxc7j";
+    };
+  };
+
+  postPatch = ''
+    cp ${./Cargo.lock} Cargo.lock
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ dbus ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "VR Lighthouse power state management";
+    homepage = "https://github.com/ShayBox/Lighthouse";
+    license = licenses.mit;
+    maintainers = with maintainers; [ expipiplus1 bddvlpr ];
+    mainProgram = "lighthouse";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lilo/default.nix b/nixpkgs/pkgs/tools/misc/lilo/default.nix
new file mode 100644
index 000000000000..17b485ca8da6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lilo/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchurl, dev86, sharutils }:
+
+stdenv.mkDerivation rec {
+  pname = "lilo";
+  version = "24.2";
+  src = fetchurl {
+    url = "https://www.joonet.de/lilo/ftp/sources/${pname}-${version}.tar.gz";
+    hash = "sha256-4VjxneRWDJNevgUHwht5v/F2GLkjDYB2/oxf/5/b1bE=";
+  };
+  nativeBuildInputs = [ dev86 sharutils ];
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: identify.o:(.bss+0x0): multiple definition of `identify';
+  #     common.o:(.bss+0x160): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  makeFlags = [
+    "DESTDIR=${placeholder "out"}"
+    "SBIN_DIR=/bin"
+    "USRSBIN_DIR=/bin"
+    "MAN_DIR=/share/man"
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.joonet.de/lilo/";
+    description = "Linux bootloader";
+    license = licenses.bsd3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ kaction ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/limitcpu/default.nix b/nixpkgs/pkgs/tools/misc/limitcpu/default.nix
new file mode 100644
index 000000000000..830eed9d94ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/limitcpu/default.nix
@@ -0,0 +1,28 @@
+{lib, stdenv, fetchurl}:
+
+stdenv.mkDerivation rec {
+  pname = "limitcpu";
+  version = "3.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/limitcpu/cpulimit-${version}.tar.gz";
+    sha256 = "sha256-rS9BXrK72j6DqKLZGO9ekPUuvMb+5h6Uv5F7PoTrtJw=";
+  };
+
+  buildFlags = with stdenv; [ (
+    if isDarwin then "osx"
+    else if isFreeBSD then "freebsd"
+    else "cpulimit"
+  ) ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://limitcpu.sourceforge.net/";
+    description = "A tool to throttle the CPU usage of programs";
+    platforms = with platforms; linux ++ freebsd;
+    license = licenses.gpl2;
+    maintainers = [maintainers.rycee];
+    mainProgram = "cpulimit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lineselect/default.nix b/nixpkgs/pkgs/tools/misc/lineselect/default.nix
new file mode 100644
index 000000000000..a99908b2e70e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lineselect/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, makeBinaryWrapper
+, nodejs
+}:
+
+buildNpmPackage rec {
+  pname = "lineselect";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "chfritz";
+    repo = "lineselect";
+    rev = "v${version}";
+    hash = "sha256-dCmLD4Wjsdlta2xsFCMj1zWQr4HWCfcWsKVmrTND4Yw=";
+  };
+
+  npmDepsHash = "sha256-wBtswfXtJTI7um0HZQk1YygpSggZ4j0/7IBcJiQpOUY=";
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  postInstall = ''
+    makeWrapper ${lib.getExe nodejs} $out/bin/lineselect \
+      --set FORCE_COLOR 2 \
+      --add-flags $out/lib/node_modules/lineselect/dist/cli.js
+  '';
+
+  meta = with lib; {
+    description = "Shell utility to interactively select lines from stdin";
+    homepage = "https://github.com/chfritz/lineselect";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lineselect";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/linux-logo/default.nix b/nixpkgs/pkgs/tools/misc/linux-logo/default.nix
new file mode 100644
index 000000000000..5b12f75b7297
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/linux-logo/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gettext
+, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "linux_logo";
+  version = "6.01";
+
+  src = fetchFromGitHub {
+    owner = "deater";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-yBAxPwgKyFFIX0wuG7oG+FbEDpA5cPwyyJgWrFErJ7I=";
+  };
+
+  nativeBuildInputs = [ gettext which ];
+
+  meta = with lib; {
+    description = "Prints an ASCII logo and some system info";
+    mainProgram = "linux_logo";
+    homepage = "http://www.deater.net/weave/vmwprod/linux_logo";
+    changelog = "https://github.com/deater/linux_logo/blob/${src.rev}/CHANGES";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/linuxquota/default.nix b/nixpkgs/pkgs/tools/misc/linuxquota/default.nix
new file mode 100644
index 000000000000..b5fc42be82dc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/linuxquota/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, e2fsprogs, openldap, pkg-config }:
+
+stdenv.mkDerivation rec {
+  version = "4.09";
+  pname = "quota";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/linuxquota/quota-${version}.tar.gz";
+    sha256 = "sha256-nNrKFUvJKvwxF/Dl9bMgjdX4RYOvHPBhw5uqCiuxQvk=";
+  };
+
+  outputs = [ "out" "dev" "doc" "man" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ e2fsprogs openldap ];
+
+  meta = with lib; {
+    description = "Tools to manage kernel-level quotas in Linux";
+    homepage = "https://sourceforge.net/projects/linuxquota/";
+    license = licenses.gpl2; # With some files being BSD as an exception
+    platforms = platforms.linux;
+    maintainers = [ maintainers.dezgeg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lipl/Cargo.lock b/nixpkgs/pkgs/tools/misc/lipl/Cargo.lock
new file mode 100644
index 000000000000..f87ac4ead5c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lipl/Cargo.lock
@@ -0,0 +1,308 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ansi_term"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "clap"
+version = "2.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "cmd_lib"
+version = "0.7.8"
+source = "git+https://github.com/rust-shell-script/rust_cmd_lib?rev=9f9cba4b36cdff5f7d7495d998923f1b378cb9c2#9f9cba4b36cdff5f7d7495d998923f1b378cb9c2"
+
+[[package]]
+name = "either"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "heck"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "itertools"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "linreg"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "lipl"
+version = "0.1.0"
+dependencies = [
+ "cmd_lib 0.7.8 (git+https://github.com/rust-shell-script/rust_cmd_lib?rev=9f9cba4b36cdff5f7d7495d998923f1b378cb9c2)",
+ "linreg 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "structopt 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "termion 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tui 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "log"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "numtoa"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "proc-macro-error"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "redox_termios"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "structopt"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "structopt-derive 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "termion"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "tui"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cassowary 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "termion 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "vec_map"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
+"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
+"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+"checksum cassowary 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
+"checksum cmd_lib 0.7.8 (git+https://github.com/rust-shell-script/rust_cmd_lib?rev=9f9cba4b36cdff5f7d7495d998923f1b378cb9c2)" = "<none>"
+"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
+"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
+"checksum itertools 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "87fa75c9dea7b07be3138c49abbb83fd4bea199b5cdc76f9804458edc5da0d6e"
+"checksum libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "1a31a0627fdf1f6a39ec0dd577e101440b7db22672c0901fe00a9a6fbb5c24e8"
+"checksum linreg 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "d85303c06c6c77a71a07c50c98e8fceda7ec120d6b2ee9e050876dc59e2e3dbe"
+"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
+"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4"
+"checksum numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
+"checksum proc-macro-error 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aeccfe4d5d8ea175d5f0e4a2ad0637e0f4121d63bd99d356fb1f39ab2e7c6097"
+"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
+"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
+"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
+"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
+"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+"checksum structopt 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6d4f66a4c0ddf7aee4677995697366de0749b0139057342eccbb609b12d0affc"
+"checksum structopt-derive 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "8fe0c13e476b4e21ff7f5c4ace3818b6d7bdc16897c31c73862471bc1663acae"
+"checksum syn 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0e7bedb3320d0f3035594b0b723c8a28d7d336a3eda3881db79e61d676fb644c"
+"checksum termion 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a8fb22f7cde82c8220e5aeacb3258ed7ce996142c77cba193f203515e26c330"
+"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+"checksum tui 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "73b422ff4986065d33272b587907654f918a3fe8702786a8110bf68dede0d8ee"
+"checksum unicode-segmentation 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1967f4cdfc355b37fd76d2a954fb2ed3871034eb4f26d60537d88795cfc332a9"
+"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
+"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
+"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
+"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
+"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/nixpkgs/pkgs/tools/misc/lipl/default.nix b/nixpkgs/pkgs/tools/misc/lipl/default.nix
new file mode 100644
index 000000000000..1f6b8437af30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lipl/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lipl";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "yxdunc";
+    repo = "lipl";
+    rev = "v${version}";
+    hash = "sha256-ZeYz9g06vMsOk3YDmy0I+8e6BtLfweXqVH5uRt+mtes=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "cmd_lib-0.7.8" = "sha256-FyJZkxhKwHyGEmeLZfcvLe1D6h7XY5tvsHbANQk+D+4=";
+    };
+  };
+
+  meta = with lib; {
+    description = "A command line tool to analyse the output over time of custom shell commands";
+    homepage = "https://github.com/yxdunc/lipl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lipl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/livedl/default.nix b/nixpkgs/pkgs/tools/misc/livedl/default.nix
new file mode 100644
index 000000000000..6db500695933
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/livedl/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub, stdenv }:
+
+buildGoModule rec {
+  pname = "livedl";
+  version = "unstable-2021-05-16";
+
+  src = fetchFromGitHub {
+    owner = "himananiito";
+    repo = pname;
+    rev = "a8720f1e358e5b0ade6fdeb8aacc00781e6cc504";
+    sha256 = "1zax215jp6sl47m8ahssyyrbzn96dh74srq9g61jc76sq10xg329";
+  };
+
+  modRoot = "src";
+
+  proxyVendor = true;
+  vendorHash = "sha256-C7lUusq/cWBCnA2wP9fzQglJCXvQyvFG4JY13H0cP6g=";
+
+  meta = with lib; {
+    description = "Command-line tool to download nicovideo.jp livestreams";
+    homepage = "https://github.com/himananiito/livedl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wakira ];
+    platforms = platforms.linux ++ platforms.darwin;
+    broken = stdenv.isDarwin; # build fails with go > 1.17
+    mainProgram = "livedl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lnav/0001-Forcefully-disable-docs-build.patch b/nixpkgs/pkgs/tools/misc/lnav/0001-Forcefully-disable-docs-build.patch
new file mode 100644
index 000000000000..afbec1d7e479
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lnav/0001-Forcefully-disable-docs-build.patch
@@ -0,0 +1,38 @@
+From 20c3fe76340981c43eeed16a5509480a0f5cb56d Mon Sep 17 00:00:00 2001
+From: Maximilian Bosch <maximilian@mbosch.me>
+Date: Fri, 6 Aug 2021 10:55:01 +0200
+Subject: [PATCH] Forcefully disable docs build
+
+This currently affects the following statement in `src/Makefile.am`
+only:
+
+    if !DISABLE_DOCUMENTATION
+    all-local: lnav
+            if test -w $(srcdir)/internals; then \
+                    env DUMP_INTERNALS_DIR=$(srcdir)/internals DUMP_CRASH=1 ./lnav Makefile; \
+                    mv $(srcdir)/internals/*.schema.json $(top_srcdir)/docs/schemas; \
+            fi
+    endif
+
+We cannot do this (even on non-cross builds) since `lnav` requires e.g.
+`/etc/nsswitch.conf` and other impurities here.
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index ce311fd8..e3c9ebe0 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -287,7 +287,7 @@ AS_IF([test $? -eq 0],
+ 
+ AM_CONDITIONAL(USE_INCLUDED_YAJL, test $HAVE_LOCAL_YAJL -eq 0)
+ AM_CONDITIONAL(HAVE_LIBCURL, test x"$LIBCURL" != x"")
+-AM_CONDITIONAL([DISABLE_DOCUMENTATION], [ test x"$cross_compiling" != x"no" ])
++AM_CONDITIONAL([DISABLE_DOCUMENTATION], [ true ])
+ 
+ AC_CONFIG_HEADERS([src/config.h])
+ AC_CONFIG_FILES([Makefile])
+-- 
+2.31.1
+
diff --git a/nixpkgs/pkgs/tools/misc/lnav/default.nix b/nixpkgs/pkgs/tools/misc/lnav/default.nix
new file mode 100644
index 000000000000..ffaea930b5d3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lnav/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pcre2
+, sqlite
+, ncurses
+, readline
+, zlib
+, bzip2
+, autoconf
+, automake
+, curl
+, buildPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lnav";
+  version = "0.11.2";
+
+  src = fetchFromGitHub {
+    owner = "tstack";
+    repo = "lnav";
+    rev = "v${version}";
+    sha256 = "sha256-OuxxcXpdpSxrDdiUqRbEaXvCZBAcWvE4YwaMtLKSqCM=";
+  };
+
+  patches = [ ./0001-Forcefully-disable-docs-build.patch ];
+  postPatch = ''
+    substituteInPlace Makefile.am \
+      --replace "SUBDIRS = tools src test" "SUBDIRS = tools src"
+  '';
+
+  enableParallelBuilding = true;
+
+  strictDeps = true;
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
+  nativeBuildInputs = [
+    autoconf
+    automake
+    zlib
+    curl.dev
+  ];
+  buildInputs = [
+    bzip2
+    ncurses
+    pcre2
+    readline
+    sqlite
+    curl
+  ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/tstack/lnav";
+    description = "The Logfile Navigator";
+    longDescription = ''
+      The log file navigator, lnav, is an enhanced log file viewer that takes
+      advantage of any semantic information that can be gleaned from the files
+      being viewed, such as timestamps and log levels. Using this extra
+      semantic information, lnav can do things like interleaving messages from
+      different files, generate histograms of messages over time, and providing
+      hotkeys for navigating through the file. It is hoped that these features
+      will allow the user to quickly and efficiently zero in on problems.
+    '';
+    downloadPage = "https://github.com/tstack/lnav/releases";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dochang ];
+    platforms = platforms.unix;
+    mainProgram = "lnav";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/lnch/default.nix b/nixpkgs/pkgs/tools/misc/lnch/default.nix
new file mode 100644
index 000000000000..30759303efbd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lnch/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "lnch";
+  version = "unstable-2021-08-15";
+
+  src = fetchFromGitHub {
+    owner = "oem";
+    repo = pname;
+    rev = "56b5e256b46c002821bef3b9c1b6f68b9dbb4207";
+    sha256 = "sha256-Iro/FjPFMqulcK90MbludnOXkMEHW0QSCoQRL01/LDE";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/oem/lnch";
+    description = "Launches a process and moves it out of the process group";
+    license = licenses.mit;
+    mainProgram = "lnch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/loadlibrary/default.nix b/nixpkgs/pkgs/tools/misc/loadlibrary/default.nix
new file mode 100644
index 000000000000..f919facf21b4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/loadlibrary/default.nix
@@ -0,0 +1,32 @@
+{ lib, cabextract, fetchFromGitHub, readline, stdenv_32bit }:
+
+# stdenv_32bit is needed because the program depends upon 32-bit libraries and does not have
+# support for 64-bit yet: it requires libc6-dev:i386, libreadline-dev:i386.
+
+stdenv_32bit.mkDerivation rec {
+  pname = "loadlibrary";
+  version = "20170525-${lib.strings.substring 0 7 rev}";
+  rev = "721b084c088d779075405b7f20c77c2578e2a961";
+  src = fetchFromGitHub {
+    inherit rev;
+    owner = "taviso";
+    repo = "loadlibrary";
+    sha256 = "01hb7wzfh1s5b8cvmrmr1gqknpq5zpzj9prq3wrpsgg129jpsjkb";
+  };
+
+  buildInputs = [ cabextract readline ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp mpclient $out/bin/
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/taviso/loadlibrary";
+    description = "Porting Windows Dynamic Link Libraries to Linux";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.eleanor ];
+    license = licenses.gpl2;
+    mainProgram = "mpclient";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/locate-dominating-file/default.nix b/nixpkgs/pkgs/tools/misc/locate-dominating-file/default.nix
new file mode 100644
index 000000000000..6d599440a8e3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/locate-dominating-file/default.nix
@@ -0,0 +1,68 @@
+{ bats
+, bash
+, fetchFromGitHub
+, lib
+, resholve
+, coreutils
+, getopt
+}:
+let
+  version = "0.0.1";
+in
+resholve.mkDerivation {
+  pname = "locate-dominating-file";
+  inherit version;
+  src = fetchFromGitHub {
+    owner = "roman";
+    repo = "locate-dominating-file";
+    rev = "v${version}";
+    hash = "sha256-gwh6fAw7BV7VFIkQN02QIhK47uxpYheMk64UeLyp2IY=";
+  };
+
+  postPatch = ''
+    for file in $(find src tests -type f); do
+      patchShebangs "$file"
+    done
+  '';
+
+  buildInputs = [ getopt coreutils ];
+
+  checkInputs = [ (bats.withLibraries (p: [ p.bats-support p.bats-assert ])) ];
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+
+    bats -t tests
+
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp src/locate-dominating-file.sh $out/bin/locate-dominating-file
+
+    runHook postInstall
+  '';
+
+  solutions.default = {
+    scripts = [ "bin/locate-dominating-file" ];
+    interpreter = "${bash}/bin/bash";
+    inputs = [
+      coreutils
+      getopt
+    ];
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/roman/locate-dominating-file";
+    description = "Program that looks up in a directory hierarchy for a given filename";
+    license = licenses.mit;
+    maintainers = [ maintainers.roman ];
+    platforms = platforms.all;
+    mainProgram = "locate-dominating-file";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix b/nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix
new file mode 100644
index 000000000000..4d85d95c6de9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lockfile-progs/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, liblockfile }:
+
+stdenv.mkDerivation rec {
+  pname   = "lockfile-progs";
+  version = "0.1.19";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/l/${pname}/${pname}_${version}.tar.gz";
+    sha256 = "sha256-LFcEsByPR0+CkheA5Fkqknsr9qbXYWNUpsXXzVZkhX4=";
+  };
+
+  buildInputs = [ liblockfile ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isGNU (toString [
+    # Needed with GCC 12
+    "-Wno-error=format-overflow"
+  ]);
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin $out/man/man1
+    install bin/* $out/bin
+    install man/*.1 $out/man/man1
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Programs for locking and unlocking files and mailboxes";
+    homepage = "http://packages.debian.org/sid/lockfile-progs";
+    license = lib.licenses.gpl2Only;
+
+    maintainers = [ lib.maintainers.bluescreen303 ];
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/logstash/7.x.nix b/nixpkgs/pkgs/tools/misc/logstash/7.x.nix
new file mode 100644
index 000000000000..c7e21e0521d4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/logstash/7.x.nix
@@ -0,0 +1,88 @@
+{ config
+, elk7Version
+, enableUnfree ? true
+, lib
+, stdenv
+, fetchurl
+, makeWrapper
+, nixosTests
+, jre
+}:
+
+let
+  info = lib.splitString "-" stdenv.hostPlatform.system;
+  arch = lib.elemAt info 0;
+  plat = lib.elemAt info 1;
+  hashes =
+    if enableUnfree
+    then {
+      x86_64-linux  = "sha512-ze0hJxUHCN52bOxUs5upDj64tIE58P2BTow2kaCo6HreRiF9rfTTzNkNr/hCmEgE+/oFbgSEuOQLz+6G373RDQ==";
+      x86_64-darwin = "sha512-FOFd8d+4UddSGorjuUWW/JbQ5fQH4LU1f1HJLmdbfnb8Q5L4GEveb2LmWNILU8/a85V4HGmD6lL8mCJqH9CULQ==";
+      aarch64-linux = "sha512-giYqW88/6iT3haXzJVn/+b7uxjYhHq4GERmiq3tMIvjxDyu7B6g+X7JneaTYxhpNdn6gOD/hfXgNv+hFRq6lgg==";
+    }
+    else {
+      x86_64-linux  = "sha512-OC9gx76k+RMdjqcDkrJCNbPYSQameyddaYMxUIB0foVxCmo6UvbdcwZGXRLPPn95in8rYOCjvPoBkmupiQw9xQ==";
+      x86_64-darwin = "sha512-1OEfEED/jjlT3Fd095Y5VYiWKnovytI3UYCCy1Rs3tEvkZPHYwqIQHfMQYeAvGgUci37ADwEDu8xrSQULHToLw==";
+      aarch64-linux = "sha512-QWW0AXOMNIXThxpUiRomvINm+917MvGrSDndrEw11IYYuvi0d0dckJiRytfnBbBNoOKpVhB68uOmfjIcZBNpWQ==";
+    };
+  this = stdenv.mkDerivation rec {
+    version = elk7Version;
+    pname = "logstash${lib.optionalString (!enableUnfree) "-oss"}";
+
+
+    src = fetchurl {
+      url = "https://artifacts.elastic.co/downloads/logstash/${pname}-${version}-${plat}-${arch}.tar.gz";
+      hash = hashes.${stdenv.hostPlatform.system} or (throw "Unknown architecture");
+    };
+
+    dontBuild = true;
+    dontPatchELF = true;
+    dontStrip = true;
+    dontPatchShebangs = true;
+
+    nativeBuildInputs = [
+      makeWrapper
+    ];
+
+    buildInputs = [
+      jre
+    ];
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out
+      cp -r {Gemfile*,modules,vendor,lib,bin,config,data,logstash-core,logstash-core-plugin-api} $out
+
+      patchShebangs $out/bin/logstash
+      patchShebangs $out/bin/logstash-plugin
+
+      wrapProgram $out/bin/logstash \
+         --set JAVA_HOME "${jre}"
+
+      wrapProgram $out/bin/logstash-plugin \
+         --set JAVA_HOME "${jre}"
+      runHook postInstall
+    '';
+
+    meta = with lib; {
+      description = "Logstash is a data pipeline that helps you process logs and other event data from a variety of systems";
+      homepage = "https://www.elastic.co/products/logstash";
+      sourceProvenance = with sourceTypes; [
+        fromSource
+        binaryBytecode  # source bundles dependencies as jars
+        binaryNativeCode  # bundled jruby includes native code
+      ];
+      license = if enableUnfree then licenses.elastic20 else licenses.asl20;
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ offline basvandijk ];
+    };
+    passthru.tests =
+      lib.optionalAttrs (config.allowUnfree && enableUnfree) (
+        assert this.drvPath == nixosTests.elk.unfree.ELK-7.elkPackages.logstash.drvPath;
+        {
+          elk = nixosTests.elk.unfree.ELK-7;
+        }
+      );
+  };
+in
+this
diff --git a/nixpkgs/pkgs/tools/misc/logstash/contrib.nix b/nixpkgs/pkgs/tools/misc/logstash/contrib.nix
new file mode 100644
index 000000000000..2d2f6272fddf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/logstash/contrib.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchzip }:
+
+# Note that plugins are supposed to be installed as:
+#   $path/logstash/{inputs,codecs,filters,outputs}/*.rb
+stdenv.mkDerivation rec {
+  version = "1.4.2";
+  pname = "logstash-contrib";
+
+  src = fetchzip {
+   url = "https://download.elasticsearch.org/logstash/logstash/logstash-contrib-${version}.tar.gz";
+   sha256 = "1yj8sf3b526gixh3c6zhgkfpg4f0c72p1lzhfhdx8b3lw7zjkj0k";
+  };
+
+  dontBuild    = true;
+  dontPatchELF = true;
+  dontStrip    = true;
+  dontPatchShebangs = true;
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/logstash
+    cp -r lib/* $out
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Community-maintained logstash plugins";
+    homepage    = "https://github.com/elasticsearch/logstash-contrib";
+    license     = lib.licenses.asl20;
+    platforms   = lib.platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/logtop/default.nix b/nixpkgs/pkgs/tools/misc/logtop/default.nix
new file mode 100644
index 000000000000..ff0b3cdac000
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/logtop/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, uthash, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "logtop";
+  version = "0.7";
+
+  src = fetchFromGitHub {
+    rev = "logtop-${version}";
+    owner = "JulienPalard";
+    repo  ="logtop";
+    sha256 = "1f8vk9gybldxvc0kwz38jxmwvzwangsvlfslpsx8zf04nvbkqi12";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ ncurses uthash ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  postConfigure = ''
+    substituteInPlace Makefile --replace /usr ""
+  '';
+
+  meta = with lib; {
+    description = "Displays a real-time count of strings received from stdin";
+    longDescription = ''
+      logtop displays a real-time count of strings received from stdin.
+      It can be useful in some cases, like getting the IP flooding your
+      server or the top buzzing article of your blog
+    '';
+    license = licenses.bsd2;
+    homepage = "https://github.com/JulienPalard/logtop";
+    platforms = platforms.unix;
+    maintainers = [ maintainers.starcraft66 ];
+    mainProgram = "logtop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lokalise2-cli/default.nix b/nixpkgs/pkgs/tools/misc/lokalise2-cli/default.nix
new file mode 100644
index 000000000000..43a6e50b5b36
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lokalise2-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "lokalise2-cli";
+  version = "2.6.10";
+
+  src = fetchFromGitHub {
+    owner = "lokalise";
+    repo = "lokalise-cli-2-go";
+    rev = "v${version}";
+    sha256 = "sha256-jRytFOlyCp8uXOaAgfvjGGFX2IBLKGE5/cQnOed1elE=";
+  };
+
+  vendorHash = "sha256-P7AqMSV05UKeiUqWBxCOlLwMJcAtp0lpUC+eoE3JZFM=";
+
+  doCheck = false;
+
+  postInstall = ''
+    mv $out/bin/lokalise-cli-2-go $out/bin/lokalise2
+  '';
+
+  meta = with lib; {
+    description = "Translation platform for developers. Upload language files, translate, integrate via API";
+    homepage = "https://lokalise.com";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ timstott ];
+    mainProgram = "lokalise2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/Gemfile b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile
new file mode 100644
index 000000000000..ea1216e2405d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile
@@ -0,0 +1,2 @@
+source "https://rubygems.org"
+gem "lolcat"
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock
new file mode 100644
index 000000000000..d98402b0a599
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    lolcat (100.0.1)
+      manpages (~> 0.6.1)
+      optimist (~> 3.0.1)
+      paint (~> 2.2.0)
+    manpages (0.6.1)
+    optimist (3.0.1)
+    paint (2.2.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  lolcat
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/default.nix b/nixpkgs/pkgs/tools/misc/lolcat/default.nix
new file mode 100644
index 000000000000..a10c81416053
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/default.nix
@@ -0,0 +1,17 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "lolcat";
+  gemdir = ./.;
+  exes = [ "lolcat" ];
+
+  passthru.updateScript = bundlerUpdateScript "lolcat";
+
+  meta = with lib; {
+    description = "A rainbow version of cat";
+    homepage    = "https://github.com/busyloop/lolcat";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ StillerHarpo manveru nicknovitski ];
+    mainProgram = "lolcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lolcat/gemset.nix b/nixpkgs/pkgs/tools/misc/lolcat/gemset.nix
new file mode 100644
index 000000000000..9d71d400a69e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lolcat/gemset.nix
@@ -0,0 +1,43 @@
+{
+  lolcat = {
+    dependencies = ["manpages" "optimist" "paint"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13p8i08vdqfg2bqyjkl8jsp7gw8cf6r68i8plp9zqavlqadqlg4q";
+      type = "gem";
+    };
+    version = "100.0.1";
+  };
+  manpages = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11p6ilnfda6af15ks3xiz2pr0hkvdvadnk1xm4ahqlf84dld3fnd";
+      type = "gem";
+    };
+    version = "0.6.1";
+  };
+  optimist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vg2chy1cfmdj6c1gryl8zvjhhmb3plwgyh1jfnpq4fnfqv7asrk";
+      type = "gem";
+    };
+    version = "3.0.1";
+  };
+  paint = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "014b5rkbg6qri0cwkq972bfi93zvqdgswgvphjrgjl0pr6hywlkl";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/loop/default.nix b/nixpkgs/pkgs/tools/misc/loop/default.nix
new file mode 100644
index 000000000000..6fa819cd8366
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/loop/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage {
+  pname = "loop";
+  version = "unstable-2020-07-08";
+
+  src = fetchFromGitHub {
+    owner = "Miserlou";
+    repo  = "Loop";
+    rev   = "944df766ddecd7a0d67d91cc2dfda8c197179fb0";
+    sha256 = "0v61kahwk1kdy8pb40rjnzcxby42nh02nyg9jqqpx3vgdrpxlnix";
+  };
+
+  cargoSha256 = "0pk6hwmzs58vgbkvmlpa4s4cd29izp6xq17zaix5v2didbzr5ixi";
+
+  meta = with lib; {
+    description = "UNIX's missing `loop` command";
+    homepage = "https://github.com/Miserlou/Loop";
+    maintainers = with maintainers; [ koral ];
+    license = licenses.mit;
+    mainProgram = "loop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lorri/default.nix b/nixpkgs/pkgs/tools/misc/lorri/default.nix
new file mode 100644
index 000000000000..a2cd0ef600d1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lorri/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, pkgs
+, rustPackages
+, fetchFromGitHub
+, rustPlatform
+, writers
+, nixosTests
+, CoreServices
+, Security
+}:
+
+let
+  # Run `eval $(nix-build -A lorri.updater)` after updating the revision!
+  # It will copy some required files if necessary.
+  # Also don’t forget to run `nix-build -A lorri.tests`
+  version = "1.6.0";
+  gitRev = "1.6.0";
+  sha256 = "sha256-peelMKv9GOTPdyb1iifzlFikeayTchqaYCgeXyR5EgM=";
+  cargoSha256 = "sha256-UFAmTYnCqsQxBnCm1zMu+BcWIZMuuxvpF7poLlzC6Kg=";
+
+in (rustPlatform.buildRustPackage rec {
+  pname = "lorri";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = pname;
+    rev = gitRev;
+    inherit sha256;
+  };
+
+  outputs = [ "out" "man" "doc" ];
+
+  inherit cargoSha256;
+  doCheck = false;
+
+  BUILD_REV_COUNT = src.revCount or 1;
+  RUN_TIME_CLOSURE = pkgs.callPackage ./runtime.nix { };
+
+  nativeBuildInputs = [ rustPackages.rustfmt ];
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices Security ];
+
+  # copy the docs to the $man and $doc outputs
+  postInstall = ''
+    install -Dm644 lorri.1 $man/share/man/man1/lorri.1
+    install -Dm644 -t $doc/share/doc/lorri/ \
+      README.md \
+      CONTRIBUTING.md \
+      LICENSE \
+      MAINTAINERS.md
+    cp -r contrib/ $doc/share/doc/lorri/contrib
+  '';
+
+  passthru = {
+    updater = writers.writeBash "copy-runtime-nix.sh" ''
+      set -euo pipefail
+      cp ${src}/nix/runtime.nix ${toString ./runtime.nix}
+      cp ${src}/nix/runtime-closure.nix.template ${toString ./runtime-closure.nix.template}
+    '';
+    tests = {
+      nixos = nixosTests.lorri;
+    };
+  };
+
+  meta = with lib; {
+    description = "Your project's nix-env";
+    homepage = "https://github.com/target/lorri";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ grahamc Profpatsch ];
+    mainProgram = "lorri";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template b/nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template
new file mode 100644
index 000000000000..2cb2ec4bbb9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lorri/runtime-closure.nix.template
@@ -0,0 +1,37 @@
+# Nix with sandboxing requires every path used at build time be
+# explicitly declared. If we simply passed in the paths, they
+# would be copied in as sources. Using builtins.storePath we're
+# able to tell Nix that, no, in fact, treat these not as sources
+# to copy, but instead of a regular store path.
+#
+# Include the explicit closure, too, otherwise we'll get mysterious
+# "file not found" errors due to the glibc interpreter being
+# missing.
+let
+  # Magic inspired by Nix's config.nix:
+  # https://github.com/NixOS/nix/blob/f9a2ea44867cd1dbb408bca4df0ced806137b7f7/corepkgs/config.nix.in#L23
+  #
+  # If the dependency is in the Nix store we're using, refer to
+  # it as a literal store path. If it isn't, refer to it "normally".
+  #
+  # This makes sandboxing happy when in a nix-build, and the
+  # evaluation happy when in a «cargo build».
+  tools_build_host = @tools_build_host@;
+
+  # Compare the stringified version of the tools_build_host Nix store
+  # path to the evaluator's stringified Nix store path. Otherwise,
+  # Nix will read the sources in to the /nix/store, and, well,
+  # you can only copy the /nix/store in to the /nix/store so many
+  # times before you run out of disk space.
+  dep = if ("${toString (dirOf tools_build_host)}" == "${toString builtins.storeDir}")
+    then (builtins.trace "using storePath"  builtins.storePath)
+    else (builtins.trace "using toString" toString) # assume we have no sandboxing
+    ;
+
+  tools = dep tools_build_host;
+
+in {
+  path = "${tools}/bin";
+  builder = "${tools}/bin/bash";
+  closure = import @runtime_closure_list@ { inherit dep; };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lorri/runtime.nix b/nixpkgs/pkgs/tools/misc/lorri/runtime.nix
new file mode 100644
index 000000000000..96b14b26e82c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lorri/runtime.nix
@@ -0,0 +1,38 @@
+{
+  # Plumbing tools:
+  closureInfo
+, runCommand
+, writeText
+, buildEnv
+, # Actual dependencies to propagate:
+  bash
+, coreutils
+}:
+let
+  tools = buildEnv {
+    name = "lorri-runtime-tools";
+    paths = [ coreutils bash ];
+  };
+
+  runtimeClosureInfo = closureInfo {
+    rootPaths = [ tools ];
+  };
+
+  closureToNix = runCommand "closure.nix" {}
+    ''
+      (
+        echo '{ dep, ... }: ['
+        sed -E 's/^(.*)$/    (dep \1)/' ${runtimeClosureInfo}/store-paths
+        echo ']'
+      ) > $out
+    '';
+
+  runtimeClosureInfoAsNix = runCommand "runtime-closure.nix" {
+    runtime_closure_list = closureToNix;
+    tools_build_host = tools;
+  }
+    ''
+      substituteAll ${./runtime-closure.nix.template} $out
+    '';
+in
+runtimeClosureInfoAsNix
diff --git a/nixpkgs/pkgs/tools/misc/lottieconverter/default.nix b/nixpkgs/pkgs/tools/misc/lottieconverter/default.nix
new file mode 100644
index 000000000000..557ac293aaa2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lottieconverter/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libpng
+, rlottie
+, giflib
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "lottieconverter";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "sot-tech";
+    repo = finalAttrs.pname;
+    rev = "r${finalAttrs.version}";
+    hash = "sha256-oCFQsOQbWzmzClaTOeuEtGo7uXoKYtaJuSLLgqAQP1M=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libpng rlottie giflib ];
+
+  cmakeFlags = [
+    "-DSYSTEM_RL=1"
+    "-DSYSTEM_GL=1"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 lottieconverter "$out/bin/lottieconverter"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/sot-tech/LottieConverter/";
+    description = "Lottie converter utility";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ CRTified nickcao ];
+    mainProgram = "lottieconverter";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/lrzsz/default.nix b/nixpkgs/pkgs/tools/misc/lrzsz/default.nix
new file mode 100644
index 000000000000..867e492b33e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lrzsz/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, gettext, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "lrzsz";
+  version = "0.12.20";
+
+  src = fetchurl {
+    url = "https://ohse.de/uwe/releases/lrzsz-${version}.tar.gz";
+    sha256 = "1wcgfa9fsigf1gri74gq0pa7pyajk12m4z69x7ci9c6x9fqkd2y2";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "CVE-2018-10195.patch";
+      url = "https://bugzilla.redhat.com/attachment.cgi?id=79507";
+      sha256 = "0jlh8w0cjaz6k56f0h3a0h4wgc51axmrdn3mdspk7apjfzqcvx3c";
+    })
+  ];
+
+  makeFlags = [ "AR:=$(AR)" ];
+
+  nativeBuildInputs = [ gettext ];
+
+  hardeningDisable = [ "format" ];
+
+  configureFlags = [ "--program-transform-name=s/^l//" ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=implicit-function-declaration -Wno-error=implicit-int";
+
+  meta = with lib; {
+    homepage = "https://ohse.de/uwe/software/lrzsz.html";
+    description = "Communication package providing the XMODEM, YMODEM ZMODEM file transfer protocols";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lsd/default.nix b/nixpkgs/pkgs/tools/misc/lsd/default.nix
new file mode 100644
index 000000000000..f89467af643a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lsd/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, rustPlatform
+, installShellFiles
+, darwin
+, pandoc
+, testers
+, lsd
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lsd";
+  version = "1.1.2";
+
+  src = fetchFromGitHub {
+    owner = "lsd-rs";
+    repo = "lsd";
+    rev = "v${version}";
+    hash = "sha256-ZMaI0Q/xmYJHWvU4Tha+XVV55zKLukrqkROfBzu/JsQ=";
+  };
+
+  cargoPatches = [
+    # fix cargo lock file
+    (fetchpatch {
+      url = "https://github.com/lsd-rs/lsd/pull/1021/commits/7593fd7ea0985e273c82b6e80e66a801772024de.patch";
+      hash = "sha256-ykKLVSM6FbL4Jt5Zk7LuPKcYw/wrpiwU8vhuGz8Pbi0=";
+    })
+  ];
+
+  cargoHash = "sha256-TDHHY5F4lVrKd7r0QfrfUV2xzT6HMA/PtOIStMryaBA=";
+
+  nativeBuildInputs = [ installShellFiles pandoc ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  postInstall = ''
+    pandoc --standalone --to man doc/lsd.md -o lsd.1
+    installManPage lsd.1
+
+    installShellCompletion --cmd lsd \
+      --bash $releaseDir/build/lsd-*/out/lsd.bash \
+      --fish $releaseDir/build/lsd-*/out/lsd.fish \
+      --zsh $releaseDir/build/lsd-*/out/_lsd
+  '';
+
+  # Found argument '--test-threads' which wasn't expected, or isn't valid in this context
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = lsd;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/lsd-rs/lsd";
+    description = "The next gen ls command";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ zowoq SuperSandro2000 ];
+    mainProgram = "lsd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ltunify/default.nix b/nixpkgs/pkgs/tools/misc/ltunify/default.nix
new file mode 100644
index 000000000000..b85e3da4a5c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ltunify/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+# Although we copy in the udev rules here, you probably just want to use
+# logitech-udev-rules instead of adding this to services.udev.packages on NixOS
+
+stdenv.mkDerivation rec {
+  pname = "ltunify";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "Lekensteyn";
+    repo = "ltunify";
+    rev = "v${version}";
+    sha256 = "sha256-9avri/2H0zv65tkBsIi9yVxx3eVS9oCkVCCFdjXqSgI=";
+  };
+
+  makeFlags = [ "DESTDIR=$(out)" "bindir=/bin" ];
+
+  meta = with lib; {
+    description = "Tool for working with Logitech Unifying receivers and devices";
+    longDescription = ''
+      This tool requires either to be run with root/sudo or alternatively to have the udev rules files installed. On NixOS this can be achieved by setting `hardware.logitech.wireless.enable`.
+    '';
+    homepage = "https://lekensteyn.nl/logitech-unifying.html";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+    mainProgram = "ltunify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/lwc/default.nix b/nixpkgs/pkgs/tools/misc/lwc/default.nix
new file mode 100644
index 000000000000..77e6d5033f31
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/lwc/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "lwc";
+  version = "unstable-2022-07-26";
+
+  src = fetchFromGitHub {
+    owner = "timdp";
+    repo = "lwc";
+    rev = "3330928c9d82200837350f85335f5e6c09f0658b";
+    hash = "sha256-HFuXA5Y274XtgqG9odDAg9SSCgUxprnojfGavnYW4LE=";
+  };
+
+  vendorHash = "sha256-av736cW0bPsGQV+XFL/q6p/9VhjOeDwkiK5DLRnRtUg=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${src.rev}"
+  ];
+
+  meta = with lib; {
+    description = "A live-updating version of the UNIX wc command";
+    homepage = "https://github.com/timdp/lwc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "lwc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/macchina/default.nix b/nixpkgs/pkgs/tools/misc/macchina/default.nix
new file mode 100644
index 000000000000..3da4d9b07fbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/macchina/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "macchina";
+  version = "6.1.8";
+
+  src = fetchFromGitHub {
+    owner = "Macchina-CLI";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-MntHq5nphfjbO0Rx7v6WjsnabSMH5Ke3aR9/embG/rk=";
+  };
+
+  cargoHash = "sha256-w8WIpT8rUe7olB5kdpDyrId6D698AhcqzsfpOlutaHQ=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    darwin.apple_sdk.frameworks.DisplayServices
+  ];
+
+  postInstall = ''
+    installManPage doc/macchina.{1,7}
+  '';
+
+  meta = with lib; {
+    description = "A fast, minimal and customizable system information fetcher";
+    homepage = "https://github.com/Macchina-CLI/macchina";
+    changelog = "https://github.com/Macchina-CLI/macchina/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ _414owen figsoda ];
+    mainProgram = "macchina";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mailman-rss/default.nix b/nixpkgs/pkgs/tools/misc/mailman-rss/default.nix
new file mode 100644
index 000000000000..d71ee8795528
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mailman-rss/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchPypi, withTwitter ? false}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "mailman-rss";
+  version = "0.2.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1brrik70jyagxa9l0cfmlxvqpilwj1q655bphxnvjxyganxf4c00";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ python-dateutil future requests beautifulsoup4 ]
+    ++ lib.optional withTwitter python3Packages.twitter
+  ;
+
+  # No tests in Pypi Tarball
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Mailman archive -> rss converter";
+    homepage = "https://github.com/kyamagu/mailman-rss";
+    license = licenses.mit;
+    maintainers = with maintainers; [ samueldr ];
+    mainProgram = "mailman-rss";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/makebootfat/default.nix b/nixpkgs/pkgs/tools/misc/makebootfat/default.nix
new file mode 100644
index 000000000000..b2e93bb140ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/makebootfat/default.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "makebootfat";
+  version = "1.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/advancemame/makebootfat-${version}.tar.gz";
+    sha256 = "0v0g1xax0y6hmw2x10nfhchp9n7vqyvgc33gcxqax8jdq2pxm1q2";
+  };
+
+  meta = with lib; {
+    description = "Create bootable USB disks using the FAT filesystem and syslinux";
+    homepage = "http://advancemame.sourceforge.net/boot-readme.html";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ehmry ];
+    platforms = platforms.linux;
+    mainProgram = "makebootfat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/maker-panel/default.nix b/nixpkgs/pkgs/tools/misc/maker-panel/default.nix
new file mode 100644
index 000000000000..12a5d46547a2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/maker-panel/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, go-md2man
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "maker-panel";
+  version = "0.12.4";
+
+  src = fetchFromGitHub {
+    owner = "twitchyliquid64";
+    repo = "maker-panel";
+    rev = version;
+    sha256 = "0dlsy0c46781sb652kp80pvga7pzx6xla64axir92fcgg8k803bi";
+  };
+
+  cargoSha256 = "1ar62dn0khlbm47chakrsrxd1y76gpq0sql4g9j7dqqrvkavgd7w";
+
+  nativeBuildInputs = [ go-md2man installShellFiles ];
+
+  postBuild = ''
+    go-md2man --in docs/spec-reference.md --out maker-panel.5
+  '';
+
+  postInstall = ''
+    installManPage maker-panel.5
+  '';
+
+  meta = with lib; {
+    description = "Make mechanical PCBs by combining shapes together";
+    homepage = "https://github.com/twitchyliquid64/maker-panel";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/man-db/default.nix b/nixpkgs/pkgs/tools/misc/man-db/default.nix
new file mode 100644
index 000000000000..8e2365f475d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/man-db/default.nix
@@ -0,0 +1,97 @@
+{ buildPackages
+, db
+, fetchurl
+, groff
+, gzip
+, lib
+, libiconv
+, libpipeline
+, makeWrapper
+, nixosTests
+, pkg-config
+, stdenv
+, zstd
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "man-db";
+  version = "2.12.1";
+
+  src = fetchurl {
+    url = "mirror://savannah/man-db/man-db-${version}.tar.xz";
+    hash = "sha256-3e4kna63jPkrq3lMzQacyLV1mSJl6iDiOeiHFW6IAmU=";
+  };
+
+  outputs = [ "out" "doc" ];
+  outputMan = "out"; # users will want `man man` to work
+
+  strictDeps = true;
+  nativeBuildInputs = [ autoreconfHook groff makeWrapper pkg-config zstd ];
+  buildInputs = [ libpipeline db groff ]; # (Yes, 'groff' is both native and build input)
+  nativeCheckInputs = [ libiconv /* for 'iconv' binary */ ];
+
+  patches = [
+    ./systemwide-man-db-conf.patch
+  ];
+
+  postPatch = ''
+    # Remove all mandatory manpaths. Nixpkgs makes no requirements on
+    # these directories existing.
+    sed -i 's/^MANDATORY_MANPATH/# &/' src/man_db.conf.in
+
+    # Add Nix-related manpaths
+    echo "MANPATH_MAP	/nix/var/nix/profiles/default/bin	/nix/var/nix/profiles/default/share/man" >> src/man_db.conf.in
+
+    # Add mandb locations for the above
+    echo "MANDB_MAP	/nix/var/nix/profiles/default/share/man	/var/cache/man/nixpkgs" >> src/man_db.conf.in
+  '';
+
+  configureFlags = [
+    "--disable-setuid"
+    "--disable-cache-owner"
+    "--localstatedir=/var"
+    "--with-config-file=${placeholder "out"}/etc/man_db.conf"
+    "--with-systemdtmpfilesdir=${placeholder "out"}/lib/tmpfiles.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-pager=less"
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    "ac_cv_func__set_invalid_parameter_handler=no"
+    "ac_cv_func_posix_fadvise=no"
+    "ac_cv_func_mempcpy=no"
+  ];
+
+  preConfigure = ''
+    configureFlagsArray+=("--with-sections=1 n l 8 3 0 2 5 4 9 6 7")
+  '';
+
+  postInstall = ''
+    # apropos/whatis uses program name to decide whether to act like apropos or whatis
+    # (multi-call binary). `apropos` is actually just a symlink to whatis. So we need to
+    # make sure that we don't wrap symlinks (since that changes argv[0] to the -wrapped name)
+    find "$out/bin" -type f | while read file; do
+      wrapProgram "$file" \
+        --prefix PATH : "${lib.makeBinPath [ groff gzip zstd ]}"
+    done
+  '';
+
+  disallowedReferences = lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
+    buildPackages.groff
+  ];
+
+  enableParallelBuilding = true;
+
+  doCheck = !stdenv.hostPlatform.isMusl /* iconv binary */;
+
+  passthru.tests = {
+    nixos = nixosTests.man;
+  };
+
+  meta = with lib; {
+    homepage = "http://man-db.nongnu.org";
+    description = "An implementation of the standard Unix documentation system accessed using the man command";
+    license = licenses.gpl2;
+    platforms = lib.platforms.unix;
+    mainProgram = "man";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch b/nixpkgs/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch
new file mode 100644
index 000000000000..2d4477776bb1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/man-db/systemwide-man-db-conf.patch
@@ -0,0 +1,39 @@
+commit 9089291006a4258c39c75a920ad536b61504251a
+Author: rnhmjoj <rnhmjoj@inventati.org>
+Date:   Fri May 1 19:32:15 2020 +0200
+
+    check for systemwide man_db.conf before the bundled one
+
+diff --git a/src/manp.c b/src/manp.c
+index 5441339..0bbf566 100644
+--- a/src/manp.c
++++ b/src/manp.c
+@@ -841,18 +841,24 @@ void read_config_file (bool optional)
+ 	}
+ 
+ 	if (getenv ("MAN_TEST_DISABLE_SYSTEM_CONFIG") == NULL) {
+-		config_file = fopen (CONFIG_FILE, "r");
++		const char *config_filepath;
++		if (access ("/etc/man_db.conf", F_OK) != -1) {
++			config_filepath = "/etc/man_db.conf";
++		} else {
++			config_filepath = CONFIG_FILE;
++		}
++		config_file = fopen (config_filepath, "r");
+ 		if (config_file == NULL) {
+ 			if (optional)
+ 				debug ("can't open %s; continuing anyway\n",
+-				       CONFIG_FILE);
++				       config_filepath);
+ 			else
+ 				error (FAIL, 0,
+ 				       _("can't open the manpath "
+ 					 "configuration file %s"),
+-				       CONFIG_FILE);
++				       config_filepath);
+ 		} else {
+-			debug ("From the config file %s:\n", CONFIG_FILE);
++			debug ("From the config file %s:\n", config_filepath);
+ 
+ 			add_to_dirlist (config_file, 0);
+ 			fclose (config_file);
diff --git a/nixpkgs/pkgs/tools/misc/mandoc/default.nix b/nixpkgs/pkgs/tools/misc/mandoc/default.nix
new file mode 100644
index 000000000000..e8553b7f9e58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mandoc/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchurl, zlib, perl, nixosTests }:
+
+let
+  # Name of an UTF-8 locale _always_ present at runtime, used for UTF-8 support
+  # (locale set by the user may differ). This would usually be C.UTF-8, but
+  # darwin has no such locale.
+  utf8Locale =
+    if stdenv.hostPlatform.isDarwin
+    then "en_US.UTF-8"
+    else "C.UTF-8";
+in
+
+stdenv.mkDerivation rec {
+  pname = "mandoc";
+  version = "1.14.6";
+
+  src = fetchurl {
+    url = "https://mandoc.bsd.lv/snapshots/mandoc-${version}.tar.gz";
+    sha256 = "8bf0d570f01e70a6e124884088870cbed7537f36328d512909eb10cd53179d9c";
+  };
+
+  buildInputs = [ zlib ];
+
+  configureLocal = ''
+    MANPATH_DEFAULT="/run/current-system/sw/share/man"
+    MANPATH_BASE="$MANPATH_DEFAULT"
+    OSNAME="Nixpkgs"
+    PREFIX="$out"
+    LD_OHASH="-lutil"
+    # Use symlinks instead of hardlinks (more commonly used in nixpkgs)
+    LN="ln -sf"
+    # nixpkgs doesn't have sbin, install makewhatis to bin
+    SBINDIR="$PREFIX/bin"
+    CC=${stdenv.cc.targetPrefix}cc
+    AR=${stdenv.cc.bintools.targetPrefix}ar
+    # Allow makewhatis(8) to follow symlinks from a manpath to the nix store
+    READ_ALLOWED_PATH=${builtins.storeDir}
+    # Bypass the locale(1)-based check for UTF-8 support since it causes trouble:
+    # * We only have meaningful locale(1) implementations for glibc and macOS
+    # * NetBSD's locale(1) (used for macOS) depends on mandoc
+    # * Sandbox and locales cause all kinds of trouble
+    # * build and host libc (and thus locale handling) may differ
+    HAVE_WCHAR=1
+    UTF8_LOCALE=${utf8Locale}
+  '';
+
+  preConfigure = ''
+    printf '%s' "$configureLocal" > configure.local
+  '';
+
+  doCheck = true;
+  checkTarget = "regress";
+  nativeCheckInputs = [ perl ];
+  preCheck = "patchShebangs --build regress/regress.pl";
+
+  passthru.tests = {
+    nixos = nixosTests.man;
+  };
+
+  meta = with lib; {
+    # check if we can execute binaries for the host platform on the build platform
+    # even though the platforms aren't the same. mandoc can't be cross compiled
+    # (easily) because of its configurePhase which executes compiled programs
+    # for gathering information about the host system. Consequently, we can only
+    # allow “native” cross such as pkgsLLVM and pkgsStatic.
+    # For a lack of a better predicate at the moment, we compare the platforms'
+    # system tuples. See also:
+    # * https://github.com/NixOS/nixpkgs/pull/140271
+    # * https://github.com/NixOS/nixpkgs/issues/61414
+    # We need to use broken instead of, say a top level assert, to keep splicing
+    # working.
+    broken = stdenv.buildPlatform.system != stdenv.hostPlatform.system;
+
+    homepage = "https://mandoc.bsd.lv/";
+    description = "suite of tools compiling mdoc and man";
+    downloadPage = "http://mandoc.bsd.lv/snapshots/";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bb010g ramkromberg sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mandown/default.nix b/nixpkgs/pkgs/tools/misc/mandown/default.nix
new file mode 100644
index 000000000000..308605e1172f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mandown/default.nix
@@ -0,0 +1,21 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mandown";
+  version = "0.1.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-8a4sImsjw+lzeVK4V74VpIKDcAhMR1bOmJYVWzfWEfc=";
+  };
+
+  cargoHash = "sha256-Wf1+dxwgPZ4CHpas+3P6n6kKDIISbnfI01+XksjxQlQ=";
+
+  meta = with lib; {
+    description = "Markdown to groff (man page) converter";
+    homepage = "https://gitlab.com/kornelski/mandown";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ ];
+    mainProgram = "mandown";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/manga-cli/default.nix b/nixpkgs/pkgs/tools/misc/manga-cli/default.nix
new file mode 100644
index 000000000000..65d45cf60e3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/manga-cli/default.nix
@@ -0,0 +1,40 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+, makeWrapper
+, img2pdf
+, zathura
+}:
+
+stdenvNoCC.mkDerivation {
+  pname = "manga-cli";
+  version = "unstable-2022-04-11";
+
+  src = fetchFromGitHub {
+    owner = "7USTIN";
+    repo = "manga-cli";
+    rev = "a69fe935341eaf96618a6b2064d4dcb36c8690b5";
+    sha256 = "sha256-AnpOEgOBt2a9jtPNvfBnETGtc5Q1WBmSRFDvQB7uBE4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 manga-cli $out/bin/manga-cli
+
+    wrapProgram $out/bin/manga-cli \
+      --prefix PATH : ${lib.makeBinPath [ img2pdf zathura ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/7USTIN/manga-cli";
+    description = "Bash script for reading mangas via the terminal by scraping manganato";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ baitinq ];
+    mainProgram = "manga-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/map/default.nix b/nixpkgs/pkgs/tools/misc/map/default.nix
new file mode 100644
index 000000000000..6416e12e9c19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/map/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "map";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "soveran";
+    repo = "map";
+    rev = version;
+    sha256 = "sha256-yGzmhZwv1qKy0JNcSzqL996APQO8OGWQ1GBkEkKTOXA=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    mkdir -p "$out/share/doc/${pname}"
+    cp README* LICENSE "$out/share/doc/${pname}"
+  '';
+
+  doCheck = true;
+
+  checkPhase = "./test/tests.sh";
+
+  meta = with lib; {
+    description = "Map lines from stdin to commands";
+    mainProgram = "map";
+    homepage = "https://github.com/soveran/map";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ pogobanane ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mapcidr/default.nix b/nixpkgs/pkgs/tools/misc/mapcidr/default.nix
new file mode 100644
index 000000000000..3c955c2d336b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mapcidr/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "mapcidr";
+  version = "1.1.34";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-/bZ6LimkdbR7nG7XcetNshk0KXw1FGbuaTXP+DH7hQg=";
+  };
+
+  vendorHash = "sha256-tbMCXNBND9jc0C1bA9Rmz1stYKtJPmMzTlbGc3vcmE4=";
+
+  modRoot = ".";
+  subPackages = [
+    "cmd/mapcidr"
+  ];
+
+  meta = with lib; {
+    description = "Small utility program to perform multiple operations for a given subnet/CIDR ranges";
+    longDescription = ''
+      mapCIDR is developed to ease load distribution for mass scanning
+      operations, it can be used both as a library and as independent CLI tool.
+    '';
+    homepage = "https://github.com/projectdiscovery/mapcidr";
+    changelog = "https://github.com/projectdiscovery/mapcidr/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hanemile ];
+    mainProgram = "mapcidr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/markdown-anki-decks/default.nix b/nixpkgs/pkgs/tools/misc/markdown-anki-decks/default.nix
new file mode 100644
index 000000000000..3632bc2ff605
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/markdown-anki-decks/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "markdown-anki-decks";
+  version = "1.1.1";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-SvKjjE629OwxWsPo2egGf2K6GzlWAYYStarHhA4Ex0w=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace-fail 'typer = "^0.4.0"' 'typer = "*"'
+  '';
+
+  build-system = with python3.pkgs; [
+    poetry-core
+  ];
+
+  dependencies = with python3.pkgs; [
+    beautifulsoup4
+    genanki
+    markdown
+    python-frontmatter
+    typer
+  ] ++ typer.optional-dependencies.all;
+
+  # No tests available on Pypi and there is only a failing version assertion test in the repo.
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "markdown_anki_decks"
+  ];
+
+  meta = with lib; {
+    description = "Tool to convert Markdown files into Anki Decks";
+    homepage = "https://github.com/lukesmurray/markdown-anki-decks";
+    changelog = "https://github.com/lukesmurray/markdown-anki-decks/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    mainProgram = "mdankideck";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/marlin-calc/default.nix b/nixpkgs/pkgs/tools/misc/marlin-calc/default.nix
new file mode 100644
index 000000000000..dc8ff4221009
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/marlin-calc/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "marlin-calc";
+  version = "2019-10-17";
+
+  src = fetchFromGitHub {
+    owner = "eyal0";
+    repo = "Marlin";
+    rev = "3d5a5c86bea35a2a169eb56c70128bf2d070feef";
+    sha256 = "14sqajm361gnrcqv84g7kbmyqm8pppbhqsabszc4j2cn7vbwkdg5";
+  };
+
+  postPatch = ''
+    # missing header for gcc >= 11
+    sed -i '1i#include <limits>' Marlin/src/module/calc.cpp
+  '';
+
+  buildPhase = ''
+    cd Marlin/src
+    c++ module/planner.cpp module/calc.cpp feature/fwretract.cpp \
+      -O2 -Wall -std=gnu++11 -o marlin-calc
+  '';
+
+  installPhase = ''
+    install -Dm0755 {,$out/bin/}marlin-calc
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/eyal0/Marlin";
+    description = "Marlin 3D printer timing simulator";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/marlin-calc.x86_64-darwin
+    mainProgram = "marlin-calc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/massren/default.nix b/nixpkgs/pkgs/tools/misc/massren/default.nix
new file mode 100644
index 000000000000..763c3a2ae370
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/massren/default.nix
@@ -0,0 +1,45 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "massren";
+  version = "1.5.6";
+
+  src = fetchFromGitHub {
+    owner = "laurent22";
+    repo = "massren";
+    rev = "v${version}";
+    hash = "sha256-17y+vmspvZKKRRaEwzP3Zya4r/z+2aSGG6oNZiA8D64=";
+  };
+
+  vendorHash = null;
+
+  patches = [
+    # Add Go Modules support
+    (fetchpatch {
+      url = "https://github.com/laurent22/massren/commit/83df215b6e112d1ec375b08d8c44dadc5107155d.patch";
+      hash = "sha256-FMTmUrv6zGq11vexUirAuK3H6r78RtoipqyWoh+pzrs=";
+    })
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  preCheck =
+    let
+      skippedTests = [
+        # Possible error about github.com/mattn/go-sqlite3
+        "Test_guessEditorCommand"
+        "Test_processFileActions"
+      ];
+    in
+    ''
+      buildFlagsArray+=("-run" "[^(${builtins.concatStringsSep "|" skippedTests})]")
+    '';
+
+  meta = with lib; {
+    description = "Easily rename multiple files using your text editor";
+    license = licenses.mit;
+    homepage = "https://github.com/laurent22/massren";
+    maintainers = with maintainers; [ ];
+    mainProgram = "massren";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mastotool/default.nix b/nixpkgs/pkgs/tools/misc/mastotool/default.nix
new file mode 100644
index 000000000000..a75f97c4a6ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mastotool/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "mastotool";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "muesli";
+    repo = "mastotool";
+    rev = "v${version}";
+    hash = "sha256-KmYUt2WXLY6i17dZ+o5HOTyMwbQnynY7IT43LIEN3B0=";
+  };
+
+  vendorHash = "sha256-uQgLwH8Z8rBfyKHMm2JHO+H1gsHK25+c34bOnMcmquA=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "A collection of command-line tools to work with your Mastodon account";
+    homepage = "https://github.com/muesli/mastotool";
+    changelog = "https://github.com/muesli/mastotool/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "mastotool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mathpix-snipping-tool/default.nix b/nixpkgs/pkgs/tools/misc/mathpix-snipping-tool/default.nix
new file mode 100644
index 000000000000..0f03913c87a8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mathpix-snipping-tool/default.nix
@@ -0,0 +1,29 @@
+{ appimageTools, lib, fetchurl }:
+let
+  pname = "mathpix-snipping-tool";
+  version = "03.00.0072";
+
+  src = fetchurl {
+    url = "https://download.mathpix.com/linux/Mathpix_Snipping_Tool-x86_64.v${version}.AppImage";
+    sha256 = "1igg8wnshmg9f23qqw1gqb85h1aa3461c1n7dmgw6sn4lrrrh5ms";
+  };
+
+  appimageContents = appimageTools.extract { inherit pname version src; };
+in appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "OCR tool to convert pictures to LaTeX";
+    homepage = "https://mathpix.com/";
+    license = licenses.unfree;
+    maintainers = [ maintainers.hiro98 ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "mathpix-snipping-tool";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mbuffer/default.nix b/nixpkgs/pkgs/tools/misc/mbuffer/default.nix
new file mode 100644
index 000000000000..672f2eb9298a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mbuffer/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchurl
+, openssl
+, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mbuffer";
+  version = "20240107";
+
+  src = fetchurl {
+    url = "http://www.maier-komor.de/software/mbuffer/mbuffer-${version}.tgz";
+    sha256 = "sha256-14YG4X3ZAmpTI21ezAenAgLSZC0X49kHRxzbWKBFiBQ=";
+  };
+
+  buildInputs = [
+    openssl
+  ];
+  nativeBuildInputs = [
+    which
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description  = "A tool for buffering data streams with a large set of unique features";
+    homepage = "https://www.maier-komor.de/mbuffer.html";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux; # Maybe other non-darwin Unix
+    mainProgram = "mbuffer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mcfly/default.nix b/nixpkgs/pkgs/tools/misc/mcfly/default.nix
new file mode 100644
index 000000000000..675639a03294
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcfly/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mcfly";
+  version = "0.8.4";
+
+  src = fetchFromGitHub {
+    owner = "cantino";
+    repo = "mcfly";
+    rev = "v${version}";
+    hash = "sha256-beoXLTy3XikdZBS0Lh3cugHflNJ51PbqsCE3xtCHpj0=";
+  };
+
+  postPatch = ''
+    substituteInPlace mcfly.bash --replace '$(command which mcfly)' '${placeholder "out"}/bin/mcfly'
+    substituteInPlace mcfly.zsh  --replace '$(command which mcfly)' '${placeholder "out"}/bin/mcfly'
+    substituteInPlace mcfly.fish --replace '(command which mcfly)'  '${placeholder "out"}/bin/mcfly'
+  '';
+
+  cargoHash = "sha256-wWYpDU6oXT+sDCzX8VWJ6GfNPOi7T02LK0JKcWHFGi8=";
+
+  meta = with lib; {
+    homepage = "https://github.com/cantino/mcfly";
+    description = "An upgraded ctrl-r where history results make sense for what you're working on right now";
+    changelog = "https://github.com/cantino/mcfly/raw/v${version}/CHANGELOG.txt";
+    license = licenses.mit;
+    maintainers = [ maintainers.melkor333 ];
+    mainProgram = "mcfly";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/default.nix b/nixpkgs/pkgs/tools/misc/mcrypt/default.nix
new file mode 100644
index 000000000000..c5013eb46a04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, libmcrypt, libmhash }:
+
+stdenv.mkDerivation rec {
+  version = "2.6.8";
+  pname = "mcrypt";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/mcrypt/MCrypt/${version}/${pname}-${version}.tar.gz";
+    sha256 = "5145aa844e54cca89ddab6fb7dd9e5952811d8d787c4f4bf27eb261e6c182098";
+  };
+
+  patches = [
+    ./format-string_CVE-2012-4426.patch
+    ./overflow_CVE-2012-4409.patch
+    ./segv.patch
+    ./sprintf_CVE-2012-4527.patch
+    ./malloc_to_stdlib.patch
+  ];
+
+  buildInputs = [ libmcrypt libmhash ];
+
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_CFLAGS_COMPILE = "-Wno-implicit-function-declaration";
+  };
+
+  meta = {
+    description = "Replacement for old UNIX crypt(1)";
+    longDescription = ''
+      mcrypt, and the accompanying libmcrypt, are intended to be replacements
+      for the old Unix crypt, except that they are under the GPL and support an
+      ever-wider range of algorithms and modes.
+    '';
+    homepage = "https://mcrypt.sourceforge.net";
+    license = lib.licenses.gpl3Only;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.qknight ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/format-string_CVE-2012-4426.patch b/nixpkgs/pkgs/tools/misc/mcrypt/format-string_CVE-2012-4426.patch
new file mode 100644
index 000000000000..322ab473811f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/format-string_CVE-2012-4426.patch
@@ -0,0 +1,31 @@
+--- mcrypt-2.6.8/src/errors.c
++++ mcrypt-2.6.8/src/errors.c
+@@ -25,24 +25,24 @@
+
+ void err_quit(char *errmsg)
+ {
+-	fprintf(stderr, errmsg);
++	fprintf(stderr, "%s", errmsg);
+ 	exit(-1);
+ }
+
+ void err_warn(char *errmsg)
+ {
+ 	if (quiet <= 1)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
+
+ void err_info(char *errmsg)
+ {
+ 	if (quiet == 0)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
+
+ void err_crit(char *errmsg)
+ {
+ 	if (quiet <= 2)
+-		fprintf(stderr, errmsg);
++		fprintf(stderr, "%s", errmsg);
+ }
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch b/nixpkgs/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch
new file mode 100755
index 000000000000..6bead60dc56b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/malloc_to_stdlib.patch
@@ -0,0 +1,26 @@
+From e295844e8ef5c13487996ab700e5f12a7fadb1a6 Mon Sep 17 00:00:00 2001
+From: Private <private@private.priv>
+Date: Wed, 30 Dec 2020 16:06:46 -0800
+Subject: [PATCH] malloc.h to stdlib.h in rfc2440.c
+
+The malloc.h is deprecated and should not be used
+---
+ src/rfc2440.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/rfc2440.c b/src/rfc2440.c
+index 5a1f296..4d6a5db 100644
+--- a/src/rfc2440.c
++++ b/src/rfc2440.c
+@@ -23,7 +23,7 @@
+ #include <zlib.h>
+ #endif
+ #include <stdio.h>
+-#include <malloc.h>
++#include <stdlib.h>
+ 
+ #include "xmalloc.h"
+ #include "keys.h"
+-- 
+2.13.5
+
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/overflow_CVE-2012-4409.patch b/nixpkgs/pkgs/tools/misc/mcrypt/overflow_CVE-2012-4409.patch
new file mode 100644
index 000000000000..bf747a58266a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/overflow_CVE-2012-4409.patch
@@ -0,0 +1,24 @@
+From 3efb40e17ce4f76717ae17a1ce1e1f747ddf59fd Mon Sep 17 00:00:00 2001
+From: Alon Bar-Lev <alon.barlev@gmail.com>
+Date: Sat, 22 Dec 2012 22:37:06 +0200
+Subject: [PATCH] cleanup: buffer overflow
+
+---
+ mcrypt-2.6.8/src/extra.c |    2 ++
+ 1 files changed, 2 insertions(+), 0 deletions(-)
+
+diff --git a/mcrypt-2.6.8/src/extra.c b/mcrypt-2.6.8/src/extra.c
+index 3082f82..c7a1ac0 100644
+--- a/src/extra.c
++++ b/src/extra.c
+@@ -241,6 +241,8 @@ int check_file_head(FILE * fstream, char *algorithm, char *mode,
+ 		if (m_getbit(6, flags) == 1) { /* if the salt bit is set */
+ 			if (m_getbit(0, sflag) != 0) { /* if the first bit is set */
+ 				*salt_size = m_setbit(0, sflag, 0);
++				if (*salt_size > sizeof(tmp_buf))
++					err_quit(_("Salt is too long\n"));
+ 				if (*salt_size > 0) {
+ 					fread(tmp_buf, 1, *salt_size,
+ 					      fstream);
+--
+1.7.8.6
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/segv.patch b/nixpkgs/pkgs/tools/misc/mcrypt/segv.patch
new file mode 100644
index 000000000000..6796163418f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/segv.patch
@@ -0,0 +1,39 @@
+From 5bee29fae8f0e936ad4c957aef6035d09532a57a Mon Sep 17 00:00:00 2001
+From: Alon Bar-Lev <alon.barlev@gmail.com>
+Date: Sat, 22 Dec 2012 22:04:27 +0200
+Subject: [PATCH] cleanup: fixup segv on buffer access
+
+use exact buffer size instead of guess.
+
+do not copy out of source buffer.
+
+Signed-off-by: Alon Bar-Lev <alon.barlev@gmail.com>
+---
+ mcrypt-2.6.8/src/rfc2440.c |    5 +++--
+ 1 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/mcrypt-2.6.8/src/rfc2440.c b/mcrypt-2.6.8/src/rfc2440.c
+index 5a1f296..929b9ab 100644
+--- a/src/rfc2440.c
++++ b/src/rfc2440.c
+@@ -497,7 +497,7 @@ plaintext_encode(const USTRING dat)
+     time_t t;
+
+     assert(dat->len > 0);
+-    result = make_ustring( NULL,  2 * dat->len); /* xxx */
++    result = make_ustring( NULL,  dat->len + 12); /* xxx */
+     newdat = (USTRING)dat;
+     result->d[pos++] = (0x80 | 0x40 | PKT_PLAINTEXT);
+
+@@ -810,7 +810,8 @@ encrypted_encode(const USTRING pt, const DEK *dek)
+     _mcrypt_encrypt(dek->hd, rndpref, dek->blocklen + 2, NULL, 0);
+     _mcrypt_sync(dek->hd, rndpref, dek->blocklen);
+
+-    ct = make_ustring( rndpref,   2 * pt->len); /* xxx */
++    ct = make_ustring( NULL, dek->blocklen + 2 + pt->len + 12); /* xxx */
++    memcpy(ct->d, rndpref, dek->blocklen + 2);
+     pos = dek->blocklen + 2;
+
+     _mcrypt_encrypt(dek->hd, ct->d + pos, pt->len, pt->d, pt->len);
+--
+1.7.8.6
diff --git a/nixpkgs/pkgs/tools/misc/mcrypt/sprintf_CVE-2012-4527.patch b/nixpkgs/pkgs/tools/misc/mcrypt/sprintf_CVE-2012-4527.patch
new file mode 100644
index 000000000000..1c9ade807778
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mcrypt/sprintf_CVE-2012-4527.patch
@@ -0,0 +1,108 @@
+Description: [CVE-2012-4527] Stack-based buffer overflow with long file names
+ .
+ A buffer overflow in mcrypt version 2.6.8 and earlier due to long filenames.
+ If a user were tricked into attempting to encrypt/decrypt specially crafted
+ long filename(s), this flaw would cause a stack-based buffer overflow that
+ could potentially lead to arbitrary code execution.
+ .
+ Note that this is caught by FORTIFY_SOURCE, which makes this a crash-only
+ bug on wheezy.
+Author: Attila Bogar, Jean-Michel Vourgère <jmv_deb@nirgal.com>
+Origin: https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-4527
+Bug: CVE-2012-4527
+Bug-Debian: http://bugs.debian.org/690924
+Forwarded: no
+Last-Update: 2012-11-01
+Index: mcrypt-2.6.8/src/mcrypt.c
+===================================================================
+--- mcrypt-2.6.8.orig/src/mcrypt.c
++++ mcrypt-2.6.8/src/mcrypt.c
+@@ -41,4 +41,6 @@
+
++/* Temporary error message can contain one file name and 1k of text */
++#define ERRWIDTH ((PATH_MAX)+1024)
+-char tmperr[128];
++char tmperr[ERRWIDTH];
+ unsigned int stream_flag = FALSE;
+ char *keymode = NULL;
+ char *mode = NULL;
+@@ -482,7 +485,7 @@
+ #ifdef HAVE_STAT
+       if (stream_flag == FALSE) {
+ 	 if (is_normal_file(file[i]) == FALSE) {
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: %s is not a regular file. Skipping...\n"),
+ 		    program_name, file[i]);
+@@ -501,7 +504,7 @@
+ 	    dinfile = file[i];
+ 	 if ((isatty(fileno((FILE *) (stdin))) == 1)
+ 	     && (stream_flag == TRUE) && (force == 0)) {	/* not a tty */
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: Encrypted data will not be read from a terminal.\n"),
+ 		    program_name);
+@@ -520,7 +523,7 @@
+ 	    einfile = file[i];
+ 	 if ((isatty(fileno((FILE *) (stdout))) == 1)
+ 	     && (stream_flag == TRUE) && (force == 0)) {	/* not a tty */
+-	    sprintf(tmperr,
++	    snprintf(tmperr, ERRWIDTH,
+ 		    _
+ 		    ("%s: Encrypted data will not be written to a terminal.\n"),
+ 		    program_name);
+@@ -544,7 +547,7 @@
+ 	    strcpy(outfile, einfile);
+ 	    /* if file has already the .nc ignore it */
+ 	    if (strstr(outfile, ".nc") != NULL) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("%s: file %s has the .nc suffix... skipping...\n"),
+ 		       program_name, outfile);
+@@ -590,10 +593,10 @@
+
+ 	 if (x == 0) {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr, _("File %s was decrypted.\n"), dinfile);
++	       snprintf(tmperr, ERRWIDTH, _("File %s was decrypted.\n"), dinfile);
+ 	       err_warn(tmperr);
+ 	    } else {
+-	       sprintf(tmperr, _("Stdin was decrypted.\n"));
++	       snprintf(tmperr, ERRWIDTH, _("Stdin was decrypted.\n"));
+ 	       err_warn(tmperr);
+ 	    }
+ #ifdef HAVE_STAT
+@@ -610,7 +613,7 @@
+
+ 	 } else {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("File %s was NOT decrypted successfully.\n"),
+ 		       dinfile);
+@@ -636,10 +639,10 @@
+
+ 	 if (x == 0) {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr, _("File %s was encrypted.\n"), einfile);
++	       snprintf(tmperr, ERRWIDTH, _("File %s was encrypted.\n"), einfile);
+ 	       err_warn(tmperr);
+ 	    } else {
+-	       sprintf(tmperr, _("Stdin was encrypted.\n"));
++	       snprintf(tmperr, ERRWIDTH, _("Stdin was encrypted.\n"));
+ 	       err_warn(tmperr);
+ 	    }
+ #ifdef HAVE_STAT
+@@ -655,7 +658,7 @@
+
+ 	 } else {
+ 	    if (stream_flag == FALSE) {
+-	       sprintf(tmperr,
++	       snprintf(tmperr, ERRWIDTH,
+ 		       _
+ 		       ("File %s was NOT encrypted successfully.\n"),
+ 		       einfile);
diff --git a/nixpkgs/pkgs/tools/misc/mdbtools/default.nix b/nixpkgs/pkgs/tools/misc/mdbtools/default.nix
new file mode 100644
index 000000000000..327b58d8d78b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mdbtools/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchFromGitHub, glib, readline
+, bison, flex, pkg-config, autoreconfHook
+, txt2man, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mdbtools";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mdbtools";
+    repo = "mdbtools";
+    rev = "v${version}";
+    sha256 = "sha256-e9rgTWu8cwuccpp/wAfas1ZeQPTpGcgE6YjLz7KRnhw=";
+  };
+
+  configureFlags = [ "--disable-scrollkeeper" ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=unused-but-set-variable";
+
+  nativeBuildInputs = [
+    pkg-config bison flex autoreconfHook txt2man which
+  ];
+
+  buildInputs = [ glib readline ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = ".mdb (MS Access) format tools";
+    license = with licenses; [ gpl2 lgpl2 ];
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    inherit (src.meta) homepage;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mdr/default.nix b/nixpkgs/pkgs/tools/misc/mdr/default.nix
new file mode 100644
index 000000000000..b33c51c99ca0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mdr/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "mdr";
+  version = "0.2.5";
+
+  src = fetchFromGitHub {
+    owner = "MichaelMure";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ibM3303pXnseAFP9qFTOzj0G/SxRPX+UeRfbJ+MCABk=";
+  };
+
+  vendorHash = "sha256-5jzU4EybEGKoEXCFhnu7z4tFRS9fgf2wJXhkvigRM0E=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.GitCommit=${src.rev}"
+    "-X main.GitLastTag=${version}"
+    "-X main.GitExactTag=${version}"
+  ];
+
+  meta = with lib; {
+    description = "MarkDown Renderer for the terminal";
+    homepage = "https://github.com/MichaelMure/mdr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "mdr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mdslides/default.nix b/nixpkgs/pkgs/tools/misc/mdslides/default.nix
new file mode 100644
index 000000000000..f329d02237a0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mdslides/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "mdslides";
+  version = "unstable-2022-12-15";
+
+  src = fetchFromGitHub {
+    owner  = "dadoomer";
+    repo   = "markdown-slides";
+    rev = "fd27dd09cf90f00093a393338e08953c8d65d68e";
+    sha256 = "sha256-31ALsy1P/vfI+H6Onmg4TXLeKbVAQ1FlnFs4k6ZOgHQ=";
+  };
+
+  doCheck = false;
+
+  meta = with lib; {
+    longDescription = "Using markdown, write simple but beautiful presentations with math, animations and media, which can be visualized in a web browser or exported to PDF.";
+    homepage    = "https://github.com/dadoomer/markdown-slides";
+    license     = licenses.mit;
+    maintainers = [ maintainers.qjoly ];
+    mainProgram = "mdslides";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/me_cleaner/default.nix b/nixpkgs/pkgs/tools/misc/me_cleaner/default.nix
new file mode 100644
index 000000000000..ec742b11c98e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/me_cleaner/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3, fetchFromGitHub }:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "me_cleaner";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "corna";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1bdj2clm13ir441vn7sv860xsc5gh71ja5lc2wn0gggnff0adxj4";
+  };
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Tool for partial deblobbing of Intel ME/TXE firmware images";
+    longDescription = ''
+      me_cleaner is a Python script able to modify an Intel ME firmware image
+      with the final purpose of reducing its ability to interact with the system.
+    '';
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "me_cleaner.py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/megacli/default.nix b/nixpkgs/pkgs/tools/misc/megacli/default.nix
new file mode 100644
index 000000000000..b198b030f3ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/megacli/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, rpmextract, ncurses5, patchelf, fetchurl, unzip }:
+
+stdenv.mkDerivation rec {
+  pname = "megacli";
+  version = "8.07.14";
+
+  src = fetchurl {
+    url = "https://docs.broadcom.com/docs-and-downloads/raid-controllers/raid-controllers-common-files/${builtins.replaceStrings ["."] ["-"] version}_MegaCLI.zip";
+    sha256 = "1sdn58fbmd3fj4nzbajq3gcyw71ilgdh45r5p4sa6xmb7np55cfr";
+  };
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [rpmextract ncurses5];
+  libPath =
+    lib.makeLibraryPath
+       [ stdenv.cc.cc stdenv.cc.libc ncurses5 ];
+
+  buildCommand = ''
+    unzip ${src}
+    rpmextract Linux/MegaCli-${version}-1.noarch.rpm
+
+    mkdir -p $out/{bin,share/MegaRAID/MegaCli}
+    cp -r opt $out
+    cp ${version}_MegaCLI.txt $out/share/MegaRAID/MegaCli
+
+    ${patchelf}/bin/patchelf \
+      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath ${libPath}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.cc.lib}/lib \
+      $out/opt/MegaRAID/MegaCli/MegaCli64
+
+    ln -s $out/opt/MegaRAID/MegaCli/MegaCli64 $out/bin/MegaCli64
+    eval fixupPhase
+  '';
+
+  meta = {
+    description = "CLI program for LSI MegaRAID cards, which also works with some Dell PERC RAID cards";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "MegaCli64";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/melody/default.nix b/nixpkgs/pkgs/tools/misc/melody/default.nix
new file mode 100644
index 000000000000..b4284a63eec1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/melody/default.nix
@@ -0,0 +1,22 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "melody";
+  version = "0.19.0";
+
+  src = fetchCrate {
+    pname = "melody_cli";
+    inherit version;
+    sha256 = "sha256-sJVZ4dRP6mAx9g7iqwI3L2cMa5x4qQuzKWPXvOOq6q8=";
+  };
+
+  cargoHash = "sha256-8UWz+gYUxf2UNWZCnhQlGiSX6kPsHPlYcdl7wD3Rchs=";
+
+  meta = with lib; {
+    description = "Language that compiles to regular expressions";
+    homepage = "https://github.com/yoav-lavi/melody";
+    license = licenses.mit;
+    maintainers = with maintainers; [ joelkoen ];
+    mainProgram = "melody";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/memtest86+/default.nix b/nixpkgs/pkgs/tools/misc/memtest86+/default.nix
new file mode 100644
index 000000000000..297ef5dff041
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/memtest86+/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "memtest86+";
+  version = "7.00";
+
+  src = fetchFromGitHub {
+    owner = "memtest86plus";
+    repo = "memtest86plus";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-DVYiE9yi20IR2AZs8bya1h9vK4si7nKdg9Nqef4WTrw=";
+  };
+
+  # Binaries are booted directly by BIOS/UEFI or bootloader
+  # and should not be patched/stripped
+  dontPatchELF = true;
+  dontStrip = true;
+
+  passthru.efi = "${finalAttrs.finalPackage}/memtest.efi";
+
+  preBuild = ''
+    cd ${if stdenv.isi686 then "build32" else "build64"}
+  '';
+
+  installPhase = ''
+    install -Dm0444 -t $out/ memtest.bin memtest.efi
+  '';
+
+  meta = {
+    homepage = "https://www.memtest.org/";
+    description = "A tool to detect memory errors";
+    license = lib.licenses.gpl2;
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    maintainers = [ lib.maintainers.LunNova ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix b/nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix
new file mode 100644
index 000000000000..264fe013b27a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/memtest86-efi/default.nix
@@ -0,0 +1,64 @@
+{ stdenv
+, lib
+, fetchzip
+, util-linux
+, jq
+, mtools
+}:
+
+stdenv.mkDerivation rec {
+  pname = "memtest86-efi";
+  version = "9.3.1000";
+
+  src = fetchzip {
+    # We're using the Internet Archive Wayback Machine because the company developing MemTest86 has stopped providing a versioned download link for the latest version:
+    # https://forums.passmark.com/memtest86/44494-version-8-1-distribution-file-is-not-versioned
+    url = "https://web.archive.org/web/20211111004725/https://www.memtest86.com/downloads/memtest86-usb.zip";
+    sha256 = "sha256-GJdZCUFw1uX4HcaaAy5QqDGNqHTFtrqla13wF7xCAaM=";
+    stripRoot = false;
+  };
+
+  nativeBuildInputs = [
+    util-linux
+    jq
+    mtools
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    # memtest86 is distributed as a bootable USB image.  It contains the actual
+    # memtest86 EFI app.
+    #
+    # The following uses sfdisk to calculate the offset of the FAT EFI System
+    # Partition in the disk image, and mcopy to extract the actual EFI app from
+    # the filesystem so that it can be installed directly on the hard drive.
+    IMG=$src/memtest86-usb.img
+    ESP_OFFSET=$(sfdisk --json $IMG | jq -r '
+      # Partition type GUID identifying EFI System Partitions
+      def ESP_GUID: "C12A7328-F81F-11D2-BA4B-00A0C93EC93B";
+      .partitiontable |
+      .sectorsize * (.partitions[] | select(.type == ESP_GUID) | .start)
+    ')
+    mkdir $out
+    mcopy -vsi $IMG@@$ESP_OFFSET ::'/EFI/BOOT/*' $out/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.memtest86.com/";
+    downloadPage = "https://www.memtest86.com/download.htm";
+    changelog = "https://www.memtest86.com/whats-new.html";
+    description = "A tool to detect memory errors, to be run from a bootloader";
+    longDescription = ''
+      A UEFI app that is able to detect errors in RAM.  It can be run from a
+      bootloader.  Released under a proprietary freeware license.
+    '';
+    # MemTest86 Free Edition is free to download with no restrictions on usage. However, the source code is not available.
+    # https://www.memtest86.com/tech_license-information.html
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ cdepillabout ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mermaid-filter/default.nix b/nixpkgs/pkgs/tools/misc/mermaid-filter/default.nix
new file mode 100644
index 000000000000..3ed315784569
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mermaid-filter/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, makeWrapper
+, chromium
+}:
+
+buildNpmPackage rec {
+  pname = "mermaid-filter";
+  version = "1.4.7";
+
+  src = fetchFromGitHub {
+    owner = "raghur";
+    repo = "mermaid-filter";
+    rev = "v${version}";
+    hash = "sha256-GG2RWr5nVe6PCcTEJLmPyKL2j7ggSyNnHZAffNvPukg=";
+  };
+
+  npmDepsHash = "sha256-Hj4h8xTch2Z3ByUhxzPhbCTSXNOXuTXC6XUrBkRvQ/U=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  env.PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = 1;
+
+  dontNpmBuild = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/mermaid-filter \
+      --set PUPPETEER_EXECUTABLE_PATH ${chromium}/bin/chromium
+  '';
+
+  meta = with lib; {
+    description = "Pandoc filter for creating diagrams in mermaid syntax blocks in markdown docs";
+    homepage = "https://github.com/raghur/mermaid-filter";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ners ];
+    platforms = chromium.meta.platforms;
+    mainProgram = "mermaid-filter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/microplane/default.nix b/nixpkgs/pkgs/tools/misc/microplane/default.nix
new file mode 100644
index 000000000000..53d5cc567f09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/microplane/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "microplane";
+  version = "0.0.34";
+
+  src = fetchFromGitHub {
+    owner = "Clever";
+    repo = "microplane";
+    rev = "v${version}";
+    sha256 = "sha256-ZrBkVXRGZp8yGFIBo7sLGvJ8pMQq7Cq0xJiko57z164=";
+  };
+
+  vendorHash = "sha256-PqSjSFTVrIsQ065blIxZ9H/ARku6BEcnjboH+0K0G14=";
+
+  ldflags = [
+    "-s" "-w" "-X main.version=${version}"
+  ];
+
+  postInstall = ''
+    ln -s $out/bin/microplane $out/bin/mp
+  '';
+
+  meta = with lib; {
+    description = "A CLI tool to make git changes across many repos";
+    homepage = "https://github.com/Clever/microplane";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dbirks ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mimeo/default.nix b/nixpkgs/pkgs/tools/misc/mimeo/default.nix
new file mode 100644
index 000000000000..49a86807017f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mimeo/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchurl, desktop-file-utils, file, python3Packages }:
+
+let version = "2023";
+in python3Packages.buildPythonApplication {
+  pname = "mimeo";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://xyne.dev/projects/mimeo/src/mimeo-${version}.tar.xz";
+    hash = "sha256-CahvSypwR1aHVDHTdtty1ZfaKBWPolxc73uZ5OyeqZA=";
+  };
+
+  buildInputs = [ file desktop-file-utils ];
+
+  propagatedBuildInputs = [ python3Packages.pyxdg ];
+
+  preConfigure = ''
+    substituteInPlace Mimeo.py \
+      --replace "EXE_UPDATE_DESKTOP_DATABASE = 'update-desktop-database'" \
+                "EXE_UPDATE_DESKTOP_DATABASE = '${desktop-file-utils}/bin/update-desktop-database'" \
+      --replace "EXE_FILE = 'file'" \
+                "EXE_FILE = '${file}/bin/file'"
+  '';
+
+  installPhase = "install -Dm755 Mimeo.py $out/bin/mimeo";
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/mimeo --help > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Open files by MIME-type or file name using regular expressions";
+    homepage = "https://xyne.dev/projects/mimeo/";
+    license = [ licenses.gpl2Only ];
+    maintainers = [ maintainers.rycee ];
+    platforms = platforms.unix;
+    mainProgram = "mimeo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/minicom/default.nix b/nixpkgs/pkgs/tools/misc/minicom/default.nix
new file mode 100644
index 000000000000..361909ebddf2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/minicom/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, autoreconfHook
+, makeWrapper
+, pkg-config
+, lrzsz
+, ncurses
+, libiconv
+, IOKit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "minicom";
+  version = "2.9";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "minicom-team";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-+fKvHrApDXm94LItXv+xSDIE5zD7rTY5IeNSuzQglpg=";
+  };
+
+  buildInputs = [ ncurses ] ++ lib.optionals stdenv.isDarwin [ libiconv IOKit ];
+
+  nativeBuildInputs = [ autoreconfHook makeWrapper pkg-config ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--enable-lock-dir=/var/lock"
+  ];
+
+  patches = [ ./xminicom_terminal_paths.patch ];
+
+  preConfigure = ''
+    # Have `configure' assume that the lock directory exists.
+    substituteInPlace configure \
+      --replace 'test -d $UUCPLOCK' true
+  '';
+
+  postInstall = ''
+    for f in $out/bin/*minicom ; do
+      wrapProgram $f \
+        --prefix PATH : ${lib.makeBinPath [ lrzsz ]}:$out/bin
+    done
+  '';
+
+  meta = with lib; {
+    description = "Modem control and terminal emulation program";
+    homepage = "https://salsa.debian.org/minicom-team/minicom";
+    license = licenses.gpl2;
+    longDescription = ''
+      Minicom is a menu driven communications program. It emulates ANSI
+      and VT102 terminals. It has a dialing directory and auto zmodem
+      download.
+    '';
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch b/nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch
new file mode 100644
index 000000000000..18535253d9f5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/minicom/xminicom_terminal_paths.patch
@@ -0,0 +1,79 @@
+diff --git a/src/xminicom b/src/xminicom
+index a59aa08..cef153b 100755
+--- a/src/xminicom
++++ b/src/xminicom
+@@ -7,57 +7,39 @@
+ #
+ # version	$Id: xminicom,v 1.4 2008-06-09 20:48:35 al-guest Exp $
+
+-findcmd()
+-{
+-  IFS=:
+-  for i in $PATH
+-  do
+-	if [ -x $i\/$1 ]
+-	then
+-		result=$i\/$1
+-		IFS=
+-		return 0
+-	fi
+-  done
+-  result=
+-  IFS=
+-  return 1
++findcmd() {
++  result=$(command -v $1)
+ }
+
+-if findcmd x-terminal-emulator
+-then
++if findcmd x-terminal-emulator ; then
+   exec $result -T minicom -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd color_xterm
+-then
++if findcmd konsole ; then
++  exec $result -T minicom -geometry 80x25 -e minicom -m -c on "$@"
++  exit 1
++fi
++
++if findcmd gnome-terminal ; then
++  exec $result -T minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
++  exit 1
++fi
++
++if findcmd color_xterm ; then
+   exec $result -T minicom -bg black -fg grey -n minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd rxvt
+-then
++if findcmd rxvt ; then
+   exec $result -bg black -fg grey -n minicom -T minicom -sl 0 -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd kterm
+-then
++if findcmd xterm ; then
+   exec $result -T minicom -n minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+   exit 1
+ fi
+
+-if findcmd xterm
+-then
+-  if [ -f /etc/debian_version ]
+-  then
+-  exec $result -T minicom -n minicom -bg black -fg grey -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+-  else
+-  exec $result -T minicom -n minicom -geometry 80x25 -e "if ! minicom -m -c on $*; then echo Press ENTER to continue...; read; fi"
+-  fi
+-  exit 1
+-fi
+-
+-echo "xminicom: rxvt, color_xterm or xterm NOT found!" 1>&2
++echo "xminicom: konsole, gnome-terminal, rxvt, color_xterm or xterm NOT found!" 1>&2
+ exit 1
diff --git a/nixpkgs/pkgs/tools/misc/minipro/default.nix b/nixpkgs/pkgs/tools/misc/minipro/default.nix
new file mode 100644
index 000000000000..870c4706f882
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/minipro/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, pkg-config
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "minipro";
+  version = "0.6";
+
+  src = fetchFromGitLab {
+    owner = "DavidGriffith";
+    repo = "minipro";
+    rev = version;
+    sha256 = "sha256-6i4PYzSm6lcO/Nb6n3holrNe4TtAnG2o81ZIMAIGqOE=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ];
+  makeFlags = [
+    "VERSION=${version}"
+    "PREFIX=$(out)"
+    "UDEV_DIR=$(out)/lib/udev"
+    "COMPLETIONS_DIR=$(out)/share/bash-completion/completions"
+    "PKG_CONFIG=${pkg-config}/bin/${pkg-config.targetPrefix}pkg-config"
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "CFLAGS=-O2"
+  ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/DavidGriffith/minipro";
+    description = "An open source program for controlling the MiniPRO TL866xx series of chip programmers";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.bmwalters ];
+    mainProgram = "minipro";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/miniserve/default.nix b/nixpkgs/pkgs/tools/misc/miniserve/default.nix
new file mode 100644
index 000000000000..0bdbd91a1dc6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/miniserve/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+, curl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "miniserve";
+  version = "0.27.1";
+
+  src = fetchFromGitHub {
+    owner = "svenstaro";
+    repo = "miniserve";
+    rev = "v${version}";
+    hash = "sha256-aqsEJJSb5dL7wEdDXiKEyqwCpg0O2Ld5jT+Hjdptha4=";
+  };
+
+  cargoHash = "sha256-pQVvL9pUK9QTIDG4axuKyYQ4NKO8M4M38ajYDSHFxew=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  nativeCheckInputs = [
+    curl
+  ];
+
+  checkFlags = [
+    "--skip=bind_ipv4_ipv6::case_2"
+    "--skip=qrcode_hidden_in_tty_when_disabled"
+    "--skip=qrcode_shown_in_tty_when_enabled"
+    "--skip=show_root_readme_contents"
+    "--skip=validate_printed_urls"
+  ];
+
+  postInstall = ''
+    $out/bin/miniserve --print-manpage >miniserve.1
+    installManPage miniserve.1
+
+    installShellCompletion --cmd miniserve \
+      --bash <($out/bin/miniserve --print-completions bash) \
+      --fish <($out/bin/miniserve --print-completions fish) \
+      --zsh <($out/bin/miniserve --print-completions zsh)
+  '';
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "CLI tool to serve files and directories over HTTP";
+    homepage = "https://github.com/svenstaro/miniserve";
+    changelog = "https://github.com/svenstaro/miniserve/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "miniserve";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ministat/default.nix b/nixpkgs/pkgs/tools/misc/ministat/default.nix
new file mode 100644
index 000000000000..d0f88e5d1b1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ministat/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchgit }:
+
+stdenv.mkDerivation rec {
+  pname = "ministat";
+  version = "20150715-1";
+
+  src = fetchgit {
+    url = "https://git.decadent.org.uk/git/ministat.git";
+    rev = "refs/tags/debian/${version}";
+    sha256 = "1p4g0yqgsy4hiqhr8gqp8d38zxzrss5qz70s0bw3i2pg4w668k6f";
+  };
+
+  postPatch = ''
+    patch -p1 < debian/patches/fix-ctype-usage.patch
+    patch -p1 < debian/patches/not-bsd
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp ministat $out/bin
+    cp ministat.1 $out/share/man/man1/
+  '';
+
+  meta = with lib; {
+    description = "Simple tool for statistical comparison of data sets";
+    homepage = "https://git.decadent.org.uk/gitweb/?p=ministat.git";
+    license = licenses.beerware;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.all;
+    mainProgram = "ministat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mise/default.nix b/nixpkgs/pkgs/tools/misc/mise/default.nix
new file mode 100644
index 000000000000..280b7adde970
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mise/default.nix
@@ -0,0 +1,85 @@
+{ lib
+, nix-update-script
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, coreutils
+, bash
+, pkg-config
+, openssl
+, direnv
+, Security
+, SystemConfiguration
+, mise
+, testers
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mise";
+  version = "2024.4.8";
+
+  src = fetchFromGitHub {
+    owner = "jdx";
+    repo = "mise";
+    rev = "v${version}";
+    hash = "sha256-bIw7j7KPHlgIucV/onvp92k0OlNgaxqiVq/Cnj0kIuQ=";
+
+    # registry is not needed for compilation nor for tests.
+    # contains files with the same name but different case, which cause problems with hash on darwin
+    postFetch = ''
+      rm -rf $out/registry
+    '';
+  };
+
+  cargoHash = "sha256-yMpU39SU4Ut7vUQdzkBjhf8p8yCU350HMYKGm5CCado=";
+
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+
+  postPatch = ''
+    patchShebangs --build \
+      ./test/data/plugins/**/bin/* \
+      ./src/fake_asdf.rs \
+      ./src/cli/reshim.rs \
+      ./test/cwd/.mise/tasks/filetask
+
+    substituteInPlace ./src/env_diff.rs \
+      --replace '"bash"' '"${bash}/bin/bash"'
+
+    substituteInPlace ./src/cli/direnv/exec.rs \
+      --replace '"env"' '"${coreutils}/bin/env"' \
+      --replace 'cmd!("direnv"' 'cmd!("${direnv}/bin/direnv"'
+  '';
+
+  checkFlags = [
+    # Requires .git directory to be present
+    "--skip=cli::plugins::ls::tests::test_plugin_list_urls"
+  ];
+  cargoTestFlags = [ "--all-features" ];
+  # some tests access the same folders, don't test in parallel to avoid race conditions
+  dontUseCargoParallelTests = true;
+
+  postInstall = ''
+    installManPage ./man/man1/mise.1
+
+    installShellCompletion \
+      --bash ./completions/mise.bash \
+      --fish ./completions/mise.fish \
+      --zsh ./completions/_mise
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion { package = mise; };
+  };
+
+  meta = {
+    homepage = "https://mise.jdx.dev";
+    description = "The front-end to your dev env";
+    changelog = "https://github.com/jdx/mise/releases/tag/v${version}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ konradmalik ];
+    mainProgram = "mise";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mktorrent/default.nix b/nixpkgs/pkgs/tools/misc/mktorrent/default.nix
new file mode 100644
index 000000000000..74f449969a66
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mktorrent/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "mktorrent";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "pobrn";
+    repo = "mktorrent";
+    rev = "v${version}";
+    sha256 = "17pdc5mandl739f8q26n5is8ga56s83aqcrwhlnnplbxwx2inidr";
+  };
+
+  makeFlags = [ "USE_PTHREADS=1" "USE_OPENSSL=1" "USE_LONG_OPTIONS=1" ]
+    ++ lib.optional stdenv.isi686 "USE_LARGE_FILES=1"
+    ++ lib.optional stdenv.isLinux "CFLAGS=-lgcc_s";
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  buildInputs = [ openssl ];
+
+  meta = with lib; {
+    description = "Command line utility to create BitTorrent metainfo files";
+    homepage = "https://github.com/pobrn/mktorrent/wiki";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ Profpatsch winter ];
+    platforms = platforms.all;
+    mainProgram = "mktorrent";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mloader/default.nix b/nixpkgs/pkgs/tools/misc/mloader/default.nix
new file mode 100644
index 000000000000..f8a6366cd3da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mloader/default.nix
@@ -0,0 +1,36 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "mloader";
+  version = "1.1.11";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-SFFjv4RWh1JZtxkDmaun35gKi5xty1ifIItwaz3lot4=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "protobuf~=3.6" "protobuf"
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    click
+    protobuf
+    requests
+  ];
+
+  # No tests in repository
+  doCheck = false;
+
+  pythonImportsCheck = [ "mloader" ];
+
+  meta = with lib; {
+    description = "Command-line tool to download manga from mangaplus";
+    homepage = "https://github.com/hurlenko/mloader";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ];
+    mainProgram = "mloader";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mlocate/default.nix b/nixpkgs/pkgs/tools/misc/mlocate/default.nix
new file mode 100644
index 000000000000..c9253be930af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mlocate/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mlocate";
+  version = "0.26";
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/mlocate/mlocate-${version}.tar.xz";
+    sha256 = "0gi6y52gkakhhlnzy0p6izc36nqhyfx5830qirhvk3qrzrwxyqrh";
+  };
+
+  makeFlags = [
+    "dbfile=/var/cache/locatedb"
+  ];
+
+  meta = with lib; {
+    description = "Merging locate is an utility to index and quickly search for files";
+    homepage = "https://pagure.io/mlocate";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mlxbf-bootctl/default.nix b/nixpkgs/pkgs/tools/misc/mlxbf-bootctl/default.nix
new file mode 100644
index 000000000000..531956dd4b1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mlxbf-bootctl/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mlxbf-bootctl";
+  version = "1.1-6";
+
+  src = fetchFromGitHub {
+    owner = "Mellanox";
+    repo = pname;
+    rev = "${pname}-${version}";
+    hash = "sha256-F49ZZtty+NARXA/doAFLhsQn4XkPW6GWLXGy4waIaM0=";
+  };
+
+  installPhase = ''
+    install -D mlxbf-bootctl $out/bin/mlxbf-bootctl
+  '';
+
+  meta = with lib; {
+    description = "Control BlueField boot partitions";
+    homepage = "https://github.com/Mellanox/mlxbf-bootctl";
+    license = licenses.bsd2;
+    changelog = "https://github.com/Mellanox/mlxbf-bootctl/releases/tag/${pname}-${version}";
+    # This package is supposed to only run on a BlueField. Thus aarch64-linux
+    # is the only relevant platform.
+    platforms = [ "aarch64-linux" ];
+    maintainers = with maintainers; [ nikstur ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mmake/default.nix b/nixpkgs/pkgs/tools/misc/mmake/default.nix
new file mode 100644
index 000000000000..32f089f1a771
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmake/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mmake";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "tj";
+    repo = "mmake";
+    rev = "v${version}";
+    sha256 = "sha256-JPsVfLIl06PJ8Nsfu7ogwrttB1G93HTKbZFqUTSV9O8=";
+  };
+
+  vendorHash = "sha256-0z+sujzzBl/rtzXbhL4Os+jYfLUuO9PlXshUDxAH9DU=";
+
+  ldflags = [ "-s" "-w" ];
+
+  # Almost all tests require non-local networking, trying to resolve githubusercontent.com.
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/tj/mmake";
+    description = "A small program  which wraps make to provide additional functionality";
+    longDescription = ''
+      Mmake is a small program  which wraps make to provide additional
+      functionality,  such   as  user-friendly  help   output,  remote
+      includes,  and   eventually  more.   It  otherwise  acts   as  a
+      pass-through to standard make.
+    '';
+    license = licenses.mit;
+    maintainers = [ maintainers.gabesoft ];
+    mainProgram = "mmake";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mmctl/default.nix b/nixpkgs/pkgs/tools/misc/mmctl/default.nix
new file mode 100644
index 000000000000..a884f24db470
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmctl/default.nix
@@ -0,0 +1,12 @@
+{ mattermost
+}:
+
+mattermost.overrideAttrs (o: {
+  pname = "mmctl";
+  subPackages = [ "cmd/mmctl" ];
+
+  meta = o.meta // {
+    description = "A remote CLI tool for Mattermost";
+    mainProgram = "mmctl";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/mmv-go/default.nix b/nixpkgs/pkgs/tools/misc/mmv-go/default.nix
new file mode 100644
index 000000000000..da1f443c6736
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmv-go/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mmv-go";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "itchyny";
+    repo = "mmv";
+    rev = "v${version}";
+    sha256 = "sha256-DNLiW0QX7WrBslwVCbvydLnE6JAcfcRALYqwsK/J5x0=";
+  };
+
+  vendorHash = "sha256-HHGiMSBu3nrIChSYaEu9i22nwhLKgVQkPvbTMHBWwAE=";
+
+  ldflags = [ "-s" "-w" "-X main.revision=${src.rev}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/itchyny/mmv";
+    description = "Rename multiple files using your $EDITOR";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "mmv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mmv/default.nix b/nixpkgs/pkgs/tools/misc/mmv/default.nix
new file mode 100644
index 000000000000..f2d2bd81ae11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mmv/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gengetopt, m4, gnupg
+, git, perl, autoconf, automake, help2man, boehmgc }:
+
+stdenv.mkDerivation rec {
+  pname = "mmv";
+  version = "2.6";
+
+  src = fetchFromGitHub {
+    owner = "rrthomas";
+    repo = "mmv";
+    rev = "v${version}";
+    sha256 = "sha256-hYSTENSmkJP5rAemDyTzbzMKFrWYcMpsJDRWq43etTM=";
+    fetchSubmodules = true;
+  };
+
+  preConfigure = ''
+    ./bootstrap
+  '';
+
+  nativeBuildInputs = [ gengetopt m4 git gnupg perl autoconf automake help2man pkg-config ];
+  buildInputs = [ boehmgc ];
+  enableParallelBuilding = true;
+
+  env = lib.optionalAttrs stdenv.cc.isClang {
+    NIX_CFLAGS_COMPILE = toString [
+      "-Wno-error=implicit-function-declaration"
+      "-Wno-error=implicit-int"
+      "-Wno-error=int-conversion"
+    ];
+  };
+
+  meta = {
+    homepage = "https://github.com/rrthomas/mmv";
+    description = "Utility for wildcard renaming, copying, etc";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.all;
+    maintainers = with lib.maintainers; [ siraben ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mnc/default.nix b/nixpkgs/pkgs/tools/misc/mnc/default.nix
new file mode 100644
index 000000000000..b4b033c94f65
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mnc/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromSourcehut
+}:
+
+buildGoModule rec {
+  pname = "mnc";
+  version = "0.4";
+
+  vendorHash = "sha256-H0KmGTWyjZOZLIEWophCwRYPeKLxBC050RI7cMXNbPs=";
+
+  src = fetchFromSourcehut {
+    owner = "~anjan";
+    repo = "mnc";
+    rev = version;
+    sha256 = "sha256-S7MBIxuYI+cc8OMQULt7VS7ouPqhq0Jk+rz6E5GyKac=";
+  };
+
+  meta = with lib; {
+    description = "Opens the user's crontab and echos the time when the next cronjob will be ran";
+    homepage = "https://git.sr.ht/~anjan/mnc";
+    license = licenses.unlicense;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wentam ];
+    mainProgram = "mnc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/moar/default.nix b/nixpkgs/pkgs/tools/misc/moar/default.nix
new file mode 100644
index 000000000000..c99c394f100a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/moar/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "moar";
+  version = "1.23.11";
+
+  src = fetchFromGitHub {
+    owner = "walles";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-dKsDvtFs1/WToqpfW84dxDAHRN13TUnZKKk26h3pQ18=";
+  };
+
+  vendorHash = "sha256-1u/2OlMX2FuZaxWnpU4n5r/4xKe+rK++GoCJiSq/BdE=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage ./moar.1
+  '';
+
+  ldflags = [
+    "-s" "-w"
+    "-X" "main.versionString=v${version}"
+  ];
+
+  meta = with lib; {
+    description = "Nice-to-use pager for humans";
+    homepage = "https://github.com/walles/moar";
+    license = licenses.bsd2WithViews;
+    mainProgram = "moar";
+    maintainers = with maintainers; [ foo-dogsquared ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mods/default.nix b/nixpkgs/pkgs/tools/misc/mods/default.nix
new file mode 100644
index 000000000000..33cc3dd3e133
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mods/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, gitUpdater
+, testers
+, mods
+}:
+
+buildGoModule rec {
+  pname = "mods";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "charmbracelet";
+    repo = "mods";
+    rev = "v${version}";
+    hash = "sha256-ecmfWnrd9gwIEGAOIcOeUnfmkKmq9dLxpKqAHJemhvU=";
+  };
+
+  vendorHash = "sha256-pJ31Lsa5VVix3BM4RrllQA3MJ/JeNIKfQ8RClyFfXCI=";
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  passthru = {
+    updateScript = gitUpdater {
+      rev-prefix = "v";
+      ignoredVersions = ".(rc|beta).*";
+    };
+
+    tests.version = testers.testVersion {
+      package = mods;
+      command = "HOME=$(mktemp -d) mods -v";
+    };
+  };
+
+  meta = with lib; {
+    description = "AI on the command line";
+    homepage = "https://github.com/charmbracelet/mods";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "mods";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix b/nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix
new file mode 100644
index 000000000000..e0c1097d183f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mongodb-compass/default.nix
@@ -0,0 +1,139 @@
+{
+alsa-lib,
+at-spi2-atk,
+at-spi2-core,
+atk,
+cairo,
+cups,
+curl,
+dbus,
+dpkg,
+expat,
+fetchurl,
+fontconfig,
+freetype,
+gdk-pixbuf,
+glib,
+gtk3,
+lib,
+libdrm,
+libnotify,
+libsecret,
+libuuid,
+libxcb,
+libxkbcommon,
+mesa,
+nspr,
+nss,
+pango,
+stdenv,
+systemd,
+wrapGAppsHook,
+xorg,
+}:
+
+let
+  version = "1.42.5";
+
+  rpath = lib.makeLibraryPath [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    curl
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gtk3
+    libdrm
+    libnotify
+    libsecret
+    libuuid
+    libxcb
+    libxkbcommon
+    mesa
+    nspr
+    nss
+    pango
+    stdenv.cc.cc
+    systemd
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libxkbfile
+    xorg.libxshmfence
+    (lib.getLib stdenv.cc.cc)
+  ];
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        url = "https://downloads.mongodb.com/compass/mongodb-compass_${version}_amd64.deb";
+        sha256 = "sha256-46JQXC2Ydq37TomtQdnvk8DwSs8aCfozxqUaEO6hmxo=";
+      }
+    else
+      throw "MongoDB compass is not supported on ${stdenv.hostPlatform.system}";
+      # NOTE While MongoDB Compass is available to darwin, I do not have resources to test it
+      # Feel free to make a PR adding support if desired
+
+in stdenv.mkDerivation {
+  pname = "mongodb-compass";
+  inherit version;
+
+  inherit src;
+
+  buildInputs = [ dpkg wrapGAppsHook gtk3 ];
+  dontUnpack = true;
+
+  buildCommand = ''
+    IFS=$'\n'
+
+    # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here
+    dpkg --fsys-tarfile $src | tar --extract
+
+    mkdir -p $out
+    mv usr/* $out
+
+    # cp -av $out/usr/* $out
+    rm -rf $out/share/lintian
+
+    # The node_modules are bringing in non-linux files/dependencies
+    find $out -name "*.app" -exec rm -rf {} \; || true
+    find $out -name "*.dll" -delete
+    find $out -name "*.exe" -delete
+
+    # Otherwise it looks "suspicious"
+    chmod -R g-w $out
+
+    for file in `find $out -type f -perm /0111 -o -name \*.so\*`; do
+      echo "Manipulating file: $file"
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
+      patchelf --set-rpath ${rpath}:$out/lib/mongodb-compass "$file" || true
+    done
+
+    wrapGAppsHook $out/bin/mongodb-compass
+  '';
+
+  meta = with lib; {
+    description = "The GUI for MongoDB";
+    maintainers = with maintainers; [ bryanasdev000 ];
+    homepage = "https://github.com/mongodb-js/compass";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.sspl;
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "mongodb-compass";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix b/nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix
new file mode 100644
index 000000000000..0ed70de2e8e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mongodb-tools/default.nix
@@ -0,0 +1,50 @@
+{ lib, buildGoModule, fetchFromGitHub, openssl, pkg-config, libpcap }:
+
+buildGoModule rec {
+  pname = "mongo-tools";
+  version = "100.9.4";
+
+  src = fetchFromGitHub {
+    owner = "mongodb";
+    repo = "mongo-tools";
+    rev = version;
+    sha256 = "sha256-FGgO8JNUU0+WqIh13I0i9cprN8qE/020wDXjFsZdFy0=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl libpcap ];
+
+  # Mongodb incorrectly names all of their binaries main
+  # Let's work around this with our own installer
+  buildPhase =
+    let
+      tools = [
+        "bsondump"
+        "mongodump"
+        "mongoexport"
+        "mongofiles"
+        "mongoimport"
+        "mongorestore"
+        "mongostat"
+        "mongotop"
+      ]; in
+    ''
+      # move vendored codes so nixpkgs go builder could find it
+      runHook preBuild
+
+      ${lib.concatMapStrings (t: ''
+        go build -o "$out/bin/${t}" -tags ssl -ldflags "-s -w" ./${t}/main
+      '') tools}
+
+      runHook postBuild
+    '';
+
+  meta = {
+    homepage = "https://github.com/mongodb/mongo-tools";
+    description = "Tools for the MongoDB";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ bryanasdev000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mons/default.nix b/nixpkgs/pkgs/tools/misc/mons/default.nix
new file mode 100644
index 000000000000..d386c901e7c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mons/default.nix
@@ -0,0 +1,96 @@
+{ lib
+, bash
+, coreutils
+, fetchFromGitHub
+, gawk
+, gnugrep
+, gnused
+, help2man
+, resholve
+, xrandr
+}:
+
+resholve.mkDerivation rec {
+  pname = "mons";
+  version = "unstable-2020-03-20";
+
+  src = fetchFromGitHub {
+    owner = "Ventto";
+    repo = pname;
+    rev = "375bbba3aa700c8b3b33645a7fb70605c8b0ff0c";
+    sha256 = "19r5y721yrxhd9jp99s29jjvm0p87vl6xfjlcj38bljq903f21cl";
+    fetchSubmodules = true;
+  };
+
+  /*
+    Remove reference to `%LIBDIR%/liblist.sh`. This would be linked to the
+    non-resholved of the library in the final derivation.
+
+    Patching out the library check; it's bad on multiple levels:
+    1. The check literally breaks if it fails.
+       See https://github.com/Ventto/mons/pull/49
+    2. It doesn't need to do this; source would fail with a
+       sensible message if the script was missing.
+    3. resholve can't wrestle with test/[] (at least until
+       https://github.com/abathur/resholve/issues/78)
+  */
+  postPatch = ''
+    substituteInPlace mons.sh \
+      --replace "lib='%LIBDIR%/liblist.sh'" "" \
+      --replace '[ ! -r "$lib" ] && { "$lib: library not found."; exit 1; }' ""
+  '';
+
+  solutions = {
+    mons = {
+      scripts = [ "bin/mons" "lib/libshlist/liblist.sh" ];
+      interpreter = "${bash}/bin/sh";
+      inputs = [
+        bash
+        coreutils
+        gawk
+        gnugrep
+        gnused
+        xrandr
+      ];
+      fix = {
+        "$lib" = [ "lib/libshlist/liblist.sh" ];
+        "$XRANDR" = [ "xrandr" ];
+      };
+      keep = {
+        /*
+        has a whole slate of *flag variables that it sets to either
+        the true or false builtin and then executes...
+        */
+        "$aFlag" = true;
+        "$dFlag" = true;
+        "$eFlag" = true;
+        "$mFlag" = true;
+        "$nFlag" = true;
+        "$oFlag" = true;
+        "$sFlag" = true;
+        "$OFlag" = true;
+        "$SFlag" = true;
+        "$pFlag" = true;
+        "$iFlag" = true;
+        "$xFlag" = true;
+        "$is_flag" = true;
+      };
+    };
+  };
+
+  nativeBuildInputs = [ help2man ];
+
+  makeFlags = [
+    "DESTDIR=$(out)"
+    "PREFIX="
+  ];
+
+  meta = with lib; {
+    description = "POSIX Shell script to quickly manage 2-monitors display";
+    homepage = "https://github.com/Ventto/mons.git";
+    license = licenses.mit;
+    maintainers = with maintainers; [ thiagokokada ];
+    platforms = platforms.unix;
+    mainProgram = "mons";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/moon-phases/default.nix b/nixpkgs/pkgs/tools/misc/moon-phases/default.nix
new file mode 100644
index 000000000000..f4d5a850efc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/moon-phases/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchCrate, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "moon-phases";
+  version = "0.3.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-8ZdtM246aqc49Q3ygMGk51LIzRA8RIdlaistbKUj3yY=";
+  };
+
+  cargoSha256 = "sha256-5JKM+GnigkpuX4qeGQAjDz/X48ZxXtCfYVwGco13YRM=";
+
+  meta = with lib; {
+    description = "Command-line/WM bar tool to display the moon phase at a certain date";
+    homepage = "https://github.com/mirrorwitch/moon-phases";
+    license = licenses.acsl14;
+    maintainers = with maintainers; [ mirrorwitch ];
+    mainProgram = "moon-phases";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/moreutils/default.nix b/nixpkgs/pkgs/tools/misc/moreutils/default.nix
new file mode 100644
index 000000000000..7d7dd80d7e7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/moreutils/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchgit
+, libxml2
+, libxslt
+, docbook-xsl
+, docbook_xml_dtd_44
+, perlPackages
+, makeWrapper
+, perl # for pod2man
+, darwin
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "moreutils";
+  version = "0.69";
+
+  src = fetchgit {
+    url = "git://git.joeyh.name/moreutils";
+    rev = "refs/tags/${version}";
+    hash = "sha256-hVvRAIXlG8+pAD2v/Ma9Z6EUL/1xIRz7Gx1fOxoQyi0=";
+  };
+
+  preBuild = ''
+    substituteInPlace Makefile --replace /usr/share/xml/docbook/stylesheet/docbook-xsl ${docbook-xsl}/xml/xsl/docbook
+  '';
+
+  strictDeps = true;
+  nativeBuildInputs = [ makeWrapper perl libxml2 libxslt docbook-xsl docbook_xml_dtd_44 ];
+  buildInputs = lib.optional stdenv.isDarwin darwin.cctools;
+
+  propagatedBuildInputs = with perlPackages; [ perl IPCRun TimeDate TimeDuration ];
+
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/chronic --prefix PERL5LIB : $PERL5LIB
+    wrapProgram $out/bin/ts --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  passthru.updateScript = gitUpdater {
+    # No nicer place to find latest release.
+    url = "git://git.joeyh.name/moreutils";
+  };
+
+  meta = with lib; {
+    description = "Growing collection of the unix tools that nobody thought to write long ago when unix was young";
+    homepage = "https://joeyh.name/code/moreutils/";
+    maintainers = with maintainers; [ koral pSub ];
+    platforms = platforms.all;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/moserial/default.nix b/nixpkgs/pkgs/tools/misc/moserial/default.nix
new file mode 100644
index 000000000000..0a708681b409
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/moserial/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, autoreconfHook
+, intltool
+, itstool
+, pkg-config
+, vala
+, glib
+, graphviz
+, yelp-tools
+, gtk3
+, lrzsz
+}:
+
+stdenv.mkDerivation rec {
+  pname = "moserial";
+  version = "3.0.21";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = pname;
+    rev = "moserial_${lib.replaceStrings [ "." ] [ "_" ] version}";
+    sha256 = "sha256-wfdI51ECqVNcUrIVjYBijf/yqpiwSQeMiKaVJSSma3k=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    intltool
+    itstool
+    pkg-config
+    vala
+  ];
+
+  buildInputs = [
+    glib
+    graphviz
+    yelp-tools
+    gtk3
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : ${lib.makeBinPath [ lrzsz ]}
+    )
+  '';
+
+  meta = with lib; {
+    description = "Clean, friendly gtk-based serial terminal for the gnome desktop";
+    homepage = "https://gitlab.gnome.org/GNOME/moserial";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ linsui ];
+    platforms = platforms.linux;
+    mainProgram = "moserial";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/most/default.nix b/nixpkgs/pkgs/tools/misc/most/default.nix
new file mode 100644
index 000000000000..87280b9f295e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/most/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, slang, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "most";
+  version = "5.2.0";
+
+  src = fetchurl {
+    url = "https://www.jedsoft.org/releases/${pname}/${pname}-${version}.tar.gz";
+    hash = "sha256-lFWuuPgm+oOFyFDcIr8PIs+QabPDQj+6S/LG9iJtmQM=";
+  };
+
+  outputs = [ "out" "doc" ];
+
+  makeFlags = [
+    "DOC_DIR=${placeholder "doc"}/share/doc/most"
+  ];
+
+  preConfigure = ''
+    sed -i -e "s|-ltermcap|-lncurses|" configure
+    sed -i autoconf/Makefile.in src/Makefile.in \
+      -e "s|/bin/cp|cp|"  \
+      -e "s|/bin/rm|rm|"
+  '';
+
+  configureFlags = [ "--with-slang=${slang.dev}" ];
+
+  buildInputs = [ slang ncurses ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A terminal pager similar to 'more' and 'less'";
+    longDescription = ''
+      MOST is a powerful paging program for Unix, VMS, MSDOS, and win32
+      systems. Unlike other well-known paging programs most supports multiple
+      windows and can scroll left and right. Why settle for less?
+    '';
+    homepage = "https://www.jedsoft.org/most/index.html";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    mainProgram = "most";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mpdscribble/default.nix b/nixpkgs/pkgs/tools/misc/mpdscribble/default.nix
new file mode 100644
index 000000000000..335dedf12fe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mpdscribble/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, pkg-config
+, meson
+, ninja
+, boost
+, curl
+, libgcrypt
+, libmpdclient
+, systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mpdscribble";
+  version = "0.24";
+
+  src = fetchurl {
+    url = "https://www.musicpd.org/download/mpdscribble/${version}/mpdscribble-${version}.tar.xz";
+    sha256 = "sha256-9rTLp0izuH5wUnC0kjyOI+lMLgD+3VC+sUaNvi+yqOc=";
+  };
+
+  # Fix build issue on darwin; to be removed after the next release
+  patches = [(fetchpatch {
+    name = "remove-empty-static-lib.patch";
+    url = "https://github.com/MusicPlayerDaemon/mpdscribble/commit/0dbcea25c81f3fdc608f71ef71a9784679fee17f.patch";
+    sha256 = "sha256-3wLfQvbwx+OFrCl5vMV7Zps4e4iEYFhqPiVCo5hDqgw=";
+  })];
+
+  postPatch = ''
+    sed '1i#include <ctime>' -i src/Log.cxx # gcc12
+  '';
+
+  nativeBuildInputs = [ pkg-config meson ninja ];
+  buildInputs = [
+    libmpdclient
+    curl
+    boost
+    libgcrypt
+  ] ++ lib.optional stdenv.isLinux systemd;
+
+  meta = with lib; {
+    description = "A MPD client which submits info about tracks being played to a scrobbler";
+    homepage = "https://www.musicpd.org/clients/mpdscribble/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.sohalt ];
+    platforms = platforms.unix;
+    mainProgram = "mpdscribble";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mpremote/default.nix b/nixpkgs/pkgs/tools/misc/mpremote/default.nix
new file mode 100644
index 000000000000..149e3c9686ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mpremote/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, hatchling
+, hatch-requirements-txt
+, hatch-vcs
+, pyserial
+, importlib-metadata
+}:
+buildPythonApplication rec {
+  pname = "mpremote";
+  version = "1.22.2";
+
+  src = fetchFromGitHub {
+    owner = "micropython";
+    repo = "micropython";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-67CAR34VrMOzvNkukDeGRnUfoOLO66R37wsrRHjpp5E=";
+  };
+  sourceRoot = "${src.name}/tools/mpremote";
+  format = "pyproject";
+
+  nativeBuildInputs = [
+    hatchling
+    hatch-requirements-txt
+    hatch-vcs
+  ];
+  propagatedBuildInputs = [
+    pyserial
+    importlib-metadata
+  ];
+
+  pythonImportsCheck = [ "mpremote" ];
+
+  meta = with lib; {
+    description = "An integrated set of utilities to remotely interact with and automate a MicroPython device over a serial connection";
+    homepage = "https://github.com/micropython/micropython/blob/master/tools/mpremote/README.md";
+    platforms = platforms.unix;
+    license = licenses.mit;
+    maintainers = with maintainers; [ _999eagle ];
+    mainProgram = "mpremote";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mprime/default.nix b/nixpkgs/pkgs/tools/misc/mprime/default.nix
new file mode 100644
index 000000000000..e55f8ca50fe0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mprime/default.nix
@@ -0,0 +1,69 @@
+{ stdenv, lib, fetchurl, unzip, boost, curl, hwloc, gmp }:
+
+let
+  throwSystem = throw "Unsupported system: ${stdenv.hostPlatform.system}";
+
+  srcDir = {
+    x86_64-linux = "linux64";
+    i686-linux = "linux";
+    x86_64-darwin = "macosx64";
+  }."${stdenv.hostPlatform.system}" or throwSystem;
+
+  gwnum = {
+    x86_64-linux = "make64";
+    i686-linux = "makefile";
+    x86_64-darwin = "makemac";
+  }."${stdenv.hostPlatform.system}" or throwSystem;
+in
+
+stdenv.mkDerivation rec {
+  pname = "mprime";
+  version = "30.8b15";
+
+  src = fetchurl {
+    url = "https://www.mersenne.org/ftp_root/gimps/p95v${lib.replaceStrings ["."] [""] version}.source.zip";
+    hash = "sha256-CNYorZStHV0aESGX9LfLZ4oD5PFR2UOFLN1MiLaKw58=";
+  };
+
+  postPatch = ''
+    sed -i ${srcDir}/makefile \
+      -e 's/^LFLAGS =.*//'
+    substituteInPlace ${srcDir}/makefile \
+      --replace '-Wl,-Bstatic'  "" \
+      --replace '-Wl,-Bdynamic' ""
+  '';
+
+  sourceRoot = ".";
+
+  nativeBuildInputs = [ unzip ];
+
+  buildInputs = [ boost curl hwloc gmp ];
+
+  enableParallelBuilding = true;
+
+  buildPhase = ''
+    make -C gwnum -f ${gwnum}
+    make -C ${srcDir}
+  '';
+
+  installPhase = ''
+    install -Dm555 -t $out/bin ${srcDir}/mprime
+  '';
+
+  meta = with lib; {
+    description = "Mersenne prime search / System stability tester";
+    longDescription = ''
+      MPrime is the Linux command-line interface version of Prime95, to be run
+      in a text terminal or in a terminal emulator window as a remote shell
+      client. It is identical to Prime95 in functionality, except it lacks a
+      graphical user interface.
+    '';
+    homepage = "https://www.mersenne.org/";
+    # Unfree, because of a license requirement to share prize money if you find
+    # a suitable prime. http://www.mersenne.org/legal/#EULA
+    license = licenses.unfree;
+    # Untested on linux-32 and osx. Works in theory.
+    platforms = ["i686-linux" "x86_64-linux" "x86_64-darwin"];
+    mainProgram = "mprime";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mprocs/default.nix b/nixpkgs/pkgs/tools/misc/mprocs/default.nix
new file mode 100644
index 000000000000..ae0d113f8159
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mprocs/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mprocs";
+  version = "0.6.4";
+
+  src = fetchFromGitHub {
+    owner = "pvolok";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-uwr+cHenV38IsTEW/PQB0kCDsyahiQrBh4s8v8SyEn8=";
+  };
+
+  cargoSha256 = "sha256-H9oHppG7sew/3JrUtWq2Pip1S9H36qYeHu6x/sPfwV0=";
+
+  # Package tests are currently failing (even upstream) but the package seems to work fine.
+  # Relevant issues:
+  # https://github.com/pvolok/mprocs/issues/50
+  # https://github.com/pvolok/mprocs/issues/61
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A TUI tool to run multiple commands in parallel and show the output of each command separately";
+    homepage = "https://github.com/pvolok/mprocs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ GaetanLepage pyrox0 ];
+    mainProgram = "mprocs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mpy-utils/default.nix b/nixpkgs/pkgs/tools/misc/mpy-utils/default.nix
new file mode 100644
index 000000000000..0ee7701b730b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mpy-utils/default.nix
@@ -0,0 +1,21 @@
+{ stdenv, lib, buildPythonApplication, fetchPypi, fusepy, pyserial }:
+
+buildPythonApplication rec {
+  pname = "mpy-utils";
+  version = "0.1.13";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-die8hseaidhs9X7mfFvV8C8zn0uyw08gcHNqmjl+2Z4=";
+  };
+
+  propagatedBuildInputs = [ fusepy pyserial ];
+
+  meta = with lib; {
+    description = "MicroPython development utility programs";
+    homepage = "https://github.com/nickzoic/mpy-utils";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aciceri ];
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mrtg/default.nix b/nixpkgs/pkgs/tools/misc/mrtg/default.nix
new file mode 100644
index 000000000000..343a3d5c2a25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mrtg/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, perl, gd, rrdtool }:
+
+stdenv.mkDerivation rec {
+  pname = "mrtg";
+  version = "2.17.10";
+
+  src = fetchurl {
+    url = "https://oss.oetiker.ch/mrtg/pub/${pname}-${version}.tar.gz";
+    sha256 = "sha256-x/EcteIXpQDYfuO10mxYqGUu28DTKRaIu3krAQ+uQ6w=";
+  };
+
+  buildInputs = [
+    perl
+    gd
+    rrdtool
+  ];
+
+  meta = with lib; {
+    description = "The Multi Router Traffic Grapher";
+    homepage = "https://oss.oetiker.ch/mrtg/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ robberer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ms-sys/default.nix b/nixpkgs/pkgs/tools/misc/ms-sys/default.nix
new file mode 100644
index 000000000000..5d736952d232
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ms-sys/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "ms-sys";
+  version = "2.6.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ms-sys/${pname}-${version}.tar.gz";
+    sha256 = "06xqpm2s9cg8fj7a1822wmh3p4arii0sifssazg1gr6i7xg7kbjz";
+  };
+  # TODO: Remove with next release, see https://sourceforge.net/p/ms-sys/patches/8/
+  patches = [ ./manpages-without-build-timestamps.patch ];
+
+  nativeBuildInputs = [ gettext ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A program for writing Microsoft-compatible boot records";
+    homepage = "https://ms-sys.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    platforms = with platforms; linux;
+    mainProgram = "ms-sys";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch b/nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch
new file mode 100644
index 000000000000..7b031cb34f1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ms-sys/manpages-without-build-timestamps.patch
@@ -0,0 +1,12 @@
+diff -u ms-sys-2.6.0/Makefile ms-sys-2.6.0-fixed/Makefile
+--- ms-sys-2.6.0/Makefile	2015-09-27 20:39:45.000000000 +0200
++++ ms-sys-2.6.0-fixed/Makefile2020-01-06 16:43:55.181477511 +0100
+@@ -121,7 +121,7 @@
+
+ $(DESTDIR)$(MANDIR)/%: $(MAN)/$(dir $(*D))/$(*F)
+ 	install -D -m 644 $(MAN)/$(dir $(*D))$(*F) $@
+-	gzip -f $@
++	gzip -n -f $@
+
+ #$(DESTDIR)$(MANDIR)/%: $(MAN)/$(*F)
+ #	echo t: $<
diff --git a/nixpkgs/pkgs/tools/misc/mslink/default.nix b/nixpkgs/pkgs/tools/misc/mslink/default.nix
new file mode 100644
index 000000000000..82c60ab926f0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mslink/default.nix
@@ -0,0 +1,34 @@
+{ gccStdenv
+, lib
+, fetchurl
+}:
+
+gccStdenv.mkDerivation rec {
+  pname = "mslink";
+  version = "1.3";
+
+  src = fetchurl {
+    url = "http://www.mamachine.org/mslink/mslink_v${version}.tar.gz";
+    sha256 = "1qiwqa6w2in6gk4sxiy37c2wwpakin6l2ad2cf5s7ij96z2ijgqg";
+  };
+
+  preBuild = ''
+    rm mslink # clean up shipped executable
+  '';
+
+  installPhase = ''
+    if [[ "$(uname)" == "Darwin" ]]; then
+      mv mslink.exe mslink
+    fi
+    install -D mslink $out/bin/mslink
+  '';
+
+  meta = with lib; {
+    description = "Create Windows Shortcut Files (.LNK) without using Windows";
+    homepage = "http://www.mamachine.org/mslink/index.en.html";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ mkg20001 ];
+    platforms = platforms.unix;
+    mainProgram = "mslink";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mstflint/default.nix b/nixpkgs/pkgs/tools/misc/mstflint/default.nix
new file mode 100644
index 000000000000..c4c99da85e18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mstflint/default.nix
@@ -0,0 +1,128 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, rdma-core
+, openssl
+, zlib
+, xz
+, expat
+, boost
+, curl
+, pkg-config
+, libxml2
+, pciutils
+, busybox
+, python3
+, automake
+, autoconf
+, libtool
+, git
+# use this to shrink the package's footprint if necessary (e.g. for hardened appliances)
+, onlyFirmwareUpdater ? false
+# contains binary-only libraries
+, enableDPA ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mstflint";
+  version = "4.26.0-1";
+
+  src = fetchurl {
+    url = "https://github.com/Mellanox/mstflint/releases/download/v${version}/mstflint-${version}.tar.gz";
+    hash = "sha256-P8XACcz6d8UTOhFFeTijfFOthBqnUghGlDj9K145sZ8=";
+  };
+
+  patches = [
+    # needed to introduce this with GCC 13. Remove, when https://github.com/Mellanox/mstflint/pull/916 is upstream.
+    (fetchpatch {
+      name = "elf.patch";
+      url = "https://patch-diff.githubusercontent.com/raw/Mellanox/mstflint/pull/916.patch";
+      hash = "sha256-quBdmiuzwThu4MkAaT74eJDlZwIcUZMrLZa8OIcO96w=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    libtool
+    pkg-config
+    libxml2
+    git
+  ];
+
+  buildInputs = [
+    rdma-core
+    zlib
+    libxml2
+    openssl
+  ] ++ lib.optionals (!onlyFirmwareUpdater) [
+    boost
+    curl
+    expat
+    xz
+    python3
+  ];
+
+  preConfigure = ''
+    export CPPFLAGS="-I$(pwd)/tools_layouts -isystem ${libxml2.dev}/include/libxml2"
+    export INSTALL_BASEDIR=$out
+    ./autogen.sh
+  '';
+
+  # Cannot use wrapProgram since the python script's logic depends on the
+  # filename and will get messed up if the executable is named ".xyz-wrapped".
+  # That is why the python executable and runtime dependencies are injected
+  # this way.
+  #
+  # Remove host_cpu replacement again (see https://github.com/Mellanox/mstflint/pull/865),
+  # needs to hit master or a release. master_devel may be rebased.
+  #
+  # Remove patch for regex check, after https://github.com/Mellanox/mstflint/pull/871
+  # got merged.
+  prePatch = [
+  ''
+    patchShebangs eval_git_sha.sh
+    substituteInPlace configure.ac \
+        --replace "build_cpu" "host_cpu"
+    substituteInPlace common/compatibility.h \
+        --replace "#define ROOT_PATH \"/\"" "#define ROOT_PATH \"$out/\""
+    substituteInPlace configure.ac \
+        --replace 'Whether to use GNU C regex])' 'Whether to use GNU C regex])],[AC_MSG_RESULT([yes])'
+  ''
+  (lib.optionals (!onlyFirmwareUpdater) ''
+    substituteInPlace common/python_wrapper.sh \
+      --replace \
+      'exec $PYTHON_EXEC $SCRIPT_PATH "$@"' \
+      'export PATH=$PATH:${lib.makeBinPath [ (placeholder "out") pciutils busybox]}; exec ${python3}/bin/python3 $SCRIPT_PATH "$@"'
+  '')
+  ];
+
+  configureFlags = [
+    "--enable-xml2"
+    "--datarootdir=${placeholder "out"}/share"
+  ] ++ lib.optionals (!onlyFirmwareUpdater) [
+    "--enable-adb-generic-tools"
+    "--enable-cs"
+    "--enable-dc"
+    "--enable-fw-mgr"
+    "--enable-inband"
+    "--enable-rdmem"
+  ] ++ lib.optionals enableDPA [
+    "--enable-dpa"
+  ];
+
+  enableParallelBuilding = true;
+
+  hardeningDisable = [ "format" ];
+
+  dontDisableStatic = true;  # the build fails without this. should probably be reported upstream
+
+  meta = with lib; {
+    description = "Open source version of Mellanox Firmware Tools (MFT)";
+    homepage = "https://github.com/Mellanox/mstflint";
+    license = with licenses; [ gpl2 bsd2 ];
+    maintainers = with maintainers; [ thillux ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mtm/default.nix b/nixpkgs/pkgs/tools/misc/mtm/default.nix
new file mode 100644
index 000000000000..8ecbc087894b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mtm/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "mtm";
+  version = "1.2.1";
+
+  outputs = [ "out" "terminfo" ];
+
+  src = fetchFromGitHub {
+    owner = "deadpixi";
+    repo = pname;
+    rev = version;
+    sha256 = "0gibrvah059z37jvn1qs4b6kvd4ivk2mfihmcpgx1vz6yg70zghv";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "DESTDIR=${placeholder "out"}" "MANDIR=${placeholder "out"}/share/man/man1" ];
+
+  preInstall = ''
+    mkdir -p $out/bin/ $out/share/man/man1
+  '';
+
+  postInstall = ''
+    mkdir -p $terminfo/share/terminfo $out/nix-support
+    tic -x -o $terminfo/share/terminfo mtm.ti
+    echo "$terminfo" >> $out/nix-support/propagated-user-env-packages
+  '';
+
+  meta = with lib; {
+    description = "Perhaps the smallest useful terminal multiplexer in the world";
+    homepage = "https://github.com/deadpixi/mtm";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = [ ];
+    mainProgram = "mtm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/multitail/default.nix b/nixpkgs/pkgs/tools/misc/multitail/default.nix
new file mode 100644
index 000000000000..3732d64dd929
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/multitail/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, pkg-config, cmake }:
+
+stdenv.mkDerivation rec {
+  version = "7.1.2";
+  pname = "multitail";
+
+  src = fetchFromGitHub {
+    owner = "folkertvanheusden";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-00NZI/KFcgEAkvESnx0KQFW1GvX6FgZLA4Z1Fv2qi+E=";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake ];
+
+  buildInputs = [ ncurses ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/multitail $out/bin
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = "https://github.com/folkertvanheusden/multitail";
+    description = "tail on Steroids";
+    maintainers = with lib.maintainers; [ matthiasbeyer ];
+    platforms = lib.platforms.unix;
+    license = lib.licenses.asl20;
+    mainProgram = "multitail";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/multitime/default.nix b/nixpkgs/pkgs/tools/misc/multitime/default.nix
new file mode 100644
index 000000000000..e6f6280abab1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/multitime/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "multitime";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "ltratt";
+    repo = pname;
+    rev = "${pname}-${version}";
+    sha256 = "1p6m4gyy6dw7nxnpsk32qiijagmiq9vwch0fbc25qvmybwqp8qc0";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = {
+    description = "Time command execution over multiple executions";
+
+    longDescription = ''
+      Unix's `time` utility is a simple and often effective way of measuring
+      how long a command takes to run. Unfortunately, running a command once
+      can give misleading timings: the process may create a cache on its first
+      execution, running faster subsequently; other processes may cause the
+      command to be starved of CPU or IO time; etc. It is common to see people
+      run `time` several times and take whichever values they feel most
+      comfortable with. Inevitably, this causes problems.
+
+      `multitime` is, in essence, a simple extension to time which runs a
+      command multiple times and prints the timing means (with confidence
+      intervals), standard deviations, minimums, medians, and maximums having
+      done so. This can give a much better understanding of the command's
+      performance.
+    '';
+
+    license = lib.licenses.mit;
+    homepage = "https://tratt.net/laurie/src/multitime/";
+    platforms = lib.platforms.unix;
+    mainProgram = "multitime";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mutagen-compose/default.nix b/nixpkgs/pkgs/tools/misc/mutagen-compose/default.nix
new file mode 100644
index 000000000000..33358017f24a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mutagen-compose/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mutagen-compose";
+  version = "0.17.6";
+
+  src = fetchFromGitHub {
+    owner = "mutagen-io";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ZcfwpEfdoSMCGtw5Icj1hXbk5CRYS4LBtdaiX62E4I0=";
+  };
+
+  vendorHash = "sha256-XyWi06siSHOKZca0w4WLIFGM63wnF//2rRP4aH5rFAo=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/mutagen-compose" ];
+
+  tags = [ "mutagencompose" ];
+
+  meta = with lib; {
+    description = "Compose with Mutagen integration";
+    homepage = "https://mutagen.io/";
+    changelog = "https://github.com/mutagen-io/mutagen-compose/releases/tag/v${version}";
+    maintainers = [ maintainers.matthewpi ];
+    license = licenses.mit;
+    mainProgram = "mutagen-compose";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mutagen/default.nix b/nixpkgs/pkgs/tools/misc/mutagen/default.nix
new file mode 100644
index 000000000000..d3ffa387d9f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mutagen/default.nix
@@ -0,0 +1,59 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchzip, installShellFiles }:
+
+buildGoModule rec {
+  pname = "mutagen";
+  version = "0.17.1";
+
+  src = fetchFromGitHub {
+    owner = "mutagen-io";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-M7h8qlqqGK4Nl4yXL7ZhGTq/CL+LdDpI/nv90koyu3Y=";
+  };
+
+  vendorHash = "sha256-kfzT+230KY2TJVc0qKMi4TysmltZSgF/OvL5nPLPcbM=";
+
+  agents = fetchzip {
+    name = "mutagen-agents-${version}";
+    # The package architecture does not matter since all packages contain identical mutagen-agents.tar.gz.
+    url = "https://github.com/mutagen-io/mutagen/releases/download/v${version}/mutagen_linux_amd64_v${version}.tar.gz";
+    stripRoot = false;
+    postFetch = ''
+      rm $out/mutagen # Keep only mutagen-agents.tar.gz.
+    '';
+    hash = "sha256-RFB1/gzLjs9w8mebEd4M9Ldv3BrLIj2RsN/QAIJi45E=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  doCheck = false;
+
+  subPackages = [ "cmd/mutagen" "cmd/mutagen-agent" ];
+
+  tags = [ "mutagencli" "mutagenagent" ];
+
+  postInstall = ''
+    install -d $out/libexec
+    ln -s ${agents}/mutagen-agents.tar.gz $out/libexec/
+
+    $out/bin/mutagen generate \
+      --bash-completion-script mutagen.bash \
+      --fish-completion-script mutagen.fish \
+      --zsh-completion-script mutagen.zsh
+
+    installShellCompletion \
+      --cmd mutagen \
+      --bash mutagen.bash \
+      --fish mutagen.fish \
+      --zsh mutagen.zsh
+  '';
+
+  meta = with lib; {
+    description = "Make remote development work with your local tools";
+    homepage = "https://mutagen.io/";
+    changelog = "https://github.com/mutagen-io/mutagen/releases/tag/v${version}";
+    maintainers = [ ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mutt-wizard/default.nix b/nixpkgs/pkgs/tools/misc/mutt-wizard/default.nix
new file mode 100644
index 000000000000..98c160768d98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mutt-wizard/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "mutt-wizard";
+  version = "3.3.1";
+
+  src = fetchFromGitHub {
+    owner = "LukeSmithxyz";
+    repo = "mutt-wizard";
+    rev = "v${version}";
+    sha256 = "sha256-1/+awwoAqD8Xm3hULcbpeTaLOHVuYRA4PPr3cq5Gy20=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "System for automatically configuring mutt and isync";
+    homepage = "https://github.com/LukeSmithxyz/mutt-wizard";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mvebu64boot/default.nix b/nixpkgs/pkgs/tools/misc/mvebu64boot/default.nix
new file mode 100644
index 000000000000..0c682cebd5e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mvebu64boot/default.nix
@@ -0,0 +1,35 @@
+{ fetchFromGitHub
+, stdenv
+, lib
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mvebu64boot";
+  version = "unstable-2022-10-20";
+
+  src = fetchFromGitHub {
+    owner = "pali";
+    repo = "mvebu64boot";
+    rev = "e7ca70eff2dc278607cc07f6654bbddacb2e4ff6";
+    hash = "sha256-Y2yVr/BuOah5yMvF5EvM7frEUY8r+Hf4bNIKVkHgvQs=";
+  };
+
+  buildInputs = [
+    ncurses
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D mvebu64boot $out/bin/mvebu64boot
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Boot 64-bit Marvell EBU SoC over UART";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ lukegb ];
+    platforms = platforms.all;
+    mainProgram = "mvebu64boot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mynewt-newtmgr/default.nix b/nixpkgs/pkgs/tools/misc/mynewt-newtmgr/default.nix
new file mode 100644
index 000000000000..1ad1bb7ac1bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mynewt-newtmgr/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+, testers
+, mynewt-newtmgr
+}:
+
+buildGoModule rec {
+  pname = "mynewt-newtmgr";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "apache";
+    repo = "mynewt-newtmgr";
+    rev = "mynewt_${builtins.replaceStrings ["."] ["_"] version}_tag";
+    sha256 = "sha256-fobaMkYLLK5qclogtClGdOjgTbmuse/72T3APNssYa4=";
+  };
+
+  vendorHash = "sha256-+vOZoueoMqlGnopLKc6pCgTmcgI34pxaMNbr6Y+JCfQ=";
+
+  passthru.tests.version = testers.testVersion {
+    package = mynewt-newtmgr;
+    command = "newtmgr version";
+  };
+
+  meta = with lib; {
+    homepage = "https://mynewt.apache.org/";
+    description = "Tool to communicate with devices running Mynewt OS";
+    longDescription = ''
+      Newt Manager (newtmgr) an application that enables a user to communicate
+      with and manage remote devices running the Mynewt OS
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ bezmuth ];
+    # never built on aarch64-darwin, x86_64-darwin since first introduction in nixpkgs
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix b/nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix
new file mode 100644
index 000000000000..d3e24c559849
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mysql2pgsql/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, perl }:
+
+# The homepage says this script is mature..
+stdenv.mkDerivation rec {
+  pname = "mysql2pgsql";
+  version = "0.0.1a";
+
+  src = fetchurl {
+    url = "http://ftp.plusline.de/ftp.postgresql.org/projects/gborg/mysql2psql/devel/mysql2psql-${version}.tgz";
+    sha256 = "0dpbxf3kdvpihz9cisx6wi3zzd0cnifaqvjxavrbwm4k4sz1qamp";
+  };
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv {,$out/bin/}mysql2psql
+  '';
+
+  meta = {
+    description = "Convert MySQL dump files to PostgreSQL-loadable files";
+    homepage = "https://pgfoundry.org/projects/mysql2pgsql/";
+    license = lib.licenses.bsdOriginal;
+    mainProgram = "mysql2psql";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/mysqltuner/default.nix b/nixpkgs/pkgs/tools/misc/mysqltuner/default.nix
new file mode 100644
index 000000000000..f13b455e523b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/mysqltuner/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "mysqltuner";
+  version = "1.8.3";
+
+  src = fetchFromGitHub {
+    owner = "major";
+    repo = "MySQLTuner-perl";
+    rev = version;
+    sha256 = "sha256-ezF0zjQB/KWD5rUcbXx2uwiNLsIJ7ZKMoqkclP7oc98=";
+  };
+
+  postPatch = ''
+    substituteInPlace mysqltuner.pl \
+      --replace '/usr/share' "$out/share"
+  '';
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm0555 mysqltuner.pl $out/bin/mysqltuner
+    install -Dm0444 -t $out/share/mysqltuner basic_passwords.txt vulnerabilities.csv
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Make recommendations for increased performance and stability of MariaDB/MySQL";
+    homepage = "https://github.com/major/MySQLTuner-perl";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ peterhoeg shamilton ];
+    mainProgram = "mysqltuner";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nagstamon/default.nix b/nixpkgs/pkgs/tools/misc/nagstamon/default.nix
new file mode 100644
index 000000000000..e9f76dbf22d9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nagstamon/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchurl, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  pname = "nagstamon";
+  version = "3.2.1";
+
+  src = fetchurl {
+    url = "https://nagstamon.ifw-dresden.de/files/stable/Nagstamon-${version}.tar.gz";
+    sha256 = "1048x55g3nlyyggn6a36xmj24w4hv08llg58f4hzc0fwg074cd58";
+  };
+
+  # Test assumes darwin
+  doCheck = false;
+
+  propagatedBuildInputs = with pythonPackages; [ configparser pyqt5 psutil requests
+     beautifulsoup4 keyring requests-kerberos kerberos lxml ];
+
+  meta = with lib; {
+    description = "A status monitor for the desktop";
+    homepage = "https://nagstamon.ifw-dresden.de/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    # fails to install with:
+    # TypeError: cannot unpack non-iterable bool object
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nanoemoji/default.nix b/nixpkgs/pkgs/tools/misc/nanoemoji/default.nix
new file mode 100644
index 000000000000..a4fb6768d0bb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nanoemoji/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, python3
+, fetchFromGitHub
+, resvg
+, pngquant
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "nanoemoji";
+  version = "0.15.1";
+
+  src = fetchFromGitHub {
+    owner = "googlefonts";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-P/lT0PnjTdYzyttICzszu4OL5kj+X8GHZ8doL3tpXQM=";
+  };
+  patches = [
+    # this is necessary because the tests clear PATH/PYTHONPATH otherwise
+    ./test-pythonpath.patch
+    # minor difference in the test output, most likely due to different dependency versions
+    ./fix-test.patch
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools-scm
+    pythonRelaxDepsHook
+
+    pngquant
+    resvg
+  ];
+
+  # these two packages are just prebuilt wheels containing the respective binaries
+  pythonRemoveDeps = [ "pngquant-cli" "resvg-cli" ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    absl-py
+    fonttools
+    lxml
+    ninja
+    picosvg
+    pillow
+    regex
+    toml
+    tomlkit
+    ufo2ft
+    ufolib2
+    zopfli
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+
+    ninja
+    picosvg
+  ];
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ pngquant resvg ]}"
+  ];
+
+  preCheck = ''
+    # make sure the built binaries (nanoemoji/maximum_color) can be found by the test
+    export PATH="$out/bin:$PATH"
+  '';
+
+  meta = with lib; {
+    description = "A wee tool to build color fonts";
+    homepage = "https://github.com/googlefonts/nanoemoji";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ _999eagle ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nanoemoji/fix-test.patch b/nixpkgs/pkgs/tools/misc/nanoemoji/fix-test.patch
new file mode 100644
index 000000000000..4582df9ea5b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nanoemoji/fix-test.patch
@@ -0,0 +1,24 @@
+--- a/tests/proportional_cbdt.ttx
++++ b/tests/proportional_cbdt.ttx
+@@ -13,7 +13,7 @@
+     <mtx name=".notdef" width="0" lsb="5"/>
+     <mtx name=".space" width="0" lsb="0"/>
+     <mtx name="e000" width="110" lsb="0"/>
+-    <mtx name="e001" width="73" lsb="0"/>
++    <mtx name="e001" width="74" lsb="0"/>
+   </hmtx>
+ 
+   <cmap>
+@@ -79,10 +79,10 @@
+       <cbdt_bitmap_format_17 name="e001">
+         <SmallGlyphMetrics>
+           <height value="128"/>
+-          <width value="85"/>
++          <width value="86"/>
+           <BearingX value="0"/>
+           <BearingY value="104"/>
+-          <Advance value="85"/>
++          <Advance value="86"/>
+         </SmallGlyphMetrics>
+         <extfileimagedata value="e001.png"/>
+       </cbdt_bitmap_format_17>
diff --git a/nixpkgs/pkgs/tools/misc/nanoemoji/test-pythonpath.patch b/nixpkgs/pkgs/tools/misc/nanoemoji/test-pythonpath.patch
new file mode 100644
index 000000000000..12733224560c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nanoemoji/test-pythonpath.patch
@@ -0,0 +1,14 @@
+--- a/tests/test_helper.py
++++ b/tests/test_helper.py
+@@ -269,9 +269,9 @@
+     print("subprocess:", " ".join(cmd))  # very useful on failure
+     env = {
+         # We may need to find nanoemoji and other pip-installed cli tools
+-        "PATH": str(Path(shutil.which("nanoemoji")).parent),
++        "PATH": str(Path(shutil.which("nanoemoji")).parent) + ":" + os.environ["PATH"],
+         # We may need to find test modules
+-        "PYTHONPATH": os.pathsep.join((str(Path(__file__).parent),)),
++        "PYTHONPATH": os.pathsep.join((str(Path(__file__).parent),)) + ":" + os.environ["PYTHONPATH"],
+     }
+     # Needed for windows CI to function; ref https://github.com/appveyor/ci/issues/1995
+     if "SYSTEMROOT" in os.environ:
diff --git a/nixpkgs/pkgs/tools/misc/natls/default.nix b/nixpkgs/pkgs/tools/misc/natls/default.nix
new file mode 100644
index 000000000000..a324768faea4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/natls/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "natls";
+  version = "2.1.14";
+
+  src = fetchFromGitHub {
+    owner = "willdoescode";
+    repo = "nat";
+    rev = "v${version}";
+    sha256 = "sha256-4x92r6V9AvEO88gFofPTUt+mS7ZhmptDn/8O4pizSRg=";
+  };
+
+  cargoSha256 = "sha256-Am4HmfmhskKxcp1iWod5z3caHwsdo31qCaVi0UxTXAg=";
+
+  meta = with lib; {
+    description = "the 'ls' replacement you never knew you needed";
+    homepage = "https://github.com/willdoescode/nat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cafkafk ];
+    mainProgram = "natls";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/default.nix b/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/default.nix
new file mode 100644
index 000000000000..b200731ab8f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, pkg-config
+, dbus
+, dconf
+, fetchFromGitHub
+, glib
+, gnome
+, gobject-introspection
+, gsettings-desktop-schemas
+, gtk3
+, python3
+, wrapGAppsHook
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "nautilus-open-any-terminal";
+  version = "0.5.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "Stunkymonkey";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-liyzgbZGl08gHLVpsy8NbTiTytNdiMdymF70ik4cPXs=";
+  };
+
+  patches = [ ./hardcode-gsettings.patch ];
+
+  nativeBuildInputs = [
+    glib
+    gobject-introspection
+    pkg-config
+    wrapGAppsHook
+    python3.pkgs.setuptools
+  ];
+
+  buildInputs = [
+    dbus
+    dconf
+    gnome.nautilus
+    gnome.nautilus-python
+    gsettings-desktop-schemas
+    gtk3
+    python3.pkgs.pygobject3
+  ];
+
+  postPatch = ''
+    substituteInPlace nautilus_open_any_terminal/nautilus_open_any_terminal.py \
+      --subst-var-by gsettings_path ${glib.makeSchemaPath "$out" "$name"}
+  '';
+
+  postInstall = ''
+    glib-compile-schemas "$out/share/glib-2.0/schemas"
+  '';
+
+  meta = with lib; {
+    description = "Extension for nautilus, which adds an context-entry for opening other terminal-emulators then `gnome-terminal`";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ stunkymonkey ];
+    homepage = "https://github.com/Stunkymonkey/nautilus-open-any-terminal";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/hardcode-gsettings.patch b/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/hardcode-gsettings.patch
new file mode 100644
index 000000000000..5116d5110ca1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nautilus-open-any-terminal/hardcode-gsettings.patch
@@ -0,0 +1,31 @@
+diff --git a/nautilus_open_any_terminal/nautilus_open_any_terminal.py b/nautilus_open_any_terminal/nautilus_open_any_terminal.py
+index b02a995..a616399 100644
+--- a/nautilus_open_any_terminal/nautilus_open_any_terminal.py
++++ b/nautilus_open_any_terminal/nautilus_open_any_terminal.py
+@@ -228,9 +228,10 @@ def set_terminal_args(*args):
+         """Provide keyboard shortcuts for opening terminals in Nautilus."""
+
+         def __init__(self):
+-            gsettings_source = Gio.SettingsSchemaSource.get_default()
+-            if gsettings_source.lookup(GSETTINGS_PATH, True):
+-                self._gsettings = Gio.Settings.new(GSETTINGS_PATH)
++            gsettings_source = Gio.SettingsSchemaSource.new_from_directory("@gsettings_path@", Gio.SettingsSchemaSource.get_default(), True)
++            if True:
++                _schema = gsettings_source.lookup(GSETTINGS_PATH, False)
++                self._gsettings = Gio.Settings.new_full(_schema, None, None);
+                 self._gsettings.connect("changed", self._bind_shortcut)
+                 self._create_accel_group()
+             self._window = None
+@@ -326,9 +327,10 @@ class OpenAnyTerminalExtension(GObject.GObject, Nautilus.MenuProvider):
+         return items
+ 
+ 
+-source = Gio.SettingsSchemaSource.get_default()
+-if source is not None and source.lookup(GSETTINGS_PATH, True):
+-    _gsettings = Gio.Settings.new(GSETTINGS_PATH)
++source = Gio.SettingsSchemaSource.new_from_directory("@gsettings_path@", Gio.SettingsSchemaSource.get_default(), True)
++if True:
++    _schema = source.lookup(GSETTINGS_PATH, False)
++    _gsettings = Gio.Settings.new_full(_schema, None, None);
+     _gsettings.connect("changed", set_terminal_args)
+     set_terminal_args()
diff --git a/nixpkgs/pkgs/tools/misc/nb/default.nix b/nixpkgs/pkgs/tools/misc/nb/default.nix
new file mode 100644
index 000000000000..5d394f1c7b19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nb/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, lib, fetchFromGitHub, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "nb";
+  version = "7.12.1";
+
+  src = fetchFromGitHub {
+    owner = "xwmx";
+    repo = "nb";
+    rev = version;
+    sha256 = "sha256-vy2WrFh4ukc6f0YFVaHvw0k1Wm9mdhh9p2MKLc/566U=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    mv nb $out/bin/
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd nb etc/nb-completion.{bash,zsh,fish}
+  '';
+
+  meta = with lib; {
+    description = "A command line note-taking, bookmarking, archiving, and knowledge base application";
+    longDescription = ''
+      `nb` creates notes in text-based formats like Markdown, Emacs Org mode,
+      and LaTeX, can work with files in any format, can import and export notes
+      to many document formats, and can create private, password-protected
+      encrypted notes and bookmarks. With `nb`, you can write notes using Vim,
+      Emacs, VS Code, Sublime Text, and any other text editor you like. `nb`
+      works in any standard Linux / Unix environment, including macOS and
+      Windows via WSL. Optional dependencies can be installed to enhance
+      functionality, but `nb` works great without them.
+
+      `nb` is also a powerful text-based CLI bookmarking system. Page
+      information is automatically downloaded, compiled, and saved into normal
+      Markdown documents made for humans, so bookmarks are easy to edit just
+      like any other note.
+
+      `nb` uses Git in the background to automatically record changes and sync
+      notebooks with remote repositories. `nb` can also be configured to sync
+      notebooks using a general purpose syncing utility like Dropbox so notes
+      can be edited in other apps on any device.
+
+      `nb` is designed to be portable, future-focused, and vendor independent,
+      providing a full-featured and intuitive experience within a highly
+      composable user-centric text interface. The entire program is a single
+      well-tested shell script that can be installed, copied, or curled almost
+      anywhere and just work, using progressive enhancement for various
+      experience improvements in more capable environments. `nb` works great
+      whether you have one notebook with just a few notes or dozens of
+      notebooks containing thousands of notes, bookmarks, and other items. `nb`
+      makes it easy to incorporate other tools, writing apps, and workflows.
+      `nb` can be used a little, a lot, once in a while, or for just a subset
+      of features. `nb` is flexible.
+    '';
+    homepage = "https://xwmx.github.io/nb/";
+    license = licenses.agpl3Plus;
+    maintainers = [ maintainers.toonn ];
+    platforms = platforms.all;
+    mainProgram = "nb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nbench/default.nix b/nixpkgs/pkgs/tools/misc/nbench/default.nix
new file mode 100644
index 000000000000..f1af32cc0e3f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nbench/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "nbench-byte";
+  version = "2.2.3";
+
+  src = fetchurl {
+    url = "http://www.math.utah.edu/~mayer/linux/${pname}-${version}.tar.gz";
+    sha256 = "1b01j7nmm3wd92ngvsmn2sbw43sl9fpx4xxmkrink68fz1rx0gbj";
+  };
+
+  prePatch = ''
+    substituteInPlace nbench1.h --replace '"NNET.DAT"' "\"$out/NNET.DAT\""
+    substituteInPlace sysspec.h --replace "malloc.h" "stdlib.h"
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile --replace "-static" ""
+  '';
+
+  buildInputs = lib.optionals stdenv.hostPlatform.isGnu [
+    stdenv.cc.libc.static
+  ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp nbench $out/bin
+    cp NNET.DAT $out
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.math.utah.edu/~mayer/linux/bmark.html";
+    description = "A synthetic computing benchmark program";
+    platforms = platforms.unix;
+    maintainers = with lib.maintainers; [ bennofs ];
+    mainProgram = "nbench";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nbqa/default.nix b/nixpkgs/pkgs/tools/misc/nbqa/default.nix
new file mode 100644
index 000000000000..97c821947c03
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nbqa/default.nix
@@ -0,0 +1,100 @@
+{ black
+, blacken-docs
+, fetchFromGitHub
+, lib
+, python3
+, ruff
+}:
+python3.pkgs.buildPythonApplication rec {
+  pname = "nbqa";
+  version = "1.8.5";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "nbQA-dev";
+    repo = "nbQA";
+    rev = "refs/tags/${version}";
+    hash = "sha256-vRJxpWs2i4A8gi8F4YrTlmgBSnA73KeMCrmjLNF1zpA=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  passthru.optional-dependencies = {
+    black = [ black ];
+    blacken-docs = [ blacken-docs ];
+    flake8 = [ python3.pkgs.flake8 ];
+    isort = [ python3.pkgs.isort ];
+    jupytext = [ python3.pkgs.jupytext ];
+    mypy = [ python3.pkgs.mypy ];
+    pylint = [ python3.pkgs.pylint ];
+    pyupgrade = [ python3.pkgs.pyupgrade ];
+    ruff = [ ruff ];
+  };
+
+  propagatedBuildInputs = with python3.pkgs;
+    [
+      autopep8
+      ipython
+      tokenize-rt
+      tomli
+    ]
+    ++ builtins.attrValues passthru.optional-dependencies;
+
+  postPatch = ''
+    # Force using the Ruff executable rather than the Python package
+    substituteInPlace nbqa/__main__.py --replace 'if shell:' 'if shell or main_command == "ruff":'
+  '';
+
+  preCheck = ''
+    # Allow the tests to run `nbqa` itself from the path
+    export PATH="$out/bin":"$PATH"
+  '';
+
+  nativeCheckInputs =
+    [
+      black
+      ruff
+    ]
+    ++ (with python3.pkgs; [
+      autoflake
+      flake8
+      isort
+      jupytext
+      mdformat
+      pre-commit-hooks
+      pydocstyle
+      pylint
+      pytestCheckHook
+      pyupgrade
+      yapf
+    ]);
+
+  disabledTests = [
+    # Test data not found
+    "test_black_multiple_files"
+    "test_black_return_code"
+    "test_grep"
+    "test_jupytext_on_folder"
+    "test_mypy_works"
+    "test_running_in_different_dir_works"
+    "test_unable_to_reconstruct_message_pythonpath"
+    "test_with_subcommand"
+    "test_pylint_works"
+  ];
+
+  disabledTestPaths = [
+    # Test data not found
+    "tests/test_include_exclude.py"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/nbQA-dev/nbQA";
+    changelog = "https://nbqa.readthedocs.io/en/latest/history.html";
+    description = "Run ruff, isort, pyupgrade, mypy, pylint, flake8, black, blacken-docs, and more on Jupyter Notebooks";
+    license = licenses.mit;
+    maintainers = with maintainers; [ l0b0 ];
+    mainProgram = "nbqa";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ncdu/1.nix b/nixpkgs/pkgs/tools/misc/ncdu/1.nix
new file mode 100644
index 000000000000..09289ea745da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ncdu/1.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "ncdu";
+  version = "1.18.1";
+
+  src = fetchurl {
+    url = "https://dev.yorhel.nl/download/${pname}-${version}.tar.gz";
+    sha256 = "sha256-fA+h6ynYWq7UuhdBZL27jwEbXDkNAXxX1mj8cjEzJAU=";
+  };
+
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    description = "Disk usage analyzer with an ncurses interface";
+    homepage = "https://dev.yorhel.nl/ncdu";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "ncdu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ncdu/default.nix b/nixpkgs/pkgs/tools/misc/ncdu/default.nix
new file mode 100644
index 000000000000..d4bdbeacc929
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ncdu/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchurl
+, ncurses
+, zig
+, installShellFiles
+, testers
+, pie ? stdenv.isDarwin
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ncdu";
+  version = "2.4";
+
+  src = fetchurl {
+    url = "https://dev.yorhel.nl/download/ncdu-${finalAttrs.version}.tar.gz";
+    hash = "sha256-Sj0AAjCc9qfOp5GTjayb7N7OTVKdDW3I2RtztOaFVQk=";
+  };
+
+  nativeBuildInputs = [
+    zig.hook
+    installShellFiles
+  ];
+
+  buildInputs = [
+    ncurses
+  ];
+
+  zigBuildFlags = lib.optional pie "-Dpie=true";
+
+  postInstall = ''
+    installManPage ncdu.1
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+  };
+
+  meta = {
+    homepage = "https://dev.yorhel.nl/ncdu";
+    description = "Disk usage analyzer with an ncurses interface";
+    changelog = "https://dev.yorhel.nl/ncdu/changes2";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ pSub rodrgz ];
+    inherit (zig.meta) platforms;
+    mainProgram = "ncdu";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/near-cli/default.nix b/nixpkgs/pkgs/tools/misc/near-cli/default.nix
new file mode 100644
index 000000000000..8741f694782c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/near-cli/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, mkYarnPackage
+, fetchFromGitHub
+, fetchYarnDeps
+}:
+
+mkYarnPackage rec {
+  pname = "near-cli";
+  version = "3.4.2";
+
+  src = fetchFromGitHub {
+    owner = "near";
+    repo = "near-cli";
+    rev = "v${version}";
+    hash = "sha256-C+viNYk+6BA11cdi5GqARU3QTTONTR2B2VEZf/SeeSQ=";
+  };
+
+  packageJSON = ./package.json;
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-G/Y8xGGOlXH37Bup7mKhEaNh05GTP5CC9e/Xw4TBNMU=";
+  };
+
+  doDist = false;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/lib/node_modules"
+    mv deps/near-cli "$out/lib/node_modules"
+    rm "$out/lib/node_modules/near-cli/node_modules"
+    mv node_modules "$out/lib/node_modules/near-cli"
+
+    mkdir -p "$out/bin"
+    ln -s "$out/lib/node_modules/near-cli/bin/near" "$out/bin"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    changelog = "https://github.com/near/near-cli/blob/${src.rev}/CHANGELOG.md";
+    description = "General purpose command line tools for interacting with NEAR Protocol";
+    homepage = "https://github.com/near/near-cli";
+    license = with lib.licenses; [ asl20 mit ];
+    mainProgram = "near";
+    maintainers = with lib.maintainers; [ ekleog ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/near-cli/package.json b/nixpkgs/pkgs/tools/misc/near-cli/package.json
new file mode 100644
index 000000000000..a6b794a99115
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/near-cli/package.json
@@ -0,0 +1,83 @@
+{
+  "name": "near-cli",
+  "version": "3.4.2",
+  "description": "General purpose command line tools for interacting with NEAR Protocol",
+  "engines": {
+    "node": ">= 12"
+  },
+  "main": "index.js",
+  "scripts": {
+    "pretest": "rm -rf tmp-project",
+    "test": "npm run test:unit && npm run test:integration",
+    "test:unit": "jest",
+    "test:integration": "bash ./test/index.sh",
+    "lint": "eslint .",
+    "fix": "eslint . --fix"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/near/near-cli.git"
+  },
+  "author": "Jane Degtiareva",
+  "license": "(MIT AND Apache-2.0)",
+  "bugs": {
+    "url": "https://github.com/near/near-cli/issues"
+  },
+  "homepage": "https://github.com/near/near-cli#readme",
+  "bin": {
+    "near": "bin/near"
+  },
+  "devDependencies": {
+    "danger": "^10.6.6",
+    "lodash": "^4.17.21",
+    "eslint": "^7.0.0",
+    "jest": "^26.1.0",
+    "strip-ansi": "^7.0.0",
+    "strip-ansi-cli": "^3.0.0",
+    "ts-node": "^10.4.0",
+    "typescript": "^4.5.4"
+  },
+  "dependencies": {
+    "analytics-node": "^6.1.0",
+    "ascii-table": "0.0.9",
+    "bn.js": "^5.1.1",
+    "bs58": "^4.0.1",
+    "chalk": "^4.0.0",
+    "flagged-respawn": "^1.0.1",
+    "is-ci": "^2.0.0",
+    "jest-environment-node": "^27.0.6",
+    "ncp": "^2.0.0",
+    "near-api-js": "^0.44.2",
+    "near-seed-phrase": "^0.2.0",
+    "open": "^8.0.7",
+    "rimraf": "^3.0.0",
+    "stoppable": "^1.1.0",
+    "tcp-port-used": "^1.0.1",
+    "update-notifier": "^5.0.0",
+    "uuid": "^8.0.0",
+    "v8flags": "^3.1.3",
+    "yargs": "^16.0.3"
+  },
+  "optionalDependencies": {
+    "@ledgerhq/hw-transport-node-hid": "^6.1.0",
+    "near-ledger-js": "^0.2.0"
+  },
+  "keywords": [
+    "blockchain",
+    "crypto",
+    "dapps",
+    "distributed",
+    "applications",
+    "distributed applications"
+  ],
+  "files": [
+    "bin",
+    "commands",
+    "middleware",
+    "utils",
+    "config.js",
+    "get-config.js",
+    "test_environment.js",
+    "context"
+  ]
+}
diff --git a/nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix b/nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix
new file mode 100644
index 000000000000..2682658ab38d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/neo-cowsay/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "neo-cowsay";
+  version = "2.0.4";
+
+  src = fetchFromGitHub {
+    owner = "Code-Hex";
+    repo = "Neo-cowsay";
+    rev = "v${version}";
+    hash = "sha256-DmIjqBTIzwkQ8aJ6xCgIwjDtczlTH5AKbPKFUGx3qQ8=";
+  };
+
+  vendorHash = "sha256-gBURmodXkod4fukw6LWEY+MBxPcf4vn/f6K78UR77n0=";
+
+  modRoot = "./cmd";
+
+  doCheck = false;
+
+  subPackages = [ "cowsay" "cowthink" ];
+
+  meta = with lib; {
+    description = "Cowsay reborn, written in Go";
+    homepage = "https://github.com/Code-Hex/Neo-cowsay";
+    license = with licenses; [ artistic1 /* or */ gpl3 ];
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "cowsay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/neofetch/default.nix b/nixpkgs/pkgs/tools/misc/neofetch/default.nix
new file mode 100644
index 000000000000..806655ffe9f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/neofetch/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenvNoCC, fetchFromGitHub, bash, makeWrapper, pciutils
+, x11Support ? true, ueberzug, fetchpatch
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "neofetch";
+  version = "unstable-2021-12-10";
+
+  src = fetchFromGitHub {
+    owner = "dylanaraps";
+    repo = "neofetch";
+    rev = "ccd5d9f52609bbdcd5d8fa78c4fdb0f12954125f";
+    sha256 = "sha256-9MoX6ykqvd2iB0VrZCfhSyhtztMpBTukeKejfAWYW1w=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/dylanaraps/neofetch/commit/413c32e55dc16f0360f8e84af2b59fe45505f81b.patch";
+      sha256 = "1fapdg9z79f0j3vw7fgi72b54aw4brn42bjsj48brbvg3ixsciph";
+      name = "avoid_overwriting_gio_extra_modules_env_var.patch";
+    })
+    # https://github.com/dylanaraps/neofetch/pull/2114
+    (fetchpatch {
+      url = "https://github.com/dylanaraps/neofetch/commit/c4eb4ec7783bb94cca0dbdc96db45a4d965956d2.patch";
+      sha256 = "sha256-F6Q4dUtfmR28VxLbITiLFJ44FjG4T1Cvuz3a0nLisMs=";
+      name = "update_old_nixos_logo.patch";
+    })
+    # https://github.com/dylanaraps/neofetch/pull/2157
+    (fetchpatch {
+      url = "https://github.com/dylanaraps/neofetch/commit/de253afcf41bab441dc58d34cae654040cab7451.patch";
+      sha256 = "sha256-3i7WnCWNfsRjbenTULmKHft5o/o176imzforNmuoJwo=";
+      name = "improve_detect_nixos_version.patch";
+    })
+  ];
+
+  outputs = [ "out" "man" ];
+
+  strictDeps = true;
+  buildInputs = [ bash ];
+  nativeBuildInputs = [ makeWrapper ];
+  postPatch = ''
+    patchShebangs --host neofetch
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/neofetch \
+      --prefix PATH : ${lib.makeBinPath ([ pciutils ] ++ lib.optional x11Support ueberzug) }
+  '';
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "SYSCONFDIR=${placeholder "out"}/etc"
+  ];
+
+  meta = with lib; {
+    description = "A fast, highly customizable system info script";
+    homepage = "https://github.com/dylanaraps/neofetch";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ alibabzo konimex ];
+    mainProgram = "neofetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/netbootxyz-efi/default.nix b/nixpkgs/pkgs/tools/misc/netbootxyz-efi/default.nix
new file mode 100644
index 000000000000..efa16daaeacf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/netbootxyz-efi/default.nix
@@ -0,0 +1,21 @@
+{ lib
+, fetchurl
+}:
+
+let
+  pname = "netboot.xyz-efi";
+  version = "2.0.75";
+in fetchurl {
+  name = "${pname}-${version}";
+
+  url = "https://github.com/netbootxyz/netboot.xyz/releases/download/${version}/netboot.xyz.efi";
+  sha256 = "sha256-VaTUwX3S5Bj5eUZAspXNaVm8Y51hURL3xBb1tRdj6Zw=";
+
+  meta = with lib; {
+    homepage = "https://netboot.xyz/";
+    description = "A tool to boot OS installers and utilities over the network, to be run from a bootloader";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Enzime ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix b/nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix
new file mode 100644
index 000000000000..edfe912f3983
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nginx-config-formatter/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation rec {
+  version = "1.2.2";
+  pname = "nginx-config-formatter";
+
+  src = fetchFromGitHub {
+    owner = "slomkowski";
+    repo = "nginx-config-formatter";
+    rev = "v${version}";
+    sha256 = "sha256-EUoOfkoVsNpIAwDaQ4NH8MkRIJZI8qeuuHUDE6LuLiI=";
+  };
+
+  buildInputs = [ python3 ];
+
+  doCheck = true;
+  checkPhase = ''
+    python3 $src/test_nginxfmt.py
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 0755 $src/nginxfmt.py $out/bin/nginxfmt
+  '';
+
+  meta = with lib; {
+    description = "nginx config file formatter";
+    maintainers = with maintainers; [ Baughn ];
+    license = licenses.asl20;
+    homepage = "https://github.com/slomkowski/nginx-config-formatter";
+    mainProgram = "nginxfmt";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nms/default.nix b/nixpkgs/pkgs/tools/misc/nms/default.nix
new file mode 100644
index 000000000000..cf890dc44956
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nms/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "nms";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "bartobri";
+    repo = "no-more-secrets";
+    rev = "v${version}";
+    sha256 = "sha256-QVCEpplsZCSQ+Fq1LBtCuPBvnzgLsmLcSrxR+e4nA5I=";
+  };
+
+  buildFlags = [ "nms" "sneakers" ];
+  installFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bartobri/no-more-secrets";
+    description = ''
+      A command line tool that recreates the famous data decryption
+      effect seen in the 1992 movie Sneakers.
+    '';
+    license = licenses.gpl3;
+    maintainers = [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/node-glob/default.nix b/nixpkgs/pkgs/tools/misc/node-glob/default.nix
new file mode 100644
index 000000000000..aba4690bbba4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/node-glob/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+}:
+
+buildNpmPackage rec {
+  pname = "glob";
+  version = "10.3.3";
+
+  src = fetchFromGitHub {
+    owner = "isaacs";
+    repo = "node-glob";
+    rev = "v${version}";
+    hash = "sha256-oLlNhQOnu/hlKjNWa5vjqslz1EarZJOpUEXUB+vGQvc=";
+  };
+
+  npmDepsHash = "sha256-78oODw+CBCk5JRJbDqLqVmzTVImP7Z7o6jRIimDxZDQ=";
+
+  dontNpmBuild = true;
+
+  meta = {
+    changelog = "https://github.com/isaacs/node-glob/blob/${src.rev}/changelog.md";
+    description = "A little globber for Node.js";
+    homepage = "https://github.com/isaacs/node-glob";
+    license = lib.licenses.isc;
+    mainProgram = "glob";
+    maintainers = with lib.maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nomino/default.nix b/nixpkgs/pkgs/tools/misc/nomino/default.nix
new file mode 100644
index 000000000000..9dd489f45948
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nomino/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nomino";
+  version = "1.3.4";
+
+  src = fetchFromGitHub {
+    owner = "yaa110";
+    repo = pname;
+    rev = version;
+    hash = "sha256-jV1GqwQURRFPGuFXPhtgbBJHOdroQk6KHMI5yHa0Z64=";
+  };
+
+  cargoHash = "sha256-QluOfU8TO5422lVXswjiQb2YleWiq5twwYzpBJsBs2Y=";
+
+  meta = with lib; {
+    description = "Batch rename utility for developers";
+    homepage = "https://github.com/yaa110/nomino";
+    changelog = "https://github.com/yaa110/nomino/releases/tag/${src.rev}";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "nomino";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/noteshrink/default.nix b/nixpkgs/pkgs/tools/misc/noteshrink/default.nix
new file mode 100644
index 000000000000..4c76c332645f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/noteshrink/default.nix
@@ -0,0 +1,25 @@
+{ lib, fetchFromGitHub, python3, imagemagick }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "noteshrink";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner  = "mzucker";
+    repo   = "noteshrink";
+    rev    = version;
+    sha256 = "0xhrvg3d8ffnbbizsrfppcd2y98znvkgxjdmvbvin458m2rwccka";
+  };
+
+  propagatedBuildInputs = [ numpy scipy imagemagick pillow ];
+
+  meta = with lib; {
+    description = "Convert scans of handwritten notes to beautiful, compact PDFs";
+    homepage    = "https://mzucker.github.io/2016/09/20/noteshrink.html";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ rnhmjoj ];
+    mainProgram = "noteshrink";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/noti/default.nix b/nixpkgs/pkgs/tools/misc/noti/default.nix
new file mode 100644
index 000000000000..3401f74de937
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/noti/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+, Cocoa
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "noti";
+  version = "3.7.0";
+
+  src = fetchFromGitHub {
+    owner = "variadico";
+    repo = "noti";
+    rev = version;
+    hash = "sha256-8CHSbKOiWNYqKBU1kqQm5t02DJq0JfoIaPsU6Ylc46E=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optional stdenv.isDarwin Cocoa;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/variadico/noti/internal/command.Version=${version}"
+  ];
+
+  preCheck = ''
+    export PATH=$out/bin:$PATH
+  '';
+
+  postInstall = ''
+    installManPage docs/man/dist/*
+  '';
+
+  meta = with lib; {
+    description = "Monitor a process and trigger a notification";
+    longDescription = ''
+      Monitor a process and trigger a notification.
+
+      Never sit and wait for some long-running process to finish. Noti can alert
+      you when it's done. You can receive messages on your computer or phone.
+    '';
+    homepage = "https://github.com/variadico/noti";
+    license = licenses.mit;
+    maintainers = with maintainers; [ stites ];
+    mainProgram = "noti";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/notify-desktop/default.nix b/nixpkgs/pkgs/tools/misc/notify-desktop/default.nix
new file mode 100644
index 000000000000..0265e5dd8974
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/notify-desktop/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, dbus, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "notify-desktop";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "nowrep";
+    repo = "notify-desktop";
+    rev = "9863919fb4ce7820810ac14a09a46ee73c3d56cc";
+    sha256 = "1brcvl2fx0yzxj9mc8hzfl32zdka1f1bxpzsclcsjplyakyinr1a";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ dbus ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -m 755 bin/notify-desktop $out/bin/notify-desktop
+  '';
+
+  meta = with lib; {
+    description = "Little application that lets you send desktop notifications with one command";
+    longDescription = ''
+      It's basically clone of notify-send from libnotify,
+      but it supports reusing notifications on screen by passing its ID.
+      It also does not use any external dependencies (except from libdbus of course).
+    '';
+    homepage = "https://github.com/nowrep/notify-desktop";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ylwghst ];
+    mainProgram = "notify-desktop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/notify/default.nix b/nixpkgs/pkgs/tools/misc/notify/default.nix
new file mode 100644
index 000000000000..efbbd7ce6eb3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/notify/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+}:
+
+buildGoModule rec {
+  pname = "notify";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "projectdiscovery";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-9oakHqDhOZyqzlVqHPjTsG2f780DABt0+JRckmkWW64=";
+  };
+
+  vendorHash = "sha256-/FJECY1x9nMqOIzqdN6T+vdi9qjjY0YAoqvVNf0kN3s=";
+
+  modRoot = ".";
+  subPackages = [
+    "cmd/notify/"
+  ];
+
+  # Test files are not part of the release tarball
+  doCheck = false;
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Notify allows sending the output from any tool to Slack, Discord and Telegram";
+    longDescription = ''
+      Notify is a helper utility written in Go that allows you to post the output from any tool
+      to Slack, Discord, and Telegram.
+    '';
+    homepage = "https://github.com/projectdiscovery/notify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hanemile ];
+    mainProgram = "notify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ntfy-sh/default.nix b/nixpkgs/pkgs/tools/misc/ntfy-sh/default.nix
new file mode 100644
index 000000000000..cf429da9cad0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ntfy-sh/default.nix
@@ -0,0 +1,68 @@
+{ lib, buildGoModule, fetchFromGitHub, buildNpmPackage
+, nixosTests, debianutils, mkdocs, python3, python3Packages
+}:
+
+
+buildGoModule rec {
+  pname = "ntfy-sh";
+  version = "2.10.0";
+
+  src = fetchFromGitHub {
+    owner = "binwiederhier";
+    repo = "ntfy";
+    rev = "v${version}";
+    hash = "sha256-Ns73kZ7XJKj93fhTDQ3L5hk4NZVEcKysJVEZk6jX7KE=";
+  };
+
+  vendorHash = "sha256-c7fOSI+BPF3lwAJEftZHk9o/97T9kntgSsXoko3AYtQ=";
+
+  ui = buildNpmPackage {
+    inherit src version;
+    pname = "ntfy-sh-ui";
+    npmDepsHash = "sha256-nU5atvqyt5U7z8XB0+25uF+7tWPW2yYnkV/124fKoPE=";
+
+    prePatch = ''
+      cd web/
+    '';
+
+    installPhase = ''
+      mv build/index.html build/app.html
+      rm build/config.js
+      mkdir -p $out
+      mv build/ $out/site
+    '';
+  };
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  nativeBuildInputs = [
+    debianutils
+    mkdocs
+    python3
+    python3Packages.mkdocs-material
+    python3Packages.mkdocs-minify-plugin
+  ];
+
+  postPatch = ''
+    sed -i 's# /bin/echo# echo#' Makefile
+  '';
+
+  preBuild = ''
+    cp -r ${ui}/site/ server/
+    make docs-build
+  '';
+
+  passthru = {
+    updateScript = ./update.sh;
+    tests.ntfy-sh = nixosTests.ntfy-sh;
+  };
+
+  meta = with lib; {
+    description = "Send push notifications to your phone or desktop via PUT/POST";
+    homepage = "https://ntfy.sh";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ arjan-s fpletz ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ntfy-sh/update.sh b/nixpkgs/pkgs/tools/misc/ntfy-sh/update.sh
new file mode 100755
index 000000000000..748c4df65427
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ntfy-sh/update.sh
@@ -0,0 +1,22 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p gnugrep gnused coreutils curl wget jq nix-update prefetch-npm-deps nodejs
+
+set -euo pipefail
+pushd "$(dirname "${BASH_SOURCE[0]}")"
+
+version=$(curl -s "https://api.github.com/repos/binwiederhier/ntfy/tags" | jq -r .[0].name | grep -oP "^v\K.*")
+url="https://raw.githubusercontent.com/binwiederhier/ntfy/v$version/"
+
+if [[ "$UPDATE_NIX_OLD_VERSION" == "$version" ]]; then
+    echo "Already up to date!"
+    exit 0
+fi
+
+rm -f package-lock.json
+wget "$url/web/package-lock.json"
+npm_hash=$(prefetch-npm-deps package-lock.json)
+sed -i 's#npmDepsHash = "[^"]*"#npmDepsHash = "'"$npm_hash"'"#' default.nix
+rm -f package-lock.json
+
+popd
+nix-update ntfy-sh --version $version
diff --git a/nixpkgs/pkgs/tools/misc/ntfy/default.nix b/nixpkgs/pkgs/tools/misc/ntfy/default.nix
new file mode 100644
index 000000000000..fc9fd078ab20
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ntfy/default.nix
@@ -0,0 +1,93 @@
+{ lib
+, stdenv
+, python39
+, fetchFromGitHub
+, fetchpatch
+, withXmpp ? !stdenv.isDarwin
+, withMatrix ? true
+, withSlack ? true
+, withEmoji ? true
+, withPid ? true
+, withDbus ? stdenv.isLinux
+}:
+
+let
+  python = python39.override {
+    packageOverrides = self: super: {
+      ntfy-webpush = self.callPackage ./webpush.nix { };
+
+      # databases, on which slack-sdk depends, is incompatible with SQLAlchemy 2.0
+      sqlalchemy = super.sqlalchemy_1_4;
+
+      django = super.django_3;
+    };
+  };
+in python.pkgs.buildPythonApplication rec {
+  pname = "ntfy";
+  version = "2.7.0";
+
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "dschep";
+    repo = "ntfy";
+    rev = "v${version}";
+    sha256 = "09f02cn4i1l2aksb3azwfb70axqhn7d0d0vl2r6640hqr74nc1cv";
+  };
+
+  nativeCheckInputs = with python.pkgs; [
+    mock
+  ];
+
+  propagatedBuildInputs = with python.pkgs; ([
+    requests ruamel-yaml appdirs
+    ntfy-webpush
+  ] ++ (lib.optionals withXmpp [
+    sleekxmpp dnspython
+  ]) ++ (lib.optionals withMatrix [
+    matrix-client
+  ]) ++ (lib.optionals withSlack [
+    slack-sdk
+  ]) ++ (lib.optionals withEmoji [
+    emoji
+  ]) ++ (lib.optionals withPid [
+    psutil
+  ]) ++ (lib.optionals withDbus [
+    dbus-python
+  ]));
+
+  patches = [
+    # Fix Slack integration no longer working.
+    # From https://github.com/dschep/ntfy/pull/229 - "Swap Slacker for Slack SDK"
+    (fetchpatch {
+      name = "ntfy-Swap-Slacker-for-Slack-SDK.patch";
+      url = "https://github.com/dschep/ntfy/commit/2346e7cfdca84c8f1afc7462a92145c1789deb3e.patch";
+      sha256 = "13k7jbsdx0jx7l5s8whirric76hml5bznkfcxab5xdp88q52kpk7";
+    })
+    # Add compatibility with emoji 2.0
+    # https://github.com/dschep/ntfy/pull/250
+    (fetchpatch {
+      name = "ntfy-Add-compatibility-with-emoji-2.0.patch";
+      url = "https://github.com/dschep/ntfy/commit/4128942bb7a706117e7154a50a73b88f531631fe.patch";
+      sha256 = "sha256-V8dIy/K957CPFQQS1trSI3gZOjOcVNQLgdWY7g17bRw=";
+    })
+  ];
+
+  postPatch = ''
+    # We disable the Darwin specific things because it relies on pyobjc, which we don't have.
+    substituteInPlace setup.py \
+      --replace "':sys_platform == \"darwin\"'" "'darwin'"
+  '';
+
+  checkPhase = ''
+    HOME=$(mktemp -d) ${python.interpreter} setup.py test
+  '';
+
+  meta = with lib; {
+    description = "A utility for sending notifications, on demand and when commands finish";
+    homepage = "http://ntfy.rtfd.org/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ kamilchm ];
+    mainProgram = "ntfy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ntfy/webpush.nix b/nixpkgs/pkgs/tools/misc/ntfy/webpush.nix
new file mode 100644
index 000000000000..cd58c5208e83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ntfy/webpush.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pywebpush
+, py-vapid
+}:
+
+buildPythonPackage rec {
+  pname = "ntfy-webpush";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "dschep";
+    repo = "ntfy-webpush";
+    rev = "v${version}";
+    sha256 = "1dxlvq3glf8yjkn1hdk89rx1s4fi9ygg46yn866a9v7a5a83zx2n";
+  };
+
+  postPatch = ''
+    # break dependency loop
+    substituteInPlace setup.py \
+      --replace "'ntfy', " ""
+  '';
+
+  propagatedBuildInputs = [
+    pywebpush
+    py-vapid
+  ];
+
+  # no tests, just a script
+  doCheck = false;
+
+  meta = with lib; {
+    description = "cloudbell webpush notification support for ntfy";
+    homepage = "https://dschep.github.io/ntfy-webpush/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nurl/Cargo.lock b/nixpkgs/pkgs/tools/misc/nurl/Cargo.lock
new file mode 100644
index 000000000000..2d89af7cda1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nurl/Cargo.lock
@@ -0,0 +1,1559 @@
+# 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 = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
+dependencies = [
+ "anstyle",
+ "bstr",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bstr"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
+dependencies = [
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clap"
+version = "4.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b6396aa128fe4149d2af114f746eb048b5667e2844cc51ae90830f45de7ccb"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d011140df54d9c4c592974ccd7d694dd4ab5b92ea0436435fa900a211d6b0f6"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "once_cell",
+ "strsim",
+ "terminal_size",
+ "unicase",
+ "unicode-width",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc443334c81a804575546c5a8a79b4913b50e28d69232903604cada1de817ce"
+dependencies = [
+ "clap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "clap_mangen"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f2e32b579dae093c2424a8b7e2bea09c89da01e1ce5065eb2f0a6f1cc15cc1f"
+dependencies = [
+ "clap",
+ "roff",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "content_inspector"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7bda66e858c683005a53a9a60c69a4aca7eeaa45d124526e389f7aec8e62f38"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "enum_dispatch"
+version = "0.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f33313078bb8d4d05a2733a94ac4c2d8a0df9a2b84424ebf4f33bfc224a890e"
+dependencies = [
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gix-features"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f708dc9875d1b3e05c1cbadfd22e5b543c733c511191798587ec479115664221"
+dependencies = [
+ "gix-hash",
+ "gix-trace",
+ "libc",
+]
+
+[[package]]
+name = "gix-hash"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0dd58cdbe7ffa4032fc111864c80d5f8cecd9a2c9736c97ae7e5be834188272"
+dependencies = [
+ "hex",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-path"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfca182d2575ded2ed38280f1ebf75cd5d3790b77e0872de07854cf085821fbe"
+dependencies = [
+ "bstr",
+ "gix-trace",
+ "home",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "gix-trace"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "103eac621617be3ebe0605c9065ca51a223279a23218aaf67d10daa6e452f663"
+
+[[package]]
+name = "gix-url"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "092d3f8f4040ee1b82830224e9002fff69248348af27dfdbcc8536db80283945"
+dependencies = [
+ "bstr",
+ "gix-features",
+ "gix-path",
+ "home",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "humantime-serde"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c"
+dependencies = [
+ "humantime",
+ "serde",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "rustix 0.38.4",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is_ci"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "nix-compat"
+version = "0.1.0"
+source = "git+https://code.tvl.fyi/depot.git:/tvix/nix-compat.git#3ec277c76c43ebe7be6f1fc43b7aad310e58df8b"
+dependencies = [
+ "anyhow",
+ "data-encoding",
+ "glob",
+ "serde",
+ "serde_json",
+ "sha2",
+ "thiserror",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[package]]
+name = "nu-glob"
+version = "0.82.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a73aed5e2a80f2021866adbd3a4b3013ace1ca06809459b3b208e791eb7729d9"
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "nurl"
+version = "0.3.13"
+dependencies = [
+ "anyhow",
+ "assert_cmd",
+ "bstr",
+ "clap",
+ "clap_complete",
+ "clap_mangen",
+ "data-encoding",
+ "enum_dispatch",
+ "gix-url",
+ "is-terminal",
+ "itertools 0.11.0",
+ "nix-compat",
+ "nu-glob",
+ "once_cell",
+ "owo-colors",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "trycmd",
+ "ureq",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "os_pipe"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+dependencies = [
+ "supports-color",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "predicates"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "itertools 0.10.5",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "roff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustix"
+version = "0.37.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
+dependencies = [
+ "bitflags 2.3.3",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.3",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki 0.101.1",
+ "sct",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[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 = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.174"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b88756493a5bd5e5395d53baa70b194b05764ab85b59e43e4b8f4e1192fa9b1"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.174"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e5c3a298c7f978e53536f95a63bdc4c4a64550582f31a0359a9afda6aede62e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "similar"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
+
+[[package]]
+name = "snapbox"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6bccd62078347f89a914e3004d94582e13824d4e3d8a816317862884c423835"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "content_inspector",
+ "dunce",
+ "filetime",
+ "libc",
+ "normalize-line-endings",
+ "os_pipe",
+ "similar",
+ "snapbox-macros",
+ "tempfile",
+ "wait-timeout",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "snapbox-macros"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaaf09df9f0eeae82be96290918520214530e738a7fe5a351b0f24cf77c0ca31"
+dependencies = [
+ "anstream",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "supports-color"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ba6faf2ca7ee42fdd458f4347ae0a9bd6bcc445ad7cb57ad82b383f18870d6f"
+dependencies = [
+ "atty",
+ "is_ci",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix 0.38.4",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+dependencies = [
+ "rustix 0.37.23",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "thiserror"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "trycmd"
+version = "0.14.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2925e71868a12b173c1eb166018c2d2f9dfaedfcaec747bdb6ea2246785d258e"
+dependencies = [
+ "glob",
+ "humantime",
+ "humantime-serde",
+ "rayon",
+ "serde",
+ "shlex",
+ "snapbox",
+ "toml_edit",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[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.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "ureq"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b11c96ac7ee530603dcdf68ed1557050f374ce55a5a07193ebf8cbc9f8927e9"
+dependencies = [
+ "base64",
+ "flate2",
+ "log",
+ "once_cell",
+ "rustls",
+ "rustls-webpki 0.100.1",
+ "serde",
+ "serde_json",
+ "url",
+ "webpki-roots",
+]
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
+dependencies = [
+ "rustls-webpki 0.100.1",
+]
+
+[[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 = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7"
+dependencies = [
+ "memchr",
+]
diff --git a/nixpkgs/pkgs/tools/misc/nurl/default.nix b/nixpkgs/pkgs/tools/misc/nurl/default.nix
new file mode 100644
index 000000000000..e0af2ff638dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nurl/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, makeBinaryWrapper
+, stdenv
+, darwin
+, gitMinimal
+, mercurial
+, nix
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nurl";
+  version = "0.3.13";
+
+  src = fetchFromGitHub {
+    owner = "nix-community";
+    repo = "nurl";
+    rev = "v${version}";
+    hash = "sha256-rVqF+16esE27G7GS55RT91tD4x/GAzfVlIR0AgSknz0=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "nix-compat-0.1.0" = "sha256-xHwBlmTggcZBFSh4EOY888AbmGQxhwvheJSStgpAj48=";
+    };
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    makeBinaryWrapper
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # tests require internet access
+  doCheck = false;
+
+  postInstall = ''
+    wrapProgram $out/bin/nurl \
+      --prefix PATH : ${lib.makeBinPath [ gitMinimal mercurial nix ]}
+    installManPage artifacts/nurl.1
+    installShellCompletion artifacts/nurl.{bash,fish} --zsh artifacts/_nurl
+  '';
+
+  env = {
+    GEN_ARTIFACTS = "artifacts";
+  };
+
+  meta = with lib; {
+    description = "Command-line tool to generate Nix fetcher calls from repository URLs";
+    homepage = "https://github.com/nix-community/nurl";
+    changelog = "https://github.com/nix-community/nurl/blob/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "nurl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nux/default.nix b/nixpkgs/pkgs/tools/misc/nux/default.nix
new file mode 100644
index 000000000000..89aea5e9dd9d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nux/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, asciidoctor
+, installShellFiles
+}:
+
+let
+  pname = "nux";
+  version = "0.1.4";
+in
+rustPlatform.buildRustPackage {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "NuxPackage";
+    repo = pname;
+    rev = version;
+    hash = "sha256-k3HRaWN8/MTZRGWBxI8RRK0tcSYBbSLs3vHkUdLGTc8";
+  };
+
+  cargoHash = "sha256-wfUr3dcdALMEgJ6CaXhK4Gqk6xflCnov9tELA63drV4=";
+
+  nativeBuildInputs = [ asciidoctor installShellFiles ];
+
+  postInstall = ''
+    installManPage $releaseDir/build/nux-*/out/nux.1
+    installShellCompletion $releaseDir/build/nux-*/out/nux.{bash,fish}
+    installShellCompletion $releaseDir/build/nux-*/out/_nux
+  '';
+
+  meta = {
+    homepage = "https://github.com/NuxPackage/nux";
+    description = "A wrapper over the nix cli";
+    license = with lib.licenses; [ gpl3Plus ];
+    maintainers = with lib.maintainers; [ ];
+    mainProgram = "nux";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nvfancontrol/default.nix b/nixpkgs/pkgs/tools/misc/nvfancontrol/default.nix
new file mode 100644
index 000000000000..1b2bebfce895
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nvfancontrol/default.nix
@@ -0,0 +1,32 @@
+{ lib, rustPlatform, fetchFromGitHub, libXNVCtrl, libX11, libXext }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nvfancontrol";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "foucault";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-0WBQSnTYVc3sNmZf/KFzznMg9AVsyaBgdx/IvG1dZAw=";
+  };
+
+  cargoSha256 = "sha256-fEzdghGQSSeyeyiHjw1ggQ38gsETJFl9bq/tizGxIis=";
+
+  nativeBuildInputs = [ libXNVCtrl libX11 libXext ];
+
+  # Needed for static linking
+  preConfigure = ''
+    export LIBRARY_PATH=${libXNVCtrl}/lib:${libX11}/lib:${libXext}/lib
+  '';
+
+  meta = with lib; {
+    description = "NVidia dynamic fan control for Linux";
+    homepage = "https://github.com/foucault/nvfancontrol";
+    changelog = "https://github.com/foucault/nvfancontrol/releases/tag/${version}";
+    license = with licenses; [ gpl3Only ];
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ devins2518 ];
+    mainProgram = "nvfancontrol";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nvimpager/default.nix b/nixpkgs/pkgs/tools/misc/nvimpager/default.nix
new file mode 100644
index 000000000000..fb10d0ad89c9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nvimpager/default.nix
@@ -0,0 +1,55 @@
+{ fetchFromGitHub
+, lib, stdenv
+, ncurses, neovim, procps
+, scdoc, lua51Packages, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nvimpager";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    owner = "lucc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-RmpPWS9gnBnR+Atw6uzBmeDSgoTOFSdKzHoJ84O+gyA=";
+  };
+
+  buildInputs = [
+    ncurses # for tput
+    procps # for nvim_get_proc() which uses ps(1)
+  ];
+  nativeBuildInputs = [ scdoc ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  buildFlags = [ "nvimpager.configured" "nvimpager.1" ];
+  preBuild = ''
+    patchShebangs nvimpager
+    substituteInPlace nvimpager --replace ':-nvim' ':-${neovim}/bin/nvim'
+    '';
+
+  doCheck = true;
+  nativeCheckInputs = [ lua51Packages.busted util-linux neovim ];
+  # filter out one test that fails in the sandbox of nix
+  checkPhase = let
+    exclude-tags = if stdenv.isDarwin then "nix,mac" else "nix";
+  in ''
+    runHook preCheck
+    make test BUSTED='busted --output TAP --exclude-tags=${exclude-tags}'
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "Use neovim as pager";
+    longDescription = ''
+      Use neovim as a pager to view manpages, diffs, etc with nvim's syntax
+      highlighting.  Includes a cat mode to print highlighted files to stdout
+      and a ansi esc mode to highlight ansi escape sequences in neovim.
+    '';
+    homepage = "https://github.com/lucc/nvimpager";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.lucc ];
+    mainProgram = "nvimpager";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/nyancat/default.nix b/nixpkgs/pkgs/tools/misc/nyancat/default.nix
new file mode 100644
index 000000000000..89acccd66fc1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/nyancat/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "nyancat";
+  version = "1.5.2";
+
+  src = fetchFromGitHub {
+    owner = "klange";
+    repo = "nyancat";
+    rev = version;
+    sha256 = "1mg8nm5xzcq1xr8cvx24ym2vmafkw53rijllwcdm9miiz0p5ky9k";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/bin "$out/bin" \
+      --replace /usr/share "$out/share"
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "Nyancat in your terminal, rendered through ANSI escape sequences";
+    homepage = "https://nyancat.dakko.us";
+    license = licenses.ncsa;
+    maintainers = with maintainers; [ midchildan ];
+    platforms = platforms.unix;
+    mainProgram = "nyancat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ocs-url/default.nix b/nixpkgs/pkgs/tools/misc/ocs-url/default.nix
new file mode 100644
index 000000000000..52c65d4b5b26
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ocs-url/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchgit, libsForQt5 }:
+
+let
+  version = "3.1.0";
+
+  main_src = fetchgit {
+    url = "https://www.opencode.net/dfn2/ocs-url.git";
+    rev = "release-${version}";
+    sha256 = "RvbkcSj8iUAHAEOyETwfH+3XnCCY/p8XM8LgVrZxrws=";
+  };
+
+  qtil_src = fetchgit {
+    url = "https://github.com/akiraohgaki/qtil";
+    rev = "v0.4.0";
+    sha256 = "XRSp0F7ggfkof1RNAnQU3+O9DcXDy81VR7NakITOXrw=";
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "ocs-url";
+  inherit version;
+
+  srcs = [ main_src qtil_src ];
+  sourceRoot = main_src.name;
+
+  # We are NOT in $sourceRoot here
+  postUnpack = ''
+    mkdir -p $sourceRoot/lib/qtil
+    cp -r ${qtil_src.name}/* $sourceRoot/lib/qtil/
+  '';
+
+  buildInputs = with libsForQt5.qt5; [
+    qtbase
+    qtsvg
+    qtquickcontrols
+    qmake
+    wrapQtAppsHook
+  ];
+
+  meta = with lib; {
+    description = "Open Collaboration System for use with DE store websites";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ SohamG ];
+    platforms = platforms.linux;
+    mainProgram = "ocs-url";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/octofetch/default.nix b/nixpkgs/pkgs/tools/misc/octofetch/default.nix
new file mode 100644
index 000000000000..4c4083d9555d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/octofetch/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, openssl
+, pkg-config
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "octofetch";
+  version = "0.3.3";
+
+  src = fetchFromGitHub {
+    owner = "azur1s";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-/AXE1e02NfxQzJZd0QX6gJDjmFFmuUTOndulZElgIMI=";
+  };
+
+  cargoSha256 = "sha256-iuhJYibyQ7hdeXzqCW2PLq7FiKnZp2VHyKT4qO/6vrU=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    homepage = "https://github.com/azur1s/octofetch";
+    description = "Github user information on terminal";
+    license = licenses.mit;
+    maintainers = with maintainers; [ joelkoen ];
+    mainProgram = "octofetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/octosql/default.nix b/nixpkgs/pkgs/tools/misc/octosql/default.nix
new file mode 100644
index 000000000000..a42f80d95ff9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/octosql/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "octosql";
+  version = "0.12.2";
+
+  src = fetchFromGitHub {
+    owner  = "cube2222";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "sha256-jf40w5QkSTAgGu0JA4NeqsasN2TUf9vnKVw5zlZr8Mw=";
+  };
+
+  vendorHash = "sha256-p/2UsvxxywQKtk/9wDa5fjS0z6xLLzDONuQ5AtnUonk=";
+
+  ldflags = [ "-s" "-w" "-X github.com/cube2222/octosql/cmd.VERSION=${version}" ];
+
+  postInstall = ''
+    rm -v $out/bin/tester
+  '';
+
+  meta = with lib; {
+    description = "Commandline tool for joining, analyzing and transforming data from multiple databases and file formats using SQL";
+    homepage = "https://github.com/cube2222/octosql";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ arikgrahl ];
+    mainProgram = "octosql";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix b/nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix
new file mode 100644
index 000000000000..2dbffe3384ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/odroid-xu3-bootloader/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitHub, coreutils, ubootOdroidXU3, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "odroid-xu3-bootloader";
+  version = "unstable-2015-12-04";
+
+  src = fetchFromGitHub {
+    owner = "hardkernel";
+    repo = "u-boot";
+    rev = "fe2f831fd44a4071f58a42f260164544697aa666";
+    sha256 = "1h5yvawzla0vqhkk98gxcwc824bhc936bh6j77qkyspvqcw761fr";
+  };
+
+  buildCommand = ''
+    install -Dm644 -t $out/lib/sd_fuse-xu3 $src/sd_fuse/hardkernel_1mb_uboot/{bl2,tzsw}.*
+    install -Dm644 -t $out/lib/sd_fuse-xu3 $src/sd_fuse/hardkernel/bl1.*
+    ln -sf ${ubootOdroidXU3}/u-boot-dtb.bin $out/lib/sd_fuse-xu3/u-boot-dtb.bin
+
+    install -Dm755 $src/sd_fuse/hardkernel_1mb_uboot/sd_fusing.1M.sh $out/bin/sd_fuse-xu3
+    sed -i \
+      -e '1i#!${runtimeShell}' \
+      -e '1iPATH=${lib.makeBinPath [ coreutils ]}:$PATH' \
+      -e '/set -x/d' \
+      -e 's,.\/sd_fusing\.sh,sd_fuse-xu3,g' \
+      -e "s,\./,$out/lib/sd_fuse-xu3/,g" \
+      $out/bin/sd_fuse-xu3
+  '';
+
+  meta = with lib; {
+    platforms = platforms.linux;
+    license = licenses.unfreeRedistributableFirmware;
+    description = "Secure boot enabled boot loader for ODROID-XU{3,4}";
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/odyssey/default.nix b/nixpkgs/pkgs/tools/misc/odyssey/default.nix
new file mode 100644
index 000000000000..726b12182ebb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/odyssey/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, cmake, openssl, postgresql, zstd, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "odyssey";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "yandex";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-1ALTKRjpKmmFcAuhmgpcbJBkNuUlTyau8xWDRHh7gf0=";
+  };
+
+  patches = [
+    # Fix compression build. Remove with the next release. https://github.com/yandex/odyssey/pull/441
+    (fetchpatch {
+      url = "https://github.com/yandex/odyssey/commit/01ca5b345c4483add7425785c9c33dfa2c135d63.patch";
+      sha256 = "sha256-8UPkZkiI08ZZL6GShhug/5/kOVrmdqYlsD1bcqfxg/w=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ openssl postgresql zstd ];
+  cmakeFlags = [ "-DPQ_LIBRARY=${postgresql.lib}/lib" "-DBUILD_COMPRESSION=ON" ];
+
+  installPhase = ''
+    install -Dm755 -t $out/bin sources/odyssey
+  '';
+
+  meta = with lib; {
+    description = "Scalable PostgreSQL connection pooler";
+    homepage = "https://github.com/yandex/odyssey";
+    license = licenses.bsd3;
+    maintainers = [ ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "odyssey";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/oggvideotools/default.nix b/nixpkgs/pkgs/tools/misc/oggvideotools/default.nix
new file mode 100644
index 000000000000..144c89f802af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/oggvideotools/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchurl, fetchpatch, cmake, pkg-config, boost, gd, libogg, libtheora, libvorbis }:
+
+stdenv.mkDerivation rec {
+  pname = "oggvideotools";
+  version = "0.9.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/oggvideotools/oggvideotools/oggvideotools-${version}/oggvideotools-${version}.tar.bz2";
+    sha256 = "sha256-2dv3iXt86phhIgnYC5EnRzyX1u5ssNzPwrOP4+jilSM=";
+  };
+
+  patches = [
+    # Fix pending upstream inclusion for missing includes:
+    #  https://sourceforge.net/p/oggvideotools/bugs/12/
+    (fetchpatch {
+      name = "gcc-10.patch";
+      url = "https://sourceforge.net/p/oggvideotools/bugs/12/attachment/fix-compile.patch";
+      sha256 = "sha256-mJttoC3jCLM3vmPhlyqh+W0ryp2RjJGIBXd6sJfLJA4=";
+    })
+
+    # Fix pending upstream inclusion for build failure on gcc-12:
+    #  https://sourceforge.net/p/oggvideotools/bugs/13/
+    (fetchpatch {
+      name = "gcc-12.patch";
+      url = "https://sourceforge.net/p/oggvideotools/bugs/13/attachment/fix-gcc-12.patch";
+      sha256 = "sha256-zuDXe86djWkR8SgYZHkuAJJ7Lf2VYsVRBrlEaODtMKE=";
+      # svn patch, rely on prefix added by fetchpatch:
+      extraPrefix = "";
+    })
+  ];
+
+  postPatch = ''
+    # Don't disable optimisations
+    substituteInPlace CMakeLists.txt --replace " -O0 " ""
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ boost gd libogg libtheora libvorbis ];
+
+  meta = with lib; {
+    description = "Toolbox for manipulating and creating Ogg video files";
+    homepage = "http://www.streamnik.de/oggvideotools.html";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ ];
+    # Compilation error on Darwin:
+    # error: invalid argument '--std=c++0x' not allowed with 'C'
+    # make[2]: *** [src/libresample/CMakeFiles/resample.dir/build.make:76: src/libresample/CMakeFiles/resample.dir/filterkit.c.o] Error 1
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ollama/default.nix b/nixpkgs/pkgs/tools/misc/ollama/default.nix
new file mode 100644
index 000000000000..fdda6ba3f1e8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ollama/default.nix
@@ -0,0 +1,215 @@
+{ lib
+, buildGo122Module
+, fetchFromGitHub
+, fetchpatch
+, buildEnv
+, linkFarm
+, overrideCC
+, makeWrapper
+, stdenv
+, nixosTests
+
+, pkgs
+, cmake
+, gcc12
+, clblast
+, libdrm
+, rocmPackages
+, cudaPackages
+, linuxPackages
+, darwin
+
+, testers
+, ollama
+
+, config
+  # one of `[ null false "rocm" "cuda" ]`
+, acceleration ? null
+}:
+
+let
+  pname = "ollama";
+  # don't forget to invalidate all hashes each update
+  version = "0.1.31";
+
+  src = fetchFromGitHub {
+    owner = "jmorganca";
+    repo = "ollama";
+    rev = "v${version}";
+    hash = "sha256-Ip1zrhgGpeYo2zsN206/x+tcG/bmPJAq4zGatqsucaw=";
+    fetchSubmodules = true;
+  };
+  vendorHash = "sha256-Lj7CBvS51RqF63c01cOCgY7BCQeCKGu794qzb/S80C0=";
+  # ollama's patches of llama.cpp's example server
+  # `ollama/llm/generate/gen_common.sh` -> "apply temporary patches until fix is upstream"
+  # each update, these patches should be synchronized with the contents of `ollama/llm/patches/`
+  llamacppPatches = [
+    (preparePatch "03-load_exception.diff" "sha256-1DfNahFYYxqlx4E4pwMKQpL+XR0bibYnDFGt6dCL4TM=")
+    (preparePatch "04-locale.diff" "sha256-r5nHiP6yN/rQObRu2FZIPBKpKP9yByyZ6sSI2SKj6Do=")
+  ];
+
+  preparePatch = patch: hash: fetchpatch {
+    url = "file://${src}/llm/patches/${patch}";
+    inherit hash;
+    stripLen = 1;
+    extraPrefix = "llm/llama.cpp/";
+  };
+
+
+  accelIsValid = builtins.elem acceleration [ null false "rocm" "cuda" ];
+  validateFallback = lib.warnIf (config.rocmSupport && config.cudaSupport)
+    (lib.concatStrings [
+      "both `nixpkgs.config.rocmSupport` and `nixpkgs.config.cudaSupport` are enabled, "
+      "but they are mutually exclusive; falling back to cpu"
+    ])
+    (!(config.rocmSupport && config.cudaSupport));
+  validateLinux = api: (lib.warnIfNot stdenv.isLinux
+    "building ollama with `${api}` is only supported on linux; falling back to cpu"
+    stdenv.isLinux);
+  shouldEnable = assert accelIsValid;
+    mode: fallback:
+      ((acceleration == mode)
+      || (fallback && acceleration == null && validateFallback))
+      && (validateLinux mode);
+
+  enableRocm = shouldEnable "rocm" config.rocmSupport;
+  enableCuda = shouldEnable "cuda" config.cudaSupport;
+
+
+  rocmClang = linkFarm "rocm-clang" {
+    llvm = rocmPackages.llvm.clang;
+  };
+  rocmPath = buildEnv {
+    name = "rocm-path";
+    paths = [
+      rocmPackages.clr
+      rocmPackages.hipblas
+      rocmPackages.rocblas
+      rocmPackages.rocsolver
+      rocmPackages.rocsparse
+      rocmPackages.rocm-device-libs
+      rocmClang
+    ];
+  };
+
+  cudaToolkit = buildEnv {
+    name = "cuda-toolkit";
+    ignoreCollisions = true; # FIXME: find a cleaner way to do this without ignoring collisions
+    paths = [
+      cudaPackages.cudatoolkit
+      cudaPackages.cuda_cudart
+      cudaPackages.cuda_cudart.static
+    ];
+  };
+
+  runtimeLibs = lib.optionals enableRocm [
+    rocmPackages.rocm-smi
+  ] ++ lib.optionals enableCuda [
+    linuxPackages.nvidia_x11
+  ];
+
+  appleFrameworks = darwin.apple_sdk_11_0.frameworks;
+  metalFrameworks = [
+    appleFrameworks.Accelerate
+    appleFrameworks.Metal
+    appleFrameworks.MetalKit
+    appleFrameworks.MetalPerformanceShaders
+  ];
+
+
+  goBuild =
+    if enableCuda then
+      buildGo122Module.override { stdenv = overrideCC stdenv gcc12; }
+    else
+      buildGo122Module;
+  inherit (lib) licenses platforms maintainers;
+in
+goBuild ((lib.optionalAttrs enableRocm {
+  ROCM_PATH = rocmPath;
+  CLBlast_DIR = "${clblast}/lib/cmake/CLBlast";
+}) // (lib.optionalAttrs enableCuda {
+  CUDA_LIB_DIR = "${cudaToolkit}/lib";
+  CUDACXX = "${cudaToolkit}/bin/nvcc";
+  CUDAToolkit_ROOT = cudaToolkit;
+}) // {
+  inherit pname version src vendorHash;
+
+  nativeBuildInputs = [
+    cmake
+  ] ++ lib.optionals enableRocm [
+    rocmPackages.llvm.bintools
+  ] ++ lib.optionals (enableRocm || enableCuda) [
+    makeWrapper
+  ] ++ lib.optionals stdenv.isDarwin
+    metalFrameworks;
+
+  buildInputs = lib.optionals enableRocm [
+    rocmPackages.clr
+    rocmPackages.hipblas
+    rocmPackages.rocblas
+    rocmPackages.rocsolver
+    rocmPackages.rocsparse
+    libdrm
+  ] ++ lib.optionals enableCuda [
+    cudaPackages.cuda_cudart
+  ] ++ lib.optionals stdenv.isDarwin
+    metalFrameworks;
+
+  patches = [
+    # disable uses of `git` in the `go generate` script
+    # ollama's build script assumes the source is a git repo, but nix removes the git directory
+    # this also disables necessary patches contained in `ollama/llm/patches/`
+    # those patches are added to `llamacppPatches`, and reapplied here in the patch phase
+    ./disable-git.patch
+  ] ++ llamacppPatches;
+  postPatch = ''
+    # replace a hardcoded use of `g++` with `$CXX` so clang can be used on darwin
+    substituteInPlace llm/generate/gen_common.sh --replace-fail 'g++' '$CXX'
+    # replace inaccurate version number with actual release version
+    substituteInPlace version/version.go --replace-fail 0.0.0 '${version}'
+  '';
+  preBuild = ''
+    # disable uses of `git`, since nix removes the git directory
+    export OLLAMA_SKIP_PATCHING=true
+    # build llama.cpp libraries for ollama
+    go generate ./...
+  '';
+  postFixup = ''
+    # the app doesn't appear functional at the moment, so hide it
+    mv "$out/bin/app" "$out/bin/.ollama-app"
+  '' + lib.optionalString (enableRocm || enableCuda) ''
+    # expose runtime libraries necessary to use the gpu
+    mv "$out/bin/ollama" "$out/bin/.ollama-unwrapped"
+    makeWrapper "$out/bin/.ollama-unwrapped" "$out/bin/ollama" ${
+      lib.optionalString enableRocm
+        ''--set-default HIP_PATH '${rocmPath}' ''} \
+      --suffix LD_LIBRARY_PATH : '/run/opengl-driver/lib:${lib.makeLibraryPath runtimeLibs}'
+  '';
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/jmorganca/ollama/version.Version=${version}"
+    "-X=github.com/jmorganca/ollama/server.mode=release"
+  ];
+
+  passthru.tests = {
+    service = nixosTests.ollama;
+    rocm = pkgs.ollama.override { acceleration = "rocm"; };
+    cuda = pkgs.ollama.override { acceleration = "cuda"; };
+    version = testers.testVersion {
+      inherit version;
+      package = ollama;
+    };
+  };
+
+  meta = {
+    description = "Get up and running with large language models locally";
+    homepage = "https://github.com/ollama/ollama";
+    changelog = "https://github.com/ollama/ollama/releases/tag/v${version}";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    mainProgram = "ollama";
+    maintainers = with maintainers; [ abysssol dit7ya elohmeier ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/ollama/disable-git.patch b/nixpkgs/pkgs/tools/misc/ollama/disable-git.patch
new file mode 100644
index 000000000000..5f9b4b3323b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ollama/disable-git.patch
@@ -0,0 +1,20 @@
+--- a/llm/generate/gen_common.sh
++++ b/llm/generate/gen_common.sh
+@@ -65,6 +65,8 @@
+         echo 'add_subdirectory(../ext_server ext_server) # ollama' >>${LLAMACPP_DIR}/CMakeLists.txt
+     fi
+ 
++    return
++
+     if [ -n "$(ls -A ../patches/*.diff)" ]; then
+         # apply temporary patches until fix is upstream
+         for patch in ../patches/*.diff; do
+@@ -110,6 +112,8 @@
+ 
+ # Keep the local tree clean after we're done with the build
+ cleanup() {
++    return
++
+     (cd ${LLAMACPP_DIR}/ && git checkout CMakeLists.txt)
+ 
+     if [ -n "$(ls -A ../patches/*.diff)" ]; then
diff --git a/nixpkgs/pkgs/tools/misc/ondir/default.nix b/nixpkgs/pkgs/tools/misc/ondir/default.nix
new file mode 100644
index 000000000000..1b32f474fc04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ondir/default.nix
@@ -0,0 +1,45 @@
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+}:
+
+stdenv.mkDerivation {
+  pname = "ondir";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "alecthomas";
+    repo = "ondir";
+    rev = "cb2f9f8b21e336165fc0a310d677fda75c8e8513";
+    hash = "sha256-XTZKFIzJ3xL8ae3zG8nsMhGWvpvRUAQ2b6q/Q1QvGd0=";
+  };
+
+  installPhase = ''
+  runHook preInstall
+
+  make DESTDIR="$out" PREFIX= install
+  cp scripts.* $out
+
+  runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "a small program to automate tasks specific to certain directories";
+    longDescription = ''
+    It works by executing scripts in directories when you enter and leave them.
+    This is done by overriding the shell builtins cd, pushd, and popd,
+     which is a manual action.
+    The user is required to add a snippet to their shell initialisation file like .bashrc or .profile.
+
+    Which commands are executed on directory entry and leave is done
+     in predefined locations with a .ondirrc file.
+
+    See man ondir for more information
+    '';
+    homepage = "https://github.com/alecthomas/ondir/";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.michaelCTS ];
+    mainProgram = "ondir";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/onefetch/default.nix b/nixpkgs/pkgs/tools/misc/onefetch/default.nix
new file mode 100644
index 000000000000..84762c8b7274
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/onefetch/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, cmake
+, installShellFiles
+, pkg-config
+, zstd
+, stdenv
+, CoreFoundation
+, libresolv
+, Security
+, git
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "onefetch";
+  version = "2.20.0";
+
+  src = fetchFromGitHub {
+    owner = "o2sh";
+    repo = pname;
+    rev = version;
+    hash = "sha256-aQeKzOxRlSGuVewh3HEx1M12vmaxhy6ImnqMDc5b0DI=";
+  };
+
+  cargoHash = "sha256-g+fTmZGyPkQLgnJ9Bb4sLTfDMPPBRA+s6f3OxXTKwsM=";
+
+  cargoPatches = [
+    # enable pkg-config feature of zstd
+    ./zstd-pkg-config.patch
+  ];
+
+  nativeBuildInputs = [ cmake installShellFiles pkg-config ];
+
+  buildInputs = [ zstd ]
+    ++ lib.optionals stdenv.isDarwin [ CoreFoundation libresolv Security ];
+
+  nativeCheckInputs = [
+    git
+  ];
+
+  preCheck = ''
+    git init
+    git config user.name nixbld
+    git config user.email nixbld@example.com
+    git add .
+    git commit -m test
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd onefetch \
+      --bash <($out/bin/onefetch --generate bash) \
+      --fish <($out/bin/onefetch --generate fish) \
+      --zsh <($out/bin/onefetch --generate zsh)
+  '';
+
+  meta = with lib; {
+    description = "Git repository summary on your terminal";
+    homepage = "https://github.com/o2sh/onefetch";
+    changelog = "https://github.com/o2sh/onefetch/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne figsoda kloenk ];
+    mainProgram = "onefetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/onefetch/zstd-pkg-config.patch b/nixpkgs/pkgs/tools/misc/onefetch/zstd-pkg-config.patch
new file mode 100644
index 000000000000..9bfc271dc912
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/onefetch/zstd-pkg-config.patch
@@ -0,0 +1,24 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index f6d5b6c..a631bbf 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -2544,6 +2544,7 @@ dependencies = [
+  "typetag",
+  "winres",
+  "yaml-rust",
++ "zstd",
+ ]
+ 
+ [[package]]
+diff --git a/Cargo.toml b/Cargo.toml
+index b77f70d..861f1ac 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -65,6 +65,7 @@ tokei = "12.1.2"
+ typetag = "0.2"
+ yaml-rust = "0.4.5"
+ parking_lot = "0.12"
++zstd = { version = "*", features = ["pkg-config"] }
+ 
+ [dev-dependencies]
+ criterion = "0.5.1"
diff --git a/nixpkgs/pkgs/tools/misc/online-judge-template-generator/default.nix b/nixpkgs/pkgs/tools/misc/online-judge-template-generator/default.nix
new file mode 100644
index 000000000000..e867059eff3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/online-judge-template-generator/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, buildPythonApplication
+, appdirs
+, beautifulsoup4
+, colorlog
+, fetchFromGitHub
+, mako
+, online-judge-api-client
+, online-judge-tools
+, ply
+, pyyaml
+, requests
+, setuptools
+, toml
+}:
+
+buildPythonApplication rec {
+  pname = "online-judge-template-generator";
+  version = "4.8.1";
+
+  src = fetchFromGitHub {
+    owner = "online-judge-tools";
+    repo = "template-generator";
+    rev = "v${version}";
+    sha256 = "sha256-cS1ED1a92fEFqy6ht8UFjxocWIm35IA/VuaPSLsdlqg=";
+  };
+
+  propagatedBuildInputs = [
+    appdirs
+    beautifulsoup4
+    colorlog
+    mako
+    online-judge-api-client
+    online-judge-tools
+    ply
+    pyyaml
+    requests
+    setuptools
+    toml
+  ];
+
+  # Needs internet to run tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Analyze problems of competitive programming and automatically generate boilerplate";
+    homepage = "https://github.com/online-judge-tools/template-generator";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sei40kr ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/open-pdf-sign/default.nix b/nixpkgs/pkgs/tools/misc/open-pdf-sign/default.nix
new file mode 100644
index 000000000000..76d957d340ad
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/open-pdf-sign/default.nix
@@ -0,0 +1,43 @@
+{ fetchurl
+, jre
+, lib
+, makeBinaryWrapper
+, nix-update-script
+, stdenv
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  version = "0.2.0";
+  pname = "open-pdf-sign";
+
+  src = fetchurl {
+    url = "https://github.com/open-pdf-sign/open-pdf-sign/releases/download/v${finalAttrs.version}/open-pdf-sign.jar";
+    hash = "sha256-W4WymhjLrHtNK5XY8aahpZOIIh/Qp9scE3zybXF6/9o=";
+  };
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  buildCommand = ''
+    install -Dm644 $src $out/lib/open-pdf-sign.jar
+
+    mkdir -p $out/bin
+    makeWrapper ${lib.getExe jre} $out/bin/open-pdf-sign \
+      --add-flags "-jar $out/lib/open-pdf-sign.jar"
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = {
+    description = "Digitally sign PDF files from your commandline";
+    homepage = "https://github.com/open-pdf-sign/open-pdf-sign";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ drupol ];
+    platforms = lib.platforms.unix;
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    mainProgram = "open-pdf-sign";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/opencbm/default.nix b/nixpkgs/pkgs/tools/misc/opencbm/default.nix
new file mode 100644
index 000000000000..434b3d421de2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opencbm/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cc65
+, ncurses
+, pkg-config
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "opencbm";
+  version = "0.4.99.104";
+
+  src = fetchFromGitHub {
+    owner = "OpenCBM";
+    repo = "OpenCBM";
+    rev = "v${version}";
+    sha256 = "sha256-5lj5F79Gbhrvi9dxKGobdyDyBLGcptAtxx9SANhLrKw=";
+  };
+
+  makefile = "LINUX/Makefile";
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "ETCDIR=${placeholder "out"}/etc"
+    "UDEVRULESDIR=${placeholder "out"}/etc/udev/rules.d/"
+    "LDCONFIG=true"
+  ];
+  installTargets = "install-all";
+
+  nativeBuildInputs = [
+    cc65
+    pkg-config
+  ];
+  buildInputs = [
+    libusb1
+    ncurses
+  ];
+
+  meta = with lib; {
+    description = "Kernel driver and development library to control serial CBM devices";
+    longDescription = ''
+      Win 7/8/10, and Linux/i386/AMD64 kernel driver and development library to
+      control serial CBM devices, such as the Commodore 1541 disk drive,
+      connected to the PC's parallel port via a XM1541 or XA1541 cable. Fast
+      disk copier included. Successor of cbm4linux. Also supports the XU1541
+      and the XUM1541 devices (a.k.a. "ZoomFloppy").
+    '';
+    homepage = "https://spiro.trikaliotis.net/opencbm";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.sander ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opencorsairlink/default.nix b/nixpkgs/pkgs/tools/misc/opencorsairlink/default.nix
new file mode 100644
index 000000000000..40b747f20305
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opencorsairlink/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, libusb1, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "OpenCorsairLink";
+  version = "unstable-2019-12-23";
+
+  buildInputs = [ libusb1 ];
+  nativeBuildInputs = [ pkg-config ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  src = fetchFromGitHub {
+    owner = "audiohacked";
+    repo = "OpenCorsairLink";
+    rev = "46dbf206e19a40d6de6bd73142ed93bdb26c5c1a";
+    sha256 = "1nizicl0mc9pslc6065mnrs0fnn8sh7ca8iiw7w9ix57zrhabpld";
+  };
+
+  patches = [
+    # Pull upstream fix for -fno-common toolchain
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/audiohacked/OpenCorsairLink/commit/d600c7ff032a3911d30b039844a31f0b3acfe26a.patch";
+      sha256 = "030rwka5bvf79x6ir18vqb09izhz1crp94x5gqjxwv3b20vvv4kx";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Linux and Mac OS support for the CorsairLink Devices ";
+    homepage = "https://github.com/audiohacked/OpenCorsairLink";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = [ lib.maintainers.expipiplus1 ];
+    mainProgram = "OpenCorsairLink.elf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opentelemetry-collector/contrib.nix b/nixpkgs/pkgs/tools/misc/opentelemetry-collector/contrib.nix
new file mode 100644
index 000000000000..6a0fafc7815c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opentelemetry-collector/contrib.nix
@@ -0,0 +1,68 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, stdenv
+, systemdMinimal
+, withSystemd ? false
+}:
+
+buildGoModule rec {
+  pname = "opentelemetry-collector-contrib";
+  version = "0.98.0";
+
+  src = fetchFromGitHub {
+    owner = "open-telemetry";
+    repo = "opentelemetry-collector-contrib";
+    rev = "v${version}";
+    sha256 = "sha256-YdaAP/o8WhiGOggF2Xo66TzE7PCJDkvbiCFPLVG4SHQ=";
+  };
+
+  # proxy vendor to avoid hash missmatches between linux and macOS
+  proxyVendor = true;
+  vendorHash = "sha256-4hQcHUX/UgeG/ojljq4eJCqZIYp1unNsngprr/3C9q0=";
+
+  # there is a nested go.mod
+  sourceRoot = "${src.name}/cmd/otelcontribcol";
+
+  # upstream strongly recommends disabling CGO
+  # additionally dependencies have had issues when GCO was enabled that weren't caught upstream
+  # https://github.com/open-telemetry/opentelemetry-collector/blob/main/CONTRIBUTING.md#using-cgo
+  CGO_ENABLED = 0;
+
+  # journalctl is required in-$PATH for the journald receiver tests.
+  nativeCheckInputs = lib.optionals stdenv.isLinux [ systemdMinimal ];
+
+  # We don't inject the package into propagatedBuildInputs unless
+  # asked to avoid hard-requiring a large package. For the journald
+  # receiver to work, journalctl will need to be available in-$PATH,
+  # so expose this as an option for those who want more control over
+  # it instead of trusting the global $PATH.
+  propagatedBuildInputs = lib.optionals withSystemd [ systemdMinimal ];
+
+  doCheck = false;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/open-telemetry/opentelemetry-collector-contrib/internal/version.Version=v${version}"
+  ];
+
+  meta = with lib; {
+    description = "OpenTelemetry Collector superset with additional community collectors";
+    longDescription = ''
+      The OpenTelemetry Collector offers a vendor-agnostic implementation on how
+      to receive, process and export telemetry data. In addition, it removes the
+      need to run, operate and maintain multiple agents/collectors in order to
+      support open-source telemetry data formats (e.g. Jaeger, Prometheus, etc.)
+      sending to multiple open-source or commercial back-ends. The Contrib
+      edition provides aditional vendor specific receivers/exporters and/or
+      components that are only useful to a relatively small number of users and
+      is multiple times larger as a result.
+    '';
+    homepage = "https://github.com/open-telemetry/opentelemetry-collector-contrib";
+    changelog = "https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/v${version}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ uri-canva jk ];
+    mainProgram = "otelcontribcol";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opentelemetry-collector/default.nix b/nixpkgs/pkgs/tools/misc/opentelemetry-collector/default.nix
new file mode 100644
index 000000000000..421f59f75009
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opentelemetry-collector/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, opentelemetry-collector
+}:
+
+buildGoModule rec {
+  pname = "opentelemetry-collector";
+  version = "0.99.0";
+
+  src = fetchFromGitHub {
+    owner = "open-telemetry";
+    repo = "opentelemetry-collector";
+    rev = "v${version}";
+    hash = "sha256-O0I6G8Wa2GTv/lR6ijo9XglAdciJj2yuupJP9/uYySM=";
+  };
+  # there is a nested go.mod
+  sourceRoot = "${src.name}/cmd/otelcorecol";
+  vendorHash = "sha256-JaquTJ3xl2NvipKF8her5m7tbYbLVQjYprGXEcrzv4s=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # upstream strongly recommends disabling CGO
+  # additionally dependencies have had issues when GCO was enabled that weren't caught upstream
+  # https://github.com/open-telemetry/opentelemetry-collector/blob/main/CONTRIBUTING.md#using-cgo
+  CGO_ENABLED = 0;
+
+  preBuild = ''
+    # set the build version, can't be done via ldflags
+    sed -i -E 's/Version:(\s*)".*"/Version:\1"${version}"/' main.go
+  '';
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installShellCompletion --cmd otelcorecol \
+      --bash <($out/bin/otelcorecol completion bash) \
+      --fish <($out/bin/otelcorecol completion fish) \
+      --zsh <($out/bin/otelcorecol completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    inherit version;
+    package = opentelemetry-collector;
+    command = "otelcorecol -v";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/open-telemetry/opentelemetry-collector";
+    changelog = "https://github.com/open-telemetry/opentelemetry-collector/blob/v${version}/CHANGELOG.md";
+    description = "A vendor-agnostic implementation on how to receive, process and export telemetry data";
+    longDescription = ''
+      The OpenTelemetry Collector offers a vendor-agnostic implementation on how
+      to receive, process and export telemetry data. In addition, it removes the
+      need to run, operate and maintain multiple agents/collectors in order to
+      support open-source telemetry data formats (e.g. Jaeger, Prometheus, etc.)
+      sending to multiple open-source or commercial back-ends.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ uri-canva jk ];
+    mainProgram = "otelcorecol";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix b/nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix
new file mode 100644
index 000000000000..2a5c2c05a0fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opentimestamps-client/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "opentimestamps-client";
+  version = "0.7.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "opentimestamps";
+    repo = "opentimestamps-client";
+    rev = "refs/tags/opentimestamps-client-v${version}";
+    hash = "sha256-0dWaXetRlF1MveBdJ0sAdqJ5HCdn08gkbX+nen/ygsQ=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    gitpython
+    opentimestamps
+    pysocks
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "otsclient"
+  ];
+
+  meta = with lib; {
+    description = "Command-line tool to create and verify OpenTimestamps proofs";
+    homepage = "https://github.com/opentimestamps/opentimestamps-client";
+    changelog = "https://github.com/opentimestamps/opentimestamps-client/releases/tag/opentimestamps-client-v${version}";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ erikarvstedt ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/opentsdb/default.nix b/nixpkgs/pkgs/tools/misc/opentsdb/default.nix
new file mode 100644
index 000000000000..abce03cae02f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/opentsdb/default.nix
@@ -0,0 +1,352 @@
+{ lib
+, stdenv
+, autoconf
+, automake
+, curl
+, fetchFromGitHub
+, fetchMavenArtifact
+, fetchpatch
+, git
+, jdk8
+, makeWrapper
+, nettools
+, python3
+}:
+
+let
+  jdk = jdk8;
+  jre = jdk8.jre;
+  artifacts = {
+    apache = [
+      (fetchMavenArtifact {
+        groupId = "org.apache.commons";
+        artifactId = "commons-math3";
+        version = "3.6.1";
+        hash = "sha256-HlbXsFjSi2Wr0la4RY44hbZ0wdWI+kPNfRy7nH7yswg=";
+      })
+    ];
+    guava = [
+      (fetchMavenArtifact {
+        groupId = "com.google.guava";
+        artifactId = "guava";
+        version = "18.0";
+        hash = "sha256-1mT7/APS5c6cqypE+wHx0L+d/r7MwaRzsfnqMfefb5k=";
+      })
+    ];
+    gwt = [
+      (fetchMavenArtifact {
+        groupId = "com.google.gwt";
+        artifactId = "gwt-dev";
+        version = "2.6.1";
+        hash = "sha256-iS8VpnMPuxE9L9hkTJVtW5Tqgw2TIYei47zRvkdoK0o=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.google.gwt";
+        artifactId = "gwt-user";
+        version = "2.6.1";
+        hash = "sha256-3IlJ+b6C0Gmuh7aAFg9+ldgvZCdfJmTB8qcdC4HZC9g=";
+      })
+      (fetchMavenArtifact {
+        groupId = "net.opentsdb";
+        artifactId = "opentsdb-gwt-theme";
+        version = "1.0.0";
+        hash = "sha256-JJsjcRlQmIrwpOtMweH12e/Ut5NG8R50VPiOAMMGEdc=";
+      })
+    ];
+    hamcrest = [
+      (fetchMavenArtifact {
+        url = "https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar";
+        groupId = "org.hamcrest";
+        artifactId = "hamcrest-core";
+        version = "1.3";
+        hash = "sha256-Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=";
+      })
+    ];
+    hbase = [
+      (fetchMavenArtifact {
+        groupId = "org.hbase";
+        artifactId = "asynchbase";
+        version = "1.8.2";
+        hash = "sha256-D7mKprHMW23dE0SzdNsagv3Hp2G5HUN7sKfs1nVzQF4=";
+      })
+    ];
+    jackson = [
+      (fetchMavenArtifact {
+        groupId = "com.fasterxml.jackson.core";
+        artifactId = "jackson-annotations";
+        version = "2.14.1";
+        hash = "sha256-0lW0uGP/jscUqPlvpVw0Yh1D27grgtP1dHZJakwJ4ec=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.fasterxml.jackson.core";
+        artifactId = "jackson-core";
+        version = "2.14.1";
+        hash = "sha256-ARQYfilrNMkxwb+eWoQVK2K/q30YL1Yj85gtwto15SY=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.fasterxml.jackson.core";
+        artifactId = "jackson-databind";
+        version = "2.14.1";
+        hash = "sha256-QjoMgG3ks/petKKGmDBeOjd3xzHhvPobLzo3YMe253M=";
+      })
+    ];
+    javacc = [
+      (fetchMavenArtifact {
+        groupId = "net.java.dev.javacc";
+        artifactId = "javacc";
+        version = "6.1.2";
+        hash = "sha256-7Qxclglhz+tDE4LPAVKCewEVZ0fbN5LRv5PoHjLCBKs=";
+      })
+    ];
+    javassist = [
+      (fetchMavenArtifact {
+        groupId = "org.javassist";
+        artifactId = "javassist";
+        version = "3.21.0-GA";
+        hash = "sha256-eqWeAx+UGYSvB9rMbKhebcm9OkhemqJJTLwDTvoSJdA=";
+      })
+    ];
+    jexl = [
+      (fetchMavenArtifact {
+        groupId = "commons-logging";
+        artifactId = "commons-logging";
+        version = "1.2";
+        hash = "sha256-2t3qHqC+D1aXirMAa4rJKDSv7vvZt+TmMW/KV98PpjY=";
+      })
+      (fetchMavenArtifact {
+        groupId = "org.apache.commons";
+        artifactId = "commons-jexl";
+        version = "2.1.1";
+        hash = "sha256-A8mp+uXaeM5SwL8kRnzDc1W34jGW3/SDniwP8BigEwY=";
+      })
+    ];
+    jgrapht = [
+      (fetchMavenArtifact {
+        groupId = "org.jgrapht";
+        artifactId = "jgrapht-core";
+        version = "0.9.1";
+        hash = "sha256-5u8cEVaJ7aCBQrhtUkYg2mQ7bp8BNAUletB/QtxcaXg=";
+      })
+    ];
+    junit = [
+      (fetchMavenArtifact {
+        groupId = "junit";
+        artifactId = "junit";
+        version = "4.11";
+        hash = "sha256-kKjhYD7spI5+h586+8lWBxUyKYXzmidPb2BwtD+dBv4=";
+      })
+    ];
+    kryo = [
+      (fetchMavenArtifact {
+        groupId = "org.ow2.asm";
+        artifactId = "asm";
+        version = "4.0";
+        hash = "sha256-+y3ekCCke7AkxD2d4KlOc6vveTvwjwE1TMl8stLiqVc=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.esotericsoftware.kryo";
+        artifactId = "kryo";
+        version = "2.21.1";
+        hash = "sha256-adEG73euU3sZBp9WUQNLZBN6Y3UAZXTAxjsuvDuy7q4=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.esotericsoftware.minlog";
+        artifactId = "minlog";
+        version = "1.2";
+        hash = "sha256-pnjLGqj10D2QHJksdXQYQdmKm8PVXa0C6E1lMVxOYPI=";
+      })
+      (fetchMavenArtifact {
+        groupId = "com.esotericsoftware.reflectasm";
+        artifactId = "reflectasm";
+        version = "1.07";
+        classifier = "shaded";
+        hash = "sha256-CKcOrbSydO2u/BGUwfdXBiGlGwqaoDaqFdzbe5J+fHY=";
+      })
+    ];
+    logback = [
+      (fetchMavenArtifact {
+        groupId = "ch.qos.logback";
+        artifactId = "logback-classic";
+        version = "1.3.4";
+        hash = "sha256-uGal2myLeOFVxn/M11YoYNC1/Hdric2WjC8/Ljf8OgI=";
+      })
+      (fetchMavenArtifact {
+        groupId = "ch.qos.logback";
+        artifactId = "logback-core";
+        version = "1.3.4";
+        hash = "sha256-R0CgmLtEOnRFVN093wYsaCKHspQGZ1TikuE0bIv1zt0=";
+      })
+    ];
+    mockito = [
+      (fetchMavenArtifact {
+        groupId = "org.mockito";
+        artifactId = "mockito-core";
+        version = "1.9.5";
+        hash = "sha256-+XSDuglEufoTOqKWOHZN2+rbUew9vAIHTFj6LK7NB/o=";
+      })
+    ];
+    netty = [
+      (fetchMavenArtifact {
+        groupId = "io.netty";
+        artifactId = "netty";
+        version = "3.10.6.Final";
+        hash = "sha256-h2ilD749k6iNjmAA6l1o4w9Q3JFbN2TDxYcPcMT7O0k=";
+      })
+    ];
+    objenesis = [
+      (fetchMavenArtifact {
+        groupId = "org.objenesis";
+        artifactId = "objenesis";
+        version = "1.3";
+        hash = "sha256-3U7z0wkQY6T+xXjLsrvmwfkhwACRuimT3Nmv0l/5REo=";
+      })
+    ];
+    powermock = [
+      (fetchMavenArtifact {
+        groupId = "org.powermock";
+        artifactId = "powermock-mockito-release-full";
+        version = "1.5.4";
+        classifier = "full";
+        hash = "sha256-GWXaFG/ZtPlc7uKrghQHNAPzEu2k5VGYCYTXIlbylb4=";
+      })
+    ];
+    protobuf = [
+      (fetchMavenArtifact {
+        groupId = "com.google.protobuf";
+        artifactId = "protobuf-java";
+        version = "2.5.0";
+        hash = "sha256-4MHGRXXABWAXJefGoCzr+eEoXoiPdWsqHXP/qNclzHQ=";
+      })
+    ];
+    slf4j = [
+      (fetchMavenArtifact {
+        groupId = "org.slf4j";
+        artifactId = "log4j-over-slf4j";
+        version = "2.0.6";
+        hash = "sha256-QHMpiJioL0KeHr2iNaMUc7G0jDR94ShnNbtnkiUm6uQ=";
+      })
+      (fetchMavenArtifact {
+        groupId = "org.slf4j";
+        artifactId = "slf4j-api";
+        version = "2.0.6";
+        hash = "sha256-LyqS1BCyaBOdfWO3XtJeIZlc/kEAwZvyNXfP28gHe9o=";
+      })
+    ];
+    suasync = [
+      (fetchMavenArtifact {
+        groupId = "com.stumbleupon";
+        artifactId = "async";
+        version = "1.4.0";
+        hash = "sha256-FJ1HH68JOkjNtkShjLTJ8K4NO/A/qu88ap7J7SEndrM=";
+      })
+    ];
+    validation-api = [
+      (fetchMavenArtifact {
+        groupId = "javax.validation";
+        artifactId = "validation-api";
+        version = "1.0.0.GA";
+        hash = "sha256-5FnzE+vG2ySD+M6q05rwcIY2G0dPqS5A9ELo3l2Yldw=";
+      })
+      (fetchMavenArtifact {
+        groupId = "javax.validation";
+        artifactId = "validation-api";
+        version = "1.0.0.GA";
+        classifier = "sources";
+        hash = "sha256-o5TVKpt/4rsU8HGNKzyDCP/o836RGVYBI5jVXJ+fm1Q=";
+      })
+    ];
+    zookeeper = [
+      (fetchMavenArtifact {
+        groupId = "org.apache.zookeeper";
+        artifactId = "zookeeper";
+        version = "3.4.6";
+        hash = "sha256-ijdaHvmMvA4fbp39DZbZFLdNN60AtL+Bvrd/qPNNM64=";
+      })
+    ];
+  };
+in stdenv.mkDerivation rec {
+  pname = "opentsdb";
+  version = "2.4.1";
+
+  src = fetchFromGitHub {
+    owner = "OpenTSDB";
+    repo = "opentsdb";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-899m1H0UCLsI/bnSrNFnnny4MxSw3XBzf7rgDuEajDs=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "bump-deps.0.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/2f4bbfba2f9a32f9295123e8b90adba022c11ece.patch";
+      hash = "sha256-4LpR4O8mNiJZQ7PUmAzFdkZAaF8i9/ZM5NhQ+8AJgSw=";
+    })
+    (fetchpatch {
+      name = "bump-deps.1.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/8c6a86ddbc367c7e4e2877973b70f77c105c6158.patch";
+      hash = "sha256-LZHqDOhwO/Gfgu870hJ6/uxnmigv7RP8OFe2a7Ug5SM=";
+    })
+    (fetchpatch {
+      name = "bump-deps.2.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/9b62442ba5c006376f57ef250fb7debe1047c3bf.patch";
+      hash = "sha256-2VjI9EkirKj4h7xhUtWdnKxJG0Noz3Hk5njm3pYEU1g=";
+    })
+    (fetchpatch {
+      name = "CVE-2023-25826.prerequisite.0.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/a82a4f85f0fc1af554a104f28cc495451b26b1f6.patch";
+      hash = "sha256-GgoRZUGdKthK+ZwMpgSQQ4V2oHyqi8SwWGZT571gltQ=";
+    })
+    (fetchpatch {
+      name = "CVE-2023-25826.prerequisite.1.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/22b27ea30a859a6dbdcd65fcdf61190d46e1b677.patch";
+      hash = "sha256-pXo6U7d4iy2squAiFvV2iDAQcNDdrl0pIOQEXfkJ3a8=";
+    })
+    (fetchpatch {
+      name = "CVE-2023-25826.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/07c4641471c6f5c2ab5aab615969e97211eb50d9.patch";
+      hash = "sha256-88gIOhAhLCQC/UesIdYtjf0UgKNfnO0W2icyoMmiC3U=";
+    })
+    (fetchpatch {
+      name = "CVE-2023-25827.patch";
+      url = "https://github.com/OpenTSDB/opentsdb/commit/fa88d3e4b5369f9fb73da384fab0b23e246309ba.patch";
+      hash = "sha256-FJHUiEmGhBIHoyOwNZtUWA36ENbrqDkUT8HfccmMSe8=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    makeWrapper
+  ];
+
+  buildInputs = [ curl jdk nettools python3 git ];
+
+  preConfigure = ''
+    chmod +x build-aux/fetchdep.sh.in
+    patchShebangs ./build-aux/
+    ./bootstrap
+  '';
+
+  preBuild = lib.concatStrings (lib.mapAttrsToList (dir: lib.concatMapStrings (artifact: ''
+    cp ${artifact}/share/java/* third_party/${dir}
+  '')) artifacts);
+
+  postInstall = ''
+    wrapProgram $out/bin/tsdb \
+      --set JAVA_HOME "${jre}" \
+      --set JAVA "${jre}/bin/java"
+  '';
+
+  meta = with lib; {
+    description = "Time series database with millisecond precision";
+    homepage = "http://opentsdb.net";
+    license = licenses.lgpl21Plus;
+    platforms = lib.platforms.linux;
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # maven dependencies
+    ];
+    maintainers = [ ];
+    mainProgram = "tsdb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/oppai-ng/default.nix b/nixpkgs/pkgs/tools/misc/oppai-ng/default.nix
new file mode 100644
index 000000000000..cf1ea893fcf9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/oppai-ng/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "oppai-ng";
+  version = "4.1.0";
+
+  src = fetchFromGitHub {
+    owner = "Francesco149";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-L9eraLOWm1tMImS8bLB9T4Md4VdTSxqI9Bt4r8eqxqs=";
+  };
+
+  buildPhase = ''
+    ./build
+    ./libbuild
+  '';
+
+  installPhase = ''
+    install -D oppai $out/bin/oppai
+    install -D oppai.c $out/include/oppai.c
+    install -D liboppai.so $out/lib/liboppai.so
+  '';
+
+  meta = with lib; {
+    description = "Difficulty and pp calculator for osu!";
+    homepage = "https://github.com/Francesco149/oppai-ng";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ tadeokondrak ];
+    mainProgram = "oppai";
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/org-stats/default.nix b/nixpkgs/pkgs/tools/misc/org-stats/default.nix
new file mode 100644
index 000000000000..ead4f9e18d33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/org-stats/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, substituteAll
+, installShellFiles
+, testers
+, org-stats
+}:
+
+buildGoModule rec {
+  pname = "org-stats";
+  version = "1.11.2";
+
+  src = fetchFromGitHub {
+    owner = "caarlos0";
+    repo = "org-stats";
+    rev = "v${version}";
+    hash = "sha256-b0Cfs4EqQOft/HNAoJvRriCMzNiOgYagBLiPYgsDgJM=";
+  };
+
+  vendorHash = "sha256-LKpnEXVfxBR3cebv46QontDVeA64MJe0vNiKSnTjLtQ=";
+
+  patches = [
+    # patch in version information
+    # since `debug.ReadBuildInfo` does not work with `go build
+    (substituteAll {
+      src = ./version.patch;
+      inherit version;
+    })
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    $out/bin/org-stats man > org-stats.1
+    installManPage org-stats.1
+
+    installShellCompletion --cmd org-stats \
+      --bash <($out/bin/org-stats completion bash) \
+      --fish <($out/bin/org-stats completion fish) \
+      --zsh <($out/bin/org-stats completion zsh)
+  '';
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = org-stats;
+      command = "org-stats version";
+    };
+  };
+
+  meta = with lib; {
+    description = "Get the contributor stats summary from all repos of any given organization";
+    homepage = "https://github.com/caarlos0/org-stats";
+    changelog = "https://github.com/caarlos0/org-stats/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "org-stats";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/org-stats/version.patch b/nixpkgs/pkgs/tools/misc/org-stats/version.patch
new file mode 100644
index 000000000000..8cf625fc396c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/org-stats/version.patch
@@ -0,0 +1,11 @@
+--- a/cmd/version.go
++++ b/cmd/version.go
+@@ -16,7 +16,7 @@ var versionCmd = &cobra.Command{
+ 			if sum == "" {
+ 				sum = "none"
+ 			}
+-			fmt.Printf("https://%s %s @ %s\n", info.Main.Path, info.Main.Version, sum)
++			fmt.Printf("https://%s %s @ %s\n", info.Main.Path, "@version@", sum)
+ 		} else {
+ 			fmt.Println("unknown")
+ 		}
diff --git a/nixpkgs/pkgs/tools/misc/os-prober/default.nix b/nixpkgs/pkgs/tools/misc/os-prober/default.nix
new file mode 100644
index 000000000000..5d15b7077385
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/os-prober/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchFromGitLab, makeWrapper, nixosTests,
+# optional dependencies, the command(s) they provide
+coreutils,  # mktemp
+grub2,      # grub-mount and grub-probe
+cryptsetup, # cryptsetup
+libuuid,    # blkid and blockdev
+systemd,    # udevadm
+ntfs3g,     # ntfs3g
+dmraid,     # dmraid
+lvm2        # lvs
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.81";
+  pname = "os-prober";
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "installer-team";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-3FXfGadIcmKp4qn6ZDcOSQHYsUNP2ObL1cJesNle+8A=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  installPhase = ''
+    # executables
+    install -Dt $out/bin os-prober linux-boot-prober
+    install -Dt $out/lib newns
+    install -Dt $out/share common.sh
+
+    # probes
+    case "${stdenv.hostPlatform.system}" in
+        i686*|x86_64*) ARCH=x86;;
+        powerpc*) ARCH=powerpc;;
+        arm*) ARCH=arm;;
+        *) ARCH=other;;
+    esac;
+    for probes in os-probes os-probes/mounted os-probes/init linux-boot-probes linux-boot-probes/mounted; do
+      install -Dt $out/lib/$probes $probes/common/*;
+      if [ -e "$probes/$ARCH" ]; then
+        mkdir -p $out/lib/$probes
+        cp -r $probes/$ARCH/* $out/lib/$probes;
+      fi;
+    done
+    if [ $ARCH = "x86" ]; then
+        cp -r os-probes/mounted/powerpc/20macosx $out/lib/os-probes/mounted;
+    fi;
+  '';
+  postFixup = ''
+    for file in $(find $out  -type f ! -name newns) ; do
+      substituteInPlace $file \
+        --replace /usr/share/os-prober/ $out/share/ \
+        --replace /usr/lib/os-probes/ $out/lib/os-probes/ \
+        --replace /usr/lib/linux-boot-probes/ $out/lib/linux-boot-probes/ \
+        --replace /usr/lib/os-prober/ $out/lib/
+    done;
+    for file in $out/bin/*; do
+      wrapProgram $file \
+        --suffix PATH : ${lib.makeBinPath [ grub2 systemd coreutils cryptsetup libuuid ntfs3g lvm2 dmraid ]} \
+        --run "[ -d /var/lib/os-prober ] || mkdir /var/lib/os-prober"
+    done;
+  '';
+
+  passthru.tests = {
+    os-prober = nixosTests.os-prober;
+  };
+  meta = with lib; {
+    description = "Utility to detect other OSs on a set of drives";
+    homepage = "http://packages.debian.org/source/sid/os-prober";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ symphorien ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/oscclip/default.nix b/nixpkgs/pkgs/tools/misc/oscclip/default.nix
new file mode 100644
index 000000000000..3020998d9392
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/oscclip/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "oscclip";
+  version = "0.4.1";
+
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "rumpelsepp";
+    repo = "oscclip";
+    rev = "v${version}";
+    sha256 = "sha256-WQvZn+SWamEqEXPutIZVDZTIczybtHUG9QsN8XxUeg8=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ poetry-core ];
+
+  meta = with lib; {
+    description = "A program that allows to copy/paste from a terminal using osc-52 control sequences";
+    longDescription = ''
+      oscclip provides two commands: osc-copy and osc-paste. These commands allow to interact with the clipboard through the terminal directly.
+      This means that they work through ssh sessions for example (given that the terminal supports osc-52 sequences).
+    '';
+    homepage = "https://github.com/rumpelsepp/oscclip";
+
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ rumpelsepp traxys ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix b/nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix
new file mode 100644
index 000000000000..774ccd946aa7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/osinfo-db-tools/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, pkg-config
+, meson
+, ninja
+, gettext
+, glib
+, libxml2
+, perl
+, python3
+, libxslt
+, libarchive
+, bzip2
+, xz
+, json-glib
+, libsoup_3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "osinfo-db-tools";
+  version = "1.11.0";
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/libosinfo/${pname}-${version}.tar.xz";
+    sha256 = "sha256-i6bTG7XvBwVuOIeeBwZxr7z+wOtBqH+ZUEULu4MbCh0=";
+  };
+
+  patches = [
+    # Fix build with libxml 2.12
+    (fetchpatch {
+      url = "https://gitlab.com/libosinfo/osinfo-db-tools/-/commit/019487cbc79925e49988789bf533c78dab7e1842.patch";
+      hash = "sha256-skuspjHDRilwym+hFInrSvIZ+rrzBOoI7WeFj2SrGkc=";
+    })
+    (fetchpatch {
+      url = "https://gitlab.com/libosinfo/osinfo-db-tools/-/commit/34378a4ac257f2f5fcf364786d1634a8c36b304f.patch";
+      hash = "sha256-I9vRRbnotqRi8+7q1eZLJwQLaT9J4G3h+3rKxlaCME4=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    perl
+    python3
+  ];
+
+  buildInputs = [
+    glib
+    json-glib
+    libxml2
+    libxslt
+    libarchive
+    bzip2
+    xz
+    libsoup_3
+  ];
+
+  meta = with lib; {
+    description = "Tools for managing the osinfo database";
+    homepage = "https://libosinfo.org/";
+    changelog = "https://gitlab.com/libosinfo/osinfo-db-tools/-/blob/v${version}/NEWS";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ostree-rs-ext/Cargo.lock b/nixpkgs/pkgs/tools/misc/ostree-rs-ext/Cargo.lock
new file mode 100644
index 000000000000..fb9855780fa5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree-rs-ext/Cargo.lock
@@ -0,0 +1,2303 @@
+# 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 = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ambient-authority"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base64"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5"
+
+[[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.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "camino"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2"
+
+[[package]]
+name = "cap-primitives"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42068f579028e856717d61423645c85d2d216dde8eff62c9b30140e725c79177"
+dependencies = [
+ "ambient-authority",
+ "fs-set-times",
+ "io-extras",
+ "io-lifetimes",
+ "ipnet",
+ "maybe-owned",
+ "rustix 0.37.19",
+ "windows-sys 0.48.0",
+ "winx",
+]
+
+[[package]]
+name = "cap-std"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "559ad6fab5fedcc9bd5877160e1433fcd481f8af615068d6ca49472b1201cc6c"
+dependencies = [
+ "cap-primitives",
+ "io-extras",
+ "io-lifetimes",
+ "rustix 0.37.19",
+]
+
+[[package]]
+name = "cap-std-ext"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8031eb6e1061d0bdabe0c14eb6c37f02e2ee3621976782881eb0f666ab4673ce"
+dependencies = [
+ "cap-tempfile",
+ "rustix 0.36.13",
+]
+
+[[package]]
+name = "cap-tempfile"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92372a5de78a858f20c22a8dbe3ea55e1cc2daeb82016a3150dab8cf51ea3235"
+dependencies = [
+ "cap-std",
+ "rand",
+ "rustix 0.37.19",
+ "uuid 1.3.3",
+]
+
+[[package]]
+name = "capctl"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbdc32a78afc325d71a48d13084f1c3ddf67cc5dc06c6e5439a8630b14612cad"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8790cf1286da485c72cf5fc7aeba308438800036ec67d89425924c4807268c9"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[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.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae6371b8bdc8b7d3959e9cf7b22d4435ef3e79e138688421ec654acf8c81b008"
+dependencies = [
+ "heck",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clap_mangen"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "105180c05a72388d5f5e4e4f6c79eecb92497bda749fa8f963a16647c5d5377f"
+dependencies = [
+ "clap",
+ "roff",
+]
+
+[[package]]
+name = "console"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "containers-image-proxy"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc8ef9cc4d183f3bfd3c232f304286b91cff5c9aa35665ea2e89499e1e0d021"
+dependencies = [
+ "anyhow",
+ "cap-std-ext",
+ "cap-tempfile",
+ "capctl",
+ "fn-error-context",
+ "futures-util",
+ "libc",
+ "nix 0.26.2",
+ "oci-spec",
+ "once_cell",
+ "semver",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3"
+dependencies = [
+ "derive_builder_macro",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder_macro"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68"
+dependencies = [
+ "derive_builder_core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.2.16",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "libz-sys",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "fn-error-context"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cd66269887534af4b0c3e3337404591daa8dc8b9b2b3db71f9523beb4bafb41"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "fs-set-times"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7833d0f115a013d51c55950a3b09d30e4b057be9961b709acb9b5b17a1108861"
+dependencies = [
+ "io-lifetimes",
+ "rustix 0.37.19",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-core",
+ "futures-macro",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getset"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e45727250e75cc04ff2846a66397da8ef2b3db8e40e0cef4df67950a07621eb9"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "gio"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a1c84b4534a290a29160ef5c6eff2a9c95833111472e824fc5cb78b513dd092"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9b693b8e39d042a95547fc258a7b07349b1f0b48f4b2fa3108ba3c51c0b5229"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.16.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddd4df61a866ed7259d6189b8bcb1464989a77f1d85d25d002279bbe9dd38b2f"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "gio-sys",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb1a9325847aa46f1e96ffea37611b9d51fc4827e67f79e7de502a297560a67b"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61a4f46316d06bfa33a7ac22df6f0524c8be58e3db2d9ca99ccb1f357b62a65"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3520bb9c07ae2a12c7f2fbb24d4efc11231c8146a86956413fb1a79bb760a0f1"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gvariant"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f7a982b6b38ff2380ea1b1b480cb7f5b51dac917aceff2e16af0c207781e13a"
+dependencies = [
+ "gvariant-macro",
+ "memchr",
+ "ref-cast",
+]
+
+[[package]]
+name = "gvariant-macro"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9915719ccd7435a28103eea8dba78bcf35a25d5637c70273b47dbb49c6d2eb6d"
+dependencies = [
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729"
+dependencies = [
+ "console",
+ "number_prefix",
+ "portable-atomic 0.3.20",
+ "unicode-width",
+]
+
+[[package]]
+name = "indoc"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-extras"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fde93d48f0d9277f977a333eca8313695ddd5301dc96f7e02aeddcb0dd99096f"
+dependencies = [
+ "io-lifetimes",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[package]]
+name = "js-sys"
+version = "0.3.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[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.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1"
+
+[[package]]
+name = "libsystemd"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8144587c71c16756b1055d3dcb0c75cb605a10ecd6523cc33702d5f90902bf6d"
+dependencies = [
+ "hmac",
+ "libc",
+ "log",
+ "nix 0.23.2",
+ "nom",
+ "once_cell",
+ "serde",
+ "sha2",
+ "thiserror",
+ "uuid 0.8.2",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matchers"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f099785f7595cc4b4553a174ce30dd7589ef93391ff414dbb67f62392b9e0ce1"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "maybe-owned"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "oci-spec"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98135224dd4faeb24c05a2fac911ed53ea6b09ecb09d7cada1cb79963ab2ee34"
+dependencies = [
+ "derive_builder",
+ "getset",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "olpc-cjson"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d637c9c15b639ccff597da8f4fa968300651ad2f1e968aefc3b4927a6fb2027a"
+dependencies = [
+ "serde",
+ "serde_json",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01b8574602df80f7b85fdfc5392fa884a4e3b3f4f35402c070ab34c3d3f78d56"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+
+[[package]]
+name = "ostree"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f9c3da362376d17ac2e2d5759fe544cdc7471b66e98c324be5efd2c7995672d"
+dependencies = [
+ "base64",
+ "bitflags",
+ "cap-std",
+ "gio",
+ "glib",
+ "hex",
+ "io-lifetimes",
+ "libc",
+ "once_cell",
+ "ostree-sys",
+ "thiserror",
+]
+
+[[package]]
+name = "ostree-ext"
+version = "0.10.6"
+dependencies = [
+ "anyhow",
+ "async-compression",
+ "bitflags",
+ "camino",
+ "cap-std-ext",
+ "cap-tempfile",
+ "chrono",
+ "clap",
+ "clap_mangen",
+ "containers-image-proxy",
+ "flate2",
+ "fn-error-context",
+ "futures-util",
+ "gvariant",
+ "hex",
+ "indicatif",
+ "indoc",
+ "io-lifetimes",
+ "libc",
+ "libsystemd",
+ "oci-spec",
+ "olpc-cjson",
+ "once_cell",
+ "openssl",
+ "ostree",
+ "ostree-ext",
+ "pin-project",
+ "quickcheck",
+ "regex",
+ "serde",
+ "serde_json",
+ "sh-inline",
+ "tar",
+ "tempfile",
+ "term_size",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "ostree-ext-cli"
+version = "0.1.4"
+dependencies = [
+ "anyhow",
+ "clap",
+ "libc",
+ "log",
+ "ostree-ext",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "ostree-sys"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe57dcbabc3b1ef80f97eb614453d90dc81a39c8f26eb540bd8e68bcae4d0e2f"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "portable-atomic"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e30165d31df606f5726b090ec7592c308a0eaf61721ff64c9a3018e344a8753e"
+dependencies = [
+ "portable-atomic 1.3.2",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc59d1bcc64fc5d021d67521f818db868368028108d37f0e98d74e33f68297b5"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4ec6d5fe0b140acb27c9a0444118cf55bfbb4e0b259739429abb4521dd67c16"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quickcheck"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+dependencies = [
+ "env_logger",
+ "log",
+ "rand",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[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.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "regex"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af83e617f331cc6ae2da5443c602dfa5af81e517212d9d611a5b3ba1777b5370"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.7.1",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5996294f19bd3aae0453a862ad728f60e6600695733dd5df01da90c54363a3c"
+
+[[package]]
+name = "roff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316"
+
+[[package]]
+name = "rustix"
+version = "0.36.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a38f9520be93aba504e8ca974197f46158de5dcaa9fa04b57c57cd6a679d658"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "itoa",
+ "libc",
+ "linux-raw-sys 0.1.4",
+ "once_cell",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "itoa",
+ "libc",
+ "linux-raw-sys 0.3.7",
+ "once_cell",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "serde"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.163"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sh-inline"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea42106b6078e775caeda9d0c8dbd022526f9f9369fe8faa71eb736d36f84360"
+dependencies = [
+ "cap-std-ext",
+ "shlex",
+ "tempfile",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shlex"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6f671d4b5ffdb8eadec19c0ae67fe2639df8684bd7bc4b83d986b8db549cf01"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5fa6fb9ee296c0dc2df41a656ca7948546d061958115ddb0bcaae43ad0d17d2"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml",
+ "version-compare",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd1ba337640d60c3e96bc6f0638a939b9c9a7f2c316a1598c279828b3d1dc8c5"
+
+[[package]]
+name = "tempfile"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix 0.37.19",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "term_size"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0aa32867d44e6f2ce3385e89dceb990188b8bb0fb25b0cf576647a6f98ac5105"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+dependencies = [
+ "serde",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71"
+dependencies = [
+ "ansi_term",
+ "chrono",
+ "lazy_static",
+ "matchers",
+ "regex",
+ "serde",
+ "serde_json",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-serde",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "uuid"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "uuid"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.16",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93"
+
+[[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 = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winx"
+version = "0.35.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c52a121f0fbf9320d5f2a9a5d82f6cb7557eda5e8b47fc3e7f359ec866ae960"
+dependencies = [
+ "bitflags",
+ "io-lifetimes",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
diff --git a/nixpkgs/pkgs/tools/misc/ostree-rs-ext/default.nix b/nixpkgs/pkgs/tools/misc/ostree-rs-ext/default.nix
new file mode 100644
index 000000000000..d7b09b65f7ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree-rs-ext/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, makeWrapper
+, glib
+, openssl
+, zlib
+, ostree
+, stdenv
+, darwin
+, util-linux
+, skopeo
+, gnutar
+, ima-evm-utils
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ostree-rs-ext";
+  version = "0.10.6";
+
+  src = fetchFromGitHub {
+    owner = "ostreedev";
+    repo = "ostree-rs-ext";
+    rev = "ostree-ext-v${version}";
+    hash = "sha256-kk/icUevzKMpAQ6IoruUxuKwTxXHlKLrr63Hch1w7po=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  postPatch = ''
+    ln -s ${./Cargo.lock} Cargo.lock
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [
+    glib
+    openssl
+    zlib
+    ostree
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  checkFlags = [
+    # these tests expects /var/tmp to be available
+    "--skip=test_cli_fns"
+    "--skip=test_container_chunked"
+    "--skip=test_container_import_export_v1"
+    "--skip=test_container_var_content"
+    "--skip=test_container_write_derive"
+    "--skip=test_container_write_derive_sysroot_hardlink"
+    "--skip=test_diff"
+    "--skip=test_tar_export_reproducible"
+    "--skip=test_tar_export_structure"
+    "--skip=test_tar_import_empty"
+    "--skip=test_tar_import_export"
+    "--skip=test_tar_import_signed"
+    "--skip=test_tar_write"
+    "--skip=test_tar_write_tar_layer"
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/${meta.mainProgram}" --prefix PATH : ${lib.makeBinPath [ util-linux skopeo gnutar ostree ima-evm-utils ]}
+  '';
+
+  meta = with lib; {
+    description = "Rust library with higher level APIs on top of the core ostree API";
+    homepage = "https://github.com/ostreedev/ostree-rs-ext";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "ostree-ext-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ostree/default.nix b/nixpkgs/pkgs/tools/misc/ostree/default.nix
new file mode 100644
index 000000000000..caccfbec9b69
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ostree/default.nix
@@ -0,0 +1,154 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchpatch
+, substituteAll
+, pkg-config
+, gtk-doc
+, gobject-introspection
+, gjs
+, nixosTests
+, curl
+, glib
+, systemd
+, xz
+, e2fsprogs
+, libsoup
+, glib-networking
+, wrapGAppsNoGuiHook
+, gpgme
+, which
+, makeWrapper
+, autoconf
+, automake
+, libtool
+, fuse3
+, util-linuxMinimal
+, libselinux
+, libsodium
+, libarchive
+, libcap
+, bzip2
+, bison
+, libxslt
+, docbook-xsl-nons
+, docbook_xml_dtd_42
+, openssl
+, python3
+}:
+
+let
+  testPython = python3.withPackages (p: with p; [
+    pyyaml
+  ]);
+in stdenv.mkDerivation rec {
+  pname = "ostree";
+  version = "2024.4";
+
+  outputs = [ "out" "dev" "man" "installedTests" ];
+
+  src = fetchurl {
+    url = "https://github.com/ostreedev/ostree/releases/download/v${version}/libostree-${version}.tar.xz";
+    sha256 = "sha256-Y8kZCCEzOsc3Pg2SPkwnZrJevc/fTvtEy1koxlidn8s=";
+  };
+
+  patches = lib.optionals stdenv.hostPlatform.isMusl [
+    # > I guess my inclination here is to recommend that musl users
+    # > carry a downstream patch to revert the commits in #3175 until
+    # > such time as they can update to the new musl.
+    # https://github.com/ostreedev/ostree/issues/3200#issuecomment-1974819192
+    (fetchpatch {
+      name = "revert-statx.diff";
+      url = "https://github.com/ostreedev/ostree/commit/f46cc0cd85b564e40e03c7438a41c8e57f6b836c.diff";
+      excludes = [ "ci/*" ];
+      revert = true;
+      hash = "sha256-LsXbRYh4hfjNdt1S384IPlSvtC5f2rgSTZEkIIBkT0g=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    libtool
+    pkg-config
+    gtk-doc
+    gobject-introspection
+    which
+    makeWrapper
+    bison
+    libxslt
+    docbook-xsl-nons
+    docbook_xml_dtd_42
+    wrapGAppsNoGuiHook
+  ];
+
+  buildInputs = [
+    curl
+    glib
+    systemd
+    e2fsprogs
+    libsoup
+    glib-networking
+    gpgme
+    fuse3
+    libselinux
+    libsodium
+    libcap
+    libarchive
+    bzip2
+    xz
+    util-linuxMinimal # for libmount
+
+    # for installed tests
+    testPython
+    gjs
+  ];
+
+  enableParallelBuilding = true;
+
+  configureFlags = [
+    "--with-curl"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+    "--with-systemdsystemgeneratordir=${placeholder "out"}/lib/systemd/system-generators"
+    "--enable-installed-tests"
+    "--with-ed25519-libsodium"
+  ];
+
+  makeFlags = [
+    "installed_testdir=${placeholder "installedTests"}/libexec/installed-tests/libostree"
+    "installed_test_metadir=${placeholder "installedTests"}/share/installed-tests/libostree"
+    # Setting this flag was required as workaround for a clang bug, but seems not relevant anymore.
+    # https://github.com/ostreedev/ostree/commit/fd8795f3874d623db7a82bec56904648fe2c1eb7
+    # See also Makefile-libostree.am
+    "INTROSPECTION_SCANNER_ENV="
+  ];
+
+  preConfigure = ''
+    env NOCONFIGURE=1 ./autogen.sh
+  '';
+
+  postFixup = let
+    typelibPath = lib.makeSearchPath "/lib/girepository-1.0" [
+      (placeholder "out")
+      gobject-introspection
+    ];
+  in ''
+    for test in $installedTests/libexec/installed-tests/libostree/*.js; do
+      wrapProgram "$test" --prefix GI_TYPELIB_PATH : "${typelibPath}"
+    done
+  '';
+
+  passthru = {
+    tests = {
+      installedTests = nixosTests.installed-tests.ostree;
+    };
+  };
+
+  meta = with lib; {
+    description = "Git for operating system binaries";
+    homepage = "https://ostreedev.github.io/ostree/";
+    license = licenses.lgpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ copumpkin ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/otel-cli/default.nix b/nixpkgs/pkgs/tools/misc/otel-cli/default.nix
new file mode 100644
index 000000000000..65f97c75f7d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/otel-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub, getent, coreutils, nix-update-script, stdenv }:
+
+buildGoModule rec {
+  pname = "otel-cli";
+  version = "0.4.5";
+
+  src = fetchFromGitHub {
+    owner = "equinix-labs";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-JYi9CbP4mUhX0zNjhi6QlBzLKcj2zdPwlyBSIYKp6vk=";
+  };
+
+  vendorHash = "sha256-fWQz7ZrU8gulhpOHSN8Prn4EMC0KXy942FZD/PMsLxc=";
+
+  preCheck = ''
+    ln -s $GOPATH/bin/otel-cli .
+  '' + lib.optionalString (!stdenv.isDarwin) ''
+    substituteInPlace main_test.go \
+      --replace-fail 'const minimumPath = `/bin:/usr/bin`' 'const minimumPath = `${lib.makeBinPath [ getent coreutils ]}`'
+  '';
+
+  patches = [ ./patches/bin-echo-patch.patch ];
+
+  passthru.updateScript = nix-update-script {};
+
+  meta = with lib; {
+    homepage = "https://github.com/equinix-labs/otel-cli";
+    description = "A command-line tool for sending OpenTelemetry traces";
+    changelog = "https://github.com/equinix-labs/otel-cli/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with lib.maintainers; [ emattiza urandom ];
+    mainProgram = "otel-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/otel-cli/patches/bin-echo-patch.patch b/nixpkgs/pkgs/tools/misc/otel-cli/patches/bin-echo-patch.patch
new file mode 100644
index 000000000000..236672860585
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/otel-cli/patches/bin-echo-patch.patch
@@ -0,0 +1,21 @@
+diff --git a/data_for_test.go b/data_for_test.go
+index c0b8980..691e270 100644
+--- a/data_for_test.go
++++ b/data_for_test.go
+@@ -555,14 +555,14 @@ var suites = []FixtureSuite{
+ 					"--endpoint", "{{endpoint}}",
+ 					"--verbose", "--fail",
+ 					"--attrs", "zy=ab", // ensure CLI args still propagate
+-					"--", "/bin/echo", "a", "z",
++					"--", "echo", "a", "z",
+ 				},
+ 			},
+ 			Expect: Results{
+ 				SpanCount: 1,
+ 				CliOutput: "a z\n",
+ 				SpanData: map[string]string{
+-					"attributes": "/^process.command=/bin/echo,process.command_args=/bin/echo,a,z,process.owner=\\w+,process.parent_pid=\\d+,process.pid=\\d+,zy=ab/",
++					"attributes": "/^process.command=echo,process.command_args=echo,a,z,process.owner=\\w+,process.parent_pid=\\d+,process.pid=\\d+,zy=ab/",
+ 				},
+ 			},
+ 		},
diff --git a/nixpkgs/pkgs/tools/misc/otfcc/default.nix b/nixpkgs/pkgs/tools/misc/otfcc/default.nix
new file mode 100644
index 000000000000..aa0d86253d77
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/otfcc/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, premake5 }:
+
+stdenv.mkDerivation rec {
+  pname = "otfcc";
+  version = "0.10.4";
+
+  src = fetchFromGitHub {
+    owner = "caryll";
+    repo = "otfcc";
+    rev = "v${version}";
+    sha256 = "1nrkzpqklfpqsccji4ans40rj88l80cv7dpxwx4g577xrvk13a0f";
+  };
+
+  nativeBuildInputs = [ premake5 ];
+
+  patches = [
+    ./fix-aarch64.patch
+    ./move-makefiles.patch
+  ];
+
+  buildFlags = lib.optionals stdenv.isAarch64 [ "config=release_arm" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/release-*/otfcc* $out/bin/
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Optimized OpenType builder and inspector";
+    homepage = "https://github.com/caryll/otfcc";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ttuegel ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/otfcc/fix-aarch64.patch b/nixpkgs/pkgs/tools/misc/otfcc/fix-aarch64.patch
new file mode 100644
index 000000000000..80fcb625658f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/otfcc/fix-aarch64.patch
@@ -0,0 +1,22 @@
+diff --git a/premake5.lua b/premake5.lua
+index 997fd79..54a20a0 100644
+--- a/premake5.lua
++++ b/premake5.lua
+@@ -49,7 +49,7 @@ end
+ workspace "otfcc"
+ 	configurations { "release", "debug" }
+ 	
+-	platforms { "x64", "x86" }
++	platforms { "x64", "x86", "arm" }
+ 	filter "action:xcode4"
+ 		platforms { "x64" }
+ 	filter {}
+@@ -67,6 +67,8 @@ workspace "otfcc"
+ 		architecture "x86"
+ 	filter "platforms:x64"
+ 		architecture "x64"
++	filter "platforms:arm"
++		architecture "arm"
+ 	filter {}
+ 	
+ 	filter "action:vs2017"
diff --git a/nixpkgs/pkgs/tools/misc/otfcc/move-makefiles.patch b/nixpkgs/pkgs/tools/misc/otfcc/move-makefiles.patch
new file mode 100644
index 000000000000..961c47b3b45a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/otfcc/move-makefiles.patch
@@ -0,0 +1,13 @@
+diff --git a/premake5.lua b/premake5.lua
+index 997fd79..54a20a0 100644
+--- a/premake5.lua
++++ b/premake5.lua
+@@ -88,7 +90,7 @@ workspace "otfcc"
+ 		flags { "StaticRuntime" }
+ 		includedirs { "dep/polyfill-msvc" }
+ 	filter "action:gmake"
+-		location "build/gmake"
++		location "."
+ 	filter "action:xcode4"
+ 		location "build/xcode"
+ 	filter {}
diff --git a/nixpkgs/pkgs/tools/misc/ovh-ttyrec/default.nix b/nixpkgs/pkgs/tools/misc/ovh-ttyrec/default.nix
new file mode 100644
index 000000000000..550df6531ced
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ovh-ttyrec/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, zstd }:
+
+stdenv.mkDerivation rec {
+  pname = "ovh-ttyrec";
+  version = "1.1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "ovh";
+    repo = "ovh-ttyrec";
+    rev = "v${version}";
+    sha256 = "sha256-VTF9WLwAIWWn+W0sLQaoFBFro+pSXKwcTO6q6MW6JD8=";
+  };
+
+  nativeBuildInputs = [ zstd ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,man}
+    cp ttytime ttyplay ttyrec $out/bin
+    cp docs/*.1 $out/man
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ovh/ovh-ttyrec/";
+    description = "Terminal interaction recorder and player";
+    license = licenses.bsd3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ chaduffy zimbatm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/owofetch/default.nix b/nixpkgs/pkgs/tools/misc/owofetch/default.nix
new file mode 100644
index 000000000000..b623721ec9b2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/owofetch/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenvNoCC
+, rustPlatform
+, fetchFromGitHub
+, Foundation
+, DiskArbitration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "owofetch";
+
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "netthier";
+    repo = "owofetch-rs";
+    rev = "v${version}";
+    sha256 = "sha256-I8mzOUvm72KLLBumpgn9gNyx9FKvUrB4ze1iM1+OA18=";
+  };
+
+  cargoSha256 = "sha256-rfN4QERs1H1G7ZZim//78vlxbYfU4Cx7SYYUz/QLKeU=";
+
+  buildInputs = lib.optionals stdenvNoCC.isDarwin [
+    Foundation
+    DiskArbitration
+  ];
+
+  meta = with lib; {
+    description = "Alternative to *fetch, uwuifies all stats";
+    homepage = "https://github.com/netthier/owofetch-rs";
+    license = licenses.gpl3Only;
+    platforms = platforms.x86_64;
+    maintainers = with maintainers; [ nullishamy ];
+    mainProgram = "owofetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/page/default.nix b/nixpkgs/pkgs/tools/misc/page/default.nix
new file mode 100644
index 000000000000..889baff28b25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/page/default.nix
@@ -0,0 +1,40 @@
+{ lib, rustPlatform, fetchFromGitHub, fetchpatch, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "page";
+  version = "4.6.3";
+
+  src = fetchFromGitHub {
+    owner = "I60R";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-uNdtgx9/9+KOfQvHiKNrT8NFWtR2tfJuI2bMwywBC/4=";
+  };
+
+  cargoHash = "sha256-ctYQMBAdSUfEek2vcCa3gnI9N6ZG9b+VvtAzT20jlXY=";
+
+  cargoPatches = [
+    # Cargo.lock is outdated.
+    # https://github.com/I60R/page/pull/45.
+    (fetchpatch {
+      url = "https://github.com/I60R/page/commit/83f936b64620ba74043c1db31207b4366c0f7e3d.patch";
+      hash = "sha256-qA5oP4K/6eG0A+syVNb1izl+bnYll5V6sWM3LVFTb4o=";
+    })
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+  postInstall = ''
+    completions_dir=$(find "target" -name "assets" -type d -printf "%T+\t%p\n" | sort | awk 'NR==1{print $2}')
+    installShellCompletion --bash $completions_dir/page.bash
+    installShellCompletion --fish $completions_dir/page.fish
+    installShellCompletion --zsh $completions_dir/_page
+  '';
+
+  meta = with lib; {
+    description = "Use neovim as pager";
+    homepage = "https://github.com/I60R/page";
+    license = licenses.mit;
+    mainProgram = "page";
+    maintainers = [ maintainers.s1341 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pal/default.nix b/nixpkgs/pkgs/tools/misc/pal/default.nix
new file mode 100644
index 000000000000..5456ffdf061c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pal/default.nix
@@ -0,0 +1,30 @@
+{lib, stdenv, fetchurl, glib, gettext, readline, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "pal";
+  version = "0.4.3";
+  src = fetchurl {
+    url = "mirror://sourceforge/palcal/pal-${version}.tgz";
+    sha256 = "072mahxvd7lcvrayl32y589w4v3vh7bmlcnhiksjylknpsvhqiyf";
+  };
+
+  patchPhase = ''
+    sed -i -e 's/-o root//' -e 's,ESTDIR}/etc,ESTDIR}'$out/etc, src/Makefile
+    sed -i -e 's,/etc/pal\.conf,'$out/etc/pal.conf, src/input.c
+  '';
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib gettext readline ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = {
+    homepage = "https://palcal.sourceforge.net/";
+    description = "Command-line calendar program that can keep track of events";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-acro/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-acro/default.nix
new file mode 100644
index 000000000000..36bd518f5b2b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-acro/default.nix
@@ -0,0 +1,64 @@
+{ buildPythonApplication
+, fetchPypi
+, pandocfilters
+, panflute
+, lib
+, pandoc
+, pandoc-acro
+, texliveTeTeX
+, runCommand
+}:
+
+let
+  pname = "pandoc-acro";
+  version = "0.10.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-JMfSQXX+BCGdFQYPFB+r08WRnhT3aXfnBNINROxCUA0=";
+  };
+in
+buildPythonApplication {
+  inherit pname version src;
+
+  propagatedBuildInputs = [
+    pandocfilters
+    panflute
+  ];
+
+  # Something in the tests does not typecheck, but the tool works well.
+  doCheck = false;
+
+  passthru.tests.example-doc =
+    let
+        env = {
+          nativeBuildInputs = [
+            pandoc
+            pandoc-acro
+            (texliveTeTeX.withPackages (ps: with ps; [ acro translations ]))
+          ];
+        };
+      in
+      runCommand "pandoc-acro-example-docs" env ''
+        set -euo pipefail
+        exampleFile="${pname}-${version}/tests/example.md"
+        metadataFile="${pname}-${version}/tests/metadata.yaml"
+        tar --extract "--file=${src}" "$exampleFile" "$metadataFile"
+        mkdir $out
+
+        pandoc -F pandoc-acro "$exampleFile" "--metadata-file=$metadataFile" \
+          -T pdf -o $out/example.pdf
+        pandoc -F pandoc-acro  "$exampleFile" "--metadata-file=$metadataFile" \
+          -T txt -o $out/example.txt
+
+        ! grep -q "\+afaik" $out/example.txt
+      '';
+
+  meta = with lib; {
+    homepage = "https://pypi.org/project/pandoc-acro/";
+    description = "Pandoc filter which manages acronyms in Pandoc flavored Markdown sources";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ tfc ];
+    mainProgram = "pandoc-acro";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-drawio-filter/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-drawio-filter/default.nix
new file mode 100644
index 000000000000..9a5ff8949ba6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-drawio-filter/default.nix
@@ -0,0 +1,57 @@
+{ buildPythonApplication
+, drawio-headless
+, fetchFromGitHub
+, lib
+, pandoc
+, pandocfilters
+, runCommand
+, texliveTeTeX
+}:
+
+let
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "tfc";
+    repo = "pandoc-drawio-filter";
+    rev = version;
+    sha256 = "sha256-2XJSAfxqEmmamWIAM3vZqi0mZjUUugmR3zWw8Imjadk=";
+  };
+
+  pandoc-drawio-filter = buildPythonApplication {
+    pname = "pandoc-drawio-filter";
+
+    inherit src version;
+
+    propagatedBuildInputs = [
+      drawio-headless
+      pandocfilters
+    ];
+
+    passthru.tests.example-doc =
+      let
+        env = {
+          nativeBuildInputs = [
+            pandoc
+            pandoc-drawio-filter
+            texliveTeTeX
+          ];
+        };
+      in
+      runCommand "$pandoc-drawio-filter-example-doc.pdf" env ''
+        cp -r ${src}/example/* .
+        pandoc -F pandoc-drawio example.md -T pdf -o $out
+      '';
+
+    meta = with lib; {
+      homepage = "https://github.com/tfc/pandoc-drawio-filter";
+      description = "Pandoc filter which converts draw.io diagrams to PDF";
+      license = licenses.mit;
+      maintainers = with maintainers; [ tfc ];
+      mainProgram = "pandoc-drawio";
+    };
+  };
+
+in
+
+pandoc-drawio-filter
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-eqnos/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-eqnos/default.nix
new file mode 100644
index 000000000000..5ee4e9587d61
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-eqnos/default.nix
@@ -0,0 +1,36 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, pandoc-xnos
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-eqnos";
+  version = "2.5.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "tomduck";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-7GQdfGHhtQs6LZK+ZyMmcPSkoFfBWmATTMejMiFcS7Y=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [ pandoc-xnos ];
+
+  # Different pandoc executables are not available
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone pandoc filter from the pandoc-xnos suite for numbering equations and equation references";
+    homepage = "https://github.com/tomduck/pandoc-eqnos";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ppenguin ];
+    mainProgram = "pandoc-eqnos";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-fignos/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-fignos/default.nix
new file mode 100644
index 000000000000..eb8d0154ffce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-fignos/default.nix
@@ -0,0 +1,36 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, pandoc-xnos
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-fignos";
+  version = "2.4.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "tomduck";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-eDwAW0nLB4YqrWT3Ajt9bmX1A43wl+tOPm2St5VpCLk=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [ pandoc-xnos ];
+
+  # Different pandoc executables are not available
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone pandoc filter from the pandoc-xnos suite for numbering figures and figure references";
+    homepage = "https://github.com/tomduck/pandoc-fignos";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ppenguin ];
+    mainProgram = "pandoc-fignos";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix
new file mode 100644
index 000000000000..ae94c3115366
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-imagine/default.nix
@@ -0,0 +1,29 @@
+{ fetchFromGitHub, buildPythonApplication, lib, pandocfilters, six }:
+
+buildPythonApplication rec {
+  pname = "pandoc-imagine";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    repo = "imagine";
+    owner = "hertogp";
+    rev = version;
+    sha256 = "1wpnckc7qyrf6ga5xhr6gv38k1anpy9nx888n7n3rh6nixzcz2dw";
+  };
+
+  propagatedBuildInputs = [ pandocfilters six ];
+
+  # No tests in archive
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = src.meta.homepage;
+    description = ''
+      A pandoc filter that will turn code blocks tagged with certain classes
+      into images or ASCII art
+    '';
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ synthetica ];
+    mainProgram = "pandoc-imagine";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-include/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-include/default.nix
new file mode 100644
index 000000000000..eafa1221a803
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-include/default.nix
@@ -0,0 +1,37 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, natsort
+, panflute
+, lxml
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-include";
+  version = "1.3.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "DCsunset";
+    repo = "pandoc-include";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-8TIGw6p9c61oSH3ld14rmeG6wZY9u9JHALImxXM3c3Y=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [ natsort panflute lxml ];
+
+  pythonImportsCheck = [ "pandoc_include.main" ];
+
+  meta = with lib; {
+    description = "Pandoc filter to allow file and header includes";
+    homepage = "https://github.com/DCsunset/pandoc-include";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ppenguin DCsunset ];
+    mainProgram = "pandoc-include";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-katex/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-katex/default.nix
new file mode 100644
index 000000000000..d2b9f03e51a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-katex/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pandoc-katex";
+  version = "0.1.11";
+
+  src = fetchFromGitHub {
+    owner = "xu-cheng";
+    repo = pname;
+    rev = version;
+    hash = "sha256-2a3WJTNIMqWnTlHB+2U/6ifuoecbOlTP6e7YjD/UvPM=";
+  };
+
+  cargoHash = "sha256-Qf+QYOIBmSgax7p5K32SkaDT0MoKUY4TkxLbf/ZbM+U=";
+
+  meta = with lib; {
+    description = "Pandoc filter to render math equations using KaTeX";
+    homepage = "https://github.com/xu-cheng/pandoc-katex";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ minijackson pacien ];
+    mainProgram = "pandoc-katex";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-lua-filters/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-lua-filters/default.nix
new file mode 100644
index 000000000000..1323da5104ba
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-lua-filters/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pandoc-lua-filters";
+  version = "2021-11-05";
+
+  src = fetchFromGitHub {
+    owner = "pandoc";
+    repo = "lua-filters";
+    rev = "v${version}";
+    sha256 = "sha256-Y962kdwg2bS3ZoPfsktv4Fy34HUTRhIIuSxPi5ODwWg=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dt $out/share/pandoc/filters **/*.lua
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A collection of lua filters for pandoc";
+    homepage = "https://github.com/pandoc/lua-filters";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-plantuml-filter/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-plantuml-filter/default.nix
new file mode 100644
index 000000000000..d8c1bb2ea8a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-plantuml-filter/default.nix
@@ -0,0 +1,27 @@
+{ buildPythonApplication
+, fetchPypi
+, pandocfilters
+, lib
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-plantuml-filter";
+  version = "0.1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "08673mfwxsw6s52mgglbdz7ybb68svqyr3s9w97d7rifbwvvc9ia";
+  };
+
+  propagatedBuildInputs = [
+    pandocfilters
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/timofurrer/pandoc-plantuml-filter";
+    description = "Pandoc filter which converts PlantUML code blocks to PlantUML images";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cmcdragonkai ];
+    mainProgram = "pandoc-plantuml";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-secnos/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-secnos/default.nix
new file mode 100644
index 000000000000..0880214e218e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-secnos/default.nix
@@ -0,0 +1,40 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, pandoc-xnos
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-secnos";
+  version = "2.2.2";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "tomduck";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-J9KLZvioYM3Pl2UXjrEgd4PuLTwCLYy9SsJIzgw5/jU=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [ pandoc-xnos ];
+
+  patches = [
+    ./patch/fix-manifest.patch
+  ];
+
+  # Different pandoc executables are not available
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone pandoc filter from the pandoc-xnos suite for numbering sections and section references";
+    homepage = "https://github.com/tomduck/pandoc-secnos";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ppenguin ];
+    mainProgram = "pandoc-secnos";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-secnos/patch/fix-manifest.patch b/nixpkgs/pkgs/tools/misc/pandoc-secnos/patch/fix-manifest.patch
new file mode 100644
index 000000000000..782e5b5e07c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-secnos/patch/fix-manifest.patch
@@ -0,0 +1,39 @@
+From 165ee1f4c1208636254392335d34934dc50d273e Mon Sep 17 00:00:00 2001
+From: ppenguin <hieronymusv@gmail.com>
+Date: Tue, 15 Mar 2022 23:15:07 +0100
+Subject: [PATCH] fix setup.py to work in nixpkgs
+
+---
+ setup.py | 13 ++-----------
+ 1 file changed, 2 insertions(+), 11 deletions(-)
+
+diff --git a/setup.py b/setup.py
+index d705846..d7345a2 100644
+--- a/setup.py
++++ b/setup.py
+@@ -42,10 +42,10 @@
+ 
+     author='Thomas J. Duck',
+     author_email='tomduck@tomduck.ca',
+-    description='Equation number filter for pandoc',
++    description='Section number filter for pandoc',
+     long_description=DESCRIPTION,
+     license='GPL',
+-    keywords='pandoc equation numbers filter',
++    keywords='pandoc section numbers filter',
+     url='https://github.com/tomduck/pandoc-secnos',
+     download_url='https://github.com/tomduck/pandoc-secnos/tarball/' + \
+                  __version__,
+@@ -63,12 +63,3 @@
+         'Programming Language :: Python'
+         ]
+ )
+-
+-# Check that the pandoc-secnos script is on the PATH
+-if not shutil.which('pandoc-secnos'):
+-    msg = """
+-          ERROR: `pandoc-secnos` script not found. This will need to 
+-          be corrected.  If you need help, please file an Issue at
+-          https://github.com/tomduck/pandoc-secnos/issues.\n"""
+-    print(textwrap.dedent(msg))
+-    sys.exit(-1)
diff --git a/nixpkgs/pkgs/tools/misc/pandoc-tablenos/default.nix b/nixpkgs/pkgs/tools/misc/pandoc-tablenos/default.nix
new file mode 100644
index 000000000000..6ee5ef65861e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pandoc-tablenos/default.nix
@@ -0,0 +1,36 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, pandoc-xnos
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "pandoc-tablenos";
+  version = "2.3.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "tomduck";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-FwzsRziY3PoySo9hIFuLw6tOO9oQij6oQEyoY8HgnII=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  propagatedBuildInputs = [ pandoc-xnos ];
+
+  # Different pandoc executables are not available
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Standalone pandoc filter from the pandoc-xnos suite for numbering tables and table references";
+    homepage = "https://github.com/tomduck/pandoc-tablenos";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ppenguin ];
+    mainProgram = "pandoc-tablenos";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/panicparse/default.nix b/nixpkgs/pkgs/tools/misc/panicparse/default.nix
new file mode 100644
index 000000000000..6cf97eca5a97
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/panicparse/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "panicparse";
+  version = "2.3.1";
+
+  src = fetchFromGitHub {
+    owner = "maruel";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-KjWUubrHPJUJWvoa13EGEwTd5uNC0nrHAF8hzdnxEmY=";
+  };
+
+  vendorHash = "sha256-udkh/6Bu+7djxugMIuVsZvZ3JN2JooihsmcS2wJT0Wo=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Crash your app in style (Golang)";
+    homepage = "https://github.com/maruel/panicparse";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    mainProgram = "panicparse";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/panoply/default.nix b/nixpkgs/pkgs/tools/misc/panoply/default.nix
new file mode 100644
index 000000000000..b79d6b7d8e35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/panoply/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenvNoCC, fetchurl, makeWrapper, jre } :
+
+stdenvNoCC.mkDerivation rec {
+  pname = "panoply";
+  version = "5.3.4";
+
+  src = fetchurl {
+    url = "https://www.giss.nasa.gov/tools/panoply/download/PanoplyJ-${version}.tgz";
+    sha256 = "sha256-v7ieTtm2W8Sc/zhQ7QPh8rkMUgaqgfGYYXc6Ly+9iMg=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    jarbase=$out/share/panoply
+    mkdir -p $out/bin $jarbase/jars
+
+    sed -i "s:^SCRIPTDIR.*:SCRIPTDIR=$jarbase:" panoply.sh
+
+    cp panoply.sh $out/bin/panoply
+    cp -r jars $jarbase
+
+    wrapProgram "$out/bin/panoply" --prefix PATH : "${jre}/bin"
+
+    runHook postHook
+  '';
+
+  meta = with lib; {
+    description = "netCDF, HDF and GRIB Data Viewer";
+    homepage = "https://www.giss.nasa.gov/tools/panoply";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.markuskowa ];
+    license = licenses.unfree;  # Package does not state a license
+    mainProgram = "panoply";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/paperlike-go/default.nix b/nixpkgs/pkgs/tools/misc/paperlike-go/default.nix
new file mode 100644
index 000000000000..59d477b62fe2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/paperlike-go/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule {
+  pname = "paperlike-go";
+  version = "unstable-2021-03-26";
+
+  src = fetchFromGitHub {
+    owner = "leoluk";
+    repo = "paperlike-go";
+    rev = "bd658d88ea9a3b21e1b301b96253abab7cf56d79";
+    hash = "sha256-UuFzBkhIKStVitMYf0Re4dSyYqwLGocRyMPewosVFsA=";
+  };
+
+  vendorHash = "sha256-OfTeJd3VS/WoUpyPY7XfQZWLrvS+vqPPgeL2Hd0HtgI=";
+
+  subPackages = [ "cmd/paperlike-cli" ];
+
+  meta = {
+    description = "A Linux Go library and CLI utility to control a Dasung Paperlike display via I2C DDC";
+    homepage = "https://github.com/leoluk/paperlike-go";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.adisbladis ];
+    platforms = lib.platforms.linux;
+    mainProgram = "paperlike-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/paps/default.nix b/nixpkgs/pkgs/tools/misc/paps/default.nix
new file mode 100644
index 000000000000..ab9c9e433c68
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/paps/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub
+, autoconf, automake, pkg-config, intltool, pango }:
+
+stdenv.mkDerivation rec {
+  pname = "paps";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "dov";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "129wpm2ayxs6qfh2761d4x9c034ivb2bcmmcnl56qs4448qb9495";
+  };
+
+  nativeBuildInputs = [ autoconf automake pkg-config intltool ];
+  buildInputs = [ pango ];
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "Pango to PostScript converter";
+    homepage = "https://github.com/dov/paps";
+    license = licenses.lgpl2;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    mainProgram = "paps";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parallel/default.nix b/nixpkgs/pkgs/tools/misc/parallel/default.nix
new file mode 100644
index 000000000000..7dff66bc1003
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parallel/default.nix
@@ -0,0 +1,58 @@
+{ fetchurl, lib, stdenv, perl, makeWrapper, procps, coreutils, gawk, buildPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "parallel";
+  version = "20240322";
+
+  src = fetchurl {
+    url = "mirror://gnu/parallel/${pname}-${version}.tar.bz2";
+    hash = "sha256-CxcCmiA9q/e6bKflLC05EP/0ayl5R24SqREJILeeapU=";
+  };
+
+  outputs = [ "out" "man" "doc" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perl procps ];
+
+  postPatch = lib.optionalString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    substituteInPlace Makefile.in \
+      --replace '$(DESTDIR)$(bindir)/parallel --shell-completion' '${lib.getExe buildPackages.parallel} --shell-completion'
+  '';
+
+  preInstall = ''
+    patchShebangs ./src/parallel
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/parallel \
+      --prefix PATH : "${lib.makeBinPath [ procps perl coreutils gawk ]}"
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Shell tool for executing jobs in parallel";
+    longDescription =
+      '' GNU Parallel is a shell tool for executing jobs in parallel.  A job
+         is typically a single command or a small script that has to be run
+         for each of the lines in the input.  The typical input is a list of
+         files, a list of hosts, a list of users, or a list of tables.
+
+         If you use xargs today you will find GNU Parallel very easy to use.
+         If you write loops in shell, you will find GNU Parallel may be able
+         to replace most of the loops and make them run faster by running
+         jobs in parallel.  If you use ppss or pexec you will find GNU
+         Parallel will often make the command easier to read.
+
+         GNU Parallel makes sure output from the commands is the same output
+         as you would get had you run the commands sequentially.  This makes
+         it possible to use output from GNU Parallel as input for other
+         programs.
+      '';
+    homepage = "https://www.gnu.org/software/parallel/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pSub vrthra tomberek ];
+    mainProgram = "parallel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parallel/wrapper.nix b/nixpkgs/pkgs/tools/misc/parallel/wrapper.nix
new file mode 100644
index 000000000000..0240f1ac9e9e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parallel/wrapper.nix
@@ -0,0 +1,10 @@
+{ lib, runCommand, makeWrapper, parallel, perlPackages
+, extraPerlPackages ? with perlPackages; [ DBI DBDPg DBDSQLite DBDCSV TextCSV ]
+, willCite ? false }:
+
+runCommand "parallel-full" { nativeBuildInputs = [ makeWrapper ]; } ''
+  mkdir -p $out/bin
+  makeWrapper ${parallel}/bin/parallel $out/bin/parallel \
+    --set PERL5LIB "${perlPackages.makeFullPerlPath extraPerlPackages}" \
+    ${lib.optionalString willCite "--add-flags --will-cite"}
+''
diff --git a/nixpkgs/pkgs/tools/misc/parcellite/default.nix b/nixpkgs/pkgs/tools/misc/parcellite/default.nix
new file mode 100644
index 000000000000..d39115fcecc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parcellite/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook
+, gtk2, hicolor-icon-theme, intltool, pkg-config
+, which, wrapGAppsHook, xdotool, libappindicator-gtk2 }:
+
+stdenv.mkDerivation rec {
+  pname = "parcellite";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "rickyrockrat";
+    repo = "parcellite";
+    rev = version;
+    sha256 = "19q4x6x984s6gxk1wpzaxawgvly5vnihivrhmja2kcxhzqrnfhiy";
+  };
+
+  nativeBuildInputs = [ autoreconfHook intltool pkg-config wrapGAppsHook ];
+  buildInputs = [ gtk2 hicolor-icon-theme libappindicator-gtk2 ];
+  NIX_LDFLAGS = "-lgio-2.0";
+
+  preFixup = ''
+    # Need which and xdotool on path to fix auto-pasting.
+    gappsWrapperArgs+=(--prefix PATH : "${which}/bin:${xdotool}/bin")
+  '';
+
+  meta = with lib; {
+    description = "Lightweight GTK clipboard manager";
+    homepage = "https://github.com/rickyrockrat/parcellite";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "parcellite";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parquet-tools/default.nix b/nixpkgs/pkgs/tools/misc/parquet-tools/default.nix
new file mode 100644
index 000000000000..988c7245ded1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parquet-tools/default.nix
@@ -0,0 +1,83 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "parquet-tools";
+  version = "0.2.16";
+
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "ktrueda";
+    repo = "parquet-tools";
+    rev = "refs/tags/${version}";
+    hash = "sha256-mV66R5ejfzH1IasmoyAWAH5vzrnLVVhOqKBMfWKIVY0=";
+  };
+
+  patches = [
+    # support Moto 5.x
+    # https://github.com/ktrueda/parquet-tools/pull/55
+    ./moto5.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace tests/test_inspect.py \
+      --replace "parquet-cpp-arrow version 5.0.0" "parquet-cpp-arrow version ${pyarrow.version}" \
+      --replace "serialized_size: 2222" "serialized_size: 2221" \
+      --replace "format_version: 1.0" "format_version: 2.6"
+  '';
+
+  pythonRelaxDeps = [
+    "halo"
+    "tabulate"
+    "thrift"
+  ];
+
+  nativeBuildInputs = [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = [
+    boto3
+    colorama
+    halo
+    pandas
+    pyarrow
+    tabulate
+    thrift
+  ];
+
+  # TestGetMetaData.test_inspect shells out to `parquet-tools` CLI entrypoint
+  preCheck = ''
+    export PATH=$out/bin:$PATH
+  '';
+
+  nativeCheckInputs = [
+    moto
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # test file is 2 bytes bigger than expected
+    "test_excute_simple"
+  ];
+
+  pythonImportsCheck = [
+    "parquet_tools"
+  ];
+
+  meta = with lib; {
+    description = "A CLI tool for parquet files";
+    homepage = "https://github.com/ktrueda/parquet-tools";
+    changelog = "https://github.com/ktrueda/parquet-tools/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cpcloud ];
+    mainProgram = "parquet-tools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/parquet-tools/moto5.patch b/nixpkgs/pkgs/tools/misc/parquet-tools/moto5.patch
new file mode 100644
index 000000000000..5e79c1a204fc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parquet-tools/moto5.patch
@@ -0,0 +1,28 @@
+diff --git a/tests/fixtures/aws.py b/tests/fixtures/aws.py
+index 7eea4bd..9fb3345 100644
+--- a/tests/fixtures/aws.py
++++ b/tests/fixtures/aws.py
+@@ -1,15 +1,17 @@
+ import boto3
+-from moto import mock_s3
+ import pytest
+ 
++try:
++    # Moto 4.x
++    from moto import mock_s3
++except ImportError:
++    # Moto 5.x
++    from moto import mock_aws as mock_s3
+ 
+ @pytest.fixture
+ def aws_session():
+-    mock_s3_server = mock_s3()
+-    mock_s3_server.start()
+-    yield boto3.Session()
+-    mock_s3_server.stop()
+-
++    with mock_s3():
++        yield boto3.Session()
+ 
+ @pytest.fixture
+ def aws_s3_bucket(aws_session):
diff --git a/nixpkgs/pkgs/tools/misc/parted/default.nix b/nixpkgs/pkgs/tools/misc/parted/default.nix
new file mode 100644
index 000000000000..f1ed977e9a60
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/parted/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv
+, fetchurl
+, lvm2
+, libuuid
+, gettext
+, readline
+, dosfstools
+, e2fsprogs
+, perl
+, python3
+, util-linux
+, check
+, enableStatic ? stdenv.hostPlatform.isStatic
+}:
+
+stdenv.mkDerivation rec {
+  pname = "parted";
+  version = "3.6";
+
+  src = fetchurl {
+    url = "mirror://gnu/parted/parted-${version}.tar.xz";
+    sha256 = "sha256-O0Pb4zzKD5oYYB66tWt4UrEo7Bo986mzDM3l5zNZ5hI=";
+  };
+
+  outputs = [ "out" "dev" "man" "info" ];
+
+  postPatch = ''
+    patchShebangs tests
+  '';
+
+  buildInputs = [ libuuid ]
+    ++ lib.optional (readline != null) readline
+    ++ lib.optional (gettext != null) gettext
+    ++ lib.optional (lvm2 != null) lvm2;
+
+  configureFlags =
+       (if (readline != null)
+        then [ "--with-readline" ]
+        else [ "--without-readline" ])
+    ++ lib.optional (lvm2 == null) "--disable-device-mapper"
+    ++ lib.optional enableStatic "--enable-static";
+
+  # Tests were previously failing due to Hydra running builds as uid 0.
+  # That should hopefully be fixed now.
+  doCheck = !stdenv.hostPlatform.isMusl; /* translation test */
+  nativeCheckInputs = [ check dosfstools e2fsprogs perl python3 util-linux ];
+
+  meta = {
+    description = "Create, destroy, resize, check, and copy partitions";
+
+    longDescription = ''
+      GNU Parted is an industrial-strength package for creating, destroying,
+      resizing, checking and copying partitions, and the file systems on
+      them.  This is useful for creating space for new operating systems,
+      reorganising disk usage, copying data on hard disks and disk imaging.
+
+      It contains a library, libparted, and a command-line frontend, parted,
+      which also serves as a sample implementation and script backend.
+    '';
+
+    homepage = "https://www.gnu.org/software/parted/";
+    license = lib.licenses.gpl3Plus;
+
+    maintainers = [
+      # Add your name here!
+    ];
+
+    # GNU Parted requires libuuid, which is part of util-linux-ng.
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/past-time/default.nix b/nixpkgs/pkgs/tools/misc/past-time/default.nix
new file mode 100644
index 000000000000..4bdcff8c1935
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/past-time/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "past-time";
+  version = "0.3.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "fabaff";
+    repo = "past-time";
+    rev = "refs/tags/${version}";
+    hash = "sha256-NSuU33vuHbgJ+cG0FrGYLizIrG7jSz+veptt3D4UegY=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    tqdm
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    freezegun
+    pytestCheckHook
+  ];
+
+  pythonImportsCheck = [
+    "past_time"
+  ];
+
+  meta = with lib; {
+    description = "Tool to visualize the progress of the year based on the past days";
+    homepage = "https://github.com/fabaff/past-time";
+    changelog = "https://github.com/fabaff/past-time/releases/tag/${version}";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "past-time";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pastebinit/default.nix b/nixpkgs/pkgs/tools/misc/pastebinit/default.nix
new file mode 100644
index 000000000000..ba597934ebbe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pastebinit/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+, libxslt
+, docbook_xsl
+, installShellFiles
+, callPackage
+}:
+stdenv.mkDerivation rec {
+  version = "1.6.2";
+  pname = "pastebinit";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    hash = "sha256-vuAWkHlQM6QTWarThpSbY0qrxzej0GvLU0jT2JOS/qc=";
+  };
+
+  patches = [
+    ./use-drv-etc.patch
+  ];
+
+  nativeBuildInputs = [
+    libxslt
+    installShellFiles
+  ];
+
+  buildInputs = [
+    (python3.withPackages (p: [ p.distro ]))
+  ];
+
+  buildPhase = ''
+    xsltproc --nonet ${docbook_xsl}/xml/xsl/docbook/manpages/docbook.xsl pastebinit.xml
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/etc
+    cp -a pastebinit $out/bin
+    cp -a utils/* $out/bin
+    cp -a pastebin.d $out/etc
+    substituteInPlace $out/bin/pastebinit --subst-var-by "etc" "$out/etc"
+    installManPage pastebinit.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://stgraber.org/category/pastebinit/";
+    description = "A software that lets you send anything you want directly to a pastebin from the command line";
+    maintainers = with maintainers; [ raboof samuel-martineau ];
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pastebinit/use-drv-etc.patch b/nixpkgs/pkgs/tools/misc/pastebinit/use-drv-etc.patch
new file mode 100644
index 000000000000..6ccd7897ddf2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pastebinit/use-drv-etc.patch
@@ -0,0 +1,13 @@
+diff --git a/pastebinit b/pastebinit
+index 4e5f9ce..fe06bd3 100755
+--- a/pastebinit
++++ b/pastebinit
+@@ -91,7 +91,7 @@ try:
+         # Files found later override files found earlier.
+         pastebind = {}
+         confdirs = []
+-        for confdir in ['/usr/share', '/usr/local/share'] \
++        for confdir in ['@etc@', '/usr/share', '/usr/local/share'] \
+                 + list(reversed(os.environ.get('XDG_DATA_DIRS', '').split(':'))) \
+                 + list(reversed(os.environ.get('XDG_CONFIG_DIRS', '').split(':'))) \
+                 + ['/etc', '/usr/local/etc',
diff --git a/nixpkgs/pkgs/tools/misc/pazi/default.nix b/nixpkgs/pkgs/tools/misc/pazi/default.nix
new file mode 100644
index 000000000000..c4c1ea18b549
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pazi/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pazi";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "euank";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0z8x70mwg0mvz6iap92gil37d4kpg5dizlyfx3zk7984ynycgap8";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  cargoSha256 = "1iamlp5519h8mmgd4964cvyp7mmnqdg2d3qj5v7yzilyp4nz15jc";
+
+  meta = with lib; {
+    description = "An autojump \"zap to directory\" helper";
+    homepage = "https://github.com/euank/pazi";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "pazi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pb/default.nix b/nixpkgs/pkgs/tools/misc/pb/default.nix
new file mode 100644
index 000000000000..061ca691af75
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pb/default.nix
@@ -0,0 +1,37 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, pb }:
+
+buildGoModule rec {
+  pname = "pb";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "parseablehq";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ckRvtEtagyYpXJ0hh8jsgpE/16bu7b9IdNn2stvb2iI=";
+  };
+
+  vendorHash = "sha256-dNSr0bQz7XdC2fTD82TI8tfmwKBuAcbxjaMC9KAjxlI=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.Version=${version}"
+  ];
+
+  tags = [ "kqueue" ];
+
+  passthru.tests.version = testers.testVersion {
+    package = pb;
+    command = "pb version";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/parseablehq/pb";
+    changelog = "https://github.com/parseablehq/pb/releases/tag/v${version}";
+    description = "CLI client for Parseable server";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ aaronjheng ];
+    mainProgram = "pb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pb_cli/default.nix b/nixpkgs/pkgs/tools/misc/pb_cli/default.nix
new file mode 100644
index 000000000000..b884b2865838
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pb_cli/default.nix
@@ -0,0 +1,40 @@
+{ screenshots ? true, video ? false, clipboard ? true
+, lib, stdenv, jq, curl, fetchFromGitHub, makeWrapper, maim ? null, xclip ? null, capture ? null }:
+
+assert screenshots -> maim != null;
+assert video -> capture != null;
+assert clipboard -> xclip != null;
+
+stdenv.mkDerivation rec {
+  pname = "pb_cli-unstable";
+  version = "2019-03-10";
+
+  src = fetchFromGitHub {
+    owner = "ptpb";
+    repo = "pb_cli";
+    rev  = "6b9ce1ee45fe651d06d7c479a20026a173dd328b";
+    sha256 = "0w6a789zffvz4ixsb92q45n5s4xyx7s2l2f07972i3dajaaai8z7";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  liveDeps = [ jq curl ] ++ lib.optional screenshots maim
+                         ++ lib.optional video capture
+                         ++ lib.optional clipboard xclip;
+
+  installPhase = ''
+    install -Dm755 src/pb.sh $out/bin/pb
+
+    patchShebangs $out/bin/pb
+    wrapProgram $out/bin/pb \
+      --prefix PATH : '${lib.makeBinPath liveDeps}'
+  '';
+
+  meta = with lib; {
+    description = "A no bullshit 0x0.st client";
+    homepage = "https://github.com/ptpb/pb_cli";
+    maintainers = [ maintainers.ar1a ];
+    license = licenses.gpl3Plus;
+    mainProgram = "pb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pc/default.nix b/nixpkgs/pkgs/tools/misc/pc/default.nix
new file mode 100644
index 000000000000..6e9c23ee6d8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pc/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, byacc
+, fetchFromSourcehut
+, gitUpdater
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pc";
+  version = "0.4";
+
+  src = fetchFromSourcehut {
+    owner = "~ft";
+    repo = "pc";
+    rev = finalAttrs.version;
+    hash = "sha256-fzEDI20o5ROY9n/QRzCW66iCKYaBbI++Taur6EoA0wA=";
+  };
+
+  nativeBuildInputs = [ byacc ];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  strictDeps = true;
+
+  enableParallelBuilding = true;
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = {
+    description = "Programmer's calculator";
+    homepage = "https://git.sr.ht/~ft/pc";
+    license = with lib.licenses; [ mit ];
+    maintainers = with lib.maintainers; [ moody ];
+    platforms = lib.platforms.unix;
+    mainProgram = "pc";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/pcb2gcode/default.nix b/nixpkgs/pkgs/tools/misc/pcb2gcode/default.nix
new file mode 100644
index 000000000000..2db24a46bfe0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pcb2gcode/default.nix
@@ -0,0 +1,45 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, boost
+, glibmm
+, gtkmm2
+, gerbv
+, librsvg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pcb2gcode";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "pcb2gcode";
+    repo = "pcb2gcode";
+    rev = "v${version}";
+    hash = "sha256-c5YabBqZn6ilIkF3lifTsYyLZMsZN21jDj1hNu0PRAc=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ boost glibmm gtkmm2 gerbv librsvg ];
+
+  postPatch = ''
+    substituteInPlace ./Makefile.am \
+    --replace '`git describe --dirty --always --tags`' '${version}'
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool for isolation, routing and drilling of PCBs ";
+    longDescription = ''
+      pcb2gcode is a command-line software for the isolation, routing and drilling of PCBs.
+      It takes Gerber files as input and it outputs gcode files, suitable for the milling of PCBs.
+      It also includes an Autoleveller, useful for the automatic dynamic calibration of the milling depth.
+    '';
+    homepage = "https://github.com/pcb2gcode/pcb2gcode";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ kritnich ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pcp/default.nix b/nixpkgs/pkgs/tools/misc/pcp/default.nix
new file mode 100644
index 000000000000..e9d245c8129d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pcp/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pcp";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "dennis-tra";
+    repo = "pcp";
+    rev = "v${version}";
+    sha256 = "sha256-aZO8VuOiYhOPctFKZ6a2psJB0lKHlPc+NLy2RWDU4JI=";
+  };
+
+  vendorHash = "sha256-3bkzBQ950Phg4A9p+IjeUx7Xw7eVmUbeYnQViNjghFk=";
+
+  meta = with lib; {
+    description = "Command line peer-to-peer data transfer tool based on libp2p";
+    homepage = "https://github.com/dennis-tra/pcp";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ matthewcroughan ];
+    platforms = platforms.linux;
+    mainProgram = "pcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pdd/default.nix b/nixpkgs/pkgs/tools/misc/pdd/default.nix
new file mode 100644
index 000000000000..a05f618e472d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pdd/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, buildPythonApplication, python-dateutil }:
+
+buildPythonApplication rec {
+  pname = "pdd";
+  version = "1.6";
+
+  src = fetchFromGitHub {
+    owner = "jarun";
+    repo = "pdd";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-Z+jUFu4VvrgWUtkXMkjspcRJ/JG81X9gc2tnDoCdrsk=";
+  };
+
+  format = "other";
+
+  propagatedBuildInputs = [ python-dateutil ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jarun/pdd";
+    description = "Tiny date, time diff calculator";
+    longDescription = ''
+      There are times you want to check how old you are (in years, months, days)
+      or how long you need to wait for the next flash sale or the number of days
+      left of your notice period in your current job. pdd (Python3 Date Diff) is
+      a small cmdline utility to calculate date and time difference. If no
+      program arguments are specified it shows the current date, time and
+      timezone.
+    '';
+    maintainers = [ ];
+    license = licenses.gpl3;
+    mainProgram = "pdd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pdf-parser/default.nix b/nixpkgs/pkgs/tools/misc/pdf-parser/default.nix
new file mode 100644
index 000000000000..593960c4d2cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pdf-parser/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3Packages, fetchzip }:
+
+python3Packages.buildPythonApplication {
+  pname = "pdf-parser";
+  version = "0.7.4";
+
+  src = fetchzip {
+    url = "https://didierstevens.com/files/software/pdf-parser_V0_7_4.zip";
+    sha256 = "1j39yww2yl4cav8xgd4zfl5jchbbkvffnrynkamkzvz9dd5np2mh";
+  };
+
+  format = "other";
+
+  installPhase = ''
+    install -Dm555 pdf-parser.py $out/bin/pdf-parser.py
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/bin/pdf-parser.py \
+      --replace '/usr/bin/python' '${python3Packages.python}/bin/python'
+  '';
+
+  meta = with lib; {
+    description = "Parse a PDF document";
+    longDescription = ''
+      This tool will parse a PDF document to identify the fundamental elements used in the analyzed file.
+      It will not render a PDF document.
+    '';
+    homepage = "https://blog.didierstevens.com/programs/pdf-tools/";
+    license = licenses.publicDomain;
+    maintainers = [ maintainers.lightdiscord ];
+    platforms = platforms.all;
+    mainProgram = "pdf-parser.py";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/peep/default.nix b/nixpkgs/pkgs/tools/misc/peep/default.nix
new file mode 100644
index 000000000000..301b04cbb816
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/peep/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "peep";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "ryochack";
+    repo = "peep";
+    rev = "v${version}";
+    hash = "sha256-6Y7ZI0kIPE7uMMOkXgm75JMEec090xZPBJFJr9DaswA=";
+  };
+
+  cargoHash = "sha256-CDWa03H8vWfhx2dwZU5rAV3fSwAGqCIPcvl+lTG4npE=";
+
+  meta = with lib; {
+    description = "The CLI text viewer tool that works like less command on small pane within the terminal window";
+    homepage = "https://github.com/ryochack/peep";
+    changelog = "https://github.com/ryochack/peep/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "peep";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/perccli/default.nix b/nixpkgs/pkgs/tools/misc/perccli/default.nix
new file mode 100644
index 000000000000..eacc0c26de33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/perccli/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenvNoCC
+, fetchzip
+, rpmextract
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "perccli";
+
+  # On a new release, update version, URL, hash, and meta.homepage
+  version = "7.2313.00";
+
+  src = fetchzip {
+    # On pkg update: manually adjust the version in the URL because of the different format.
+    url = "https://dl.dell.com/FOLDER09770976M/1/PERCCLI_7.2313.0_A14_Linux.tar.gz";
+    hash = "sha256-IhclHVkdihRx5CzyO2dlOEhCon+0/HB3Fkue7MWsWnw=";
+
+    # Dell seems to block "uncommon" user-agents, such as Nixpkgs's custom one.
+    # 403 otherwise
+    curlOptsList = [ "--user-agent" "Mozilla/5.0" ];
+  };
+
+  nativeBuildInputs = [ rpmextract ];
+
+  unpackPhase = ''
+    rpmextract $src/perccli-00${version}00.0000-1.noarch.rpm
+  '';
+
+  dontPatch = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = let
+    inherit (stdenvNoCC.hostPlatform) system;
+    platforms = {
+      x86_64-linux = ''
+        install -D ./opt/MegaRAID/perccli/perccli64 $out/bin/perccli64
+        ln -s perccli64 $out/bin/perccli
+      '';
+    };
+  in platforms.${system} or (throw "unsupported system: ${system}");
+
+  # Not needed because the binary is statically linked
+  dontFixup = true;
+
+  meta = with lib; {
+    description = "Perccli Support for PERC RAID controllers";
+
+    # Must be updated with every release
+    homepage = "https://www.dell.com/support/home/en-us/drivers/driversdetails?driverid=tdghn";
+
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ panicgh ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/peruse/default.nix b/nixpkgs/pkgs/tools/misc/peruse/default.nix
new file mode 100644
index 000000000000..09c39385c8b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/peruse/default.nix
@@ -0,0 +1,62 @@
+{ stdenv
+, fetchurl
+, lib
+, extra-cmake-modules
+, kdoctools
+, wrapQtAppsHook
+, baloo
+, karchive
+, kconfig
+, kcrash
+, kfilemetadata
+, kinit
+, kirigami2
+, knewstuff
+, okular
+, plasma-framework
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "peruse";
+  # while technically a beta, the latest release is from 2016 and doesn't build without a lot of
+  # patching
+  version = "1.80";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/peruse/peruse-${finalAttrs.version}.tar.xz";
+    hash = "sha256-xnSVnKF20jbxVoFW41A22NZWVZUry/F7G+Ts5NK6M1E=";
+  };
+
+  nativeBuildInputs = [
+    extra-cmake-modules
+    kdoctools
+    wrapQtAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    baloo
+    karchive
+    kconfig
+    kcrash
+    kfilemetadata
+    kinit
+    kirigami2
+    knewstuff
+    okular
+    plasma-framework
+  ];
+
+  # the build is otherwise crazy loud
+  cmakeFlags = [ "-Wno-dev" ];
+
+  pathsToLink = [ "/etc/xdg/peruse.knsrc" ];
+
+  meta = with lib; {
+    description = "A comic book reader";
+    homepage = "https://peruse.kde.org";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "peruse";
+    inherit (kirigami2.meta) platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/pferd/default.nix b/nixpkgs/pkgs/tools/misc/pferd/default.nix
new file mode 100644
index 000000000000..260ba3de5650
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pferd/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pferd";
+  version = "3.5.2";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Garmelon";
+    repo = "PFERD";
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-qN4GtQhiQpXZIagtphcn+oSYXroA9kk7E34IKoKMu7c=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    aiohttp
+    beautifulsoup4
+    rich
+    keyring
+    certifi
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Garmelon/PFERD";
+    description = "Tool for downloading course-related files from ILIAS";
+    license = licenses.mit;
+    maintainers = with maintainers; [ _0xbe7a ];
+    mainProgram = "pferd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pfetch-rs/default.nix b/nixpkgs/pkgs/tools/misc/pfetch-rs/default.nix
new file mode 100644
index 000000000000..0f1d5b2f1d33
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pfetch-rs/default.nix
@@ -0,0 +1,30 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pfetch-rs";
+  version = "2.9.1";
+
+  src = fetchFromGitHub {
+    owner = "Gobidev";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-tpJk31Z7QzZNLmEv/L1008tf6hpJJI6b7E1o/kwbJe0=";
+  };
+
+  cargoHash = "sha256-CQVPEUpblypDyr48MrLY3roGunOxem0eM1OtbcKlnsw=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    darwin.apple_sdk.frameworks.DisplayServices
+  ];
+
+
+  meta = with lib; {
+    description = "A rewrite of the pfetch system information tool in Rust";
+    homepage = "https://github.com/Gobidev/pfetch-rs";
+    changelog = "https://github.com/Gobidev/pfetch-rs/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gobidev ];
+    mainProgram = "pfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pfetch/default.nix b/nixpkgs/pkgs/tools/misc/pfetch/default.nix
new file mode 100644
index 000000000000..5f9e8bf7676a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pfetch/default.nix
@@ -0,0 +1,28 @@
+{ stdenvNoCC, lib, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "pfetch";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "dylanaraps";
+    repo = "pfetch";
+    rev = version;
+    sha256 = "06z0k1naw3k052p2z7241lx92rp5m07zlr0alx8pdm6mkc3c4v8f";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm755 -t $out/bin pfetch
+  '';
+
+  meta = with lib; {
+    description = "A pretty system information tool written in POSIX sh";
+    homepage = "https://github.com/dylanaraps/pfetch";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ equirosa ];
+    mainProgram = "pfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pfsshell/default.nix b/nixpkgs/pkgs/tools/misc/pfsshell/default.nix
new file mode 100644
index 000000000000..24eb379adf5c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pfsshell/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja }:
+
+stdenv.mkDerivation rec {
+  version = "1.1.1";
+  pname = "pfsshell";
+
+  src = fetchFromGitHub {
+    owner = "uyjulian";
+    repo = "pfsshell";
+    rev = "v${version}";
+    sha256 = "0cr91al3knsbfim75rzl7rxdsglcc144x0nizn7q4jx5cad3zbn8";
+  };
+
+  nativeBuildInputs = [ meson ninja ];
+
+  # Build errors since 1.1.1 when format hardening is enabled:
+  #   cc1: error: '-Wformat-security' ignored without '-Wformat' [-Werror=format-security]
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "PFS (PlayStation File System) shell for POSIX-based systems";
+    platforms = platforms.unix;
+    license = with licenses; [
+      gpl2Only # the pfsshell software itself
+      afl20    # APA, PFS, and iomanX libraries which are compiled together with this package
+    ];
+    maintainers = with maintainers; [ makefu ];
+    mainProgram = "pfsshell";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pg_flame/default.nix b/nixpkgs/pkgs/tools/misc/pg_flame/default.nix
new file mode 100644
index 000000000000..da9cc6c77d59
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pg_flame/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pg_flame";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "mgartner";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-glvIv9GHIbp6IZUvZo9fyvkJ6QR03nMlrAOpZ3HfA6g=";
+  };
+
+  vendorHash = "sha256-ReVaetR3zkLLLc3d0EQkBAyUrxwBn3iq8MZAGzkQfeY=";
+
+  meta = with lib; {
+    description = "Flamegraph generator for Postgres EXPLAIN ANALYZE output";
+    homepage = "https://github.com/mgartner/pg_flame";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "pg_flame";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pg_top/default.nix b/nixpkgs/pkgs/tools/misc/pg_top/default.nix
new file mode 100644
index 000000000000..0999c9456d53
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pg_top/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, ncurses, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pg_top";
+  version = "3.7.0";
+
+  src = fetchurl {
+    url = "https://pgfoundry.org/frs/download.php/1781/pg_top-${version}.tar.gz";
+    sha256 = "17xrv0l58rv3an06gkajzw0gg6v810xx6vl137an1iykmhvfh7h2";
+  };
+
+  buildInputs = [ ncurses postgresql ];
+
+  meta = with lib; {
+    description = "A 'top' like tool for PostgreSQL";
+    longDescription = ''
+      pg_top allows you to:
+       * View currently running SQL statement of a process.
+       * View query plan of a currently running SQL statement.
+       * View locks held by a process.
+       * View user table statistics.
+       * View user index statistics.
+    '';
+
+    homepage = "http://ptop.projects.postgresql.org/";
+    platforms = platforms.linux;
+    license = licenses.free; # see commands.c
+    mainProgram = "pg_top";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pgbadger/default.nix b/nixpkgs/pkgs/tools/misc/pgbadger/default.nix
new file mode 100644
index 000000000000..b1024d68a91c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pgbadger/default.nix
@@ -0,0 +1,73 @@
+{
+  buildPerlPackage,
+  bzip2,
+  fetchFromGitHub,
+  JSONXS,
+  lib,
+  nix-update-script,
+  pgbadger,
+  PodMarkdown,
+  shortenPerlShebang,
+  stdenv,
+  testers,
+  TextCSV_XS,
+  which,
+}:
+
+buildPerlPackage rec {
+  pname = "pgbadger";
+  version = "12.4";
+
+  src = fetchFromGitHub {
+    owner = "darold";
+    repo = "pgbadger";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-an/BOkQsMkTXS0HywV1JWerS16HRbO1MHVleYhVqmBM=";
+  };
+
+  postPatch = ''
+    patchShebangs ./pgbadger
+  '';
+
+  # pgbadger has too many `-Idir` flags on its shebang line on Darwin,
+  # causing the build to fail when trying to generate the documentation.
+  # Rewrite the -I flags in `use lib` form.
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang ./pgbadger
+  '';
+
+  outputs = [ "out" ];
+
+  PERL_MM_OPT = "INSTALL_BASE=${placeholder "out"}";
+
+  buildInputs = [
+    JSONXS
+    PodMarkdown
+    TextCSV_XS
+  ];
+
+  nativeBuildInputs = lib.optionals stdenv.isDarwin [ shortenPerlShebang ];
+
+  nativeCheckInputs = [
+    bzip2
+    which
+  ];
+
+  passthru = {
+    tests.version = testers.testVersion {
+      inherit version;
+      command = "${lib.getExe pgbadger} --version";
+      package = pgbadger;
+    };
+    updateScript = nix-update-script { };
+  };
+
+  meta = {
+    homepage = "https://github.com/darold/pgbadger";
+    description = "A fast PostgreSQL Log Analyzer";
+    changelog = "https://github.com/darold/pgbadger/raw/v${version}/ChangeLog";
+    license = lib.licenses.postgresql;
+    maintainers = lib.teams.determinatesystems.members;
+    mainProgram = "pgbadger";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pgcenter/default.nix b/nixpkgs/pkgs/tools/misc/pgcenter/default.nix
new file mode 100644
index 000000000000..0b3dde03b4c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pgcenter/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pgcenter";
+  version = "0.9.2";
+
+  src = fetchFromGitHub {
+    owner  = "lesovsky";
+    repo   = "pgcenter";
+    rev    = "v${version}";
+    sha256 = "sha256-xaY01T12/5Peww9scRgfc5yHj7QA8BEwOK5l6OedziY=";
+  };
+
+  vendorHash = "sha256-9hYiyZ34atmSL7JvuXyiGU7HR4E6qN7bGZlyU+hP+FU=";
+
+  subPackages = [ "cmd" ];
+
+  ldflags = [ "-w" "-s" "-X main.gitTag=${src.rev}" "-X main.gitCommit=${src.rev}" "-X main.gitBranch=master" ];
+
+  postInstall = ''
+    mv $out/bin/cmd $out/bin/pgcenter
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://pgcenter.org/";
+    changelog = "https://github.com/lesovsky/pgcenter/raw/v${version}/doc/Changelog";
+    description = "Command-line admin tool for observing and troubleshooting PostgreSQL";
+    license = licenses.bsd3;
+    maintainers = [ ];
+    mainProgram = "pgcenter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pgmetrics/default.nix b/nixpkgs/pkgs/tools/misc/pgmetrics/default.nix
new file mode 100644
index 000000000000..b068c8303a82
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pgmetrics/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pgmetrics";
+  version = "1.16.0";
+
+  src = fetchFromGitHub {
+    owner = "rapidloop";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-8pF3E0Zh/SsH6+5iXt1KFwud2ijoisYfcu+QHRM9x9s=";
+  };
+
+  vendorHash = "sha256-KIMnvGMIipuIFPTSeERtCfvlPuvHvEHdjBJ1TbT2d1s=";
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://pgmetrics.io/";
+    description = "Collect and display information and stats from a running PostgreSQL server";
+    license = licenses.asl20;
+    maintainers = [ ];
+    mainProgram = "pgmetrics";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix b/nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix
new file mode 100644
index 000000000000..cb4762c412f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/phoronix-test-suite/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, php, which, makeWrapper, gnumake, gcc, callPackage }:
+
+stdenv.mkDerivation rec {
+  pname = "phoronix-test-suite";
+  version = "10.8.4";
+
+  src = fetchurl {
+    url = "https://phoronix-test-suite.com/releases/${pname}-${version}.tar.gz";
+    sha256 = "sha256-HyCS1TbAoxk+/FPkpQ887mXA7xp40x5UBPHGY//3t/Q=";
+  };
+
+  buildInputs = [ php ];
+  nativeBuildInputs = [ which makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    ./install-sh $out
+    wrapProgram $out/bin/phoronix-test-suite \
+    --set PHP_BIN ${php}/bin/php \
+    --prefix PATH : ${lib.makeBinPath [ gnumake gcc ]}
+
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    simple-execution = callPackage ./tests.nix { };
+  };
+
+  meta = with lib; {
+    description = "Open-Source, Automated Benchmarking";
+    homepage = "https://www.phoronix-test-suite.com/";
+    maintainers = with maintainers; [ davidak ];
+    license = licenses.gpl3;
+    platforms = with platforms; unix;
+    mainProgram = "phoronix-test-suite";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/phoronix-test-suite/tests.nix b/nixpkgs/pkgs/tools/misc/phoronix-test-suite/tests.nix
new file mode 100644
index 000000000000..85249c1242ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/phoronix-test-suite/tests.nix
@@ -0,0 +1,20 @@
+{ runCommand, phoronix-test-suite }:
+
+let
+  inherit (phoronix-test-suite) pname version;
+in
+
+runCommand "${pname}-tests" { meta.timeout = 60; }
+  ''
+    # automatic initial setup to prevent interactive questions
+    ${phoronix-test-suite}/bin/phoronix-test-suite enterprise-setup >/dev/null
+    # get version of installed program and compare with package version
+    if [[ `${phoronix-test-suite}/bin/phoronix-test-suite version` != *"${version}"*  ]]; then
+      echo "Error: program version does not match package version"
+      exit 1
+    fi
+    # run dummy command
+    ${phoronix-test-suite}/bin/phoronix-test-suite dummy_module.dummy-command >/dev/null
+    # needed for Nix to register the command as successful
+    touch $out
+  ''
diff --git a/nixpkgs/pkgs/tools/misc/phrase-cli/default.nix b/nixpkgs/pkgs/tools/misc/phrase-cli/default.nix
new file mode 100644
index 000000000000..70b08aa96a92
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/phrase-cli/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "phrase-cli";
+  version = "2.25.0";
+
+  src = fetchFromGitHub {
+    owner = "phrase";
+    repo = "phrase-cli";
+    rev = version;
+    sha256 = "sha256-JVelz5I6HWgoqqkfNzb0DlAA4DsydBzdcxEIdKs24i4=";
+  };
+
+  vendorHash = "sha256-8lqiseOJ8eDvY4J/MimKVvh5euHfOgQLjhKf7sPS6AE=";
+
+  ldflags = [ "-X=github.com/phrase/phrase-cli/cmd.PHRASE_CLIENT_VERSION=${version}" ];
+
+  postInstall = ''
+    ln -s $out/bin/phrase-cli $out/bin/phrase
+  '';
+
+  meta = with lib; {
+    homepage = "http://docs.phraseapp.com";
+    description = "PhraseApp API v2 Command Line Client";
+    changelog = "https://github.com/phrase/phrase-cli/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ juboba ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pick/default.nix b/nixpkgs/pkgs/tools/misc/pick/default.nix
new file mode 100644
index 000000000000..cee77d3a1588
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pick/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "pick";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mptre";
+    repo = "pick";
+    rev = "v${version}";
+    sha256 = "8cgt5KpLfnLwhucn4DQYC/7ot1u24ahJxWG+/1SL584=";
+  };
+
+  buildInputs = [ ncurses ];
+
+  PREFIX = placeholder "out";
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Fuzzy text selection utility";
+    license = licenses.mit;
+    maintainers = [ maintainers.womfoo ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "pick";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/picocom/default.nix b/nixpkgs/pkgs/tools/misc/picocom/default.nix
new file mode 100644
index 000000000000..d8422e3679fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/picocom/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv
+, fetchFromGitHub
+, installShellFiles
+, lrzsz
+, IOKit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "picocom";
+  # last tagged release is 3.1 but 3.2 is still considered a release
+  version = "3.2a";
+
+  # upstream is quiet as the original author is no longer active since March 2018
+  src = fetchFromGitHub {
+    owner = "npat-efault";
+    repo = "picocom";
+    rev = "1acf1ddabaf3576b4023c4f6f09c5a3e4b086fb8";
+    sha256 = "sha256-cs2bxqZfTbnY5d+VJ257C5hssaFvYup3tBKz68ROnAo=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace '.picocom_history' '.cache/picocom_history'
+
+    substituteInPlace picocom.c \
+      --replace '"rz -vv -E"' '"${lrzsz}/bin/rz -vv -E"' \
+      --replace '"sz -vv"' '"${lrzsz}/bin/sz -vv"'
+  '';
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optional stdenv.isDarwin IOKit;
+
+  installPhase = ''
+    install -Dm555 -t $out/bin picocom
+    installManPage picocom.1
+    installShellCompletion --bash bash_completion/picocom
+  '';
+
+  meta = with lib; {
+    description = "Minimal dumb-terminal emulation program";
+    homepage = "https://github.com/npat-efault/picocom/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    mainProgram = "picocom";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pinsel/default.nix b/nixpkgs/pkgs/tools/misc/pinsel/default.nix
new file mode 100644
index 000000000000..de6cc3700838
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pinsel/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gtk3, lua, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "pinsel";
+  version = "unstable-2021-09-13";
+
+  src = fetchFromGitHub {
+    owner = "Nooo37";
+    repo = pname;
+    rev = "24b0205ca041511b3efb2a75ef296539442f9f54";
+    sha256 = "sha256-w+jiKypZODsmZq3uWGNd8PZhe1SowHj0thcQTX8WHfQ=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ pkg-config glib ];
+
+  buildInputs = [ lua gtk3 ];
+
+  makeFlags = [ "INSTALLDIR=${placeholder "out"}/bin" ];
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Minimal screenshot annotation tool with lua config";
+    homepage = "https://github.com/Nooo37/pinsel";
+    # no license
+    license = licenses.unfree;
+    maintainers = with maintainers; [ lom ];
+    mainProgram = "pinsel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pipe-rename/default.nix b/nixpkgs/pkgs/tools/misc/pipe-rename/default.nix
new file mode 100644
index 000000000000..dc8e545a7d8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipe-rename/default.nix
@@ -0,0 +1,33 @@
+{ lib, rustPlatform, fetchCrate, python3 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pipe-rename";
+  version = "1.6.5";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-av/ig76O7t3dB4Irfi3yqyL30nkJJCzs5EayWRbpOI0=";
+  };
+
+  cargoHash = "sha256-3p6Bf9UfCb5uc5rp/yuXixcDkuXfTiboLl8TI0O52hE=";
+
+  nativeCheckInputs = [ python3 ];
+
+  checkFlags = [
+    # tests are failing upstream
+    "--skip=test_dot"
+    "--skip=test_dotdot"
+  ];
+
+  preCheck = ''
+    patchShebangs tests/editors/env-editor.py
+  '';
+
+  meta = with lib; {
+    description = "Rename your files using your favorite text editor";
+    homepage = "https://github.com/marcusbuffett/pipe-rename";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "renamer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pipectl/default.nix b/nixpkgs/pkgs/tools/misc/pipectl/default.nix
new file mode 100644
index 000000000000..f5cdeffc3ece
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipectl/default.nix
@@ -0,0 +1,32 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, scdoc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pipectl";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "Ferdi265";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Ixch5iyeIjx+hSvln8L0N8pXG7ordpsFVroqZPUzAG0=";
+  };
+
+  nativeBuildInputs = [ cmake scdoc ];
+
+  cmakeFlags = [
+    "-DINSTALL_DOCUMENTATION=ON"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Ferdi265/pipectl";
+    license = licenses.gpl3;
+    description = "a simple named pipe management utility";
+    maintainers = with maintainers; [ synthetica ];
+    mainProgram = "pipectl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pipelight/default.nix b/nixpkgs/pkgs/tools/misc/pipelight/default.nix
new file mode 100644
index 000000000000..90c1e8d1e86a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipelight/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchurl, bash, cabextract, curl, gnupg, libX11, libGLU, libGL, wine-staging }:
+
+let
+  wine_custom = wine-staging;
+
+  mozillaPluginPath = "/lib/mozilla/plugins";
+
+
+in stdenv.mkDerivation rec {
+
+  version = "0.2.8.2";
+
+  pname = "pipelight";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/mmueller2012/pipelight/get/v${version}.tar.gz";
+    sha256 = "1kyy6knkr42k34rs661r0f5sf6l1s2jdbphdg89n73ynijqmzjhk";
+  };
+
+  buildInputs = [ wine_custom libX11 libGLU libGL curl ];
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-fpermissive" ];
+
+  patches = [
+    ./pipelight.patch
+    ./wine-6.13-new-args.patch
+    # https://source.winehq.org/git/wine.git/commit/cf4a781e987a98a8d48610362a20a320c4a1016d
+    # adds ControlMask as a static variable.
+    ./wine-7.10-ControlMask.patch
+  ];
+
+  configurePhase = ''
+    patchShebangs .
+    ./configure \
+      --prefix=$out \
+      --moz-plugin-path=$out/${mozillaPluginPath} \
+      --wine-path=${wine_custom} \
+      --gpg-exec=${gnupg}/bin/gpg \
+      --bash-interp=${bash}/bin/bash \
+      --downloader=${curl.bin}/bin/curl
+      $configureFlags
+  '';
+
+  passthru = {
+    mozillaPlugin = mozillaPluginPath;
+    wine = wine_custom;
+  };
+
+  postInstall = ''
+    $out/bin/pipelight-plugin --create-mozilla-plugins
+  '';
+
+  preFixup = ''
+    substituteInPlace $out/share/pipelight/install-dependency \
+      --replace cabextract ${cabextract}/bin/cabextract
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = "http://pipelight.net/";
+    license = with lib.licenses; [ mpl11 gpl2 lgpl21 ];
+    description = "A wrapper for using Windows plugins in Linux browsers";
+    maintainers = with lib.maintainers; [ ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    mainProgram = "pipelight-plugin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch b/nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch
new file mode 100644
index 000000000000..fc6666f8f12b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipelight/pipelight.patch
@@ -0,0 +1,122 @@
+diff -urN pipelight.old/bin/pipelight-plugin.in pipelight.new/bin/pipelight-plugin.in
+--- pipelight.old/bin/pipelight-plugin.in	2014-07-19 22:53:02.000000000 +0200
++++ pipelight.new/bin/pipelight-plugin.in	2014-07-27 00:02:39.275834030 +0200
+@@ -92,7 +92,7 @@
+	PLUGIN_PATH=$(realpath "$PLUGIN_PATH")
+
+	# Global installation
+-	if [ $(/usr/bin/id -u) -eq 0 ]; then
++	if [ $(id -u) -eq 0 ]; then
+		INSTALLDIR="$PLUGIN_PATH"
+
+	# Use environment variable (only if it doesn't point to the global directory)
+@@ -594,7 +594,7 @@
+	fi
+
+	# Ensure the signature is valid, extract the content
+-	if ! @@GPG@@ --batch --no-default-keyring --keyring "$PIPELIGHT_SHARE_PATH/sig-install-dependency.gpg" --decrypt "$tmpfile" > "$decfile"; then
++	if ! @@GPG@@ --homedir /tmp --batch --no-default-keyring --keyring "$PIPELIGHT_SHARE_PATH/sig-install-dependency.gpg" --decrypt "$tmpfile" > "$decfile"; then
+		rm "$tmpfile"
+		rm "$decfile"
+		echo ""
+@@ -630,24 +630,10 @@
+	return 0
+ }
+
+-# Use fetch on FreeBSD if wget is not available
+-if command -v wget >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		wget -O "$1" "$2"
+-	}
+-elif command -v fetch >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		fetch -o "$1" "$2"
+-	}
+-else
+-	download_file()
+-	{
+-		echo "ERROR: Could neither find wget nor fetch. Unable to download file!" >&2
+-		return 1
+-	}
+-fi
++download_file()
++{
++	curl --cacert /etc/ssl/certs/ca-certificates.crt -o "$1" "$2"
++}
+
+ # Use shasum instead of sha256sum on MacOS / *BSD
+ if ! command -v sha256sum >/dev/null 2>&1 && command -v shasum >/dev/null 2>&1; then
+diff -urN pipelight.old/configure pipelight.new/configure
+--- pipelight.old/configure	2014-07-19 22:53:02.000000000 +0200
++++ pipelight.new/configure	2014-07-26 23:52:13.690881447 +0200
+@@ -66,12 +66,8 @@
+ datadir=""
+ libdir=""
+ mandir=""
+-bash_interp="$(which bash)"
+-if which gpg &> /dev/null; then
+-	gpg_exec="$(which gpg)"
+-else
+-	gpg_exec="/usr/bin/gpg"
+-fi
++bash_interp=bash
++gpg_exec=gpg
+ moz_plugin_path=""
+ gcc_runtime_dlls=""
+ so_mode="0644"
+diff -urN pipelight.old/share/install-dependency pipelight.new/share/install-dependency
+--- pipelight.old/share/install-dependency	2014-07-19 22:53:02.000000000 +0200
++++ pipelight.new/share/install-dependency	2014-07-26 23:26:18.431938546 +0200
+@@ -734,42 +734,14 @@
+	return 0
+ }
+
+-# Use fetch on FreeBSD if wget is not available
+-if command -v wget >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		wget -O "$1" "$2"
+-	}
+-	get_download_size()
+-	{
+-		local filesize="$(wget -O- "$1" --spider --server-response 2>&1 | sed -ne '/Content-Length/{s/.*: //;p}')"
+-		local re='^[0-9]+$'
+-		if [[ "$filesize" -ne "0" ]] && [[ "$filesize" =~ $re ]]; then
+-			echo "$(($filesize/(1024*1024)))"
+-		else
+-			echo "N/A"
+-		fi
+-	}
+-elif command -v fetch >/dev/null 2>&1; then
+-	download_file()
+-	{
+-		fetch -o "$1" "$2"
+-	}
+-	get_download_size()
+-	{
+-		echo "N/A"
+-	}
+-else
+-	download_file()
+-	{
+-		echo "ERROR: Could neither find wget nor fetch. Unable to download file!" >&2
+-		return 1
+-	}
+-	get_download_size()
+-	{
+-		echo "N/A"
+-	}
+-fi
++download_file()
++{
++	curl --cacert /etc/ssl/certs/ca-certificates.crt -o "$1" "$2"
++}
++get_download_size()
++{
++	echo "N/A"
++}
+
+ # Use shasum instead of sha256sum on MacOS / *BSD
+ if ! command -v sha256sum >/dev/null 2>&1 && command -v shasum >/dev/null 2>&1; then
diff --git a/nixpkgs/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch b/nixpkgs/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch
new file mode 100644
index 000000000000..b67af621f64f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipelight/wine-6.13-new-args.patch
@@ -0,0 +1,42 @@
+diff --git a/src/windows/pluginloader/apihook.c b/src/windows/pluginloader/apihook.c
+index 80bf726..6b80f70 100644
+--- a/src/windows/pluginloader/apihook.c
++++ b/src/windows/pluginloader/apihook.c
+@@ -42,7 +42,9 @@
+ #include "common/common.h"
+ #include "pluginloader.h"
+ 
++#define new cnew
+ #include <windows.h>							// for PVOID and other types
++#undef new
+ #include <string.h>								// for memset
+ 
+ void* patchDLLExport(PVOID ModuleBase, const char* functionName, void* newFunctionPtr){
+diff --git a/src/windows/pluginloader/npnfunctions.c b/src/windows/pluginloader/npnfunctions.c
+index e4e38aa..19f29d5 100644
+--- a/src/windows/pluginloader/npnfunctions.c
++++ b/src/windows/pluginloader/npnfunctions.c
+@@ -41,7 +41,9 @@
+ #include "common/common.h"
+ #include "pluginloader.h"
+ 
++#define new cnew
+ #include <windows.h>
++#undef new
+ 
+ /* Shockwave sometimes calls the function with a wrong instance? Is this a wine bug? */
+ NPP shockwaveInstanceBug = NULL;
+diff --git a/src/windows/pluginloader/pluginloader.c b/src/windows/pluginloader/pluginloader.c
+index 8f1170a..99dbceb 100644
+--- a/src/windows/pluginloader/pluginloader.c
++++ b/src/windows/pluginloader/pluginloader.c
+@@ -50,7 +50,9 @@
+ #include "pluginloader.h"
+ #include "apihook.h"
+ 
++#define new cnew
+ #include <windows.h>
++#undef new
+ #include <objbase.h>							// for CoInitializeEx
+ #include <GL/gl.h>
+ 
diff --git a/nixpkgs/pkgs/tools/misc/pipelight/wine-7.10-ControlMask.patch b/nixpkgs/pkgs/tools/misc/pipelight/wine-7.10-ControlMask.patch
new file mode 100644
index 000000000000..87280d17788a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipelight/wine-7.10-ControlMask.patch
@@ -0,0 +1,26 @@
+diff --git a/src/windows/pluginloader/pluginloader.c b/src/windows/pluginloader/pluginloader.c
+index 751e072..7a4589d 100644
+--- a/src/windows/pluginloader/pluginloader.c
++++ b/src/windows/pluginloader/pluginloader.c
+@@ -190,7 +190,7 @@ static inline WPARAM wParamFromX11State(uint32_t state){
+ 	if (state & Button3Mask) wParam |= MK_RBUTTON;
+ 	if (state & Button2Mask) wParam |= MK_MBUTTON;
+ 	if (state & ShiftMask)   wParam |= MK_SHIFT;
+-	if (state & ControlMask) wParam |= MK_CONTROL;
++	if (state & ControlMask_) wParam |= MK_CONTROL;
+ 	return wParam;
+ }
+ 
+diff --git a/src/windows/pluginloader/pluginloader.h b/src/windows/pluginloader/pluginloader.h
+index ffe89a7..a1ebabc 100644
+--- a/src/windows/pluginloader/pluginloader.h
++++ b/src/windows/pluginloader/pluginloader.h
+@@ -149,7 +149,7 @@ typedef unsigned long int XID;
+ 
+ #define ShiftMask	(1<<0)
+ #define LockMask	(1<<1)
+-#define ControlMask	(1<<2)
++#define ControlMask_	(1<<2)
+ #define Button1Mask	(1<<8)
+ #define Button2Mask	(1<<9)
+ #define Button3Mask	(1<<10)
diff --git a/nixpkgs/pkgs/tools/misc/pipreqs/default.nix b/nixpkgs/pkgs/tools/misc/pipreqs/default.nix
new file mode 100644
index 000000000000..49062b3a5cb8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pipreqs/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3, fetchPypi }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "pipreqs";
+  version = "0.4.13";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-oX8WeIC2khvjdTPOTIHdxuIrRlwQeq1VfbQ7Gt1WqZs=";
+  };
+
+  propagatedBuildInputs = [ yarg docopt ];
+
+  # Tests requires network access. Works fine without sandboxing
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Generate requirements.txt file for any project based on imports";
+    homepage = "https://github.com/bndr/pipreqs";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ psyanticy ];
+    mainProgram = "pipreqs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pistol/default.nix b/nixpkgs/pkgs/tools/misc/pistol/default.nix
new file mode 100644
index 000000000000..79826e6f7924
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pistol/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, file
+, installShellFiles
+, asciidoctor
+}:
+
+buildGoModule rec {
+  pname = "pistol";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "doronbehar";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-7nALrB+QubEnryVsGPpFMJ003SP2lheYTkWXF5w/V8I=";
+  };
+
+  vendorHash = "sha256-9Ydps8UA1f0fwG5SHRE4F61OyRJiITw/4SyoMEbsRgM=";
+
+  doCheck = false;
+
+  subPackages = [ "cmd/pistol" ];
+
+  buildInputs = [
+    file
+  ];
+  nativeBuildInputs = [
+    installShellFiles
+    asciidoctor
+  ];
+  postInstall = ''
+    asciidoctor -b manpage -d manpage README.adoc
+    installManPage pistol.1
+  '';
+
+  ldflags = [ "-s" "-w" "-X main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "General purpose file previewer designed for Ranger, Lf to make scope.sh redundant";
+    homepage = "https://github.com/doronbehar/pistol";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+    mainProgram = "pistol";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/piston-cli/default.nix b/nixpkgs/pkgs/tools/misc/piston-cli/default.nix
new file mode 100644
index 000000000000..44ec8eabc149
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/piston-cli/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "piston-cli";
+  version = "1.4.3";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "qvDGVJcaMXUajdUQWl4W1dost8k0PsS9XX/o8uQrtfY=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ rich prompt-toolkit requests pygments pyyaml more-itertools ];
+
+  checkPhase = ''
+    $out/bin/piston --help > /dev/null
+  '';
+
+  nativeBuildInputs = with python3Packages; [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "rich"
+    "more-itertools"
+    "PyYAML"
+  ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Piston api tool";
+    homepage = "https://github.com/Shivansh-007/piston-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ethancedwards8 ];
+    mainProgram = "piston";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pixd/default.nix b/nixpkgs/pkgs/tools/misc/pixd/default.nix
new file mode 100644
index 000000000000..84ad2c92e207
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pixd/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "pixd";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "FireyFly";
+    repo = "pixd";
+    rev = "v${version}";
+    sha256 = "1vmkbs39mg5vwmkzfcrxqm6p8zr9sj4qdwng9icmyf5k34c34xdg";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Colourful visualization tool for binary files";
+    homepage = "https://github.com/FireyFly/pixd";
+    maintainers = [ maintainers.FireyFly ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+    mainProgram = "pixd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pk2cmd/default.nix b/nixpkgs/pkgs/tools/misc/pk2cmd/default.nix
new file mode 100644
index 000000000000..9b04a668dadb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pk2cmd/default.nix
@@ -0,0 +1,29 @@
+{lib, stdenv, fetchurl, libusb-compat-0_1, makeWrapper}:
+
+stdenv.mkDerivation rec {
+  pname = "pk2cmd";
+  version = "1.20";
+  src = fetchurl {
+    url = "https://ww1.microchip.com/downloads/en/DeviceDoc/pk2cmdv${version}LinuxMacSource.tar.gz";
+    sha256 = "1yjpi2qshnqfpan4w3ggakkr3znfrx5cxkny92ka7v9na3g2fc4h";
+  };
+
+  makeFlags = [ "LIBUSB=${libusb-compat-0_1.dev}" "linux" ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/pk2
+    cp pk2cmd $out/bin
+    cp PK2DeviceFile.dat $out/share/pk2
+    wrapProgram $out/bin/pk2cmd --prefix PATH : $out/share/pk2
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ libusb-compat-0_1 ];
+
+  meta = {
+    homepage = "https://www.microchip.com/pickit2";
+    license = lib.licenses.unfree; #MicroChip-PK2
+    description = "Microchip PIC programming software for the PICKit2 programmer";
+    mainProgram = "pk2cmd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pkgdiff/default.nix b/nixpkgs/pkgs/tools/misc/pkgdiff/default.nix
new file mode 100644
index 000000000000..45ec2df2beaf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pkgdiff/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, perl, wdiff }:
+
+stdenv.mkDerivation rec {
+  version = "1.7.2";
+  pname = "pkgdiff";
+
+  src = fetchFromGitHub {
+    owner = "lvc";
+    repo = "pkgdiff";
+    rev = version;
+    sha256 = "1ahknyx0s54frbd3gqh070lkv3j1b344jrs6m6p1s1lgwbd70vnb";
+  };
+
+  buildInputs = [ perl ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/pkgdiff --prefix PATH : ${lib.makeBinPath [ wdiff ]}
+  '';
+
+  meta = with lib; {
+    description = "A tool for visualizing changes in Linux software packages";
+    homepage = "https://lvc.github.io/pkgdiff/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ sweber ];
+    platforms = platforms.unix;
+    mainProgram = "pkgdiff";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pkgtop/default.nix b/nixpkgs/pkgs/tools/misc/pkgtop/default.nix
new file mode 100644
index 000000000000..acb56dd47d4b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pkgtop/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "pkgtop";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "pkgtop";
+    rev = version;
+    hash = "sha256-NY8nx4BKAUq1nGBlzRzm2OH1k01TV6qs2IcoErhuxTc=";
+  };
+
+  vendorHash = "sha256-dlDbNym7CNn5088znMNgGAr2wBM3+nYv3q362353aLs=";
+
+  postInstall = ''
+    mv $out/bin/{cmd,pkgtop}
+  '';
+
+  meta = with lib; {
+    description = "Interactive package manager and resource monitor designed for the GNU/Linux";
+    homepage = "https://github.com/orhun/pkgtop";
+    changelog = "https://github.com/orhun/pkgtop/releases/tag/${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "pkgtop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plantuml-server/default.nix b/nixpkgs/pkgs/tools/misc/plantuml-server/default.nix
new file mode 100644
index 000000000000..7335944ff423
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plantuml-server/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, nixosTests }:
+
+let
+  version = "1.2024.4";
+in
+stdenv.mkDerivation rec {
+  pname = "plantuml-server";
+  inherit version;
+  src = fetchurl {
+    url = "https://github.com/plantuml/plantuml-server/releases/download/v${version}/plantuml-v${version}.war";
+    sha256 = "sha256-7m0MOP6AN7V7mlrVfwxGy1AfCQx2ufp5GU2WQoSTIBc=";
+  };
+
+  dontUnpack = true;
+  installPhase = ''
+    mkdir -p "$out/webapps"
+    cp "$src" "$out/webapps/plantuml.war"
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) plantuml-server;
+  };
+
+  meta = with lib; {
+    description = "A web application to generate UML diagrams on-the-fly";
+    homepage = "https://plantuml.com/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ truh ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plantuml/default.nix b/nixpkgs/pkgs/tools/misc/plantuml/default.nix
new file mode 100644
index 000000000000..8f4d82f2ea49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plantuml/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, makeBinaryWrapper
+, jre
+, graphviz
+}:
+
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "plantuml";
+  version = "1.2024.4";
+
+  src = fetchurl {
+    url = "https://github.com/plantuml/plantuml/releases/download/v${finalAttrs.version}/plantuml-pdf-${finalAttrs.version}.jar";
+    hash = "sha256-8Xs7fyYr4CvXNO+g2g+7LLObUUVKxmt/27/wHdCwSIE=";
+  };
+
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  buildCommand = ''
+    install -Dm644 $src $out/lib/plantuml.jar
+
+    mkdir -p $out/bin
+    makeWrapper ${jre}/bin/java $out/bin/plantuml \
+      --argv0 plantuml \
+      --set GRAPHVIZ_DOT ${graphviz}/bin/dot \
+      --add-flags "-jar $out/lib/plantuml.jar"
+  '';
+
+  doInstallCheck = true;
+  postCheckInstall = ''
+    $out/bin/plantuml -help
+    $out/bin/plantuml -testdot
+  '';
+
+  meta = {
+    description = "Draw UML diagrams using a simple and human readable text description";
+    homepage = "https://plantuml.com/";
+    # "plantuml -license" says GPLv3 or later
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "plantuml";
+    maintainers = with lib.maintainers; [ bjornfor Mogria ];
+    platforms = lib.platforms.unix;
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/plantuml/plantuml-c4.nix b/nixpkgs/pkgs/tools/misc/plantuml/plantuml-c4.nix
new file mode 100644
index 000000000000..77cfa82e894f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plantuml/plantuml-c4.nix
@@ -0,0 +1,74 @@
+{ lib, stdenv, makeWrapper, fetchzip, runCommand, plantuml, plantuml-c4, jre }:
+
+# The C4-PlantUML docs say that it suffices to run plantuml with the
+# -DRELATIVE_INCLUDE="..." arg to make plantuml find the C4 templates
+# when included like "!include C4_Container.puml".
+# Unfortunately, this is not sufficient in practise, when the path is not ".".
+# What helps is setting -Dplantuml.include.path="..." *before* the jar
+# parameter.
+# The -DRELATIVE_INCLUDE param then *still* needs to be set (*after* the jar
+# argument), because the C4 template vars check for existence of this variable
+# and if it is not set, reference paths in the internet.
+
+let
+  c4-lib = fetchzip {
+    url = "https://github.com/plantuml-stdlib/C4-PlantUML/archive/refs/tags/v2.8.0.zip";
+    hash = "sha256-pGtTFg7HcAFYPrjd+CAaxS4C6Cqaj94aq45v3NpiAxM=";
+  };
+
+  sprites = fetchzip {
+    url = "https://github.com/tupadr3/plantuml-icon-font-sprites/archive/fa3f885dbd45c9cd0cdf6c0e5e4fb51ec8b76582.zip";
+    hash = "sha256-lt9+NNMIaZSkKNsGyHoqXUCTlKmZFGfNYYGjer6X0Xc=";
+  };
+
+  # In order to pre-fix the plantuml.jar parameter with the argument
+  # -Dplantuml.include.path=..., we post-fix the java command using a wrapper.
+  # This way the plantuml derivation can remain unchanged.
+  plantumlWithExtraPath =
+    let
+      plantumlIncludePath = lib.concatStringsSep ":" [ c4-lib sprites ];
+      includeFlag = "-Dplantuml.include.path=${lib.escapeShellArg plantumlIncludePath}";
+      postFixedJre =
+        runCommand "jre-postfixed" { nativeBuildInputs = [ makeWrapper ]; } ''
+          mkdir -p $out/bin
+
+          makeWrapper ${jre}/bin/java $out/bin/java \
+            --add-flags ${lib.escapeShellArg includeFlag}
+        '';
+    in
+    plantuml.override { jre = postFixedJre; };
+in
+
+stdenv.mkDerivation rec {
+  pname = "plantuml-c4";
+  version = "2.8.0";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    mkdir -p $out/bin
+
+    makeWrapper ${plantumlWithExtraPath}/bin/plantuml $out/bin/plantuml \
+      --add-flags "-DRELATIVE_INCLUDE=\"${c4-lib}\""
+
+    $out/bin/plantuml -help
+  '';
+
+  passthru.tests.example-c4-diagram =
+    runCommand "c4-plantuml-sample.png" { nativeBuildInputs = [ plantuml-c4 ]; } ''
+      sed 's/https:.*\///' "${c4-lib}/samples/C4_Context Diagram Sample - enterprise.puml" > sample.puml
+      plantuml sample.puml -o $out
+
+      sed 's/!include ..\//!include /' ${sprites}/examples/complex-example.puml > sprites.puml
+      plantuml sprites.puml -o $out
+    '';
+
+  meta = with lib; {
+    description = "PlantUML bundled with C4-Plantuml and plantuml sprites library";
+    mainProgram = "plantuml";
+    homepage = "https://github.com/plantuml-stdlib/C4-PlantUML";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tfc ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plfit/default.nix b/nixpkgs/pkgs/tools/misc/plfit/default.nix
new file mode 100644
index 000000000000..8b1726666bcc
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plfit/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, python ? null
+, swig
+, llvmPackages
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "plfit";
+  version = "0.9.6";
+
+  src = fetchFromGitHub {
+    owner = "ntamas";
+    repo = "plfit";
+    rev = finalAttrs.version;
+    hash = "sha256-XRl6poEdgPNorFideQmEJHCU+phs4rIhMYa8iAOtL1A=";
+  };
+
+  postPatch = lib.optionalString (python != null) ''
+    substituteInPlace src/CMakeLists.txt \
+      --replace-fail ' ''${Python3_SITEARCH}' ' ${placeholder "out"}/${python.sitePackages}' \
+      --replace-fail ' ''${Python3_SITELIB}' ' ${placeholder "out"}/${python.sitePackages}'
+  '';
+
+  nativeBuildInputs = [
+    cmake
+  ] ++ lib.optionals (python != null) [
+    python
+    swig
+  ];
+
+  cmakeFlags = [
+    "-DPLFIT_USE_OPENMP=ON"
+  ] ++ lib.optionals (python != null) [
+    "-DPLFIT_COMPILE_PYTHON_MODULE=ON"
+  ];
+
+  buildInputs = lib.optionals stdenv.cc.isClang [
+    llvmPackages.openmp
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Fitting power-law distributions to empirical data";
+    homepage = "https://github.com/ntamas/plfit";
+    changelog = "https://github.com/ntamas/plfit/blob/${finalAttrs.src.rev}/CHANGELOG.md";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/plocate/default.nix b/nixpkgs/pkgs/tools/misc/plocate/default.nix
new file mode 100644
index 000000000000..b44cb0b14860
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plocate/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, lib
+, fetchgit
+, pkg-config
+, meson
+, ninja
+, systemd
+, liburing
+, zstd
+}:
+stdenv.mkDerivation rec {
+  pname = "plocate";
+  version = "1.1.22";
+
+  src = fetchgit {
+    url = "https://git.sesse.net/plocate";
+    rev = version;
+    sha256 = "sha256-ejv1IsjbImnvI1oorvMoIvTBu3HuVy7VtgHNTIkqqro=";
+  };
+
+  postPatch = ''
+    sed -i meson.build \
+      -e '/mkdir\.sh/d'
+  '';
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+
+  buildInputs = [ systemd liburing zstd ];
+
+  mesonFlags = [
+    "-Dsystemunitdir=${placeholder "out"}/etc/systemd/system"
+    "-Dsharedstatedir=/var/cache"
+    "-Ddbpath=locatedb"
+  ];
+
+  meta = with lib; {
+    description = "Much faster locate";
+    homepage = "https://plocate.sesse.net/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg SuperSandro2000 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plotinus/default.nix b/nixpkgs/pkgs/tools/misc/plotinus/default.nix
new file mode 100644
index 000000000000..112010c80082
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plotinus/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv
+, fetchFromGitHub
+, gettext
+, libxml2
+, pkg-config
+, gtk3
+, cmake
+, ninja
+, vala
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "plotinus";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "p-e-w";
+    repo = "plotinus";
+    rev = "v${version}";
+    sha256 = "19k6f6ivg4ab57m62g6fkg85q9sv049snmzq1fyqnqijggwshxfz";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook
+    vala
+    cmake
+    ninja
+    gettext
+    libxml2
+  ];
+  buildInputs = [
+    gtk3
+  ];
+
+  meta = with lib; {
+    description = "A searchable command palette in every modern GTK application";
+    homepage = "https://github.com/p-e-w/plotinus";
+    maintainers = with maintainers; [ samdroid-apps ];
+    platforms = platforms.linux;
+    # No COPYING file, but headers in the source code
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/plowshare/default.nix b/nixpkgs/pkgs/tools/misc/plowshare/default.nix
new file mode 100644
index 000000000000..4a87e5787bd2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/plowshare/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, curl, recode, spidermonkey_102 }:
+
+stdenv.mkDerivation rec {
+
+  pname = "plowshare";
+  version = "2.1.7";
+
+  src = fetchFromGitHub {
+    owner = "mcrapet";
+    repo = "plowshare";
+    rev = "v${version}";
+    sha256 = "1p8s60dlzaldp006yj710s371aan915asyjhd99188vrj4jj1x79";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    make PREFIX="$out" install
+
+    for fn in plow{del,down,list,mod,probe,up}; do
+      wrapProgram "$out/bin/$fn" --prefix PATH : "${lib.makeBinPath [ curl recode spidermonkey_102 ]}"
+    done
+  '';
+
+  meta = {
+    description = ''
+      A command-line download/upload tool for popular file sharing websites
+    '';
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ aforemny ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pmbootstrap/default.nix b/nixpkgs/pkgs/tools/misc/pmbootstrap/default.nix
new file mode 100644
index 000000000000..03cc7997e225
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pmbootstrap/default.nix
@@ -0,0 +1,104 @@
+{ stdenv, lib, git, openssl, buildPythonApplication, pytestCheckHook, ps
+, fetchPypi, fetchFromGitLab, sudo }:
+
+buildPythonApplication rec {
+  pname = "pmbootstrap";
+  version = "2.2.0";
+
+  src = fetchFromGitLab {
+    owner = "postmarketos";
+    repo = pname;
+    rev = version;
+    hash = "sha256-wRJvvABIUPh79QfS8VcwRueB/vO9oGcqyE/OugfTsd8=";
+  };
+
+  pmb_test = "${src}/test";
+
+  # Tests depend on sudo
+  doCheck = stdenv.isLinux;
+
+  nativeCheckInputs = [ pytestCheckHook git openssl ps sudo ];
+
+  # Add test dependency in PATH
+  preCheck = "export PYTHONPATH=$PYTHONPATH:${pmb_test}";
+
+  # skip impure tests
+  disabledTests = [
+    "test_apk_static"
+    "test_aportgen"
+    "test_aportgen_device_wizard"
+    "test_bootimg"
+    "test_build_abuild_leftovers"
+    "test_build_depends_binary_outdated"
+    "test_build_depends_high_level"
+    "test_build_depends_no_binary_error"
+    "test_build_is_necessary"
+    "test_build_local_source_high_level"
+    "test_build_src_invalid_path"
+    "test_check"
+    "test_can_fast_forward"
+    "test_check_build_for_arch"
+    "test_check_config"
+    "test_chroot_arguments"
+    "test_chroot_interactive_shell"
+    "test_chroot_interactive_shell_user"
+    "test_chroot_mount"
+    "test_clean_worktree"
+    "test_config_user"
+    "test_cross_compile_distcc"
+    "test_crossdirect"
+    "test_extract_arch"
+    "test_extract_version"
+    "test_file"
+    "test_filter_aport_packages"
+    "test_filter_missing_packages_binary_exists"
+    "test_filter_missing_packages_invalid"
+    "test_filter_missing_packages_pmaports"
+    "test_finish"
+    "test_folder_size"
+    "test_get_all_component_names"
+    "test_get_apkbuild"
+    "test_get_depends"
+    "test_get_upstream_remote"
+    "test_helpers_lint"
+    "test_helpers_package_get_apkindex"
+    "test_helpers_repo"
+    "test_helpers_ui"
+    "test_init_buildenv"
+    "test_kconfig_check"
+    "test_keys"
+    "test_newapkbuild"
+    "test_package"
+    "test_package_from_aports"
+    "test_pkgrel_bump"
+    "test_pmbootstrap_status"
+    "test_print_checks_git_repo"
+    "test_proxy"
+    "test_pull"
+    "test_qemu_running_processes"
+    "test_questions_additional_options"
+    "test_questions_bootimg"
+    "test_questions_channel"
+    "test_questions_keymaps"
+    "test_questions_work_path"
+    "test_read_config_channel"
+    "test_recurse_invalid"
+    "test_run_abuild"
+    "test_run_core"
+    "test_shell_escape"
+    "test_skip_already_built"
+    "test_switch_to_channel_branch"
+    "test_version"
+  ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ git openssl ]}" ];
+
+  meta = with lib; {
+    description =
+      "Sophisticated chroot/build/flash tool to develop and install postmarketOS";
+    homepage = "https://gitlab.com/postmarketOS/pmbootstrap";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ onny ];
+    mainProgram = "pmbootstrap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix b/nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix
new file mode 100644
index 000000000000..eba487a57fb7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pod2mdoc/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pod2mdoc";
+  version = "0.0.10";
+
+  src = fetchurl {
+    url = "http://mdocml.bsd.lv/pod2mdoc/snapshots/${pname}-${version}.tgz";
+    sha256 = "0nwa9zv9gmfi5ysz1wfm60kahc7nv0133n3dfc2vh2y3gj8mxr4f";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+    install -m 0755 pod2mdoc $out/bin
+    install -m 0444 pod2mdoc.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    homepage = "http://mdocml.bsd.lv/";
+    description = "converter from POD into mdoc";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ramkromberg ];
+    mainProgram = "pod2mdoc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pokeget-rs/default.nix b/nixpkgs/pkgs/tools/misc/pokeget-rs/default.nix
new file mode 100644
index 000000000000..2505fd2f9678
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pokeget-rs/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pokeget-rs";
+  version = "1.4.2-2";
+
+  src = fetchFromGitHub {
+    owner = "talwat";
+    repo = "pokeget-rs";
+    rev = version;
+    hash = "sha256-RPdtwHJsXdjIAeJP/LPdJ7GjwdIngM3eZO/A8InTpXQ=";
+    fetchSubmodules = true;
+  };
+
+  cargoHash = "sha256-JeRSBG1HswttHOGyiNseFf2KiWkumrzEIw76A80nQHM=";
+
+  meta = with lib; {
+    description = "A better rust version of pokeget";
+    homepage = "https://github.com/talwat/pokeget-rs";
+    license = licenses.mit;
+    mainProgram = "pokeget";
+    maintainers = with maintainers; [ aleksana ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pokemonsay/default.nix b/nixpkgs/pkgs/tools/misc/pokemonsay/default.nix
new file mode 100644
index 000000000000..669fa6a49413
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pokemonsay/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, fetchpatch
+, cowsay
+, coreutils
+, findutils
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "pokemonsay";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "HRKings";
+    repo = "pokemonsay-newgenerations";
+    rev = "v${version}";
+    hash = "sha256-IDTAZmOzkUg0kLUM0oWuVbi8EwE4sEpLWrNAtq/he+g=";
+  };
+
+  patches = [
+    (fetchpatch { # https://github.com/HRKings/pokemonsay-newgenerations/pull/5
+      name = "word-wrap-fix.patch";
+      url = "https://github.com/pbsds/pokemonsay-newgenerations/commit/7056d7ba689479a8e6c14ec000be1dfcd83afeb0.patch";
+      hash = "sha256-aqUJkyJDWArLjChxLZ4BbC6XAB53LAqARzTvEAxrFCI=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace pokemonsay.sh \
+      --replace-fail \
+        'INSTALL_PATH=''${HOME}/.bin/pokemonsay' \
+        "" \
+      --replace-fail \
+        'POKEMON_PATH=''${INSTALL_PATH}/pokemons' \
+        'POKEMON_PATH=${placeholder "out"}/share/pokemonsay' \
+      --replace-fail \
+        '$(find ' \
+        '$(${findutils}/bin/find ' \
+      --replace-fail \
+        '$(basename ' \
+        '$(${coreutils}/bin/basename ' \
+      --replace-fail \
+        'cowsay -f ' \
+        '${cowsay}/bin/cowsay -f ' \
+      --replace-fail \
+        'cowthink -f ' \
+        '${cowsay}/bin/cowthink -f '
+
+    substituteInPlace pokemonthink.sh \
+      --replace-fail \
+        './pokemonsay.sh' \
+        "${placeholder "out"}/bin/pokemonsay"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/pokemonsay}
+    cp pokemonsay.sh $out/bin/pokemonsay
+    cp pokemonthink.sh $out/bin/pokemonthink
+    cp pokemons/*.cow $out/share/pokemonsay
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    (set -x
+      test "$($out/bin/pokemonsay --list | wc -l)" -ge 891
+    )
+  '';
+
+  meta = with lib; {
+    description = "Print pokemon in the CLI! An adaptation of the classic cowsay";
+    homepage = "https://github.com/HRKings/pokemonsay-newgenerations";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ pbsds ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/polar/Gemfile b/nixpkgs/pkgs/tools/misc/polar/Gemfile
new file mode 100644
index 000000000000..65e27d167030
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/polar/Gemfile
@@ -0,0 +1,7 @@
+source 'https://rubygems.org'
+
+gem 'google-protobuf'
+gem 'libusb'
+gem 'rubyserial'
+gem 'nokogiri'
+
diff --git a/nixpkgs/pkgs/tools/misc/polar/Gemfile.lock b/nixpkgs/pkgs/tools/misc/polar/Gemfile.lock
new file mode 100644
index 000000000000..bd3b0226510a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/polar/Gemfile.lock
@@ -0,0 +1,27 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    ffi (1.15.0)
+    google-protobuf (3.15.6)
+    libusb (0.6.4)
+      ffi (~> 1.0)
+      mini_portile2 (~> 2.1)
+    mini_portile2 (2.5.0)
+    nokogiri (1.11.2)
+      mini_portile2 (~> 2.5.0)
+      racc (~> 1.4)
+    racc (1.5.2)
+    rubyserial (0.6.0)
+      ffi (~> 1.9, >= 1.9.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  google-protobuf
+  libusb
+  nokogiri
+  rubyserial
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/polar/default.nix b/nixpkgs/pkgs/tools/misc/polar/default.nix
new file mode 100644
index 000000000000..2edf40ffb292
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/polar/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchFromGitHub, ruby, bundlerEnv }:
+let
+
+  # To create Gemfile.lock and gemset.nix
+  # > nix-shell -p bundix bundler zlib
+  # > bundle install
+  # > bundix
+  gems = bundlerEnv {
+    name = "polar-env";
+    inherit ruby;
+    gemdir = ./.;
+  };
+
+in
+stdenv.mkDerivation rec {
+
+  pname = "polar";
+  # The package has no releases so let's use the latest commit
+  version = "unstable-2021-01-12";
+
+  src = fetchFromGitHub {
+    owner = "cmaion";
+    repo = pname;
+    rev = "be15f5f897f8a919dd639009873147dca2a9cea0";
+    sha256 = "0gqkqfrqnrsy6avg372xwqj22yz8g6r2hnzbw6197b1rf7zr1il7";
+  };
+
+  prePatch = ''
+    for script in polar_*
+    do
+      substituteInPlace $script --replace "#{File.dirname(__FILE__)}/lib" "$out/lib/polar"
+    done
+  '';
+  buildInputs = [ gems ruby ];
+
+  # See: https://wiki.nixos.org/wiki/Packaging/Ruby
+  #
+  # Put library content under lib/polar and the raw scripts under share/polar.
+  # Then, wrap the scripts so that they use the correct ruby environment and put
+  # these wrapped executables under bin.
+  installPhase = ''
+    install -Dm644 -t $out/etc/udev/rules.d ./pkg/99-polar.rules
+    mkdir -p $out/{bin,lib/polar,share/polar}
+    cp -r lib/* $out/lib/polar/
+    for script in ./polar_*
+    do
+      raw="$out/share/polar/$script"
+      bin="$out/bin/$script"
+      cp "$script" "$raw"
+      cat > $bin <<EOF
+#!/bin/sh -e
+exec ${gems}/bin/bundle exec ${ruby}/bin/ruby "$raw" "\$@"
+EOF
+      chmod +x $bin
+    done
+  '';
+
+  meta = with lib; {
+    description = "Command-line tools to interact with Polar watches";
+    longDescription = ''
+      A set of command line tools written in Ruby to interact with Polar watches
+      and decode raw data files.
+
+      Udev rules can be added as:
+
+        services.udev.packages = [ pkgs.polar ]
+    '';
+    homepage = "https://github.com/cmaion/polar";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ jluttine ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/polar/gemset.nix b/nixpkgs/pkgs/tools/misc/polar/gemset.nix
new file mode 100644
index 000000000000..4e360d9b21cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/polar/gemset.nix
@@ -0,0 +1,75 @@
+{
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nq1fb3vbfylccwba64zblxy96qznxbys5900wd7gm9bpplmf432";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  google-protobuf = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ak5yqqhr04b4x0axzvpw1xzwmxmfcw0gf4r1ijixv15kidhsj3z";
+      type = "gem";
+    };
+    version = "3.15.6";
+  };
+  libusb = {
+    dependencies = ["ffi" "mini_portile2"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "005q4f3bi68yapza1vxamgwz2gpix2akci52s4yvr03hsxi137a6";
+      type = "gem";
+    };
+    version = "0.6.4";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hdbpmamx8js53yk3h8cqy12kgv6ca06k0c9n3pxh6b6cjfs19x7";
+      type = "gem";
+    };
+    version = "2.5.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";
+  };
+  rubyserial = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vj5yan6srbvkf5vfp9d9b9z8wyygd0zxcy54c35yhkjl6kwd22q";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ponysay/default.nix b/nixpkgs/pkgs/tools/misc/ponysay/default.nix
new file mode 100644
index 000000000000..2fb48f05850e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ponysay/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, python3, texinfo, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "ponysay";
+  version = "unstable-2021-03-27";
+
+  src = fetchFromGitHub {
+    owner = "erkin";
+    repo = "ponysay";
+    rev = "8a2c71416e70e4e7b0931917ebfd6479f51ddf9a";
+    sha256 = "sha256-LNc83E+7NFYYILORElNlYC7arQKGUJHv6phu+vM5xpQ=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ python3 texinfo ];
+
+  inherit python3;
+
+  installPhase = ''
+    find -type f -name "*.py" | xargs sed -i "s@/usr/bin/env python3@$python3/bin/python3@g"
+    substituteInPlace setup.py --replace \
+        "fileout.write(('#!/usr/bin/env %s\n' % env).encode('utf-8'))" \
+        "fileout.write(('#!%s/bin/%s\n' % (os.environ['python3'], env)).encode('utf-8'))"
+    python3 setup.py --prefix=$out --freedom=partial install \
+        --with-shared-cache=$out/share/ponysay \
+        --with-bash
+  '';
+
+  meta = with lib; {
+    description = "Cowsay reimplemention for ponies";
+    homepage = "https://github.com/erkin/ponysay";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ bodil ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/poop/default.nix b/nixpkgs/pkgs/tools/misc/poop/default.nix
new file mode 100644
index 000000000000..d3b444d9472f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/poop/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, zig_0_11
+}:
+
+stdenv.mkDerivation rec {
+  pname = "poop";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "andrewrk";
+    repo = "poop";
+    rev = version;
+    hash = "sha256-ekZpulQ1NpEOCG9KU2I4O0NL8mD+CC7bKF0tZbl7vHo=";
+  };
+
+  # fix compilation with zig 0.11
+  patches = [
+    # https://github.com/andrewrk/poop/pull/41
+    (fetchpatch {
+      name = "update-to-zig-0-11-0.patch";
+      url = "https://github.com/andrewrk/poop/commit/15c794d9dea91570485104cda26346f2ae5c9365.patch";
+      hash = "sha256-iv3IuYIDPzs98wiTXcO0igngaRRdQnASvzA4bYET54c=";
+    })
+    # https://github.com/andrewrk/poop/pull/36
+    (fetchpatch {
+      name = "update-zig-to-latest-0-11-0-dev-3883-7166407d8.patch";
+      url = "https://github.com/andrewrk/poop/commit/b1ca37c0cf637e9bbbf24cd243bafaedf02fa8c7.patch";
+      hash = "sha256-/j2zqi0Q2Pl7ZL+4GflwD/MnqcKScT/1SdYJAQ3o4bU=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    zig_0_11.hook
+  ];
+
+  meta = with lib; {
+    description = "Compare the performance of multiple commands with a colorful terminal user interface";
+    homepage = "https://github.com/andrewrk/poop";
+    changelog = "https://github.com/andrewrk/poop/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    platforms = platforms.linux;
+    mainProgram = "poop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/popsicle/Cargo.lock b/nixpkgs/pkgs/tools/misc/popsicle/Cargo.lock
new file mode 100644
index 000000000000..5e91d597cc6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/popsicle/Cargo.lock
@@ -0,0 +1,2782 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "as-result"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3702cac3c1601410cd655ae41650c4c87f7c3183dca6d1cd9acc4220ed56a8b7"
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 2.5.3",
+ "futures-core",
+]
+
+[[package]]
+name = "async-channel"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 4.0.2",
+ "event-listener-strategy",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c"
+dependencies = [
+ "async-lock 3.2.0",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 2.0.1",
+ "futures-lite 2.1.0",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c"
+dependencies = [
+ "async-channel 2.1.1",
+ "async-executor",
+ "async-io 2.2.2",
+ "async-lock 3.2.0",
+ "blocking",
+ "futures-lite 2.1.0",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock 2.8.0",
+ "autocfg",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-lite 1.13.0",
+ "log",
+ "parking",
+ "polling 2.8.0",
+ "rustix 0.37.27",
+ "slab",
+ "socket2",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-io"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7"
+dependencies = [
+ "async-lock 3.2.0",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-io",
+ "futures-lite 2.1.0",
+ "parking",
+ "polling 3.3.1",
+ "rustix 0.38.28",
+ "slab",
+ "tracing",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener 2.5.3",
+]
+
+[[package]]
+name = "async-lock"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c"
+dependencies = [
+ "event-listener 4.0.2",
+ "event-listener-strategy",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel 1.9.0",
+ "async-global-executor",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite 1.13.0",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-task"
+version = "4.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799"
+
+[[package]]
+name = "atk"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ba16453d10c712284061a05f6510f75abeb92b56ba88dfeb48c74775020cc22"
+dependencies = [
+ "atk-sys",
+ "bitflags 1.3.2",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf0a7ca572fbd5762fd8f8cd65a581e06767bc1234913fe1f43e370cff6e90"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "atomic"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d818003e740b63afc82337e3160717f4f63078720a810b7b903e70a5d1d2994"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "better-panic"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fa9e1d11a268684cbd90ed36370d7577afb6c62d912ddff5c15fc34343e5036"
+dependencies = [
+ "backtrace",
+ "console",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.63.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36d860121800b2a9a94f9b5604b332d5cffb234ce17609ea479d723dbc9d3885"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118"
+dependencies = [
+ "async-channel 2.1.1",
+ "async-lock 3.2.0",
+ "async-task",
+ "fastrand 2.0.1",
+ "futures-io",
+ "futures-lite 2.1.0",
+ "piper",
+ "tracing",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+
+[[package]]
+name = "bytes"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
+
+[[package]]
+name = "bytesize"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc"
+
+[[package]]
+name = "cairo-rs"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab3603c4028a5e368d09b51c8b624b9a46edcd7c3778284077a6125af73c9f0a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "691d0c66b1fb4881be80a760cb8fe76ea97218312f9dfe2c9cc0f496ca279cb1"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "cascade"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d499b43edbf784dd81e16f0395f5b4350a35b477da8a074251087adefc11cb52"
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a"
+dependencies = [
+ "smallvec",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "clang-sys"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "4.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52bdc885e4cacc7f7c9eedc1ef6da641603180c783c41a15c264944deeaab642"
+dependencies = [
+ "clap_builder",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb7fb5e4e979aec3be7791562fcba452f94ad85e954da024396433e0e25a79e9"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "dbus"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
+dependencies = [
+ "libc",
+ "libdbus-sys",
+ "winapi",
+]
+
+[[package]]
+name = "dbus-udisks2"
+version = "0.3.0"
+source = "git+https://github.com/pop-os/dbus-udisks2#15c4e70f029c6546e96f8c5b2fb78c9504cf9f28"
+dependencies = [
+ "dbus",
+ "num_enum",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "derive-new"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+]
+
+[[package]]
+name = "displaydoc"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "event-listener"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "218a870470cce1469024e9fb66b901aa983929d81304a1cdb299f28118e550d5"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener-strategy"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3"
+dependencies = [
+ "event-listener 4.0.2",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "field-offset"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
+dependencies = [
+ "memoffset",
+ "rustc_version",
+]
+
+[[package]]
+name = "find-crate"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "fluent"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61f69378194459db76abd2ce3952b790db103ceb003008d3d50d97c41ff847a7"
+dependencies = [
+ "fluent-bundle",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-bundle"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e242c601dec9711505f6d5bbff5bedd4b61b2469f2e8bb8e57ee7c9747a87ffd"
+dependencies = [
+ "fluent-langneg",
+ "fluent-syntax",
+ "intl-memoizer",
+ "intl_pluralrules",
+ "rustc-hash",
+ "self_cell 0.10.3",
+ "smallvec",
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-langneg"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "fluent-syntax"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0abed97648395c902868fee9026de96483933faa54ea3b40d652f7dfe61ca78"
+dependencies = [
+ "thiserror",
+]
+
+[[package]]
+name = "fomat-macros"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f722aa875298d34a0ebb6004699f6f4ea830d36dec8ac2effdbbc840248a096"
+
+[[package]]
+name = "futures"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-lite"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143"
+dependencies = [
+ "fastrand 2.0.1",
+ "futures-core",
+ "futures-io",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "futures_codec"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce54d63f8b0c75023ed920d46fd71d0cbbb830b0ee012726b5b4f506fb6dea5b"
+dependencies = [
+ "bytes",
+ "futures",
+ "memchr",
+ "pin-project",
+]
+
+[[package]]
+name = "gdk"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be1df5ea52cccd7e3a0897338b5564968274b52f5fd12601e0afa44f454c74d3"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "695d6bc846438c5708b07007537b9274d883373dd30858ca881d7d71b5540717"
+dependencies = [
+ "bitflags 1.3.2",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9285ec3c113c66d7d0ab5676599176f1f42f4944ca1b581852215bf5694870cb"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2152de9d38bc67a17b3fe49dc0823af5bf874df59ea088c5f28f31cf103de703"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "genawaiter"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1236259ce812baf9e1d1e316724e0fec341ce788f038aa543f813dfe78e12d32"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "gio"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6973e92937cf98689b6a054a9e56c657ed4ff76de925e36fc331a15f0c5d30a"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "pin-project-lite",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ccf87c30a12c469b6d958950f6a9c09f2be20b7773f7e70d20b867fdf2628c3"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3fad45ba8d4d2cea612b432717e834f48031cd8853c8aaf43b2c79fec8d144b"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "gio-sys",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "memchr",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eca5c79337338391f1ab8058d6698125034ce8ef31b72a442437fa6c8580de26"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d80aa6ea7bba0baac79222204aa786a6293078c210abe69ef1336911d4bdc4f0"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd34c3317740a6358ec04572c1bcfd3ac0b5b6529275fae255b237b314bb8062"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c4222ab92b08d4d0bab90ddb6185b4e575ceeea8b8cdf00b938d7b6661d966"
+dependencies = [
+ "atk",
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk",
+ "gdk-pixbuf",
+ "gio",
+ "glib",
+ "gtk-sys",
+ "gtk3-macros",
+ "libc",
+ "once_cell",
+ "pango",
+ "pkg-config",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d8eb6a4b93e5a7e6980f7348d08c1cd93d31fae07cf97f20678c5ec41de3d7e"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk3-macros"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3efb84d682c9a39c10bd9f24f5a4b9c15cc8c7edc45c19cb2ca2c4fc38b2d95e"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "hex-view"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "494e16c9fe4dd02a88f3fe9ec0f27e38045691ea0ceb11603670f220ff5ca97f"
+
+[[package]]
+name = "i18n-config"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c9ce3c48cbc21fd5b22b9331f32b5b51f6ad85d969b99e793427332e76e7640"
+dependencies = [
+ "log",
+ "serde",
+ "serde_derive",
+ "thiserror",
+ "toml 0.8.8",
+ "unic-langid",
+]
+
+[[package]]
+name = "i18n-embed"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94205d95764f5bb9db9ea98fa77f89653365ca748e27161f5bbea2ffd50e459c"
+dependencies = [
+ "arc-swap",
+ "fluent",
+ "fluent-langneg",
+ "fluent-syntax",
+ "i18n-embed-impl",
+ "intl-memoizer",
+ "lazy_static",
+ "locale_config",
+ "log",
+ "parking_lot",
+ "rust-embed",
+ "thiserror",
+ "unic-langid",
+ "walkdir",
+]
+
+[[package]]
+name = "i18n-embed-fl"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fc1f8715195dffc4caddcf1cf3128da15fe5d8a137606ea8856c9300047d5a2"
+dependencies = [
+ "dashmap",
+ "find-crate",
+ "fluent",
+ "fluent-syntax",
+ "i18n-config",
+ "i18n-embed",
+ "lazy_static",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.48",
+ "unic-langid",
+]
+
+[[package]]
+name = "i18n-embed-impl"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81093c4701672f59416582fe3145676126fd23ba5db910acad0793c1108aaa58"
+dependencies = [
+ "find-crate",
+ "i18n-config",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "intl-memoizer"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c310433e4a310918d6ed9243542a6b83ec1183df95dff8f23f87bb88a264a66f"
+dependencies = [
+ "type-map",
+ "unic-langid",
+]
+
+[[package]]
+name = "intl_pluralrules"
+version = "7.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972"
+dependencies = [
+ "unic-langid",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iso9660"
+version = "0.1.1"
+source = "git+https://github.com/ids1024/iso9660-rs#1fbe255a9dc036686ed3b129ed4c6e230fa134b7"
+dependencies = [
+ "bitflags 2.4.1",
+ "nom",
+ "time",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "libc"
+version = "0.2.151"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4"
+
+[[package]]
+name = "libdbus-sys"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "libloading"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
+
+[[package]]
+name = "locale_config"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d2c35b16f4483f6c26f0e4e9550717a2f6575bcd6f12a53ff0c490a94a6934"
+dependencies = [
+ "lazy_static",
+ "objc",
+ "objc-foundation",
+ "regex",
+ "winapi",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+dependencies = [
+ "value-bag",
+]
+
+[[package]]
+name = "loopdev-erikh"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac18afc683a3326b4ba3a7c783ae6613095c8ce49e0d7bce41a2bd58da319b8d"
+dependencies = [
+ "bindgen",
+ "errno 0.2.8",
+ "libc",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "md-5"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if",
+ "digest",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mnt"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1587ebb20a5b04738f16cffa7e2526f1b8496b84f92920facd518362ff1559eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "objc-foundation"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9"
+dependencies = [
+ "block",
+ "objc",
+ "objc_id",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "object"
+version = "0.32.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "pango"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35be456fc620e61f62dff7ff70fbd54dcbaf0a4b920c0f16de1107c47d921d48"
+dependencies = [
+ "bitflags 1.3.2",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3da69f9f3850b0d8990d462f8c709561975e95f689c1cdf0fecdebde78b35195"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "pbr"
+version = "1.1.1"
+source = "git+https://github.com/ids1024/pb?branch=write#225bf70cdaf86193c4a6e65079ebccc1b2196c57"
+dependencies = [
+ "crossbeam-channel",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pin-project"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ef0f924a5ee7ea9cbcea77529dba45f8a9ba9f622419fe3386ca581a3ae9d5a"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "851c8d0ce9bebe43790dedfc86614c23494ac9f423dd618d3a61fc693eafe61e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "piper"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+dependencies = [
+ "atomic-waker",
+ "fastrand 2.0.1",
+ "futures-io",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a"
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "polling"
+version = "3.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf63fa624ab313c11656b4cda960bfc46c410187ad493c41f6ba2d8c1e991c9e"
+dependencies = [
+ "cfg-if",
+ "concurrent-queue",
+ "pin-project-lite",
+ "rustix 0.38.28",
+ "tracing",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "popsicle"
+version = "1.3.3"
+dependencies = [
+ "anyhow",
+ "as-result",
+ "async-std",
+ "derive-new",
+ "futures",
+ "futures_codec",
+ "libc",
+ "memchr",
+ "mnt",
+ "ron",
+ "serde",
+ "srmw",
+ "thiserror",
+ "usb-disk-probe",
+]
+
+[[package]]
+name = "popsicle_cli"
+version = "1.3.3"
+dependencies = [
+ "anyhow",
+ "async-std",
+ "atty",
+ "better-panic",
+ "cascade",
+ "clap",
+ "derive-new",
+ "fomat-macros",
+ "futures",
+ "i18n-embed",
+ "i18n-embed-fl",
+ "libc",
+ "once_cell",
+ "pbr",
+ "popsicle",
+ "rust-embed",
+]
+
+[[package]]
+name = "popsicle_gtk"
+version = "1.3.3"
+dependencies = [
+ "anyhow",
+ "async-std",
+ "atomic",
+ "bytemuck",
+ "bytesize",
+ "cascade",
+ "crossbeam-channel",
+ "dbus",
+ "dbus-udisks2",
+ "digest",
+ "futures",
+ "gdk",
+ "gdk-pixbuf",
+ "gio",
+ "glib",
+ "gtk",
+ "hex-view",
+ "i18n-embed",
+ "i18n-embed-fl",
+ "iso9660",
+ "libc",
+ "md-5",
+ "once_cell",
+ "pango",
+ "popsicle",
+ "pwd",
+ "rust-embed",
+ "sha-1",
+ "sha2",
+ "sys-mount",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "907a61bd0f64c2f29cd1cf1dc34d05176426a3f504a78010f08416ddb7b13708"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pwd"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72c71c0c79b9701efe4e1e4b563b2016dd4ee789eb99badcb09d61ac4b92e4a2"
+dependencies = [
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "ron"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
+dependencies = [
+ "base64",
+ "bitflags 2.4.1",
+ "serde",
+ "serde_derive",
+]
+
+[[package]]
+name = "rust-embed"
+version = "8.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a82c0bbc10308ed323529fd3c1dce8badda635aa319a5ff0e6466f33b8101e3f"
+dependencies = [
+ "rust-embed-impl",
+ "rust-embed-utils",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-impl"
+version = "8.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6227c01b1783cdfee1bcf844eb44594cd16ec71c35305bf1c9fb5aade2735e16"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rust-embed-utils",
+ "syn 2.0.48",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-utils"
+version = "8.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cb0a25bfbb2d4b4402179c2cf030387d9990857ce08a32592c6238db9fa8665"
+dependencies = [
+ "sha2",
+ "walkdir",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno 0.3.8",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno 0.3.8",
+ "libc",
+ "linux-raw-sys 0.4.12",
+ "windows-sys 0.52.0",
+]
+
+[[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 = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "self_cell"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d"
+dependencies = [
+ "self_cell 1.0.3",
+]
+
+[[package]]
+name = "self_cell"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba"
+
+[[package]]
+name = "semver"
+version = "1.0.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
+
+[[package]]
+name = "serde"
+version = "1.0.194"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b114498256798c94a0689e1a15fec6005dee8ac1f41de56404b67afc2a4b773"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.194"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3385e45322e8f9931410f01b3031ec534c3947d0e94c18049af4d9f9907d4e0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+ "sha1-asm",
+]
+
+[[package]]
+name = "sha1-asm"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ba6947745e7f86be3b8af00b7355857085dbdf8901393c89514510eb61f4e21"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+
+[[package]]
+name = "smart-default"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0eb01866308440fc64d6c44d9e86c5cc17adfe33c4d6eed55da9145044d0ffc1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "srmw"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f554d8c36d9555945af2065c967bce4e307484f436045ab7d6463075cb757ac2"
+dependencies = [
+ "async-std",
+ "futures",
+ "genawaiter",
+ "slab",
+ "thiserror",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sys-mount"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65a290d26aaf4d91fc55cf2afde5079c14e5e4ebffebe8f847234b0dc0df8742"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "loopdev-erikh",
+ "smart-default",
+ "thiserror",
+ "tracing",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml 0.8.8",
+ "version-compare",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae"
+
+[[package]]
+name = "thiserror"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "time"
+version = "0.3.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e"
+dependencies = [
+ "deranged",
+ "powerfmt",
+ "serde",
+ "time-core",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "tinystr"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83c02bf3c538ab32ba913408224323915f4ef9a6d61c0e85d493f355921c0ece"
+dependencies = [
+ "displaydoc",
+]
+
+[[package]]
+name = "tokio"
+version = "1.35.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
+dependencies = [
+ "backtrace",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.21.0",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
+dependencies = [
+ "indexmap",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "type-map"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6d3364c5e96cb2ad1603037ab253ddd34d7fb72a58bdddf4b7350760fc69a46"
+dependencies = [
+ "rustc-hash",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unic-langid"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238722e6d794ed130f91f4ea33e01fcff4f188d92337a21297892521c72df516"
+dependencies = [
+ "unic-langid-impl",
+]
+
+[[package]]
+name = "unic-langid-impl"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bd55a2063fdea4ef1f8633243a7b0524cbeef1905ae04c31a1c9b9775c55bc6"
+dependencies = [
+ "serde",
+ "tinystr",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "usb-disk-probe"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf22ef5fa3663ec0ceaa44d9b36c9c1336f5639ed18d72a617cdcbaaad18a276"
+dependencies = [
+ "futures",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "value-bag"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62ce5bb364b23e66b528d03168df78b38c0f7b6fe17386928f29d5ab2e7cb2f7"
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "waker-fn"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.89"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f"
+
+[[package]]
+name = "web-sys"
+version = "0.3.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+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 = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8434aeec7b290e8da5c3f0d628cb0eac6cabcb31d14bb74f779a08109a5914d6"
+dependencies = [
+ "memchr",
+]
diff --git a/nixpkgs/pkgs/tools/misc/popsicle/default.nix b/nixpkgs/pkgs/tools/misc/popsicle/default.nix
new file mode 100644
index 000000000000..c5a9e5edc738
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/popsicle/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, cargo
+, glib
+, pkg-config
+, rustc
+, wrapGAppsHook
+, gdk-pixbuf
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "popsicle";
+  version = "1.3.3";
+
+  src = fetchFromGitHub {
+    owner = "pop-os";
+    repo = "popsicle";
+    rev = version;
+    hash = "sha256-sWQNav7odvX+peDglLHd7Jrmvhm5ddFBLBla0WK7wcE=";
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "dbus-udisks2-0.3.0" = "sha256-VtwUUXVPyqvcOtphBH42CkRmW5jI+br9oDJ9wY40hsE=";
+      "iso9660-0.1.1" = "sha256-CXgvQvNbUWuNDpw92djkK1PZ2GbGj5KSNzkjAsNEDrU=";
+      "pbr-1.1.1" = "sha256-KfzPhDiFj6jm1GASXnSoppkHrzoHst7v7cSNTDC/2FM=";
+    };
+  };
+
+  nativeBuildInputs = [
+    cargo
+    glib
+    pkg-config
+    rustPlatform.bindgenHook
+    rustPlatform.cargoSetupHook
+    rustc
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    gtk3
+  ];
+
+  makeFlags = [
+    "prefix=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "Multiple USB File Flasher";
+    homepage = "https://github.com/pop-os/popsicle";
+    changelog = "https://github.com/pop-os/popsicle/releases/tag/${version}";
+    maintainers = with maintainers; [ _13r0ck figsoda ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/portal/default.nix b/nixpkgs/pkgs/tools/misc/portal/default.nix
new file mode 100644
index 000000000000..3577f0f0b31a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/portal/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "portal";
+  version = "1.2.3";
+
+  src = fetchFromGitHub {
+    owner = "SpatiumPortae";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hGB82a2WirUL1Tph6EuoITOQGYA0Lo4zOeKPC46B5Qk=";
+  };
+
+  vendorHash = "sha256-SbNFi5DE3zhTUw0rsX6n+dpYcdDsaDh+zVUrfxgo/4g=";
+  subPackages = [ "cmd/portal/" ];
+
+  ldflags = [ "-s -X main.version=${version}" ]; # from: https://github.com/SpatiumPortae/portal/blob/master/Makefile#L3
+
+  meta = with lib; {
+    description = "A quick and easy command-line file transfer utility from any computer to another";
+    homepage = "https://github.com/SpatiumPortae/portal";
+    changelog = "https://github.com/SpatiumPortae/portal/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tennox ];
+    mainProgram = "portal";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pouf/default.nix b/nixpkgs/pkgs/tools/misc/pouf/default.nix
new file mode 100644
index 000000000000..e114af2c2c1e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pouf/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pouf";
+  version = "0.6.3";
+
+  src = fetchFromGitHub {
+    owner = "mothsart";
+    repo = pname;
+    rev = version;
+    hash = "sha256-tW86b9a7u1jyfmHjwjs+5DaUujRZH+VhGQsj0CBj0yk=";
+  };
+
+  cargoHash = "sha256-rVJAaeg27SdM8cTx12rKLIGEYtXUhLHXUYpT78oVNlo=";
+
+  # Cargo.lock is outdated.
+  preConfigure = ''
+    cargo update --offline
+  '';
+
+  postInstall = "make PREFIX=$out copy-data";
+
+  meta = with lib; {
+    description = "A CLI program for produce fake datas";
+    homepage = "https://github.com/mothsart/pouf";
+    changelog = "https://github.com/mothsart/pouf/releases/tag/${version}";
+    maintainers = with maintainers; [ mothsart ];
+    license = with licenses; [ mit ];
+    mainProgram = "pouf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/poweralertd/default.nix b/nixpkgs/pkgs/tools/misc/poweralertd/default.nix
new file mode 100644
index 000000000000..c61f5af1b41d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/poweralertd/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromSourcehut, meson, ninja, pkg-config, scdoc, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "poweralertd";
+  version = "0.3.0";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromSourcehut {
+    owner = "~kennylevinsen";
+    repo = "poweralertd";
+    rev = version;
+    hash = "sha256-WzqThv3Vu8R+g6Bn8EfesRk18rchCvw/UMPwbn9YC80=";
+  };
+
+  postPatch = ''
+    substituteInPlace meson.build --replace-fail "systemd.get_pkgconfig_variable('systemduserunitdir')" "'${placeholder "out"}/lib/systemd/user'"
+  '';
+
+  buildInputs = [
+    systemd
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  depsBuildBuild = [
+    scdoc
+    pkg-config
+  ];
+
+  meta = with lib; {
+    description = "UPower-powered power alerter";
+    homepage = "https://git.sr.ht/~kennylevinsen/poweralertd";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ thibautmarty ];
+    mainProgram = "poweralertd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/powerline-go/default.nix b/nixpkgs/pkgs/tools/misc/powerline-go/default.nix
new file mode 100644
index 000000000000..2b328e474bb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/powerline-go/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "powerline-go";
+  version = "1.24";
+
+  src = fetchFromGitHub {
+    owner = "justjanne";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-3IeyxAc+FRcVsL9AiVr6Jku5f5y3MTT9SXwVQW9MkNo=";
+  };
+
+  vendorHash = "sha256-W7Lf9s689oJy4U5sQlkLt3INJwtvzU2pot3EFimp7Jw=";
+
+  meta = with lib; {
+    description = "A Powerline like prompt for Bash, ZSH and Fish";
+    homepage = "https://github.com/justjanne/powerline-go";
+    changelog = "https://github.com/justjanne/powerline-go/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ sifmelcara ];
+    mainProgram = "powerline-go";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/powerline-rs/default.nix b/nixpkgs/pkgs/tools/misc/powerline-rs/default.nix
new file mode 100644
index 000000000000..5edde7b3653f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/powerline-rs/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, rustPlatform, fetchFromGitLab, pkg-config, file, perl, curl, cmake, openssl, libssh2, libgit2, libzip, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "powerline-rs";
+  version = "0.2.0";
+
+  src = fetchFromGitLab {
+    owner = "jD91mZM2";
+    repo = "powerline-rs";
+    rev = version;
+
+    sha256 = "0rqlxxl58dpfvm2idhi0vzinraf4bgiapmawiih9wxs599fnhm3y";
+  };
+
+  cargoSha256 = "1i29wps7wz6b0qarqqg8rplq7ak1zz83k6m182sjk17cni74n21l";
+
+  nativeBuildInputs = [ pkg-config file perl cmake curl ];
+  buildInputs = [ openssl libssh2 libgit2 libzip ] ++ lib.optional stdenv.isDarwin Security;
+
+  COMPLETION_OUT = "out";
+  postInstall = ''
+    install -Dm 755 "${COMPLETION_OUT}/${pname}.bash" "$out/share/bash-completion/completions/${pname}"
+    install -Dm 755 "${COMPLETION_OUT}/${pname}.fish" "$out/share/fish/vendor_completions.d/${pname}"
+  '';
+
+  meta = with lib; {
+    description = "powerline-shell rewritten in Rust, inspired by powerline-go";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    mainProgram = "powerline-rs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pre-commit-hook-ensure-sops/default.nix b/nixpkgs/pkgs/tools/misc/pre-commit-hook-ensure-sops/default.nix
new file mode 100644
index 000000000000..3b0fcacd4892
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pre-commit-hook-ensure-sops/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, fetchpatch
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pre-commit-hook-ensure-sops";
+  version = "1.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "yuvipanda";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-8sMmHNzmYwOmHYSWoZ4rKb/2lKziFmT6ux+s+chd/Do=";
+  };
+
+  patches = [
+    # Add the command-line entrypoint to pyproject.toml
+    # Can be removed after v1.2 release that includes changes
+    (fetchpatch {
+      url =
+        "https://github.com/yuvipanda/pre-commit-hook-ensure-sops/commit/ed88126afa253df6009af7cbe5aa2369f963be1c.patch";
+      hash = "sha256-mMxAoC3WEciO799Rq8gZ2PJ6FT/GbeSpxlr1EPj7r4s=";
+    })
+  ];
+
+  propagatedBuildInputs = [
+    python3Packages.ruamel-yaml
+  ];
+
+  pythonImportsCheck = [
+    "pre_commit_hook_ensure_sops"
+  ];
+
+  # Test entrypoint
+  checkPhase = ''
+    runHook preCheck
+    $out/bin/pre-commit-hook-ensure-sops --help
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "pre-commit hook to ensure that files that should be encrypted with sops are";
+    homepage = "https://github.com/yuvipanda/pre-commit-hook-ensure-sops";
+    maintainers = with maintainers; [ nialov ];
+    license = licenses.bsd3;
+    mainProgram = "pre-commit-hook-ensure-sops";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pre-commit/default.nix b/nixpkgs/pkgs/tools/misc/pre-commit/default.nix
new file mode 100644
index 000000000000..535ce1a8c4da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pre-commit/default.nix
@@ -0,0 +1,192 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+, libiconv
+, cargo
+, coursier
+, dotnet-sdk
+, git
+, glibcLocales
+, go
+, nodejs
+, perl
+, cabal-install
+, testers
+, pre-commit
+}:
+
+with python3Packages;
+buildPythonApplication rec {
+  pname = "pre-commit";
+  version = "3.7.0";
+  format = "setuptools";
+
+  disabled = pythonOlder "3.9";
+
+  src = fetchFromGitHub {
+    owner = "pre-commit";
+    repo = "pre-commit";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-k9pC/GCtqLlK9PhZmx4EKWT1HDyl+KQubDFDQOZdKUQ=";
+  };
+
+  patches = [
+    ./languages-use-the-hardcoded-path-to-python-binaries.patch
+    ./hook-tmpl.patch
+    ./pygrep-pythonpath.patch
+  ];
+
+  propagatedBuildInputs = [
+    cfgv
+    identify
+    nodeenv
+    pyyaml
+    toml
+    virtualenv
+  ];
+
+  nativeCheckInputs = [
+    cargo
+    coursier
+    dotnet-sdk
+    git
+    glibcLocales
+    go
+    libiconv # For rust tests on Darwin
+    nodejs
+    perl
+    pytest-env
+    pytest-forked
+    pytest-xdist
+    pytestCheckHook
+    re-assert
+    cabal-install
+  ];
+
+  # i686-linux: dotnet-sdk not available
+  doCheck = stdenv.buildPlatform.system != "i686-linux";
+
+  postPatch = ''
+    substituteInPlace pre_commit/resources/hook-tmpl \
+      --subst-var-by pre-commit $out
+    substituteInPlace pre_commit/languages/python.py \
+      --subst-var-by virtualenv ${virtualenv}
+    substituteInPlace pre_commit/languages/node.py \
+      --subst-var-by nodeenv ${nodeenv}
+
+    patchShebangs pre_commit/resources/hook-tmpl
+  '';
+
+  pytestFlagsArray = [
+    "--forked"
+  ];
+
+  preCheck = lib.optionalString (!(stdenv.isLinux && stdenv.isAarch64)) ''
+    # Disable outline atomics for rust tests on aarch64-linux.
+    export RUSTFLAGS="-Ctarget-feature=-outline-atomics"
+  '' + ''
+    export GIT_AUTHOR_NAME=test GIT_COMMITTER_NAME=test \
+           GIT_AUTHOR_EMAIL=test@example.com GIT_COMMITTER_EMAIL=test@example.com \
+           VIRTUALENV_NO_DOWNLOAD=1 PRE_COMMIT_NO_CONCURRENCY=1 LANG=en_US.UTF-8
+
+    # Resolve `.NET location: Not found` errors for dotnet tests
+    export DOTNET_ROOT="${dotnet-sdk}"
+
+    export HOME=$(mktemp -d)
+
+    git init -b master
+
+    python -m venv --system-site-packages venv
+    source "$PWD/venv/bin/activate"
+  '';
+
+  postCheck = ''
+    deactivate
+  '';
+
+  # Propagating dependencies leaks them through $PYTHONPATH which causes issues
+  # when used in nix-shell.
+  postFixup = ''
+    rm $out/nix-support/propagated-build-inputs
+  '';
+
+  disabledTests = [
+    # ERROR: The install method you used for conda--probably either `pip install conda`
+    # or `easy_install conda`--is not compatible with using conda as an application.
+    "test_conda_"
+    "test_local_conda_"
+
+    # /build/pytest-of-nixbld/pytest-0/test_install_ruby_with_version0/rbenv-2.7.2/libexec/rbenv-init:
+    # /usr/bin/env: bad interpreter: No such file or directory
+    "test_ruby_"
+
+    # network
+    "test_additional_dependencies_roll_forward"
+    "test_additional_golang_dependencies_installed"
+    "test_additional_node_dependencies_installed"
+    "test_additional_rust_cli_dependencies_installed"
+    "test_additional_rust_lib_dependencies_installed"
+    "test_coursier_hook"
+    "test_coursier_hook_additional_dependencies"
+    "test_dart"
+    "test_dart_additional_deps"
+    "test_dart_additional_deps_versioned"
+    "test_during_commit_all"
+    "test_golang_default_version"
+    "test_golang_hook"
+    "test_golang_hook_still_works_when_gobin_is_set"
+    "test_golang_infer_go_version_default"
+    "test_golang_system"
+    "test_golang_versioned"
+    "test_language_version_with_rustup"
+    "test_installs_rust_missing_rustup"
+    "test_installs_without_links_outside_env"
+    "test_local_golang_additional_deps"
+    "test_lua"
+    "test_lua_additional_dependencies"
+    "test_node_additional_deps"
+    "test_node_hook_versions"
+    "test_perl_additional_dependencies"
+    "test_r_hook"
+    "test_r_inline"
+    "test_r_inline_hook"
+    "test_r_local_with_additional_dependencies_hook"
+    "test_r_with_additional_dependencies_hook"
+    "test_run_a_node_hook_default_version"
+    "test_run_lib_additional_dependencies"
+    "test_run_versioned_node_hook"
+    "test_rust_cli_additional_dependencies"
+    "test_swift_language"
+    "test_run_example_executable"
+    "test_run_dep"
+
+    # i don't know why these fail
+    "test_install_existing_hooks_no_overwrite"
+    "test_installed_from_venv"
+    "test_uninstall_restores_legacy_hooks"
+    "test_dotnet_"
+
+    # Expects `git commit` to fail when `pre-commit` is not in the `$PATH`,
+    # but we use an absolute path so it's not an issue.
+    "test_environment_not_sourced"
+
+    # Docker required
+    "test_docker_"
+  ];
+
+  pythonImportsCheck = [
+    "pre_commit"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = pre-commit;
+  };
+
+  meta = with lib; {
+    description = "A framework for managing and maintaining multi-language pre-commit hooks";
+    homepage = "https://pre-commit.com/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ borisbabic ];
+    mainProgram = "pre-commit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pre-commit/hook-tmpl.patch b/nixpkgs/pkgs/tools/misc/pre-commit/hook-tmpl.patch
new file mode 100644
index 000000000000..56aa59ef4832
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pre-commit/hook-tmpl.patch
@@ -0,0 +1,17 @@
+diff --git a/pre_commit/resources/hook-tmpl b/pre_commit/resources/hook-tmpl
+index 53d29f9..9b5dc2c 100755
+--- a/pre_commit/resources/hook-tmpl
++++ b/pre_commit/resources/hook-tmpl
+@@ -10,11 +10,4 @@ ARGS=(hook-impl)
+ HERE="$(cd "$(dirname "$0")" && pwd)"
+ ARGS+=(--hook-dir "$HERE" -- "$@")
+ 
+-if [ -x "$INSTALL_PYTHON" ]; then
+-    exec "$INSTALL_PYTHON" -mpre_commit "${ARGS[@]}"
+-elif command -v pre-commit > /dev/null; then
+-    exec pre-commit "${ARGS[@]}"
+-else
+-    echo '`pre-commit` not found.  Did you forget to activate your virtualenv?' 1>&2
+-    exit 1
+-fi
++exec @pre-commit@/bin/pre-commit "${ARGS[@]}"
diff --git a/nixpkgs/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch b/nixpkgs/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch
new file mode 100644
index 000000000000..c3469c95b268
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pre-commit/languages-use-the-hardcoded-path-to-python-binaries.patch
@@ -0,0 +1,26 @@
+diff --git a/pre_commit/languages/node.py b/pre_commit/languages/node.py
+index 66d6136..e3f1bac 100644
+--- a/pre_commit/languages/node.py
++++ b/pre_commit/languages/node.py
+@@ -83,7 +83,7 @@ def install_environment(
+     # https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx?f=255&MSPPError=-2147217396#maxpath
+     if sys.platform == 'win32':  # pragma: no cover
+         envdir = fr'\\?\{os.path.normpath(envdir)}'
+-    cmd = [sys.executable, '-mnodeenv', '--prebuilt', '--clean-src', envdir]
++    cmd = ['@nodeenv@/bin/nodeenv', '--prebuilt', '--clean-src', envdir]
+     if version != C.DEFAULT:
+         cmd.extend(['-n', version])
+     cmd_output_b(*cmd)
+diff --git a/pre_commit/languages/python.py b/pre_commit/languages/python.py
+index 976674e..485fe2d 100644
+--- a/pre_commit/languages/python.py
++++ b/pre_commit/languages/python.py
+@@ -203,7 +203,7 @@ def install_environment(
+         additional_dependencies: Sequence[str],
+ ) -> None:
+     envdir = lang_base.environment_dir(prefix, ENVIRONMENT_DIR, version)
+-    venv_cmd = [sys.executable, '-mvirtualenv', envdir]
++    venv_cmd = ['@virtualenv@/bin/virtualenv', envdir]
+     python = norm_version(version)
+     if python is not None:
+         venv_cmd.extend(('-p', python))
diff --git a/nixpkgs/pkgs/tools/misc/pre-commit/pygrep-pythonpath.patch b/nixpkgs/pkgs/tools/misc/pre-commit/pygrep-pythonpath.patch
new file mode 100644
index 000000000000..722b436169be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pre-commit/pygrep-pythonpath.patch
@@ -0,0 +1,13 @@
+diff --git a/pre_commit/languages/pygrep.py b/pre_commit/languages/pygrep.py
+index ec55560..44e08a1 100644
+--- a/pre_commit/languages/pygrep.py
++++ b/pre_commit/languages/pygrep.py
+@@ -98,7 +98,7 @@ def run_hook(
+         color: bool,
+ ) -> tuple[int, bytes]:
+     cmd = (sys.executable, '-m', __name__, *args, entry)
+-    return xargs(cmd, file_args, color=color)
++    return xargs(cmd, file_args, color=color, env={ "PYTHONPATH": ':'.join(sys.path) })
+ 
+ 
+ def main(argv: Sequence[str] | None = None) -> int:
diff --git a/nixpkgs/pkgs/tools/misc/precice-config-visualizer/default.nix b/nixpkgs/pkgs/tools/misc/precice-config-visualizer/default.nix
new file mode 100644
index 000000000000..9b6d40a0c733
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/precice-config-visualizer/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "config-visualizer";
+  version = "unstable-2022-02-23";
+
+  src = fetchFromGitHub {
+    owner = "precice";
+    repo = pname;
+    rev = "60f2165f25352c8261f370dc4ceb64a8b422d4ec";
+    hash = "sha256-2dnpkec9hN4oAqwu+1WmDJrfeu+JbfqZ6guv3bC4H1c=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ lxml pydot ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/precice/config-visualizer";
+    description = "Small python tool for visualizing the preCICE xml configuration ";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ Scriptkiddi ];
+    mainProgram = "precice-config-visualizer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/present-cli/default.nix b/nixpkgs/pkgs/tools/misc/present-cli/default.nix
new file mode 100644
index 000000000000..7c1c87647a19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/present-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "present";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "terror";
+    repo = pname;
+    rev = version;
+    sha256 = "+kCHe84ikdCLd7j5YwP2j3xz+XTzzo/kLy+b9YUFDnI=";
+  };
+
+  cargoSha256 = "VKY/FQUrFWtLxKoK6LP6qPMqNN4absZvnAbH9mha1fI=";
+
+  # required for tests
+  postPatch = ''
+    patchShebangs bin/get_version
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A script interpolation engine for markdown documents";
+    homepage = "https://github.com/terror/present/";
+    license = licenses.cc0;
+    maintainers = with maintainers; [ cameronfyfe ];
+    mainProgram = "present";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pricehist/default.nix b/nixpkgs/pkgs/tools/misc/pricehist/default.nix
new file mode 100644
index 000000000000..d195cb42a147
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pricehist/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitLab
+, requests
+, lxml
+, cssselect
+, curlify
+, poetry-core
+, pytest-mock
+, responses
+, pytestCheckHook
+, pythonRelaxDepsHook
+}:
+
+buildPythonApplication rec {
+  pname = "pricehist";
+  version = "1.4.6";
+  format = "pyproject";
+
+  src = fetchFromGitLab {
+    owner = "chrisberkhout";
+    repo = "pricehist";
+    rev = version;
+    hash = "sha256-RMZKp0JXQLt9tBZPkb3e/au85lV/FkRBCRYzd2lgUPc=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    lxml
+    cssselect
+    curlify
+    poetry-core
+  ];
+
+  nativeBuildInputs = [
+    pythonRelaxDepsHook
+  ];
+
+  nativeCheckInputs = [
+    responses
+    pytest-mock
+    pytestCheckHook
+  ];
+
+  pythonRelaxDeps = [
+    # https://gitlab.com/chrisberkhout/pricehist/-/issues/6
+    "lxml"
+  ];
+  meta = with lib; {
+    description = "A command-line tool for fetching and formatting historical price data, with support for multiple data sources and output formats";
+    homepage = "https://gitlab.com/chrisberkhout/pricehist";
+    license = licenses.mit;
+    mainProgram = "pricehist";
+    maintainers = with maintainers; [ chrpinedo ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pridecat/default.nix b/nixpkgs/pkgs/tools/misc/pridecat/default.nix
new file mode 100644
index 000000000000..4d4ed57fc235
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pridecat/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "pridecat";
+  version = "unstable-2020-06-19";
+
+  src = fetchFromGitHub {
+    owner = "lunasorcery";
+    repo = "pridecat";
+    rev = "92396b11459e7a4b5e8ff511e99d18d7a1589c96";
+    sha256 = "sha256-PyGLbbsh9lFXhzB1Xn8VQ9zilivycGFEIc7i8KXOxj8=";
+  };
+
+  # fixes the install path in the Makefile
+  patches = [ ./fix_install.patch ];
+
+  meta = with lib; {
+    description = "Like cat, but more colorful";
+    homepage = "https://github.com/lunasorcery/pridecat";
+    license = licenses.cc-by-nc-sa-40;
+    maintainers = with maintainers; [ lunarequest ];
+    mainProgram = "pridecat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pridecat/fix_install.patch b/nixpkgs/pkgs/tools/misc/pridecat/fix_install.patch
new file mode 100644
index 000000000000..3d05721ccab8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pridecat/fix_install.patch
@@ -0,0 +1,20 @@
+diff --git a/Makefile b/Makefile
+index 815c27e..1556807 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1,4 +1,5 @@
+ CXX ?= clang
++out ?= /usr/local
+ 
+ all: pridecat
+ 
+@@ -6,7 +7,8 @@ pridecat: main.cpp
+ 	$(CXX) main.cpp -o pridecat -std=c++11 -lstdc++ -Wall -Wextra -O3
+ 
+ install: pridecat
+-	cp pridecat /usr/local/bin/pridecat
++	mkdir -p ${out}/bin	
++	cp pridecat ${out}/bin/pridecat
+ 
+ uninstall:
+ 	rm -f /usr/local/bin/pridecat
diff --git a/nixpkgs/pkgs/tools/misc/pridefetch/default.nix b/nixpkgs/pkgs/tools/misc/pridefetch/default.nix
new file mode 100644
index 000000000000..dedd3b336d78
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pridefetch/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, python3
+, stdenv
+, strip-nondeterminism
+, zip
+}:
+
+let
+  version = "1.1.0";
+  sha256 = "sha256-563xOz63vto19yuaHtReV1dSw6BgNf+CLtS3lrPnaoc=";
+
+  pname = "pridefetch";
+  src = fetchFromGitHub {
+    owner = "SpyHoodle";
+    repo = pname;
+    rev = "v" + version;
+    inherit sha256;
+  };
+in
+
+stdenv.mkDerivation {
+  inherit pname version src;
+
+  nativeBuildInputs = [
+    strip-nondeterminism
+    zip
+  ];
+
+  buildInputs = [
+    (python3.withPackages (pythonPackages: with pythonPackages; [
+      distro
+    ]))
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    pushd src
+    zip -r ../pridefetch.zip ./*
+    strip-nondeterminism ../pridefetch.zip
+    popd
+    echo '#!/usr/bin/env python' | cat - pridefetch.zip > pridefetch
+    rm pridefetch.zip
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    mv pridefetch $out/bin/pridefetch
+    chmod +x $out/bin/pridefetch
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Print out system statistics with pride flags";
+    longDescription = ''
+      Pridefetch prints your system statistics (similarly to neofetch, screenfetch or pfetch) along with a pride flag.
+      The flag which is printed is configurable, as well as the width of the output.
+    '';
+    homepage = "https://github.com/SpyHoodle/pridefetch";
+    license = licenses.mit;
+    maintainers = [
+      maintainers.minion3665
+    ];
+    platforms = platforms.all;
+    mainProgram = "pridefetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/procyon/default.nix b/nixpkgs/pkgs/tools/misc/procyon/default.nix
new file mode 100644
index 000000000000..7026ce6febfb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/procyon/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, runtimeShell, jre_headless }:
+
+stdenv.mkDerivation rec {
+  pname = "procyon";
+  version = "0.6.0";
+
+  src = fetchurl {
+    url = "https://github.com/mstrobel/procyon/releases/download/v${version}/procyon-decompiler-${version}.jar";
+    sha256 = "sha256-gh2pYBL8aSRPoeopjJBFXuTgIUNLx5bTuVRqskYBt3k=";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/procyon
+    cp $src $out/share/procyon/procyon-decompiler.jar
+
+    cat << EOF > $out/bin/procyon
+    #!${runtimeShell}
+    exec ${jre_headless}/bin/java -jar $out/share/procyon/procyon-decompiler.jar "\$@"
+    EOF
+    chmod +x $out/bin/procyon
+  '';
+
+  meta = with lib; {
+    description = "Procyon is a suite of Java metaprogramming tools including a Java decompiler";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    homepage = "https://github.com/mstrobel/procyon/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+    mainProgram = "procyon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/profetch/default.nix b/nixpkgs/pkgs/tools/misc/profetch/default.nix
new file mode 100644
index 000000000000..fc5f3cea4a0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/profetch/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchFromGitHub, gprolog }:
+
+stdenv.mkDerivation rec {
+  pname = "profetch";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "RustemB";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-JsjpPUXMN0jytRS4yzSjrseqHiEQ+YinklG+tIIy+Zo=";
+  };
+
+  nativeBuildInputs = [ gprolog ];
+
+  buildPhase = ''
+    runHook preBuild
+    gplc profetch.pl --no-top-level --no-debugger    \
+                     --no-fd-lib    --no-fd-lib-warn \
+                     --min-size -o profetch
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 -t $out/bin profetch
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "System Information Fetcher Written in GNU/Prolog";
+    homepage = "https://github.com/RustemB/profetch";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = [ maintainers.vel ];
+    mainProgram = "profetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix b/nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix
new file mode 100644
index 000000000000..8e5d8325d059
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/profile-cleaner/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, parallel, sqlite, bc, file }:
+
+stdenv.mkDerivation rec {
+  version = "2.45";
+  pname = "profile-cleaner";
+
+  src = fetchFromGitHub {
+    owner = "graysky2";
+    repo = "profile-cleaner";
+    rev = "v${version}";
+    sha256 = "sha256-10e1S+li7SXKJX2lETSdx84GavWqQYQqyLoBIVToTBI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    PREFIX=\"\" DESTDIR=$out make install
+    wrapProgram $out/bin/profile-cleaner \
+      --prefix PATH : "${lib.makeBinPath [ parallel sqlite bc file ]}"
+  '';
+
+  meta = {
+    description = "Reduces browser profile sizes by cleaning their sqlite databases";
+    longDescription = ''
+      Use profile-cleaner to reduce the size of browser profiles by organizing
+      their sqlite databases using sqlite3's vacuum and reindex functions. The
+      term "browser" is used loosely since profile-cleaner happily works on
+      some email clients and newsreaders too.
+    '';
+    homepage = "https://github.com/graysky2/profile-cleaner";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.all;
+    maintainers = [ lib.maintainers.devhell ];
+    mainProgram = "profile-cleaner";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix b/nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix
new file mode 100644
index 000000000000..20b6c1aed366
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/profile-sync-daemon/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, util-linux, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "profile-sync-daemon";
+  version = "6.50";
+
+  src = fetchFromGitHub {
+    owner = "graysky2";
+    repo = "profile-sync-daemon";
+    rev = "v${version}";
+    hash = "sha256-Wb9YLxuu9i9s/Y6trz5NZDU9WRywe3138cp5Q2gWbxM=";
+  };
+
+  installPhase = ''
+    PREFIX=\"\" DESTDIR=$out make install
+    substituteInPlace $out/bin/profile-sync-daemon \
+      --replace "/usr/" "$out/" \
+      --replace "sudo " "/run/wrappers/bin/sudo "
+    # $HOME detection fails (and is unnecessary)
+    sed -i '/^HOME/d' $out/bin/profile-sync-daemon
+    substituteInPlace $out/bin/psd-overlay-helper \
+      --replace "PATH=/usr/bin:/bin" "PATH=${util-linux.bin}/bin:${coreutils}/bin" \
+      --replace "sudo " "/run/wrappers/bin/sudo "
+  '';
+
+  meta = with lib; {
+    description = "Syncs browser profile dirs to RAM";
+    longDescription = ''
+      Profile-sync-daemon (psd) is a tiny pseudo-daemon designed to manage your
+      browser's profile in tmpfs and to periodically sync it back to your
+      physical disc (HDD/SSD). This is accomplished via a symlinking step and
+      an innovative use of rsync to maintain back-up and synchronization
+      between the two. One of the major design goals of psd is a completely
+      transparent user experience.
+    '';
+    homepage = "https://github.com/graysky2/profile-sync-daemon";
+    downloadPage = "https://github.com/graysky2/profile-sync-daemon/releases";
+    license = licenses.mit;
+    maintainers = [ maintainers.prikhi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/progress/default.nix b/nixpkgs/pkgs/tools/misc/progress/default.nix
new file mode 100644
index 000000000000..063d4d122acb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/progress/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, ncurses, which }:
+
+stdenv.mkDerivation rec {
+  pname = "progress";
+  version = "0.17";
+
+  src = fetchFromGitHub {
+    owner = "Xfennec";
+    repo = "progress";
+    rev = "v${version}";
+    sha256 = "sha256-riewkageSZIlwDNMjYep9Pb2q1GJ+WMXazokJGbb4bE=";
+  };
+
+  nativeBuildInputs = [ pkg-config which ];
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Xfennec/progress";
+    description = "Tool that shows the progress of coreutils programs";
+    license = licenses.gpl3;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "progress";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/promql-cli/default.nix b/nixpkgs/pkgs/tools/misc/promql-cli/default.nix
new file mode 100644
index 000000000000..d5188e83f293
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/promql-cli/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "promql-cli";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "nalbury";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-EV63fdG+GF+kVLH2TxHPhRcUU5xBvkW5bhHC1lEoj84=";
+  };
+
+  vendorHash = "sha256-jhNll04xGaxS6NJTh4spSW9zPrff8jk5OEQiRevPQwU=";
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    mv -v $out/bin/promql-cli $out/bin/promql
+  '';
+
+  meta = with lib; {
+    description = "Command-line tool to query a Prometheus server with PromQL and visualize the output";
+    homepage = "https://github.com/nalbury/promql-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ arikgrahl ];
+    mainProgram = "promql";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/proximity-sort/default.nix b/nixpkgs/pkgs/tools/misc/proximity-sort/default.nix
new file mode 100644
index 000000000000..3b0f1ca5be3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/proximity-sort/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "proximity-sort";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "jonhoo";
+    repo = "proximity-sort";
+    rev = "v${version}";
+    hash = "sha256-MRLQvspv6kjirljhAkk1KT+hPA4hdjA1b7RL9eEyglQ=";
+  };
+
+  cargoHash = "sha256-0hP6qa8d5CaqtBHCWBJ8UjtVJc6Z0GmL8DvdTWDMM8g=";
+
+  meta = with lib; {
+    description = "Simple command-line utility for sorting inputs by proximity to a path argument";
+    homepage = "https://github.com/jonhoo/proximity-sort";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "proximity-sort";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pspg/default.nix b/nixpkgs/pkgs/tools/misc/pspg/default.nix
new file mode 100644
index 000000000000..9d0adb051af0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pspg/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, gnugrep, ncurses, pkg-config, installShellFiles, readline, postgresql }:
+
+stdenv.mkDerivation rec {
+  pname = "pspg";
+  version = "5.8.5";
+
+  src = fetchFromGitHub {
+    owner = "okbob";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-Lri675TEIVWp8iEQI1oeSd9xNCVtzlUcK2AEJHmWNjs=";
+  };
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+  buildInputs = [ gnugrep ncurses readline postgresql ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  postInstall = ''
+    installManPage pspg.1
+    installShellCompletion --bash --cmd pspg bash-completion.sh
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/okbob/pspg";
+    description = "Postgres Pager";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.jlesquembre ];
+    mainProgram = "pspg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/psql2csv/default.nix b/nixpkgs/pkgs/tools/misc/psql2csv/default.nix
new file mode 100644
index 000000000000..729582f2e404
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/psql2csv/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, coreutils
+, gnused
+, postgresql
+, makeWrapper
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "psql2csv";
+  version = "0.12";
+
+  src = fetchFromGitHub {
+    owner = "fphilipe";
+    repo = "psql2csv";
+    rev = "v${version}";
+    hash = "sha256-XIdZ2+Jlw2JLn4KXD9h3+xXymu4FhibAfp5uGGkVwLQ=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin psql2csv
+    wrapProgram $out/bin/psql2csv \
+      --prefix PATH : ${lib.makeBinPath [ coreutils gnused postgresql ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Tool to run a PostreSQL query and output the result as CSV";
+    homepage = "https://github.com/fphilipe/psql2csv";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    inherit (postgresql.meta) platforms;
+    mainProgram = "psql2csv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/psrecord/default.nix b/nixpkgs/pkgs/tools/misc/psrecord/default.nix
new file mode 100644
index 000000000000..04b1970fe02b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/psrecord/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildPythonApplication, fetchPypi, psutil, matplotlib, pytest }:
+buildPythonApplication rec {
+  pname = "psrecord";
+  version = "1.2";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5d48410e543b71e5dc4677705acc2a753db65814d3ccbdfbca8d5d3a09b053b1";
+  };
+
+  propagatedBuildInputs = [
+    psutil matplotlib
+  ];
+
+  nativeCheckInputs = [
+    pytest
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+    pytest psrecord
+    runHook postCheck
+  '';
+
+  meta = {
+    description = "Record the CPU and memory activity of a process";
+    homepage = "https://github.com/astrofrog/psrecord";
+    license = lib.licenses.bsd2;
+    maintainers = with lib.maintainers; [ johnazoidberg ];
+    mainProgram = "psrecord";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/psw/default.nix b/nixpkgs/pkgs/tools/misc/psw/default.nix
new file mode 100644
index 000000000000..c3d9b347ce1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/psw/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "psw";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Wulfsta";
+    repo = pname;
+    rev = version;
+    sha256 = "1nwmps3zw99lrz6k1j14w4rcm7yj8vhf4cs9wjfc3c1zfjibz9iz";
+  };
+
+  cargoSha256 = "1y2am1bz68q7d9bn4264al13fv2j6a87bwrd60ycx0qak9fczlmv";
+
+  meta = with lib; {
+    description = "A command line tool to write random bytes to stdout";
+    homepage = "https://github.com/Wulfsta/psw";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ wulfsta ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pubs/default.nix b/nixpkgs/pkgs/tools/misc/pubs/default.nix
new file mode 100644
index 000000000000..1dcd011f0ace
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pubs/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pubs";
+  version = "0.9.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "pubs";
+    repo = "pubs";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-U/9MLqfXrzYVGttFSafw4pYDy26WgdsJMCxciZzO1pw=";
+  };
+
+  patches = [
+    # https://github.com/pubs/pubs/pull/278
+    (fetchpatch {
+      url = "https://github.com/pubs/pubs/commit/9623d2c3ca8ff6d2bb7f6c8d8624f9a174d831bc.patch";
+      hash = "sha256-6qoufKPv3k6C9BQTZ2/175Nk7zWPh89vG+zebx6ZFOk=";
+    })
+    # https://github.com/pubs/pubs/pull/279
+    (fetchpatch {
+      url = "https://github.com/pubs/pubs/commit/05e214eb406447196c77c8aa3e4658f70e505f23.patch";
+      hash = "sha256-UBkKiYaG6y6z8lsRpdcsaGsoklv6qj07KWdfkQcVl2g=";
+    })
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    argcomplete
+    beautifulsoup4
+    bibtexparser
+    configobj
+    feedparser
+    python-dateutil
+    pyyaml
+    requests
+    six
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    ddt
+    mock
+    pyfakefs
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = [
+    # Disabling git tests because they expect git to be preconfigured
+    # with the user's details. See
+    # https://github.com/NixOS/nixpkgs/issues/94663
+    "tests/test_git.py"
+  ];
+
+  disabledTests = [
+    # https://github.com/pubs/pubs/issues/276
+    "test_readme"
+    # AssertionError: Lists differ: ['Ini[112 chars]d to...
+    "test_add_non_standard"
+  ];
+
+  pythonImportsCheck = [
+    "pubs"
+  ];
+
+  meta = with lib; {
+    description = "Command-line bibliography manager";
+    mainProgram = "pubs";
+    homepage = "https://github.com/pubs/pubs";
+    changelog = "https://github.com/pubs/pubs/blob/v${version}/changelog.md";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ gebner dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pv/default.nix b/nixpkgs/pkgs/tools/misc/pv/default.nix
new file mode 100644
index 000000000000..740bea469a39
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pv/default.nix
@@ -0,0 +1,23 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pv";
+  version = "1.8.9";
+
+  src = fetchurl {
+    url = "https://www.ivarch.com/programs/sources/pv-${finalAttrs.version}.tar.gz";
+    sha256 = "sha256-oHidj4xaCPrzcLWgfR2Tau/5UEpPSdp21BZHl6xGBuY=";
+  };
+
+  meta = {
+    homepage = "https://www.ivarch.com/programs/pv.shtml";
+    description = "Tool for monitoring the progress of data through a pipeline";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ matthiasbeyer ];
+    platforms = lib.platforms.all;
+    mainProgram = "pv";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/pws/Gemfile b/nixpkgs/pkgs/tools/misc/pws/Gemfile
new file mode 100644
index 000000000000..43b6b931860c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem 'pws'
diff --git a/nixpkgs/pkgs/tools/misc/pws/Gemfile.lock b/nixpkgs/pkgs/tools/misc/pws/Gemfile.lock
new file mode 100644
index 000000000000..cad7909e406d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/Gemfile.lock
@@ -0,0 +1,19 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    clipboard (1.0.6)
+    paint (1.0.1)
+    pbkdf2-ruby (0.2.1)
+    pws (1.0.6)
+      clipboard (~> 1.0.5)
+      paint (>= 0.8.7)
+      pbkdf2-ruby
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pws
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/pws/default.nix b/nixpkgs/pkgs/tools/misc/pws/default.nix
new file mode 100644
index 000000000000..97f458568677
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, bundlerEnv, ruby, bundlerUpdateScript, xsel, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "pws";
+  version = (import ./gemset.nix).pws.version;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontUnpack = true;
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "${pname}-gems";
+
+      inherit ruby;
+
+      gemdir = ./.;
+    };
+  in ''
+    mkdir -p $out/bin
+    makeWrapper ${env}/bin/pws $out/bin/pws \
+      --set PATH '"${xsel}/bin/:$PATH"'
+  '';
+
+  passthru.updateScript = bundlerUpdateScript "pws";
+
+  meta = with lib; {
+    description = "Command-line password safe";
+    homepage    = "https://github.com/janlelis/pws";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ swistak35 nicknovitski ];
+    platforms   = platforms.unix;
+    mainProgram = "pws";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/pws/gemset.nix b/nixpkgs/pkgs/tools/misc/pws/gemset.nix
new file mode 100644
index 000000000000..e0b263e86a58
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/pws/gemset.nix
@@ -0,0 +1,34 @@
+{
+  clipboard = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11r5xi1fhll4qxna2sg83vmnphjzqc4pzwdnmc5qwvdps5jbz7cq";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+  paint = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z1fqyyc2jiv6yabv467h652cxr2lmxl5gqqg7p14y28kdqf0nhj";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  pbkdf2-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "014vb5k8klvh192idqrda2571dxsp7ai2v72hj265zd2awy0zyg1";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  pws = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1brn123mmrw09ji60sa13ylgfjjp7aicz07hm9h0dc3162zlw5wn";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix b/nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix
new file mode 100644
index 000000000000..5a63752b8238
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/q-text-as-data/default.nix
@@ -0,0 +1,42 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "q-text-as-data";
+  version = "2.0.19";
+
+  src = fetchFromGitHub {
+    owner = "harelba";
+    repo = "q";
+    rev = version;
+    sha256 = "18cwyfjgxxavclyd08bmb943c8bvzp1gnqp4klkq5xlgqwivr4sv";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    setuptools
+    six
+  ];
+
+  doCheck = false;
+
+  patchPhase = ''
+    # remove broken symlink
+    rm bin/qtextasdata.py
+
+    # not considered good practice pinning in install_requires
+    substituteInPlace setup.py --replace 'six==' 'six>='
+  '';
+
+  meta = with lib; {
+    description = "Run SQL directly on CSV or TSV files";
+    longDescription = ''
+      q is a command line tool that allows direct execution of SQL-like queries on CSVs/TSVs (and any other tabular text files).
+
+      q treats ordinary files as database tables, and supports all SQL constructs, such as WHERE, GROUP BY, JOINs etc. It supports automatic column name and column type detection, and provides full support for multiple encodings.
+    '';
+    homepage = "http://harelba.github.io/q/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.taneb ];
+    platforms = platforms.all;
+    mainProgram = "q";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qdl/default.nix b/nixpkgs/pkgs/tools/misc/qdl/default.nix
new file mode 100644
index 000000000000..02435272535f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qdl/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, libxml2
+, systemd
+}:
+
+stdenv.mkDerivation {
+  pname   = "qdl";
+  version = "unstable-2023-04-11";
+
+  src = fetchFromGitHub {
+    owner = "linux-msm";
+    repo = "qdl";
+    rev = "3b22df2bc7de02d867334af3a7aa8606db4f8cdd";
+    sha256 = "sha256-2sL9HX73APTn9nQOx1Efdkz9F4bNASPMVFMx6YOqxyc=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ systemd libxml2 ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 ./qdl -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/linux-msm/qdl";
+    description = "Tool for flashing images to Qualcomm devices";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ muscaln ];
+    platforms = platforms.linux;
+    mainProgram = "qdl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qflipper/default.nix b/nixpkgs/pkgs/tools/misc/qflipper/default.nix
new file mode 100644
index 000000000000..5c139d017c86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qflipper/default.nix
@@ -0,0 +1,105 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, zlib
+, libusb1
+, libGL
+, qmake
+, wrapGAppsHook
+, wrapQtAppsHook
+, mkDerivation
+
+, qttools
+, qtbase
+, qt3d
+, qtsvg
+, qtserialport
+, qtdeclarative
+, qtquickcontrols
+, qtquickcontrols2
+, qtgraphicaleffects
+, qtwayland
+, nix-update-script
+}:
+let
+  pname = "qFlipper";
+  version = "1.3.3";
+  sha256 = "sha256-/Xzy+OA0Nl/UlSkOOZW2YsOHdJvS/7X3Z3ITkPByAOc=";
+  timestamp = "99999999999";
+  commit = "nix-${version}";
+
+in
+mkDerivation {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "flipperdevices";
+    repo = "qFlipper";
+    rev = version;
+    fetchSubmodules = true;
+    inherit sha256;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    qmake
+    qttools
+    wrapGAppsHook
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    zlib
+    libusb1
+    libGL
+
+    qtbase
+    qt3d
+    qtsvg
+    qtserialport
+    qtdeclarative
+    qtquickcontrols
+    qtquickcontrols2
+    qtgraphicaleffects
+  ] ++ lib.optionals (stdenv.isLinux) [
+    qtwayland
+  ];
+
+  qmakeFlags = [
+    "DEFINES+=DISABLE_APPLICATION_UPDATES"
+    "CONFIG+=qtquickcompiler"
+  ];
+
+  dontWrapGApps = true;
+
+  postPatch = ''
+    substituteInPlace qflipper_common.pri \
+        --replace 'GIT_VERSION = unknown' 'GIT_VERSION = "${version}"' \
+        --replace 'GIT_TIMESTAMP = 0' 'GIT_TIMESTAMP = ${timestamp}' \
+        --replace 'GIT_COMMIT = unknown' 'GIT_COMMIT = "${commit}"'
+    cat qflipper_common.pri
+  '';
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ${lib.optionalString stdenv.isDarwin ''
+    cp qFlipper.app/Contents/MacOS/qFlipper $out/bin
+    ''}
+    cp qFlipper-cli $out/bin
+
+    mkdir -p $out/etc/udev/rules.d
+    cp installer-assets/udev/42-flipperzero.rules $out/etc/udev/rules.d/
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Cross-platform desktop tool to manage your flipper device";
+    homepage = "https://flipperzero.one/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ cab404 ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" ]; # qtbase doesn't build yet on aarch64-darwin
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qjoypad/default.nix b/nixpkgs/pkgs/tools/misc/qjoypad/default.nix
new file mode 100644
index 000000000000..a602e7b7fad6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qjoypad/default.nix
@@ -0,0 +1,40 @@
+{ lib, mkDerivation, fetchFromGitHub, pkg-config, cmake, libX11, libXtst, qtbase, qttools, qtx11extras }:
+mkDerivation rec {
+  pname = "qjoypad";
+  version = "4.3.1";
+
+  src = fetchFromGitHub {
+    owner = "panzi";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256:1w26ddxb1xirb7qjf7kv9llxzjhbhcb7warnxbx41qhbni46g26y";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake qttools ];
+  buildInputs = [ libX11 libXtst qtbase qtx11extras ];
+
+  meta = with lib; {
+    description = "A program that lets you use gaming devices anywhere";
+    longDescription = ''
+      A simple Linux/QT program that lets you use your gaming devices
+      where you want them: in your games! QJoyPad takes input from a
+      gamepad or joystick and translates it into key strokes or mouse
+      actions, letting you control any XWindows program with your game
+      controller. This lets you play all those games that for some
+      reason don't have joystick support with your joystick. QJoyPad
+      also gives you the advantage of multiple saved layouts so you
+      can have a separate setting for every game, or for every class
+      of game! That way you can play your games the way you want, not
+      the way the programmers decided, and you can have the same
+      button be "fire" in every one of your space fighters. QJoyPad
+      gives you the freedom and flexibility to really take advantage
+      of gaming devices in Linux, and makes the Linux gaming
+      experience just a little bit nicer.
+    '';
+    homepage = "https://github.com/panzi/qjoypad/";
+    license = lib.licenses.gpl2;
+    maintainers = with maintainers; [ astsmtl ];
+    platforms = with platforms; linux;
+    mainProgram = "qjoypad";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qmake2cmake/default.nix b/nixpkgs/pkgs/tools/misc/qmake2cmake/default.nix
new file mode 100644
index 000000000000..b3c3468973b8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qmake2cmake/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, buildPythonPackage
+, fetchgit
+, packaging
+, platformdirs
+, portalocker
+, pyparsing
+, sympy
+, pytestCheckHook
+}:
+
+buildPythonPackage rec {
+  pname = "qmake2cmake";
+  version = "1.0.6";
+
+  src = fetchgit {
+    url = "https://codereview.qt-project.org/qt/qmake2cmake";
+    rev = "v${version}";
+    hash = "sha256-M5XVQ8MXo2Yxg5eZCho2YAGFtB0h++mEAg8NcQVuP/w=";
+  };
+
+  patches = [
+    ./fix-locations.patch
+  ];
+
+  propagatedBuildInputs = [
+    packaging
+    platformdirs
+    portalocker
+    pyparsing
+    sympy
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "Tool to convert qmake .pro files to CMakeLists.txt";
+    homepage = "https://wiki.qt.io/Qmake2cmake";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wegank ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qmake2cmake/fix-locations.patch b/nixpkgs/pkgs/tools/misc/qmake2cmake/fix-locations.patch
new file mode 100644
index 000000000000..33b22382e214
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qmake2cmake/fix-locations.patch
@@ -0,0 +1,22 @@
+diff --git a/src/qmake2cmake/run_pro2cmake.py b/src/qmake2cmake/run_pro2cmake.py
+index fd3e11a..bdbadb0 100755
+--- a/src/qmake2cmake/run_pro2cmake.py
++++ b/src/qmake2cmake/run_pro2cmake.py
+@@ -194,7 +194,6 @@ def run(all_files: typing.List[str], pro2cmake: str, args: argparse.Namespace) -
+     ) -> typing.Tuple[int, str, str]:
+         filename, index, total = data
+         pro2cmake_args = []
+-        pro2cmake_args.append(sys.executable)
+         pro2cmake_args.append(pro2cmake)
+         if args.min_qt_version:
+             pro2cmake_args += ["--min-qt-version", args.min_qt_version]
+@@ -257,8 +256,7 @@ def run(all_files: typing.List[str], pro2cmake: str, args: argparse.Namespace) -
+ def main() -> None:
+     args = parse_command_line()
+ 
+-    script_path = os.path.dirname(os.path.abspath(__file__))
+-    pro2cmake = os.path.join(script_path, "pro2cmake.py")
++    pro2cmake = os.path.join(os.path.dirname(sys.argv[0]), "qmake2cmake")
+     base_path = args.path
+ 
+     all_files = find_all_pro_files(base_path, args)
diff --git a/nixpkgs/pkgs/tools/misc/qmk/default.nix b/nixpkgs/pkgs/tools/misc/qmk/default.nix
new file mode 100644
index 000000000000..5493463e3c32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qmk/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, python3
+, fetchPypi
+, pkgsCross
+, avrdude
+, dfu-programmer
+, dfu-util
+, wb32-dfu-updater
+, gcc-arm-embedded
+, gnumake
+, teensy-loader-cli
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "qmk";
+  version = "1.1.5";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-Lv48dSIwxrokuHGcO26FpWRL+PfQ3SN3V+2pt7fmCxE=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dotty-dict
+    hid
+    hjson
+    jsonschema
+    milc
+    pygments
+    pyserial
+    pyusb
+    pillow
+  ] ++ [ # Binaries need to be in the path so this is in propagatedBuildInputs
+    avrdude
+    dfu-programmer
+    dfu-util
+    wb32-dfu-updater
+    teensy-loader-cli
+    gcc-arm-embedded
+    gnumake
+    pkgsCross.avr.buildPackages.binutils
+    pkgsCross.avr.buildPackages.binutils.bintools
+    pkgsCross.avr.buildPackages.gcc8
+    pkgsCross.avr.libcCross
+  ];
+
+  # no tests implemented
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/qmk/qmk_cli";
+    description = "A program to help users work with QMK Firmware";
+    longDescription = ''
+      qmk_cli is a companion tool to QMK firmware. With it, you can:
+
+      - Interact with your qmk_firmware tree from any location
+      - Use qmk clone to pull down anyone's qmk_firmware fork
+      - Setup and work with your build environment:
+        - qmk setup
+        - qmk doctor
+        - qmk compile
+        - qmk console
+        - qmk flash
+        - qmk lint
+      - ... and many more!
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ bhipple babariviere ekleog ];
+    mainProgram = "qmk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qmk_hid/default.nix b/nixpkgs/pkgs/tools/misc/qmk_hid/default.nix
new file mode 100644
index 000000000000..f5d1b61868a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qmk_hid/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, systemd
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "qmk_hid";
+  version = "0.1.11";
+
+  src = fetchFromGitHub {
+    owner = "FrameworkComputer";
+    repo = "qmk_hid";
+    rev = "v${version}";
+    hash = "sha256-k5cZcrjen7nNJM9mKQEwNTVfBPawXwbwNlCyTARdH/g=";
+  };
+
+  cargoHash = "sha256-GrerrNDoSFtOEAf0vB9MlkBl+yLnzd/szrpFsAmkB6s=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    systemd
+  ];
+
+  checkFlags = [
+    # test doesn't compile
+    "--skip=src/lib.rs"
+  ];
+
+  meta = with lib; {
+    description = "Commandline tool for interactng with QMK devices over HID";
+    homepage = "https://github.com/FrameworkComputer/qmk_hid";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ janik ];
+    mainProgram = "qmk_hid";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qrscan/default.nix b/nixpkgs/pkgs/tools/misc/qrscan/default.nix
new file mode 100644
index 000000000000..1ad4c526e752
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qrscan/default.nix
@@ -0,0 +1,39 @@
+{ clang_15, lib, rustPlatform, fetchFromGitHub, stdenv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "qrscan";
+  version = "0.1.9";
+
+  src = fetchFromGitHub {
+    owner = "sayanarijit";
+    repo = "qrscan";
+    rev = "v${version}";
+    hash = "sha256-nAUZUE7NppsCAV8UyR8+OkikT4nJtnamsSVeyNz21EQ=";
+  };
+
+  nativeBuildInputs = [
+    (rustPlatform.bindgenHook.overrideAttrs {
+      libclang = clang_15.cc.lib;
+    })
+  ];
+
+  cargoHash = "sha256-P40IwFRtEQp6BGRgmt1x3UXtAKtWaMjR3kqhYq+p7wQ=";
+
+  checkFlags = [
+    # requires filesystem write access
+    "--skip=tests::test_export_files"
+    "--skip=tests::test_scan_from_stdin"
+    "--skip=tests::test_scan_jpeg_file"
+    "--skip=tests::test_scan_no_content"
+    "--skip=tests::test_scan_png_file"
+  ];
+
+  meta = with lib; {
+    description = "Scan a QR code in the terminal using the system camera or a given image";
+    mainProgram = "qrscan";
+    homepage = "https://github.com/sayanarijit/qrscan";
+    license = licenses.mit;
+    broken = stdenv.isDarwin;
+    maintainers = [ maintainers.sayanarijit ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qt5ct/default.nix b/nixpkgs/pkgs/tools/misc/qt5ct/default.nix
new file mode 100644
index 000000000000..38f9f10d9838
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qt5ct/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchurl, qtbase, qtsvg, qttools, qmake }:
+
+let inherit (lib) getDev; in
+
+mkDerivation rec {
+  pname = "qt5ct";
+  version = "1.8";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-I7dAVEFepBJDKHcu+ab5UIOpuGVp4SgDSj/3XfrYCOk=";
+  };
+
+  nativeBuildInputs = [ qmake qttools ];
+
+  buildInputs = [ qtbase qtsvg ];
+
+  qmakeFlags = [
+    "LRELEASE_EXECUTABLE=${getDev qttools}/bin/lrelease"
+    "PLUGINDIR=${placeholder "out"}/${qtbase.qtPluginPrefix}"
+    "LIBDIR=${placeholder "out"}/lib"
+  ];
+
+  meta = with lib; {
+    description = "Qt5 Configuration Tool";
+    homepage = "https://sourceforge.net/projects/qt5ct/";
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ ralith ];
+    mainProgram = "qt5ct";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/qt6ct/default.nix b/nixpkgs/pkgs/tools/misc/qt6ct/default.nix
new file mode 100644
index 000000000000..248bc3a48e4c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qt6ct/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, qtbase
+, qtsvg
+, qtwayland
+, qmake
+, qttools
+, wrapQtAppsHook
+}:
+let
+  inherit (lib) getDev;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "qt6ct";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "trialuser02";
+    repo = "qt6ct";
+    rev = finalAttrs.version;
+    hash = "sha256-MmN/qPBlsF2mBST+3eYeXaq+7B3b+nTN2hi6CmxrILc=";
+  };
+
+  nativeBuildInputs = [ qmake qttools wrapQtAppsHook ];
+
+  buildInputs = [ qtbase qtsvg qtwayland ];
+
+  qmakeFlags = [
+    "LRELEASE_EXECUTABLE=${getDev qttools}/bin/lrelease"
+    "PLUGINDIR=${placeholder "out"}/${qtbase.qtPluginPrefix}"
+    "LIBDIR=${placeholder "out"}/lib"
+  ];
+
+  meta = with lib; {
+    description = "Qt6 Configuration Tool";
+    homepage = "https://github.com/trialuser02/qt6ct";
+    platforms = platforms.linux;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ Flakebi Scrumplex ];
+    mainProgram = "qt6ct";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/qt6gtk2/default.nix b/nixpkgs/pkgs/tools/misc/qt6gtk2/default.nix
new file mode 100644
index 000000000000..69044a2bb312
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/qt6gtk2/default.nix
@@ -0,0 +1,36 @@
+{ fetchFromGitHub, lib, stdenv, gtk2, pkg-config, qmake, qtbase }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "qt6gtk2";
+  version = "0.2";
+
+  src = fetchFromGitHub {
+    owner = "trialuser02";
+    repo = finalAttrs.pname;
+    rev = finalAttrs.version;
+    hash = "sha256-g5ZCwTnNEJJ57zEwNqMxrl0EWYJMt3PquZ2IsmxQYqk=";
+  };
+
+  buildInputs = [ gtk2 qtbase ];
+  nativeBuildInputs = [ pkg-config qmake ];
+
+  dontWrapQtApps = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/lib/qt-6/plugins/{platformthemes,styles}
+    cp -pr src/qt6gtk2-qtplugin/libqt6gtk2.so $out/lib/qt-6/plugins/platformthemes
+    cp -pr src/qt6gtk2-style/libqt6gtk2-style.so $out/lib/qt-6/plugins/styles
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "GTK+2.0 integration plugins for Qt6";
+    license = lib.licenses.gpl2Plus;
+    homepage = "https://github.com/trialuser02/qt6gtk2";
+    maintainers = [ lib.maintainers.misterio77 ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/quich/default.nix b/nixpkgs/pkgs/tools/misc/quich/default.nix
new file mode 100644
index 000000000000..effd7993b803
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/quich/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "quich";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = "Usbac";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-4gsSjLZ7Z4ErNqe86Fy5IrzLMfvDyY18sE0yBnj9bvM=";
+  };
+
+  doCheck = true;
+
+  makeFlags = [ "DESTDIR=" "PREFIX=$(out)" "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = with lib; {
+    description = "The advanced terminal calculator";
+    longDescription = ''
+      Quich is a compact, fast, powerful and useful calculator for your terminal
+      with numerous features, supporting Windows and Linux Systems,
+      written in ANSI C.
+    '';
+    homepage = "https://github.com/Usbac/quich";
+    license = licenses.mit;
+    maintainers = [ maintainers.xdhampus ];
+    platforms = platforms.all;
+    mainProgram = "quich";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/r3ctl/default.nix b/nixpkgs/pkgs/tools/misc/r3ctl/default.nix
new file mode 100644
index 000000000000..8af95a4630cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/r3ctl/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, qt5
+, qtbase
+, qttools
+, qtwebsockets
+, qtmultimedia
+, fetchFromGitHub
+}:
+
+qt5.mkDerivation {
+  pname = "r3ctl";
+  version = "a82cb5b3123224e706835407f21acea9dc7ab0f0";
+
+  src = fetchFromGitHub {
+    owner = "0xfeedc0de64";
+    repo = "r3ctl";
+    rev = "a82cb5b3123224e706835407f21acea9dc7ab0f0";
+    sha256 = "5/L8jvEDJGJzsuAxPrctSDS3d8lbFX/+f52OVyGQ/RY=";
+  };
+
+  buildPhase = ''
+    qmake .
+    make
+  '';
+
+  postInstall = ''
+    mv bin $out
+  '';
+
+  nativeBuildInputs = [
+    qt5.wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qttools
+    qtmultimedia
+    qtwebsockets
+  ];
+
+  meta = with lib; {
+    description = "A cmdline tool to control the r3 hackerspace lights";
+    mainProgram = "r3ctl";
+    homepage = "https://github.com/0xfeedc0de64/r3ctl";
+    maintainers = with maintainers; [ mkg20001 ];
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/radeon-profile/default.nix b/nixpkgs/pkgs/tools/misc/radeon-profile/default.nix
new file mode 100644
index 000000000000..8c42cccfcdf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/radeon-profile/default.nix
@@ -0,0 +1,33 @@
+{ lib, mkDerivation, fetchFromGitHub
+, qtbase, qtcharts, qmake, libXrandr, libdrm
+}:
+
+mkDerivation rec {
+
+  pname = "radeon-profile";
+  version = "20200824";
+
+  nativeBuildInputs = [ qmake ];
+  buildInputs = [ qtbase qtcharts libXrandr libdrm ];
+
+  src = (fetchFromGitHub {
+    owner  = "marazmista";
+    repo   = "radeon-profile";
+    rev    = version;
+    sha256 = "0z6a9w79s5wiy8cvwcdp5wmgf6702d0wzw95f6176yhp4cwy4cq2";
+  }) + "/radeon-profile";
+
+  preConfigure = ''
+    substituteInPlace radeon-profile.pro \
+      --replace "/usr/" "$out/"
+  '';
+
+  meta = with lib; {
+    description = "Application to read current clocks of AMD Radeon cards";
+    homepage    = "https://github.com/marazmista/radeon-profile";
+    license     = licenses.gpl2Plus;
+    platforms   = platforms.linux;
+    mainProgram = "radeon-profile";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/ramfetch/default.nix b/nixpkgs/pkgs/tools/misc/ramfetch/default.nix
new file mode 100644
index 000000000000..136c33598277
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ramfetch/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchgit
+}:
+
+stdenv.mkDerivation rec {
+  name = "ramfetch";
+  version = "1.1.0a";
+
+  src = fetchgit {
+    url = "https://codeberg.org/jahway603/ramfetch.git";
+    rev = version;
+    hash = "sha256-sUreZ6zm+a1N77OZszjnpS4mmo5wL1dhNGVldJCGoag=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D ramfetch $out/bin/ramfetch
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A tool which displays memory information";
+    homepage = "https://codeberg.org/jahway603/ramfetch";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.markbeep ];
+    mainProgram = "ramfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rargs/default.nix b/nixpkgs/pkgs/tools/misc/rargs/default.nix
new file mode 100644
index 000000000000..54c7e393d2d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rargs/default.nix
@@ -0,0 +1,25 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname   = "rargs";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner  = "lotabout";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "188gj05rbivci1z4z29vwdwxlj2w01v5i4avwrxjnj1dd6mmlbxd";
+  };
+
+  cargoSha256 = "18yd4dpzjyw6w1ms74pzxqyn5fkh8q4rsg6rqsp6bsz7300fxxvh";
+
+  doCheck=false;  # `rargs`'s test depends on the deprecated `assert_cli` crate, which in turn is not in Nixpkgs
+
+  meta = with lib; {
+    description = "xargs + awk with pattern matching support";
+    homepage    = "https://github.com/lolabout/rargs";
+    license     = with licenses; [ mit ];
+    maintainers = with maintainers; [ pblkt ];
+    mainProgram = "rargs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rates/default.nix b/nixpkgs/pkgs/tools/misc/rates/default.nix
new file mode 100644
index 000000000000..3989074d2461
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rates/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rates";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "lunush";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-zw2YLTrvqbGKR8Dg5W+kJTDKIfro+MNyjHXfZMXZhaw=";
+  };
+
+  cargoSha256 = "sha256-5EcTeMfa1GNp1q60qSgEi/I3298hXUD1Vc1K55XGW4I=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "CLI tool that brings currency exchange rates right into your terminal";
+    homepage = "https://github.com/lunush/rates";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "rates";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rauc/default.nix b/nixpkgs/pkgs/tools/misc/rauc/default.nix
new file mode 100644
index 000000000000..03c0fb176d79
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rauc/default.nix
@@ -0,0 +1,55 @@
+{ curl
+, dbus
+, fetchFromGitHub
+, glib
+, json-glib
+, lib
+, nix-update-script
+, openssl
+, pkg-config
+, stdenv
+, meson
+, ninja
+, util-linux
+, libnl
+, systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rauc";
+  version = "1.11.3";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-sFOvkr6WbiP99GNAttK9ZmRg+O/hoUQDCnW7vq9s/vo=";
+  };
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkg-config meson ninja glib ];
+
+  buildInputs = [ curl dbus glib json-glib openssl util-linux libnl systemd ];
+
+  mesonFlags = [
+    "--buildtype=release"
+    (lib.mesonOption "systemdunitdir" "${placeholder "out"}/lib/systemd/system")
+    (lib.mesonOption "dbusinterfacesdir" "${placeholder "out"}/share/dbus-1/interfaces")
+    (lib.mesonOption "dbuspolicydir" "${placeholder "out"}/share/dbus-1/system.d")
+    (lib.mesonOption "dbussystemservicedir" "${placeholder "out"}/share/dbus-1/system-services")
+  ];
+
+  meta = with lib; {
+    description = "Safe and secure software updates for embedded Linux";
+    homepage = "https://rauc.io";
+    license = licenses.lgpl21Only;
+    maintainers = with maintainers; [ emantor ];
+    platforms = with platforms; linux;
+    mainProgram = "rauc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rcm/default.nix b/nixpkgs/pkgs/tools/misc/rcm/default.nix
new file mode 100644
index 000000000000..3aa8ba412e17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rcm/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rcm";
+  version = "1.3.6";
+
+  src = fetchurl {
+    url = "https://thoughtbot.github.io/rcm/dist/rcm-${version}.tar.gz";
+    sha256 = "sha256-9P37xFHR+1dkUxKQogKgqHH2uBujwBprdsSUNchQgKU=";
+  };
+
+  patches = [ ./fix-rcmlib-path.patch ];
+
+  postPatch = ''
+    for f in bin/*.in; do
+      substituteInPlace $f --subst-var-by rcm $out
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thoughtbot/rcm";
+    description = "Management Suite for Dotfiles";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ malyn AndersonTorres ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch b/nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch
new file mode 100644
index 000000000000..e7d600d2a1f2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rcm/fix-rcmlib-path.patch
@@ -0,0 +1,48 @@
+diff --git a/bin/lsrc.in b/bin/lsrc.in
+index fcf5fbe..119d659 100755
+--- a/bin/lsrc.in
++++ b/bin/lsrc.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ pushdir() {
+diff --git a/bin/mkrc.in b/bin/mkrc.in
+index da22a63..a6bb0ad 100755
+--- a/bin/mkrc.in
++++ b/bin/mkrc.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ destination() {
+diff --git a/bin/rcdn.in b/bin/rcdn.in
+index ae7aad8..c210599 100755
+--- a/bin/rcdn.in
++++ b/bin/rcdn.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ remove_link() {
+diff --git a/bin/rcup.in b/bin/rcup.in
+index bdae664..2076f53 100755
+--- a/bin/rcup.in
++++ b/bin/rcup.in
+@@ -1,6 +1,6 @@
+ #!@SHELL@
+ 
+-: ${RCM_LIB:=$(dirname "$0")/../share/rcm}
++RCM_LIB=@rcm@/share/rcm
+ . "$RCM_LIB/rcm.sh"
+ 
+ print_ln_v() {
diff --git a/nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix b/nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix
new file mode 100644
index 000000000000..db05aeda96a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/recoverjpeg/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, makeWrapper, python3, exif, imagemagick }:
+
+stdenv.mkDerivation rec {
+  pname = "recoverjpeg";
+  version = "2.6.3";
+
+  src = fetchurl {
+    url = "https://www.rfc1149.net/download/recoverjpeg/${pname}-${version}.tar.gz";
+    sha256 = "009jgxi8lvdp00dwfj0n4x5yqrf64x00xdkpxpwgl2v8wcqn56fv";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ python3 ];
+
+  postFixup = ''
+    wrapProgram $out/bin/sort-pictures \
+      --prefix PATH : ${lib.makeBinPath [ exif imagemagick ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://rfc1149.net/devel/recoverjpeg.html";
+    description = "Recover lost JPEGs and MOV files on a bogus memory card or disk";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/recutils/default.nix b/nixpkgs/pkgs/tools/misc/recutils/default.nix
new file mode 100644
index 000000000000..4bd3ef131c11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/recutils/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchurl
+, bc
+, check
+, curl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "recutils";
+  version = "1.9";
+
+  src = fetchurl {
+    url = "mirror://gnu/recutils/${pname}-${version}.tar.gz";
+    hash = "sha256-YwFZKwAgwUtFZ1fvXUNNSfYCe45fOkmdEzYvIFxIbg4=";
+  };
+
+  hardeningDisable = lib.optional stdenv.cc.isClang "format";
+
+  buildInputs = [
+    curl
+  ];
+
+  nativeCheckInputs = [
+    bc
+    check
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/recutils/";
+    description = "Tools and libraries to access human-editable, text-based databases";
+    longDescription = ''
+      GNU Recutils is a set of tools and libraries to access human-editable,
+      text-based databases called recfiles. The data is stored as a sequence of
+      records, each record containing an arbitrary number of named fields.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/remind/default.nix b/nixpkgs/pkgs/tools/misc/remind/default.nix
new file mode 100644
index 000000000000..31b7dad24003
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/remind/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchurl
+, tk
+, tcllib
+, tcl
+, tkremind ? true
+}:
+
+let
+  inherit (lib) optionals optionalString;
+  tclLibraries = optionals tkremind [ tcllib tk ];
+  tkremindPatch = optionalString tkremind ''
+    substituteInPlace scripts/tkremind --replace "exec wish" "exec ${tk}/bin/wish"
+  '';
+in
+tcl.mkTclDerivation rec {
+  pname = "remind";
+  version = "04.03.07";
+
+  src = fetchurl {
+    url = "https://dianne.skoll.ca/projects/remind/download/remind-${version}.tar.gz";
+    sha256 = "sha256-s/jEsNXUBigNHPTCi3e4V2pGUNhK2s5/n+sU1ow7UU0=";
+  };
+
+  propagatedBuildInputs = tclLibraries;
+
+  postPatch = ''
+    substituteInPlace ./configure \
+      --replace "sleep 1" "true"
+    substituteInPlace ./src/init.c \
+      --replace "rkrphgvba(0);" "" \
+      --replace "rkrphgvba(1);" ""
+    ${tkremindPatch}
+  '';
+
+  meta = with lib; {
+    homepage = "https://dianne.skoll.ca/projects/remind/";
+    description = "Sophisticated calendar and alarm program for the console";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ raskin kovirobi ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/remote-exec/default.nix b/nixpkgs/pkgs/tools/misc/remote-exec/default.nix
new file mode 100644
index 000000000000..84b8026c0a07
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/remote-exec/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchFromGitHub
+, buildPythonApplication
+, click
+, pydantic
+, toml
+, watchdog
+, pytestCheckHook
+, rsync
+}:
+
+buildPythonApplication rec {
+  pname = "remote-exec";
+  version = "1.13.3";
+
+  src = fetchFromGitHub {
+    owner = "remote-cli";
+    repo = "remote";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-rsboHJLOHXnpXtsVsvsfKsav8mSbloaq2lzZnU2pw6c=";
+  };
+
+  patches = [
+    # relax install requirements
+    # https://github.com/remote-cli/remote/pull/60.patch
+    (fetchpatch {
+      url = "https://github.com/remote-cli/remote/commit/a2073c30c7f576ad7ceb46e39f996de8d06bf186.patch";
+      hash = "sha256-As0j+yY6LamhOCGFzvjUQoXFv46BN/tRBpvIS7r6DaI=";
+    })
+  ];
+
+  # remove legacy endpoints, we use --multi now
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace-fail '"mremote' '#"mremote'
+  '';
+
+  dependencies = [
+    click
+    pydantic
+    toml
+    watchdog
+  ];
+
+  # disable pytest --cov
+  preCheck = ''
+    rm setup.cfg
+  '';
+
+  doCheck = true;
+
+  nativeCheckInputs = [
+    rsync
+  ];
+
+  checkInputs = [
+    pytestCheckHook
+  ];
+
+  disabledTestPaths = lib.optionals stdenv.isDarwin [
+    # `watchdog` dependency does not correctly detect fsevents on darwin.
+    # this only affects `remote --stream-changes`
+    "test/test_file_changes.py"
+  ];
+
+  meta = with lib; {
+    description = "Work with remote hosts seamlessly via rsync and ssh";
+    homepage = "https://github.com/remote-cli/remote";
+    changelog = "https://github.com/remote-cli/remote/releases/tag/v${version}";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ pbsds ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rename/default.nix b/nixpkgs/pkgs/tools/misc/rename/default.nix
new file mode 100644
index 000000000000..d7eed90d0639
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rename/default.nix
@@ -0,0 +1,20 @@
+{ lib, fetchFromGitHub, perlPackages }:
+
+perlPackages.buildPerlPackage rec {
+  pname = "rename";
+  version = "1.11";
+  outputs = [ "out" ];
+  src = fetchFromGitHub {
+    owner = "pstray";
+    repo = "rename";
+    rev = "v${version}";
+    sha256 = "SK6wS3IxjCftuDiiZU27TFnn9GVd137zmzvGH88cNLI=";
+  };
+  meta = with lib; {
+    description = "Rename files according to a Perl rewrite expression";
+    homepage = "https://github.com/pstray/rename";
+    maintainers = with maintainers; [ mkg cyplo ];
+    license = with licenses; [ gpl1Plus ];
+    mainProgram = "rename";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/renameutils/default.nix b/nixpkgs/pkgs/tools/misc/renameutils/default.nix
new file mode 100644
index 000000000000..1b6c70a2773d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/renameutils/default.nix
@@ -0,0 +1,37 @@
+{lib, stdenv, fetchurl, readline, coreutils }:
+
+stdenv.mkDerivation rec {
+  pname = "renameutils";
+  version = "0.12.0";
+
+  src = fetchurl {
+    url = "mirror://savannah/renameutils/renameutils-${version}.tar.gz";
+    sha256 = "18xlkr56jdyajjihcmfqlyyanzyiqqlzbhrm6695mkvw081g1lnb";
+  };
+
+  patches = [ ./install-exec.patch ];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace src/apply.c \
+      --replace "command = \"mv\"" "command = \"${coreutils}/bin/mv\"" \
+      --replace "command = \"cp\"" "command = \"${coreutils}/bin/cp\""
+    substituteInPlace src/icmd.c \
+      --replace "#define MV_COMMAND \"mv\"" "#define MV_COMMAND \"${coreutils}/bin/mv\"" \
+      --replace "#define CP_COMMAND \"cp\"" "#define CP_COMMAND \"${coreutils}/bin/cp\""
+    substituteInPlace src/qcmd.c \
+      --replace "ls_program = xstrdup(\"ls\")" "ls_program = xstrdup(\"${coreutils}/bin/ls\")"
+  '';
+
+  nativeBuildInputs = [ readline ];
+
+  preConfigure = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    export ac_cv_func_lstat64=no
+  '';
+
+  meta = {
+    homepage = "https://www.nongnu.org/renameutils/";
+    description = "A set of programs to make renaming of files faster";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch b/nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch
new file mode 100644
index 000000000000..32b8de5adb80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/renameutils/install-exec.patch
@@ -0,0 +1,24 @@
+diff -Naur renameutils-0.12.0-orig/src/Makefile.am renameutils-0.12.0/src/Makefile.am
+--- renameutils-0.12.0-orig/src/Makefile.am	2012-04-23 12:10:43.000000000 +0100
++++ renameutils-0.12.0/src/Makefile.am	2013-03-25 11:13:21.605447377 +0000
+@@ -49,7 +49,7 @@
+ 	@[ -f icp ] || (echo $(LN_S) icmd icp ; $(LN_S) icmd icp)
+ 
+ install-exec-local:
+-	$(mkdir_p) $(DESTDIR)($bindir)
++	$(mkdir_p) $(DESTDIR)$(bindir)
+ 	@[ -f $(DESTDIR)$(bindir)/qmv ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv)
+ 	@[ -f $(DESTDIR)$(bindir)/qcp ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp)
+ 	@[ -f $(DESTDIR)$(bindir)/imv ] || (echo $(LN_S) icmd $(DESTDIR)$(bindir)/imv ; $(LN_S) icmd $(DESTDIR)$(bindir)/imv)
+diff -Naur renameutils-0.12.0-orig/src/Makefile.in renameutils-0.12.0/src/Makefile.in
+--- renameutils-0.12.0-orig/src/Makefile.in	2012-04-23 12:24:10.000000000 +0100
++++ renameutils-0.12.0/src/Makefile.in	2013-03-25 11:13:40.549847891 +0000
+@@ -1577,7 +1577,7 @@
+ 	@[ -f icp ] || (echo $(LN_S) icmd icp ; $(LN_S) icmd icp)
+ 
+ install-exec-local:
+-	$(mkdir_p) $(DESTDIR)($bindir)
++	$(mkdir_p) $(DESTDIR)$(bindir)
+ 	@[ -f $(DESTDIR)$(bindir)/qmv ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qmv)
+ 	@[ -f $(DESTDIR)$(bindir)/qcp ] || (echo $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp ; $(LN_S) qcmd $(DESTDIR)$(bindir)/qcp)
+ 	@[ -f $(DESTDIR)$(bindir)/imv ] || (echo $(LN_S) icmd $(DESTDIR)$(bindir)/imv ; $(LN_S) icmd $(DESTDIR)$(bindir)/imv)
diff --git a/nixpkgs/pkgs/tools/misc/reredirect/default.nix b/nixpkgs/pkgs/tools/misc/reredirect/default.nix
new file mode 100644
index 000000000000..479c8ac28e54
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/reredirect/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "reredirect";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "jerome-pouiller";
+    repo = "reredirect";
+    rev = "v${version}";
+    sha256 = "sha256-RHRamDo7afnJ4DlOVAqM8lQAC60YESGSMKa8Io2vcX0=";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  postFixup = ''
+    substituteInPlace ${placeholder "out"}/bin/relink \
+      --replace "reredirect" "${placeholder "out"}/bin/reredirect"
+  '';
+
+  meta = with lib; {
+    description = "Tool to dynamicly redirect outputs of a running process";
+    homepage = "https://github.com/jerome-pouiller/reredirect";
+    license = licenses.mit;
+    maintainers = [ maintainers.tobim ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/rfc/default.nix b/nixpkgs/pkgs/tools/misc/rfc/default.nix
new file mode 100644
index 000000000000..d747cbf185e4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rfc/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, curl
+, installShellFiles
+, makeWrapper
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "rfc";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "bfontaine";
+    repo = "rfc";
+    rev = "v${version}";
+    hash = "sha256-zN+MQtHh69PkzbrfceHFpBYCPmTg9qrOf/ML2efq6Xk=";
+  };
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin rfc
+    wrapProgram $out/bin/rfc \
+      --prefix PATH : ${lib.makeBinPath [ curl ]}
+    installManPage man/rfc.1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A tool to read RFCs from the command line";
+    longDescription = ''
+      rfc is a little tool written in Bash to read RFCs from the command-line.
+      It fetches RFCs and drafts from the Web and caches them locally.
+    '';
+    homepage = "https://github.com/bfontaine/rfc";
+    changelog = "https://github.com/bfontaine/rfc/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.all;
+    mainProgram = "rfc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix b/nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix
new file mode 100644
index 000000000000..9ce23873aa27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-c-client/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitea, autoreconfHook, check, pkg-config, file, protobufc
+,withWolfSSL ? false, wolfssl
+,withGnuTLS ? false, gnutls
+,withJSON ? true, json_c
+}:
+
+stdenv.mkDerivation rec {
+  pname = "riemann-c-client";
+  version = "2.1.1";
+
+  src = fetchFromGitea {
+    domain = "git.madhouse-project.org";
+    owner = "algernon";
+    repo = "riemann-c-client";
+    rev = "riemann-c-client-${version}";
+    hash = "sha256-FIhTT57g2uZBaH3EPNxNUNJn9n+0ZOhI6WMyF+xIr/Q=";
+  };
+
+  outputs = [ "bin" "dev" "out" ];
+
+  nativeBuildInputs = [ autoreconfHook check pkg-config ];
+  buildInputs = [ file protobufc ]
+    ++ lib.optional withWolfSSL wolfssl
+    ++ lib.optional withGnuTLS gnutls
+    ++ lib.optional withJSON json_c
+  ;
+
+  configureFlags = []
+    ++ lib.optional withWolfSSL "--with-tls=wolfssl"
+    ++ lib.optional withGnuTLS "--with-tls=gnutls"
+  ;
+
+  doCheck = true;
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://git.madhouse-project.org/algernon/riemann-c-client";
+    description = "A C client library for the Riemann monitoring system";
+    mainProgram = "riemann-client";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ pradeepchhetri ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile
new file mode 100644
index 000000000000..b2e34d5120e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+
+gem "riemann-tools"
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock
new file mode 100644
index 000000000000..a3e1ea62a8c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    beefcake (1.0.0)
+    json (1.8.6)
+    mtrc (0.0.4)
+    optimist (3.0.0)
+    riemann-client (0.2.6)
+      beefcake (>= 0.3.5, <= 1.0.0)
+      mtrc (>= 0.0.4)
+      trollop (>= 1.16.2)
+    riemann-tools (0.2.14)
+      json (~> 1.8)
+      optimist (~> 3.0, >= 3.0.0)
+      riemann-client (~> 0.2, >= 0.2.6)
+    trollop (2.9.9)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  riemann-tools
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/default.nix b/nixpkgs/pkgs/tools/misc/riemann-tools/default.nix
new file mode 100644
index 000000000000..a9977aefd66c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/default.nix
@@ -0,0 +1,37 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "riemann-tools";
+  gemdir = ./.;
+  exes = [
+    "riemann-apache-status"
+    "riemann-bench"
+    "riemann-cloudant"
+    "riemann-consul"
+    "riemann-dir-files-count"
+    "riemann-dir-space"
+    "riemann-diskstats"
+    "riemann-fd"
+    "riemann-freeswitch"
+    "riemann-haproxy"
+    "riemann-health"
+    "riemann-kvminstance"
+    "riemann-memcached"
+    "riemann-net"
+    "riemann-nginx-status"
+    "riemann-ntp"
+    "riemann-portcheck"
+    "riemann-proc"
+    "riemann-varnish"
+    "riemann-zookeeper"
+  ];
+
+  passthru.updateScript = bundlerUpdateScript "riemann-tools";
+
+  meta = with lib; {
+    description = "Tools to submit data to Riemann";
+    homepage = "https://riemann.io";
+    maintainers = with maintainers; [ manveru nicknovitski ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix b/nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix
new file mode 100644
index 000000000000..57acb5ac9013
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/riemann-tools/gemset.nix
@@ -0,0 +1,74 @@
+{
+  beefcake = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10gid0a7pdllh3qmjiqkqxgfqvd7m1f2dmcm4gcd19s63pv620gv";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  mtrc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xj2pv4cpn0ad1xw38sinsxfzwhgqs6ff18hw0cwz5xmsf3zqmiz";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  optimist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05jxrp3nbn5iilc1k7ir90mfnwc5abc9h78s5rpm3qafwqxvcj4j";
+      type = "gem";
+    };
+    version = "3.0.0";
+  };
+  riemann-client = {
+    dependencies = ["beefcake" "mtrc" "trollop"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "02rp8x2y8h61x8mx9c8kwgm2yyvgg63g8km93zmwmkpp5fyi3fi8";
+      type = "gem";
+    };
+    version = "0.2.6";
+  };
+  riemann-tools = {
+    dependencies = ["json" "optimist" "riemann-client"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07w9x3iw32zwpzsm9l63vn0nv1778qls1blqysr45m7l7x6n5wjx";
+      type = "gem";
+    };
+    version = "0.2.14";
+  };
+  trollop = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "074h7lns72kg1dl5gvz5apl3xz1i0axbnbc01pf2kbw4q0lkpnp4";
+      type = "gem";
+    };
+    version = "2.9.9";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rig/default.nix b/nixpkgs/pkgs/tools/misc/rig/default.nix
new file mode 100644
index 000000000000..b9a3e0951e3c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rig/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl } :
+
+stdenv.mkDerivation rec {
+  version = "1.11";
+  pname = "rig";
+
+  src = fetchurl {
+    url = "https://ayera.dl.sourceforge.net/project/rig/rig/${version}/rig-${version}.tar.gz";
+    sha256 = "1f3snysjqqlpk2kgvm5p2icrj4lsdymccmn3igkc2f60smqckgq0";
+  };
+
+  # Note: diff modified from Debian: Norbert Veber <nveber@debian.org>
+  # http://deb.debian.org/debian/pool/main/r/rig/rig_1.11-1.diff.gz
+  patches = [ ./rig_1.11-1.diff ];
+
+  makeFlags = [ "CXX=${stdenv.cc.targetPrefix}c++" ];
+
+  meta = {
+    homepage = "https://rig.sourceforge.net/";
+    description = "Random identity generator";
+    longDescription = ''
+      RIG (Random Identity Generator) is a free replacement for a shareware
+      program out there called 'fake'. It generates random, yet real-looking,
+      personal data. It is useful if you need to feed a name to a Web site,
+      BBS, or real person, and are too lazy to think of one yourself. Also,
+      if the Web site/BBS/person you are giving the information to tries to
+      cross-check the city, state, zip, or area code, it will check out.
+    '';
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ tomberek ];
+    platforms = with lib.platforms; all;
+    mainProgram = "rig";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff b/nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff
new file mode 100644
index 000000000000..301cf78b5a9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rig/rig_1.11-1.diff
@@ -0,0 +1,39 @@
+--- rig-1.11.orig/Makefile
++++ rig-1.11/Makefile
+@@ -1,20 +1,21 @@
+-PREFIX=/usr/local
++PREFIX=${out}
+ BINDIR=${PREFIX}/bin
+ MANDIR=${PREFIX}/man
+ DATADIR=${PREFIX}/share/rig
++CXX=g++
+ 
+ all: rig rig.6
+ rig: rig.cc
+-	g++ -g rig.cc -o rig -Wall -DDATADIR="\"$(DATADIR)\""
++	${CXX} -O2 -g rig.cc -o rig -Wall -DDATADIR="\"$(DATADIR)\""
+ 
+ rig.6: rig.6.in
+ 	sed s@DATADIR@"$(DATADIR)"@g < rig.6.in > rig.6
+ 
+ install: rig rig.6
+-	install -g 0 -m 755 -o 0 -s rig $(BINDIR)
+-	install -g 0 -m 644 -o 0 rig.6 $(MANDIR)/man6/rig.6
+-	install -g 0 -m 755 -o 0 -d $(DATADIR)
+-	install -g 0 -m 644 -o 0 data/*.idx $(DATADIR)
++	install -m 755 -d $(DESTDIR)$(DATADIR)
++	install -m 755 -d $(DESTDIR)$(BINDIR)
++	install -m 755 rig $(DESTDIR)$(BINDIR)/rig
++	install -m 644 data/*.idx $(DESTDIR)$(DATADIR)
+ 
+ clean:
+ 	rm -rf *~ *.rej *.orig *.o rig rig.6
+--- rig-1.11.orig/rig.cc
++++ rig-1.11/rig.cc
+@@ -26,6 +26,7 @@
+ #include <time.h>
+ #include <errno.h>
+ #include <assert.h>
++#include <string.h>
+ 
+ using namespace std;
diff --git a/nixpkgs/pkgs/tools/misc/ripdrag/default.nix b/nixpkgs/pkgs/tools/misc/ripdrag/default.nix
new file mode 100644
index 000000000000..ac8772b30496
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ripdrag/default.nix
@@ -0,0 +1,28 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, wrapGAppsHook4, gtk4 }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ripdrag";
+  version = "0.4.8";
+
+  src = fetchFromGitHub {
+    owner = "nik012003";
+    repo = "ripdrag";
+    rev = "v${version}";
+    hash = "sha256-DjLQJUaSwglM9mtgKhG+JZ9vHTTfLXy21YLkZiPfTyE=";
+  };
+
+  cargoHash = "sha256-un7HE91w4p5+2LrjasKC8/q+nGg8F/6+ZACS5X3OJ1Q=";
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook4 ];
+
+  buildInputs = [ gtk4 ];
+
+  meta = with lib; {
+    description = "An application that lets you drag and drop files from and to the terminal";
+    homepage = "https://github.com/nik012003/ripdrag";
+    changelog = "https://github.com/nik012003/ripdrag/releases/tag/${src.rev}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "ripdrag";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ristate/default.nix b/nixpkgs/pkgs/tools/misc/ristate/default.nix
new file mode 100644
index 000000000000..3c4baea4d3c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ristate/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitLab }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ristate";
+  version = "unstable-2021-09-10";
+
+  src = fetchFromGitLab {
+    owner = "snakedye";
+    repo = pname;
+    rev = "34dfd0a0bab5b36df118d8da3956fd938c625b15";
+    sha256 = "sha256-CH9DZ/7Bhbe6qKg1Nbj1rA9SzIsqVlBJg51XxAh0XnY=";
+  };
+
+  cargoSha256 = "sha256-HTfRWvE3m7XZhZDj5bEkrQI3pD6GNiKd2gJtMjRQ8Rw=";
+
+  meta = with lib; {
+    description = "A river-status client written in Rust";
+    homepage = "https://gitlab.com/snakedye/ristate";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kranzes ];
+    mainProgram = "ristate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rkflashtool/default.nix b/nixpkgs/pkgs/tools/misc/rkflashtool/default.nix
new file mode 100644
index 000000000000..fa37c98966eb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rkflashtool/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libusb1 }:
+
+stdenv.mkDerivation rec {
+  pname = "rkflashtool";
+  version = "5.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/rkflashtool/rkflashtool-${version}-src.tar.bz2";
+    sha256 = "0dbp1crw7pjav9gffrnskhkf0gxlj4xgp65clqhvfmv32460xb9c";
+  };
+
+  versionh = fetchurl {
+    url = "mirror://sourceforge/rkflashtool/version.h";
+    sha256 = "1mkcy3yyfaddhzg524hjnhvmwdmdfzbavib8d9p5y38pcqy8xgdp";
+  };
+
+  buildInputs = [ libusb1 ];
+
+  preBuild = ''
+    cp $versionh version.h
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp rkunpack rkcrc rkflashtool rkparameters rkparametersblock rkunsign rkmisc $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/rkflashtool/";
+    description = "Tools for flashing Rockchip devices";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.viric ];
+    license = licenses.bsd2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rkvm/default.nix b/nixpkgs/pkgs/tools/misc/rkvm/default.nix
new file mode 100644
index 000000000000..bf6ef6e482d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rkvm/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, libevdev
+, openssl
+, makeWrapper
+, nixosTests
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rkvm";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "htrefil";
+    repo = pname;
+    rev = version;
+    hash = "sha256-bWDVc5pWc5gtwGF3vwUgjDhqZP7E79nteKiuAEEbw6E=";
+  };
+
+  cargoHash = "sha256-FUaycVxW7QJ5gTZ/8bWjqSaMSepRF5iqlBNJLaDRNxc=";
+
+  nativeBuildInputs = [ pkg-config rustPlatform.bindgenHook makeWrapper ];
+  buildInputs = [ libevdev ];
+
+  postInstall = ''
+    install -Dm444 -t "$out/lib/systemd/system" systemd/rkvm-*.service
+    install -Dm444 example/server.toml "$out/etc/rkvm/server.example.toml"
+    install -Dm444 example/client.toml "$out/etc/rkvm/client.example.toml"
+
+    wrapProgram $out/bin/rkvm-certificate-gen --prefix PATH : ${lib.makeBinPath [ openssl ]}
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) rkvm;
+  };
+
+  meta = with lib; {
+    description = "Virtual KVM switch for Linux machines";
+    homepage = "https://github.com/htrefil/rkvm";
+    changelog = "https://github.com/htrefil/rkvm/releases/tag/${version}";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ckie ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rlwrap/default.nix b/nixpkgs/pkgs/tools/misc/rlwrap/default.nix
new file mode 100644
index 000000000000..f1c2d6a58971
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rlwrap/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, perl, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "rlwrap";
+  version = "0.46.1";
+
+  src = fetchFromGitHub {
+    owner = "hanslub42";
+    repo = "rlwrap";
+    rev = version;
+    sha256 = "sha256-yKJXfdxfaCsmPtI0KmTzfFKY+evUuytomVrLsSCYDGo=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/readline.c \
+      --replace "if(*p >= 0 && *p < ' ')" "if(*p >= 0 && (*p >= 0) && (*p < ' '))"
+  '';
+
+  nativeBuildInputs = [ autoreconfHook perl ];
+
+  buildInputs = [ readline ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-Wno-error=implicit-function-declaration";
+
+  meta = with lib; {
+    description = "Readline wrapper for console programs";
+    homepage = "https://github.com/hanslub42/rlwrap";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jlesquembre ];
+    mainProgram = "rlwrap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rmate-sh/default.nix b/nixpkgs/pkgs/tools/misc/rmate-sh/default.nix
new file mode 100644
index 000000000000..81189a1cd6c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmate-sh/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, patsh
+, hostname
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rmate";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "aurora";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-fmK6h9bqZ0zO3HWfZvPdYuZ6i/0HZ1CA3FUnkS+E9ns=";
+  };
+
+  nativeBuildInputs = [ patsh ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    substituteInPlace rmate \
+      --replace-fail \
+        'echo "hostname"' \
+        'echo "${hostname}/bin/hostname"'
+    patsh -f rmate -s ${builtins.storeDir}
+
+    runHook preBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 rmate $out/bin/rmate
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Remote TextMate 2 implemented as shell script";
+    longDescription = ''
+      TextMate 2 has a nice feature where it is possible to edit
+      files on a remote server using a helper script called 'rmate',
+      which feeds the file back to the editor over a reverse tunnel.
+      This is a rmate implementation in shell!
+    '';
+    homepage = "https://github.com/aurora/rmate";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pbsds ];
+    mainProgram = "rmate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rmlint/default.nix b/nixpkgs/pkgs/tools/misc/rmlint/default.nix
new file mode 100644
index 000000000000..2c11cbf195bd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmlint/default.nix
@@ -0,0 +1,91 @@
+{ lib, stdenv
+, cairo
+, elfutils
+, fetchFromGitHub
+, glib
+, gobject-introspection
+, gtksourceview3
+, json-glib
+, makeWrapper
+, pango
+, pkg-config
+, polkit
+, python3
+, scons
+, sphinx
+, util-linux
+, wrapGAppsHook
+, withGui ? false }:
+
+assert withGui -> !stdenv.isDarwin;
+
+stdenv.mkDerivation rec {
+  pname = "rmlint";
+  version = "2.10.2";
+
+  src = fetchFromGitHub {
+    owner = "sahib";
+    repo = "rmlint";
+    rev = "v${version}";
+    sha256 = "sha256-pOo1YfeqHUU6xyBRFbcj2lX1MHJ+a5Hi31BMC1nYZGo=";
+  };
+
+  patches = [
+    # pass through NIX_* environment variables to scons.
+    ./scons-nix-env.patch
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    sphinx
+    scons
+  ] ++ lib.optionals withGui [
+    makeWrapper
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    glib
+    json-glib
+    util-linux
+  ] ++ lib.optionals withGui [
+    cairo
+    gtksourceview3
+    pango
+    polkit
+    python3
+    python3.pkgs.pygobject3
+  ] ++ lib.optionals (lib.meta.availableOn stdenv.hostPlatform elfutils) [
+    elfutils
+  ];
+
+  prePatch = ''
+    # remove sources of nondeterminism
+    substituteInPlace lib/cmdline.c \
+      --replace "__DATE__" "\"Jan  1 1970\"" \
+      --replace "__TIME__" "\"00:00:00\""
+    substituteInPlace docs/SConscript \
+      --replace "gzip -c " "gzip -cn "
+  '';
+
+  # Otherwise tries to access /usr.
+  prefixKey = "--prefix=";
+
+  sconsFlags = lib.optionals (!withGui) [ "--without-gui" ];
+
+  # in GUI mode, this shells out to itself, and tries to import python modules
+  postInstall = lib.optionalString withGui ''
+    gappsWrapperArgs+=(--prefix PATH : "$out/bin")
+    gappsWrapperArgs+=(--prefix PYTHONPATH : "$(toPythonPath $out):$(toPythonPath ${python3.pkgs.pygobject3}):$(toPythonPath ${python3.pkgs.pycairo})")
+  '';
+
+  meta = with lib; {
+    description = "Extremely fast tool to remove duplicates and other lint from your filesystem";
+    homepage = "https://rmlint.readthedocs.org";
+    platforms = platforms.unix;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ aaschmid koral ];
+    mainProgram = "rmlint";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rmlint/scons-nix-env.patch b/nixpkgs/pkgs/tools/misc/rmlint/scons-nix-env.patch
new file mode 100644
index 000000000000..10ed5698be3a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmlint/scons-nix-env.patch
@@ -0,0 +1,19 @@
+scons does not use os environment by default:
+  https://scons.org/doc/2.1.0/HTML/scons-user/x1750.html
+
+nixpkgs' cc-wrapper on the other hand relies on various NIX_* variables
+to be passed through like NIX_CFLAGS_COMPILE_BEFORE.
+--- a/SConstruct
++++ b/SConstruct
+@@ -559,10 +559,7 @@ options = dict(
+     SHLINKCOMSTR=link_shared_library_message,
+     LINKCOMSTR=link_program_message,
+     PREFIX=GetOption('prefix'),
+-    ENV = dict([ (key, os.environ[key])
+-                 for key in os.environ
+-                 if key in ['PATH', 'TERM', 'HOME', 'PKG_CONFIG_PATH']
+-              ])
++    ENV = os.environ,
+ )
+ 
+ if ARGUMENTS.get('VERBOSE') == "1":
diff --git a/nixpkgs/pkgs/tools/misc/rmtrash/default.nix b/nixpkgs/pkgs/tools/misc/rmtrash/default.nix
new file mode 100644
index 000000000000..793cd49d4188
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmtrash/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenvNoCC, fetchFromGitHub, makeWrapper
+, trash-cli, coreutils, which, getopt }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "rmtrash";
+  version = "1.15";
+
+  src = fetchFromGitHub {
+    owner = "PhrozenByte";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vCtIM6jAYfrAOopiTcb4M5GNtucVnK0XEEKbMq1Cbc4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    for f in rm{,dir}trash; do
+      install -D ./$f $out/bin/$f
+      wrapProgram $out/bin/$f \
+        --prefix PATH : ${lib.makeBinPath [ trash-cli coreutils which getopt ]}
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/PhrozenByte/rmtrash";
+    description = "trash-put made compatible with GNUs rm and rmdir";
+    longDescription = ''
+      Put files (and directories) in trash using the `trash-put` command in a
+      way that is, otherwise as `trash-put` itself, compatible to GNUs `rm`
+      and `rmdir`.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ peelz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rmw/default.nix b/nixpkgs/pkgs/tools/misc/rmw/default.nix
new file mode 100644
index 000000000000..a6bbb4084029
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rmw/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rmw";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "theimpossibleastronaut";
+    repo = "rmw";
+    rev = "v${version}";
+    hash = "sha256-rfJdJHSkusZj/PN74KgV5i36YC0YRZmIfRdvkUNoKEM=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+  ];
+
+  buildInputs = [
+    ncurses
+  ];
+
+  meta = with lib; {
+    description = "Trashcan/ recycle bin utility for the command line";
+    homepage = "https://github.com/theimpossibleastronaut/rmw";
+    changelog = "https://github.com/theimpossibleastronaut/rmw/blob/${src.rev}/ChangeLog";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "rmw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix b/nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix
new file mode 100644
index 000000000000..b5762fd651ab
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rockbox-utility/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchurl
+, cryptopp
+, libusb1
+, makeWrapper
+, pkg-config
+, qt5
+, withEspeak ? false, espeak ? null
+}:
+
+stdenv.mkDerivation  rec {
+  pname = "rockbox-utility";
+  version = "1.4.1";
+
+  src = fetchurl {
+    url = "https://download.rockbox.org/rbutil/source/RockboxUtility-v${version}-src.tar.bz2";
+    hash = "sha256-PhlJ+fNY4/Qjoc72zV9WO+kNqF5bZQuwOh4EpAJwqX4=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+    qt5.qmake
+    qt5.wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    cryptopp
+    libusb1
+    qt5.qtbase
+    qt5.qttools
+  ]
+  ++ lib.optional withEspeak espeak;
+
+  postPatch = ''
+    sed -i rbutil/rbutilqt/rbutilqt.pro \
+        -e '/^lrelease.commands =/ s|$$\[QT_INSTALL_BINS\]/lrelease -silent|${lib.getDev qt5.qttools}/bin/lrelease|'
+  '';
+
+  preConfigure = ''
+    cd rbutil/rbutilqt
+    lrelease rbutilqt.pro
+  '';
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: libmkimxboot.a(elf.c.o):utils/imxtools/sbtools/misc.h:43: multiple definition of `g_nr_keys';
+  #     libmkimxboot.a(mkimxboot.c.o):utils/imxtools/sbtools/misc.h:43: first defined here
+  # TODO: try to remove with 1.5.1 update.
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 RockboxUtility $out/bin/rockboxutility
+    ln -s $out/bin/rockboxutility $out/bin/RockboxUtility
+    wrapProgram $out/bin/rockboxutility \
+    ${lib.optionalString withEspeak ''
+      --prefix PATH : ${espeak}/bin
+    ''}
+
+    runHook postInstall
+  '';
+
+  # `make build/rcc/qrc_rbutilqt-lang.cpp` fails with
+  #      RCC: Error in 'rbutilqt-lang.qrc': Cannot find file 'lang/rbutil_cs.qm'
+  # Do not add `lrelease rbutilqt.pro` into preConfigure, otherwise `make lrelease`
+  # may clobber the files read by the parallel `make build/rcc/qrc_rbutilqt-lang.cpp`.
+  enableParallelBuilding = false;
+
+  meta = with lib; {
+    homepage = "https://www.rockbox.org";
+    description = "Open source firmware for digital music players";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres goibhniu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rot8/default.nix b/nixpkgs/pkgs/tools/misc/rot8/default.nix
new file mode 100644
index 000000000000..6a62d05b5a5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rot8/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rot8";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "efernau";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-dHx3vFY0ztyTIlzUi22TYphPD5hvgfHrWaaeoGxnvW0=";
+  };
+
+  cargoHash = "sha256-KDg6Ggnm6Cl/1fXqNcc7/jRFJ6KTLVGveJ6Fs3NLlHE=";
+
+  meta = with lib; {
+    description = "screen rotation daemon for X11 and wlroots";
+    homepage = "https://github.com/efernau/rot8";
+    license = licenses.mit;
+    maintainers = [ maintainers.smona ];
+    mainProgram = "rot8";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/roundup/default.nix b/nixpkgs/pkgs/tools/misc/roundup/default.nix
new file mode 100644
index 000000000000..efe220fd5f9b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/roundup/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, ronn, shocco }:
+
+stdenv.mkDerivation rec {
+  pname = "roundup";
+  version = "0.0.6";
+
+  src = fetchFromGitHub {
+    owner = "bmizerany";
+    repo = "roundup";
+    rev = "v${version}";
+    sha256 = "0nxaqmbv8mdvq9wcaqxk6k5mr31i68jzxf1wxa6pp7xp4prwdc9z";
+  };
+
+  prePatch = ''
+    # Don't change $PATH
+    substituteInPlace configure --replace PATH= NIRVANA=
+    # There are only man pages in sections 1 and 5 \
+    substituteInPlace Makefile --replace "{1..9}" "1 5"
+  '';
+
+  nativeBuildInputs = [ ronn shocco ];
+
+  installTargets = [ "install" "install-man" ];
+
+  preInstall = ''
+    for i in 1 5; do
+      mkdir -p $out/share/man/man$i
+    done
+  '';
+
+  meta = with lib; {
+    description = "A unit testing tool for running test plans which are written in any POSIX shell";
+    homepage = "http://bmizerany.github.io/roundup/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = platforms.all;
+    mainProgram = "roundup";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/routino/default.nix b/nixpkgs/pkgs/tools/misc/routino/default.nix
new file mode 100644
index 000000000000..ea882749a534
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/routino/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, fetchpatch, perl, zlib, bzip2 }:
+
+stdenv.mkDerivation rec {
+  pname = "routino";
+  version = "3.4.1";
+
+  src = fetchurl {
+    url = "https://routino.org/download/${pname}-${version}.tgz";
+    hash = "sha256-C6qNKljRdV0ProbgSxfrZLgZH+Pl8kcpKmTb83GLhSs=";
+  };
+
+  patchFlags = [ "-p0" ];
+  patches = lib.optionals stdenv.isDarwin [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/macports/macports-ports/18fd229516a46e7272003acbe555735b2a902db7/gis/routino/files/patch-Makefile_conf.diff";
+      sha256 = "1b7hpa4sizansnwwxq1c031nxwdwh71pg08jl9z9apiab8pjsn53";
+    })
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/macports/macports-ports/18fd229516a46e7272003acbe555735b2a902db7/gis/routino/files/patch-src_Makefile_dylib_extension.diff";
+      sha256 = "1kigxcfr7977baxdsfvrw6q453cpqlzqakhj7av2agxkcvwyilpv";
+    })
+  ];
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile.conf \
+      --subst-var-by PREFIX $out
+  '';
+
+  nativeBuildInputs = [ perl ];
+
+  buildInputs = [ zlib bzip2 ];
+
+  outputs = [ "out" "doc" ];
+
+  CLANG = lib.optionalString stdenv.cc.isClang "1";
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  meta = with lib; {
+    homepage = "http://www.routino.org/";
+    changelog = "http://routino.org/software/NEWS.txt";
+    description = "OpenStreetMap Routing Software";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rpcsvc-proto/default.nix b/nixpkgs/pkgs/tools/misc/rpcsvc-proto/default.nix
new file mode 100644
index 000000000000..2de8bdefc880
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rpcsvc-proto/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, lib, fetchFromGitHub, autoreconfHook, buildPackages, fetchpatch, targetPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "rpcsvc-proto";
+  version = "1.4.4";
+
+  src = fetchFromGitHub {
+    owner = "thkukuk";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-DEXzSSmjMeMsr1PoU/ljaY+6b4COUU2Z8MJkGImsgzk=";
+  };
+
+  patches = [
+    # https://github.com/thkukuk/rpcsvc-proto/pull/14
+    (fetchpatch {
+      name = "follow-RPCGEN_CPP-env-var";
+      url = "https://github.com/thkukuk/rpcsvc-proto/commit/e772270774ff45172709e39f744cab875a816667.diff";
+      sha256 = "sha256-KrUD6YwdyxW9S99h4TB21ahnAOgQmQr2tYz++MIbk1Y=";
+    })
+  ];
+
+  outputs = [ "out" "man" "dev" ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  RPCGEN_CPP = "${stdenv.cc.targetPrefix}cpp";
+
+  postPatch = ''
+    # replace fallback cpp with the target prefixed cpp
+    substituteInPlace rpcgen/rpc_main.c \
+      --replace 'CPP = "cpp"' \
+                'CPP = "${targetPackages.stdenv.cc.targetPrefix}cpp"'
+  '' + lib.optionalString (!stdenv.buildPlatform.canExecute stdenv.hostPlatform)  ''
+    substituteInPlace rpcsvc/Makefile.am \
+      --replace '$(top_builddir)/rpcgen/rpcgen' '${buildPackages.rpcsvc-proto}/bin/rpcgen'
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thkukuk/rpcsvc-proto";
+    description = "This package contains rpcsvc proto.x files from glibc, which are missing in libtirpc";
+    longDescription = ''
+      The RPC-API has been removed from glibc. The 2.32-release-notes
+      (https://sourceware.org/pipermail/libc-announce/2020/000029.html) recommend to use
+      `libtirpc` and this package instead.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+    mainProgram = "rpcgen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rpi-imager/default.nix b/nixpkgs/pkgs/tools/misc/rpi-imager/default.nix
new file mode 100644
index 000000000000..2a68d92b9c13
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rpi-imager/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, wrapQtAppsHook
+, cmake
+, pkg-config
+, util-linux
+, curl
+, libarchive
+, qtbase
+, qtdeclarative
+, qtsvg
+, qttools
+, qtquickcontrols2
+, qtgraphicaleffects
+, xz
+, testers
+, nix-update-script
+, enableTelemetry ? false
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "rpi-imager";
+  version = "1.8.5";
+
+  src = fetchFromGitHub {
+    owner = "raspberrypi";
+    repo = "rpi-imager";
+    rev = "refs/tags/v${finalAttrs.version}";
+    sha256 = "sha256-JrotKMyAgQO3Y5RsFAar9N5/wDpWiBcy8RfvBWDiJMs=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    util-linux
+    wrapQtAppsHook
+  ];
+
+  # Disable telemetry and update check.
+  cmakeFlags = lib.optionals (!enableTelemetry) [
+    "-DENABLE_CHECK_VERSION=OFF"
+    "-DENABLE_TELEMETRY=OFF"
+  ];
+
+  buildInputs = [
+    curl
+    libarchive
+    qtbase
+    qtdeclarative
+    qtsvg
+    qttools
+    qtquickcontrols2
+    qtgraphicaleffects
+    xz
+  ];
+
+  sourceRoot = "${finalAttrs.src.name}/src";
+
+  /* By default, the builder checks for JSON support in lsblk by running "lsblk --json",
+    but that throws an error, as /sys/dev doesn't exist in the sandbox.
+    This patch removes the check. */
+  patches = [ ./lsblkCheckFix.patch ];
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = "QT_QPA_PLATFORM=offscreen rpi-imager --version";
+    };
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Raspberry Pi Imaging Utility";
+    homepage = "https://github.com/raspberrypi/rpi-imager/";
+    changelog = "https://github.com/raspberrypi/rpi-imager/releases/tag/v${finalAttrs.version}";
+    license = licenses.asl20;
+    mainProgram = "rpi-imager";
+    maintainers = with maintainers; [ ymarkus anthonyroussel ];
+    platforms = platforms.all;
+    # does not build on darwin
+    broken = stdenv.isDarwin;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch b/nixpkgs/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch
new file mode 100644
index 000000000000..aa4fdeecfdb0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rpi-imager/lsblkCheckFix.patch
@@ -0,0 +1,16 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 170ce7a..063a137 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -332,11 +332,6 @@ else()
+         if (NOT LSBLK)
+             message(FATAL_ERROR "Unable to locate lsblk (used for disk enumeration)")
+         endif()
+-
+-        execute_process(COMMAND "${LSBLK}" "--json" OUTPUT_QUIET RESULT_VARIABLE ret)
+-        if (ret EQUAL "1")
+-            message(FATAL_ERROR "util-linux package too old. lsblk does not support --json (used for disk enumeration)")
+-        endif()
+     endif()
+
+     configure_file(
diff --git a/nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix b/nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix
new file mode 100644
index 000000000000..8cf801da5712
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rpm-ostree/default.nix
@@ -0,0 +1,125 @@
+{ lib, stdenv
+, fetchurl
+, ostree
+, rpm
+, which
+, autoconf
+, automake
+, libtool
+, pkg-config
+, cargo
+, rustc
+, gobject-introspection
+, gtk-doc
+, libxml2
+, libxslt
+, docbook_xsl
+, docbook_xml_dtd_42
+, docbook_xml_dtd_43
+, gperf
+, cmake
+, libcap
+, glib
+, systemd
+, json-glib
+, libarchive
+, libsolv
+, librepo
+, polkit
+, bubblewrap
+, pcre
+, check
+, python3
+, json_c
+, zchunk
+, libmodulemd
+, util-linux
+, sqlite
+, cppunit
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rpm-ostree";
+  version = "2024.5";
+
+  outputs = [ "out" "dev" "man" "devdoc" ];
+
+  src = fetchurl {
+    url = "https://github.com/coreos/${pname}/releases/download/v${version}/${pname}-${version}.tar.xz";
+    hash = "sha256-lwgEOnV82/EHRem3owngq4ALcjIWj7V1J552JsNCrBw=";
+  };
+
+  nativeBuildInputs = [
+    python3
+    pkg-config
+    which
+    autoconf
+    automake
+    libtool
+    cmake
+    gperf
+    cargo
+    rustc
+    gobject-introspection
+    gtk-doc
+    libxml2
+    libxslt
+    docbook_xsl
+    docbook_xml_dtd_42
+    docbook_xml_dtd_43
+  ];
+
+  buildInputs = [
+    libcap
+    ostree
+    rpm
+    glib
+    systemd
+    polkit
+    bubblewrap
+    json-glib
+    libarchive
+    libsolv
+    librepo
+    pcre
+    check
+
+    # libdnf # vendored unstable branch
+    # required by vendored libdnf
+    json_c
+    zchunk
+    libmodulemd
+    util-linux # for smartcols.pc
+    sqlite
+    cppunit
+  ];
+
+  configureFlags = [
+    "--enable-gtk-doc"
+    "--with-bubblewrap=${bubblewrap}/bin/bwrap"
+  ];
+
+  dontUseCmakeConfigure = true;
+
+  prePatch = ''
+    # According to #cmake on freenode, libdnf should bundle the FindLibSolv.cmake module
+    cp ${libsolv}/share/cmake/Modules/FindLibSolv.cmake libdnf/cmake/modules/
+
+    # Let's not hardcode the rpm-gpg path...
+    substituteInPlace libdnf/libdnf/dnf-keyring.cpp \
+      --replace '"/etc/pki/rpm-gpg"' 'getenv("LIBDNF_RPM_GPG_PATH_OVERRIDE") ? getenv("LIBDNF_RPM_GPG_PATH_OVERRIDE") : "/etc/pki/rpm-gpg"'
+  '';
+
+  preConfigure = ''
+    env NOCONFIGURE=1 ./autogen.sh
+  '';
+
+  meta = with lib; {
+    description = "A hybrid image/package system. It uses OSTree as an image format, and uses RPM as a component model";
+    homepage = "https://coreos.github.io/rpm-ostree/";
+    license = licenses.lgpl2Plus;
+    maintainers = with maintainers; [ copumpkin ];
+    platforms = platforms.linux;
+    mainProgram = "rpm-ostree";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rrdtool/default.nix b/nixpkgs/pkgs/tools/misc/rrdtool/default.nix
new file mode 100644
index 000000000000..e852374e2a88
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rrdtool/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, gettext
+, perl
+, pkg-config
+, libxml2
+, pango
+, cairo
+, groff
+, tcl
+, darwin
+}:
+
+perl.pkgs.toPerlModule (stdenv.mkDerivation rec {
+  pname = "rrdtool";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "oetiker";
+    repo = "rrdtool-1.x";
+    rev = "v${version}";
+    hash = "sha256-a+AxU1+YpkGoFs1Iu/CHAEZ4XIkWs7Vsnr6RcfXzsBE=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    autoreconfHook
+  ];
+
+  buildInputs = [ gettext perl libxml2 pango cairo groff ]
+    ++ lib.optionals stdenv.isDarwin [ tcl darwin.apple_sdk.frameworks.ApplicationServices ];
+
+  postInstall = ''
+    # for munin and rrdtool support
+    mkdir -p $out/${perl.libPrefix}
+    mv $out/lib/perl/5* $out/${perl.libPrefix}
+  '';
+
+  meta = with lib; {
+    homepage = "https://oss.oetiker.ch/rrdtool/";
+    description = "High performance logging in Round Robin Databases";
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ pSub ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/rshim-user-space/default.nix b/nixpkgs/pkgs/tools/misc/rshim-user-space/default.nix
new file mode 100644
index 000000000000..67cf3b6895e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rshim-user-space/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoconf
+, automake
+, makeBinaryWrapper
+, pkg-config
+, pciutils
+, libusb1
+, fuse
+, busybox
+, pv
+, withBfbInstall ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rshim-user-space";
+  version = "2.0.20";
+
+  src = fetchFromGitHub {
+    owner = "Mellanox";
+    repo = pname;
+    rev = "rshim-${version}";
+    hash = "sha256-zm1cMTna9o8edl0M7tjUhbnElbUkQZSkh3KOI6tbE6I=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    pkg-config
+  ] ++ lib.optionals withBfbInstall [ makeBinaryWrapper ];
+
+  buildInputs = [
+    pciutils
+    libusb1
+    fuse
+  ];
+
+  strictDeps = true;
+
+  preConfigure = "./bootstrap.sh";
+
+  installPhase = ''
+    mkdir -p "$out"/bin
+    cp -a src/rshim "$out"/bin/
+  '' + lib.optionalString withBfbInstall ''
+    cp -a scripts/bfb-install "$out"/bin/
+  '';
+
+  postFixup = lib.optionalString withBfbInstall ''
+    wrapProgram $out/bin/bfb-install \
+      --set PATH ${lib.makeBinPath [ busybox pv ]}
+  '';
+
+  meta = with lib; {
+    description = "user-space rshim driver for the BlueField SoC";
+    longDescription = ''
+      The rshim driver provides a way to access the rshim resources on the
+      BlueField target from external host machine. The current version
+      implements device files for boot image push and virtual console access.
+      It also creates virtual network interface to connect to the BlueField
+      target and provides a way to access the internal rshim registers.
+    '';
+    homepage = "https://github.com/Mellanox/rshim-user-space";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nikstur ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rtz/Cargo.lock b/nixpkgs/pkgs/tools/misc/rtz/Cargo.lock
new file mode 100644
index 000000000000..80d76ab214d0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rtz/Cargo.lock
@@ -0,0 +1,3490 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aead"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
+dependencies = [
+ "crypto-common",
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "209b47e8954a928e1d72e86eca7000ebb6655fe1436d33eefc2201cad027e237"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "ghash",
+ "subtle",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anstream"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "is-terminal",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a564d521dd56509c4c47480d00b80ee55f7e385ae48db5744c67ad50c92d2ebf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "atomic"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
+
+[[package]]
+name = "atomic-polyfill"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28"
+dependencies = [
+ "critical-section",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "backtrace"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "binascii"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "383d29d513d8764dcdc42ea295d979eb99c3c9f00607b3692cf68a431f7dca72"
+
+[[package]]
+name = "bincode"
+version = "2.0.0-rc.3"
+source = "git+https://github.com/bincode-org/bincode.git#224e41274b089e3833a3533459f5c5758c43ab2c"
+dependencies = [
+ "bincode_derive",
+ "serde",
+]
+
+[[package]]
+name = "bincode_derive"
+version = "2.0.0-rc.3"
+source = "git+https://github.com/bincode-org/bincode.git#224e41274b089e3833a3533459f5c5758c43ab2c"
+dependencies = [
+ "virtue",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "bzip2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[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 = "chashmap"
+version = "2.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff41a3c2c1e39921b9003de14bf0439c7b63a9039637c291e1a64925d8ddfa45"
+dependencies = [
+ "owning_ref",
+ "parking_lot 0.4.8",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1369bc6b9e9a7dfdae2055f6ec151fe9c554a9d23d357c0237cee2e25eaabb7"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+ "serde",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2f5ebdc942f57ed96d560a6d1a459bae5851102a25d5bf89dc04ae453e31ecf"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
+[[package]]
+name = "clap"
+version = "4.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0827b011f6f8ab38590295339817b0d26f344aa4932c3ced71b45b0c54b4a9"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9441b403be87be858db6a23edb493e7f694761acdc3343d5a0fcaafd304cbc9e"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colored"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6"
+dependencies = [
+ "is-terminal",
+ "lazy_static",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "config"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7"
+dependencies = [
+ "async-trait",
+ "json5",
+ "lazy_static",
+ "nom",
+ "pathdiff",
+ "ron",
+ "rust-ini",
+ "serde",
+ "serde_json",
+ "toml 0.5.11",
+ "yaml-rust",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "cookie"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24"
+dependencies = [
+ "aes-gcm",
+ "base64 0.21.2",
+ "hkdf",
+ "percent-encoding",
+ "rand 0.8.5",
+ "sha2",
+ "subtle",
+ "time 0.3.23",
+ "version_check",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "critical-section"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52"
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "crossbeam-utils",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "typenum",
+]
+
+[[package]]
+name = "ctr"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "devise"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6eacefd3f541c66fc61433d65e54e0e46e0a029a819a7dbbc7a7b489e8a85f8"
+dependencies = [
+ "devise_codegen",
+ "devise_core",
+]
+
+[[package]]
+name = "devise_codegen"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8cf4b8dd484ede80fd5c547592c46c3745a617c8af278e2b72bea86b2dfed6"
+dependencies = [
+ "devise_core",
+ "quote",
+]
+
+[[package]]
+name = "devise_core"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35b50dba0afdca80b187392b24f2499a88c336d5a8493e4b4ccfb608708be56a"
+dependencies = [
+ "bitflags 2.3.3",
+ "proc-macro2",
+ "proc-macro2-diagnostics",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dlv-list"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "304e6508efa593091e97a9abbc10f90aa7ca635b6d2784feff3c89d41dd12272"
+
+[[package]]
+name = "earcutr"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0812b44697951d35fde8fcb0da81c9de7e809e825a66bbf1ecb79d9829d4ca3d"
+dependencies = [
+ "itertools",
+ "num-traits",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "figment"
+version = "0.10.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4547e226f4c9ab860571e070a9034192b3175580ecea38da34fcdb53a018c9a5"
+dependencies = [
+ "atomic",
+ "pear",
+ "serde",
+ "toml 0.7.6",
+ "uncased",
+ "version_check",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float_next_after"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generator"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e"
+dependencies = [
+ "cc",
+ "libc",
+ "log",
+ "rustversion",
+ "windows",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "geo"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1645cf1d7fea7dac1a66f7357f3df2677ada708b8d9db8e9b043878930095a96"
+dependencies = [
+ "earcutr",
+ "float_next_after",
+ "geo-types",
+ "geographiclib-rs",
+ "log",
+ "num-traits",
+ "robust",
+ "rstar",
+]
+
+[[package]]
+name = "geo-types"
+version = "0.7.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9705398c5c7b26132e74513f4ee7c1d7dafd786004991b375c172be2be0eecaa"
+dependencies = [
+ "approx",
+ "num-traits",
+ "rstar",
+ "serde",
+]
+
+[[package]]
+name = "geographiclib-rs"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea804e7bd3c6a4ca6a01edfa35231557a8a81d4d3f3e1e2b650d028c42592be"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "geojson"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5d728c1df1fbf328d74151efe6cb0586f79ee813346ea981add69bd22c9241b"
+dependencies = [
+ "geo-types",
+ "log",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "ghash"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40"
+dependencies = [
+ "opaque-debug",
+ "polyval",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "h2"
+version = "0.3.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "hash32"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+
+[[package]]
+name = "heapless"
+version = "0.7.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743"
+dependencies = [
+ "atomic-polyfill",
+ "hash32",
+ "rustc_version",
+ "spin 0.9.8",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "hyper"
+version = "0.14.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes",
+ "hyper",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
+]
+
+[[package]]
+name = "inlinable_string"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8fae54786f62fb2918dcfae3d568594e50eb9b5c25bf04371af6fe7516452fb"
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json5"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1"
+dependencies = [
+ "pest",
+ "pest_derive",
+ "serde",
+]
+
+[[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.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libm"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4"
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "loom"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
+dependencies = [
+ "cfg-if 1.0.0",
+ "generator",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memory_units"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "multer"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2"
+dependencies = [
+ "bytes",
+ "encoding_rs",
+ "futures-util",
+ "http",
+ "httparse",
+ "log",
+ "memchr",
+ "mime",
+ "spin 0.9.8",
+ "tokio",
+ "tokio-util",
+ "version_check",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "object"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "okapi"
+version = "0.7.0-rc.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce66b6366e049880a35c378123fddb630b1a1a3c37fa1ca70caaf4a09f6e2893"
+dependencies = [
+ "log",
+ "schemars",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.55"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-multimap"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a"
+dependencies = [
+ "dlv-list",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owning_ref"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37"
+dependencies = [
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e"
+dependencies = [
+ "owning_ref",
+ "parking_lot_core 0.2.14",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.8",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa"
+dependencies = [
+ "libc",
+ "rand 0.4.6",
+ "smallvec 0.6.14",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "smallvec 1.11.0",
+ "windows-targets",
+]
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "pear"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61a386cd715229d399604b50d1361683fe687066f42d56f54be995bc6868f71c"
+dependencies = [
+ "inlinable_string",
+ "pear_codegen",
+ "yansi 1.0.0-rc",
+]
+
+[[package]]
+name = "pear_codegen"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da9f0f13dac8069c139e8300a6510e3f4143ecf5259c60b116a9b271b4ca0d54"
+dependencies = [
+ "proc-macro2",
+ "proc-macro2-diagnostics",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pest"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d2d1d55045829d65aad9d389139882ad623b33b904e7c9f1b10c5b8927298e5"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f94bca7e7a599d89dea5dfa309e217e7906c3c007fb9c3299c40b10d6a315d3"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d490fe7e8556575ff6911e45567ab95e71617f43781e5c05490dc8d75c965c"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2674c66ebb4b4d9036012091b537aae5878970d6999f81a265034d85b136b341"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "polyval"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi 0.5.1",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proc-macro2-diagnostics"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+ "version_check",
+ "yansi 1.0.0-rc",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core 0.6.4",
+]
+
+[[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 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61ef7e18e8841942ddb1cf845054f8008410030a3997875d9e49b7a363063df1"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dfaf0c85b766276c797f3791f5bc6d5bd116b41d53049af2789666b0c0bc9fa"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.3.3",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.7.4",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "base64 0.21.2",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "robust"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30"
+
+[[package]]
+name = "rocket"
+version = "0.5.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58734f7401ae5cfd129685b48f61182331745b357b96f2367f01aebaf1cc9cc9"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "atomic",
+ "binascii",
+ "bytes",
+ "either",
+ "figment",
+ "futures",
+ "indexmap 1.9.3",
+ "is-terminal",
+ "log",
+ "memchr",
+ "multer",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "ref-cast",
+ "rocket_codegen",
+ "rocket_http",
+ "serde",
+ "serde_json",
+ "state",
+ "tempfile",
+ "time 0.3.23",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "ubyte",
+ "version_check",
+ "yansi 0.5.1",
+]
+
+[[package]]
+name = "rocket_codegen"
+version = "0.5.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7093353f14228c744982e409259fb54878ba9563d08214f2d880d59ff2fc508b"
+dependencies = [
+ "devise",
+ "glob",
+ "indexmap 1.9.3",
+ "proc-macro2",
+ "quote",
+ "rocket_http",
+ "syn 2.0.26",
+ "unicode-xid",
+]
+
+[[package]]
+name = "rocket_cors"
+version = "0.6.0-alpha2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b12771b47f52e34d5d0e0e444aeba382863e73263cb9e18847e7d5b74aa2cbd0"
+dependencies = [
+ "http",
+ "log",
+ "regex",
+ "rocket",
+ "serde",
+ "serde_derive",
+ "unicase",
+ "unicase_serde",
+ "url",
+]
+
+[[package]]
+name = "rocket_http"
+version = "0.5.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936012c99162a03a67f37f9836d5f938f662e26f2717809761a9ac46432090f4"
+dependencies = [
+ "cookie",
+ "either",
+ "futures",
+ "http",
+ "hyper",
+ "indexmap 1.9.3",
+ "log",
+ "memchr",
+ "pear",
+ "percent-encoding",
+ "pin-project-lite",
+ "ref-cast",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "smallvec 1.11.0",
+ "stable-pattern",
+ "state",
+ "time 0.3.23",
+ "tokio",
+ "tokio-rustls",
+ "uncased",
+]
+
+[[package]]
+name = "rocket_okapi"
+version = "0.8.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "742098674565c8f0c35c77444f90344aafedebb71cfee9cdbf0185acc6b9cdb7"
+dependencies = [
+ "either",
+ "log",
+ "okapi",
+ "rocket",
+ "rocket_okapi_codegen",
+ "schemars",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rocket_okapi_codegen"
+version = "0.8.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c43f8edc57d88750a220b0ec1870a36c1106204ec99cc35131b49de3b954a4a"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "rocket_http",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ron"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a"
+dependencies = [
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "serde",
+]
+
+[[package]]
+name = "rstar"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6"
+dependencies = [
+ "heapless",
+ "num-traits",
+ "smallvec 1.11.0",
+]
+
+[[package]]
+name = "rtz"
+version = "0.5.3"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bincode",
+ "chashmap",
+ "chrono",
+ "chrono-tz",
+ "clap",
+ "config",
+ "geo",
+ "geojson",
+ "getrandom",
+ "js-sys",
+ "log",
+ "pretty_assertions",
+ "rand 0.8.5",
+ "rayon",
+ "reqwest",
+ "rocket",
+ "rocket_cors",
+ "rocket_okapi",
+ "rtz-build",
+ "rtz-core",
+ "schemars",
+ "serde",
+ "serde_json",
+ "simple_logger",
+ "tokio",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wee_alloc",
+ "zip",
+]
+
+[[package]]
+name = "rtz-build"
+version = "0.2.6"
+dependencies = [
+ "rtz-core",
+]
+
+[[package]]
+name = "rtz-core"
+version = "0.1.4"
+dependencies = [
+ "anyhow",
+ "bincode",
+ "chashmap",
+ "geo",
+ "geojson",
+ "pretty_assertions",
+ "rayon",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "zip",
+]
+
+[[package]]
+name = "rust-ini"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df"
+dependencies = [
+ "cfg-if 1.0.0",
+ "ordered-multimap",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
+dependencies = [
+ "bitflags 2.3.3",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "schannel"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "schemars"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02c613288622e5f0c3fdc5dbd4db1c5fbe752746b1d1a56a0630b78fd00de44f"
+dependencies = [
+ "chrono",
+ "dyn-clone",
+ "indexmap 1.9.3",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars_derive"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109da1e6b197438deb6db99952990c7f959572794b80ff93707d55a232545e7c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+
+[[package]]
+name = "serde"
+version = "1.0.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.103"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simple_logger"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2230cd5c29b815c9b699fb610b49a5ed65588f3509d9f0108be3a885da629333"
+dependencies = [
+ "colored",
+ "log",
+ "time 0.3.23",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "stable-pattern"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4564168c00635f88eaed410d5efa8131afa8d8699a612c80c455a0ba05c21045"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "state"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b"
+dependencies = [
+ "loom",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5486094ee78b2e5038a6382ed7645bc084dc2ec433426ca4c3cb61e2007b8998"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if 1.0.0",
+ "once_cell",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446"
+dependencies = [
+ "itoa",
+ "libc",
+ "num_threads",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+
+[[package]]
+name = "time-macros"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
+dependencies = [
+ "autocfg",
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
+dependencies = [
+ "indexmap 2.0.0",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922"
+dependencies = [
+ "lazy_static",
+ "log",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec 1.11.0",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ubyte"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c81f0dae7d286ad0d9366d7679a77934cfc3cf3a8d67e82669794412b2368fe6"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "uncased"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b9bc53168a4be7402ab86c3aad243a84dd7381d09be0eddc81280c1da95ca68"
+dependencies = [
+ "serde",
+ "version_check",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicase_serde"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ef53697679d874d69f3160af80bc28de12730a985d57bdf2b47456ccb8b11f1"
+dependencies = [
+ "serde",
+ "unicase",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "universal-hash"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
+dependencies = [
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "virtue"
+version = "0.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b522f715ead3537dc57c9907899a08e461a8f1e87fc8414a4a89bbd9854289ff"
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.26",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
+
+[[package]]
+name = "web-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "wee_alloc"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb3b5a6b2bb17cb6ad44a2e68a43e8d2722c997da10e928665c72ec6c0a0b8e"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "memory_units",
+ "winapi",
+]
+
+[[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 = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "winnow"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[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 = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "yansi"
+version = "1.0.0-rc"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ee746ad3851dd3bc40e4a028ab3b00b99278d929e48957bcb2d111874a7e43e"
+
+[[package]]
+name = "zip"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
+dependencies = [
+ "aes",
+ "byteorder",
+ "bzip2",
+ "constant_time_eq",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "hmac",
+ "pbkdf2",
+ "sha1",
+ "time 0.3.23",
+ "zstd",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.8+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/tools/misc/rtz/default.nix b/nixpkgs/pkgs/tools/misc/rtz/default.nix
new file mode 100644
index 000000000000..ba66935d0a95
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rtz/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, bzip2
+, openssl
+, zstd
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rtz";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "twitchax";
+    repo = "rtz";
+    rev = "v${version}";
+    hash = "sha256-cc5yGZ4zHB9V//ywvKv9qgKGDpKotzkJKbfwv1rK2tM=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "bincode-2.0.0-rc.3" = "sha256-YCoTnIKqRObeyfTanjptTYeD9U2b2c+d4CJFWIiGckI=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    bzip2
+    openssl
+    zstd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  buildFeatures = [ "web" ];
+
+  env = {
+    # requires nightly features
+    RUSTC_BOOTSTRAP = true;
+  };
+
+  meta = with lib; {
+    description = "A tool to easily work with timezone lookups via a binary, a library, or a server";
+    homepage = "https://github.com/twitchax/rtz";
+    changelog = "https://github.com/twitchax/rtz/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rtz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rust-motd/default.nix b/nixpkgs/pkgs/tools/misc/rust-motd/default.nix
new file mode 100644
index 000000000000..26b582e5e944
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rust-motd/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-motd";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "rust-motd";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-x3dx4PdYSYd7wA/GGj9QYC8rK33FWATs2SnaOagGE80=";
+  };
+
+  cargoHash = "sha256-7YvzVG3c10EJET+659F1fwgZ0SmBKMdAWD6LeWnGrNI=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  OPENSSL_NO_VENDOR = 1;
+
+  meta = with lib; {
+    description = "Beautiful, useful MOTD generation with zero runtime dependencies";
+    homepage = "https://github.com/rust-motd/rust-motd";
+    changelog = "https://github.com/rust-motd/rust-motd/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rust-motd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rustypaste-cli/default.nix b/nixpkgs/pkgs/tools/misc/rustypaste-cli/default.nix
new file mode 100644
index 000000000000..e78074ca6330
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rustypaste-cli/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rustypaste-cli";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "orhun";
+    repo = "rustypaste-cli";
+    rev = "v${version}";
+    hash = "sha256-Nx0mnwoyJlZSaOiGsqhrx6o9ZDJAGbEpOBhPknbZBjI=";
+  };
+
+  cargoHash = "sha256-z/llEeUfiWPCy8JspmpbbX0FCb8eXPvV1SJAW7ujSyU=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "A CLI tool for rustypaste";
+    homepage = "https://github.com/orhun/rustypaste-cli";
+    changelog = "https://github.com/orhun/rustypaste-cli/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rpaste";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/rw/default.nix b/nixpkgs/pkgs/tools/misc/rw/default.nix
new file mode 100644
index 000000000000..e77009f7969f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/rw/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "rw";
+  version = "1.0";
+
+  src = fetchurl {
+    url = "https://sortix.org/rw/release/rw-portable-${version}.tar.gz";
+    # Use hash provided by upstream
+    sha256 = "50009730e36991dfe579716f91f4f616f5ba05ffb7bf69c03d41bf305ed93b6d";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://sortix.org/rw";
+    description = "Block device and byte copying program similar to dd";
+    longDescription = ''
+      rw is a command line program which copies information between files
+      or byte streams. The rw command is designed to be a replacement for
+      dd with standard style command line flags.
+    '';
+    license = licenses.isc;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "rw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sacad/default.nix b/nixpkgs/pkgs/tools/misc/sacad/default.nix
new file mode 100644
index 000000000000..cd948505301e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sacad/default.nix
@@ -0,0 +1,39 @@
+{ lib, python3Packages, fetchPypi, jpegoptim, optipng }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sacad";
+  version = "2.7.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-ZJPcxKc0G8V7x9nyzKXaXpfNpMB3/qRoX0d4lfBZTFY=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    aiohttp
+    appdirs
+    bitarray
+    cssselect
+    fake-useragent
+    lxml
+    mutagen
+    pillow
+    tqdm
+    unidecode
+    web-cache
+    jpegoptim
+    optipng
+  ];
+
+  # tests require internet connection
+  doCheck = false;
+
+  pythonImportsCheck = [ "sacad" ];
+
+  meta = with lib; {
+    description = "Smart Automatic Cover Art Downloader";
+    homepage = "https://github.com/desbma/sacad";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ moni ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sagoin/default.nix b/nixpkgs/pkgs/tools/misc/sagoin/default.nix
new file mode 100644
index 000000000000..b3fdd6e99405
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sagoin/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sagoin";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "figsoda";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-/WNUDlJxxUGAtykX44A9EqMdBNwVKsGkPnq9pATmLEQ=";
+  };
+
+  cargoHash = "sha256-YGQZR5n71srD/8QrBUOoEe72nPm0cwgk5zrzoXy2Hx0=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  postInstall = ''
+    installManPage artifacts/sagoin.1
+    installShellCompletion artifacts/sagoin.{bash,fish} --zsh artifacts/_sagoin
+  '';
+
+  GEN_ARTIFACTS = "artifacts";
+
+  meta = with lib; {
+    description = "A command-line submission tool for the UMD CS Submit Server";
+    homepage = "https://github.com/figsoda/sagoin";
+    changelog = "https://github.com/figsoda/sagoin/blob/v${version}/CHANGELOG.md";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "sagoin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sam-ba/default.nix b/nixpkgs/pkgs/tools/misc/sam-ba/default.nix
new file mode 100644
index 000000000000..6a383cd4fc4e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sam-ba/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchzip, glib, zlib, libglvnd, python3, autoPatchelfHook }:
+
+stdenv.mkDerivation rec {
+  version = "3.5";
+  pname = "sam-ba";
+
+  src = fetchzip {
+    url = "https://ww1.microchip.com/downloads/en/DeviceDoc/sam-ba_${version}-linux_x86_64.tar.gz";
+    sha256 = "1k0nbgyc98z94nphm2q7s82b274clfnayf4a2kv93l5594rzdbp1";
+  };
+
+  buildInputs = [
+    glib
+    libglvnd
+    zlib
+
+    (python3.withPackages (ps: [ps.pyserial]))
+  ];
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin/" \
+             "$out/opt/sam-ba/"
+    cp -a . "$out/opt/sam-ba/"
+    ln -sr "$out/opt/sam-ba/sam-ba" "$out/bin/"
+    ln -sr "$out/opt/sam-ba/multi_sam-ba.py" "$out/bin/"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Programming tools for Atmel SAM3/7/9 ARM-based microcontrollers";
+    longDescription = ''
+      Atmel SAM-BA software provides an open set of tools for programming the
+      Atmel SAM3, SAM7 and SAM9 ARM-based microcontrollers.
+    '';
+    # Alternatively: https://www.microchip.com/en-us/development-tool/SAM-BA-In-system-Programmer
+    homepage = "http://www.at91.com/linux4sam/bin/view/Linux4SAM/SoftwareTools";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.gpl2Only;
+    platforms = [ "x86_64-linux" ];
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sanctity/default.nix b/nixpkgs/pkgs/tools/misc/sanctity/default.nix
new file mode 100644
index 000000000000..7c892bb16894
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sanctity/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitea }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sanctity";
+  version = "1.3.1";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-y6xj4A5SHcW747aFE9TfuurNnuUxjTUeKJmzxeiWqVc=";
+  };
+
+  cargoSha256 = "sha256-co58YBeFjP9DKzxDegQI7txuJ1smqJxdlRLae+Ppwh0=";
+
+  meta = with lib; {
+    description = "Test the 16 terminal colors in all combinations";
+    homepage = "https://codeberg.org/annaaurora/sanctity";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+    mainProgram = "sanctity";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/savepagenow/default.nix b/nixpkgs/pkgs/tools/misc/savepagenow/default.nix
new file mode 100644
index 000000000000..da29fa3b05a9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/savepagenow/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "savepagenow";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "pastpages";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1lz6rc47cds9rb35jdf8n13gr61wdkh5jqzx4skikm1yrqkwjyhm";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ click requests ];
+
+  # requires network access
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A simple Python wrapper for archive.org's \"Save Page Now\" capturing service";
+    homepage = "https://github.com/pastpages/savepagenow";
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "savepagenow";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scanmem/default.nix b/nixpkgs/pkgs/tools/misc/scanmem/default.nix
new file mode 100644
index 000000000000..817e713b229f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scanmem/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, gobject-introspection
+, intltool
+, wrapGAppsHook
+, procps
+, python3
+, readline
+}:
+
+stdenv.mkDerivation rec {
+  pname = "scanmem";
+  version = "0.17";
+
+  src = fetchFromGitHub {
+    owner  = "scanmem";
+    repo   = "scanmem";
+    rev    = "v${version}";
+    sha256 = "17p8sh0rj8yqz36ria5bp48c8523zzw3y9g8sbm2jwq7sc27i7s9";
+  };
+
+  nativeBuildInputs = [ autoreconfHook gobject-introspection intltool wrapGAppsHook ];
+  buildInputs = [ readline python3 ];
+  configureFlags = ["--enable-gui"];
+
+  # we don't need to wrap the main executable, just the GUI
+  dontWrapGApps = true;
+
+  fixupPhase = ''
+    runHook preFixup
+
+    # replace the upstream launcher which does stupid things
+    # also add procps because it shells out to `ps` and expects it to be procps
+    makeWrapper ${python3}/bin/python3 $out/bin/gameconqueror \
+      "''${gappsWrapperArgs[@]}" \
+      --set PYTHONPATH "${python3.pkgs.makePythonPath [ python3.pkgs.pygobject3 ]}" \
+      --prefix PATH : "${procps}/bin" \
+      --add-flags "$out/share/gameconqueror/GameConqueror.py"
+
+    runHook postFixup
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/scanmem/scanmem";
+    description = "Memory scanner for finding and poking addresses in executing processes";
+    maintainers = [ ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scdl/default.nix b/nixpkgs/pkgs/tools/misc/scdl/default.nix
new file mode 100644
index 000000000000..2637c892e03e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scdl/default.nix
@@ -0,0 +1,35 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "scdl";
+  version = "2.7.7";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-/QQb8xbi0rv5dU3WFr/hm2BuM/iDZ2OhrGjuqsQMqdk=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    docopt
+    mutagen
+    termcolor
+    requests
+    clint
+    pathvalidate
+    soundcloud-v2
+  ];
+
+  # No tests in repository
+  doCheck = false;
+
+  pythonImportsCheck = [ "scdl" ];
+
+  meta = with lib; {
+    description = "Download Music from Souncloud";
+    homepage = "https://github.com/flyingrub/scdl";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ ];
+    mainProgram = "scdl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scfbuild/default.nix b/nixpkgs/pkgs/tools/misc/scfbuild/default.nix
new file mode 100644
index 000000000000..e881a288f959
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scfbuild/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildPythonApplication, fetchFromGitHub, python, pyyaml, fonttools, fontforge }:
+
+buildPythonApplication {
+  pname = "scfbuild";
+  version = "2.0.0";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "13rac1";
+    repo = "scfbuild";
+    rev = "6d84339512a892972185d894704efa67dd82e87a";
+    sha256 = "0wkyzkhshlax9rvdmn441gv87n9abfr0qqmgs8bkg9kbcjb4bhad";
+  };
+
+  propagatedBuildInputs = [ pyyaml fonttools fontforge ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/${python.sitePackages}
+    cp -r scfbuild $out/${python.sitePackages}
+    cp -r bin $out
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "SVGinOT color font builder";
+    homepage = "https://github.com/13rac1/scfbuild";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
+    mainProgram = "scfbuild";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/screen/default.nix b/nixpkgs/pkgs/tools/misc/screen/default.nix
new file mode 100644
index 000000000000..9d6d302634f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/screen/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, autoreconfHook
+, ncurses
+, libxcrypt
+, utmp
+, pam ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "screen";
+  version = "4.9.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/screen/${pname}-${version}.tar.gz";
+    hash = "sha256-Js7z48QlccDUhK1vrxEMXBUJH7+HKwb6eqR2bHQFrGk=";
+  };
+
+  configureFlags = [
+    "--enable-telnet"
+    "--enable-pam"
+    "--with-sys-screenrc=/etc/screenrc"
+    "--enable-colors256"
+    "--enable-rxvt_osc"
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+  buildInputs = [
+    ncurses
+    libxcrypt
+  ] ++ lib.optional stdenv.isLinux pam
+    ++ lib.optional stdenv.isDarwin utmp;
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/screen/";
+    description = "A window manager that multiplexes a physical terminal";
+    license = licenses.gpl2Plus;
+
+    longDescription =
+      '' GNU Screen is a full-screen window manager that multiplexes a physical
+         terminal between several processes, typically interactive shells.
+         Each virtual terminal provides the functions of the DEC VT100
+         terminal and, in addition, several control functions from the ANSI
+         X3.64 (ISO 6429) and ISO 2022 standards (e.g., insert/delete line
+         and support for multiple character sets).  There is a scrollback
+         history buffer for each virtual terminal and a copy-and-paste
+         mechanism that allows the user to move text regions between windows.
+         When screen is called, it creates a single window with a shell in it
+         (or the specified command) and then gets out of your way so that you
+         can use the program as you normally would.  Then, at any time, you
+         can create new (full-screen) windows with other programs in them
+         (including more shells), kill the current window, view a list of the
+         active windows, turn output logging on and off, copy text between
+         windows, view the scrollback history, switch between windows, etc.
+         All windows run their programs completely independent of each other.
+         Programs continue to run when their window is currently not visible
+         and even when the whole screen session is detached from the users
+         terminal.
+      '';
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ vrthra ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/screenfetch/default.nix b/nixpkgs/pkgs/tools/misc/screenfetch/default.nix
new file mode 100644
index 000000000000..e3ad0e5c51c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/screenfetch/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, coreutils, gawk, procps, gnused
+, bc, findutils, xdpyinfo, xprop, gnugrep, ncurses, pciutils
+, darwin
+}:
+
+let
+  path = lib.makeBinPath ([
+    coreutils gawk gnused findutils
+    gnugrep ncurses bc pciutils
+  ] ++ lib.optionals stdenv.isLinux [
+    procps
+    xdpyinfo
+    xprop
+  ] ++ lib.optionals stdenv.isDarwin (with darwin; [
+    adv_cmds
+    DarwinTools
+    system_cmds
+    "/usr" # some commands like defaults is not available to us
+  ]));
+
+in stdenv.mkDerivation rec {
+  pname = "screenfetch";
+  version = "3.9.1";
+
+  src = fetchFromGitHub {
+    owner  = "KittyKatt";
+    repo   = "screenFetch";
+    rev    = "v${version}";
+    sha256 = "04l8aqr474pb115nagn9f6y48jw92n1qfszgw7dbhgl4mpn95lcr";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -Dm 0755 screenfetch-dev $out/bin/screenfetch
+    install -Dm 0644 screenfetch.1 $out/share/man/man1/screenfetch.1
+    install -Dm 0644 -t $out/share/doc/screenfetch CHANGELOG COPYING README.mkdn TODO
+
+    # Fix all of the dependencies of screenfetch
+    patchShebangs $out/bin/screenfetch
+    wrapProgram "$out/bin/screenfetch" \
+      --prefix PATH : ${path}
+  '';
+
+  meta = with lib; {
+    description = "Fetches system/theme information in terminal for Linux desktop screenshots";
+    longDescription = ''
+      screenFetch is a "Bash Screenshot Information Tool". This handy Bash
+      script can be used to generate one of those nifty terminal theme
+      information + ASCII distribution logos you see in everyone's screenshots
+      nowadays. It will auto-detect your distribution and display an ASCII
+      version of that distribution's logo and some valuable information to the
+      right. There are options to specify no ascii art, colors, taking a
+      screenshot upon displaying info, and even customizing the screenshot
+      command! This script is very easy to add to and can easily be extended.
+    '';
+    license = licenses.gpl3;
+    homepage = "https://github.com/KittyKatt/screenFetch";
+    maintainers = with maintainers; [ relrod ];
+    platforms = platforms.all;
+    mainProgram = "screenfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/script-directory/default.nix b/nixpkgs/pkgs/tools/misc/script-directory/default.nix
new file mode 100644
index 000000000000..59ede7bdccd9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/script-directory/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, installShellFiles
+, patsh
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "script-directory";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "ianthehenry";
+    repo = "sd";
+    rev = "v${version}";
+    hash = "sha256-X5RWCJQUqDnG2umcCk5KS6HQinTJVapBHp6szEmbc4U=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    patsh
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    patsh -f sd
+    install -Dt "$out/bin" sd
+    installShellCompletion --zsh _sd
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A cozy nest for your scripts";
+    homepage = "https://github.com/ianthehenry/sd";
+    changelog = "https://github.com/ianthehenry/sd/tree/${src.rev}#changelog";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ janik ];
+    mainProgram = "sd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/scrub/default.nix b/nixpkgs/pkgs/tools/misc/scrub/default.nix
new file mode 100644
index 000000000000..2fc2b43ea29c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/scrub/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool }:
+
+stdenv.mkDerivation rec {
+  pname = "scrub";
+  version = "2.6.1";
+
+  src = fetchFromGitHub {
+    owner = "chaos";
+    repo = "scrub";
+    rev = version;
+    sha256 = "0ndcri2ddzqlsxvy1b607ajyd4dxpiagzx331yyi7hf3ijph129f";
+  };
+
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ libtool ];
+
+  preConfigure = "./autogen.sh";
+
+  meta = with lib; {
+    description = "Disk overwrite utility";
+    homepage = "https://github.com/chaos/scrub";
+    changelog = "https://raw.githubusercontent.com/chaos/scrub/master/NEWS";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ j0hax ];
+    platforms = platforms.unix;
+    mainProgram = "scrub";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sd-mux-ctrl/default.nix b/nixpkgs/pkgs/tools/misc/sd-mux-ctrl/default.nix
new file mode 100644
index 000000000000..4f832a35eb30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sd-mux-ctrl/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchgit, cmake, pkg-config, libftdi1, popt}:
+
+stdenv.mkDerivation rec {
+  pname = "sd-mux-ctrl-unstable";
+  version = "2020-02-17";
+
+  src = fetchgit {
+    url = "https://git.tizen.org/cgit/tools/testlab/sd-mux";
+    rev = "9dd189d973da64e033a0c5c2adb3d94b23153d94";
+    sha256 = "0fxl8m1zkkyxkc2zi8930m0njfgnd04a22acny6vljnzag2shjvg";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ libftdi1 popt ];
+
+  postInstall = ''
+    install -D -m 644 ../doc/man/sd-mux-ctrl.1 $out/share/man/man1/sd-mux-ctrl.1
+  '';
+
+  meta = with lib; {
+    description = "Tool for controlling multiple sd-mux devices";
+    homepage = "https://wiki.tizen.org/SD_MUX";
+    license = licenses.asl20;
+    maintainers =  with maintainers; [ sarcasticadmin ];
+    platforms = platforms.unix;
+    mainProgram = "sd-mux-ctrl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sdate/default.nix b/nixpkgs/pkgs/tools/misc/sdate/default.nix
new file mode 100644
index 000000000000..71ab04c807d8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sdate/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "sdate";
+  version = "0.7";
+
+  src = fetchFromGitHub {
+    owner = "ChristophBerg";
+    repo = "sdate";
+    rev = version;
+    hash = "sha256-jkwe+bSBa0p1Xzfetsdpw0RYw/gSRxnY2jBOzC5HtJ8=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    homepage = "https://www.df7cb.de/projects/sdate";
+    description = "Eternal september version of the date program";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ edef ];
+    platforms = platforms.all;
+    mainProgram = "sdate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix b/nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix
new file mode 100644
index 000000000000..d6c336990cf0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sdl-jstest/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, SDL, SDL2, ncurses, docbook_xsl, git }:
+
+stdenv.mkDerivation {
+  pname = "sdl-jstest";
+  version = "2018-06-15";
+
+  src = fetchFromGitHub {
+    owner = "Grumbel";
+    repo = "sdl-jstest";
+    rev = "aafbdb1ed3e687583037ba55ae88b1210d6ce98b";
+    sha256 = "sha256-Mw+ENOVZ0O8WercdDNLAAkNMPZ2NyxSa+nMtgNmXjFw=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ SDL SDL2 ncurses ];
+  nativeBuildInputs = [ cmake pkg-config docbook_xsl git ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Grumbel/sdl-jstest";
+    description = "Simple SDL joystick test application for the console";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/seaborn-data/default.nix b/nixpkgs/pkgs/tools/misc/seaborn-data/default.nix
new file mode 100644
index 000000000000..5ac78f1eef25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/seaborn-data/default.nix
@@ -0,0 +1,41 @@
+{ lib, newScope, fetchFromGitHub, unzip, stdenvNoCC }:
+let
+  base = {
+    version = "unstable-2023-01-26";
+    dontBuild = true;
+    meta = with lib; {
+      description = "Data repository for seaborn examples";
+      homepage = "https://github.com/mwaskom/seaborn-data";
+      platforms = platforms.all;
+      maintainers = with maintainers; [ mbalatsko ];
+    };
+  };
+  makeSeabornDataPackage = {pname, hash}:
+    let
+      src = fetchFromGitHub {
+        owner = "mwaskom";
+        repo = "seaborn-data";
+        rev = "2b29313169bf8dfa77d8dc930f7bd3eba559a906";
+        inherit hash;
+        sparseCheckout = [ "${pname}.csv" ];
+      };
+    in
+    stdenvNoCC.mkDerivation (base // {
+      inherit pname src;
+      version = base.version;
+      installPhase = ''
+        runHook preInstall
+
+        mkdir -p $out
+        cp ${pname}.csv $out/${pname}.csv
+
+        runHook postInstall
+      '';
+    });
+in
+lib.makeScope newScope (self: {
+  exercise = makeSeabornDataPackage ({
+    pname = "exercise";
+    hash = "sha256-icoc2HkG303A8hCoW6kZxD5qhOKIpdxErLr288o04wE=";
+  });
+})
diff --git a/nixpkgs/pkgs/tools/misc/see/default.nix b/nixpkgs/pkgs/tools/misc/see/default.nix
new file mode 100644
index 000000000000..592bc59262ca
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/see/default.nix
@@ -0,0 +1,32 @@
+{ lib, python3, fetchFromGitHub }:
+
+python3.pkgs.buildPythonApplication {
+  pname = "see";
+  version = "unstable-2023-03-19";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "Textualize";
+    repo = "textualize-see";
+    rev = "eef61dd348178ec60c5b0a01062e0b621eb57315";
+    hash = "sha256-SqjDHcFKWbk4ouWkhGohDl5kGjM/9fzqFDexVcaY1gw=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    colorama
+    toml
+  ];
+
+  meta = {
+    description = "A CLI tool to open files in the terminal";
+    homepage = "https://github.com/Textualize/textualize-see";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ anselmschueler ];
+    mainProgram = "see";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/semiphemeral/default.nix b/nixpkgs/pkgs/tools/misc/semiphemeral/default.nix
new file mode 100644
index 000000000000..7208dca81176
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/semiphemeral/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "semiphemeral";
+  version = "0.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-KRi3zfRWGRZJjQ6KPqBI9wQ6yU8Ohx0TDtA5qoak35U=";
+  };
+
+  doCheck = false; # upstream has no tests
+
+  pythonImportsCheck = [ "semiphemeral" ];
+
+  propagatedBuildInputs = with python3.pkgs; [ click sqlalchemy flask tweepy colorama ];
+
+  meta = with lib; {
+    description = "Automatically delete your old tweets, except for the ones you want to keep";
+    homepage = "https://github.com/micahflee/semiphemeral";
+    license = licenses.mit;
+    maintainers = with maintainers; [ amanjeev ];
+    mainProgram = "semiphemeral";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sensible-utils/default.nix b/nixpkgs/pkgs/tools/misc/sensible-utils/default.nix
new file mode 100644
index 000000000000..238b9f400b89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sensible-utils/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitLab, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "sensible-utils";
+  version = "0.0.18";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "debian";
+    repo = "sensible-utils";
+    rev = "debian/${version}";
+    sha256 = "sha256-fZJKPnEkPfo/3luUcHzAmGB2k1nkA4ATEQMSz0aN0YY=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontConfigure = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    cp sensible-browser sensible-editor sensible-pager sensible-terminal $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "A collection of utilities used by programs to sensibly select and spawn an appropriate browser, editor, or pager";
+    longDescription = ''
+       The specific utilities included are:
+       - sensible-browser
+       - sensible-editor
+       - sensible-pager
+    '';
+    homepage = "https://salsa.debian.org/debian/sensible-utils";
+    changelog = "https://salsa.debian.org/debian/sensible-utils/-/tags";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pbek ];
+    platforms = platforms.unix;
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/serverspec/Gemfile b/nixpkgs/pkgs/tools/misc/serverspec/Gemfile
new file mode 100644
index 000000000000..97bc14a34e9f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/serverspec/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'serverspec'
diff --git a/nixpkgs/pkgs/tools/misc/serverspec/Gemfile.lock b/nixpkgs/pkgs/tools/misc/serverspec/Gemfile.lock
new file mode 100644
index 000000000000..dc1fd7d44e30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/serverspec/Gemfile.lock
@@ -0,0 +1,45 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    diff-lcs (1.5.0)
+    multi_json (1.15.0)
+    net-scp (4.0.0)
+      net-ssh (>= 2.6.5, < 8.0.0)
+    net-ssh (7.1.0)
+    net-telnet (0.1.1)
+    rspec (3.12.0)
+      rspec-core (~> 3.12.0)
+      rspec-expectations (~> 3.12.0)
+      rspec-mocks (~> 3.12.0)
+    rspec-core (3.12.1)
+      rspec-support (~> 3.12.0)
+    rspec-expectations (3.12.2)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.12.0)
+    rspec-its (1.3.0)
+      rspec-core (>= 3.0.0)
+      rspec-expectations (>= 3.0.0)
+    rspec-mocks (3.12.5)
+      diff-lcs (>= 1.2.0, < 2.0)
+      rspec-support (~> 3.12.0)
+    rspec-support (3.12.0)
+    serverspec (2.42.2)
+      multi_json
+      rspec (~> 3.0)
+      rspec-its
+      specinfra (~> 2.72)
+    sfl (2.3)
+    specinfra (2.85.0)
+      net-scp
+      net-ssh (>= 2.7)
+      net-telnet (= 0.1.1)
+      sfl
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  serverspec!
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/serverspec/default.nix b/nixpkgs/pkgs/tools/misc/serverspec/default.nix
new file mode 100644
index 000000000000..28196efc18a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/serverspec/default.nix
@@ -0,0 +1,20 @@
+{ lib, ruby, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "serverspec";
+  gemdir = ./.;
+
+  inherit ruby;
+
+  exes = ["serverspec-init"];
+
+  passthru.updateScript = bundlerUpdateScript "serverspec";
+
+  meta = with lib; {
+    description = "RSpec tests for your servers configured by CFEngine, Puppet, Ansible, Itamae or anything else";
+    homepage = "https://serverspec.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dylanmtaylor ];
+    mainProgram = "serverspec-init";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/serverspec/gemset.nix b/nixpkgs/pkgs/tools/misc/serverspec/gemset.nix
new file mode 100644
index 000000000000..353b122ec810
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/serverspec/gemset.nix
@@ -0,0 +1,150 @@
+{
+  diff-lcs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rwvjahnp7cpmracd8x732rjgnilqv2sx7d1gfrysslc3h039fa9";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  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 = "1si2nq9l6jy5n2zw1q59a5gaji7v9vhy8qx08h4fg368906ysbdk";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  net-ssh = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yx0pb5fmziz92bw8qzbh8vf20lr56nd3s6q8h0gsgr307lki687";
+      type = "gem";
+    };
+    version = "7.1.0";
+  };
+  net-telnet = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qxznpwmc3hs51b76wqx2w29r158gzzh8719kv2gpi56844c8fx";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  rspec = {
+    dependencies = ["rspec-core" "rspec-expectations" "rspec-mocks"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "171rc90vcgjl8p1bdrqa92ymrj8a87qf6w20x05xq29mljcigi6c";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  rspec-core = {
+    dependencies = ["rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0da45cvllbv39sdbsl65vp5djb2xf5m10mxc9jm7rsqyyxjw4h1f";
+      type = "gem";
+    };
+    version = "3.12.1";
+  };
+  rspec-expectations = {
+    dependencies = ["diff-lcs" "rspec-support"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03ba3lfdsj9zl00v1yvwgcx87lbadf87livlfa5kgqssn9qdnll6";
+      type = "gem";
+    };
+    version = "3.12.2";
+  };
+  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 = "1hfm17xakfvwya236graj6c2arr4sb9zasp35q5fykhyz8mhs0w2";
+      type = "gem";
+    };
+    version = "3.12.5";
+  };
+  rspec-support = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12y52zwwb3xr7h91dy9k3ndmyyhr3mjcayk0nnarnrzz8yr48kfx";
+      type = "gem";
+    };
+    version = "3.12.0";
+  };
+  serverspec = {
+    dependencies = ["multi_json" "rspec" "rspec-its" "specinfra"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kqx84yspy75z517wf32mz2hr4bqmq33y46zik57rn7bq2pj39xx";
+      type = "gem";
+    };
+    version = "2.42.2";
+  };
+  sfl = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qm4hvhq9pszi9zs1cl9qgwx1n4wxq0af0hq9sbf6qihqd8rwwwr";
+      type = "gem";
+    };
+    version = "2.3";
+  };
+  specinfra = {
+    dependencies = ["net-scp" "net-ssh" "net-telnet" "sfl"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19kkryvxnci7qd7rq5m3nl3xazy452bcg35a709kfggpfm4c6r38";
+      type = "gem";
+    };
+    version = "2.85.0";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/setconf/default.nix b/nixpkgs/pkgs/tools/misc/setconf/default.nix
new file mode 100644
index 000000000000..8384617e5e5d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/setconf/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+}:
+
+buildPythonApplication rec {
+  pname = "setconf";
+  version = "0.7.7";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "xyproto";
+    repo = "setconf";
+    rev = version;
+    hash = "sha256-HYZdDtDlGrT3zssDdMW3559hhC+cPy8qkmM8d9zEa1A=";
+  };
+
+  meta = {
+    homepage = "https://github.com/xyproto/setconf";
+    description = "A small utility for changing settings in configuration textfiles";
+    changelog = "https://github.com/xyproto/setconf/releases/tag/${version}";
+    maintainers = [ lib.maintainers.AndersonTorres ];
+    mainProgram = "setconf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sfeed/default.nix b/nixpkgs/pkgs/tools/misc/sfeed/default.nix
new file mode 100644
index 000000000000..c12ddec63c94
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sfeed/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchgit, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "sfeed";
+  version = "2.0";
+
+  src = fetchgit {
+    url = "git://git.codemadness.org/sfeed";
+    rev = version;
+    sha256 = "sha256-DbzJWi9wAc7w2Z0bQt5PEFOuu9L3xzNrJvCocvCer34=";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "RANLIB:=$(RANLIB)" "SFEED_CURSES_LDFLAGS:=-lncurses" ]
+    # use macOS's strlcat() and strlcpy() instead of vendored ones
+    ++ lib.optional stdenv.isDarwin "COMPATOBJ:=";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  # otherwise does not find SIGWINCH
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-D_DARWIN_C_SOURCE";
+
+  meta = with lib; {
+    homepage = "https://codemadness.org/sfeed-simple-feed-parser.html";
+    description = "A RSS and Atom parser (and some format programs)";
+    longDescription = ''
+      It converts RSS or Atom feeds from XML to a TAB-separated file. There are
+      formatting programs included to convert this TAB-separated format to
+      various other formats. There are also some programs and scripts included
+      to import and export OPML and to fetch, filter, merge and order feed
+      items.
+    '';
+    license = licenses.isc;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sfz/default.nix b/nixpkgs/pkgs/tools/misc/sfz/default.nix
new file mode 100644
index 000000000000..41841d2ef2b9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sfz/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sfz";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "weihanglo";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-mKH1vgk+3tZEnjJRkfa0dDR383VN1VLNd3HEzC7f8YI=";
+  };
+
+  cargoSha256 = "sha256-MgbK39xAr8g9F+1MXZiw5rE/PsgQPcLZ2ZV6LiQbA24=";
+
+  # error: Found argument '--test-threads' which wasn't expected, or isn't valid in this context
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Simple static file serving command-line tool written in Rust";
+    homepage = "https://github.com/weihanglo/sfz";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "sfz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shadowenv/Cargo.lock.patch b/nixpkgs/pkgs/tools/misc/shadowenv/Cargo.lock.patch
new file mode 100644
index 000000000000..d1866991cea7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shadowenv/Cargo.lock.patch
@@ -0,0 +1,13 @@
+diff --git c/Cargo.lock i/Cargo.lock
+index fb6ef6e..347b404 100644
+--- c/Cargo.lock
++++ i/Cargo.lock
+@@ -1168,7 +1168,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "shadowenv"
+-version = "2.1.0"
++version = "2.1.1"
+ dependencies = [
+  "atty",
+  "blake2",
diff --git a/nixpkgs/pkgs/tools/misc/shadowenv/default.nix b/nixpkgs/pkgs/tools/misc/shadowenv/default.nix
new file mode 100644
index 000000000000..b9387024419b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shadowenv/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, installShellFiles, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shadowenv";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "Shopify";
+    repo = pname;
+    rev = version;
+    hash = "sha256-NKqoeJ2sejbe7Gghk3H7oJtP16SX1PcIIjsh/bZdTfQ=";
+  };
+
+  cargoPatches = [ ./Cargo.lock.patch ];
+
+  cargoHash = "sha256-CGAwb+UduM2QKne2bPntOcFnaUQN/3uUANc6z7f/Oig=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  postInstall = ''
+    installManPage man/man1/shadowenv.1
+    installManPage man/man5/shadowlisp.5
+    installShellCompletion --bash sh/completions/shadowenv.bash
+    installShellCompletion --fish sh/completions/shadowenv.fish
+    installShellCompletion --zsh sh/completions/_shadowenv
+  '';
+
+  preCheck = ''
+    HOME=$TMPDIR
+  '';
+
+  meta = with lib; {
+    homepage = "https://shopify.github.io/shadowenv/";
+    description = "reversible directory-local environment variable manipulations";
+    license = licenses.mit;
+    maintainers = [ ];
+    mainProgram = "shadowenv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shallot/default.nix b/nixpkgs/pkgs/tools/misc/shallot/default.nix
new file mode 100644
index 000000000000..4fbd07f38e32
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shallot/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, openssl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "shallot";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "katmagic";
+    repo = "Shallot";
+    rev = "shallot-${version}";
+    sha256 = "0cjafdxvjkwb9vyifhh11mw0la7yfqswqwqmrfp1fy9jl7m0il9k";
+  };
+
+  buildInputs = [ openssl ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/katmagic/Shallot/commit/c913088dfaaaf249494514f20a62f2a17b5c6606.patch";
+      sha256 = "19l1ppbxpdb0736f7plhybj08wh6rqk1lr3bxsp8jpzpnkh114b2";
+    })
+    (fetchpatch {
+      url = "https://github.com/katmagic/Shallot/commit/cd6628d97b981325e700a38f408a43df426fd569.patch";
+      sha256 = "1gaffp5wp1l5p2qdk0ix3i5fhzpx4xphl0haa6ajhqn8db7hbr9y";
+    })
+    (fetchpatch {
+      url = "https://github.com/katmagic/Shallot/commit/5c7c1ccecbbad5a121c50ba7153cbbee7ee0ebf9.patch";
+      sha256 = "1zmll4iqz39zwk8vj40n1dpvyq3403l64p2127gsjgh2l2v91s4k";
+    })
+  ];
+
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: src/shallot.o:(.bss+0x8): multiple definition of `lucky_thread'; src/error.o:(.bss+0x8): first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ./shallot $out/bin/
+  '';
+
+  meta = {
+    description = "Allows you to create customized .onion addresses for your hidden service";
+
+    license = lib.licenses.mit;
+    homepage = "https://github.com/katmagic/Shallot";
+    platforms = lib.platforms.linux;
+    mainProgram = "shallot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sharedown/default.nix b/nixpkgs/pkgs/tools/misc/sharedown/default.nix
new file mode 100644
index 000000000000..c3e87328c1fb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sharedown/default.nix
@@ -0,0 +1,127 @@
+{ stdenvNoCC
+, lib
+, fetchFromGitHub
+, ffmpeg
+, yt-dlp
+, libsecret
+, python3
+, pkg-config
+, nodejs
+, electron
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, yarn2nix-moretea
+, fetchYarnDeps
+, chromium
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "Sharedown";
+  version = "5.3.1";
+
+  src = fetchFromGitHub {
+    owner = "kylon";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-llQt3m/qu7v5uQIfA1yxl2JZiFafk6sPgcvrIpQy/DI=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "Sharedown";
+      exec = "Sharedown";
+      icon = "Sharedown";
+      comment = "An Application to save your Sharepoint videos for offline usage.";
+      desktopName = "Sharedown";
+      categories = [ "Network" "Archiving" ];
+    })
+  ];
+
+  dontBuild = true;
+
+  installPhase =
+    let
+      binPath = lib.makeBinPath ([
+        ffmpeg
+        yt-dlp
+      ]);
+
+      modules = yarn2nix-moretea.mkYarnModules rec {
+        name = "${pname}-modules-${version}";
+        inherit pname version;
+
+        yarnFlags = [ "--production" ];
+
+        pkgConfig = {
+          keytar = {
+            nativeBuildInputs = [
+              python3
+              pkg-config
+            ];
+            buildInputs = [
+              libsecret
+            ];
+            postInstall = ''
+              yarn --offline run build
+              # Remove unnecessary store path references.
+              rm build/config.gypi
+            '';
+          };
+        };
+
+        # needed for node-gyp, copied from https://nixos.org/manual/nixpkgs/unstable/#javascript-yarn2nix-pitfalls
+        # permalink: https://github.com/NixOS/nixpkgs/blob/d176767c02cb2a048e766215078c3d231e666091/doc/languages-frameworks/javascript.section.md#pitfalls-javascript-yarn2nix-pitfalls
+        preBuild = ''
+          mkdir -p $HOME/.node-gyp/${nodejs.version}
+          echo 9 > $HOME/.node-gyp/${nodejs.version}/installVersion
+          ln -sfv ${nodejs}/include $HOME/.node-gyp/${nodejs.version}
+          export npm_config_nodedir=${nodejs}
+        '';
+
+        packageJSON = "${src}/package.json";
+        yarnLock = ./yarn.lock;
+
+        offlineCache = fetchYarnDeps {
+          inherit yarnLock;
+          hash = "sha256-NzWzkZbf5R1R72K7KVJbZUCzso1UZ0p3+lRYZE2M/dI=";
+        };
+      };
+    in
+    ''
+      runHook preInstall
+
+      mkdir -p "$out/bin" "$out/share/Sharedown" "$out/share/applications" "$out/share/icons/hicolor/512x512/apps"
+
+      # Electron app
+      cp -r *.js *.json sharedownlogo.png sharedown "${modules}/node_modules" "$out/share/Sharedown"
+
+      # Desktop Launcher
+      cp build/icon.png "$out/share/icons/hicolor/512x512/apps/Sharedown.png"
+
+      # Install electron wrapper script
+      makeWrapper "${electron}/bin/electron" "$out/bin/Sharedown" \
+        --add-flags "$out/share/Sharedown" \
+        --prefix PATH : "${binPath}" \
+        --set PUPPETEER_EXECUTABLE_PATH "${chromium}/bin/chromium"
+
+      runHook postInstall
+    '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Application to save your Sharepoint videos for offline usage";
+    homepage = "https://github.com/kylon/Sharedown";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [
+    ];
+    platforms = platforms.unix;
+    mainProgram = "Sharedown";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sharedown/update.sh b/nixpkgs/pkgs/tools/misc/sharedown/update.sh
new file mode 100755
index 000000000000..d08a258a6a83
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sharedown/update.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p common-updater-scripts curl jq yarn yarn2nix-moretea.yarn2nix
+
+set -euo pipefail
+
+owner=kylon
+repo=Sharedown
+latestVersion=$(curl "https://api.github.com/repos/$owner/$repo/releases/latest" | jq -r '.tag_name')
+currentVersion=$(nix-instantiate --eval --expr 'with import ./. {}; sharedown.version' | tr -d '"')
+
+if [[ "$currentVersion" == "$latestVersion" && "${BUMP_LOCK-}" != "1" ]]; then
+    # Skip update when already on the latest version.
+    exit 0
+fi
+
+update-source-version sharedown "$latestVersion"
+
+dirname="$(realpath "$(dirname "$0")")"
+sourceDir="$(nix-build -A sharedown.src --no-out-link)"
+tempDir="$(mktemp -d)"
+
+cp -r "$sourceDir"/* "$tempDir"
+cd "$tempDir"
+PUPPETEER_SKIP_DOWNLOAD=1 yarn install
+yarn2nix > "$dirname/yarndeps.nix"
+cp -r yarn.lock "$dirname"
diff --git a/nixpkgs/pkgs/tools/misc/sharedown/yarn.lock b/nixpkgs/pkgs/tools/misc/sharedown/yarn.lock
new file mode 100644
index 000000000000..7d56b4aca865
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sharedown/yarn.lock
@@ -0,0 +1,2914 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"7zip-bin@~5.1.1":
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.1.1.tgz#9274ec7460652f9c632c59addf24efb1684ef876"
+  integrity sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==
+
+"@babel/code-frame@^7.0.0":
+  version "7.22.5"
+  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658"
+  integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==
+  dependencies:
+    "@babel/highlight" "^7.22.5"
+
+"@babel/helper-validator-identifier@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
+  integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
+
+"@babel/highlight@^7.22.5":
+  version "7.22.5"
+  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031"
+  integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==
+  dependencies:
+    "@babel/helper-validator-identifier" "^7.22.5"
+    chalk "^2.0.0"
+    js-tokens "^4.0.0"
+
+"@develar/schema-utils@~2.6.5":
+  version "2.6.5"
+  resolved "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz#3ece22c5838402419a6e0425f85742b961d9b6c6"
+  integrity sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==
+  dependencies:
+    ajv "^6.12.0"
+    ajv-keywords "^3.4.1"
+
+"@electron/asar@^3.2.1":
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/@electron/asar/-/asar-3.2.4.tgz#7e8635a3c4f6d8b3f8ae6efaf5ecb9fbf3bd9864"
+  integrity sha512-lykfY3TJRRWFeTxccEKdf1I6BLl2Plw81H0bbp4Fc5iEc67foDCa5pjJQULVgo0wF+Dli75f3xVcdb/67FFZ/g==
+  dependencies:
+    chromium-pickle-js "^0.2.0"
+    commander "^5.0.0"
+    glob "^7.1.6"
+    minimatch "^3.0.4"
+
+"@electron/get@^2.0.0":
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/@electron/get/-/get-2.0.2.tgz#ae2a967b22075e9c25aaf00d5941cd79c21efd7e"
+  integrity sha512-eFZVFoRXb3GFGd7Ak7W4+6jBl9wBtiZ4AaYOse97ej6mKj5tkyO0dUnUChs1IhJZtx1BENo4/p4WUTXpi6vT+g==
+  dependencies:
+    debug "^4.1.1"
+    env-paths "^2.2.0"
+    fs-extra "^8.1.0"
+    got "^11.8.5"
+    progress "^2.0.3"
+    semver "^6.2.0"
+    sumchecker "^3.0.1"
+  optionalDependencies:
+    global-agent "^3.0.0"
+
+"@electron/notarize@^1.2.3":
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/@electron/notarize/-/notarize-1.2.4.tgz#a7d38773f4cad40df111a5edc64037e5d768ea1e"
+  integrity sha512-W5GQhJEosFNafewnS28d3bpQ37/s91CDWqxVchHfmv2dQSTWpOzNlUVQwYzC1ay5bChRV/A9BTL68yj0Pa+TSg==
+  dependencies:
+    debug "^4.1.1"
+    fs-extra "^9.0.1"
+
+"@electron/osx-sign@^1.0.4":
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/@electron/osx-sign/-/osx-sign-1.0.4.tgz#8e91442846471636ca0469426a82b253b9170151"
+  integrity sha512-xfhdEcIOfAZg7scZ9RQPya1G1lWo8/zMCwUXAulq0SfY7ONIW+b9qGyKdMyuMctNYwllrIS+vmxfijSfjeh97g==
+  dependencies:
+    compare-version "^0.1.2"
+    debug "^4.3.4"
+    fs-extra "^10.0.0"
+    isbinaryfile "^4.0.8"
+    minimist "^1.2.6"
+    plist "^3.0.5"
+
+"@electron/rebuild@^3.2.13":
+  version "3.2.13"
+  resolved "https://registry.yarnpkg.com/@electron/rebuild/-/rebuild-3.2.13.tgz#98fbb98981b1a86162546a2ab91b2355569cca4c"
+  integrity sha512-DH9Ol4JCnHDYVOD0fKWq+Qqbn/0WU1O6QR0mIpMXEVU4YFM4PlaqNC9K36mGShNBxxGFotZCMDrB1wl/iHM12g==
+  dependencies:
+    "@malept/cross-spawn-promise" "^2.0.0"
+    chalk "^4.0.0"
+    debug "^4.1.1"
+    detect-libc "^2.0.1"
+    fs-extra "^10.0.0"
+    got "^11.7.0"
+    node-abi "^3.0.0"
+    node-api-version "^0.1.4"
+    node-gyp "^9.0.0"
+    ora "^5.1.0"
+    semver "^7.3.5"
+    tar "^6.0.5"
+    yargs "^17.0.1"
+
+"@electron/universal@1.3.4":
+  version "1.3.4"
+  resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.3.4.tgz#bccd94b635d7c85eeed5eabba457eb4ed2be2777"
+  integrity sha512-BdhBgm2ZBnYyYRLRgOjM5VHkyFItsbggJ0MHycOjKWdFGYwK97ZFXH54dTvUWEfha81vfvwr5On6XBjt99uDcg==
+  dependencies:
+    "@electron/asar" "^3.2.1"
+    "@malept/cross-spawn-promise" "^1.1.0"
+    debug "^4.3.1"
+    dir-compare "^3.0.0"
+    fs-extra "^9.0.1"
+    minimatch "^3.0.4"
+    plist "^3.0.4"
+
+"@fortawesome/fontawesome-free@6.4.0":
+  version "6.4.0"
+  resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.0.tgz#1ee0c174e472c84b23cb46c995154dc383e3b4fe"
+  integrity sha512-0NyytTlPJwB/BF5LtRV8rrABDbe3TdTXqNB3PdZ+UUUZAEIrdOJdmABqKjt4AXwIoJNaRVVZEXxpNrqvE1GAYQ==
+
+"@isaacs/cliui@^8.0.2":
+  version "8.0.2"
+  resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
+  integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
+  dependencies:
+    string-width "^5.1.2"
+    string-width-cjs "npm:string-width@^4.2.0"
+    strip-ansi "^7.0.1"
+    strip-ansi-cjs "npm:strip-ansi@^6.0.1"
+    wrap-ansi "^8.1.0"
+    wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
+
+"@malept/cross-spawn-promise@^1.1.0":
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz#504af200af6b98e198bce768bc1730c6936ae01d"
+  integrity sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==
+  dependencies:
+    cross-spawn "^7.0.1"
+
+"@malept/cross-spawn-promise@^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz#d0772de1aa680a0bfb9ba2f32b4c828c7857cb9d"
+  integrity sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==
+  dependencies:
+    cross-spawn "^7.0.1"
+
+"@malept/flatpak-bundler@^0.4.0":
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz#e8a32c30a95d20c2b1bb635cc580981a06389858"
+  integrity sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==
+  dependencies:
+    debug "^4.1.1"
+    fs-extra "^9.0.0"
+    lodash "^4.17.15"
+    tmp-promise "^3.0.2"
+
+"@npmcli/fs@^3.1.0":
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e"
+  integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==
+  dependencies:
+    semver "^7.3.5"
+
+"@pkgjs/parseargs@^0.11.0":
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
+  integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+
+"@puppeteer/browsers@1.4.1":
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-1.4.1.tgz#9c8ba163c3ef77ae3fc9708ad1f5787263f7290e"
+  integrity sha512-H43VosMzywHCcYcgv0GXXopvwnV21Ud9g2aXbPlQUJj1Xcz9V0wBwHeFz6saFhx/3VKisZfI1GEKEOhQCau7Vw==
+  dependencies:
+    debug "4.3.4"
+    extract-zip "2.0.1"
+    progress "2.0.3"
+    proxy-agent "6.2.1"
+    tar-fs "2.1.1"
+    unbzip2-stream "1.4.3"
+    yargs "17.7.1"
+
+"@sindresorhus/is@^4.0.0":
+  version "4.6.0"
+  resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f"
+  integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==
+
+"@szmarczak/http-timer@^4.0.5":
+  version "4.0.6"
+  resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807"
+  integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==
+  dependencies:
+    defer-to-connect "^2.0.0"
+
+"@tootallnate/once@2":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf"
+  integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==
+
+"@types/cacheable-request@^6.0.1":
+  version "6.0.3"
+  resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183"
+  integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==
+  dependencies:
+    "@types/http-cache-semantics" "*"
+    "@types/keyv" "^3.1.4"
+    "@types/node" "*"
+    "@types/responselike" "^1.0.0"
+
+"@types/debug@^4.1.6":
+  version "4.1.8"
+  resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317"
+  integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==
+  dependencies:
+    "@types/ms" "*"
+
+"@types/fs-extra@9.0.13", "@types/fs-extra@^9.0.11":
+  version "9.0.13"
+  resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
+  integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==
+  dependencies:
+    "@types/node" "*"
+
+"@types/http-cache-semantics@*":
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812"
+  integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
+
+"@types/keyv@^3.1.4":
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6"
+  integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==
+  dependencies:
+    "@types/node" "*"
+
+"@types/ms@*":
+  version "0.7.31"
+  resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197"
+  integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
+
+"@types/node@*":
+  version "20.4.4"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.4.tgz#c79c7cc22c9d0e97a7944954c9e663bcbd92b0cb"
+  integrity sha512-CukZhumInROvLq3+b5gLev+vgpsIqC2D0deQr/yS1WnxvmYLlJXZpaQrQiseMY+6xusl79E04UjWoqyr+t1/Ew==
+
+"@types/node@^18.11.18":
+  version "18.17.0"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-18.17.0.tgz#35d44267a33dd46b49ee0f73d31b05fd7407e290"
+  integrity sha512-GXZxEtOxYGFchyUzxvKI14iff9KZ2DI+A6a37o6EQevtg6uO9t+aUZKcaC1Te5Ng1OnLM7K9NVVj+FbecD9cJg==
+
+"@types/plist@^3.0.1":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@types/plist/-/plist-3.0.2.tgz#61b3727bba0f5c462fe333542534a0c3e19ccb01"
+  integrity sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==
+  dependencies:
+    "@types/node" "*"
+    xmlbuilder ">=11.0.1"
+
+"@types/responselike@^1.0.0":
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29"
+  integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==
+  dependencies:
+    "@types/node" "*"
+
+"@types/verror@^1.10.3":
+  version "1.10.6"
+  resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.6.tgz#3e600c62d210c5826460858f84bcbb65805460bb"
+  integrity sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==
+
+"@types/yauzl@^2.9.1":
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
+  integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
+  dependencies:
+    "@types/node" "*"
+
+"@xmldom/xmldom@^0.8.8":
+  version "0.8.10"
+  resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
+  integrity sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==
+
+abbrev@^1.0.0:
+  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-walk@^8.2.0:
+  version "8.2.0"
+  resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
+  integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
+
+acorn@^8.7.0:
+  version "8.10.0"
+  resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
+  integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
+
+agent-base@6, agent-base@^6.0.2:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+  integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+  dependencies:
+    debug "4"
+
+agent-base@^7.0.1, agent-base@^7.0.2, agent-base@^7.1.0:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434"
+  integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==
+  dependencies:
+    debug "^4.3.4"
+
+agentkeepalive@^4.2.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255"
+  integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==
+  dependencies:
+    debug "^4.1.0"
+    depd "^2.0.0"
+    humanize-ms "^1.2.1"
+
+aggregate-error@^3.0.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+  integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+  dependencies:
+    clean-stack "^2.0.0"
+    indent-string "^4.0.0"
+
+ajv-keywords@^3.4.1:
+  version "3.5.2"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
+  integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
+
+ajv@^6.10.0, ajv@^6.12.0:
+  version "6.12.6"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+  integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+  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-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-regex@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a"
+  integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==
+
+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"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+ansi-styles@^6.1.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
+  integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
+
+app-builder-bin@4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0"
+  integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==
+
+app-builder-lib@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-24.4.0.tgz#1606f94e99366eea9e7507228961b8396e40d546"
+  integrity sha512-EcdqtWvg1LAApKCfyRBukcVkmsa94s2e1VKHjZLpvA9/D14QEt8rHhffYeaA+cH/pVeoNVn2ob735KnfJKEEow==
+  dependencies:
+    "7zip-bin" "~5.1.1"
+    "@develar/schema-utils" "~2.6.5"
+    "@electron/notarize" "^1.2.3"
+    "@electron/osx-sign" "^1.0.4"
+    "@electron/rebuild" "^3.2.13"
+    "@electron/universal" "1.3.4"
+    "@malept/flatpak-bundler" "^0.4.0"
+    "@types/fs-extra" "9.0.13"
+    async-exit-hook "^2.0.1"
+    bluebird-lst "^1.0.9"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    chromium-pickle-js "^0.2.0"
+    debug "^4.3.4"
+    ejs "^3.1.8"
+    electron-publish "24.4.0"
+    form-data "^4.0.0"
+    fs-extra "^10.1.0"
+    hosted-git-info "^4.1.0"
+    is-ci "^3.0.0"
+    isbinaryfile "^5.0.0"
+    js-yaml "^4.1.0"
+    lazy-val "^1.0.5"
+    minimatch "^5.1.1"
+    read-config-file "6.3.2"
+    sanitize-filename "^1.6.3"
+    semver "^7.3.8"
+    tar "^6.1.12"
+    temp-file "^3.4.0"
+
+"aproba@^1.0.3 || ^2.0.0":
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc"
+  integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
+
+arch@^2.1.1:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
+  integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
+
+are-we-there-yet@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd"
+  integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
+  dependencies:
+    delegates "^1.0.0"
+    readable-stream "^3.6.0"
+
+argparse@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+  integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+assert-plus@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+  integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==
+
+ast-types@^0.13.4:
+  version "0.13.4"
+  resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782"
+  integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==
+  dependencies:
+    tslib "^2.0.1"
+
+astral-regex@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
+  integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
+
+async-exit-hook@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz#8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3"
+  integrity sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==
+
+async@^3.2.3:
+  version "3.2.4"
+  resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
+  integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
+
+asynckit@^0.4.0:
+  version "0.4.0"
+  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+  integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+
+at-least-node@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+  integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+axios@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-1.4.0.tgz#38a7bf1224cd308de271146038b551d725f0be1f"
+  integrity sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==
+  dependencies:
+    follow-redirects "^1.15.0"
+    form-data "^4.0.0"
+    proxy-from-env "^1.1.0"
+
+balanced-match@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base64-js@^1.3.1, base64-js@^1.5.1:
+  version "1.5.1"
+  resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+  integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+basic-ftp@^5.0.2:
+  version "5.0.3"
+  resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.3.tgz#b14c0fe8111ce001ec913686434fe0c2fb461228"
+  integrity sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==
+
+bl@^4.0.3, bl@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+  integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+  dependencies:
+    buffer "^5.5.0"
+    inherits "^2.0.4"
+    readable-stream "^3.4.0"
+
+bluebird-lst@^1.0.9:
+  version "1.0.9"
+  resolved "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz#a64a0e4365658b9ab5fe875eb9dfb694189bb41c"
+  integrity sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==
+  dependencies:
+    bluebird "^3.5.5"
+
+bluebird@^3.5.5:
+  version "3.7.2"
+  resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
+  integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
+
+boolean@^3.0.1:
+  version "3.2.0"
+  resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b"
+  integrity sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==
+
+bootstrap@5.3.0:
+  version "5.3.0"
+  resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.0.tgz#0718a7cc29040ee8dbf1bd652b896f3436a87c29"
+  integrity sha512-UnBV3E3v4STVNQdms6jSGO2CvOkjUMdDAVR2V5N4uCMdaIkaQjbcEAMqRimDHIs4uqBYzDAKCQwCB+97tJgHQw==
+
+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"
+
+brace-expansion@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+  integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+  dependencies:
+    balanced-match "^1.0.0"
+
+buffer-crc32@~0.2.3:
+  version "0.2.13"
+  resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+  integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
+
+buffer-equal@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.1.tgz#2f7651be5b1b3f057fcd6e7ee16cf34767077d90"
+  integrity sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==
+
+buffer-from@^1.0.0:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer@^5.1.0, buffer@^5.2.1, buffer@^5.5.0:
+  version "5.7.1"
+  resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+  integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+  dependencies:
+    base64-js "^1.3.1"
+    ieee754 "^1.1.13"
+
+builder-util-runtime@9.2.1:
+  version "9.2.1"
+  resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz#3184dcdf7ed6c47afb8df733813224ced4f624fd"
+  integrity sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==
+  dependencies:
+    debug "^4.3.4"
+    sax "^1.2.4"
+
+builder-util@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-24.4.0.tgz#dbb201a118fd573180e6a1070cf4c0be6de80cd7"
+  integrity sha512-tONb/GIK1MKa1BcOPHE1naId3o5nj6gdka5kP7yUJh2DOfF+jMq3laiu+UOZH6A7ZtkMtnGNMYFKFTIv408n/A==
+  dependencies:
+    "7zip-bin" "~5.1.1"
+    "@types/debug" "^4.1.6"
+    app-builder-bin "4.0.0"
+    bluebird-lst "^1.0.9"
+    builder-util-runtime "9.2.1"
+    chalk "^4.1.2"
+    cross-spawn "^7.0.3"
+    debug "^4.3.4"
+    fs-extra "^10.1.0"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.1"
+    is-ci "^3.0.0"
+    js-yaml "^4.1.0"
+    source-map-support "^0.5.19"
+    stat-mode "^1.0.0"
+    temp-file "^3.4.0"
+
+cacache@^17.0.0:
+  version "17.1.3"
+  resolved "https://registry.yarnpkg.com/cacache/-/cacache-17.1.3.tgz#c6ac23bec56516a7c0c52020fd48b4909d7c7044"
+  integrity sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==
+  dependencies:
+    "@npmcli/fs" "^3.1.0"
+    fs-minipass "^3.0.0"
+    glob "^10.2.2"
+    lru-cache "^7.7.1"
+    minipass "^5.0.0"
+    minipass-collect "^1.0.2"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    p-map "^4.0.0"
+    ssri "^10.0.0"
+    tar "^6.1.11"
+    unique-filename "^3.0.0"
+
+cacheable-lookup@^5.0.3:
+  version "5.0.4"
+  resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005"
+  integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==
+
+cacheable-request@^7.0.2:
+  version "7.0.4"
+  resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817"
+  integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
+  dependencies:
+    clone-response "^1.0.2"
+    get-stream "^5.1.0"
+    http-cache-semantics "^4.0.0"
+    keyv "^4.0.0"
+    lowercase-keys "^2.0.0"
+    normalize-url "^6.0.1"
+    responselike "^2.0.0"
+
+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==
+
+chalk@^2.0.0:
+  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"
+
+chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2:
+  version "4.1.2"
+  resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+  integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+  dependencies:
+    ansi-styles "^4.1.0"
+    supports-color "^7.1.0"
+
+chownr@^1.1.1:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+  integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+chownr@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece"
+  integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
+
+chromium-bidi@0.4.11:
+  version "0.4.11"
+  resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.4.11.tgz#d3eafb0a99f417406a734b889dacd777be5e227c"
+  integrity sha512-p03ajLhlQ5gebw3cmbDBFmBc2wnJM5dnXS8Phu6mblGn/KQd76yOVL5VwE0VAisa7oazNfKGTaXlIZ8Q5Bb9OA==
+  dependencies:
+    mitt "3.0.0"
+
+chromium-pickle-js@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205"
+  integrity sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==
+
+ci-info@^3.2.0:
+  version "3.8.0"
+  resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91"
+  integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
+
+clean-stack@^2.0.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+  integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cli-cursor@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
+  integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
+  dependencies:
+    restore-cursor "^3.1.0"
+
+cli-spinners@^2.5.0:
+  version "2.9.0"
+  resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.0.tgz#5881d0ad96381e117bbe07ad91f2008fe6ffd8db"
+  integrity sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==
+
+cli-truncate@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7"
+  integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==
+  dependencies:
+    slice-ansi "^3.0.0"
+    string-width "^4.2.0"
+
+clipboardy@2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290"
+  integrity sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==
+  dependencies:
+    arch "^2.1.1"
+    execa "^1.0.0"
+    is-wsl "^2.1.1"
+
+cliui@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
+  integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
+  dependencies:
+    string-width "^4.2.0"
+    strip-ansi "^6.0.1"
+    wrap-ansi "^7.0.0"
+
+clone-response@^1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3"
+  integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==
+  dependencies:
+    mimic-response "^1.0.0"
+
+clone@^1.0.2:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+  integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
+
+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-convert@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+  dependencies:
+    color-name "~1.1.4"
+
+color-name@1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+  integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+color-support@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2"
+  integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
+
+combined-stream@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
+  integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
+  dependencies:
+    delayed-stream "~1.0.0"
+
+commander@^5.0.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae"
+  integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==
+
+compare-version@^0.1.2:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080"
+  integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+config-file-ts@^0.2.4:
+  version "0.2.4"
+  resolved "https://registry.yarnpkg.com/config-file-ts/-/config-file-ts-0.2.4.tgz#6c0741fbe118a7cf786c65f139030f0448a2cc99"
+  integrity sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ==
+  dependencies:
+    glob "^7.1.6"
+    typescript "^4.0.2"
+
+console-control-strings@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+  integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
+
+core-util-is@1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==
+
+cosmiconfig@8.1.3:
+  version "8.1.3"
+  resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689"
+  integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw==
+  dependencies:
+    import-fresh "^3.2.1"
+    js-yaml "^4.1.0"
+    parse-json "^5.0.0"
+    path-type "^4.0.0"
+
+crc@^3.8.0:
+  version "3.8.0"
+  resolved "https://registry.yarnpkg.com/crc/-/crc-3.8.0.tgz#ad60269c2c856f8c299e2c4cc0de4556914056c6"
+  integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==
+  dependencies:
+    buffer "^5.1.0"
+
+cross-fetch@3.1.6:
+  version "3.1.6"
+  resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.6.tgz#bae05aa31a4da760969756318feeee6e70f15d6c"
+  integrity sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==
+  dependencies:
+    node-fetch "^2.6.11"
+
+cross-spawn@^6.0.0:
+  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"
+
+cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.3:
+  version "7.0.3"
+  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+  integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+  dependencies:
+    path-key "^3.1.0"
+    shebang-command "^2.0.0"
+    which "^2.0.1"
+
+data-uri-to-buffer@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz#db89a9e279c2ffe74f50637a59a32fb23b3e4d7c"
+  integrity sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==
+
+debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4:
+  version "4.3.4"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+  integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+  dependencies:
+    ms "2.1.2"
+
+decompress-response@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
+  integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
+  dependencies:
+    mimic-response "^3.1.0"
+
+deep-extend@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+  integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+deep-is@~0.1.3:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
+  integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
+
+defaults@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
+  integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
+  dependencies:
+    clone "^1.0.2"
+
+defer-to-connect@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587"
+  integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==
+
+define-properties@^1.1.3:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
+  integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
+  dependencies:
+    has-property-descriptors "^1.0.0"
+    object-keys "^1.1.1"
+
+degenerator@^4.0.4:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-4.0.4.tgz#dbeeb602c64ce543c1f17e2c681d1d0cc9d4a0ac"
+  integrity sha512-MTZdZsuNxSBL92rsjx3VFWe57OpRlikyLbcx2B5Dmdv6oScqpMrvpY7zHLMymrUxo3U5+suPUMsNgW/+SZB1lg==
+  dependencies:
+    ast-types "^0.13.4"
+    escodegen "^1.14.3"
+    esprima "^4.0.1"
+    vm2 "^3.9.19"
+
+delayed-stream@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+  integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+
+delegates@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+  integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
+
+depd@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+  integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+detect-libc@^2.0.0, detect-libc@^2.0.1:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d"
+  integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==
+
+detect-node@^2.0.4:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1"
+  integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==
+
+devtools-protocol@0.0.1120988:
+  version "0.0.1120988"
+  resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1120988.tgz#8fe49088919ae3b8df7235774633763f1f925066"
+  integrity sha512-39fCpE3Z78IaIPChJsP6Lhmkbf4dWXOmzLk/KFTdRkNk/0JymRIfUynDVRndV9HoDz8PyalK1UH21ST/ivwW5Q==
+
+dir-compare@^3.0.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/dir-compare/-/dir-compare-3.3.0.tgz#2c749f973b5c4b5d087f11edaae730db31788416"
+  integrity sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==
+  dependencies:
+    buffer-equal "^1.0.0"
+    minimatch "^3.0.4"
+
+dmg-builder@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-24.4.0.tgz#46c80f119465f6a7275766c72b4f3d514cc8013d"
+  integrity sha512-p5z9Cx539GSBYb+b09Z+hMhuBTh/BrI71VRg4rgF6f2xtIRK/YlTGVS/O08k5OojoyhZcpS7JXxDVSmQoWgiiQ==
+  dependencies:
+    app-builder-lib "24.4.0"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    fs-extra "^10.1.0"
+    iconv-lite "^0.6.2"
+    js-yaml "^4.1.0"
+  optionalDependencies:
+    dmg-license "^1.0.11"
+
+dmg-license@^1.0.11:
+  version "1.0.11"
+  resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.11.tgz#7b3bc3745d1b52be7506b4ee80cb61df6e4cd79a"
+  integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==
+  dependencies:
+    "@types/plist" "^3.0.1"
+    "@types/verror" "^1.10.3"
+    ajv "^6.10.0"
+    crc "^3.8.0"
+    iconv-corefoundation "^1.1.7"
+    plist "^3.0.4"
+    smart-buffer "^4.0.2"
+    verror "^1.10.0"
+
+dotenv-expand@^5.1.0:
+  version "5.1.0"
+  resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0"
+  integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==
+
+dotenv@^9.0.2:
+  version "9.0.2"
+  resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-9.0.2.tgz#dacc20160935a37dea6364aa1bef819fb9b6ab05"
+  integrity sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==
+
+eastasianwidth@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
+  integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
+
+ejs@^3.1.8:
+  version "3.1.9"
+  resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.9.tgz#03c9e8777fe12686a9effcef22303ca3d8eeb361"
+  integrity sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==
+  dependencies:
+    jake "^10.8.5"
+
+electron-builder@^24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-24.4.0.tgz#8846efa45bac8f6b9afc181abf71a4e12530f045"
+  integrity sha512-D5INxodxaUIJgEX6p/fqBd8wQNS8XRAToNIJ9SQC+taNS5D73ZsjLuXiRraFGCB0cVk9KeKhEkdEOH5AaVya4g==
+  dependencies:
+    app-builder-lib "24.4.0"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    chalk "^4.1.2"
+    dmg-builder "24.4.0"
+    fs-extra "^10.1.0"
+    is-ci "^3.0.0"
+    lazy-val "^1.0.5"
+    read-config-file "6.3.2"
+    simple-update-notifier "^1.1.0"
+    yargs "^17.6.2"
+
+electron-publish@24.4.0:
+  version "24.4.0"
+  resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-24.4.0.tgz#a58f49ecd727620f65372881788ebb1a9b853284"
+  integrity sha512-U3mnVSxIfNrLW7ZnwiedFhcLf6ExPFXgAsx89WpfQFsV4gFAt/LG+H74p0m9NSvsLXiZuF82yXoxi7Ou8GHq4Q==
+  dependencies:
+    "@types/fs-extra" "^9.0.11"
+    builder-util "24.4.0"
+    builder-util-runtime "9.2.1"
+    chalk "^4.1.2"
+    fs-extra "^10.1.0"
+    lazy-val "^1.0.5"
+    mime "^2.5.2"
+
+electron@^25.1.0:
+  version "25.3.1"
+  resolved "https://registry.yarnpkg.com/electron/-/electron-25.3.1.tgz#898cbb5e54d17ad0014123a10f5febc17638c6a9"
+  integrity sha512-t0QXXqgf0/P0OJ9LU3qpcBMK+wL0FRwTQfooBaaG08v5hywPzc1yplfb3l4tS1xC0Ttw8IBaKLBeEoRgxBRHjg==
+  dependencies:
+    "@electron/get" "^2.0.0"
+    "@types/node" "^18.11.18"
+    extract-zip "^2.0.1"
+
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+emoji-regex@^9.2.2:
+  version "9.2.2"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
+  integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
+
+encoding@^0.1.13:
+  version "0.1.13"
+  resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
+  integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
+  dependencies:
+    iconv-lite "^0.6.2"
+
+end-of-stream@^1.1.0, end-of-stream@^1.4.1:
+  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"
+
+env-paths@^2.2.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+  integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+err-code@^2.0.2:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9"
+  integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
+
+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"
+
+es6-error@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d"
+  integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+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 sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+escape-string-regexp@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+  integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escodegen@^1.14.3:
+  version "1.14.3"
+  resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
+  integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
+  dependencies:
+    esprima "^4.0.1"
+    estraverse "^4.2.0"
+    esutils "^2.0.2"
+    optionator "^0.8.1"
+  optionalDependencies:
+    source-map "~0.6.1"
+
+esprima@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+estraverse@^4.2.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+  integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
+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@^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-template@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
+  integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
+
+exponential-backoff@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6"
+  integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==
+
+extract-zip@2.0.1, extract-zip@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
+  integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
+  dependencies:
+    debug "^4.1.1"
+    get-stream "^5.1.0"
+    yauzl "^2.10.0"
+  optionalDependencies:
+    "@types/yauzl" "^2.9.1"
+
+extsprintf@^1.2.0:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
+  integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==
+
+fast-deep-equal@^3.1.1:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+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 sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
+
+fd-slicer@~1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
+  integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
+  dependencies:
+    pend "~1.2.0"
+
+fessonia@^2.2.2:
+  version "2.2.2"
+  resolved "https://registry.yarnpkg.com/fessonia/-/fessonia-2.2.2.tgz#c8f9da5701d2e63efc9fd5793368929ddfaaf776"
+  integrity sha512-FvlDFdwHBIxWl2K9XynAIR38NB8xn4vPPZDNK5nIQBnGwZ0xv5FxDXsz+pzYZrUqoEQPQBJemNrYhueD2de7qw==
+
+filelist@^1.0.4:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
+  integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==
+  dependencies:
+    minimatch "^5.0.1"
+
+follow-redirects@^1.15.0:
+  version "1.15.2"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
+  integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+
+foreground-child@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
+  integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
+  dependencies:
+    cross-spawn "^7.0.0"
+    signal-exit "^4.0.1"
+
+form-data@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+  integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+  dependencies:
+    asynckit "^0.4.0"
+    combined-stream "^1.0.8"
+    mime-types "^2.1.12"
+
+fs-constants@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
+  integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+
+fs-extra@^10.0.0, fs-extra@^10.1.0:
+  version "10.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
+  integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
+
+fs-extra@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+  integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^4.0.0"
+    universalify "^0.1.0"
+
+fs-extra@^9.0.0, fs-extra@^9.0.1:
+  version "9.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+  integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+  dependencies:
+    at-least-node "^1.0.0"
+    graceful-fs "^4.2.0"
+    jsonfile "^6.0.1"
+    universalify "^2.0.0"
+
+fs-minipass@^2.0.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb"
+  integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
+  dependencies:
+    minipass "^3.0.0"
+
+fs-minipass@^3.0.0:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.2.tgz#5b383858efa8c1eb8c33b39e994f7e8555b8b3a3"
+  integrity sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==
+  dependencies:
+    minipass "^5.0.0"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+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==
+
+gauge@^4.0.3:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce"
+  integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
+  dependencies:
+    aproba "^1.0.3 || ^2.0.0"
+    color-support "^1.1.3"
+    console-control-strings "^1.1.0"
+    has-unicode "^2.0.1"
+    signal-exit "^3.0.7"
+    string-width "^4.2.3"
+    strip-ansi "^6.0.1"
+    wide-align "^1.1.5"
+
+get-caller-file@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+get-intrinsic@^1.1.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
+  integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
+  dependencies:
+    function-bind "^1.1.1"
+    has "^1.0.3"
+    has-proto "^1.0.1"
+    has-symbols "^1.0.3"
+
+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-stream@^5.1.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+  integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+  dependencies:
+    pump "^3.0.0"
+
+get-uri@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.1.tgz#cff2ba8d456c3513a04b70c45de4dbcca5b1527c"
+  integrity sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==
+  dependencies:
+    basic-ftp "^5.0.2"
+    data-uri-to-buffer "^5.0.1"
+    debug "^4.3.4"
+    fs-extra "^8.1.0"
+
+github-from-package@0.0.0:
+  version "0.0.0"
+  resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
+  integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
+
+glob@^10.2.2:
+  version "10.3.3"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.3.tgz#8360a4ffdd6ed90df84aa8d52f21f452e86a123b"
+  integrity sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==
+  dependencies:
+    foreground-child "^3.1.0"
+    jackspeak "^2.0.3"
+    minimatch "^9.0.1"
+    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+    path-scurry "^1.10.1"
+
+glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
+  version "7.2.3"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+  integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.1.1"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+global-agent@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6"
+  integrity sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==
+  dependencies:
+    boolean "^3.0.1"
+    es6-error "^4.1.1"
+    matcher "^3.0.0"
+    roarr "^2.15.3"
+    semver "^7.3.2"
+    serialize-error "^7.0.1"
+
+globalthis@^1.0.1:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+  integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
+  dependencies:
+    define-properties "^1.1.3"
+
+got@^11.7.0, got@^11.8.5:
+  version "11.8.6"
+  resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a"
+  integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
+  dependencies:
+    "@sindresorhus/is" "^4.0.0"
+    "@szmarczak/http-timer" "^4.0.5"
+    "@types/cacheable-request" "^6.0.1"
+    "@types/responselike" "^1.0.0"
+    cacheable-lookup "^5.0.3"
+    cacheable-request "^7.0.2"
+    decompress-response "^6.0.0"
+    http2-wrapper "^1.0.0-beta.5.2"
+    lowercase-keys "^2.0.0"
+    p-cancelable "^2.0.0"
+    responselike "^2.0.0"
+
+graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.6:
+  version "4.2.11"
+  resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+  integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+has-flag@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+  integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+  integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+has-property-descriptors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
+  integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
+  dependencies:
+    get-intrinsic "^1.1.1"
+
+has-proto@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
+  integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+
+has-symbols@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
+  integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
+
+has-unicode@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+  integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
+
+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@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
+  integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
+  dependencies:
+    lru-cache "^6.0.0"
+
+http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a"
+  integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
+
+http-proxy-agent@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43"
+  integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==
+  dependencies:
+    "@tootallnate/once" "2"
+    agent-base "6"
+    debug "4"
+
+http-proxy-agent@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673"
+  integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==
+  dependencies:
+    agent-base "^7.1.0"
+    debug "^4.3.4"
+
+http2-wrapper@^1.0.0-beta.5.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
+  integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==
+  dependencies:
+    quick-lru "^5.1.1"
+    resolve-alpn "^1.0.0"
+
+https-proxy-agent@^5.0.0, https-proxy-agent@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+  integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+  dependencies:
+    agent-base "6"
+    debug "4"
+
+https-proxy-agent@^7.0.0:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz#0277e28f13a07d45c663633841e20a40aaafe0ab"
+  integrity sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==
+  dependencies:
+    agent-base "^7.0.2"
+    debug "4"
+
+humanize-ms@^1.2.1:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
+  integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
+  dependencies:
+    ms "^2.0.0"
+
+iconv-corefoundation@^1.1.7:
+  version "1.1.7"
+  resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a"
+  integrity sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==
+  dependencies:
+    cli-truncate "^2.1.0"
+    node-addon-api "^1.6.3"
+
+iconv-lite@^0.6.2:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
+ieee754@^1.1.13:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+  integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+import-fresh@^3.2.1:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+  integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+  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 sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
+
+indent-string@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+  integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@^2.0.3, inherits@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+ini@~1.3.0:
+  version "1.3.8"
+  resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+  integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+ip@^1.1.8:
+  version "1.1.8"
+  resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48"
+  integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==
+
+ip@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da"
+  integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==
+
+is-arrayish@^0.2.1:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+  integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
+
+is-ci@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
+  integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
+  dependencies:
+    ci-info "^3.2.0"
+
+is-docker@^2.0.0:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-interactive@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
+  integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
+
+is-lambda@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5"
+  integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
+
+is-stream@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+  integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==
+
+is-unicode-supported@^0.1.0:
+  version "0.1.0"
+  resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+  integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+is-wsl@^2.1.1:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+  integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+  dependencies:
+    is-docker "^2.0.0"
+
+isbinaryfile@^4.0.8:
+  version "4.0.10"
+  resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3"
+  integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==
+
+isbinaryfile@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-5.0.0.tgz#034b7e54989dab8986598cbcea41f66663c65234"
+  integrity sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==
+
+isexe@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+  integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
+
+iso8601-duration@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/iso8601-duration/-/iso8601-duration-2.1.1.tgz#88d9e481525b50e57840bc93fb8a1727a7d849d2"
+  integrity sha512-VGGpW30/R57FpG1J7RqqKBAaK7lIiudlZkQ5tRoO9hNlKYQNnhs60DQpXlPFBmp6I+kJ61PHkI3f/T7cR4wfbw==
+
+jackspeak@^2.0.3:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.2.1.tgz#655e8cf025d872c9c03d3eb63e8f0c024fef16a6"
+  integrity sha512-MXbxovZ/Pm42f6cDIDkl3xpwv1AGwObKwfmjs2nQePiy85tP3fatofl3FC1aBsOtP/6fq5SbtgHwWcMsLP+bDw==
+  dependencies:
+    "@isaacs/cliui" "^8.0.2"
+  optionalDependencies:
+    "@pkgjs/parseargs" "^0.11.0"
+
+jake@^10.8.5:
+  version "10.8.7"
+  resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.7.tgz#63a32821177940c33f356e0ba44ff9d34e1c7d8f"
+  integrity sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==
+  dependencies:
+    async "^3.2.3"
+    chalk "^4.0.2"
+    filelist "^1.0.4"
+    minimatch "^3.1.2"
+
+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-yaml@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+  integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+  dependencies:
+    argparse "^2.0.1"
+
+json-buffer@3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13"
+  integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
+
+json-parse-even-better-errors@^2.3.0:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
+  integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+
+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-stringify-safe@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+  integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
+
+json5@^2.2.0:
+  version "2.2.3"
+  resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
+  integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
+
+jsonfile@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+  integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+jsonfile@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
+  integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
+  dependencies:
+    universalify "^2.0.0"
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
+keytar@^7.9.0:
+  version "7.9.0"
+  resolved "https://registry.yarnpkg.com/keytar/-/keytar-7.9.0.tgz#4c6225708f51b50cbf77c5aae81721964c2918cb"
+  integrity sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==
+  dependencies:
+    node-addon-api "^4.3.0"
+    prebuild-install "^7.0.1"
+
+keyv@^4.0.0:
+  version "4.5.3"
+  resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.3.tgz#00873d2b046df737963157bd04f294ca818c9c25"
+  integrity sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==
+  dependencies:
+    json-buffer "3.0.1"
+
+lazy-val@^1.0.4, lazy-val@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.5.tgz#6cf3b9f5bc31cee7ee3e369c0832b7583dcd923d"
+  integrity sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==
+
+levn@~0.3.0:
+  version "0.3.0"
+  resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+  integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==
+  dependencies:
+    prelude-ls "~1.1.2"
+    type-check "~0.3.2"
+
+lines-and-columns@^1.1.6:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
+  integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
+
+lodash@^4.17.15:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+  integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+  dependencies:
+    chalk "^4.1.0"
+    is-unicode-supported "^0.1.0"
+
+lowercase-keys@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479"
+  integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==
+
+lru-cache@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
+  integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
+  dependencies:
+    yallist "^4.0.0"
+
+lru-cache@^7.14.1, lru-cache@^7.7.1:
+  version "7.18.3"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+  integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+
+"lru-cache@^9.1.1 || ^10.0.0":
+  version "10.0.0"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61"
+  integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==
+
+make-fetch-happen@^11.0.3:
+  version "11.1.1"
+  resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz#85ceb98079584a9523d4bf71d32996e7e208549f"
+  integrity sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==
+  dependencies:
+    agentkeepalive "^4.2.1"
+    cacache "^17.0.0"
+    http-cache-semantics "^4.1.1"
+    http-proxy-agent "^5.0.0"
+    https-proxy-agent "^5.0.0"
+    is-lambda "^1.0.1"
+    lru-cache "^7.7.1"
+    minipass "^5.0.0"
+    minipass-fetch "^3.0.0"
+    minipass-flush "^1.0.5"
+    minipass-pipeline "^1.2.4"
+    negotiator "^0.6.3"
+    promise-retry "^2.0.1"
+    socks-proxy-agent "^7.0.0"
+    ssri "^10.0.0"
+
+matcher@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca"
+  integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==
+  dependencies:
+    escape-string-regexp "^4.0.0"
+
+mime-db@1.52.0:
+  version "1.52.0"
+  resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
+  integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
+
+mime-types@^2.1.12:
+  version "2.1.35"
+  resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
+  integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
+  dependencies:
+    mime-db "1.52.0"
+
+mime@^2.5.2:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367"
+  integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==
+
+mimic-fn@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+
+mimic-response@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
+  integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==
+
+mimic-response@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
+  integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
+
+minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
+  version "3.1.2"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+  integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimatch@^5.0.1, minimatch@^5.1.1:
+  version "5.1.6"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
+  integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimatch@^9.0.1:
+  version "9.0.3"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+  integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+  dependencies:
+    brace-expansion "^2.0.1"
+
+minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+  integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+minipass-collect@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617"
+  integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-fetch@^3.0.0:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.3.tgz#d9df70085609864331b533c960fd4ffaa78d15ce"
+  integrity sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==
+  dependencies:
+    minipass "^5.0.0"
+    minipass-sized "^1.0.3"
+    minizlib "^2.1.2"
+  optionalDependencies:
+    encoding "^0.1.13"
+
+minipass-flush@^1.0.5:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373"
+  integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-pipeline@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c"
+  integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass-sized@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70"
+  integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
+  dependencies:
+    minipass "^3.0.0"
+
+minipass@^3.0.0:
+  version "3.3.6"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a"
+  integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
+  dependencies:
+    yallist "^4.0.0"
+
+minipass@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d"
+  integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
+
+"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
+  version "7.0.2"
+  resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.2.tgz#58a82b7d81c7010da5bd4b2c0c85ac4b4ec5131e"
+  integrity sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==
+
+minizlib@^2.1.1, minizlib@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931"
+  integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
+  dependencies:
+    minipass "^3.0.0"
+    yallist "^4.0.0"
+
+mitt@3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.0.tgz#69ef9bd5c80ff6f57473e8d89326d01c414be0bd"
+  integrity sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==
+
+mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
+  version "0.5.3"
+  resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+  integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
+mkdirp@^1.0.3:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+  integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
+ms@2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@^2.0.0:
+  version "2.1.3"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+napi-build-utils@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
+  integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
+
+negotiator@^0.6.3:
+  version "0.6.3"
+  resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
+  integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
+
+netmask@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7"
+  integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==
+
+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==
+
+node-abi@^3.0.0, node-abi@^3.3.0:
+  version "3.45.0"
+  resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5"
+  integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==
+  dependencies:
+    semver "^7.3.5"
+
+node-addon-api@^1.6.3:
+  version "1.7.2"
+  resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-1.7.2.tgz#3df30b95720b53c24e59948b49532b662444f54d"
+  integrity sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==
+
+node-addon-api@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
+  integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
+
+node-api-version@^0.1.4:
+  version "0.1.4"
+  resolved "https://registry.yarnpkg.com/node-api-version/-/node-api-version-0.1.4.tgz#1ed46a485e462d55d66b5aa1fe2821720dedf080"
+  integrity sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==
+  dependencies:
+    semver "^7.3.5"
+
+node-fetch@^2.6.11:
+  version "2.6.12"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba"
+  integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+node-gyp@^9.0.0:
+  version "9.4.0"
+  resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.0.tgz#2a7a91c7cba4eccfd95e949369f27c9ba704f369"
+  integrity sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==
+  dependencies:
+    env-paths "^2.2.0"
+    exponential-backoff "^3.1.1"
+    glob "^7.1.4"
+    graceful-fs "^4.2.6"
+    make-fetch-happen "^11.0.3"
+    nopt "^6.0.0"
+    npmlog "^6.0.0"
+    rimraf "^3.0.2"
+    semver "^7.3.5"
+    tar "^6.1.2"
+    which "^2.0.2"
+
+nopt@^6.0.0:
+  version "6.0.0"
+  resolved "https://registry.yarnpkg.com/nopt/-/nopt-6.0.0.tgz#245801d8ebf409c6df22ab9d95b65e1309cdb16d"
+  integrity sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==
+  dependencies:
+    abbrev "^1.0.0"
+
+normalize-url@^6.0.1:
+  version "6.1.0"
+  resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a"
+  integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==
+
+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 sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==
+  dependencies:
+    path-key "^2.0.0"
+
+npmlog@^6.0.0:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830"
+  integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
+  dependencies:
+    are-we-there-yet "^3.0.0"
+    console-control-strings "^1.1.0"
+    gauge "^4.0.3"
+    set-blocking "^2.0.0"
+
+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==
+
+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 sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+  dependencies:
+    wrappy "1"
+
+onetime@^5.1.0:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+  integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
+  dependencies:
+    mimic-fn "^2.1.0"
+
+optionator@^0.8.1:
+  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"
+
+ora@^5.1.0:
+  version "5.4.1"
+  resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
+  integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
+  dependencies:
+    bl "^4.1.0"
+    chalk "^4.1.0"
+    cli-cursor "^3.1.0"
+    cli-spinners "^2.5.0"
+    is-interactive "^1.0.0"
+    is-unicode-supported "^0.1.0"
+    log-symbols "^4.1.0"
+    strip-ansi "^6.0.0"
+    wcwidth "^1.0.1"
+
+p-cancelable@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf"
+  integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==
+
+p-finally@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+  integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==
+
+p-map@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+  integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+  dependencies:
+    aggregate-error "^3.0.0"
+
+pac-proxy-agent@^6.0.3:
+  version "6.0.4"
+  resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-6.0.4.tgz#f90d066808974cd6813dfcdac69a2aa483b18ba1"
+  integrity sha512-FbJYeusBOZNe6bmrC2/+r/HljwExryon16lNKEU82gWiwIPMCEktUPSEAcTkO9K3jd/YPGuX/azZel1ltmo6nQ==
+  dependencies:
+    agent-base "^7.0.2"
+    debug "^4.3.4"
+    get-uri "^6.0.1"
+    http-proxy-agent "^7.0.0"
+    https-proxy-agent "^7.0.0"
+    pac-resolver "^6.0.1"
+    socks-proxy-agent "^8.0.1"
+
+pac-resolver@^6.0.1:
+  version "6.0.2"
+  resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-6.0.2.tgz#742ef24d2805b18c0a684ac02bcb0b5ce9644648"
+  integrity sha512-EQpuJ2ifOjpZY5sg1Q1ZeAxvtLwR7Mj3RgY8cysPGbsRu3RBXyJFWxnMus9PScjxya/0LzvVDxNh/gl0eXBU4w==
+  dependencies:
+    degenerator "^4.0.4"
+    ip "^1.1.8"
+    netmask "^2.0.2"
+
+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@^5.0.0:
+  version "5.2.0"
+  resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
+  integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
+  dependencies:
+    "@babel/code-frame" "^7.0.0"
+    error-ex "^1.3.1"
+    json-parse-even-better-errors "^2.3.0"
+    lines-and-columns "^1.1.6"
+
+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 sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+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 sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==
+
+path-key@^3.1.0:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+  integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
+path-scurry@^1.10.1:
+  version "1.10.1"
+  resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
+  integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
+  dependencies:
+    lru-cache "^9.1.1 || ^10.0.0"
+    minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
+
+path-type@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+  integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
+pend@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
+
+plist@^3.0.4, plist@^3.0.5:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/plist/-/plist-3.1.0.tgz#797a516a93e62f5bde55e0b9cc9c967f860893c9"
+  integrity sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==
+  dependencies:
+    "@xmldom/xmldom" "^0.8.8"
+    base64-js "^1.5.1"
+    xmlbuilder "^15.1.1"
+
+prebuild-install@^7.0.1:
+  version "7.1.1"
+  resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45"
+  integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==
+  dependencies:
+    detect-libc "^2.0.0"
+    expand-template "^2.0.3"
+    github-from-package "0.0.0"
+    minimist "^1.2.3"
+    mkdirp-classic "^0.5.3"
+    napi-build-utils "^1.0.1"
+    node-abi "^3.3.0"
+    pump "^3.0.0"
+    rc "^1.2.7"
+    simple-get "^4.0.0"
+    tar-fs "^2.0.0"
+    tunnel-agent "^0.6.0"
+
+prelude-ls@~1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+  integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==
+
+progress@2.0.3, progress@^2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+promise-retry@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22"
+  integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
+  dependencies:
+    err-code "^2.0.2"
+    retry "^0.12.0"
+
+proxy-agent@6.2.1:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.2.1.tgz#062df6609a4012fd1c108974865599b61e77abde"
+  integrity sha512-OIbBKlRAT+ycCm6wAYIzMwPejzRtjy8F3QiDX0eKOA3e4pe3U9F/IvzcHP42bmgQxVv97juG+J8/gx+JIeCX/Q==
+  dependencies:
+    agent-base "^7.0.2"
+    debug "^4.3.4"
+    http-proxy-agent "^7.0.0"
+    https-proxy-agent "^7.0.0"
+    lru-cache "^7.14.1"
+    pac-proxy-agent "^6.0.3"
+    proxy-from-env "^1.1.0"
+    socks-proxy-agent "^8.0.1"
+
+proxy-from-env@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
+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.3.0"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
+  integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
+
+puppeteer-core@20.5.0:
+  version "20.5.0"
+  resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-20.5.0.tgz#4b9ccd6c4ca35fe02373bf2147dc75b42ebd22c4"
+  integrity sha512-9ddHXUQ7jpliGei87zYTuEZYQvFj6Lzk5R8w4vT4gMmNArkEqC5CX72TnVIJiTUbiTpOXJkvMQaXIHYopjdUtQ==
+  dependencies:
+    "@puppeteer/browsers" "1.4.1"
+    chromium-bidi "0.4.11"
+    cross-fetch "3.1.6"
+    debug "4.3.4"
+    devtools-protocol "0.0.1120988"
+    ws "8.13.0"
+
+puppeteer@20.5.0:
+  version "20.5.0"
+  resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-20.5.0.tgz#453f42edb2cb085bb237914c2bcda7938b7ab1c2"
+  integrity sha512-3j0JShJGDT5z8rfDKf+wZQq3IHxw7JaDAdP7py5H5zOIgmqNG0e8R19y4tFzJ8i2WC4H/0bC51rIrTXyDop1FA==
+  dependencies:
+    "@puppeteer/browsers" "1.4.1"
+    cosmiconfig "8.1.3"
+    puppeteer-core "20.5.0"
+
+quick-lru@^5.1.1:
+  version "5.1.1"
+  resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932"
+  integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==
+
+rc@^1.2.7:
+  version "1.2.8"
+  resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+  integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+  dependencies:
+    deep-extend "^0.6.0"
+    ini "~1.3.0"
+    minimist "^1.2.0"
+    strip-json-comments "~2.0.1"
+
+read-config-file@6.3.2:
+  version "6.3.2"
+  resolved "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.3.2.tgz#556891aa6ffabced916ed57457cb192e61880411"
+  integrity sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==
+  dependencies:
+    config-file-ts "^0.2.4"
+    dotenv "^9.0.2"
+    dotenv-expand "^5.1.0"
+    js-yaml "^4.1.0"
+    json5 "^2.2.0"
+    lazy-val "^1.0.4"
+
+readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+  integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+  dependencies:
+    inherits "^2.0.3"
+    string_decoder "^1.1.1"
+    util-deprecate "^1.0.1"
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+resolve-alpn@^1.0.0:
+  version "1.2.1"
+  resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9"
+  integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==
+
+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==
+
+responselike@^2.0.0:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc"
+  integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==
+  dependencies:
+    lowercase-keys "^2.0.0"
+
+restore-cursor@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
+  integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
+  dependencies:
+    onetime "^5.1.0"
+    signal-exit "^3.0.2"
+
+retry@^0.12.0:
+  version "0.12.0"
+  resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
+  integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
+rimraf@^3.0.0, rimraf@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
+  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
+  dependencies:
+    glob "^7.1.3"
+
+roarr@^2.15.3:
+  version "2.15.4"
+  resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd"
+  integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==
+  dependencies:
+    boolean "^3.0.1"
+    detect-node "^2.0.4"
+    globalthis "^1.0.1"
+    json-stringify-safe "^5.0.1"
+    semver-compare "^1.0.0"
+    sprintf-js "^1.1.2"
+
+safe-buffer@^5.0.1, safe-buffer@~5.2.0:
+  version "5.2.1"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+"safer-buffer@>= 2.1.2 < 3.0.0":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+  integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+sanitize-filename@^1.6.3:
+  version "1.6.3"
+  resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378"
+  integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==
+  dependencies:
+    truncate-utf8-bytes "^1.0.0"
+
+sax@^1.2.4:
+  version "1.2.4"
+  resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+  integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+semver-compare@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc"
+  integrity sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==
+
+semver@^5.5.0:
+  version "5.7.2"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+  integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
+
+semver@^6.2.0:
+  version "6.3.1"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+  integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^7.3.2, semver@^7.3.5, semver@^7.3.8:
+  version "7.5.4"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
+  integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
+  dependencies:
+    lru-cache "^6.0.0"
+
+semver@~7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
+  integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
+
+serialize-error@^7.0.1:
+  version "7.0.1"
+  resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18"
+  integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==
+  dependencies:
+    type-fest "^0.13.1"
+
+set-blocking@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+  integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
+
+shebang-command@^1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+  integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
+  dependencies:
+    shebang-regex "^1.0.0"
+
+shebang-command@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+  integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+  dependencies:
+    shebang-regex "^3.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 sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
+
+shebang-regex@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.7:
+  version "3.0.7"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+  integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+
+signal-exit@^4.0.1:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.0.2.tgz#ff55bb1d9ff2114c13b400688fa544ac63c36967"
+  integrity sha512-MY2/qGx4enyjprQnFaZsHib3Yadh3IXyV2C321GY0pjGfVBu4un0uDJkwgdxqO+Rdx8JMT8IfJIRwbYVz3Ob3Q==
+
+simple-concat@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
+  integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
+
+simple-get@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
+  integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
+  dependencies:
+    decompress-response "^6.0.0"
+    once "^1.3.1"
+    simple-concat "^1.0.0"
+
+simple-update-notifier@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82"
+  integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==
+  dependencies:
+    semver "~7.0.0"
+
+slice-ansi@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787"
+  integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==
+  dependencies:
+    ansi-styles "^4.0.0"
+    astral-regex "^2.0.0"
+    is-fullwidth-code-point "^3.0.0"
+
+smart-buffer@^4.0.2, smart-buffer@^4.2.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+  integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
+socks-proxy-agent@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz#dc069ecf34436621acb41e3efa66ca1b5fed15b6"
+  integrity sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==
+  dependencies:
+    agent-base "^6.0.2"
+    debug "^4.3.3"
+    socks "^2.6.2"
+
+socks-proxy-agent@^8.0.1:
+  version "8.0.1"
+  resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz#ffc5859a66dac89b0c4dab90253b96705f3e7120"
+  integrity sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==
+  dependencies:
+    agent-base "^7.0.1"
+    debug "^4.3.4"
+    socks "^2.7.1"
+
+socks@^2.6.2, socks@^2.7.1:
+  version "2.7.1"
+  resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55"
+  integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==
+  dependencies:
+    ip "^2.0.0"
+    smart-buffer "^4.2.0"
+
+source-map-support@^0.5.19:
+  version "0.5.21"
+  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+  integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+  dependencies:
+    buffer-from "^1.0.0"
+    source-map "^0.6.0"
+
+source-map@^0.6.0, source-map@~0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sprintf-js@^1.1.2:
+  version "1.1.2"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
+  integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
+
+ssri@^10.0.0:
+  version "10.0.4"
+  resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.4.tgz#5a20af378be586df139ddb2dfb3bf992cf0daba6"
+  integrity sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==
+  dependencies:
+    minipass "^5.0.0"
+
+stat-mode@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465"
+  integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==
+
+"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+string-width@^5.0.1, string-width@^5.1.2:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
+  integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+  dependencies:
+    eastasianwidth "^0.2.0"
+    emoji-regex "^9.2.2"
+    strip-ansi "^7.0.1"
+
+string_decoder@^1.1.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+  integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+  dependencies:
+    safe-buffer "~5.2.0"
+
+"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+strip-ansi@^7.0.1:
+  version "7.1.0"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
+  integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
+  dependencies:
+    ansi-regex "^6.0.1"
+
+strip-eof@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+  integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==
+
+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 sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
+
+sumchecker@^3.0.1:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42"
+  integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==
+  dependencies:
+    debug "^4.1.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"
+
+supports-color@^7.1.0:
+  version "7.2.0"
+  resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+  integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+  dependencies:
+    has-flag "^4.0.0"
+
+tar-fs@2.1.1, tar-fs@^2.0.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
+  integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
+  dependencies:
+    chownr "^1.1.1"
+    mkdirp-classic "^0.5.2"
+    pump "^3.0.0"
+    tar-stream "^2.1.4"
+
+tar-stream@^2.1.4:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
+  integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
+  dependencies:
+    bl "^4.0.3"
+    end-of-stream "^1.4.1"
+    fs-constants "^1.0.0"
+    inherits "^2.0.3"
+    readable-stream "^3.1.1"
+
+tar@^6.0.5, tar@^6.1.11, tar@^6.1.12, tar@^6.1.2:
+  version "6.1.15"
+  resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.15.tgz#c9738b0b98845a3b344d334b8fa3041aaba53a69"
+  integrity sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==
+  dependencies:
+    chownr "^2.0.0"
+    fs-minipass "^2.0.0"
+    minipass "^5.0.0"
+    minizlib "^2.1.1"
+    mkdirp "^1.0.3"
+    yallist "^4.0.0"
+
+temp-file@^3.4.0:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/temp-file/-/temp-file-3.4.0.tgz#766ea28911c683996c248ef1a20eea04d51652c7"
+  integrity sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==
+  dependencies:
+    async-exit-hook "^2.0.1"
+    fs-extra "^10.0.0"
+
+through@^2.3.8:
+  version "2.3.8"
+  resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+  integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
+tmp-promise@^3.0.2:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7"
+  integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==
+  dependencies:
+    tmp "^0.2.0"
+
+tmp@^0.2.0:
+  version "0.2.1"
+  resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
+  integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==
+  dependencies:
+    rimraf "^3.0.0"
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+truncate-utf8-bytes@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
+  integrity sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==
+  dependencies:
+    utf8-byte-length "^1.0.1"
+
+tslib@^2.0.1:
+  version "2.6.0"
+  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3"
+  integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
+
+tunnel-agent@^0.6.0:
+  version "0.6.0"
+  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+  integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
+  dependencies:
+    safe-buffer "^5.0.1"
+
+type-check@~0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+  integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==
+  dependencies:
+    prelude-ls "~1.1.2"
+
+type-fest@^0.13.1:
+  version "0.13.1"
+  resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
+  integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
+
+typescript@^4.0.2:
+  version "4.9.5"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
+  integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
+
+unbzip2-stream@1.4.3:
+  version "1.4.3"
+  resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
+  integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
+  dependencies:
+    buffer "^5.2.1"
+    through "^2.3.8"
+
+unique-filename@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea"
+  integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==
+  dependencies:
+    unique-slug "^4.0.0"
+
+unique-slug@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3"
+  integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==
+  dependencies:
+    imurmurhash "^0.1.4"
+
+universalify@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+universalify@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
+  integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+utf8-byte-length@^1.0.1:
+  version "1.0.4"
+  resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
+  integrity sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==
+
+util-deprecate@^1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+verror@^1.10.0:
+  version "1.10.1"
+  resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb"
+  integrity sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==
+  dependencies:
+    assert-plus "^1.0.0"
+    core-util-is "1.0.2"
+    extsprintf "^1.2.0"
+
+vm2@^3.9.19:
+  version "3.9.19"
+  resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.19.tgz#be1e1d7a106122c6c492b4d51c2e8b93d3ed6a4a"
+  integrity sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==
+  dependencies:
+    acorn "^8.7.0"
+    acorn-walk "^8.2.0"
+
+wcwidth@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+  integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
+  dependencies:
+    defaults "^1.0.3"
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+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"
+
+which@^2.0.1, which@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+  integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+  dependencies:
+    isexe "^2.0.0"
+
+wide-align@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3"
+  integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
+  dependencies:
+    string-width "^1.0.2 || 2 || 3 || 4"
+
+word-wrap@~1.2.3:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
+  integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==
+
+"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+wrap-ansi@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
+  integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+  dependencies:
+    ansi-styles "^6.1.0"
+    string-width "^5.0.1"
+    strip-ansi "^7.0.1"
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+ws@8.13.0:
+  version "8.13.0"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
+  integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
+
+xmlbuilder@>=11.0.1, xmlbuilder@^15.1.1:
+  version "15.1.1"
+  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5"
+  integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==
+
+y18n@^5.0.5:
+  version "5.0.8"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+  integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
+  integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+
+yargs-parser@^21.1.1:
+  version "21.1.1"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
+  integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs@17.7.1:
+  version "17.7.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.1.tgz#34a77645201d1a8fc5213ace787c220eabbd0967"
+  integrity sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==
+  dependencies:
+    cliui "^8.0.1"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
+    require-directory "^2.1.1"
+    string-width "^4.2.3"
+    y18n "^5.0.5"
+    yargs-parser "^21.1.1"
+
+yargs@^17.0.1, yargs@^17.6.2:
+  version "17.7.2"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
+  integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
+  dependencies:
+    cliui "^8.0.1"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
+    require-directory "^2.1.1"
+    string-width "^4.2.3"
+    y18n "^5.0.5"
+    yargs-parser "^21.1.1"
+
+yauzl@^2.10.0:
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
+  integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
+  dependencies:
+    buffer-crc32 "~0.2.3"
+    fd-slicer "~1.1.0"
diff --git a/nixpkgs/pkgs/tools/misc/sheldon/default.nix b/nixpkgs/pkgs/tools/misc/sheldon/default.nix
new file mode 100644
index 000000000000..ddff13c9bcfd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sheldon/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, installShellFiles
+, Security
+, curl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sheldon";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "rossmacarthur";
+    repo = pname;
+    rev = version;
+    hash = "sha256-vGFR8NL3bOCUuNr0KQuAbjQMxvFbN/T9aVmf7Wxt9JU=";
+  };
+
+  cargoSha256 = "sha256-wVB+yL+h90f7NnASDaX5gxT5z45M8I1rxIJwY8uyB4k=";
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security curl ];
+  nativeBuildInputs = [ installShellFiles pkg-config ];
+
+  # Needs network connection
+  checkFlags = [
+    "--skip lock::plugin::tests::external_plugin_lock_git_with_matches"
+    "--skip lock::plugin::tests::external_plugin_lock_git_with_matches_not_each"
+    "--skip lock::plugin::tests::external_plugin_lock_git_with_uses"
+    "--skip lock::plugin::tests::external_plugin_lock_remote"
+    "--skip lock::source::git::tests::git_checkout_resolve_branch"
+    "--skip lock::source::git::tests::git_checkout_resolve_rev"
+    "--skip lock::source::git::tests::git_checkout_resolve_tag"
+    "--skip lock::source::git::tests::lock_git_and_reinstall"
+    "--skip lock::source::git::tests::lock_git_https_with_checkout"
+    "--skip lock::source::local::tests::lock_local"
+    "--skip lock::source::remote::tests::lock_remote_and_reinstall"
+    "--skip lock::source::tests::lock_with_git"
+    "--skip lock::source::tests::lock_with_remote"
+    "--skip lock::tests::locked_config_clean"
+    "--skip directories_default"
+    "--skip directories_old"
+    "--skip directories_xdg_from_env"
+    "--skip lock_and_source_github"
+    "--skip lock_and_source_hooks"
+    "--skip lock_and_source_inline"
+    "--skip lock_and_source_profiles"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd sheldon \
+      --bash <($out/bin/sheldon completions --shell bash) \
+      --zsh <($out/bin/sheldon completions --shell zsh)
+  '';
+
+  meta = with lib; {
+    description = "A fast and configurable shell plugin manager";
+    homepage = "https://github.com/rossmacarthur/sheldon";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ seqizz ];
+    platforms = platforms.linux;
+    mainProgram = "sheldon";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shell-hist/default.nix b/nixpkgs/pkgs/tools/misc/shell-hist/default.nix
new file mode 100644
index 000000000000..438b687c73f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shell-hist/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage {
+  pname = "shell-hist";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "jamesmunns";
+    repo = "shell-hist";
+    rev = "158de8c3908b49530ecd76bf6e65c210f351ef82";
+    sha256 = "0kc128xnnp1d56if70vfv0w3qnwhljhbnvzwwb7hfm3x2m0vqrqf";
+  };
+
+  cargoSha256 = "1b2cfs03vlaz7jnr67ilgjfi7cm59izpcdi6pyvbzv8s46z2dysp";
+
+  meta = with lib; {
+    description = "Inspect your shell history";
+    homepage = "https://github.com/jamesmunns/shell-hist";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = [ maintainers.spacekookie ];
+    mainProgram = "shell-hist";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shelldap/default.nix b/nixpkgs/pkgs/tools/misc/shelldap/default.nix
new file mode 100644
index 000000000000..09901368c870
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shelldap/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, perlPackages
+, shortenPerlShebang
+}:
+
+perlPackages.buildPerlPackage rec {
+  pname = "shelldap";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "mahlonsmith";
+    repo = "shelldap";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-67ttAXzu9pfeqjfhMfLMb9vWCXTrE+iUDCbamqswaLg=";
+  };
+
+  buildInputs = with perlPackages; [
+    AlgorithmDiff
+    AuthenSASL
+    IOSocketSSL
+    perl
+    perlldap
+    TermReadLineGnu
+    TermShell
+    TieIxHash
+    YAMLSyck
+  ];
+
+  nativeBuildInputs = lib.optional stdenv.isDarwin shortenPerlShebang;
+
+  prePatch = ''
+    touch Makefile.PL
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 -t $out/bin shelldap
+    runHook postInstall
+  '';
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/shelldap
+  '';
+
+  # no make target 'test', not tests provided by source
+  doCheck = false;
+
+  outputs = [ "out" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mahlonsmith/shelldap/";
+    description = "A handy shell-like interface for browsing LDAP servers and editing their content";
+    changelog = "https://github.com/mahlonsmith/shelldap/blob/v${version}/CHANGELOG";
+    license = with licenses; [ bsd3 ];
+    maintainers = with maintainers; [ clerie tobiasBora ];
+    platforms = platforms.unix;
+    mainProgram = "shelldap";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shellspec/default.nix b/nixpkgs/pkgs/tools/misc/shellspec/default.nix
new file mode 100644
index 000000000000..b355f0fc0232
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shellspec/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, bash }:
+
+stdenv.mkDerivation rec {
+  pname = "shellspec";
+  version = "0.28.1";
+
+  src = fetchFromGitHub {
+    owner = "shellspec";
+    repo = pname;
+    rev = version;
+    sha256 = "1ib5qp29f2fmivwnv6hq35qhvdxz42xgjlkvy0i3qn758riyqf46";
+  };
+
+  strictDeps = true;
+  buildInputs = [ bash ];
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  checkPhase = ''
+    ./shellspec --no-banner --task fixture:stat:prepare
+    ./shellspec --no-banner spec --jobs "$(nproc)"
+  '';
+
+  # "Building" the script happens in Docker
+  dontBuild = true;
+
+  meta = with lib; {
+    description =
+      "A full-featured BDD unit testing framework for bash, ksh, zsh, dash and all POSIX shells";
+    homepage = "https://shellspec.info/";
+    changelog =
+      "https://github.com/shellspec/shellspec/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ j0hax ];
+    platforms = platforms.unix;
+    mainProgram = "shellspec";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shim/default.nix b/nixpkgs/pkgs/tools/misc/shim/default.nix
new file mode 100644
index 000000000000..e4220cf5cc8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shim/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, fetchFromGitHub, lib, elfutils, vendorCertFile ? null
+, defaultLoader ? null }:
+
+let
+
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "Unsupported system: ${system}";
+
+  archSuffix = {
+    x86_64-linux = "x64";
+    aarch64-linux = "aa64";
+  }.${system} or throwSystem;
+in stdenv.mkDerivation rec {
+  pname = "shim";
+  version = "15.8";
+
+  src = fetchFromGitHub {
+    owner = "rhboot";
+    repo = pname;
+    rev = version;
+    hash = "sha256-xnr9HBfYP035C7p2YTRZasx5SF4a2ZkOl9IpsVduNm4=";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ elfutils ];
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-I${toString elfutils.dev}/include" ];
+
+  makeFlags =
+    lib.optional (vendorCertFile != null) "VENDOR_CERT_FILE=${vendorCertFile}"
+    ++ lib.optional (defaultLoader != null) "DEFAULT_LOADER=${defaultLoader}";
+
+  installTargets = ["install-as-data"];
+  installFlags = [
+    "DATATARGETDIR=$(out)/share/shim"
+  ];
+
+  passthru = {
+    # Expose the arch suffix and target file names so that consumers
+    # (e.g. infrastructure for signing this shim) don't need to
+    # duplicate the logic from here
+    inherit archSuffix;
+    target = "shim${archSuffix}.efi";
+    mokManagerTarget = "mm${archSuffix}.efi";
+    fallbackTarget = "fb${archSuffix}.efi";
+  };
+
+  meta = with lib; {
+    description = "UEFI shim loader";
+    homepage = "https://github.com/rhboot/shim";
+    license = licenses.bsd1;
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ baloo raitobezarius ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/shunit2/default.nix b/nixpkgs/pkgs/tools/misc/shunit2/default.nix
new file mode 100644
index 000000000000..017d19264798
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/shunit2/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, resholve
+, fetchFromGitHub
+, bash
+, coreutils
+, gnused
+, gnugrep
+, findutils
+, ncurses
+}:
+
+resholve.mkDerivation rec {
+  pname = "shunit2";
+  version = "2.1.8";
+
+  src = fetchFromGitHub {
+    owner = "kward";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-IZHkgkVqzeh+eEKCDJ87sqNhSA+DU6kBCNDdQaUEeiM=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    cp ./shunit2 $out/bin/shunit2
+    chmod +x $out/bin/shunit2
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/shunit2
+  '';
+
+  solutions = {
+    shunit = {
+      # Caution: see __SHUNIT_CMD_ECHO_ESC before changing
+      interpreter = "${bash}/bin/sh";
+      scripts = [ "bin/shunit2" ];
+      inputs = [ coreutils gnused gnugrep findutils ncurses ];
+      # resholve's Nix API is analogous to the CLI flags
+      # documented in 'man resholve'
+      fake = {
+        # "missing" functions shunit2 expects the user to declare
+        function = [
+          "oneTimeSetUp"
+          "oneTimeTearDown"
+          "setUp"
+          "tearDown"
+          "suite"
+          "noexec"
+        ];
+        # shunit2 is both bash and zsh compatible, and in
+        # some zsh-specific code it uses this non-bash builtin
+        builtin = [ "setopt" ];
+      };
+      fix = {
+        # stray absolute path; make it resolve from coreutils
+        "/usr/bin/od" = true;
+        /*
+        Caution: this one is contextually debatable. shunit2
+        sets this variable after testing whether `echo -e test`
+        yields `test` or `-e test`. Since we're setting the
+        interpreter, we can pre-test this. But if we go fiddle
+        the interpreter later, I guess we _could_ break it.
+        */
+        "$__SHUNIT_CMD_ECHO_ESC" = [ "echo -e" ];
+        "$SHUNIT_CMD_TPUT" = [ "tput" ]; # from ncurses
+      };
+      keep = {
+        # dynamically defined in shunit2:_shunit_mktempFunc
+        eval = [ "shunit_condition_" "_shunit_test_" "_shunit_prepForSourcing" ];
+
+        # dynamic based on CLI flag
+        "$_SHUNIT_LINENO_" = true;
+      };
+      execer = [
+        # drop after https://github.com/abathur/binlore/issues/2
+        "cannot:${ncurses}/bin/tput"
+      ];
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/kward/shunit2";
+    description = "An xUnit based unit test framework for Bourne based shell scripts";
+    maintainers = with maintainers; [ abathur utdemir ];
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    mainProgram = "shunit2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sixpair/default.nix b/nixpkgs/pkgs/tools/misc/sixpair/default.nix
new file mode 100644
index 000000000000..fa444a86a0ac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sixpair/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, libusb-compat-0_1 }:
+stdenv.mkDerivation {
+  pname = "sixpair";
+  version = "unstable-2007-04-18";
+
+  src = fetchurl {
+    url = "http://www.pabr.org/sixlinux/sixpair.c";
+    sha256 = "1b0a3k7gs544cbji7n29jxlrsscwfx6s1r2sgwdl6hmkc1l9gagr";
+  };
+
+  # hcitool is depricated
+  patches = [ ./hcitool.patch ];
+
+  buildInputs = [ libusb-compat-0_1 ];
+
+  unpackPhase = ''
+    cp $src sixpair.c
+  '';
+
+  buildPhase = ''
+    cc -o sixpair sixpair.c -lusb
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp sixpair $out/bin/sixpair
+  '';
+
+  meta = {
+    description = "Pair with SIXAXIS controllers over USB";
+    longDescription = ''
+      This command-line utility searches USB buses for SIXAXIS controllers and tells them to connect to a new Bluetooth master.
+    '';
+    homepage = "http://www.pabr.org/sixlinux/";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.tomsmeets ];
+    platforms = lib.platforms.linux;
+    mainProgram = "sixpair";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch b/nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch
new file mode 100644
index 000000000000..b66e791dd0e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sixpair/hcitool.patch
@@ -0,0 +1,19 @@
+diff --git a/sixpair.c b/sixpair.c
+index b009a6f..78b7ef0 100644
+--- a/sixpair.c
++++ b/sixpair.c
+@@ -76,11 +76,11 @@ void process_device(int argc, char **argv, struct usb_device *dev,
+       exit(1);
+     }
+   } else {
+-    FILE *f = popen("hcitool dev", "r");
++    FILE *f = popen("bluetoothctl list", "r");
+     if ( !f ||
+-	 fscanf(f, "%*s\n%*s %x:%x:%x:%x:%x:%x",
++	 fscanf(f, "%*s %x:%x:%x:%x:%x:%x",
+ 		&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]) != 6 ) {
+-      printf("Unable to retrieve local bd_addr from `hcitool dev`.\n");
++      printf("Unable to retrieve local bd_addr from `bluetoothctl list`.\n");
+       printf("Please enable Bluetooth or specify an address manually.\n");
+       exit(1);
+     }
diff --git a/nixpkgs/pkgs/tools/misc/skim/default.nix b/nixpkgs/pkgs/tools/misc/skim/default.nix
new file mode 100644
index 000000000000..b6a77485d1ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/skim/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, stdenv
+, fetchCrate
+, rustPlatform
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "skim";
+  version = "0.10.4";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-C2yK+SO8Tpw3BxXXu1jeDzYJ2548RZa7NFWaE0SdNJ0=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  outputs = [ "out" "vim" ];
+
+  cargoHash = "sha256-jBcgoWbmBOgU7M71lr4OXOe2S6NAXl+I8D+ZtT45Vos=";
+
+  postPatch = ''
+    sed -i -e "s|expand('<sfile>:h:h')|'$out'|" plugin/skim.vim
+  '';
+
+  postInstall = ''
+    install -D -m 555 bin/sk-tmux -t $out/bin
+
+    install -D -m 444 plugin/skim.vim -t $vim/plugin
+
+    install -D -m 444 shell/* -t $out/share/skim
+
+    installManPage man/man1/*
+
+    cat <<SCRIPT > $out/bin/sk-share
+    #! ${stdenv.shell}
+    # Run this script to find the skim shared folder where all the shell
+    # integration scripts are living.
+    echo $out/share/skim
+    SCRIPT
+    chmod +x $out/bin/sk-share
+  '';
+
+  # https://github.com/lotabout/skim/issues/440
+  doCheck = !stdenv.isAarch64;
+
+  meta = with lib; {
+    description = "Command-line fuzzy finder written in Rust";
+    homepage = "https://github.com/lotabout/skim";
+    license = licenses.mit;
+    mainProgram = "sk";
+    maintainers = with maintainers; [ dywedir ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sl/default.nix b/nixpkgs/pkgs/tools/misc/sl/default.nix
new file mode 100644
index 000000000000..bcb8de78c613
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sl/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "sl";
+  version = "5.05";
+
+  src = fetchFromGitHub {
+    owner = "eyJhb";
+    repo = "sl";
+    rev = version;
+    sha256 = "11a1rdgb8wagikhxgm81g80g5qsl59mv4qgsval3isykqh8729bj";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "CC:=$(CC)" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 -t $out/bin sl
+    install -Dm644 -t $out/share/man/man1 sl.1{,.ja}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Steam Locomotive runs across your terminal when you type 'sl'";
+    homepage = "http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html";
+    license = rec {
+      shortName = "Toyoda Masashi's free software license";
+      fullName = shortName;
+      url = "https://github.com/eyJhb/sl/blob/master/LICENSE";
+    };
+    maintainers = with maintainers; [ eyjhb ];
+    platforms = platforms.unix;
+    mainProgram = "sl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/slingshot/default.nix b/nixpkgs/pkgs/tools/misc/slingshot/default.nix
new file mode 100644
index 000000000000..1cf9fe854c3d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/slingshot/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "slingshot";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "caio-ishikawa";
+    repo = "slingshot";
+    rev = "v${version}";
+    hash = "sha256-XI6uf54sEJ0htfY43aF8/X1/OF9m6peHUGDS+2nK3xA=";
+  };
+
+  cargoHash = "sha256-NZyO6oXmgTUszp2Vc9iVAnCvM78/BJ8IfpeTrsOMvlo=";
+
+  meta = with lib; {
+    description = "Lightweight command line tool to quickly navigate across folders";
+    homepage = "https://github.com/caio-ishikawa/slingshot";
+    changelog = "https://github.com/caio-ishikawa/slingshot/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "slingshot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/slop/default.nix b/nixpkgs/pkgs/tools/misc/slop/default.nix
new file mode 100644
index 000000000000..b3903bd95153
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/slop/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, pkg-config
+, glew
+, glm
+, libGLU
+, libGL
+, libX11
+, libXext
+, libXrender
+, icu
+, libSM
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slop";
+  version = "7.6";
+
+  src = fetchFromGitHub {
+    owner = "naelstrof";
+    repo = "slop";
+    rev = "v${version}";
+    sha256 = "sha256-LdBQxw8K8WWSfm4E2QpK4GYTuYvI+FX5gLOouVFSU/U=";
+  };
+
+  patches = [
+    (fetchpatch {
+      # From Upstream PR#135: https://github.com/naelstrof/slop/pull/135
+      name = "Fix-linking-of-GLEW-library.patch";
+      url = "https://github.com/naelstrof/slop/commit/811b7e44648b9dd6c1da1554e70298cf4157e5fe.patch";
+      sha256 = "sha256-LNUrAeVZUJFNOt1csOaIid7gLBdtqRxp8AcC7f3cnIQ=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    glew
+    glm
+    libGLU
+    libGL
+    libX11
+    libXext
+    libXrender
+    icu
+    libSM
+  ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Queries a selection from the user and prints to stdout";
+    platforms = lib.platforms.linux;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+    mainProgram = "slop";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sloth/default.nix b/nixpkgs/pkgs/tools/misc/sloth/default.nix
new file mode 100644
index 000000000000..2386b5a54a86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sloth/default.nix
@@ -0,0 +1,29 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "sloth";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "slok";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-KMVD7uH3Yg9ThnwKKzo6jom0ctFywt2vu7kNdfjiMCs=";
+  };
+
+  vendorHash = "sha256-j6qXUQ/Tu3VNQL5xBOHloRn5DH3KG/znCLi1s8RIoL8=";
+
+  subPackages = [ "cmd/sloth" ];
+
+  meta = {
+    description = "Easy and simple Prometheus SLO (service level objectives) generator";
+    homepage = "https://sloth.dev/";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ nrhtr ];
+    platforms = lib.platforms.unix;
+    mainProgram = "sloth";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/slsnif/default.nix b/nixpkgs/pkgs/tools/misc/slsnif/default.nix
new file mode 100644
index 000000000000..04bc462350f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/slsnif/default.nix
@@ -0,0 +1,19 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "slsnif";
+  version = "0.4.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/slsnif/slsnif-${version}.tar.gz";
+    sha256 = "0gn8c5hj8m3sywpwdgn6w5xl4rzsvg0z7d2w8dxi6p152j5b0pii";
+  };
+
+  meta = {
+    description = "Serial line sniffer";
+    homepage = "http://slsnif.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+    mainProgram = "slsnif";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/smc/default.nix b/nixpkgs/pkgs/tools/misc/smc/default.nix
new file mode 100644
index 000000000000..99ed8de45e45
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/smc/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, jre, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "smc";
+  version = "6.6.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/smc/smc/${lib.replaceStrings ["."] ["_"] version}/smc_${lib.replaceStrings ["."] ["_"] version}.tgz";
+    sha256 = "1gv0hrgdl4wp562virpf9sib6pdhapwv4zvwbl0d5f5xyx04il11";
+  };
+
+  # Prebuilt Java package.
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/share/smc"
+    mkdir -p "$out/share/smc/lib"
+    mkdir -p "$out/share/icons"
+    mkdir -p "$out/share/java"
+
+    cp bin/Smc.jar "$out/share/java/"
+    cp -r examples/ docs/ tools/ README.txt LICENSE.txt "$out/share/smc/"
+    cp -r lib/* "$out/share/smc/lib/"
+    cp misc/smc.ico "$out/share/icons/"
+
+    cat > "$out/bin/smc" << EOF
+    #!${runtimeShell}
+    ${jre}/bin/java -jar "$out/share/java/Smc.jar" "\$@"
+    EOF
+    chmod a+x "$out/bin/smc"
+  '';
+
+  meta = with lib; {
+    description = "Generate state machine code from text input (state diagram)";
+    longDescription = ''
+      SMC (State Machine Compiler) takes a text input file describing states,
+      events and actions of a state machine and generates source code that
+      implements the state machine.
+
+      SMC supports many target languages:
+      C, C++, DotNet, Groovy, java, Java, JavaScript, Lua, ObjC, Perl, Php,
+      Python, Ruby, Scala, Tcl.
+
+      SMC can also generate GraphViz state diagrams from the input file.
+    '';
+    homepage = "https://smc.sourceforge.net/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mpl11;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "smc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/smenu/default.nix b/nixpkgs/pkgs/tools/misc/smenu/default.nix
new file mode 100644
index 000000000000..8521e549ecc6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/smenu/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  version = "1.4.0";
+  pname = "smenu";
+
+  src = fetchFromGitHub {
+    owner = "p-gen";
+    repo = "smenu";
+    rev = "v${version}";
+    sha256 = "sha256-pAbtTqDIdDWReeaRK7UHXh/PS5f44/PRWaICluH02ec=";
+  };
+
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    homepage = "https://github.com/p-gen/smenu";
+    description = "Terminal selection utility";
+    longDescription = ''
+      Terminal utility that allows you to use words coming from the standard
+      input to create a nice selection window just below the cursor. Once done,
+      your selection will be sent to standard output.
+    '';
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    platforms = platforms.unix;
+    mainProgram = "smenu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/smug/default.nix b/nixpkgs/pkgs/tools/misc/smug/default.nix
new file mode 100644
index 000000000000..e528b2128759
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/smug/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "smug";
+  version = "0.3.3";
+
+  subPackages = [ "." ];
+
+  src = fetchFromGitHub {
+    owner = "ivaaaan";
+    repo = "smug";
+    rev = "v${version}";
+    sha256 = "sha256-dQp9Ov8Si9DfziVtX3dXsJg+BNKYOoL9/WwdalQ5TVw=";
+  };
+
+  vendorHash = "sha256-vaDUzVRmpmNn8/vUPeR1U5N6T4llFRIk9A1lum8uauU=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" "-X=main.version=${version}" ];
+
+  postInstall = ''
+    installManPage ./man/man1/smug.1
+    installShellCompletion completion/smug.{bash,fish}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ivaaaan/smug";
+    description = "Smug - tmux session manager";
+    license = licenses.mit;
+    maintainers = with maintainers; [ juboba ];
+    mainProgram = "smug";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/snapper/default.nix b/nixpkgs/pkgs/tools/misc/snapper/default.nix
new file mode 100644
index 000000000000..0ad98046cf71
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/snapper/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchFromGitHub
+, autoreconfHook, pkg-config, docbook_xsl, libxslt, docbook_xml_dtd_45
+, acl, attr, boost, btrfs-progs, coreutils, dbus, diffutils, e2fsprogs, libxml2
+, lvm2, pam, util-linux, json_c, nixosTests
+, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "snapper";
+  version = "0.11.0";
+
+  src = fetchFromGitHub {
+    owner = "openSUSE";
+    repo = "snapper";
+    rev = "v${version}";
+    sha256 = "sha256-7FwjVk3kkC/suJ13BIEEfIswsPBYhdQI1IuPvNcXi4A=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    autoreconfHook pkg-config
+    docbook_xsl libxslt docbook_xml_dtd_45
+  ];
+  buildInputs = [
+    acl attr boost btrfs-progs dbus diffutils e2fsprogs libxml2
+    lvm2 pam util-linux json_c ncurses
+  ];
+
+  passthru.tests.snapper = nixosTests.snapper;
+
+  postPatch = ''
+    # Hard-coded root paths, hard-coded root paths everywhere...
+    for file in {client,data,pam,scripts,zypp-plugin}/Makefile.am; do
+      substituteInPlace $file \
+        --replace '$(DESTDIR)/usr' "$out" \
+        --replace "DESTDIR" "out" \
+        --replace "/usr" "$out"
+    done
+    substituteInPlace pam/Makefile.am \
+      --replace '/`basename $(libdir)`' "$out/lib"
+  '';
+
+  configureFlags = [
+    "--disable-ext4"	# requires patched kernel & e2fsprogs
+    "DIFFBIN=${diffutils}/bin/diff"
+    "RMBIN=${coreutils}/bin/rm"
+  ];
+
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = "-I${libxml2.dev}/include/libxml2";
+
+  postInstall = ''
+    rm -r $out/etc/cron.*
+    patchShebangs $out/lib/zypp/plugins/commit/*
+    for file in \
+      $out/lib/pam_snapper/* \
+      $out/lib/systemd/system/* \
+      $out/share/dbus-1/system-services/* \
+    ; do
+      substituteInPlace $file --replace "/usr" "$out"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Tool for Linux filesystem snapshot management";
+    homepage = "http://snapper.io";
+    license = licenses.gpl2Only;
+    mainProgram = "snapper";
+    maintainers = with maintainers; [ markuskowa ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/snore/default.nix b/nixpkgs/pkgs/tools/misc/snore/default.nix
new file mode 100644
index 000000000000..572f504873f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/snore/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "0.3.1";
+  pname = "snore";
+
+  src = fetchFromGitHub {
+    owner = "clamiax";
+    repo = pname;
+    rev = version;
+    hash = "sha256-bKPGSePzp4XEZFY0QQr37fm3R1v3hLD6FeySFd7zNJc=";
+  };
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "sleep with feedback";
+    homepage = "https://github.com/clamiax/snore";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cafkafk ];
+    platforms = platforms.unix;
+    mainProgram = "snore";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/somafm-cli/default.nix b/nixpkgs/pkgs/tools/misc/somafm-cli/default.nix
new file mode 100644
index 000000000000..45f79e5bddff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/somafm-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv
+, fetchFromGitHub
+, makeWrapper
+, curl
+, jq
+, mpv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "somafm-cli";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "rockymadden";
+    repo = "somafm-cli";
+    rev = "v${version}";
+    sha256 = "1h5p9qsczgfr450sklh2vkllcpzb7nicbs8ciyvkavh3d7hds0yy";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -m0755 -D src/somafm $out/bin/somafm
+    wrapProgram $out/bin/somafm --prefix PATH ":" "${lib.makeBinPath [ curl jq mpv ]}";
+  '';
+
+  meta = with lib; {
+    description = "Listen to SomaFM in your terminal via pure bash";
+    homepage = "https://github.com/rockymadden/somafm-cli";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "somafm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sonota/default.nix b/nixpkgs/pkgs/tools/misc/sonota/default.nix
new file mode 100644
index 000000000000..5f341bbc98ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sonota/default.nix
@@ -0,0 +1,55 @@
+{ fetchFromGitHub, fetchurl, lib, python3Packages
+, coreVersion ? "1.13.3" # the version of the binary espurna image to flash
+, coreSize    ? "1MB"    # size of the binary image to flash
+, coreSha256  ? "0pkb2nmml0blrfiqpc46xpjc2dw927i89k1lfyqx827wanhc704x" }:
+
+with python3Packages;
+
+let
+  core = fetchurl {
+    url    = "https://github.com/xoseperez/espurna/releases/download/${coreVersion}/espurna-${coreVersion}-espurna-core-${coreSize}.bin";
+    sha256 = coreSha256;
+  };
+
+in buildPythonApplication rec {
+  pname = "sonota-unstable";
+  version = "2018-10-07";
+
+  src = fetchFromGitHub {
+    owner  = "mirko";
+    repo   = "SonOTA";
+    rev    = "d7f4b353858aae7ac403f95475a35560fb7ffeae";
+    sha256 = "0jd9xrhcyk8d2plbjnrlpn87536zr6n708797n0k5blf109q3c1z";
+  };
+
+  patches = [
+    ./set_resource_path.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace sonota.py --subst-var out
+  '';
+
+  format = "other";
+
+  propagatedBuildInputs = [ httplib2 netifaces tornado ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 sonota.py $out/bin/sonota
+    install -d $out/share/sonota
+    cp -r ssl static $out/share/sonota
+    cp ${core} $out/share/sonota/static/image_arduino.bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Flash Itead Sonoff devices with custom firmware via original OTA mechanism";
+    homepage = src.meta.homepage;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "sonota";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch b/nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch
new file mode 100644
index 000000000000..f9a802657762
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sonota/set_resource_path.patch
@@ -0,0 +1,20 @@
+diff --git a/sonota.py b/sonota.py
+index f67128b..9f2752e 100644
+--- a/sonota.py
++++ b/sonota.py
+@@ -475,14 +475,7 @@ def promptforval(msg):
+             return val
+
+ def resource_path(relative_path):
+-    """ Get absolute path to resource, works for dev and for PyInstaller """
+-    try:
+-        # PyInstaller creates a temp folder and stores path in _MEIPASS
+-        base_path = sys._MEIPASS
+-    except Exception:
+-        base_path = os.path.dirname(sys.argv[0])
+-
+-    return os.path.join(base_path, relative_path)
++    return os.path.join("@out@/share/sonota", relative_path)
+
+ def checkargs():
+     # Make sure all of the binary files that are needed are there
diff --git a/nixpkgs/pkgs/tools/misc/spacer/default.nix b/nixpkgs/pkgs/tools/misc/spacer/default.nix
new file mode 100644
index 000000000000..5bf584c07a14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/spacer/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "spacer";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "samwho";
+    repo = "spacer";
+    rev = "v${version}";
+    hash = "sha256-gxqUMtONjYPjSmxyguE9/GBC91PUK1rdFGsISGaSe44=";
+  };
+
+  cargoHash = "sha256-pMYqIl0Td2awAxe3BRglBcOychwTmFZ+pZV0QOT0CL4=";
+
+  meta = with lib; {
+    description = "CLI tool to insert spacers when command output stops";
+    homepage = "https://github.com/samwho/spacer";
+    changelog = "https://github.com/samwho/spacer/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "spacer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sqlite3-to-mysql/default.nix b/nixpkgs/pkgs/tools/misc/sqlite3-to-mysql/default.nix
new file mode 100644
index 000000000000..8d93736ffdac
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sqlite3-to-mysql/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+, nixosTests
+, testers
+, sqlite3-to-mysql
+, mysql80
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "sqlite3-to-mysql";
+  version = "2.1.9";
+  format = "pyproject";
+
+  disabled = python3Packages.pythonOlder "3.8";
+
+  src = fetchFromGitHub {
+    owner = "techouse";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-TnqNPW/d1dcVuS5sg9NOXH5ns7AzcbyailY2pYcpUEU=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    hatchling
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    click
+    mysql-connector
+    pytimeparse2
+    pymysql
+    pymysqlsa
+    simplejson
+    sqlalchemy
+    sqlalchemy-utils
+    tqdm
+    tabulate
+    unidecode
+    packaging
+    mysql80
+  ];
+
+  pythonRelaxDeps = [
+    "mysql-connector-python"
+  ];
+
+  # tests require a mysql server instance
+  doCheck = false;
+
+  # run package tests as a separate nixos test
+  passthru.tests = {
+    nixosTest = nixosTests.sqlite3-to-mysql;
+    version = testers.testVersion {
+      package = sqlite3-to-mysql;
+      command = "sqlite3mysql --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "A simple Python tool to transfer data from SQLite 3 to MySQL";
+    homepage = "https://github.com/techouse/sqlite3-to-mysql";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gador ];
+    mainProgram = "sqlite3mysql";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/srisum/default.nix b/nixpkgs/pkgs/tools/misc/srisum/default.nix
new file mode 100644
index 000000000000..8412e48d7907
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/srisum/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "srisum";
+  version = "5.0.0";
+
+  src = fetchFromGitHub {
+    owner = "zkat";
+    repo = "srisum-rs";
+    rev = "v${version}";
+    hash = "sha256-Nw3uTGOcz1ivAm9X+PnOdNA937wuK3vtJQ0iJHlHVdw=";
+  };
+  cargoHash = "sha256-q6FGykY+HmU3/jMaGRO36OlYGVLG9mU8yZ8j/Shux3s=";
+
+  doInstallCheck = true;
+
+  meta = with lib; {
+    description = "A command-line utility to compute and check subresource integrity hashes";
+    homepage = "https://github.com/zkat/srisum-rs";
+    changelog = "https://github.com/zkat/srisum-rs/raw/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ pjjw ];
+    platforms = platforms.all;
+    mainProgram = "srisum";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sshx/default.nix b/nixpkgs/pkgs/tools/misc/sshx/default.nix
new file mode 100644
index 000000000000..9ae65dcaee1c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sshx/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, callPackage
+, rustPlatform
+, fetchFromGitHub
+, protobuf
+, darwin
+, stdenv
+, buildNpmPackage
+}:
+let
+  version = "unstable-2023-11-23";
+
+  src = fetchFromGitHub {
+    owner = "ekzhang";
+    repo = "sshx";
+    rev = "2677f7e1fa3b369132cc7f27f6028a04b92ba5cf";
+    hash = "sha256-9fo8hNUzJr4gse0J2tw7j+alqE82+y8McADzTkxryWk=";
+  };
+
+  mkSshxPackage = { pname, cargoHash, ... }@args:
+    rustPlatform.buildRustPackage (rec {
+      inherit
+        pname
+        version
+        src
+        cargoHash;
+
+      nativeBuildInputs = [ protobuf ];
+      buildInputs = lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.Security;
+
+      cargoBuildFlags = [ "--package" pname ];
+      cargoTestFlags = cargoBuildFlags;
+
+      meta = {
+        description = "Fast, collaborative live terminal sharing over the web";
+        homepage = "https://github.com/ekzhang/sshx";
+        license = lib.licenses.mit;
+        maintainers = with lib.maintainers; [ pinpox kranzes ];
+        mainProgram = pname;
+      };
+    } // args);
+in
+{
+  sshx = mkSshxPackage {
+    pname = "sshx";
+    cargoHash = "sha256-dA5Aen/qANW8si75pj/RsBknvOo3KDyU5UISAmmcfRE=";
+  };
+
+  sshx-server = mkSshxPackage rec {
+    pname = "sshx-server";
+    cargoHash = "sha256-1GRWCMXsOzqvORgtwfuywV4wLyX3r4nURhM3Dl5V9Ss=";
+
+    postPatch = ''
+      substituteInPlace crates/sshx-server/src/web.rs \
+        --replace 'ServeDir::new("build")' 'ServeDir::new("${passthru.web.outPath}")' \
+        --replace 'ServeFile::new("build/spa.html")' 'ServeFile::new("${passthru.web.outPath}/spa.html")'
+    '';
+
+    passthru.web = buildNpmPackage {
+      pname = "sshx-web";
+
+      inherit
+        version
+        src;
+
+      postPatch = ''
+        substituteInPlace vite.config.ts \
+          --replace 'execSync("git rev-parse --short HEAD").toString().trim()' '"${src.rev}"'
+      '';
+
+      npmDepsHash = "sha256-bKePCxo6+n0EG+4tbbMimPedJ0Hu1O8yZsgspmhobOs=";
+
+      installPhase = ''
+        mkdir -p "$out"
+        cp -r build/* "$out"
+      '';
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sta/default.nix b/nixpkgs/pkgs/tools/misc/sta/default.nix
new file mode 100644
index 000000000000..8e39afa5d423
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sta/default.nix
@@ -0,0 +1,36 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoreconfHook
+}:
+
+stdenv.mkDerivation {
+  pname = "sta";
+  version = "unstable-2021-11-30";
+
+  src = fetchFromGitHub {
+    owner = "simonccarter";
+    repo = "sta";
+    rev = "94559e3dfa97d415e3f37b1180b57c17c7222b4f";
+    sha256 = "sha256-AiygCfBze7J1Emy6mc27Dim34eLR7VId9wodUZapIL4=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Simple statistics from the command line interface (CLI), fast";
+    longDescription = ''
+      This is a lightweight, fast tool for calculating basic descriptive
+      statistics from the command line. Inspired by
+      https://github.com/nferraz/st, this project differs in that it is written
+      in C++, allowing for faster computation of statistics given larger
+      non-trivial data sets.
+    '';
+    license = licenses.mit;
+    homepage = "https://github.com/simonccarter/sta";
+    maintainers = [ ];
+    platforms = platforms.all;
+    badPlatforms = platforms.darwin;
+    mainProgram = "sta";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/star-history/default.nix b/nixpkgs/pkgs/tools/misc/star-history/default.nix
new file mode 100644
index 000000000000..0588301a521e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/star-history/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, darwin
+, fetchCrate
+, pkg-config
+, openssl
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "star-history";
+  version = "1.0.21";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-jBeV5iZUKE70n/GTV+Bu9dy7B4pPmPhi5LHqw+YXJE0=";
+  };
+
+  cargoHash = "sha256-oHAHYNJZuD8j/VLmCwcLxv9FkfZdXnxI8cQsJ8sFmZA=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  meta = with lib; {
+    description = "Command line program to generate a graph showing number of GitHub stars of a user, org or repo over time";
+    homepage = "https://github.com/dtolnay/star-history";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "star-history";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/starfetch/default.nix b/nixpkgs/pkgs/tools/misc/starfetch/default.nix
new file mode 100644
index 000000000000..962409d21763
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/starfetch/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "starfetch";
+  version = "0.0.4";
+
+  src = fetchFromGitHub {
+    owner = "Haruno19";
+    repo = "starfetch";
+    rev = version;
+    sha256 = "sha256-I2M/FlLRkGtD2+GcK1l5+vFsb5tCb4T3UJTPxRx68Ww=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/starfetch.cpp --replace /usr/local/ $out/
+  '' + lib.optionalString stdenv.cc.isClang ''
+    substituteInPlace makefile --replace g++ clang++
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mkdir -p $out/share/starfetch
+    cp starfetch $out/bin/
+    cp -r res/* $out/share/starfetch/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "CLI star constellations displayer";
+    homepage = "https://github.com/Haruno19/starfetch";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ annaaurora ];
+    mainProgram = "starfetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/starry/default.nix b/nixpkgs/pkgs/tools/misc/starry/default.nix
new file mode 100644
index 000000000000..a59fb3127f17
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/starry/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "starry";
+  version = "2.0.2";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-/ZUmMLEqlpqu+Ja/3XjFJf+OFZJCz7rp5MrQBEjwsXs=";
+  };
+
+  cargoHash = "sha256-L6s1LkWnjht2VLwq1GOFiIosnZjFN9tDSLpPtokmj9o=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Current stars history tells only half the story";
+    homepage = "https://github.com/Canop/starry";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "starry";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/starship/default.nix b/nixpkgs/pkgs/tools/misc/starship/default.nix
new file mode 100644
index 000000000000..d040534cf300
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/starship/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, installShellFiles
+, cmake
+, git
+, nixosTests
+, Security
+, Foundation
+, Cocoa
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "starship";
+  version = "1.18.2";
+
+  src = fetchFromGitHub {
+    owner = "starship";
+    repo = "starship";
+    rev = "v${version}";
+    hash = "sha256-84FyKhSP2EZZkQJRhNPTYs2BYppylk50GiIck8pN3l4=";
+  };
+
+  nativeBuildInputs = [ installShellFiles cmake ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security Foundation Cocoa ];
+
+  NIX_LDFLAGS = lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [ "-framework" "AppKit" ];
+
+  # tries to access HOME only in aarch64-darwin environment when building mac-notification-sys
+  preBuild = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64) ''
+    export HOME=$TMPDIR
+  '';
+
+  postInstall = ''
+    installShellCompletion --cmd starship \
+      --bash <($out/bin/starship completions bash) \
+      --fish <($out/bin/starship completions fish) \
+      --zsh <($out/bin/starship completions zsh)
+
+    presetdir=$out/share/starship/presets/
+    mkdir -p $presetdir
+    cp docs/public/presets/toml/*.toml $presetdir
+  '';
+
+  cargoHash = "sha256-Fu8KfWHCQUPSiT1aMSS0Il/S02YXdEqKMA2nsliUu8E=";
+
+  nativeCheckInputs = [ git ];
+
+  preCheck = ''
+    HOME=$TMPDIR
+  '';
+
+  passthru.tests = {
+    inherit (nixosTests) starship;
+  };
+
+  meta = with lib; {
+    description = "A minimal, blazing fast, and extremely customizable prompt for any shell";
+    homepage = "https://starship.rs";
+    license = licenses.isc;
+    maintainers = with maintainers; [ danth davidtwco Br1ght0ne Frostman ];
+    mainProgram = "starship";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/staruml/default.nix b/nixpkgs/pkgs/tools/misc/staruml/default.nix
new file mode 100644
index 000000000000..a6497a62f59b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/staruml/default.nix
@@ -0,0 +1,80 @@
+{ stdenv, lib, fetchurl
+, dpkg, wrapGAppsHook
+, hicolor-icon-theme
+, gtk3, glib, systemd
+, xorg, nss, nspr
+, atk, at-spi2-atk, dbus
+, gdk-pixbuf, pango, cairo
+, expat, libdrm, mesa
+, alsa-lib, at-spi2-core, cups
+, libxkbcommon }:
+
+let
+  LD_LIBRARY_PATH = lib.makeLibraryPath [
+    glib gtk3 xorg.libXdamage
+    xorg.libX11 xorg.libxcb xorg.libXcomposite
+    xorg.libXcursor xorg.libXext xorg.libXfixes
+    xorg.libXi xorg.libXrender xorg.libXtst
+    xorg.libxshmfence libxkbcommon nss
+    nspr atk at-spi2-atk
+    dbus gdk-pixbuf pango cairo
+    xorg.libXrandr expat libdrm
+    mesa alsa-lib at-spi2-core
+    cups
+  ];
+in
+stdenv.mkDerivation (finalAttrs: {
+  version = "6.1.0";
+  pname = "staruml";
+
+  src = fetchurl {
+      url = "https://files.staruml.io/releases-v6/StarUML_${finalAttrs.version}_amd64.deb";
+      sha256 = "sha256-ULdrAQCiQlTN+aRhETj+ASMKkKctFgC2AfvUHGc6stU=";
+    };
+
+  nativeBuildInputs = [ wrapGAppsHook dpkg ];
+  buildInputs = [ glib hicolor-icon-theme ];
+
+  unpackPhase = ''
+    mkdir pkg
+    dpkg-deb -x $src pkg
+    sourceRoot=pkg
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv opt $out
+
+    mv usr/share $out
+    rm -rf $out/share/doc
+
+    substituteInPlace $out/share/applications/staruml.desktop \
+      --replace "/opt/StarUML/staruml" "$out/bin/staruml"
+
+    mkdir -p $out/lib
+    ln -s ${stdenv.cc.cc.lib}/lib/libstdc++.so.6 $out/lib/
+    ln -s ${lib.getLib systemd}/lib/libudev.so.1 $out/lib/libudev.so.0
+
+    patchelf \
+      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      $out/opt/StarUML/staruml
+
+    ln -s $out/opt/StarUML/staruml $out/bin/staruml
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH ':' $out/lib:${LD_LIBRARY_PATH}
+    )
+  '';
+
+  meta = with lib; {
+    description = "A sophisticated software modeler";
+    homepage = "https://staruml.io/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ kashw2 ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "staruml";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/statserial/default.nix b/nixpkgs/pkgs/tools/misc/statserial/default.nix
new file mode 100644
index 000000000000..526729dcd31c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/statserial/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, ncurses, glibc }:
+
+stdenv.mkDerivation rec {
+  pname = "statserial";
+  version = "1.1";
+
+  src = fetchurl {
+    url = "http://www.ibiblio.org/pub/Linux/system/serial/${pname}-${version}.tar.gz";
+    sha256 = "0rrrmxfba5yn836zlgmr8g9xnrpash7cjs7lk2m44ac50vakpks0";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace '-lcurses' '-lncurses'
+
+    substituteInPlace Makefile \
+      --replace 'LDFLAGS = -s -N' '#LDFLAGS = -s -N'
+  '';
+
+  buildInputs = [ ncurses glibc ];
+
+  installPhase = ''
+  mkdir -p $out/bin
+  cp statserial $out/bin
+
+  mkdir -p $out/share/man/man1
+  cp statserial.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    homepage = "https://sites.google.com/site/tranter/software";
+    description = "Display serial port modem status lines";
+    license = licenses.gpl2;
+
+    longDescription =
+      '' Statserial displays a table of the signals on a standard 9-pin or
+      25-pin serial port, and indicates the status of the handshaking lines. It
+      can be useful for debugging problems with serial ports or modems.
+      '';
+
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ rps ];
+    mainProgram = "statserial";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/stderred/default.nix b/nixpkgs/pkgs/tools/misc/stderred/default.nix
new file mode 100644
index 000000000000..f159e4328c9c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/stderred/default.nix
@@ -0,0 +1,31 @@
+{ stdenv
+, fetchFromGitHub
+, cmake
+, lib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stderred";
+  version = "unstable-2021-04-28";
+
+  src = fetchFromGitHub {
+    owner = "sickill";
+    repo = "stderred";
+    rev = "b2238f7c72afb89ca9aaa2944d7f4db8141057ea";
+    sha256 = "sha256-k/EA327AsRHgUYu7QqSF5yzOyO6h5XcE9Uv4l1VcIPI=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  sourceRoot = "${src.name}/src";
+
+  meta = with lib; {
+    description = "stderr in red";
+    homepage = "https://github.com/sickill/stderred";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vojta001 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/stow/default.nix b/nixpkgs/pkgs/tools/misc/stow/default.nix
new file mode 100644
index 000000000000..4dd72d8d8caf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/stow/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchurl
+, perl
+, perlPackages
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "stow";
+  version = "2.4.0";
+
+  src = fetchurl {
+    url = "mirror://gnu/stow/stow-${finalAttrs.version}.tar.bz2";
+    hash = "sha256-p7rGc9qiRs9U/7SKET6t0gSmFWMOdrU7X2TYGidbd7M=";
+  };
+
+  buildInputs = with perlPackages; [ perl IOStringy TestOutput ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A tool for managing the installation of multiple software packages in the same run-time directory tree";
+
+    longDescription = ''
+      GNU Stow is a symlink farm manager which takes distinct packages
+      of software and/or data located in separate directories on the
+      filesystem, and makes them appear to be installed in the same
+      place. For example, /usr/local/bin could contain symlinks to
+      files within /usr/local/stow/emacs/bin, /usr/local/stow/perl/bin
+      etc., and likewise recursively for any other subdirectories such
+      as .../share, .../man, and so on.
+    '';
+
+    license = licenses.gpl3Plus;
+    homepage = "https://www.gnu.org/software/stow/";
+    maintainers = with maintainers; [ sarcasticadmin ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/subberthehut/default.nix b/nixpkgs/pkgs/tools/misc/subberthehut/default.nix
new file mode 100644
index 000000000000..913bc49a5116
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/subberthehut/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, xmlrpc_c, glib, zlib }:
+stdenv.mkDerivation rec {
+  pname = "subberthehut";
+  version = "20";
+
+  src = fetchFromGitHub {
+    owner  = "mus65";
+    repo   = "subberthehut";
+    rev    = version;
+    sha256 = "19prdqbk19h0wak318g2jn1mnfm7l7f83a633bh0rhskysmqrsj1";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ xmlrpc_c glib zlib ];
+
+  installPhase = ''
+    install -Dm755 subberthehut $out/bin/subberthehut
+    install -Dm644 bash_completion $out/share/bash-completion/completions/subberthehut
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mus65/subberthehut";
+    description = "An OpenSubtitles.org downloader";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jqueiroz ];
+    mainProgram = "subberthehut";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sutils/default.nix b/nixpkgs/pkgs/tools/misc/sutils/default.nix
new file mode 100644
index 000000000000..f611b7adc07c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sutils/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, alsa-lib }:
+
+stdenv.mkDerivation rec {
+   version = "0.2";
+   pname = "sutils";
+
+   src = fetchFromGitHub {
+     owner = "baskerville";
+     repo = "sutils";
+     rev = version;
+     sha256 = "0i2g6a6xdaq3w613dhq7mnsz4ymwqn6kvkyan5kgy49mzq97va6j";
+   };
+
+   hardeningDisable = [ "format" ];
+
+   buildInputs = [ alsa-lib ];
+
+   prePatch = ''sed -i "s@/usr/local@$out@" Makefile'';
+
+   meta = {
+     description = "Small command-line utilities";
+     homepage = "https://github.com/baskerville/sutils";
+     maintainers = [ lib.maintainers.meisternu ];
+     license = "Custom";
+     platforms = lib.platforms.linux;
+   };
+}
diff --git a/nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix b/nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix
new file mode 100644
index 000000000000..5abdb5bba60d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/svtplay-dl/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, python3Packages
+, perl
+, zip
+, gitMinimal
+, ffmpeg
+}:
+
+let
+
+  inherit (python3Packages)
+    python pytest nose3 cryptography pyyaml requests mock requests-mock
+    python-dateutil setuptools;
+
+  version = "4.73";
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "svtplay-dl";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "spaam";
+    repo = "svtplay-dl";
+    rev = version;
+    hash = "sha256-e8ewsx2mx62JTUnpMoSRL44EGDllQuk/k9gRztOkWMc=";
+  };
+
+  pythonPaths = [ cryptography pyyaml requests ];
+  buildInputs = [ python perl python-dateutil setuptools ] ++ pythonPaths;
+  nativeBuildInputs = [ gitMinimal zip makeWrapper ];
+  nativeCheckInputs = [ nose3 pytest mock requests-mock ];
+
+  postPatch = ''
+    substituteInPlace scripts/run-tests.sh \
+      --replace 'PYTHONPATH=lib' 'PYTHONPATH=lib:$PYTHONPATH'
+
+    sed -i '/def test_sublang2\?(/ i\    @unittest.skip("accesses network")' \
+      lib/svtplay_dl/tests/test_postprocess.py
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" "SYSCONFDIR=$(out)/etc" "PYTHON=${python.interpreter}" ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/svtplay-dl" \
+      --prefix PATH : "${ffmpeg}" \
+      --prefix PYTHONPATH : "$PYTHONPATH"
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    sh scripts/run-tests.sh -2
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/svtplay-dl --help > /dev/null
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/spaam/svtplay-dl";
+    description = "Command-line tool to download videos from svtplay.se and other sites";
+    license = licenses.mit;
+    platforms = lib.platforms.unix;
+    mainProgram = "svtplay-dl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/svu/default.nix b/nixpkgs/pkgs/tools/misc/svu/default.nix
new file mode 100644
index 000000000000..0fafaffc153b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/svu/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, svu }:
+
+buildGoModule rec {
+  pname = "svu";
+  version = "1.12.0";
+
+  src = fetchFromGitHub {
+    owner = "caarlos0";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-MztFramrNqxYmdTRf857HOC7H66dLvezG6LL9njxWUs=";
+  };
+
+  vendorHash = "sha256-+e1oL08KvBSNaRepGR2SBBrEDJaGxl5V9rOBysGEfQs=";
+
+  ldflags = [ "-s" "-w" "-X=main.version=${version}" "-X=main.builtBy=nixpkgs" ];
+
+  # test assumes source directory to be a git repository
+  postPatch = ''
+    rm internal/git/git_test.go
+  '';
+
+  passthru.tests.version = testers.testVersion { package = svu; };
+
+  meta = with lib; {
+    description = "Semantic Version Util";
+    homepage = "https://github.com/caarlos0/svu";
+    maintainers = with maintainers; [ caarlos0 ];
+    license = licenses.mit;
+    mainProgram = "svu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/swaglyrics/default.nix b/nixpkgs/pkgs/tools/misc/swaglyrics/default.nix
new file mode 100644
index 000000000000..4b9095ff59d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/swaglyrics/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, python3
+, fetchFromGitHub
+, ncurses
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "swaglyrics";
+  version = "unstable-2021-06-17";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "SwagLyrics";
+    repo = "SwagLyrics-For-Spotify";
+    rev = "99fe764a9e45cac6cb9fcdf724c7d2f8cb4524fb";
+    hash = "sha256-O48T1WsUIVnNQb8gmzSkFFHTOiFOKVSAEYhF9zUqZz0=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "==" ">="
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    colorama
+    flask
+    requests
+    swspotify
+    unidecode
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    blinker
+    flask
+    flask-testing
+    mock
+    pytestCheckHook
+  ] ++ [
+    ncurses
+  ];
+
+  preBuild = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  disabledTests = [
+     # Disable tests which touch network
+     "test_database_for_unsupported_song"
+     "test_that_lyrics_works_for_unsupported_songs"
+     "test_that_get_lyrics_works"
+     "test_lyrics_are_shown_in_tab"
+     "test_songchanged_can_raise_songplaying"
+  ];
+
+  pythonImportsCheck = [
+    "swaglyrics"
+  ];
+
+  meta = with lib; {
+    description = "Lyrics fetcher for currently playing Spotify song";
+    homepage = "https://github.com/SwagLyrics/SwagLyrics-For-Spotify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    mainProgram = "swaglyrics";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/synth/default.nix b/nixpkgs/pkgs/tools/misc/synth/default.nix
new file mode 100644
index 000000000000..92e4e8531f9a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/synth/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, AppKit
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "synth";
+  version = "0.6.9";
+
+  src = fetchFromGitHub {
+    owner = "shuttle-hq";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/z2VEfeCCuffxlMh4WOpYkMSAgmh+sbx3ajcD5d4DdE=";
+  };
+
+  cargoSha256 = "sha256-i2Pp9sfTBth3DtrQ99Vw+KLnGECrkqtlRNAKiwSWf48=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    AppKit
+    Security
+  ];
+
+  checkFlags = [
+    # https://github.com/shuttle-hq/synth/issues/309
+    "--skip=docs_blog_2021_08_31_seeding_databases_tutorial_dot_md"
+  ];
+
+  # requires unstable rust features
+  RUSTC_BOOTSTRAP = 1;
+
+  meta = with lib; {
+    description = "A tool for generating realistic data using a declarative data model";
+    homepage = "https://github.com/getsynth/synth";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/system-config-printer/default.nix b/nixpkgs/pkgs/tools/misc/system-config-printer/default.nix
new file mode 100644
index 000000000000..cafc35790193
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/system-config-printer/default.nix
@@ -0,0 +1,85 @@
+{ lib, stdenv, fetchFromGitHub, udev, pkg-config, glib, xmlto, wrapGAppsHook
+, docbook_xml_dtd_412, docbook_xsl
+, libxml2, desktop-file-utils, libusb1, cups, gdk-pixbuf, pango, atk, libnotify
+, gobject-introspection, libsecret, packagekit
+, cups-filters, gettext, libtool, autoconf-archive
+, python3Packages, autoreconfHook, bash, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "system-config-printer";
+  version = "1.5.18";
+
+  src = fetchFromGitHub {
+    owner = "openPrinting";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-l3HEnYycP56vZWREWkAyHmcFgtu09dy4Ds65u7eqNZk=";
+  };
+
+  prePatch = ''
+    # for automake
+    touch README ChangeLog
+    # for tests
+    substituteInPlace Makefile.am --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  patches = [
+    ./detect_serverbindir.patch
+    # fix typeerror, remove on next release
+    (fetchpatch {
+      url = "https://github.com/OpenPrinting/system-config-printer/commit/399b3334d6519639cfe7f1c0457e2475b8ee5230.patch";
+      sha256 = "sha256-JCdGmZk2vRn3X1BDxOJaY3Aw8dr0ODVzi0oY20ZWfRs=";
+      excludes = [ "NEWS" ];
+    })
+  ];
+
+  buildInputs = [
+    glib udev libusb1 cups
+    python3Packages.python
+    libnotify gdk-pixbuf pango atk packagekit
+    libsecret
+  ];
+
+  nativeBuildInputs = [
+    pkg-config gettext libtool autoconf-archive
+    xmlto libxml2 docbook_xml_dtd_412 docbook_xsl desktop-file-utils
+    python3Packages.wrapPython
+    wrapGAppsHook autoreconfHook gobject-introspection
+  ];
+
+  pythonPath = with python3Packages; requiredPythonModules [ pycups pycurl dbus-python pygobject3 pycairo pysmbc ];
+
+  configureFlags = [
+    "--with-udev-rules"
+    "--with-udevdir=${placeholder "out"}/etc/udev"
+    "--with-systemdsystemunitdir=${placeholder "out"}/etc/systemd/system"
+  ];
+
+  stripDebugList = [ "bin" "lib" "etc/udev" ];
+
+  doCheck = true;
+
+  postInstall =
+    ''
+      buildPythonPath "$out $pythonPath"
+      gappsWrapperArgs+=(
+        --prefix PATH : "$program_PATH"
+        --set CUPS_DATADIR "${cups-filters}/share/cups"
+      )
+
+      find $out/share/system-config-printer -name \*.py -type f -perm -0100 -print0 | while read -d "" f; do
+        patchPythonScript "$f"
+      done
+      patchPythonScript $out/etc/udev/udev-add-printer
+
+      substituteInPlace $out/etc/udev/rules.d/70-printers.rules \
+        --replace "udev-configure-printer" "$out/etc/udev/udev-configure-printer"
+    '';
+
+  meta = {
+    homepage = "https://github.com/openprinting/system-config-printer";
+    platforms = lib.platforms.linux;
+    license = lib.licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch b/nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch
new file mode 100644
index 000000000000..2cd3058f2330
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/system-config-printer/detect_serverbindir.patch
@@ -0,0 +1,17 @@
+diff --git a/cupshelpers/config.py.in b/cupshelpers/config.py.in
+index 55abbfc..1244327 100644
+--- a/cupshelpers/config.py.in
++++ b/cupshelpers/config.py.in
+@@ -22,3 +22,12 @@
+ prefix="@prefix@"
+ sysconfdir="@sysconfdir@"
+ cupsserverbindir="@cupsserverbindir@"
++
++try:
++    with open("/etc/cups/cups-files.conf") as config:
++        for cfgline in config:
++            args = cfgline.split(" ")
++            if len(args) == 2 and args[0] == "ServerBin":
++                cupsserverbindir = args[1].strip()
++except OSError:
++    pass
diff --git a/nixpkgs/pkgs/tools/misc/systrayhelper/default.nix b/nixpkgs/pkgs/tools/misc/systrayhelper/default.nix
new file mode 100644
index 000000000000..1635054b56c6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/systrayhelper/default.nix
@@ -0,0 +1,41 @@
+{ lib, pkg-config, libappindicator-gtk3, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "systrayhelper";
+  version = "unstable-2021-05-20";
+  rev = "da47887f050cf0f22d9348cb4493df9ffda2a229";
+
+  src = fetchFromGitHub {
+    owner = "ssbc";
+    repo = "systrayhelper";
+    rev = rev;
+    hash = "sha256-9ejpARZghXhb3EJDvNcidg5QM8Z+P91ICGuA89ksqeA=";
+  };
+
+  vendorHash = null;
+
+  # re date: https://github.com/NixOS/nixpkgs/pull/45997#issuecomment-418186178
+  # > .. keep the derivation deterministic. Otherwise, we would have to rebuild it every time.
+  ldflags = [
+    "-X main.version=v${version}"
+    "-X main.commit=${rev}"
+    "-X main.date=nix-byrev"
+    "-s"
+    "-w"
+  ];
+
+  nativeBuildInputs = [ pkg-config libappindicator-gtk3 ];
+  buildInputs = [ libappindicator-gtk3 ];
+
+  doCheck = false; # Display required
+
+  meta = with lib; {
+    description = "A systray utility written in go, using json over stdio for control and events";
+    homepage = "https://github.com/ssbc/systrayhelper";
+    maintainers = with maintainers; [ cryptix ];
+    license = licenses.mit;
+    # It depends on the inputs, i guess? not sure about solaris, for instance. go supports it though
+    # I hope nix can figure this out?! ¯\\_(ツ)_/¯
+    mainProgram = "systrayhelper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/sysz/default.nix b/nixpkgs/pkgs/tools/misc/sysz/default.nix
new file mode 100644
index 000000000000..37b34aec2d27
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/sysz/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenvNoCC, fetchFromGitHub, makeWrapper, fzf, gawk }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "sysz";
+  version = "1.4.3";
+
+  src = fetchFromGitHub {
+    owner = "joehillen";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-X9vj6ILPUKFo/i50JNehM2GSDWfxTdroWGYJv765Cm4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 sysz $out/libexec/sysz
+    makeWrapper $out/libexec/sysz $out/bin/sysz \
+      --prefix PATH : ${lib.makeBinPath [ fzf gawk ]}
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/joehillen/sysz";
+    description = "A fzf terminal UI for systemctl";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ hleboulanger ];
+    platforms = platforms.unix;
+    changelog = "https://github.com/joehillen/sysz/blob/${version}/CHANGELOG.md";
+    mainProgram = "sysz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/szyszka/default.nix b/nixpkgs/pkgs/tools/misc/szyszka/default.nix
new file mode 100644
index 000000000000..7bcce4158faf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/szyszka/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, glib
+, cairo
+, pango
+, atk
+, gdk-pixbuf
+, gtk4
+, wrapGAppsHook4
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "szyszka";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "qarmin";
+    repo = "szyszka";
+    rev = version;
+    hash = "sha256-LkXGKDFKaY+mg53ZEO4h2br/4eRle/QbSQJTVEMpAoY=";
+  };
+
+  cargoHash = "sha256-WJR1BogNnQoZeOt5yBFzjYNZS8OmE84R1FbQpHTb7V0=";
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    glib
+    cairo
+    pango
+    atk
+    gdk-pixbuf
+    gtk4
+  ];
+
+  meta = with lib; {
+    description = "A simple but powerful and fast bulk file renamer";
+    homepage = "https://github.com/qarmin/szyszka";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kranzes ];
+    mainProgram = "szyszka";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/t/Gemfile b/nixpkgs/pkgs/tools/misc/t/Gemfile
new file mode 100644
index 000000000000..29813d30ba6b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/Gemfile
@@ -0,0 +1,6 @@
+source "https://rubygems.org"
+
+gem 't'
+# Needed because the twitter gem changed API.
+# https://github.com/sferik/t/issues/402
+gem 'twitter', '~> 6.1.0'
diff --git a/nixpkgs/pkgs/tools/misc/t/Gemfile.lock b/nixpkgs/pkgs/tools/misc/t/Gemfile.lock
new file mode 100644
index 000000000000..9555e08f9715
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/Gemfile.lock
@@ -0,0 +1,65 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.6.0)
+      public_suffix (>= 2.0.2, < 4.0)
+    buftok (0.2.0)
+    domain_name (0.5.20180417)
+      unf (>= 0.0.5, < 1.0.0)
+    equalizer (0.0.11)
+    faraday (0.11.0)
+      multipart-post (>= 1.2, < 3)
+    geokit (1.13.1)
+    htmlentities (4.3.4)
+    http (2.2.2)
+      addressable (~> 2.3)
+      http-cookie (~> 1.0)
+      http-form_data (~> 1.0.1)
+      http_parser.rb (~> 0.6.0)
+    http-cookie (1.0.3)
+      domain_name (~> 0.5)
+    http-form_data (1.0.3)
+    http_parser.rb (0.6.0)
+    launchy (2.4.3)
+      addressable (~> 2.3)
+    memoizable (0.4.2)
+      thread_safe (~> 0.3, >= 0.3.1)
+    multipart-post (2.0.0)
+    naught (1.1.0)
+    oauth (0.5.4)
+    public_suffix (3.0.3)
+    retryable (2.0.4)
+    simple_oauth (0.3.1)
+    t (3.1.0)
+      geokit (~> 1.9)
+      htmlentities (~> 4.3)
+      launchy (~> 2.4)
+      oauth (~> 0.5.1)
+      retryable (~> 2.0)
+      thor (>= 0.19.1, < 2)
+      twitter (~> 6.0)
+    thor (0.20.3)
+    thread_safe (0.3.6)
+    twitter (6.1.0)
+      addressable (~> 2.5)
+      buftok (~> 0.2.0)
+      equalizer (= 0.0.11)
+      faraday (~> 0.11.0)
+      http (~> 2.1)
+      http_parser.rb (~> 0.6.0)
+      memoizable (~> 0.4.2)
+      naught (~> 1.1)
+      simple_oauth (~> 0.3.1)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.7.6)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  t
+  twitter (~> 6.1.0)
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/t/default.nix b/nixpkgs/pkgs/tools/misc/t/default.nix
new file mode 100644
index 000000000000..4d0c961847ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "t";
+  gemdir = ./.;
+  exes = [ "t" ];
+
+  passthru.updateScript = bundlerUpdateScript "t";
+
+  meta = with lib; {
+    description = "A command-line power tool for Twitter";
+    homepage    = "http://sferik.github.io/t/";
+    license     = licenses.asl20;
+    maintainers = with maintainers; [ offline manveru nicknovitski ];
+    platforms   = platforms.unix;
+    mainProgram = "t";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/t/gemset.nix b/nixpkgs/pkgs/tools/misc/t/gemset.nix
new file mode 100644
index 000000000000..a61eb81b1da9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t/gemset.nix
@@ -0,0 +1,262 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  buftok = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rzsy1vy50v55x9z0nivf23y0r9jkmq6i130xa75pq9i8qrn1mxs";
+      type = "gem";
+    };
+    version = "0.2.0";
+  };
+  domain_name = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0abdlwb64ns7ssmiqhdwgl27ly40x2l27l8hs8hn0z4kb3zd2x3v";
+      type = "gem";
+    };
+    version = "0.5.20180417";
+  };
+  equalizer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18p1csdivgwmshfw3mb698a3bn0yrykg30khk5qxjf6n168g91jr";
+      type = "gem";
+    };
+    version = "0.11.0";
+  };
+  geokit = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mvdpbx88wflqqrcrfa54a5sckvj2sqzm304p7ji3c06frbhmxw8";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  htmlentities = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj";
+      type = "gem";
+    };
+    version = "4.3.4";
+  };
+  http = {
+    dependencies = ["addressable" "http-cookie" "http-form_data" "http_parser.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kcd9qp8vm1rkyp7gfh8j0dbl3zpi97vz2vbhpbcsdsa7l21a59r";
+      type = "gem";
+    };
+    version = "2.2.2";
+  };
+  http-cookie = {
+    dependencies = ["domain_name"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "004cgs4xg5n6byjs7qld0xhsjq3n6ydfh897myr2mibvh6fjc49g";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  http-form_data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j8dwwbfpf8kc0lcsqcgy29lflszd1x4d7kc0f7227892m7r6y0m";
+      type = "gem";
+    };
+    version = "1.0.3";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nidriy0v5yqfjsgsra51wmknxci2n2grliz78sf9pga3n0l7gi";
+      type = "gem";
+    };
+    version = "0.6.0";
+  };
+  launchy = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "190lfbiy1vwxhbgn4nl4dcbzxvm049jwc158r2x7kq3g5khjrxa2";
+      type = "gem";
+    };
+    version = "2.4.3";
+  };
+  memoizable = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0v42bvghsvfpzybfazl14qhkrjvx0xlmxz0wwqc960ga1wld5x5c";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  naught = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wwjx35zgbc0nplp8a866iafk4zsrbhwwz4pav5gydr2wm26nksg";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y";
+      type = "gem";
+    };
+    version = "0.5.4";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  retryable = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pxv5xgr08s9gv5npj7h3raxibywznrv2wcrb85ibhlhzgzcxggf";
+      type = "gem";
+    };
+    version = "2.0.4";
+  };
+  simple_oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dw9ii6m7wckml100xhjc6vxpjcry174lbi9jz5v7ibjr3i94y8l";
+      type = "gem";
+    };
+    version = "0.3.1";
+  };
+  t = {
+    dependencies = ["geokit" "htmlentities" "launchy" "oauth" "retryable" "thor" "twitter"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qj5zqc819yiscqbyb93alxillyli5ajvrr4gzq52clgkvyap7bd";
+      type = "gem";
+    };
+    version = "3.1.0";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yhrnp9x8qcy5vc7g438amd5j9sw83ih7c30dr6g6slgw9zj3g29";
+      type = "gem";
+    };
+    version = "0.20.3";
+  };
+  thread_safe = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nmhcgq6cgz44srylra07bmaw99f5271l0dpsvl5f75m44l0gmwy";
+      type = "gem";
+    };
+    version = "0.3.6";
+  };
+  twitter = {
+    dependencies = ["addressable" "buftok" "equalizer" "faraday" "http" "http_parser.rb" "memoizable" "naught" "simple_oauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l9zv0pg0q4mgcxyhzk2fj57bcs907mbargdr9l0ccnp6xi5sp8v";
+      type = "gem";
+    };
+    version = "6.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 = "1ll6w64ibh81qwvjx19h8nj7mngxgffg7aigjx11klvf5k2g4nxf";
+      type = "gem";
+    };
+    version = "0.0.7.6";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/t1utils/default.nix b/nixpkgs/pkgs/tools/misc/t1utils/default.nix
new file mode 100644
index 000000000000..be9cf659160b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/t1utils/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "t1utils";
+  version = "1.42";
+
+  src = fetchurl {
+    url = "https://www.lcdf.org/type/t1utils-${version}.tar.gz";
+    sha256 = "YYd5NbGYcETd/0u5CgUgDKcWRnijVeFwv18aVVbMnyk=";
+  };
+
+  meta = with lib; {
+    description = "Collection of simple Type 1 font manipulation programs";
+    longDescription = ''
+      t1utils is a collection of simple type-1 font manipulation programs.
+      Together, they allow you to convert between PFA (ASCII) and PFB (binary)
+      formats, disassemble PFA or PFB files into human-readable form,
+      reassemble them into PFA or PFB format. Additionally you can extract font
+      resources from a Macintosh font file or create a Macintosh Type 1 font
+      file from a PFA or PFB font.
+    '';
+    homepage = "https://www.lcdf.org/type/";
+    license = {
+      shortName = "Click"; # README.md says BSD-like, see LICENSE
+      url = "https://github.com/kohler/t1utils/blob/master/LICENSE";
+      free = true;
+      redistributable = true;
+    };
+    platforms = platforms.all;
+    maintainers = [ maintainers.bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tab-rs/default.nix b/nixpkgs/pkgs/tools/misc/tab-rs/default.nix
new file mode 100644
index 000000000000..26b4fa724b48
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tab-rs/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, IOKit }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tab-rs";
+  version = "0.5.7";
+
+  src = fetchFromGitHub {
+    owner = "austinjones";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1crj0caimin667f9kz34c0sm77892dmqaf1kxryqakqm75az5wfr";
+  };
+
+  cargoSha256 = "0v5vkxr2sncw4r4pwvk0jbk4as7zwwfvjk2cpj9872zp07s35a77";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ IOKit ];
+
+  # many tests are failing
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Intuitive, config-driven terminal multiplexer designed for software & systems engineers";
+    homepage = "https://github.com/austinjones/tab-rs";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "tab";
+    broken = (stdenv.isDarwin && stdenv.isAarch64); # Added 2023-11-13
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tagref/default.nix b/nixpkgs/pkgs/tools/misc/tagref/default.nix
new file mode 100644
index 000000000000..b54545f83685
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tagref/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tagref";
+  version = "1.10.0";
+
+  src = fetchFromGitHub {
+    owner = "stepchowfun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-ANQxW5Qznu2JbiazFElB1sxpX4BwPgk6SVGgYpJ6DUw=";
+  };
+
+  cargoHash = "sha256-vdmr5n4M+Qe/jzjNdg+sy7q2osTivxmLG+xMTMkEFm4=";
+
+  meta = with lib; {
+    description = "Manage cross-references in your code";
+    homepage = "https://github.com/stepchowfun/tagref";
+    license = licenses.mit;
+    maintainers = [ maintainers.yusdacra ];
+    platforms = platforms.unix;
+    mainProgram = "tagref";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tailer/default.nix b/nixpkgs/pkgs/tools/misc/tailer/default.nix
new file mode 100644
index 000000000000..96631875f5a4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tailer/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, tailer
+}:
+
+buildGoModule rec {
+  pname = "tailer";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "hionay";
+    repo = "tailer";
+    rev = "v${version}";
+    hash = "sha256-gPezz2ksqdCffgdAHwU2NMTar2glp5YGfA5C+tMYPtE=";
+  };
+
+  vendorHash = "sha256-nQqSvfN+ed/g5VkbD6XhZNA1G3CGGfwFDdadJ5+WoD0=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = tailer;
+    };
+  };
+
+  meta = with lib; {
+    description = "A CLI tool to insert lines when command output stops";
+    homepage = "https://github.com/hionay/tailer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "tailer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tailspin/default.nix b/nixpkgs/pkgs/tools/misc/tailspin/default.nix
new file mode 100644
index 000000000000..6be1f08efa09
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tailspin/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tailspin";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    owner = "bensadeh";
+    repo = "tailspin";
+    rev = version;
+    hash = "sha256-Aqm7Nt+rAu8A2216JCuID1eIpWSdKpoKjILYovr7bYw=";
+  };
+
+  cargoHash = "sha256-uTUowYoLEywGNzPyxq53Si5GSrh/F9kUFIDjw/wfdAQ=";
+
+  meta = with lib; {
+    description = "A log file highlighter";
+    homepage = "https://github.com/bensadeh/tailspin";
+    changelog = "https://github.com/bensadeh/tailspin/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "tspin";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/taoup/cachefile.patch b/nixpkgs/pkgs/tools/misc/taoup/cachefile.patch
new file mode 100644
index 000000000000..7c92b2180c67
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/taoup/cachefile.patch
@@ -0,0 +1,35 @@
+--- a/taoup-fortune	2021-09-05 12:16:23.408295791 +0800
++++ b/taoup-fortune	2021-09-05 13:02:52.286440200 +0800
+@@ -5,31 +5,9 @@
+ #        - https://github.com/matheuss/parrotsay
+ #        - https://github.com/busyloop/lolcat
+ #        - https://github.com/sckott/cowsay (enhanced version)
+-dir=`dirname "${BASH_SOURCE[0]}"`
+-
+-# USER ALERT!!! @ronjouch complained about execution speed at https://github.com/globalcitizen/taoup/issues/11 
+-#  ... therefore we add caching ... therefore first ensure we have an up to date cache via one of ...
+-# md5sum
+-if [ `which md5sum 2>/dev/null` ]; then
+- MD5SUM=`md5sum ${dir}/taoup | cut -d ' ' -f1`
+-# md5
+-elif [ `which md5 2>/dev/null` ]; then
+- MD5SUM=`md5 -q ${dir}/taoup | cut -d ' ' -f1`
+-# openssl
+-elif [ `which openssl 2>/dev/null` ]; then
+- MD5SUM=`cat ${dir}/taoup | openssl md5 | grep -o '[[:xdigit:]][[:xdigit:]]*$' |cut -d '=' -f2- |cut -c 2-`
+-# ruby
+-elif [ `which ruby 2>/dev/null` ]; then
+- MD5SUM=`ruby -rdigest/md5 -e"puts Digest::MD5.file'${dir}/taoup'"`
+-fi
+ 
+ # determine cachefile name
+-cachefile=${dir}/.taoup-fortune.cache.${MD5SUM}
+-
+-# create if necessary
+-if [ ! -r $cachefile ]; then
+- ${dir}/taoup $@ >${cachefile}
+-fi
++cachefile=@out@/lib/taoup/cache
+ 
+ # handle all classes of society
+ if [ `which cowsay 2>/dev/null` ]; then
diff --git a/nixpkgs/pkgs/tools/misc/taoup/default.nix b/nixpkgs/pkgs/tools/misc/taoup/default.nix
new file mode 100644
index 000000000000..4d991a88cf11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/taoup/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv, fetchFromGitHub, ruby, bash, ncurses }:
+let
+  rubyEnv = ruby.withPackages (ps: with ps; [ ansi ]);
+in
+stdenv.mkDerivation rec {
+  pname = "taoup";
+  version = "1.21";
+
+  src = fetchFromGitHub {
+    owner = "globalcitizen";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-UHo3c+DQn77CJONy/QXM55rpIdhVkJbhR82tqmUltPQ=";
+  };
+
+  buildInputs = [ rubyEnv bash ncurses ];
+
+  patches = [
+    # Pre-create a cache within this derivation
+    ./cachefile.patch
+    # Remove the need to test for `tput`, depend on ncurses directly
+    ./tput.patch
+    # Fix the script name in `taoup --help` output
+    ./help.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace taoup \
+     --subst-var-by ncurses ${ncurses} \
+     --subst-var-by pname ${pname}
+    substituteInPlace taoup-fortune \
+      --subst-var-by out $out \
+      --replace "/bin/bash" "${bash}/bin/bash"
+  '';
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,lib/taoup}
+
+    cp taoup $out/lib/taoup
+    cat > $out/bin/taoup <<EOF
+    #!${bash}/bin/bash
+    exec ${rubyEnv}/bin/ruby "$out/lib/taoup/taoup" "\$@"
+    EOF
+    chmod +x $out/bin/taoup
+
+    # Populate the cache created by cachedir.patch above
+    $out/bin/taoup > $out/lib/taoup/cache
+
+    cp taoup-fortune $out/bin
+    chmod +x $out/bin/taoup-fortune
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "The Tao of Unix Programming (Ruby-powered ANSI colored fortunes)";
+    homepage = "https://github.com/globalcitizen/taoup";
+    license = lib.licenses.gpl3Only;
+    maintainers = [ lib.maintainers.zakame ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/taoup/help.patch b/nixpkgs/pkgs/tools/misc/taoup/help.patch
new file mode 100644
index 000000000000..e8b5f91f3c8a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/taoup/help.patch
@@ -0,0 +1,21 @@
+--- a/taoup	2021-09-07 16:45:00.000000000 +0800
++++ b/taoup	2021-09-07 16:46:00.000000000 +0800
+@@ -7,12 +7,12 @@
+ 
+ # show help if requested
+ if ARGV[0] == '--help' or ARGV[0] == '-h' then
+- puts "usage: " + $0 + " [arguments]"
+- puts "       " + $0 + "                    Display all fortunes and sections."
+- puts "       " + $0 + " < --help | -h >    This help."
+- puts "       " + $0 + " --whitetrash       Convert ANSI colors for light/white terminals."
+- puts "       " + $0 + " --machine          Remove ANSI colors."
+- puts "       " + $0 + " --fortune          Convert output to fortune format (and lose colors)."
++ puts "usage: " + "@pname@" + " [arguments]"
++ puts "       " + "@pname@" + "                    Display all fortunes and sections."
++ puts "       " + "@pname@" + " < --help | -h >    This help."
++ puts "       " + "@pname@" + " --whitetrash       Convert ANSI colors for light/white terminals."
++ puts "       " + "@pname@" + " --machine          Remove ANSI colors."
++ puts "       " + "@pname@" + " --fortune          Convert output to fortune format (and lose colors)."
+  exit(0)
+ end
+ # ... but optionally make sure ANSI escape sequences are filtered out
diff --git a/nixpkgs/pkgs/tools/misc/taoup/tput.patch b/nixpkgs/pkgs/tools/misc/taoup/tput.patch
new file mode 100644
index 000000000000..5c82024885bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/taoup/tput.patch
@@ -0,0 +1,17 @@
+--- a/taoup	2021-09-05 12:43:48.334615538 +0800
++++ b/taoup	2021-09-05 12:55:07.631617799 +0800
+@@ -26,11 +26,9 @@
+  zero_colors = true
+  fortunify = true
+ else
+- if `which tput` then
+-  colors = `tput colors`
+-  if colors.chop == "-1" then
+-   zero_colors = true
+-  end
++ colors = `@ncurses@/bin/tput colors`
++ if colors.chop == "-1" then
++  zero_colors = true
+  end
+ end
+ if ARGV[0] == '--whitetrash' then
diff --git a/nixpkgs/pkgs/tools/misc/tbls/default.nix b/nixpkgs/pkgs/tools/misc/tbls/default.nix
new file mode 100644
index 000000000000..c930d2038149
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tbls/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, testers
+, tbls
+}:
+
+buildGoModule rec {
+  pname = "tbls";
+  version = "1.74.1";
+
+  src = fetchFromGitHub {
+    owner = "k1LoW";
+    repo = "tbls";
+    rev = "v${version}";
+    hash = "sha256-QuusOxXcTp7c6zkj6L//jOXWwLUgrsUFtsUtrNZrkOk=";
+  };
+
+  vendorHash = "sha256-mDZOBwm3k3L4QqQA+1C3jRz46R7+4wwJg9BVNWB0F0A=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  CGO_CFLAGS = [ "-Wno-format-security" ];
+
+  preCheck = ''
+    # Remove tests that require additional services.
+    rm -f \
+       datasource/*_test.go \
+       drivers/*/*_test.go
+  '';
+
+  postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
+    installShellCompletion --cmd tbls \
+      --bash <($out/bin/tbls completion bash) \
+      --fish <($out/bin/tbls completion fish) \
+      --zsh <($out/bin/tbls completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = tbls;
+    command = "tbls version";
+    inherit version;
+  };
+
+  meta = with lib; {
+    description = "A tool to generate documentation based on a database structure";
+    homepage = "https://github.com/k1LoW/tbls";
+    changelog = "https://github.com/k1LoW/tbls/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    mainProgram = "tbls";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tcat/default.nix b/nixpkgs/pkgs/tools/misc/tcat/default.nix
new file mode 100644
index 000000000000..5afa7e83affa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tcat/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tcat";
+  version = "1.0.0";
+  src = fetchFromGitHub {
+    owner = "rsc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1szzfz5xsx9l8gjikfncgp86hydzpvsi0y5zvikd621xkp7g7l21";
+  };
+  vendorHash = null;
+  subPackages = ".";
+
+  meta = with lib; {
+    description = "Table cat";
+    homepage = "https://github.com/rsc/tcat";
+    maintainers = with maintainers; [ mmlb ];
+    license = licenses.bsd3;
+    mainProgram = "tcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/td/Gemfile b/nixpkgs/pkgs/tools/misc/td/Gemfile
new file mode 100644
index 000000000000..d22bf73732c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem 'td'
diff --git a/nixpkgs/pkgs/tools/misc/td/Gemfile.lock b/nixpkgs/pkgs/tools/misc/td/Gemfile.lock
new file mode 100644
index 000000000000..b777a8b411aa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/Gemfile.lock
@@ -0,0 +1,40 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    fluent-logger (0.8.0)
+      msgpack (>= 1.0.0, < 2)
+    hirb (0.7.3)
+    httpclient (2.8.3)
+    msgpack (1.2.6)
+    parallel (1.13.0)
+    ruby-progressbar (1.10.0)
+    rubyzip (1.2.2)
+    td (0.16.4)
+      hirb (>= 0.4.5)
+      msgpack
+      parallel (~> 1.8)
+      ruby-progressbar (~> 1.7)
+      rubyzip (>= 1.2.1)
+      td-client (>= 1.0.6, < 2)
+      td-logger (>= 0.3.21, < 2)
+      yajl-ruby (~> 1.1)
+      zip-zip (~> 0.3)
+    td-client (1.0.6)
+      httpclient (>= 2.7)
+      msgpack (>= 0.5.6, < 2)
+    td-logger (0.3.27)
+      fluent-logger (>= 0.5.0, < 2.0)
+      msgpack (>= 0.5.6, < 2.0)
+      td-client (>= 0.8.66, < 2.0)
+    yajl-ruby (1.4.1)
+    zip-zip (0.3)
+      rubyzip (>= 1.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  td
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/td/default.nix b/nixpkgs/pkgs/tools/misc/td/default.nix
new file mode 100644
index 000000000000..ebfe642a27d2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "td";
+  gemdir = ./.;
+  exes = [ "td" ];
+
+  passthru.updateScript = bundlerUpdateScript "td";
+
+  meta = with lib; {
+    description = "CLI to manage data on Treasure Data, the Hadoop-based cloud data warehousing";
+    homepage    = "https://github.com/treasure-data/td";
+    license     = licenses.asl20;
+    maintainers =  with maintainers; [ groodt nicknovitski ];
+    platforms   = platforms.unix;
+    mainProgram = "td";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/td/gemset.nix b/nixpkgs/pkgs/tools/misc/td/gemset.nix
new file mode 100644
index 000000000000..53d9df0502d7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/td/gemset.nix
@@ -0,0 +1,103 @@
+{
+  fluent-logger = {
+    dependencies = ["msgpack"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yr6vrai4fqajpzybmdlajf8wzsgy29kr1318amn21y9nhjlnys5";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  hirb = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mzch3c2lvmf8gskgzlx6j53d10j42ir6ik2dkrl27sblhy76cji";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+  httpclient = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  msgpack = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0031gd2mjyba6jb7m97sqa149zjkr0vzn2s2gpb3m9nb67gqkm13";
+      type = "gem";
+    };
+    version = "1.2.6";
+  };
+  parallel = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "005shcy8dabc7lwydpkbhd3fx8bfqzvsj6g04r90mx0wky10lz84";
+      type = "gem";
+    };
+    version = "1.13.0";
+  };
+  ruby-progressbar = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cv2ym3rl09svw8940ny67bav7b2db4ms39i4raaqzkf59jmhglk";
+      type = "gem";
+    };
+    version = "1.10.0";
+  };
+  rubyzip = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n1lb2sdwh9h27y244hxzg1lrxxg2m53pk1vq7p33bna003qkyrj";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  td = {
+    dependencies = ["hirb" "msgpack" "parallel" "ruby-progressbar" "rubyzip" "td-client" "td-logger" "yajl-ruby" "zip-zip"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nlxpc4nasgmv6mqanb6ag1q3wmryja2c174dzgwxngxa0y2j1yn";
+      type = "gem";
+    };
+    version = "0.16.4";
+  };
+  td-client = {
+    dependencies = ["httpclient" "msgpack"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j5jcsgg020cm8xarbbw67mca4k8cx5pfyd2mm3wcqrnc1cl2bgp";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+  td-logger = {
+    dependencies = ["fluent-logger" "msgpack" "td-client"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y56gilaqk9a4lfhzb777ysmsq77pi1aqkr4q485a7f5dwnpwl1p";
+      type = "gem";
+    };
+    version = "0.3.27";
+  };
+  yajl-ruby = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16v0w5749qjp13xhjgr2gcsvjv6mf35br7iqwycix1n2h7kfcckf";
+      type = "gem";
+    };
+    version = "1.4.1";
+  };
+  zip-zip = {
+    dependencies = ["rubyzip"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ny3zv1sn9wasamykfkg7b7xgs6w7k5fy8kggiyjj9vrwfzzavqg";
+      type = "gem";
+    };
+    version = "0.3";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tdfgo/default.nix b/nixpkgs/pkgs/tools/misc/tdfgo/default.nix
new file mode 100644
index 000000000000..0d9e5950b51a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tdfgo/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tdfgo";
+  version = "unstable-2022-08-25";
+
+  src = fetchFromGitHub {
+    owner = "digitallyserviced";
+    repo = "tdfgo";
+    rev = "9f0b3315eed32409639a05aca55d7a0252681193";
+    sha256 = "sha256-Lr4+bXdVxYbCXKVzE+fjeLD559HuABK6lOLJ0sBBGNY=";
+  };
+
+  vendorHash = "sha256-T6PSs5NfXSXvzlq67rIDbzURyA+25df3nMMfufo0fow=";
+
+  meta = with lib; {
+    description = "TheDraw font parser and console text renderer";
+    longDescription = "Supports more fonts than `tdfiglet`, and packs more features.";
+    homepage = "https://github.com/digitallyserviced/tdfgo";
+    license = licenses.cc0;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ crinklywrappr ];
+    mainProgram = "tdfgo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tea/default.nix b/nixpkgs/pkgs/tools/misc/tea/default.nix
new file mode 100644
index 000000000000..8e985c9ec13d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tea/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitea }:
+
+buildGoModule rec {
+  pname = "tea";
+  version = "0.9.2";
+
+  src = fetchFromGitea {
+    domain = "gitea.com";
+    owner = "gitea";
+    repo = "tea";
+    rev = "v${version}";
+    sha256 = "sha256-sZfg8+LIu1Ejvmr/o4X3EOz3fv+RvLhrGRf2yy+6t8c=";
+  };
+
+  vendorHash = "sha256-nb0lQEAaIYlGpodFQLhMk/24DmTgg5K3zQ4s/XY+Z1w=";
+
+  meta = with lib; {
+    description = "Gitea official CLI client";
+    homepage    = "https://gitea.com/gitea/tea";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ j4m3s techknowlogick ];
+    mainProgram = "tea";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tealdeer/default.nix b/nixpkgs/pkgs/tools/misc/tealdeer/default.nix
new file mode 100644
index 000000000000..ce06bdfdce8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tealdeer/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tealdeer";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "dbrgn";
+    repo = "tealdeer";
+    rev = "v${version}";
+    sha256 = "sha256-zQzYukhruVUVP1v76/5522ag7wjN9QoE9BtfMNYQ7UY=";
+  };
+
+  cargoSha256 = "sha256-VeJsCWU7sJy88uvGGjpuGRzsAgBRvzOYU1FwpImpiLk=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd tldr \
+      --bash completion/bash_tealdeer \
+      --fish completion/fish_tealdeer \
+      --zsh completion/zsh_tealdeer
+  '';
+
+  # Disable tests that require Internet access:
+  checkFlags = [
+    "--skip test_autoupdate_cache"
+    "--skip test_create_cache_directory_path"
+    "--skip test_pager_flag_enable"
+    "--skip test_quiet_cache"
+    "--skip test_quiet_failures"
+    "--skip test_quiet_old_cache"
+    "--skip test_spaces_find_command"
+    "--skip test_update_cache"
+  ];
+
+  meta = with lib; {
+    description = "A very fast implementation of tldr in Rust";
+    homepage = "https://github.com/dbrgn/tealdeer";
+    maintainers = with maintainers; [ davidak newam ];
+    license = with licenses; [ asl20 mit ];
+    mainProgram = "tldr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/Gemfile b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile
new file mode 100644
index 000000000000..046ba3d536e0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'teamocil'
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock
new file mode 100644
index 000000000000..aeca8cadf869
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/Gemfile.lock
@@ -0,0 +1,13 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    teamocil (1.4.2)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  teamocil
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/default.nix b/nixpkgs/pkgs/tools/misc/teamocil/default.nix
new file mode 100644
index 000000000000..4344668809ce
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/default.nix
@@ -0,0 +1,21 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript }:
+
+bundlerEnv {
+  inherit ruby;
+  pname = "teamocil";
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "teamocil";
+
+  meta = with lib; {
+    description     = "A simple tool used to automatically create windows and panes in tmux with YAML files";
+    homepage        = "https://github.com/remiprev/teamocil";
+    license         = licenses.mit;
+    platforms       = platforms.all;
+    maintainers     = with maintainers; [
+      zachcoyle
+      nicknovitski
+    ];
+    mainProgram = "teamocil";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/teamocil/gemset.nix b/nixpkgs/pkgs/tools/misc/teamocil/gemset.nix
new file mode 100644
index 000000000000..2c522b096c81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/teamocil/gemset.nix
@@ -0,0 +1,10 @@
+{
+  teamocil = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l5f33faipb45xx7ds67s7dqgvjlljlcxgpgig4pg8p002vg06r2";
+      type = "gem";
+    };
+    version = "1.4.2";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tensorman/default.nix b/nixpkgs/pkgs/tools/misc/tensorman/default.nix
new file mode 100644
index 000000000000..b6f11d190c10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tensorman/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "tensorman";
+  version = "unstable-2023-03-13";
+
+  src = fetchFromGitHub {
+    owner = "pop-os";
+    repo = "tensorman";
+    rev = "b1125f71b55a8d9a4d674a62fa1e8868d40d0f0d";
+    hash = "sha256-WMX+nzNQTGeSUxOfMHo+U0ICYx8rttXpQrQClwU2zX8=";
+  };
+
+  cargoHash = "sha256-y/AE2jTVetqBBExBlPEB0LwIVk+LjB2i0ZjijLPs9js=";
+
+  meta = with lib; {
+    description = "Utility for easy management of Tensorflow containers";
+    homepage = "https://github.com/pop-os/tensorman";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ thefenriswolf ];
+    mainProgram = "tensorman";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tere/default.nix b/nixpkgs/pkgs/tools/misc/tere/default.nix
new file mode 100644
index 000000000000..70bd03ccaa49
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tere/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tere";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "mgunyho";
+    repo = "tere";
+    rev = "v${version}";
+    sha256 = "sha256-xqbFBRzBfTwSdkC8e85yANdVA45G6E1FYlTXP8QfVIk=";
+  };
+
+  cargoHash = "sha256-Y2Zgo/VAJxzQd2cXxyiJS5AqcVRClAuUsEogivK3EJw=";
+
+  postPatch = ''
+    rm .cargo/config.toml;
+  '';
+
+  meta = with lib; {
+    description = "A faster alternative to cd + ls";
+    homepage = "https://github.com/mgunyho/tere";
+    license = licenses.eupl12;
+    maintainers = with maintainers; [ ProducerMatt ];
+    mainProgram = "tere";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/termplay/default.nix b/nixpkgs/pkgs/tools/misc/termplay/default.nix
new file mode 100644
index 000000000000..aa35e24da017
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/termplay/default.nix
@@ -0,0 +1,40 @@
+{ rustPlatform, fetchFromGitLab, lib, makeWrapper, gst_all_1, libsixel }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "termplay";
+  version = "2.0.6";
+
+  src = fetchFromGitLab {
+    owner = "jD91mZM2";
+    repo = "termplay";
+    rev = "v${version}";
+    sha256 = "1w7hdqgqr1jgxid3k7f2j52wz31gv8bzr9rsm6xzp7nnihp6i45p";
+  };
+
+  cargoSha256 = "08ip6x4kink244majlk595yh551c2ap3ry58wly994mh8wf6ifwb";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gst-plugins-ugly
+    gst_all_1.gst-plugins-bad
+    libsixel
+  ];
+
+  buildFeatures = [ "bin" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/termplay --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
+  '';
+
+  meta = with lib; {
+    description = "Play an image/video in your terminal";
+    homepage = "https://jd91mzm2.github.io/termplay/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    mainProgram = "termplay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/termtosvg/default.nix b/nixpkgs/pkgs/tools/misc/termtosvg/default.nix
new file mode 100644
index 000000000000..86217693a58f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/termtosvg/default.nix
@@ -0,0 +1,21 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "termtosvg";
+  version = "1.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "1vk5kn8w3zf2ymi76l8cpwmvvavkmh3b9lb18xw3x1vzbmhz2f7d";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ lxml pyte wcwidth ];
+
+  meta = with lib; {
+    homepage = "https://nbedos.github.io/termtosvg/";
+    description = "Record terminal sessions as SVG animations";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "termtosvg";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tewisay/default.nix b/nixpkgs/pkgs/tools/misc/tewisay/default.nix
new file mode 100644
index 000000000000..f4ae05711285
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tewisay/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, unstableGitUpdater
+}:
+
+buildGoModule rec {
+  pname = "tewisay";
+  version = "unstable-2022-11-04";
+
+  # lucy deleted the old repo, this is a fork/mirror
+  src = fetchFromGitHub {
+    owner = "raymond-w-ko";
+    repo = "tewisay";
+    rev = "caa5b0131dda868f656716d2107f02d04d1048d4";
+    hash = "sha256-E492d8P/Bek9xZlJP+k9xvIJEFtA1YrIB/pogvz3wM4=";
+  };
+
+  vendorHash = "sha256-WcpRJ31kqWA255zfjuWDj0honJgSGdm4ONx2yOKk7/g=";
+
+  # Currently hard-coded, will be fixed by developer
+  postPatch = ''
+    substituteInPlace main.go \
+      --replace "/usr" "$out"
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share
+    mv {cows,zsh} $out/share
+  '';
+
+  passthru.updateScript = unstableGitUpdater { };
+
+  meta = with lib; {
+    homepage = "https://github.com/raymond-w-ko/tewisay";
+    description = "Cowsay replacement with unicode and partial ansi escape support";
+    license = with licenses; [ cc0 ];
+    maintainers = with maintainers; [ Madouura ];
+    mainProgram = "tewisay";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix b/nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix
new file mode 100644
index 000000000000..94219a004250
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/texi2mdoc/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "texi2mdoc";
+  version = "0.1.2";
+
+  src = fetchurl {
+    url = "http://mdocml.bsd.lv/texi2mdoc/snapshots/${pname}-${version}.tgz";
+    sha256 = "1zjb61ymwfkw6z5g0aqmsn6qpw895zdxv7fv3059gj3wqa3zsibs";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "http://mdocml.bsd.lv/";
+    description = "converter from Texinfo into mdoc";
+    license = licenses.isc;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ ramkromberg ];
+    mainProgram = "texi2mdoc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tfk8s/default.nix b/nixpkgs/pkgs/tools/misc/tfk8s/default.nix
new file mode 100644
index 000000000000..52795b754002
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tfk8s/default.nix
@@ -0,0 +1,49 @@
+{ lib, buildGoModule, fetchFromGitHub, callPackage }:
+
+buildGoModule rec {
+  pname = "tfk8s";
+  version = "0.1.10";
+  tag = "v${version}";
+
+  src = fetchFromGitHub {
+    owner = "jrhouston";
+    repo = "tfk8s";
+    rev = tag;
+    sha256 = "sha256-VLpXL5ABnCxc+7dV3sZ6wsY2nKn2yfu7eTjtn881/XQ=";
+  };
+
+  vendorHash = "sha256-eTADcUW9b6l47BkWF9YLxdcgvMbCzWTjLF28FneJHg8=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.toolVersion=${tag}"
+    "-X main.builtBy=nixpkgs"
+  ];
+
+  doCheck = true;
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/tfk8s --version | grep ${tag} > /dev/null
+  '';
+
+  passthru.tests = {
+    sample1 = callPackage ./tests/sample1 { };
+  };
+
+  meta = with lib; {
+    description = "An utility to convert Kubernetes YAML manifests to Terraform's HCL format";
+    license = licenses.mit;
+    longDescription = ''
+      tfk8s is a tool that makes it easier to work with the Terraform Kubernetes Provider.
+      If you want to copy examples from the Kubernetes documentation or migrate existing YAML manifests and use them with Terraform without having to convert YAML to HCL by hand, this tool is for you.
+      Features:
+      * Convert a YAML file containing multiple manifests.
+      * Strip out server side fields when piping kubectl get $R -o yaml | tfk8s --strip
+    '';
+    homepage = "https://github.com/jrhouston/tfk8s/";
+    maintainers = with maintainers; [ bryanasdev000 ];
+    mainProgram = "tfk8s";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/default.nix b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/default.nix
new file mode 100644
index 000000000000..6b06dbf32340
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/default.nix
@@ -0,0 +1,11 @@
+{ runCommandCC, tfk8s }:
+
+runCommandCC "tfk8s-test-sample1" {
+    buildInputs = [
+      tfk8s
+    ];
+    meta.timeout = 60;
+  }
+  ''
+    cmp <(${tfk8s}/bin/tfk8s -f ${./input.yaml}) ${./output.tf} > $out
+  ''
diff --git a/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml
new file mode 100644
index 000000000000..58ed0eb11d76
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/input.yaml
@@ -0,0 +1,7 @@
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: test
+data:
+  TEST: test
diff --git a/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/output.tf b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/output.tf
new file mode 100644
index 000000000000..51d564400b55
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tfk8s/tests/sample1/output.tf
@@ -0,0 +1,12 @@
+resource "kubernetes_manifest" "configmap_test" {
+  manifest = {
+    "apiVersion" = "v1"
+    "data" = {
+      "TEST" = "test"
+    }
+    "kind" = "ConfigMap"
+    "metadata" = {
+      "name" = "test"
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/tools/misc/thefuck/default.nix b/nixpkgs/pkgs/tools/misc/thefuck/default.nix
new file mode 100644
index 000000000000..48d4f395b047
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thefuck/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, buildPythonApplication
+, colorama, decorator, psutil, pyte, six
+, go, mock, pytest7CheckHook, pytest-mock
+}:
+
+buildPythonApplication rec {
+  pname = "thefuck";
+  version = "3.32";
+
+  src = fetchFromGitHub {
+    owner = "nvbn";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-bRCy95owBJaxoyCNQF6gEENoxCkmorhyKzZgU1dQN6I=";
+  };
+
+  propagatedBuildInputs = [ colorama decorator psutil pyte six ];
+
+  nativeCheckInputs = [ go mock pytest7CheckHook pytest-mock ];
+
+  disabledTests = lib.optionals stdenv.isDarwin [
+    "test_settings_defaults"
+    "test_from_file"
+    "test_from_env"
+    "test_settings_from_args"
+    "test_get_all_executables_exclude_paths"
+    "test_with_blank_cache"
+    "test_with_filled_cache"
+    "test_when_etag_changed"
+    "test_for_generic_shell"
+    "test_on_first_run"
+    "test_on_run_after_other_commands"
+    "test_when_cant_configure_automatically"
+    "test_when_already_configured"
+    "test_when_successfully_configured"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/nvbn/thefuck";
+    description = "Magnificent app which corrects your previous console command";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marcusramberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/theme-sh/default.nix b/nixpkgs/pkgs/tools/misc/theme-sh/default.nix
new file mode 100644
index 000000000000..3d4125873151
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/theme-sh/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, coreutils, gawk }:
+
+stdenv.mkDerivation rec {
+  pname = "theme-sh";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "lemnos";
+    repo = "theme.sh";
+    rev = "v${version}";
+    sha256 = "sha256-zDw8WGBzO4/HRCgN7yoUxT49ibTz+QkRa5WpBQbl1nI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install -Dm755 bin/theme.sh $out/bin
+    wrapProgram $out/bin/theme.sh \
+      --prefix PATH : ${lib.makeBinPath [ coreutils gawk ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A script which lets you set your $terminal theme";
+    homepage = "https://github.com/lemnos/theme.sh";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "theme.sh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix b/nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix
new file mode 100644
index 000000000000..bff6c9c96887
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thin-provisioning-tools/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, expat, libaio, boost }:
+
+stdenv.mkDerivation rec {
+  pname = "thin-provisioning-tools";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "jthornber";
+    repo = "thin-provisioning-tools";
+    rev = "v${version}";
+    sha256 = "1iwg04rhmdhijmlk5hfl8wvv83115lzb65if6cc1glkkfva8jfjp";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ expat libaio boost ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/jthornber/thin-provisioning-tools/";
+    description = "A suite of tools for manipulating the metadata of the dm-thin device-mapper target";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thinkpad-scripts/default.nix b/nixpkgs/pkgs/tools/misc/thinkpad-scripts/default.nix
new file mode 100644
index 000000000000..5b9b9eae7ad5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thinkpad-scripts/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildPythonPackage, fetchFromGitHub, python3Packages }:
+
+buildPythonPackage rec {
+  pname = "thinkpad-scripts";
+  version = "4.12.0";
+
+  src = fetchFromGitHub {
+    owner = "martin-ueding";
+    repo = "thinkpad-scripts";
+    rev = "v${version}";
+    sha256 = "08adx8r5pwwazbnfahay42l5f203mmvcn2ipz5hg8myqc9jxm2ky";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ setuptools ];
+
+  meta = {
+    description = "Screen rotation, docking and other scripts for ThinkPad® X220 and X230 Tablet";
+    homepage = "https://github.com/martin-ueding/thinkpad-scripts";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ dawidsowa ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thumbs/default.nix b/nixpkgs/pkgs/tools/misc/thumbs/default.nix
new file mode 100644
index 000000000000..e7f785b9e5bf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thumbs/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "thumbs";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "fcsonline";
+    repo = "tmux-thumbs";
+    rev = version;
+    sha256 = "sha256-XMz1ZOTz2q1Dt4QdxG83re9PIsgvxTTkytESkgKxhGM=";
+  };
+
+  cargoSha256 = "sha256-PfTx6PcW5DESShfr9Ekhbq1asZ0xUGM4Vi9EwmoDv+s";
+
+  patches = [ ./fix.patch ];
+
+  meta = with lib; {
+    homepage = "https://github.com/fcsonline/tmux-thumbs";
+    description = "A lightning fast version of tmux-fingers written in Rust, copy/pasting tmux like vimium/vimperator";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ghostbuster91 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/thumbs/fix.patch b/nixpkgs/pkgs/tools/misc/thumbs/fix.patch
new file mode 100644
index 000000000000..35b7a9169165
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/thumbs/fix.patch
@@ -0,0 +1,13 @@
+diff --git i/src/swapper.rs w/src/swapper.rs
+index c901f48..cbd278d 100644
+--- i/src/swapper.rs
++++ w/src/swapper.rs
+@@ -215,7 +215,7 @@ impl<'a> Swapper<'a> {
+     };
+ 
+     let pane_command = format!(
+-        "tmux capture-pane -J -t {active_pane_id} -p{scroll_params} | tail -n {height} | {dir}/target/release/thumbs -f '%U:%H' -t {tmp} {args}; tmux swap-pane -t {active_pane_id}; {zoom_command} tmux wait-for -S {signal}",
++        "tmux capture-pane -J -t {active_pane_id} -p{scroll_params} | tail -n {height} | {dir}/thumbs -f '%U:%H' -t {tmp} {args}; tmux swap-pane -t {active_pane_id}; {zoom_command} tmux wait-for -S {signal}",
+         active_pane_id = active_pane_id,
+         scroll_params = scroll_params,
+         height = self.active_pane_height.unwrap_or(i32::MAX),
diff --git a/nixpkgs/pkgs/tools/misc/time-decode/default.nix b/nixpkgs/pkgs/tools/misc/time-decode/default.nix
new file mode 100644
index 000000000000..b208fd3e2ba2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/time-decode/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "time-decode";
+  version = "7.0.2";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "digitalsleuth";
+    repo = "time_decode";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-K60xIQ6TWPYlsR6YjIquey5Ioaw4oAId59CPlQNK4yk=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    python-dateutil
+    pyqt6
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "time_decode"
+  ];
+
+  meta = with lib; {
+    description = "Timestamp and date decoder";
+    homepage = "https://github.com/digitalsleuth/time_decode";
+    changelog = "https://github.com/digitalsleuth/time_decode/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "time-decode";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/time/default.nix b/nixpkgs/pkgs/tools/misc/time/default.nix
new file mode 100644
index 000000000000..1df89b323838
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/time/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "time";
+  version = "1.9";
+
+  src = fetchurl {
+    url = "mirror://gnu/time/time-${finalAttrs.version}.tar.gz";
+    hash = "sha256-+6zwyB5iQp3z4zvaTO44dWYE8Y4B2XczjiMwaj47Uh4=";
+  };
+
+  meta = {
+    description = "Tool that runs programs and summarizes the system resources they use";
+    longDescription = ''
+      The `time' command runs another program, then displays
+      information about the resources used by that program, collected
+      by the system while the program was running.  You can select
+      which information is reported and the format in which it is
+      shown, or have `time' save the information in a file instead of
+      displaying it on the screen.
+
+      The resources that `time' can report on fall into the general
+      categories of time, memory, and I/O and IPC calls.  Some systems
+      do not provide much information about program resource use;
+      `time' reports unavailable information as zero values.
+    '';
+    license = lib.licenses.gpl3Plus;
+    homepage = "https://www.gnu.org/software/time/";
+    platforms = lib.platforms.unix;
+    mainProgram = "time";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/timelimit/default.nix b/nixpkgs/pkgs/tools/misc/timelimit/default.nix
new file mode 100644
index 000000000000..534cd320bf1a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timelimit/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitLab, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "timelimit";
+  version = "1.9.2";
+
+  src = fetchFromGitLab {
+    owner = "timelimit";
+    repo = pname;
+    rev = "release/${version}";
+    sha256 = "sha256-5IEAF8zCKaCVH6BAxjoa/2rrue9pRGBBkFzN57d+g+g=";
+  };
+
+  nativeCheckInputs = [ perl ];
+  doCheck = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+  INSTALL_PROGRAM = "install -m755";
+  INSTALL_DATA = "install -m644";
+
+  meta = with lib; {
+    description = "Execute a command and terminates the spawned process after a given time with a given signal";
+    homepage = "https://devel.ringlet.net/sysutils/timelimit/";
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "timelimit";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/timer/default.nix b/nixpkgs/pkgs/tools/misc/timer/default.nix
new file mode 100644
index 000000000000..908127575e7a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timer/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, timer }:
+
+buildGoModule rec {
+  pname = "timer";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "caarlos0";
+    repo = "timer";
+    rev = "v${version}";
+    hash = "sha256-8BVzijAXsJ8Q8BhDmhzFbEQ23fUEBdmbUsCPxfpXyBA=";
+  };
+
+  vendorHash = "sha256-1n5vZKlOWoB2SFdDdv+pPWLybzCIJG/wdBYqLMatjNA=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  passthru.tests.version = testers.testVersion { package = timer; };
+
+  meta = with lib; {
+    description = "A `sleep` with progress";
+    homepage = "https://github.com/caarlos0/timer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zowoq caarlos0 ];
+    mainProgram = "timer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/timetagger_cli/default.nix b/nixpkgs/pkgs/tools/misc/timetagger_cli/default.nix
new file mode 100644
index 000000000000..f6204e2d8fe1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timetagger_cli/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "timetagger_cli";
+  version = "23.8.3";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "almarklein";
+    repo = "timetagger_cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-vOpwMR7/EGf/l5KvlHn7mQ1vGGZ1Whd5x2uxLV9nCbk=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+    toml
+  ];
+
+  # Project has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Track your time from the command-line ";
+    homepage = "https://github.com/almarklein/timetagger_cli";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ matthiasbeyer ];
+    mainProgram = "timetagger";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/timidity/configure-compat.patch b/nixpkgs/pkgs/tools/misc/timidity/configure-compat.patch
new file mode 100644
index 000000000000..4368f389e0f8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timidity/configure-compat.patch
@@ -0,0 +1,33 @@
+--- a/configure	2018-08-28 19:33:39.000000000 -0400
++++ b/configure	2023-09-05 19:44:27.311279263 -0400
+@@ -6874,6 +6874,7 @@
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ctype.h>
++#include <stdlib.h>
+ #if ((' ' & 0x0FF) == 0x020)
+ # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+@@ -7731,6 +7732,7 @@
+ cat >>conftest.$ac_ext <<_ACEOF
+ /* end confdefs.h.  */
+ #include <ctype.h>
++#include <stdlib.h>
+ #if ((' ' & 0x0FF) == 0x020)
+ # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+ # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+@@ -10311,8 +10313,13 @@
+   if test "$cross_compiling" = yes; then
+   ac_cv_func_fork_works=cross
+ else
+-  cat >conftest.$ac_ext <<_ACEOF
++   cat >conftest.$ac_ext <<_ACEOF
++/* confdefs.h.  */
++_ACEOF
++   cat confdefs.h >>conftest.$ac_ext
++   cat >>conftest.$ac_ext <<_ACEOF
+ /* By Ruediger Kuhlmann. */
++      #include <stdlib.h>
+       #include <sys/types.h>
+       #if HAVE_UNISTD_H
+       # include <unistd.h>
diff --git a/nixpkgs/pkgs/tools/misc/timidity/default.nix b/nixpkgs/pkgs/tools/misc/timidity/default.nix
new file mode 100644
index 000000000000..65d154476f02
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timidity/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, memstreamHook
+, CoreAudio
+, libobjc
+, libjack2
+, ncurses
+, alsa-lib
+, buildPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "timidity";
+  version = "2.15.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/timidity/TiMidity++-${version}.tar.bz2";
+    sha256 = "1xf8n6dqzvi6nr2asags12ijbj1lwk1hgl3s27vm2szib8ww07qn";
+  };
+
+  patches = [
+    ./timidity-iA-Oj.patch
+    # Fixes misdetection of features by clang 16. The configure script itself is patched because
+    # it is old and does not work nicely with autoreconfHook.
+    ./configure-compat.patch
+  ];
+
+  nativeBuildInputs = [ pkg-config ]
+    ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [ memstreamHook ];
+  buildInputs = [
+    libjack2
+    ncurses
+  ] ++ lib.optionals stdenv.isLinux [
+    alsa-lib
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreAudio
+    libobjc
+  ];
+
+  configureFlags = [
+    "--enable-ncurses"
+    "lib_cv_va_copy=yes"
+    "lib_cv___va_copy=yes"
+  ] ++ lib.optionals stdenv.isLinux [
+    "--enable-audio=oss,alsa,jack"
+    "--enable-alsaseq"
+    "--with-default-output=alsa"
+    "lib_cv_va_val_copy=yes"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "--enable-audio=darwin,jack"
+    "lib_cv_va_val_copy=no"
+    "timidity_cv_ccoption_rdynamic=yes"
+    # These configure tests fail because of incompatible function pointer conversions.
+    "ac_cv_func_vprintf=yes"
+    "ac_cv_func_popen=yes"
+    "ac_cv_func_vsnprintf=yes"
+    "ac_cv_func_snprintf=yes"
+    "ac_cv_func_open_memstream=yes"
+  ];
+
+  makeFlags = [
+    "AR=${stdenv.cc.targetPrefix}ar"
+  ];
+
+  instruments = fetchurl {
+    url = "http://www.csee.umbc.edu/pub/midia/instruments.tar.gz";
+    sha256 = "0lsh9l8l5h46z0y8ybsjd4pf6c22n33jsjvapfv3rjlfnasnqw67";
+  };
+
+  preBuild = ''
+    # calcnewt has to be built with the host compiler.
+    ${buildPackages.stdenv.cc}/bin/cc -o timidity/calcnewt -lm timidity/calcnewt.c
+    # Remove dependencies of calcnewt so it doesn't try to remake it.
+    sed -i 's/^\(calcnewt\$(EXEEXT):\).*/\1/g' timidity/Makefile
+  '';
+
+  # the instruments could be compressed (?)
+  postInstall = ''
+    mkdir -p $out/share/timidity/;
+    cp ${./timidity.cfg} $out/share/timidity/timidity.cfg
+    substituteAllInPlace $out/share/timidity/timidity.cfg
+    tar --strip-components=1 -xf $instruments -C $out/share/timidity/
+  '';
+  # This fixup step is unnecessary and fails on Darwin
+  dontRewriteSymlinks = stdenv.isDarwin;
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/timidity/";
+    license = licenses.gpl2;
+    description = "A software MIDI renderer";
+    maintainers = [ maintainers.marcweber ];
+    platforms = platforms.unix;
+    mainProgram = "timidity";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/timidity/timidity-iA-Oj.patch b/nixpkgs/pkgs/tools/misc/timidity/timidity-iA-Oj.patch
new file mode 100644
index 000000000000..9bb964134283
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timidity/timidity-iA-Oj.patch
@@ -0,0 +1,14 @@
+Without this timidity -iA -Oj prints "Couldn't start JACK device (`j')"
+and does not play MIDI.
+
+--- a/timidity/jack_a.c
++++ b/timidity/jack_a.c
+@@ -513,6 +513,8 @@ static int actl_jack(int request, void *arg)
+ 		ringbuf_clear(&ctx->rbuf);
+ 		return 0;
+ 
++	case PM_REQ_PLAY_START:
++		return 0;
+ 	}
+ 	return -1;
+ }
diff --git a/nixpkgs/pkgs/tools/misc/timidity/timidity.cfg b/nixpkgs/pkgs/tools/misc/timidity/timidity.cfg
new file mode 100644
index 000000000000..f4a260d249e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/timidity/timidity.cfg
@@ -0,0 +1,368 @@
+##############################################################################
+# 
+# Instrument configuration file for timidity
+#
+# ----------------------------------------
+#
+#   Johan Hagman (Johan.Hagman@mailbox.swipnet.se) 26-Sep-96:
+#
+# This config file is for the uncompressed MIDIA GM patches from
+# ftp://archive.cs.umbc.edu/pub/midia/instruments.tar.gz. The
+# patches assumed to be installed are
+#
+#   in /usr/local/lib/timidity/patch		original piano & guitar
+#   in /usr/local/lib/timidity/instruments	MIDIA patches
+#
+# ----------------------------------------
+#
+# Specify library directory:		dir <directory>
+#
+# - Multiple library directories may be given. The ones given last will be
+#   searched first so you can override them in later configuration files.
+#   Extra configuration files and MIDI files will also be searched in these
+#   directories.
+#
+# Set tone bank or drum set to modify:	bank <number>
+#					drumset <number>
+#
+# Map program number to patch map:	<program number> <patch name>
+#
+# - If the patch can't be found in the library directories, TiMidity will 
+#   search again with ".pat" appended to the name.
+#   Programs without a loaded patch will be silent, except that for
+#   banks/drumsets >0, the corresponding patch in  bank/drumset 0 will
+#   be used (if one exists).
+#
+# Read another configuration file:	source <file name>
+#
+
+##############################################################################
+# If you've moved things around since compiling, uncomment and edit this to
+# point to the library directory: 
+#
+
+dir @out@/share/timidity
+
+##############################################################################
+# This sets up the default patches in the TiMidity support package
+# "timidity-lib-0.1.tar.gz":
+
+#bank 0
+#   0 acpiano.pat
+#  24 nylongt2.pat
+
+##############################################################################
+# If you have Dustin McCartney's "wowpats" patches, you can source the 
+# config file to set them up for TiMidity:
+#
+# (Note that later entries in config files always override earlier ones)
+#
+#source wowpats.cfg
+#
+
+##############################################################################
+# If you have Dustin McCartney's GS drum sets, you can source the config
+# file to set them up for TiMidity:
+#
+#source gsdrum.cfg
+#
+
+##############################################################################
+# If you have the GUS General MIDI patch set, uncomment the following lines 
+# and edit the "dir" statement to point to your GUS patch directory. 
+#
+#dir /dos-C/ultrasnd/midi
+#source gravis.cfg
+#
+
+##############################################################################
+# If you have the Midia patch set, you can source midia.cfg to set them up.
+# Note that midia.cfg sources gravis.cfg in turn, since the filenames are 
+# almost identical.
+#
+#source midia.cfg
+#
+
+##############################################################################
+# A config file for the Midia patch set. The patch filenames are identical
+# to the GUS ones, although many of the patches themselves are different.
+
+#source gravis.cfg
+
+##############################################################################
+# These are the standard patches that come with the GUS, mapped into GM
+# programs. 
+#
+
+bank 0
+
+	0 acpiano
+	# The Midia set doesn't have a bright piano,
+	# so we substitute acpiano instead.
+	#1 britepno
+	1 acpiano
+	2 synpiano
+	3 honky
+	4 epiano1
+	5 epiano2
+	6 hrpschrd
+	7 clavinet
+	8 celeste
+	9 glocken
+	10 musicbox
+	11 vibes
+	12 marimba
+	13 xylophon amp=200
+	14 tubebell
+	15 santur
+	16 homeorg
+	17 percorg
+	18 rockorg
+	19 church
+	20 reedorg
+	21 accordn
+	22 harmonca
+	23 concrtna
+	#24 nyguitar
+	# Replace with the guitar that comes with Timidity
+	24 nylongt2
+	25 acguitar
+	26 jazzgtr
+	27 cleangtr
+	28 mutegtr
+	29 odguitar
+	30 distgtr
+	31 gtrharm
+	32 acbass
+	33 fngrbass
+	34 pickbass
+	35 fretless
+	36 slapbas1
+	37 slapbas2
+	38 synbass1
+	39 synbass2
+	40 violin
+	41 viola
+	42 cello
+	43 contraba
+	44 tremstr
+	45 pizzcato
+	46 harp
+	47 timpani
+	# This sounds pretty dumb with the default panning
+	48 marcato pan=center
+	49 slowstr
+	50 synstr1
+	51 synstr2
+	52 choir
+	53 doo
+	54 voices
+	55 orchhit
+	56 trumpet
+	57 trombone
+	58 tuba
+	59 mutetrum
+	60 frenchrn
+	61 hitbrass
+	62 synbras1
+	63 synbras2
+	64 sprnosax
+	65 altosax
+	66 tenorsax
+	67 barisax
+	68 oboe
+	69 englhorn
+	70 bassoon
+	71 clarinet
+	72 piccolo
+	73 flute
+	74 recorder
+	75 woodflut
+	76 bottle
+	77 shakazul
+	78 whistle
+	79 ocarina
+	80 sqrwave
+	81 sawwave
+	82 calliope
+	83 chiflead
+	84 charang
+	85 voxlead
+	86 lead5th
+	87 basslead
+	88 fantasia
+	89 warmpad
+	90 polysyn
+	91 ghostie
+	92 bowglass
+	93 metalpad
+	94 halopad
+	95 sweeper
+	96 aurora
+	97 soundtrk
+	98 crystal
+	99 atmosphr
+	100 freshair
+	101 unicorn
+	102 echovox
+	103 startrak
+	104 sitar
+	105 banjo
+	106 shamisen
+	107 koto
+	108 kalimba
+	109 bagpipes
+	110 fiddle
+	111 shannai
+	112 carillon
+	113 agogo
+	114 steeldrm
+	115 woodblk
+	116 taiko
+	117 toms
+	118 syntom
+	119 revcym
+	120 fx-fret
+	121 fx-blow
+	122 seashore
+	123 jungle
+	124 telephon
+	125 helicptr
+	126 applause note=69
+	127 pistol
+
+##############################################################################
+# The GUS drum patches
+
+drumset 0
+
+	27 highq
+	28 slap
+	29 scratch1
+	30 scratch2
+	31 sticks strip=tail
+	32 sqrclick
+	33 metclick
+	34 metbell keep=loop keep=env
+	35 kick1
+	36 kick2
+	37 stickrim strip=tail
+	38 snare1
+	39 claps
+	40 snare2 note=38
+	41 tomlo2
+	42 hihatcl
+	43 tomlo1
+	44 hihatpd
+	45 tommid2
+	46 hihatop
+	47 tommid1
+	48 tomhi2
+	49 cymcrsh1
+	50 tomhi1
+	51 cymride1
+	52 cymchina
+	53 cymbell
+	54 tamborin
+	55 cymsplsh
+	56 cowbell
+	57 cymcrsh2
+	58 vibslap
+	59 cymride2
+	60 bongohi
+	61 bongolo
+	62 congahi1
+	63 congahi2
+	64 congalo
+	65 timbaleh
+	66 timbalel
+	67 agogohi
+	68 agogolo
+	69 cabasa strip=tail
+	70 maracas
+	71 whistle1 keep=loop keep=env
+	72 whistle2 keep=loop keep=env
+	73 guiro1
+	74 guiro2
+	75 clave
+	76 woodblk1
+	77 woodblk2
+	78 cuica1
+	79 cuica2
+	80 triangl1
+	81 triangl2
+	82 shaker
+	83 jingles
+	84 belltree keep=loop keep=env
+	85 castinet
+	86 surdo1
+	87 surdo2
+	# There's no pistol, but I can't think of a reasonable substitute.
+
+# Drumset 1 is identical to set 0
+drumset 1
+
+	27 highq
+	28 slap
+	29 scratch1
+	30 scratch2
+	31 sticks strip=tail
+	32 sqrclick
+	33 metclick
+	34 metbell keep=loop keep=env
+	35 kick1
+	36 kick2
+	37 stickrim strip=tail
+	38 snare1
+	39 claps
+	40 snare2 note=38
+	41 tomlo2
+	42 hihatcl
+	43 tomlo1
+	44 hihatpd
+	45 tommid2
+	46 hihatop
+	47 tommid1
+	48 tomhi2
+	49 cymcrsh1
+	50 tomhi1
+	51 cymride1
+	52 cymchina
+	53 cymbell
+	54 tamborin
+	55 cymsplsh
+	56 cowbell
+	57 cymcrsh2
+	58 vibslap
+	59 cymride2
+	60 bongohi
+	61 bongolo
+	62 congahi1
+	63 congahi2
+	64 congalo
+	65 timbaleh
+	66 timbalel
+	67 agogohi
+	68 agogolo
+	69 cabasa strip=tail
+	70 maracas
+	71 whistle1 keep=loop keep=env
+	72 whistle2 keep=loop keep=env
+	73 guiro1
+	74 guiro2
+	75 clave
+	76 woodblk1
+	77 woodblk2
+	78 cuica1
+	79 cuica2
+	80 triangl1
+	81 triangl2
+	82 shaker
+	83 jingles
+	84 belltree keep=loop keep=env
+	85 castinet
+	86 surdo1
+	87 surdo2
+
+##############################################################################
+# End of configuration file
diff --git a/nixpkgs/pkgs/tools/misc/tio/default.nix b/nixpkgs/pkgs/tools/misc/tio/default.nix
new file mode 100644
index 000000000000..8f8c39126ae9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tio/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, inih, lua, bash-completion, darwin }:
+
+stdenv.mkDerivation rec {
+  pname = "tio";
+  version = "2.8";
+
+  src = fetchFromGitHub {
+    owner = "tio";
+    repo = "tio";
+    rev = "v${version}";
+    hash = "sha256-BBfLmRhbDeymXXlYp71XTwbAab7h7gJ842fzZJNb6kU=";
+  };
+
+  strictDeps = true;
+
+  buildInputs = [ inih lua ]
+    ++ lib.optionals (stdenv.hostPlatform.isDarwin) [ darwin.apple_sdk.frameworks.IOKit ];
+
+  nativeBuildInputs = [ meson ninja pkg-config bash-completion ];
+
+  meta = with lib; {
+    description = "Serial console TTY";
+    homepage = "https://tio.github.io/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ yana ];
+    platforms = platforms.unix;
+    mainProgram = "tio";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tkman/default.nix b/nixpkgs/pkgs/tools/misc/tkman/default.nix
new file mode 100644
index 000000000000..c51c3564fef8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tkman/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, stdenv
+, fetchzip
+, fetchpatch
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, tk
+, groff
+, rman
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "tkman";
+  version = "2.2";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/tkman/tkman-${finalAttrs.version}.tar.gz";
+    hash = "sha256-S4ffz+7zmVy9+isz/8q+FV4wF5Rw2iL1ftY8RsJjRLs=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  patches = [(fetchpatch {
+    url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-text/tkman/files/tkman-CVE-2008-5137.diff";
+    hash = "sha256-l97SY2/YnMgzHYKnVYCVJKV7oGLN1hXNpeHFlLVzTMA=";
+  })];
+
+  makeFlags = [
+    "BINDIR=$(out)/bin"
+    "WISH=${tk}/bin/wish"
+    "rman=${rman}/bin/rman"
+    # TODO package glimpse https://github.com/gvelez17/glimpse
+    "glimpse=\"\""
+  ];
+
+  preBuild = ''
+    makeFlagsArray+=(
+      'manformat="${groff}/bin/groff -te -Tlatin1 -mandoc $$manx(longtmp) -"'
+    )
+  '';
+
+  preInstall = ''
+    mkdir -p $out/bin
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/tkman \
+      --run 'export MANPATH="$(manpath)"'
+    rm $out/bin/retkman # doesn't work
+    install -Dm644 contrib/TkMan.gif $out/share/icons/hicolor/64x64/apps/tkman.gif
+  '';
+
+  desktopItems = [(makeDesktopItem {
+    name = "tkman";
+    desktopName = "TkMan";
+    comment = "Graphical man page and info viewer";
+    exec = "tkman %f";
+    icon = "tkman";
+    terminal = false;
+    type = "Application";
+    categories = [ "Utility" ];
+  })];
+
+  meta = with lib; {
+    description = "Graphical, hypertext manual page and Texinfo browser for UNIX";
+    mainProgram = "tkman";
+    longDescription = ''
+      TkMan is a graphical, hypertext manual page and Texinfo browser for UNIX.
+      TkMan boasts hypertext links, unmatched online text formatting and display
+      quality, (optional) outline view of man pages, high quality display and
+      superior navigational interface to Texinfo documents, a novel information
+      visualization mechanism called Notemarks, full text search among man pages
+      and Texinfo, incremental and regular expression search within pages,
+      regular expression search within Texinfo that shows all matches (not just
+      the next), robustly attached yellow highlight annotations, a shortcut/hot
+      list, lists of all pages in user configurable volumes, a comprehensive
+      Preferences panel, and man page versioning support, among many other features.
+    '';
+    homepage = "https://tkman.sourceforge.net/index.html";
+    license = licenses.artistic1;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fgaz ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/tldr/default.nix b/nixpkgs/pkgs/tools/misc/tldr/default.nix
new file mode 100644
index 000000000000..0d4df99a952d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tldr/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, curl, libzip, pkg-config, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "tldr";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "tldr-pages";
+    repo = "tldr-c-client";
+    rev = "v${version}";
+    sha256 = "sha256-1L9frURnzfq0XvPBs8D+hBikybAw8qkb0DyZZtkZleY=";
+  };
+
+  buildInputs = [ curl libzip ];
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+
+  makeFlags = ["CC=${stdenv.cc.targetPrefix}cc" "LD=${stdenv.cc.targetPrefix}cc" "CFLAGS="];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    installShellCompletion --cmd tldr autocomplete/complete.{bash,fish,zsh}
+  '';
+
+  meta = with lib; {
+    description = "Simplified and community-driven man pages";
+    longDescription = ''
+      tldr pages gives common use cases for commands, so you don't need to hunt
+      through a man page for the correct flags.
+    '';
+    homepage = "https://tldr.sh";
+    changelog = "https://github.com/tldr-pages/tldr-c-client/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ taeer carlosdagos kbdharun];
+    platforms = platforms.all;
+    mainProgram = "tldr";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tlp/default.nix b/nixpkgs/pkgs/tools/misc/tlp/default.nix
new file mode 100644
index 000000000000..436e5ba480ee
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tlp/default.nix
@@ -0,0 +1,136 @@
+{ stdenv
+, lib
+, checkbashisms
+, coreutils
+, ethtool
+, fetchFromGitHub
+, gawk
+, gnugrep
+, gnused
+, hdparm
+, iw
+, kmod
+, makeWrapper
+, pciutils
+, perl
+, perlcritic
+, shellcheck
+, smartmontools
+, systemd
+, util-linux
+, x86_energy_perf_policy
+  # RDW only works with NetworkManager, and thus is optional with default off
+, enableRDW ? false
+, networkmanager
+}: stdenv.mkDerivation rec {
+  pname = "tlp";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "linrunner";
+    repo = "TLP";
+    rev = version;
+    hash = "sha256-CxO1KU7F6sT5D8vjKOmntjDxcieoRSHTvuSqXfplcHk=";
+  };
+
+  # XXX: See patch files for relevant explanations.
+  patches = [
+    ./patches/0001-makefile-correctly-sed-paths.patch
+    ./patches/0002-reintroduce-tlp-sleep-service.patch
+  ];
+
+  buildInputs = [ perl ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  # XXX: While [1] states that DESTDIR should not be used, and that the correct
+  # variable to set is, in fact, PREFIX, tlp thinks otherwise. The Makefile for
+  # tlp concerns itself only with DESTDIR [2] (possibly incorrectly) and so we set
+  # that as opposed to PREFIX, despite what [1] says.
+  #
+  # [1]: https://github.com/NixOS/nixpkgs/issues/65718
+  # [2]: https://github.com/linrunner/TLP/blob/ab788abf4936dfb44fbb408afc34af834230a64d/Makefile#L4-L46
+  makeFlags = [
+    "TLP_NO_INIT=1"
+    "TLP_WITH_ELOGIND=0"
+    "TLP_WITH_SYSTEMD=1"
+
+    "DESTDIR=${placeholder "out"}"
+    "TLP_BATD=/share/tlp/bat.d"
+    "TLP_BIN=/bin"
+    "TLP_CONFDEF=/share/tlp/defaults.conf"
+    "TLP_CONFREN=/share/tlp/rename.conf"
+    "TLP_FLIB=/share/tlp/func.d"
+    "TLP_MAN=/share/man"
+    "TLP_META=/share/metainfo"
+    "TLP_SBIN=/sbin"
+    "TLP_SHCPL=/share/bash-completion/completions"
+    "TLP_TLIB=/share/tlp"
+  ];
+
+  installTargets = [ "install-tlp" "install-man" ]
+  ++ lib.optionals enableRDW [ "install-rdw" "install-man-rdw" ];
+
+  doCheck = true;
+  nativeCheckInputs = [ checkbashisms perlcritic shellcheck ];
+  checkTarget = [ "checkall" ];
+
+  # TODO: Consider using resholve here
+  postInstall = let
+    paths = lib.makeBinPath (
+      [
+        coreutils
+        ethtool
+        gawk
+        gnugrep
+        gnused
+        hdparm
+        iw
+        kmod
+        pciutils
+        perl
+        smartmontools
+        systemd
+        util-linux
+      ] ++ lib.optional enableRDW networkmanager
+        ++ lib.optional (lib.meta.availableOn stdenv.hostPlatform x86_energy_perf_policy) x86_energy_perf_policy
+    );
+  in
+    ''
+      fixup_perl=(
+        $out/share/tlp/tlp-pcilist
+        $out/share/tlp/tlp-readconfs
+        $out/share/tlp/tlp-usblist
+        $out/share/tlp/tpacpi-bat
+      )
+      for f in "''${fixup_perl[@]}"; do
+        wrapProgram "$f" --prefix PATH : "${paths}"
+      done
+
+      fixup_bash=(
+        $out/bin/*
+        $out/etc/NetworkManager/dispatcher.d/*
+        $out/lib/udev/tlp-*
+        $out/sbin/*
+        $out/share/tlp/bat.d/*
+        $out/share/tlp/func.d/*
+        $out/share/tlp/tlp-func-base
+      )
+      for f in "''${fixup_bash[@]}"; do
+        sed -i '2iexport PATH=${paths}:$PATH' "$f"
+      done
+
+      rm -rf $out/var
+      rm -rf $out/share/metainfo
+    '';
+
+  meta = with lib; {
+    description = "Advanced Power Management for Linux";
+    homepage =
+      "https://linrunner.de/en/tlp/docs/tlp-linux-advanced-power-management.html";
+    changelog = "https://github.com/linrunner/TLP/releases/tag/${version}";
+    platforms = platforms.linux;
+    mainProgram = "tlp";
+    maintainers = with maintainers; [ abbradar lovesegfault ];
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tlp/patches/0001-makefile-correctly-sed-paths.patch b/nixpkgs/pkgs/tools/misc/tlp/patches/0001-makefile-correctly-sed-paths.patch
new file mode 100644
index 000000000000..278cd0b1dde8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tlp/patches/0001-makefile-correctly-sed-paths.patch
@@ -0,0 +1,58 @@
+From 5c5d878bf49bae5920c330482217477819ba9bc2 Mon Sep 17 00:00:00 2001
+From: Bernardo Meurer <bernardo@meurer.org>
+Date: Fri, 15 Oct 2021 23:22:50 -0700
+Subject: [PATCH 1/2] makefile: correctly sed paths
+
+The default Makefile for tlp makes a mess with catenating `DESTDIR` to
+everything, but then not actualy using the catenated (_ prefixed)
+variables to sed it's `.in` files.
+
+This patch makes sure that it correctly sets the paths, taking `DESTDIR`
+in account where it makes sense (e.g. /bin where we want $out/bin) but
+not where it doesn't (/etc/tlp.conf should be just that).
+
+The reason DESTDIR is used at all, as opposed to the more appropriate
+PREFIX, is covered in the nix formula, and is (also) due to the Makefile
+being a bit "different."
+---
+ Makefile | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 8042517..1c436ad 100644
+--- a/Makefile
++++ b/Makefile
+@@ -57,20 +57,20 @@ _TPACPIBAT = $(DESTDIR)$(TPACPIBAT)
+ 
+ SED = sed \
+ 	-e "s|@TLPVER@|$(TLPVER)|g" \
+-	-e "s|@TLP_SBIN@|$(TLP_SBIN)|g" \
+-	-e "s|@TLP_TLIB@|$(TLP_TLIB)|g" \
+-	-e "s|@TLP_FLIB@|$(TLP_FLIB)|g" \
+-	-e "s|@TLP_ULIB@|$(TLP_ULIB)|g" \
+-	-e "s|@TLP_BATD@|$(TLP_BATD)|g" \
++	-e "s|@TLP_SBIN@|$(_SBIN)|g" \
++	-e "s|@TLP_TLIB@|$(_TLIB)|g" \
++	-e "s|@TLP_FLIB@|$(_FLIB)|g" \
++	-e "s|@TLP_ULIB@|$(_ULIB)|g" \
++	-e "s|@TLP_BATD@|$(_BATD)|g" \
+ 	-e "s|@TLP_CONFUSR@|$(TLP_CONFUSR)|g" \
+ 	-e "s|@TLP_CONFDIR@|$(TLP_CONFDIR)|g" \
+-	-e "s|@TLP_CONFDEF@|$(TLP_CONFDEF)|g" \
+-	-e "s|@TLP_CONFREN@|$(TLP_CONFREN)|g" \
+-	-e "s|@TLP_CONFDPR@|$(TLP_CONFDPR)|g" \
+-	-e "s|@TLP_CONF@|$(TLP_CONF)|g" \
++	-e "s|@TLP_CONFDEF@|$(_CONFDEF)|g" \
++	-e "s|@TLP_CONFREN@|$(_CONFREN)|g" \
++	-e "s|@TLP_CONFDPR@|$(_CONFDPR)|g" \
++	-e "s|@TLP_CONF@|$(_CONF)|g" \
+ 	-e "s|@TLP_RUN@|$(TLP_RUN)|g"   \
+ 	-e "s|@TLP_VAR@|$(TLP_VAR)|g"   \
+-	-e "s|@TPACPIBAT@|$(TPACPIBAT)|g"
++	-e "s|@TPACPIBAT@|$(_TPACPIBAT)|g"
+ 
+ INFILES = \
+ 	tlp \
+-- 
+2.41.0
+
diff --git a/nixpkgs/pkgs/tools/misc/tlp/patches/0002-reintroduce-tlp-sleep-service.patch b/nixpkgs/pkgs/tools/misc/tlp/patches/0002-reintroduce-tlp-sleep-service.patch
new file mode 100644
index 000000000000..dfea1c61636d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tlp/patches/0002-reintroduce-tlp-sleep-service.patch
@@ -0,0 +1,85 @@
+From a3506c9bc8929645b7b08859e47039b8cc830d22 Mon Sep 17 00:00:00 2001
+From: Bernardo Meurer <bernardo@meurer.org>
+Date: Fri, 15 Oct 2021 23:07:40 -0700
+Subject: [PATCH 2/2] tlp-sleep.service: reintroduce
+
+This patch reintroduces tlp-sleep as a systemd unit as opposed to a
+systemd system-sleep hook script. This is due to the recommendation by
+systemd itself to not use the hook scripts. As per the manual:
+
+> Note that scripts or binaries dropped in /usr/lib/systemd/system-sleep/
+> are intended for local use only and should be considered hacks. If
+> applications want to react to system suspend/hibernation and resume,
+> they should rather use the Inhibitor interface[1].
+---
+ Makefile             |  6 +++---
+ tlp-sleep.service.in | 19 +++++++++++++++++++
+ 2 files changed, 22 insertions(+), 3 deletions(-)
+ create mode 100644 tlp-sleep.service.in
+
+diff --git a/Makefile b/Makefile
+index 1c436ad..fd5211b 100644
+--- a/Makefile
++++ b/Makefile
+@@ -84,6 +84,7 @@ INFILES = \
+ 	tlp.rules \
+ 	tlp-readconfs \
+ 	tlp-run-on \
++	tlp-sleep.service \
+ 	tlp.service \
+ 	tlp-stat \
+ 	tlp.upstart \
+@@ -115,7 +116,6 @@ SHFILES = \
+ 	tlp-rdw-udev.in \
+ 	tlp-rf.in \
+ 	tlp-run-on.in \
+-	tlp-sleep \
+ 	tlp-sleep.elogind \
+ 	tlp-stat.in \
+ 	tlp-usb-udev.in \
+@@ -172,7 +172,7 @@ ifneq ($(TLP_NO_INIT),1)
+ endif
+ ifneq ($(TLP_WITH_SYSTEMD),0)
+ 	install -D -m 644 tlp.service $(_SYSD)/tlp.service
+-	install -D -m 755 tlp-sleep $(_SDSL)/tlp
++	install -D -m 644 tlp-sleep.service $(_SYSD)/tlp-sleep.service
+ endif
+ ifneq ($(TLP_WITH_ELOGIND),0)
+ 	install -D -m 755 tlp-sleep.elogind $(_ELOD)/49-tlp-sleep
+@@ -240,7 +240,7 @@ uninstall-tlp:
+ 	rm $(_ULIB)/rules.d/85-tlp.rules
+ 	rm -f $(_SYSV)/tlp
+ 	rm -f $(_SYSD)/tlp.service
+-	rm -f $(_SDSL)/tlp-sleep
++	rm -f $(_SYSD)/tlp-sleep.service
+ 	rm -f $(_ELOD)/49-tlp-sleep
+ 	rm -f $(_SHCPL)/tlp-stat
+ 	rm -f $(_SHCPL)/bluetooth
+diff --git a/tlp-sleep.service.in b/tlp-sleep.service.in
+new file mode 100644
+index 0000000..79c202c
+--- /dev/null
++++ b/tlp-sleep.service.in
+@@ -0,0 +1,19 @@
++# tlp - systemd suspend/resume service
++#
++# Copyright (c) 2021 Thomas Koch <linrunner at gmx.net> and others.
++# This software is licensed under the GPL v2 or later.
++
++[Unit]
++Description=TLP suspend/resume
++Before=sleep.target
++StopWhenUnneeded=yes
++Documentation=https://linrunner.de/tlp
++
++[Service]
++Type=oneshot
++RemainAfterExit=yes
++ExecStart=@TLP_SBIN@/tlp suspend
++ExecStop=@TLP_SBIN@/tlp resume
++
++[Install]
++WantedBy=sleep.target
+-- 
+2.41.0
+
diff --git a/nixpkgs/pkgs/tools/misc/tmate/default.nix b/nixpkgs/pkgs/tools/misc/tmate/default.nix
new file mode 100644
index 000000000000..9e1cbdee1277
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmate/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, cmake
+, libtool
+, pkg-config
+, zlib
+, openssl
+, libevent
+, ncurses
+, ruby
+, msgpack-c
+, libssh
+}:
+
+stdenv.mkDerivation {
+  pname = "tmate";
+  version = "unstable-2022-08-07";
+
+  src = fetchFromGitHub {
+    owner  = "tmate-io";
+    repo   = "tmate";
+    rev    = "ac919516f4f1b10ec928e20b3a5034d18f609d68";
+    sha256 = "sha256-t96gfmAMcsjkGf8pvbEx2fNx4Sj3W6oYoQswB3Dklb8=";
+  };
+
+  postPatch = ''
+    substituteInPlace configure.ac \
+      --replace 'msgpack >= 1.1.0' 'msgpack-c >= 1.1.0'
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    libtool
+    zlib
+    openssl
+    libevent
+    ncurses
+    ruby
+    msgpack-c
+    libssh
+  ];
+
+  dontUseCmakeConfigure = true;
+
+  meta = with lib; {
+    homepage    = "https://tmate.io/";
+    description = "Instant Terminal Sharing";
+    license     = licenses.mit;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ ck3d ];
+    mainProgram = "tmate";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmpwatch/default.nix b/nixpkgs/pkgs/tools/misc/tmpwatch/default.nix
new file mode 100644
index 000000000000..873b7c0f6f0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmpwatch/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, psmisc }:
+
+stdenv.mkDerivation rec {
+  pname = "tmpwatch";
+  version = "2.11";
+
+  src = fetchurl {
+    url = "https://releases.pagure.org/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "1m5859ngwx61l1i4s6fja2avf1hyv6w170by273w8nsin89825lk";
+  };
+
+  configureFlags = [ "--with-fuser=${psmisc}/bin/fuser" ];
+
+  meta = with lib; {
+    homepage = "https://pagure.io/tmpwatch";
+    description = "Recursively searches through specified directories and removes files which have not been accessed in a specified period of time";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ vlstill ];
+    platforms = platforms.unix;
+    mainProgram = "tmpwatch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix b/nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix
new file mode 100644
index 000000000000..7da4293dc0c8
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux-cssh/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, tmux }:
+
+stdenv.mkDerivation {
+  pname = "tmux-cssh";
+  version = "unstable-2015-10-15";
+
+  src = fetchFromGitHub {
+    owner = "dennishafemann";
+    repo = "tmux-cssh";
+    rev = "21750733c5b6fa2fe23b9e50ce69d8564f2f742a";
+    sha256 = "473e27f3b69864b905d1340d97917cd202705c761611eb3aec4c24521f69b52c";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp tmux-cssh $out/bin/tmux-cssh
+    wrapProgram $out/bin/tmux-cssh --suffix PATH : ${tmux}/bin
+  '';
+
+  meta = {
+    homepage = "https://github.com/dennishafemann/tmux-cssh";
+    description = "SSH to multiple hosts at the same time using tmux";
+
+    longDescription =
+      ''
+      tmux is a terminal multiplexer, like e.g. screen, which gives you a
+      possibility to use multiple virtual terminal session within one real
+      terminal session. tmux-cssh (tmux-cluster-ssh) sets a comfortable and
+      easy to use functionality, clustering and synchronizing virtual
+      tmux-sessions, on top of tmux. No need for a x-server or x-forwarding.
+      tmux-cssh works just with tmux and in an low-level terminal-environment,
+      like most server do.
+      '';
+
+    license = lib.licenses.asl20;
+
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ zimbatm ];
+    mainProgram = "tmux-cssh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux-mem-cpu-load/default.nix b/nixpkgs/pkgs/tools/misc/tmux-mem-cpu-load/default.nix
new file mode 100644
index 000000000000..1e197ef162ea
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux-mem-cpu-load/default.nix
@@ -0,0 +1,24 @@
+{ stdenv, lib, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "tmux-mem-cpu-load";
+  version = "3.8.0";
+
+  src = fetchFromGitHub {
+    owner = "thewtex";
+    repo = "tmux-mem-cpu-load";
+    rev = "v${version}";
+    sha256 = "sha256-dRHV2XF3NFzd4HT9SbRnEn8U40QTnAUJDsM51NA9fEk=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "CPU, RAM, and load monitor for use with tmux";
+    homepage = "https://github.com/thewtex/tmux-mem-cpu-load";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ thomasjm ];
+    platforms = platforms.all;
+    mainProgram = "tmux-mem-cpu-load";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux-sessionizer/default.nix b/nixpkgs/pkgs/tools/misc/tmux-sessionizer/default.nix
new file mode 100644
index 000000000000..207962a82e35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux-sessionizer/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, rustPlatform
+, openssl
+, pkg-config
+, Security
+, testers
+, tmux-sessionizer
+}:
+let
+
+  name = "tmux-sessionizer";
+  version = "0.4.2";
+
+in
+rustPlatform.buildRustPackage {
+  pname = name;
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "jrmoulton";
+    repo = name;
+    rev = "v${version}";
+    hash = "sha256-n6DXqsq3TsNob/fEqeOwNTVLPAvCr7CDN9qtXAiOMWQ=";
+  };
+
+  cargoHash = "sha256-e2U6x7HFoFbZxtJvY/ZpgEWagIrdRxPVZw2rP5aDIqg=";
+
+  passthru.tests.version = testers.testVersion {
+    package = tmux-sessionizer;
+    version = version;
+  };
+
+  # Needed to get openssl-sys to use pkg-config.
+  OPENSSL_NO_VENDOR = 1;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "The fastest way to manage projects as tmux sessions";
+    homepage = "https://github.com/jrmoulton/tmux-sessionizer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vinnymeller mrcjkb ];
+    mainProgram = "tms";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix b/nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix
new file mode 100644
index 000000000000..47fce699fb0c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux-xpanes/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, openssl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "tmux-xpanes";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "greymd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PF2K2A49c5djQqSO7ZLFyBwPZaJRK58qZTFpY7n+Z0w=";
+  };
+
+  buildInputs = [ openssl perl ];
+
+  installPhase = ''
+    # Create directories.
+    install -m 755 -d $out/bin/
+    install -m 755 -d $out/share/man/man1/
+
+    # Perform installation.
+    install -m 755 bin/* $out/bin/
+    install -m 644 man/*.1 $out/share/man/man1/
+  '';
+
+  meta = with lib; {
+    description = "tmux-based terminal divider";
+    homepage = "https://github.com/greymd/tmux-xpanes";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ monsieurp ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmux/default.nix b/nixpkgs/pkgs/tools/misc/tmux/default.nix
new file mode 100644
index 000000000000..913310ec7a47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmux/default.nix
@@ -0,0 +1,112 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, bison
+, libevent
+, ncurses
+, pkg-config
+, runCommand
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd, systemd
+, withUtf8proc ? true, utf8proc # gets Unicode updates faster than glibc
+, withUtempter ? stdenv.isLinux && !stdenv.hostPlatform.isMusl, libutempter
+, withSixel ? true
+}:
+
+let
+
+  bashCompletion = fetchFromGitHub {
+    owner = "imomaliev";
+    repo = "tmux-bash-completion";
+    rev = "f5d53239f7658f8e8fbaf02535cc369009c436d6";
+    sha256 = "0sq2g3w0h3mkfa6qwqdw93chb5f1hgkz5vdl8yw8mxwdqwhsdprr";
+  };
+
+in
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "tmux";
+  version = "3.4";
+
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "tmux";
+    repo = "tmux";
+    rev = finalAttrs.version;
+    hash = "sha256-RX3RZ0Mcyda7C7im1r4QgUxTnp95nfpGgQ2HRxr0s64=";
+  };
+
+  patches = [(fetchpatch {
+    url = "https://github.com/tmux/tmux/commit/2d1afa0e62a24aa7c53ce4fb6f1e35e29d01a904.diff";
+    hash = "sha256-mDt5wy570qrUc0clGa3GhZFTKgL0sfnQcWJEJBKAbKs=";
+  })];
+
+  nativeBuildInputs = [
+    pkg-config
+    autoreconfHook
+    bison
+  ];
+
+  buildInputs = [
+    ncurses
+    libevent
+  ] ++ lib.optionals withSystemd [ systemd ]
+  ++ lib.optionals withUtf8proc [ utf8proc ]
+  ++ lib.optionals withUtempter [ libutempter ];
+
+  configureFlags = [
+    "--sysconfdir=/etc"
+    "--localstatedir=/var"
+  ] ++ lib.optionals withSystemd [ "--enable-systemd" ]
+  ++ lib.optionals withSixel [ "--enable-sixel" ]
+  ++ lib.optionals withUtempter [ "--enable-utempter" ]
+  ++ lib.optionals withUtf8proc [ "--enable-utf8proc" ];
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    mkdir -p $out/share/bash-completion/completions
+    cp -v ${bashCompletion}/completions/tmux $out/share/bash-completion/completions/tmux
+  '' + lib.optionalString stdenv.isDarwin ''
+    mkdir $out/nix-support
+    echo "${finalAttrs.passthru.terminfo}" >> $out/nix-support/propagated-user-env-packages
+  '';
+
+  passthru = {
+    terminfo = runCommand "tmux-terminfo" { nativeBuildInputs = [ ncurses ]; } (if stdenv.isDarwin then ''
+      mkdir -p $out/share/terminfo/74
+      cp -v ${ncurses}/share/terminfo/74/tmux $out/share/terminfo/74
+      # macOS ships an old version (5.7) of ncurses which does not include tmux-256color so we need to provide it from our ncurses.
+      # However, due to a bug in ncurses 5.7, we need to first patch the terminfo before we can use it with macOS.
+      # https://gpanders.com/blog/the-definitive-guide-to-using-tmux-256color-on-macos/
+      tic -o $out/share/terminfo -x <(TERMINFO_DIRS=${ncurses}/share/terminfo infocmp -x tmux-256color | sed 's|pairs#0x10000|pairs#32767|')
+    '' else ''
+      mkdir -p $out/share/terminfo/t
+      ln -sv ${ncurses}/share/terminfo/t/{tmux,tmux-256color,tmux-direct} $out/share/terminfo/t
+    '');
+  };
+
+  meta = {
+    homepage = "https://tmux.github.io/";
+    description = "Terminal multiplexer";
+    longDescription = ''
+      tmux is intended to be a modern, BSD-licensed alternative to programs such as GNU screen. Major features include:
+        * A powerful, consistent, well-documented and easily scriptable command interface.
+        * A window may be split horizontally and vertically into panes.
+        * Panes can be freely moved and resized, or arranged into preset layouts.
+        * Support for UTF-8 and 256-colour terminals.
+        * Copy and paste with multiple buffers.
+        * Interactive menus to select windows, sessions or clients.
+        * Change the current window by searching for text in the target.
+        * Terminal locking, manually or after a timeout.
+        * A clean, easily extended, BSD-licensed codebase, under active development.
+    '';
+    changelog = "https://github.com/tmux/tmux/raw/${finalAttrs.version}/CHANGES";
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.unix;
+    mainProgram = "tmux";
+    maintainers = with lib.maintainers; [ thammers fpletz ];
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/tmuxinator/default.nix b/nixpkgs/pkgs/tools/misc/tmuxinator/default.nix
new file mode 100644
index 000000000000..f5fdbc698f86
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmuxinator/default.nix
@@ -0,0 +1,54 @@
+{ lib, buildRubyGem, ruby, installShellFiles }:
+
+# Cannot use bundleEnv because bundleEnv create stub with
+# BUNDLE_FROZEN='1' environment variable set, which broke everything
+# that rely on Bundler that runs under Tmuxinator.
+
+buildRubyGem rec {
+  inherit ruby;
+  name = "${gemName}-${version}";
+  gemName = "tmuxinator";
+  version = "3.1.2";
+  source.sha256 = "t96v3RwBfezB644RVbTmO8i/xh1F23WQC8PBxc/msjg=";
+
+  erubis = buildRubyGem rec {
+    inherit ruby;
+    name = "ruby${ruby.version}-${gemName}-${version}";
+    gemName = "erubis";
+    version = "2.7.0";
+    source.sha256 = "1fj827xqjs91yqsydf0zmfyw9p4l2jz5yikg3mppz6d7fi8kyrb3";
+  };
+
+  thor = buildRubyGem rec {
+    inherit ruby;
+    name = "ruby${ruby.version}-${gemName}-${version}";
+    gemName = "thor";
+    version = "1.3.0";
+    source.sha256 = "sha256-Gtx/nls2VaaMcTk/7ovQrQiNFO6Og6C3NybyPLs8p8M=";
+  };
+
+  xdg = buildRubyGem rec {
+    inherit ruby;
+    name = "ruby${ruby.version}-${gemName}-${version}";
+    gemName = "xdg";
+    version = "2.2.5";
+    source.sha256 = "04xr4cavnzxlk926pkji7b5yiqy4qsd3gdvv8mg6jliq6sczg9gk";
+  };
+
+  propagatedBuildInputs = [ erubis thor xdg ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion $GEM_HOME/gems/${gemName}-${version}/completion/tmuxinator.{bash,zsh,fish}
+  '';
+
+  meta = with lib; {
+    description = "Manage complex tmux sessions easily";
+    homepage    = "https://github.com/tmuxinator/tmuxinator";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ auntie ericsagnes ];
+    platforms   = platforms.unix;
+    mainProgram = "tmuxinator";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tmuxp/default.nix b/nixpkgs/pkgs/tools/misc/tmuxp/default.nix
new file mode 100644
index 000000000000..f0352cdda360
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tmuxp/default.nix
@@ -0,0 +1,45 @@
+{ lib, python3Packages, fetchPypi, installShellFiles }:
+
+let
+  pname = "tmuxp";
+  version = "1.46.0";
+  hash = "sha256-+aXpsB4mjw9sZLalv3knW8okP+mh2P/nbZCiCwa3UBU=";
+in
+python3Packages.buildPythonApplication {
+  inherit pname version;
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version hash;
+  };
+
+  nativeBuildInputs = [
+    python3Packages.poetry-core
+    python3Packages.shtab
+    installShellFiles
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    colorama
+    libtmux
+    pyyaml
+  ];
+
+  # No tests in archive
+  doCheck = false;
+
+  postInstall = ''
+    installShellCompletion --cmd tmuxp \
+      --bash <(shtab --shell=bash -u tmuxp.cli.create_parser) \
+      --zsh <(shtab --shell=zsh -u tmuxp.cli.create_parser)
+  '';
+
+  meta = {
+    description = "tmux session manager";
+    homepage = "https://tmuxp.git-pull.com/";
+    changelog = "https://github.com/tmux-python/tmuxp/raw/v${version}/CHANGES";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ otavio ];
+    mainProgram = "tmuxp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/toastify/default.nix b/nixpkgs/pkgs/tools/misc/toastify/default.nix
new file mode 100644
index 000000000000..2de5877c0f05
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/toastify/default.nix
@@ -0,0 +1,32 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, darwin }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "toastify";
+  version = "0.5.4";
+
+  src = fetchFromGitHub {
+    owner = "hoodie";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-hSBh1LTfe3rQDPUryo2Swdf/yLYrOQ/Fg3Dz7ZqV3gw=";
+  };
+
+  cargoHash = "sha256-Ps2pRLpPxw+OS1ungQtVQ8beoKpc8pjzQEndMNni08k=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.Cocoa
+  ];
+
+  preBuild = lib.optionalString stdenv.isDarwin ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "A commandline tool that shows desktop notifications using notify-rust";
+    homepage = "https://github.com/hoodie/toastify";
+    changelog = "https://github.com/hoodie/toastify/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ colemickens ];
+    mainProgram = "toastify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/todo/default.nix b/nixpkgs/pkgs/tools/misc/todo/default.nix
new file mode 100644
index 000000000000..6b6c858490a1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/todo/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, openssl }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "todo";
+  version = "2.5";
+
+  src = fetchFromGitHub {
+    owner = "sioodmy";
+    repo = "todo";
+    rev = version;
+    sha256 = "oyRdXvVnCfdFM8lI1eCDHHYNWcJc0Qg0TKxQXUqNo40=";
+  };
+
+  cargoSha256 = "B0tecuBx/FFQokhfI6+xpppyG5DD8WS2+MkmPaZfMhI=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ];
+  meta = with lib; {
+    description = "Simple todo cli program written in rust";
+    homepage = "https://github.com/sioodmy/todo";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ sioodmy ];
+    mainProgram = "todo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/toilet/default.nix b/nixpkgs/pkgs/tools/misc/toilet/default.nix
new file mode 100644
index 000000000000..8fdeb8b40739
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/toilet/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, pkg-config, libcaca, toilet, testers }:
+
+stdenv.mkDerivation rec {
+  pname = "toilet";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "http://caca.zoy.org/raw-attachment/wiki/toilet/${pname}-${version}.tar.gz";
+    sha256 = "1pl118qb7g0frpgl9ps43w4sd0psjirpmq54yg1kqcclqcqbbm49";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libcaca ];
+
+  passthru.tests.version = testers.testVersion {
+    package = toilet;
+  };
+
+  meta = with lib; {
+    description = "Display large colourful characters in text mode";
+    homepage = "http://caca.zoy.org/wiki/toilet";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.all;
+    mainProgram = "toilet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/topgrade/default.nix b/nixpkgs/pkgs/tools/misc/topgrade/default.nix
new file mode 100644
index 000000000000..3b632348f263
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/topgrade/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rustPlatform
+, AppKit
+, Cocoa
+, Foundation
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "topgrade";
+  version = "14.0.1";
+
+  src = fetchFromGitHub {
+    owner = "topgrade-rs";
+    repo = "topgrade";
+    rev = "v${version}";
+    hash = "sha256-opTMV+OH8PR9SxBWj1o8xSngK0QdindDcXyd6TRjdvI=";
+  };
+
+  cargoHash = "sha256-pgYrUZAxoyllQp1HuVhbLR3za+Gx0l8Z2/Zq/KCOKZg=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    AppKit
+    Cocoa
+    Foundation
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.isDarwin [
+    "-framework"
+    "AppKit"
+  ]);
+
+  postInstall = ''
+    installShellCompletion --cmd topgrade \
+      --bash <($out/bin/topgrade --gen-completion bash) \
+      --fish <($out/bin/topgrade --gen-completion fish) \
+      --zsh <($out/bin/topgrade --gen-completion zsh)
+
+    $out/bin/topgrade --gen-manpage > topgrade.8
+    installManPage topgrade.8
+  '';
+
+  meta = with lib; {
+    description = "Upgrade all the things";
+    homepage = "https://github.com/topgrade-rs/topgrade";
+    changelog = "https://github.com/topgrade-rs/topgrade/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ SuperSandro2000 xyenon ];
+    mainProgram = "topgrade";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/topicctl/default.nix b/nixpkgs/pkgs/tools/misc/topicctl/default.nix
new file mode 100644
index 000000000000..86debbf38800
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/topicctl/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "topicctl";
+  version = "1.16.1";
+
+  src = fetchFromGitHub {
+    owner = "segmentio";
+    repo = "topicctl";
+    rev = "v${version}";
+    sha256 = "sha256-Gx/ld651Se2mLlUG/CkHawfVBN2BsxV8w6vrnKFLHuE=";
+  };
+
+  vendorHash = "sha256-+mnnvdna1g6JE29weOJZmdO3jFp2a75dV9wK2XcWJ9s=";
+
+  ldflags = [
+    "-X main.BuildVersion=${version}"
+    "-X main.BuildCommitSha=unknown"
+    "-X main.BuildDate=unknown"
+  ];
+
+  # needs a kafka server
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool for easy, declarative management of Kafka topics";
+    inherit (src.meta) homepage;
+    license = licenses.mit;
+    maintainers = with maintainers; [ eskytthe srhb ];
+    mainProgram = "topicctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/torrenttools/default.nix b/nixpkgs/pkgs/tools/misc/torrenttools/default.nix
new file mode 100644
index 000000000000..0fa5dbffafbb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/torrenttools/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, bencode
+, catch2
+, cli11
+, cmake
+, ctre
+, expected-lite
+, fmt
+, gsl-lite
+, howard-hinnant-date
+, yaml-cpp
+, ninja
+, nlohmann_json
+, openssl
+, re2
+, sigslot
+}:
+
+stdenv.mkDerivation rec {
+  pname = "torrenttools";
+  version = "0.6.2";
+
+  srcs = [
+    (fetchFromGitHub rec {
+      owner = "fbdtemme";
+      repo = "torrenttools";
+      rev = "v${version}";
+      hash = "sha256-3rAxw4JM5ruOn0ccKnpdCnUWUPTQOUvRYz8OKU/FpJ8=";
+      name = repo;
+    })
+    (fetchFromGitHub rec {
+      owner = "fbdtemme";
+      repo = "cliprogress";
+      rev = "a887519e360e44c1ef88ea4ef7df652ea049c502";
+      hash = "sha256-nVvzez5GB57qSj2SLaxdYlkSX8rRM06H2NnLQGCDWMg=";
+      name = repo;
+    })
+    (fetchFromGitHub rec {
+      owner = "fbdtemme";
+      repo = "dottorrent";
+      rev = "38ac810d6bb3628fd3ce49150c9fb641bb5e78cd";
+      hash = "sha256-0H9h0Hud0Fd64lY0pxQ96coDOEDr5wh8v1sNT1lBxb0=";
+      name = repo;
+    })
+    (fetchFromGitHub rec {
+      owner = "fbdtemme";
+      repo = "termcontrol";
+      rev = "c53eec4efe0e163871d9eb54dc074c25cd01abf0";
+      hash = "sha256-0j78QtEkhlssVivPl709o5Pf36TzhOZ6VHaqDiH0L0I=";
+      name = repo;
+    })
+  ];
+  sourceRoot = "torrenttools";
+
+  postUnpack = ''
+    cp -pr cliprogress torrenttools/external/cliprogress
+    cp -pr dottorrent torrenttools/external/dottorrent
+    cp -pr termcontrol torrenttools/external/termcontrol
+    chmod -R u+w -- "$sourceRoot"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    bencode
+    catch2
+    cli11
+    ctre
+    expected-lite
+    fmt
+    gsl-lite
+    howard-hinnant-date
+    yaml-cpp
+    nlohmann_json
+    openssl
+    re2
+    sigslot
+  ];
+
+  cmakeFlags = [
+    "-DTORRENTTOOLS_BUILD_TESTS:BOOL=ON"
+    "-DTORRENTTOOLS_TBB:BOOL=OFF" # Our TBB doesn't expose a CMake module.
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A CLI tool for creating, inspecting and modifying BitTorrent metafiles";
+    homepage = "https://github.com/fbdtemme/torrenttools";
+    license = licenses.mit;
+    maintainers = with maintainers; [ azahi ];
+    platforms = platforms.unix;
+    mainProgram = "torrenttools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/toybox/default.nix b/nixpkgs/pkgs/tools/misc/toybox/default.nix
new file mode 100644
index 000000000000..07ad33645849
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/toybox/default.nix
@@ -0,0 +1,79 @@
+{
+  stdenv, lib, fetchFromGitHub, which,
+  buildPackages, libxcrypt, libiconv,
+  enableStatic ? stdenv.hostPlatform.isStatic,
+  enableMinimal ? false,
+  extraConfig ? ""
+}:
+
+let
+  inherit (lib) optionals;
+in
+
+stdenv.mkDerivation rec {
+  pname = "toybox";
+  version = "0.8.10";
+
+  src = fetchFromGitHub {
+    owner = "landley";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-MMkNLhQP3ztWoRYhCU/cNXE/M+/ny41OK1SA9oM/lZg=";
+  };
+
+  depsBuildBuild = optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ buildPackages.stdenv.cc ];
+  buildInputs = [
+    libxcrypt
+  ] ++ optionals stdenv.isDarwin [
+    libiconv
+  ] ++ optionals (enableStatic && stdenv.cc.libc ? static) [
+    stdenv.cc.libc
+    stdenv.cc.libc.static
+  ];
+
+  postPatch = "patchShebangs .";
+
+  inherit extraConfig;
+  passAsFile = [ "extraConfig" ];
+
+  configurePhase = ''
+    make ${if enableMinimal then
+      "allnoconfig"
+    else
+      if stdenv.isFreeBSD then
+        "freebsd_defconfig"
+      else
+        if stdenv.isDarwin then
+          "macos_defconfig"
+        else
+          "defconfig"
+    }
+
+    cat $extraConfigPath .config > .config-
+    mv .config- .config
+
+    make oldconfig
+  '';
+
+  makeFlags = [ "PREFIX=$(out)/bin" ] ++ optionals enableStatic [ "LDFLAGS=--static" ];
+
+  installTargets = [ "install_flat" ];
+
+  # tests currently (as of 0.8.0) get stuck in an infinite loop...
+  # ...this is fixed in latest git, so doCheck can likely be enabled for next release
+  # see https://github.com/landley/toybox/commit/b928ec480cd73fd83511c0f5ca786d1b9f3167c3
+  #doCheck = true;
+  nativeCheckInputs = [ which ]; # used for tests with checkFlags = [ "DEBUG=true" ];
+  checkTarget = "tests";
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error";
+
+  meta = with lib; {
+    description = "Lightweight implementation of some Unix command line utilities";
+    homepage = "https://landley.net/toybox/";
+    license = licenses.bsd0;
+    platforms = with platforms; linux ++ darwin ++ freebsd;
+    maintainers = with maintainers; [ hhm ];
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trackma/default.nix b/nixpkgs/pkgs/tools/misc/trackma/default.nix
new file mode 100644
index 000000000000..86834e337d8c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trackma/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3
+, wrapGAppsHook
+, gobject-introspection
+, glib
+, gtk3
+, qt5
+, makeDesktopItem
+, copyDesktopItems
+, withCurses ? false
+, withGTK ? false
+, withQT ? false
+}:
+let
+  mkDesktopItem = name: desktopName: comment: terminal: makeDesktopItem {
+    inherit name desktopName comment terminal;
+    icon = "trackma";
+    exec = name + " %u";
+    type = "Application";
+    categories = [ "Network" ];
+  };
+in
+python3.pkgs.buildPythonApplication rec {
+  pname = "trackma";
+  version = "0.8.6";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "z411";
+    repo = "trackma";
+    rev = "v${version}";
+    sha256 = "qlkFQSJFjxkGd5WkNGfyAo64ys8VJLep/ZOL6icXQ4c=";
+    fetchSubmodules = true; # for anime-relations submodule
+  };
+
+  nativeBuildInputs = [ copyDesktopItems python3.pkgs.poetry-core ]
+    ++ lib.optionals withGTK [ wrapGAppsHook gobject-introspection ]
+    ++ lib.optionals withQT [ qt5.wrapQtAppsHook ];
+
+  buildInputs = lib.optionals withGTK [ glib gtk3 ];
+
+  propagatedBuildInputs = with python3.pkgs; ([ requests ]
+    ++ lib.optionals withQT [ pyqt5 ]
+    ++ lib.optionals withGTK [ pycairo pygobject3 ]
+    ++ lib.optionals withCurses [ urwid ]
+    ++ lib.optionals stdenv.isLinux [ pydbus pyinotify ]
+    ++ lib.optionals (withGTK || withQT) [ pillow ]);
+
+  dontWrapQtApps = true;
+  dontWrapGApps = true;
+
+  preFixup = lib.optional withQT "wrapQtApp $out/bin/trackma-qt"
+    ++ lib.optional withGTK "wrapGApp $out/bin/trackma-gtk";
+
+  desktopItems = lib.optional withQT (mkDesktopItem "trackma-qt" "Trackma (Qt)" "Trackma Updater (Qt-frontend)" false)
+    ++ lib.optional withGTK (mkDesktopItem "trackma-gtk" "Trackma (GTK)" "Trackma Updater (Gtk-frontend)" false)
+    ++ lib.optional withCurses (mkDesktopItem "trackma-curses" "Trackma (ncurses)" "Trackma Updater (ncurses frontend)" true);
+
+  postInstall = ''
+    install -Dvm444 $src/trackma/data/icon.png $out/share/pixmaps/trackma.png
+  '';
+
+  doCheck = false;
+
+  pythonImportsCheck = [ "trackma" ];
+
+  postDist = lib.optional (!withQT) "rm $out/bin/trackma-qt"
+    ++ lib.optional (!withGTK) "rm $out/bin/trackma-gtk"
+    ++ lib.optional (!withCurses) "rm $out/bin/trackma-curses";
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    homepage = "https://github.com/z411/trackma";
+    description = "Open multi-site list manager for Unix-like systems (ex-wMAL)";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trackma/update.sh b/nixpkgs/pkgs/tools/misc/trackma/update.sh
new file mode 100755
index 000000000000..7ad4a31f185b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trackma/update.sh
@@ -0,0 +1,8 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl jq common-updater-scripts
+
+set -eu -o pipefail
+
+version="$(curl --silent "https://api.github.com/repos/z411/trackma/releases" | jq '.[0].tag_name' --raw-output)"
+
+update-source-version trackma "${version:1}"
diff --git a/nixpkgs/pkgs/tools/misc/traefik-certs-dumper/default.nix b/nixpkgs/pkgs/tools/misc/traefik-certs-dumper/default.nix
new file mode 100644
index 000000000000..60cc47969afa
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/traefik-certs-dumper/default.nix
@@ -0,0 +1,24 @@
+{ fetchFromGitHub, buildGoModule, lib }:
+
+buildGoModule rec {
+  pname = "traefik-certs-dumper";
+  version = "2.8.3";
+
+  src = fetchFromGitHub {
+    owner = "ldez";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-dSVtowebmDA0X/PtLKktvb1+FhQ+evMoxFBXIXqZujw=";
+  };
+
+  vendorHash = "sha256-a23kTtjIaMYs3+S9rYZ6ttyCyyK6Wm2wUZQw+In/hG4=";
+  excludedPackages = "integrationtest";
+
+  meta = with lib; {
+    description = "dump ACME data from traefik to certificates";
+    homepage = "https://github.com/ldez/traefik-certs-dumper";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ nickcao ];
+    mainProgram = "traefik-certs-dumper";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trash-cli/default.nix b/nixpkgs/pkgs/tools/misc/trash-cli/default.nix
new file mode 100644
index 000000000000..7f89f7a12cde
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trash-cli/default.nix
@@ -0,0 +1,67 @@
+{ lib, fetchFromGitHub, installShellFiles, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "trash-cli";
+  version = "0.24.4.17";
+
+  src = fetchFromGitHub {
+    owner = "andreafrancia";
+    repo = "trash-cli";
+    rev = version;
+    hash = "sha256-pXDqn+QuhTE12zXq6A4GSGSCtYJ6hBahv2p9aYQXxaI=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ psutil six ];
+
+  nativeBuildInputs = with python3Packages; [
+    installShellFiles
+    shtab
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    mock
+    pytestCheckHook
+  ];
+
+  postPatch = ''
+    sed -i '/typing/d' setup.cfg
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+
+    # Create a home directory with a test file.
+    HOME="$(mktemp -d)"
+    touch "$HOME/deleteme"
+
+    # Verify that trash list is initially empty.
+    [[ $($out/bin/trash-list) == "" ]]
+
+    # Trash a test file and verify that it shows up in the list.
+    $out/bin/trash "$HOME/deleteme"
+    [[ $($out/bin/trash-list) == *" $HOME/deleteme" ]]
+
+    # Empty the trash and verify that it is empty.
+    $out/bin/trash-empty
+    [[ $($out/bin/trash-list) == "" ]]
+
+    runHook postInstallCheck
+  '';
+  postInstall = ''
+    for bin in trash-empty trash-list trash-restore trash-put trash; do
+      installShellCompletion --cmd "$bin" \
+        --bash <("$out/bin/$bin" --print-completion bash) \
+        --zsh  <("$out/bin/$bin" --print-completion zsh)
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/andreafrancia/trash-cli";
+    description = "Command line interface to the freedesktop.org trashcan";
+    maintainers = [ maintainers.rycee ];
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+    mainProgram = "trash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trashy/default.nix b/nixpkgs/pkgs/tools/misc/trashy/default.nix
new file mode 100644
index 000000000000..cc985b8f3b35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trashy/default.nix
@@ -0,0 +1,33 @@
+{ lib, rustPlatform, fetchCrate, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "trashy";
+  version = "2.0.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-1xHyhAV8hpgMngQdamRzEliyG60t+I3KfsDJi0+180o=";
+  };
+
+  cargoHash = "sha256-ZWqWtWzb+CLH1ravBb/oV+aPxplEyiC1wEFhvchcLqg=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  preFixup = ''
+    installShellCompletion --cmd trash \
+      --bash <($out/bin/trash completions bash) \
+      --fish <($out/bin/trash completions fish) \
+      --zsh <($out/bin/trash completions zsh) \
+  '';
+
+  meta = with lib; {
+    description = "A simple, fast, and featureful alternative to rm and trash-cli";
+    homepage = "https://github.com/oberblastmeister/trashy";
+    changelog = "https://github.com/oberblastmeister/trashy/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ oberblastmeister ];
+    mainProgram = "trash";
+    # darwin is unsupported due to https://github.com/Byron/trash-rs/issues/8
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trdl-client/default.nix b/nixpkgs/pkgs/tools/misc/trdl-client/default.nix
new file mode 100644
index 000000000000..e0d92c140ced
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trdl-client/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, trdl-client
+}:
+
+buildGoModule rec {
+  pname = "trdl-client";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "werf";
+    repo = "trdl";
+    rev = "v${version}";
+    hash = "sha256-umeoiEq+Cp/cKpiNxCnMDghubm3LPFPJA18ChuYmIVo=";
+  };
+
+  sourceRoot = "${src.name}/client";
+
+  vendorHash = "sha256-f7FPeR+us3WvwqzcSQLbkKv905CCIAAm+HNV2FFF8OY=";
+
+  subPackages = [ "cmd/trdl" ];
+
+  CGO_ENABLED = 0;
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/werf/trdl/client/pkg/trdl.Version=${src.rev}"
+  ];
+
+  tags = [
+    "dfrunmount"
+    "dfssh"
+  ];
+
+  # There are no tests for cmd/trdl.
+  doCheck = false;
+
+  passthru.tests.version = testers.testVersion {
+    package = trdl-client;
+    command = "trdl version";
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    description = ''
+      The universal solution for delivering your software updates securely from
+      a trusted The Update Framework (TUF) repository
+    '';
+    longDescription = ''
+      trdl is an Open Source solution providing a secure channel for delivering
+      updates from the Git repository to the end user.
+
+      The project team releases new versions of the software and switches them
+      in the release channels. Git acts as the single source of truth while
+      Vault is used as a tool to verify operations as well as populate and
+      maintain the TUF repository.
+
+      The user selects a release channel, continuously receives the latest
+      software version from the TUF repository, and uses it.
+    '';
+    homepage = "https://trdl.dev";
+    changelog = "https://github.com/werf/trdl/releases/tag/${src.rev}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ azahi ];
+    mainProgram = "trdl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tremor-rs/Cargo.lock b/nixpkgs/pkgs/tools/misc/tremor-rs/Cargo.lock
new file mode 100644
index 000000000000..a8ad6bbe9466
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tremor-rs/Cargo.lock
@@ -0,0 +1,6529 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "addr2line"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aead"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561"
+dependencies = [
+ "aes-soft",
+ "aesni",
+ "cipher",
+]
+
+[[package]]
+name = "aes-gcm"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5278b5fabbb9bd46e24aa69b2fdea62c99088e0a950a9be40e3e0101298f88da"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "ghash",
+ "subtle",
+]
+
+[[package]]
+name = "aes-soft"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072"
+dependencies = [
+ "cipher",
+ "opaque-debug",
+]
+
+[[package]]
+name = "aesni"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce"
+dependencies = [
+ "cipher",
+ "opaque-debug",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom 0.2.6",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb07d2053ccdbe10e2af2995a2f116c1330396493dc1269f6a91d0ae82e19704"
+
+[[package]]
+name = "arc-swap"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5d78ce20460b82d3fa150275ed9d55e21064fc7951177baacf86a145c4a4b1f"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
+[[package]]
+name = "async-attributes"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-broadcast"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bbd92a9bd0e9c1298118ecf8a2f825e86b12c3ec9e411573e34aaf3a0c03cdd"
+dependencies = [
+ "easy-parallel",
+ "event-listener",
+ "futures-core",
+ "parking_lot 0.11.2",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-compat"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b48b4ff0c2026db683dea961cd8ea874737f56cffca86fa84415eaddc51c00d"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "once_cell",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345fd392ab01f746c717b1357165b76f0b67a60192007b234058c9045fdcf695"
+dependencies = [
+ "bytes 0.5.6",
+ "flate2",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "xz2",
+]
+
+[[package]]
+name = "async-dup"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7427a12b8dc09291528cfb1da2447059adb4a257388c2acd6497a79d55cf6f7c"
+dependencies = [
+ "futures-io",
+ "simple-mutex",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965"
+dependencies = [
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+ "slab",
+]
+
+[[package]]
+name = "async-fs"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b3ca4f8ff117c37c278a2f7415ce9be55560b846b5bc4412aaa5d29c1c3dae2"
+dependencies = [
+ "async-lock",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd8b508d585e01084059b60f06ade4cb7415cd2e4084b71dd1cb44e7d3fb9880"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+ "tokio 0.3.7",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "async-h1"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8101020758a4fc3a7c326cb42aa99e9fa77cbfb76987c128ad956406fe1f70a7"
+dependencies = [
+ "async-channel",
+ "async-dup",
+ "async-std",
+ "futures-core",
+ "http-types",
+ "httparse",
+ "log",
+ "pin-project",
+]
+
+[[package]]
+name = "async-io"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5e18f61464ae81cde0a23e713ae8fd299580c54d697a35820cfd0625b8b0e07"
+dependencies = [
+ "concurrent-queue",
+ "futures-lite",
+ "libc",
+ "log",
+ "once_cell",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "winapi",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-native-tls"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e9e7a929bd34c68a82d58a4de7f86fffdaf97fb2af850162a7bb19dd7269b33"
+dependencies = [
+ "async-std",
+ "native-tls",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "async-net"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5373304df79b9b4395068fb080369ec7178608827306ce4d081cba51cac551df"
+dependencies = [
+ "async-io",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-process"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf2c06e30a24e8c78a3987d07f0930edf76ef35e027e7bdb063fccafdad1f60c"
+dependencies = [
+ "async-io",
+ "blocking",
+ "cfg-if",
+ "event-listener",
+ "futures-lite",
+ "libc",
+ "once_cell",
+ "signal-hook",
+ "winapi",
+]
+
+[[package]]
+name = "async-rustls"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c86f33abd5a4f3e2d6d9251a9e0c6a7e52eb1113caf893dae8429bf4a53f378"
+dependencies = [
+ "futures-lite",
+ "rustls 0.19.1",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "async-sse"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53bba003996b8fd22245cd0c59b869ba764188ed435392cf2796d03b805ade10"
+dependencies = [
+ "async-channel",
+ "async-std",
+ "http-types",
+ "log",
+ "memchr",
+ "pin-project-lite 0.1.12",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-attributes",
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "async-process",
+ "crossbeam-utils",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log",
+ "memchr",
+ "once_cell",
+ "pin-project-lite 0.2.9",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-std-resolver"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f2f8a4a203be3325981310ab243a28e6e4ea55b6519bffce05d41ab60e09ad8"
+dependencies = [
+ "async-std",
+ "async-trait",
+ "futures-io",
+ "futures-util",
+ "pin-utils",
+ "socket2",
+ "trust-dns-resolver",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-task"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9"
+
+[[package]]
+name = "async-tls"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d85a97c4a0ecce878efd3f945f119c78a646d8975340bca0398f9bb05c30cc52"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "rustls 0.18.1",
+ "webpki 0.21.4",
+ "webpki-roots 0.20.0",
+]
+
+[[package]]
+name = "async-tls"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f23d769dbf1838d5df5156e7b1ad404f4c463d1ac2c6aeb6cd943630f8a8400"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "rustls 0.19.1",
+ "webpki 0.21.4",
+ "webpki-roots 0.21.1",
+]
+
+[[package]]
+name = "async-trait"
+version = "0.1.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96cf8829f67d2eab0b2dfa42c5d0ef737e0724e4a82b01b3e292456202b19716"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "async-tungstenite"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1b71b31561643aa8e7df3effe284fa83ab1a840e52294c5f4bd7bfd8b2becbb"
+dependencies = [
+ "async-std",
+ "async-tls 0.11.0",
+ "futures-io",
+ "futures-util",
+ "log",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "tokio-rustls 0.23.4",
+ "tungstenite",
+ "webpki-roots 0.22.3",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "065374052e7df7ee4047b1160cca5e1467a12351a40b3da123c870ba0b8eda2a"
+
+[[package]]
+name = "attohttpc"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe174d1b67f7b2bafed829c09db039301eb5841f66e43be2cf60b326e7f8e2cc"
+dependencies = [
+ "flate2",
+ "http",
+ "log",
+ "url",
+]
+
+[[package]]
+name = "attohttpc"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a8bda305457262b339322106c776e3fd21df860018e566eb6a5b1aa4b6ae02d"
+dependencies = [
+ "flate2",
+ "http",
+ "log",
+ "rustls 0.18.1",
+ "serde",
+ "serde_urlencoded 0.6.1",
+ "url",
+ "webpki 0.21.4",
+ "webpki-roots 0.19.0",
+ "wildmatch",
+]
+
+[[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 = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "aws-config"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f790682283e9fa42799d4800900e5c2f9a2e67b133a276d74c2f6118f7c24ce"
+dependencies = [
+ "aws-http",
+ "aws-sdk-sso",
+ "aws-sdk-sts",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-json",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.1.0",
+ "hex",
+ "http",
+ "hyper",
+ "ring",
+ "tokio 1.18.2",
+ "tower",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-endpoint"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d31dc5bfe810432f2d87465dd6633134e097d19e1a10315446b82a63873552f7"
+dependencies = [
+ "aws-smithy-http",
+ "aws-types",
+ "http",
+ "regex",
+ "tracing",
+]
+
+[[package]]
+name = "aws-http"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d41b649924d2d925e387dc3e9860248c2fd806e783fbc69dbda264878272929"
+dependencies = [
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "aws-types",
+ "http",
+ "lazy_static",
+ "percent-encoding",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sdk-s3"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1523a776944a6207abd71e5b6ef9c32db332c0e94fb05215dfd4415ebf96705"
+dependencies = [
+ "aws-endpoint",
+ "aws-http",
+ "aws-sig-auth",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "bytes 1.1.0",
+ "http",
+ "md-5",
+ "tokio-stream",
+ "tower",
+]
+
+[[package]]
+name = "aws-sdk-sso"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ab3dfc4f61d6f5261269c15b087c2aa36a1b0570dce484fa116003696986f4e"
+dependencies = [
+ "aws-endpoint",
+ "aws-http",
+ "aws-sig-auth",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-json",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.1.0",
+ "http",
+ "tokio-stream",
+ "tower",
+]
+
+[[package]]
+name = "aws-sdk-sts"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89015f25572643bb1bcf7490da9feeecdde23eca0c1a0e98d07fdf4547f89e51"
+dependencies = [
+ "aws-endpoint",
+ "aws-http",
+ "aws-sig-auth",
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-query",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "bytes 1.1.0",
+ "http",
+ "tower",
+]
+
+[[package]]
+name = "aws-sig-auth"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75b0895f0f5e5e40851e716041882b9e44d4bb21c68d50b083ea5dcd46378cf"
+dependencies = [
+ "aws-sigv4",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-types",
+ "http",
+ "tracing",
+]
+
+[[package]]
+name = "aws-sigv4"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a415b5e9401847f97e925b2d8a6b398a4422db6dc036234a681900798e1c396e"
+dependencies = [
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "bytes 1.1.0",
+ "form_urlencoded",
+ "hex",
+ "http",
+ "once_cell",
+ "percent-encoding",
+ "regex",
+ "ring",
+ "time 0.3.9",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-async"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2659762757c7c13b87a7473a383fddd09a56cfea14528a8606255506167131d7"
+dependencies = [
+ "futures-util",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "tokio-stream",
+]
+
+[[package]]
+name = "aws-smithy-client"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba658f0c70f4d8aacf1f8d522d1e5082a86c1c3c036cb6e017aab97d0e5e32a7"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-http-tower",
+ "aws-smithy-types",
+ "bytes 1.1.0",
+ "fastrand",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls 0.22.1",
+ "lazy_static",
+ "pin-project",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-eventstream"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded4919d467cd6433809c94c6181c5f4d7601cc1456fdf1100d35d48d695256d"
+dependencies = [
+ "aws-smithy-types",
+ "bytes 1.1.0",
+ "crc32fast",
+]
+
+[[package]]
+name = "aws-smithy-http"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cb3bd864edb558c2fdad04cea99f2bafa2ad9cde4a78048273b534be8b34cf9"
+dependencies = [
+ "aws-smithy-eventstream",
+ "aws-smithy-types",
+ "bytes 1.1.0",
+ "bytes-utils",
+ "futures-core",
+ "http",
+ "http-body",
+ "hyper",
+ "once_cell",
+ "percent-encoding",
+ "pin-project",
+ "tokio 1.18.2",
+ "tokio-util 0.7.2",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-http-tower"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44dc4d903a0629df43f9787ac28db8a0fe5b62e3b8d803812c9a122b8a69ac1a"
+dependencies = [
+ "aws-smithy-http",
+ "bytes 1.1.0",
+ "http",
+ "http-body",
+ "pin-project",
+ "tower",
+ "tracing",
+]
+
+[[package]]
+name = "aws-smithy-json"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3abdf01b1642ea4eccc3a89bbe636160f9926bd81c99e5c58970ef92139f5184"
+dependencies = [
+ "aws-smithy-types",
+]
+
+[[package]]
+name = "aws-smithy-query"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e8c6411ed3eadf48253e505e0ec54fff9010732593c1163e522d473e467f5f"
+dependencies = [
+ "aws-smithy-types",
+ "urlencoding",
+]
+
+[[package]]
+name = "aws-smithy-types"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d60bf15d33cbbe6cf0708a6908fab91166187550ac963c62427d2befea8e648f"
+dependencies = [
+ "itoa 1.0.2",
+ "num-integer",
+ "ryu",
+ "time 0.3.9",
+]
+
+[[package]]
+name = "aws-smithy-xml"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7c547d21db127067775234b1dac68c584a9d389e2dcea67cc46e18640254205"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "aws-types"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40d4a682b35d27cd73ef1beebdbfcdf7686b6cbf8bb76a2983d219a17ce73559"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-client",
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "http",
+ "rustc_version 0.4.0",
+ "tracing",
+ "zeroize",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base-x"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc19a4937b4fbd3fe3379793130e42060d10627a360f2127802b10b87e7baf74"
+
+[[package]]
+name = "base64"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
+
+[[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 = "beef"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bimap"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0455254eb5c6964c4545d8bac815e1a1be4f3afe0ae695ea539c12d728d44b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.56.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da379dbebc0b76ef63ca68d8fc6e71c0f13e59432e0987e508c1820e6ab5239"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "clap 2.34.0",
+ "env_logger 0.8.4",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "which 3.1.1",
+]
+
+[[package]]
+name = "bit-set"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[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 = "block-buffer"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6ccb65d468978a086b69884437ded69a90faab3bbe6e67f242173ea728acccc"
+dependencies = [
+ "async-channel",
+ "async-task",
+ "atomic-waker",
+ "fastrand",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "bollard-stubs"
+version = "1.41.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed2f2e73fffe9455141e170fb9c1feb0ac521ec7e7dcd47a7cab72a658490fb8"
+dependencies = [
+ "chrono",
+ "serde",
+ "serde_with",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899"
+
+[[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 = "bytes-utils"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1934a3ef9cac8efde4966a92781e77713e1ba329f1d42e446c7d7eba340d8ef1"
+dependencies = [
+ "bytes 1.1.0",
+ "either",
+]
+
+[[package]]
+name = "bzip2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6afcd980b5f3a45017c57e57a2fcccbb351cc43a356ce117ef760ef8052b89b0"
+dependencies = [
+ "bzip2-sys",
+ "libc",
+]
+
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "cache-padded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
+
+[[package]]
+name = "cached-path"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f1c56d30236522ab3393a08746b138d4e16372001f42d29c88d513aeb8ab7ef"
+dependencies = [
+ "flate2",
+ "fs2",
+ "glob",
+ "indicatif",
+ "log",
+ "rand 0.8.5",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "sha2 0.10.2",
+ "tar",
+ "tempfile",
+ "thiserror",
+ "zip",
+ "zip-extensions",
+]
+
+[[package]]
+name = "cast"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a"
+dependencies = [
+ "rustc_version 0.4.0",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cexpr"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4aedb84272dbe89af497cf81375129abda4fc0a9e7c5d317498c15cc30c0d27"
+dependencies = [
+ "nom 5.1.2",
+]
+
+[[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",
+ "serde",
+ "time 0.1.43",
+ "winapi",
+]
+
+[[package]]
+name = "cidr-utils"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a0c49d94395dc29876e75966ca2176e6c7c2ab117ca99d06937faae6ca89c7b"
+dependencies = [
+ "debug-helper",
+ "num-bigint 0.4.3",
+ "num-traits",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "cipher"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a050e2153c5be08febd6734e29298e844fdb0fa21aeddd63b4eb7baa106c69b"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim 0.8.0",
+ "textwrap 0.11.0",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f1fe12880bae935d142c8702d500c63a4e8634b6c3c57ad72bf978fc7b6249a"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim 0.10.0",
+ "termcolor",
+ "textwrap 0.15.0",
+]
+
+[[package]]
+name = "clap_complete"
+version = "3.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c09fbb00fb6e20e92f785598ecbf0c118f269737490c57af28b1ed07f392be16"
+dependencies = [
+ "clap 3.2.6",
+]
+
+[[package]]
+name = "clap_derive"
+version = "3.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed6db9e867166a43a53f7199b5e4d1f522a1e5bd626654be263c999ce59df39a"
+dependencies = [
+ "heck 0.4.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5538cd660450ebeb4234cfecf8f2284b844ffc4c50531e66d584ad5b91293613"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "codespan"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3362992a0d9f1dd7c3d0e89e0ab2bb540b7a95fea8cd798090e758fda2899b5e"
+dependencies = [
+ "codespan-reporting",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
+dependencies = [
+ "cache-padded",
+]
+
+[[package]]
+name = "config"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b076e143e1d9538dde65da30f8481c2a6c44040edb8e02b9bf1351edb92ce3"
+dependencies = [
+ "lazy_static",
+ "nom 5.1.2",
+ "serde",
+]
+
+[[package]]
+name = "conquer-once"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c6d3a9775a69f6d1fe2cc888999b67ed30257d3da4d2af91984e722f2ec918a"
+dependencies = [
+ "conquer-util",
+]
+
+[[package]]
+name = "conquer-util"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e763eef8846b13b380f37dfecda401770b0ca4e56e95170237bd7c25c7db3582"
+
+[[package]]
+name = "console"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28b32d32ca44b70c3e4acd7db1babf555fa026e385fb95f18028f88848b3c31"
+dependencies = [
+ "encode_unicode",
+ "libc",
+ "once_cell",
+ "terminal_size",
+ "winapi",
+]
+
+[[package]]
+name = "const_fn"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935"
+
+[[package]]
+name = "cookie"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03a5d7b21829bc7b4bf4754a978a241ae54ea55a40f92bb20216e54096f4b951"
+dependencies = [
+ "aes-gcm",
+ "base64 0.13.0",
+ "hkdf",
+ "hmac 0.10.1",
+ "percent-encoding",
+ "rand 0.8.5",
+ "sha2 0.9.9",
+ "time 0.2.27",
+ "version_check",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cpuid-bool"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10"
+dependencies = [
+ "atty",
+ "cast",
+ "clap 2.34.0",
+ "criterion-plot",
+ "csv",
+ "itertools",
+ "lazy_static",
+ "num-traits",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_cbor",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57"
+dependencies = [
+ "cast",
+ "itertools",
+]
+
+[[package]]
+name = "cron"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76219e9243e100d5a37676005f08379297f8addfebc247613299600625c734d"
+dependencies = [
+ "chrono",
+ "nom 7.1.1",
+ "once_cell",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f25d8400f4a7a5778f0e4e52384a48cbd9b5c495d110786187fc750075277a2"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
+dependencies = [
+ "cfg-if",
+ "lazy_static",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "crypto-mac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "csv"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
+dependencies = [
+ "bstr",
+ "csv-core",
+ "itoa 0.4.8",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ct-logs"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1a816186fa68d9e426e3cb4ae4dff1fcd8e4a2c34b781bf7a822574a0d0aac8"
+dependencies = [
+ "sct 0.6.1",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "ctr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb4a30d54f7443bf3d6191dcd486aca19e67cb3c49fa7a06a319966346707e7f"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "curl"
+version = "0.4.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37d855aeef205b43f65a5001e0997d81f8efca7badad4fad7d897aa7f0d0651f"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.55+curl-7.83.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23734ec77368ec583c2e61dd3f0b0e5c98b93abe6d2a004ca06b91dd7e3e2762"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.10.0",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dashmap"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c"
+dependencies = [
+ "cfg-if",
+ "num_cpus",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3495912c9c1ccf2e18976439f4443f3fee0fd61f424ff99fde6a66b15ecb448f"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.12.1",
+ "lock_api",
+ "parking_lot_core 0.9.3",
+ "serde",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57"
+
+[[package]]
+name = "deadpool"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d126179d86aee4556e54f5f3c6bf6d9884e7cc52cef82f77ee6f90a7747616d"
+dependencies = [
+ "async-trait",
+ "config",
+ "crossbeam-queue",
+ "num_cpus",
+ "serde",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "debug-helper"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e"
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499"
+
+[[package]]
+name = "difference"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
+
+[[package]]
+name = "digest"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
+dependencies = [
+ "block-buffer 0.10.2",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "discard"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
+
+[[package]]
+name = "dissect"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36774f66ec318a73f43fb2939cac2e111570b6ff2487ebf948252451c4bcedaa"
+dependencies = [
+ "halfbrown",
+ "simd-json",
+]
+
+[[package]]
+name = "distance"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d9d8664cf849d7d0f3114a3a387d2f5e4303176d746d5a951aaddc66dfe9240"
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21e50f3adc76d6a43f5ed73b698a87d0760ca74617f60f7c3b879003536fdd28"
+
+[[package]]
+name = "easy-parallel"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946"
+
+[[package]]
+name = "either"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "elasticsearch"
+version = "7.14.0-alpha.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d853e1c104dbad916425c88e72ac5b73db65bbc22d3b8ab945174e68df91e6f0"
+dependencies = [
+ "base64 0.11.0",
+ "bytes 1.1.0",
+ "dyn-clone",
+ "lazy_static",
+ "percent-encoding",
+ "reqwest",
+ "rustc_version 0.2.3",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "url",
+ "void",
+]
+
+[[package]]
+name = "ena"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7402b94a93c24e742487327a7cd839dc9d36fec9de9fb25b09f2dae459f36c3"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73"
+dependencies = [
+ "heck 0.4.0",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "error-chain"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
+dependencies = [
+ "backtrace",
+ "version_check",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
+
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "file-mode"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773ea145485772b8d354624b32adbe20e776353d3e48c7b03ef44e3455e9815c"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "winapi",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e"
+
+[[package]]
+name = "flate2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[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 = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "futures"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite 0.2.9",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
+
+[[package]]
+name = "futures-task"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
+
+[[package]]
+name = "futures-util"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite 0.2.9",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "gcemeta"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64b740806c16b381ca8d78cb3869fb47ce5b490db28c5f19bc0336a9b9aaca6e"
+dependencies = [
+ "attohttpc 0.15.0",
+ "lazy_static",
+ "serde_json",
+]
+
+[[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 = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.10.2+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "ghash"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97304e4cd182c3846f7575ced3890c53012ce534ad9114046b0a9e00bb30a375"
+dependencies = [
+ "opaque-debug",
+ "polyval",
+]
+
+[[package]]
+name = "gimli"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4"
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "globset"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10463d9ff00a2a068db14231982f5132edebad0d7660cd956a1c30292dbcbfbd"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc"
+dependencies = [
+ "bitflags",
+ "ignore",
+ "walkdir",
+]
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fb7d06c1c8cc2a29bee7ec961009a0b2caa0793ee4900c2ffb348734ba1c8f9"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "googapis"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65e3984a414cce451bd6fa931298c2b384924ddc1b6201adec3b0c0c148dabfa"
+dependencies = [
+ "prost 0.9.0",
+ "prost-types",
+ "tonic",
+]
+
+[[package]]
+name = "gouth"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c138d157085ba4eb1aaa86e622dc348b956d5ac9d2e446b65941467ebffefdd6"
+dependencies = [
+ "attohttpc 0.17.0",
+ "gcemeta",
+ "jsonwebtoken",
+ "serde",
+ "serde_json",
+ "url",
+]
+
+[[package]]
+name = "grok"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "840fbb5c3bf23c11b93fbccddb9e93e79d2eab3e21f0e111bff1793928602670"
+dependencies = [
+ "glob",
+ "onig",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
+dependencies = [
+ "bytes 1.1.0",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio 1.18.2",
+ "tokio-util 0.7.2",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "halfbrown"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce69ed202df415a3d4a01e6f3341320ca88b9bd4f0bf37be6fa239cdea06d9bf"
+dependencies = [
+ "fxhash",
+ "hashbrown 0.12.1",
+ "serde",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
+dependencies = [
+ "ahash",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3"
+dependencies = [
+ "ahash",
+ "serde",
+]
+
+[[package]]
+name = "hdrhistogram"
+version = "7.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31672b7011be2c4f7456c4ddbcb40e7e9a4a9fad8efe49a6ebaf5f307d0109c0"
+dependencies = [
+ "base64 0.13.0",
+ "byteorder",
+ "crossbeam-channel",
+ "flate2",
+ "nom 7.1.1",
+ "num-traits",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hkdf"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51ab2f639c231793c5f6114bdb9bbe50a7dbbfcd7c7c6bd8475dec2d991e964f"
+dependencies = [
+ "digest 0.9.0",
+ "hmac 0.10.1",
+]
+
+[[package]]
+name = "hmac"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"
+dependencies = [
+ "crypto-mac",
+ "digest 0.9.0",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
+dependencies = [
+ "bytes 1.1.0",
+ "fnv",
+ "itoa 1.0.2",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes 1.1.0",
+ "http",
+ "pin-project-lite 0.2.9",
+]
+
+[[package]]
+name = "http-client"
+version = "6.5.1"
+source = "git+https://github.com/tremor-rs/http-client?rev=059b23e#059b23e5d615debe41a6a1cd1f4228579179a88c"
+dependencies = [
+ "async-h1",
+ "async-native-tls",
+ "async-std",
+ "async-tls 0.11.0",
+ "async-trait",
+ "cfg-if",
+ "dashmap 4.0.2",
+ "deadpool",
+ "futures",
+ "http-types",
+ "log",
+ "rustls 0.19.1",
+]
+
+[[package]]
+name = "http-client"
+version = "6.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e023af341b797ce2c039f7c6e1d347b68d0f7fd0bc7ac234fe69cfadcca1f89a"
+dependencies = [
+ "async-h1",
+ "async-std",
+ "async-tls 0.10.0",
+ "async-trait",
+ "cfg-if",
+ "dashmap 4.0.2",
+ "deadpool",
+ "futures",
+ "http-types",
+ "log",
+ "rustls 0.18.1",
+]
+
+[[package]]
+name = "http-types"
+version = "2.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad"
+dependencies = [
+ "anyhow",
+ "async-channel",
+ "async-std",
+ "base64 0.13.0",
+ "cookie",
+ "futures-lite",
+ "infer",
+ "pin-project-lite 0.2.9",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "serde_urlencoded 0.7.1",
+ "url",
+]
+
+[[package]]
+name = "httparse"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "496ce29bb5a52785b44e0f7ca2847ae0bb839c9bd28f69acac9b99d461c0c04c"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42dc3c131584288d375f2d07f822b0cb012d8c6fb899a5b9fdb3cb7eb9b6004f"
+dependencies = [
+ "bytes 1.1.0",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.2",
+ "pin-project-lite 0.2.9",
+ "socket2",
+ "tokio 1.18.2",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.22.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9f7a97316d44c0af9b0301e65010573a853a9fc97046d7331d7f6bc0fd5a64"
+dependencies = [
+ "ct-logs",
+ "futures-util",
+ "hyper",
+ "log",
+ "rustls 0.19.1",
+ "rustls-native-certs 0.5.0",
+ "tokio 1.18.2",
+ "tokio-rustls 0.22.0",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls 0.20.6",
+ "tokio 1.18.2",
+ "tokio-rustls 0.23.4",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes 1.1.0",
+ "hyper",
+ "native-tls",
+ "tokio 1.18.2",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[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 = "ignore"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d"
+dependencies = [
+ "crossbeam-utils",
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.1",
+ "serde",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d207dc617c7a380ab07ff572a6e52fa202a2a8f355860ac9c38e23f8196be1b"
+dependencies = [
+ "console",
+ "lazy_static",
+ "number_prefix",
+ "regex",
+]
+
+[[package]]
+name = "infer"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac"
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "723519edce41262b05d4143ceb95050e4c614f483e78e9fd9e39a8275a84ad98"
+dependencies = [
+ "socket2",
+ "widestring",
+ "winapi",
+ "winreg 0.7.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "879d54834c8c76457ef4293a689b2a8c59b076067ad77b15efafbb05f92a592b"
+
+[[package]]
+name = "itertools"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
+dependencies = [
+ "either",
+]
+
+[[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.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d"
+
+[[package]]
+name = "jobserver"
+version = "0.1.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "jsonwebtoken"
+version = "7.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afabcc15e437a6484fc4f12d0fd63068fe457bf93f1c148d3d9649c60b103f32"
+dependencies = [
+ "base64 0.12.3",
+ "pem",
+ "ring",
+ "serde",
+ "serde_json",
+ "simple_asn1",
+]
+
+[[package]]
+name = "jumphash"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6cb1d4856e6c1b02aea6b85073b45daa15af1ba17f1750f8ca8772068915da0"
+dependencies = [
+ "rand 0.8.5",
+ "siphasher",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "lalrpop"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b30455341b0e18f276fa64540aff54deafb54c589de6aca68659c63dd2d5d823"
+dependencies = [
+ "ascii-canvas",
+ "atty",
+ "bit-set",
+ "diff",
+ "ena",
+ "itertools",
+ "lalrpop-util",
+ "petgraph",
+ "pico-args",
+ "regex",
+ "regex-syntax",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.19.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcf796c978e9b4d983414f4caedc9273aa33ee214c5b887bd55fde84c85d2dc4"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "lexical"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6"
+dependencies = [
+ "lexical-core 0.8.5",
+]
+
+[[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 = "lexical-core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
+dependencies = [
+ "lexical-parse-float",
+ "lexical-parse-integer",
+ "lexical-util",
+ "lexical-write-float",
+ "lexical-write-integer",
+]
+
+[[package]]
+name = "lexical-parse-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
+dependencies = [
+ "lexical-parse-integer",
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-parse-integer"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "125e1f93e5003d4bd89758c2ca2771bfae13632df633cde581efe07c87d354e5"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-util"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc"
+dependencies = [
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862"
+dependencies = [
+ "lexical-util",
+ "lexical-write-integer",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-integer"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "libflate"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05605ab2bce11bcfc0e9c635ff29ef8b2ea83f29be257ee7d730cac3ee373093"
+dependencies = [
+ "adler32",
+ "crc32fast",
+ "libflate_lz77",
+]
+
+[[package]]
+name = "libflate_lz77"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39a734c0493409afcd49deee13c006a04e3586b9761a03543c6272c9c51f2f5a"
+dependencies = [
+ "rle-decode-fast",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
+
+[[package]]
+name = "lock_api"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+ "serde",
+ "value-bag",
+]
+
+[[package]]
+name = "log-mdc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a94d21414c1f4a51209ad204c1776a3d0765002c76c6abcb602a6f09f1e881c7"
+
+[[package]]
+name = "log4rs"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "893eaf59f4bef8e2e94302adf56385db445a0306b9823582b0b8d5a06d8822f3"
+dependencies = [
+ "anyhow",
+ "arc-swap",
+ "chrono",
+ "derivative",
+ "fnv",
+ "humantime",
+ "libc",
+ "log",
+ "log-mdc",
+ "parking_lot 0.12.1",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "serde_yaml",
+ "thiserror",
+ "thread-id",
+ "typemap",
+ "winapi",
+]
+
+[[package]]
+name = "lru"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c84e6fe5655adc6ce00787cf7dcaf8dc4f998a0565d23eafc207a8b08ca3349a"
+dependencies = [
+ "hashbrown 0.11.2",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "lz4"
+version = "1.23.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4edcb94251b1c375c459e5abe9fb0168c1c826c3370172684844f8f3f8d1a885"
+dependencies = [
+ "libc",
+ "lz4-sys",
+]
+
+[[package]]
+name = "lz4-sys"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7be8908e2ed6f31c02db8a9fa962f03e36c53fbfde437363eae3306b85d7e17"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "lzma-sys"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e06754c4acf47d49c727d5665ca9fb828851cda315ed3bd51edd148ef78a8772"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "mapr"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46a28a55dbc005b2f6f123c4058933d57add373d362f6fd3a76aab4fe6973500"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "matrixmultiply"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84"
+dependencies = [
+ "rawpointer",
+]
+
+[[package]]
+name = "md-5"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658646b21e0b72f7866c7038ab086d3d5e1cd6271f060fd37defb241949d0582"
+dependencies = [
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[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.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713d550d9b44d89174e066b7a6217ae06234c10cb47819a88290d2b353c31799"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "native-tls"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "ndarray"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dec23e6762830658d2b3d385a75aa212af2f67a4586d4442907144f3bb6a1ca8"
+dependencies = [
+ "matrixmultiply",
+ "num-complex",
+ "num-integer",
+ "num-traits",
+ "rawpointer",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nom"
+version = "5.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb4262d26ed83a1c0a33a38fe2bb15797329c85770da05e6b828ddb782627af"
+dependencies = [
+ "lexical-core 0.7.6",
+ "memchr",
+ "version_check",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fbc387afefefd5e9e39493299f3069e14a140dd34dc19b4c1c1a8fddb6a790"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
+dependencies = [
+ "hermit-abi",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf5395665662ef45796a4ff5486c5d41d29e0c09640af4c5f17fd94ee2c119c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "object"
+version = "0.28.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225"
+
+[[package]]
+name = "onig"
+version = "6.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67ddfe2c93bb389eea6e6d713306880c7f6dcc99a75b659ce145d962c861b225"
+dependencies = [
+ "bitflags",
+ "lazy_static",
+ "libc",
+ "onig_sys",
+]
+
+[[package]]
+name = "onig_sys"
+version = "69.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dd3eee045c84695b53b20255bb7317063df090b68e18bfac0abb6c39cf7f33e"
+dependencies = [
+ "bindgen",
+ "cc",
+ "pkg-config",
+]
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb81a6430ac911acb25fe5ac8f1d2af1b4ea8a4fdfda0f1ee4292af2e2d8eb0e"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5fd19fb3e0a8191c1e34935718976a3e70c112ab9a24af6d7cadccd9d90bc0"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-float"
+version = "2.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7940cf2ca942593318d07fcf2596cdca60a85c9e7fab408a5e21a4f9dcd40d87"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordered-float"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bcbab4bfea7a59c2c0fe47211a1ac4e3e96bea6eb446d704f310bc5c732ae2"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21326818e99cfe6ce1e524c2a805c189a99b5ae555a35d19f9a284b427d86afa"
+
+[[package]]
+name = "output_vt100"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.5",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core 0.9.3",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc"
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pem"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb"
+dependencies = [
+ "base64 0.13.0",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "petgraph"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pico-args"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468"
+
+[[package]]
+name = "pin-project"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[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.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
+
+[[package]]
+name = "plotters"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d88417318da0eaf0fdcdb51a0ee6c3bed624333bff8f946733049380be67ac1c"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "521fa9638fa597e1dc53e9412a4f9cefb01187ee1f7413076f9e6749e2885ba9"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "polling"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "log",
+ "wepoll-ffi",
+ "winapi",
+]
+
+[[package]]
+name = "polyval"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eebcc4aa140b9abd2bc40d9c3f7ccec842679cd79045ac3a7ac698c1a064b7cd"
+dependencies = [
+ "cpuid-bool",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "port_scanner"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "325a6d2ac5dee293c3b2612d4993b98aec1dff096b0a2dae70ed7d95784a05da"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "pretty_assertions"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c89f989ac94207d048d92db058e4f6ec7342b0971fc58d1271ca148b799b3563"
+dependencies = [
+ "ansi_term",
+ "ctor",
+ "diff",
+ "output_vt100",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a"
+dependencies = [
+ "thiserror",
+ "toml",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check",
+]
+
+[[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.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "proptest"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0d9cc07f18492d879586c92b485def06bc850da3118075cd45d50e9c95b0e5"
+dependencies = [
+ "bit-set",
+ "bitflags",
+ "byteorder",
+ "lazy_static",
+ "num-traits",
+ "quick-error 2.0.1",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "rand_xorshift",
+ "regex-syntax",
+ "rusty-fork",
+ "tempfile",
+]
+
+[[package]]
+name = "prost"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001"
+dependencies = [
+ "bytes 1.1.0",
+ "prost-derive 0.9.0",
+]
+
+[[package]]
+name = "prost"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71adf41db68aa0daaefc69bb30bcd68ded9b9abaad5d1fbb6304c4fb390e083e"
+dependencies = [
+ "bytes 1.1.0",
+ "prost-derive 0.10.1",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5"
+dependencies = [
+ "bytes 1.1.0",
+ "heck 0.3.3",
+ "itertools",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prost 0.9.0",
+ "prost-types",
+ "regex",
+ "tempfile",
+ "which 4.2.5",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc"
+dependencies = [
+ "anyhow",
+ "itertools",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a"
+dependencies = [
+ "bytes 1.1.0",
+ "prost 0.9.0",
+]
+
+[[package]]
+name = "protobuf"
+version = "2.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf7e6d18738ecd0902d30d1ad232c9125985a3422929b16c65517b38adc14f96"
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
+[[package]]
+name = "quote"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "qwal"
+version = "0.1.0"
+source = "git+https://github.com/tremor-rs/qwal#50cfb10c4091f87580c93ad950f3adea96726920"
+dependencies = [
+ "async-std",
+ "byteorder",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.3",
+]
+
+[[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 0.5.1",
+]
+
+[[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 0.6.3",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
+dependencies = [
+ "getrandom 0.2.6",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
+dependencies = [
+ "rand_core 0.6.3",
+]
+
+[[package]]
+name = "rawpointer"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
+
+[[package]]
+name = "rayon"
+version = "1.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rdkafka"
+version = "0.28.0"
+source = "git+https://github.com/fede1024/rust-rdkafka?rev=7a2355f03c9aee8d4544e89bc4b0b0b6b96826e0#7a2355f03c9aee8d4544e89bc4b0b0b6b96826e0"
+dependencies = [
+ "futures",
+ "libc",
+ "log",
+ "rdkafka-sys",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "slab",
+]
+
+[[package]]
+name = "rdkafka-sys"
+version = "4.2.0+1.8.2"
+source = "git+https://github.com/fede1024/rust-rdkafka?rev=7a2355f03c9aee8d4544e89bc4b0b0b6b96826e0#7a2355f03c9aee8d4544e89bc4b0b0b6b96826e0"
+dependencies = [
+ "cmake",
+ "libc",
+ "libz-sys",
+ "num_enum",
+ "pkg-config",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.6",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b75aa69a3f06bbcc66ede33af2af253c6f7a86b1ca0033f60c580a27074fbf92"
+dependencies = [
+ "async-compression",
+ "base64 0.13.0",
+ "bytes 1.1.0",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls 0.23.0",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite 0.2.9",
+ "rustls 0.20.6",
+ "rustls-native-certs 0.6.2",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded 0.7.1",
+ "tokio 1.18.2",
+ "tokio-native-tls",
+ "tokio-rustls 0.23.4",
+ "tokio-util 0.7.2",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots 0.22.3",
+ "winreg 0.10.1",
+]
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error 1.2.3",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin",
+ "untrusted",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rle-decode-fast"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
+
+[[package]]
+name = "rmp"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44519172358fd6d58656c86ab8e7fbc9e1490c3e8f14d35ed78ca0dd07403c9f"
+dependencies = [
+ "byteorder",
+ "num-traits",
+ "paste",
+]
+
+[[package]]
+name = "rmp-serde"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25786b0d276110195fa3d6f3f31299900cf71dfbd6c28450f3f58a0e7f7a347e"
+dependencies = [
+ "byteorder",
+ "rmp",
+ "serde",
+]
+
+[[package]]
+name = "route-recognizer"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56770675ebc04927ded3e60633437841581c285dc6236109ea25fbf3beb7b59e"
+
+[[package]]
+name = "rust-bert"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9944539b0170f138a1d3bb4e1e4a55e3f5c25286d7890a1332eb2aee9f4aa1f8"
+dependencies = [
+ "cached-path",
+ "dirs",
+ "half",
+ "lazy_static",
+ "ordered-float 3.0.0",
+ "rust_tokenizers",
+ "serde",
+ "serde_json",
+ "tch",
+ "thiserror",
+ "uuid",
+]
+
+[[package]]
+name = "rust_tokenizers"
+version = "7.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "196e3b77b07fd5bfcbc8187ecaef5d5931820d9abd6c3fe0a9dc6d3ddb035d72"
+dependencies = [
+ "csv",
+ "hashbrown 0.12.1",
+ "itertools",
+ "lazy_static",
+ "protobuf",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "unicode-normalization",
+ "unicode-normalization-alignments",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.9",
+]
+
+[[package]]
+name = "rustls"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d1126dcf58e93cee7d098dbda643b5f92ed724f1f6a63007c1116eed6700c81"
+dependencies = [
+ "base64 0.12.3",
+ "log",
+ "ring",
+ "sct 0.6.1",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "rustls"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+dependencies = [
+ "base64 0.13.0",
+ "log",
+ "ring",
+ "sct 0.6.1",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033"
+dependencies = [
+ "log",
+ "ring",
+ "sct 0.7.0",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a07b7c1885bd8ed3831c289b7870b13ef46fe0e856d288c30d9cc17d75a2092"
+dependencies = [
+ "openssl-probe",
+ "rustls 0.19.1",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7522c9de787ff061458fe9a829dc790a3f5b22dc571694fc5883f448b94d9a9"
+dependencies = [
+ "base64 0.13.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
+
+[[package]]
+name = "rusty-fork"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
+dependencies = [
+ "fnv",
+ "quick-error 1.2.3",
+ "tempfile",
+ "wait-timeout",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695"
+
+[[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 = "schannel"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
+dependencies = [
+ "lazy_static",
+ "windows-sys",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[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"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd"
+
+[[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.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+ "ordered-float 2.10.0",
+ "serde",
+]
+
+[[package]]
+name = "serde_cbor"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
+dependencies = [
+ "half",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
+dependencies = [
+ "itoa 1.0.2",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6"
+dependencies = [
+ "percent-encoding",
+ "serde",
+ "thiserror",
+]
+
+[[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_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa 1.0.2",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde",
+ "serde_with_macros",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "serenity"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "246008828de84241202b092316c4729da36c3edd8f0c17ed6893df8e414c3c9b"
+dependencies = [
+ "async-trait",
+ "async-tungstenite",
+ "base64 0.13.0",
+ "bitflags",
+ "bytes 1.1.0",
+ "cfg-if",
+ "dashmap 5.3.4",
+ "flate2",
+ "futures",
+ "mime",
+ "mime_guess",
+ "parking_lot 0.12.1",
+ "percent-encoding",
+ "reqwest",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "time 0.3.9",
+ "tokio 1.18.2",
+ "tracing",
+ "typemap_rev",
+ "url",
+]
+
+[[package]]
+name = "serial_test"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d19dbfb999a147cedbfe82f042eb9555f5b0fa4ef95ee4570b74349103d9c9f4"
+dependencies = [
+ "lazy_static",
+ "log",
+ "parking_lot 0.12.1",
+ "serial_test_derive",
+]
+
+[[package]]
+name = "serial_test_derive"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb9e2050b2be1d681f8f1c1a528bcfe4e00afa2d8995f713974f5333288659f2"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "sha1"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
+dependencies = [
+ "sha1_smol",
+]
+
+[[package]]
+name = "sha1_smol"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
+
+[[package]]
+name = "sha2"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
+dependencies = [
+ "block-buffer 0.9.0",
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.9.0",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest 0.10.3",
+]
+
+[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[package]]
+name = "shlex"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-async-std"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4aa94397e2023af5b7cff5b8d4785e935cfb77f0e4aab0cae3b26258ace556"
+dependencies = [
+ "async-io",
+ "futures-lite",
+ "libc",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simd-json"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3868f37d8473eb1410c71a8b88a5411778f72ae82bd72340b2355d1c133f2b6a"
+dependencies = [
+ "halfbrown",
+ "serde",
+ "serde_json",
+ "simdutf8",
+ "value-trait",
+]
+
+[[package]]
+name = "simd-json-derive"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23578cc01952bad471e9a6402b9e81392fdd69f3f0acc7844c2999597fcb7109"
+dependencies = [
+ "chrono",
+ "itoa 0.4.8",
+ "ryu",
+ "simd-json",
+ "simd-json-derive-int",
+ "value-trait",
+]
+
+[[package]]
+name = "simd-json-derive-int"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd11950c39dbc9c906d98a217d7fd6be29253145e5d50d45fa0ab0e3a73eb799"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "simd-json",
+ "syn",
+]
+
+[[package]]
+name = "simdutf8"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
+
+[[package]]
+name = "simple-mutex"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38aabbeafa6f6dead8cebf246fe9fae1f9215c8d29b3a69f93bd62a9e4a3dcd6"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "simple_asn1"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "692ca13de57ce0613a363c8c2f1de925adebc81b04c923ac60c5488bb44abe4b"
+dependencies = [
+ "chrono",
+ "num-bigint 0.2.6",
+ "num-traits",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
+
+[[package]]
+name = "sketches-ddsketch"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04d2ecae5fcf33b122e2e6bd520a57ccf152d2dde3b38c71039df1a6867264ee"
+
+[[package]]
+name = "slab"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
+
+[[package]]
+name = "sled"
+version = "0.34.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935"
+dependencies = [
+ "crc32fast",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "fs2",
+ "fxhash",
+ "libc",
+ "log",
+ "parking_lot 0.11.2",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+
+[[package]]
+name = "smol"
+version = "1.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85cf3b5351f3e783c1d79ab5fc604eeed8b8ae9abd36b166e8b87a089efd85e4"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-fs",
+ "async-io",
+ "async-lock",
+ "async-net",
+ "async-process",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "snap"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45456094d1983e2ee2a18fdfebce3189fa451699d0502cb8e3b49dba5ba41451"
+
+[[package]]
+name = "snmalloc-rs"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bbab242a22c735dcd4c1441fffbe7004ea91f7d8fe7902cf283d72405ef978"
+dependencies = [
+ "snmalloc-sys",
+]
+
+[[package]]
+name = "snmalloc-sys"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80756c9f5dacaa9ff49afddb77ea18e80013228128ced3c2162f13306a225dd7"
+dependencies = [
+ "cmake",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "standback"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "stdweb"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5"
+dependencies = [
+ "discard",
+ "rustc_version 0.2.3",
+ "stdweb-derive",
+ "stdweb-internal-macros",
+ "stdweb-internal-runtime",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "stdweb-derive"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "syn",
+]
+
+[[package]]
+name = "stdweb-internal-macros"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11"
+dependencies = [
+ "base-x",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha1",
+ "syn",
+]
+
+[[package]]
+name = "stdweb-internal-runtime"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
+
+[[package]]
+name = "string_cache"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213494b7a2b503146286049378ce02b482200519accc31872ee8be91fa820a08"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "phf_shared",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "strip-ansi-escapes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "011cbb39cf7c1f62871aea3cc46e5817b0937b49e9447370c93cacbe93a766d8"
+dependencies = [
+ "vte",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "surf"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "718b1ae6b50351982dedff021db0def601677f2120938b070eadb10ba4038dd7"
+dependencies = [
+ "async-std",
+ "async-trait",
+ "cfg-if",
+ "encoding_rs",
+ "futures-util",
+ "getrandom 0.2.6",
+ "http-client 6.5.2",
+ "http-types",
+ "log",
+ "mime_guess",
+ "once_cell",
+ "pin-project-lite 0.2.9",
+ "rustls 0.18.1",
+ "serde",
+ "serde_json",
+ "web-sys",
+]
+
+[[package]]
+name = "sval"
+version = "1.0.0-alpha.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45f6ee7c7b87caf59549e9fe45d6a69c75c8019e79e212a835c5da0e92f0ba08"
+
+[[package]]
+name = "syn"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syslog_loose"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c4eae4d024d7912b5bea75e54319445d0ffe7f423bb4b68a46129cdcebecaef"
+dependencies = [
+ "chrono",
+ "nom 7.1.1",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tch"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e92aba73efa51528b4d3370a3386e8ecad0941aa4e688fe900c0c37d9a894561"
+dependencies = [
+ "half",
+ "lazy_static",
+ "libc",
+ "ndarray",
+ "rand 0.8.5",
+ "thiserror",
+ "torch-sys",
+ "zip",
+]
+
+[[package]]
+name = "temp-dir"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
+
+[[package]]
+name = "tempfile"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "libc",
+ "redox_syscall",
+ "remove_dir_all",
+ "winapi",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "test-case"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "196e8a70562e252cc51eaaaee3ecddc39803d9b7fd4a772b7c7dae7cdf42a859"
+dependencies = [
+ "test-case-macros",
+]
+
+[[package]]
+name = "test-case-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8dd461f47ade621665c9f4e44b20449341769911c253275dc5cb03726cbb852c"
+dependencies = [
+ "cfg-if",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "testcontainers"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e2b1567ca8a2b819ea7b28c92be35d9f76fb9edb214321dcc86eb96023d1f87"
+dependencies = [
+ "bollard-stubs",
+ "conquer-once",
+ "futures",
+ "hex",
+ "hmac 0.12.1",
+ "log",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "sha2 0.10.2",
+ "signal-hook",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
+
+[[package]]
+name = "thiserror"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "thread-id"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fdfe0627923f7411a43ec9ec9c39c3a9b4151be313e0922042581fb6c9b717f"
+dependencies = [
+ "libc",
+ "redox_syscall",
+ "winapi",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tide"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c459573f0dd2cc734b539047f57489ea875af8ee950860ded20cf93a79a1dee0"
+dependencies = [
+ "async-h1",
+ "async-sse",
+ "async-std",
+ "async-trait",
+ "futures-util",
+ "http-client 6.5.2",
+ "http-types",
+ "kv-log-macro",
+ "log",
+ "pin-project-lite 0.2.9",
+ "route-recognizer",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tide-rustls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a85b568b611840ba794ae749d4fa8b345b9f71a9c02b82cf0c28ff076fde6b7"
+dependencies = [
+ "async-dup",
+ "async-h1",
+ "async-rustls",
+ "async-std",
+ "rustls 0.19.1",
+ "tide",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.2.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242"
+dependencies = [
+ "const_fn",
+ "libc",
+ "standback",
+ "stdweb",
+ "time-macros",
+ "version_check",
+ "winapi",
+]
+
+[[package]]
+name = "time"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd"
+dependencies = [
+ "itoa 1.0.2",
+ "libc",
+ "num_threads",
+ "serde",
+]
+
+[[package]]
+name = "time-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1"
+dependencies = [
+ "proc-macro-hack",
+ "time-macros-impl",
+]
+
+[[package]]
+name = "time-macros-impl"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "standback",
+ "syn",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+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.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46409491c9375a693ce7032101970a54f8a2010efb77e13f70788f0d84489e39"
+dependencies = [
+ "autocfg",
+ "num_cpus",
+ "pin-project-lite 0.2.9",
+ "slab",
+]
+
+[[package]]
+name = "tokio"
+version = "1.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4903bf0427cf68dddd5aa6a93220756f8be0c34fcfa9f5e6191e103e15a31395"
+dependencies = [
+ "bytes 1.1.0",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "once_cell",
+ "pin-project-lite 0.2.9",
+ "socket2",
+ "tokio-macros",
+ "winapi",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
+dependencies = [
+ "native-tls",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
+dependencies = [
+ "rustls 0.19.1",
+ "tokio 1.18.2",
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls 0.20.6",
+ "tokio 1.18.2",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3"
+dependencies = [
+ "futures-core",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.6.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507"
+dependencies = [
+ "bytes 1.1.0",
+ "futures-core",
+ "futures-sink",
+ "log",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f988a1a1adc2fb21f9c12aa96441da33a1728193ae0b95d2be22dbd17fcb4e5c"
+dependencies = [
+ "bytes 1.1.0",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite 0.2.9",
+ "tokio 1.18.2",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "tonic"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff08f4649d10a70ffa3522ca559031285d8e421d727ac85c60825761818f5d0a"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "base64 0.13.0",
+ "bytes 1.1.0",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost 0.9.0",
+ "prost-derive 0.9.0",
+ "tokio 1.18.2",
+ "tokio-rustls 0.22.0",
+ "tokio-stream",
+ "tokio-util 0.6.10",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+ "tracing-futures",
+]
+
+[[package]]
+name = "tonic-build"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757"
+dependencies = [
+ "proc-macro2",
+ "prost-build",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "torch-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bf1a3614ddc8b08054bf11334183e8d049f274b006735d250f82b9cc1f08b1c"
+dependencies = [
+ "anyhow",
+ "cc",
+ "curl",
+ "libc",
+ "zip",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a89fd63ad6adf737582df5db40d286574513c69a11dac5214dc3b5603d6713e"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap",
+ "pin-project",
+ "pin-project-lite 0.2.9",
+ "rand 0.8.5",
+ "slab",
+ "tokio 1.18.2",
+ "tokio-util 0.7.2",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62"
+
+[[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.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09"
+dependencies = [
+ "cfg-if",
+ "log",
+ "pin-project-lite 0.2.9",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f"
+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",
+ "tracing",
+]
+
+[[package]]
+name = "traitobject"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
+
+[[package]]
+name = "tremor-api"
+version = "0.12.4"
+dependencies = [
+ "async-std",
+ "env_logger 0.9.0",
+ "halfbrown",
+ "http-types",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_yaml",
+ "simd-json",
+ "surf",
+ "tide",
+ "tremor-common",
+ "tremor-pipeline",
+ "tremor-runtime",
+ "tremor-script",
+ "tremor-value",
+]
+
+[[package]]
+name = "tremor-cli"
+version = "0.12.4"
+dependencies = [
+ "anyhow",
+ "async-std",
+ "clap 3.2.6",
+ "clap_complete",
+ "criterion",
+ "difference",
+ "env_logger 0.9.0",
+ "error-chain",
+ "float-cmp",
+ "futures",
+ "globwalk",
+ "halfbrown",
+ "http-types",
+ "lalrpop",
+ "log",
+ "log4rs",
+ "matches",
+ "port_scanner",
+ "pretty_assertions",
+ "serde",
+ "serde_derive",
+ "serde_yaml",
+ "shell-words",
+ "signal-hook",
+ "signal-hook-async-std",
+ "simd-json",
+ "snmalloc-rs",
+ "surf",
+ "tch",
+ "temp-dir",
+ "termcolor",
+ "tremor-api",
+ "tremor-common",
+ "tremor-pipeline",
+ "tremor-runtime",
+ "tremor-script",
+ "tremor-value",
+ "url",
+]
+
+[[package]]
+name = "tremor-common"
+version = "0.12.4"
+dependencies = [
+ "async-std",
+ "beef",
+ "rand 0.8.5",
+ "simd-json",
+ "simd-json-derive",
+ "url",
+]
+
+[[package]]
+name = "tremor-influx"
+version = "0.12.4"
+dependencies = [
+ "criterion",
+ "lexical",
+ "pretty_assertions",
+ "simd-json",
+ "snmalloc-rs",
+ "value-trait",
+]
+
+[[package]]
+name = "tremor-kv"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a82ccffbb76310036aeda49e2e328c7dc9fac907f76e1929db3a04233b1f98ea"
+dependencies = [
+ "serde",
+ "simd-json",
+]
+
+[[package]]
+name = "tremor-otelapis"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c6cfab2469df1b6c86199844e008f549cc6b19ca59ef0b43b68b8a62f21d63b"
+dependencies = [
+ "async-channel",
+ "prost 0.9.0",
+ "tonic",
+ "tonic-build",
+]
+
+[[package]]
+name = "tremor-pipeline"
+version = "0.12.4"
+dependencies = [
+ "async-broadcast",
+ "async-std",
+ "base64 0.13.0",
+ "beef",
+ "criterion",
+ "error-chain",
+ "halfbrown",
+ "indexmap",
+ "lazy_static",
+ "log",
+ "lru",
+ "petgraph",
+ "rand 0.8.5",
+ "regex",
+ "rust-bert",
+ "serde",
+ "serde_derive",
+ "serde_yaml",
+ "simd-json",
+ "simd-json-derive",
+ "sled",
+ "tempfile",
+ "tremor-common",
+ "tremor-script",
+ "tremor-value",
+ "url",
+ "value-trait",
+ "window",
+ "xz2",
+]
+
+[[package]]
+name = "tremor-runtime"
+version = "0.12.4"
+dependencies = [
+ "anyhow",
+ "async-broadcast",
+ "async-compat",
+ "async-compression",
+ "async-std",
+ "async-std-resolver",
+ "async-stream",
+ "async-tls 0.11.0",
+ "async-trait",
+ "async-tungstenite",
+ "aws-config",
+ "aws-sdk-s3",
+ "aws-smithy-http",
+ "aws-types",
+ "base64 0.13.0",
+ "beef",
+ "bimap",
+ "byteorder",
+ "bytes 1.1.0",
+ "chrono",
+ "cron",
+ "csv",
+ "dashmap 5.3.4",
+ "either",
+ "elasticsearch",
+ "env_logger 0.9.0",
+ "error-chain",
+ "event-listener",
+ "file-mode",
+ "futures",
+ "glob",
+ "googapis",
+ "gouth",
+ "grok",
+ "halfbrown",
+ "hashbrown 0.12.1",
+ "hdrhistogram",
+ "hex",
+ "hostname",
+ "http",
+ "http-client 6.5.1",
+ "http-types",
+ "indexmap",
+ "lazy_static",
+ "libflate",
+ "log",
+ "lz4",
+ "mapr",
+ "matches",
+ "memchr",
+ "num_cpus",
+ "pin-project-lite 0.2.9",
+ "port_scanner",
+ "pretty_assertions",
+ "proptest",
+ "prost 0.10.4",
+ "prost-types",
+ "qwal",
+ "rand 0.8.5",
+ "rdkafka",
+ "rdkafka-sys",
+ "regex",
+ "reqwest",
+ "rmp-serde",
+ "rustls 0.19.1",
+ "rustls-native-certs 0.6.2",
+ "serde",
+ "serde_derive",
+ "serde_yaml",
+ "serenity",
+ "serial_test",
+ "signal-hook",
+ "signal-hook-async-std",
+ "simd-json",
+ "simd-json-derive",
+ "sled",
+ "smol",
+ "snap",
+ "surf",
+ "syslog_loose",
+ "tempfile",
+ "test-case",
+ "testcontainers",
+ "tide",
+ "tide-rustls",
+ "tonic",
+ "tremor-common",
+ "tremor-influx",
+ "tremor-otelapis",
+ "tremor-pipeline",
+ "tremor-script",
+ "tremor-value",
+ "tungstenite",
+ "url",
+ "uuid",
+ "value-trait",
+ "xz2",
+ "zstd",
+]
+
+[[package]]
+name = "tremor-script"
+version = "0.12.4"
+dependencies = [
+ "atty",
+ "base64 0.13.0",
+ "beef",
+ "byteorder",
+ "chrono",
+ "cidr-utils",
+ "codespan",
+ "criterion",
+ "dissect",
+ "distance",
+ "downcast-rs",
+ "error-chain",
+ "float-cmp",
+ "fxhash",
+ "glob",
+ "grok",
+ "halfbrown",
+ "hdrhistogram",
+ "hostname",
+ "jumphash",
+ "lalrpop",
+ "lalrpop-util",
+ "lazy_static",
+ "matches",
+ "percent-encoding",
+ "pretty_assertions",
+ "proptest",
+ "rand 0.8.5",
+ "regex",
+ "serde",
+ "serde_derive",
+ "sha2 0.10.2",
+ "simd-json",
+ "simd-json-derive",
+ "sketches-ddsketch",
+ "strip-ansi-escapes",
+ "tempfile",
+ "termcolor",
+ "tremor-common",
+ "tremor-influx",
+ "tremor-kv",
+ "tremor-value",
+ "unicode-xid",
+ "url",
+ "value-trait",
+ "xz2",
+]
+
+[[package]]
+name = "tremor-value"
+version = "0.12.4"
+dependencies = [
+ "base64 0.13.0",
+ "beef",
+ "float-cmp",
+ "getopts",
+ "halfbrown",
+ "proptest",
+ "serde",
+ "serde_json",
+ "simd-json",
+ "simd-json-derive",
+ "value-trait",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna",
+ "ipnet",
+ "lazy_static",
+ "log",
+ "rand 0.8.5",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig",
+ "lazy_static",
+ "log",
+ "lru-cache",
+ "parking_lot 0.12.1",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "tungstenite"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d96a2dea40e7570482f28eb57afbe42d97551905da6a9400acc5c328d24004f5"
+dependencies = [
+ "base64 0.13.0",
+ "byteorder",
+ "bytes 1.1.0",
+ "http",
+ "httparse",
+ "log",
+ "rand 0.8.5",
+ "rustls 0.20.6",
+ "sha-1",
+ "thiserror",
+ "url",
+ "utf-8",
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "typemap"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6"
+dependencies = [
+ "unsafe-any",
+]
+
+[[package]]
+name = "typemap_rev"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed5b74f0a24b5454580a79abb6994393b09adf0ab8070f15827cb666255de155"
+
+[[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.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+
+[[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-normalization-alignments"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de"
+dependencies = [
+ "smallvec",
+]
+
+[[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.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
+
+[[package]]
+name = "universal-hash"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
+dependencies = [
+ "generic-array",
+ "subtle",
+]
+
+[[package]]
+name = "unsafe-any"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f"
+dependencies = [
+ "traitobject",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[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",
+ "serde",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68b90931029ab9b034b300b797048cf23723400aa757e8a2bfb9d748102f9821"
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372"
+
+[[package]]
+name = "uuid"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f"
+dependencies = [
+ "getrandom 0.2.6",
+]
+
+[[package]]
+name = "value-bag"
+version = "1.0.0-alpha.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2209b78d1249f7e6f3293657c9779fe31ced465df091bbd433a1cf88e916ec55"
+dependencies = [
+ "ctor",
+ "sval",
+ "version_check",
+]
+
+[[package]]
+name = "value-trait"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fe40a74a6f052b10668ef021c8c3ae56ab38269f9c0f401daa6ed36f96662fd"
+dependencies = [
+ "float-cmp",
+ "halfbrown",
+ "itoa 0.4.8",
+ "ryu",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "vte"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983"
+dependencies = [
+ "arrayvec",
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "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 = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744"
+
+[[package]]
+name = "web-sys"
+version = "0.3.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webpki"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739"
+dependencies = [
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f20dea7535251981a9670857150d571846545088359b28e4951d350bdaf179f"
+dependencies = [
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
+dependencies = [
+ "webpki 0.21.4",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf"
+dependencies = [
+ "webpki 0.22.0",
+]
+
+[[package]]
+name = "wepoll-ffi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "which"
+version = "3.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d011071ae14a2f6671d0b74080ae0cd8ebf3a6f8c9589a2cd45f23126fe29724"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "which"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae"
+dependencies = [
+ "either",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "widestring"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17882f045410753661207383517a6f62ec3dbeb6a4ed2acce01f0728238d1983"
+
+[[package]]
+name = "wildmatch"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f44b95f62d34113cf558c93511ac93027e03e9c29a60dd0fd70e6e025c7270a"
+
+[[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 = "window"
+version = "0.1.1"
+source = "git+https://github.com/tremor-rs/window.git?tag=v0.1.1#de8324d0fe9db0d6c011a5c0f2fc316f66f1c996"
+dependencies = [
+ "chrono",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
+dependencies = [
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.36.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
+
+[[package]]
+name = "winreg"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xmlparser"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8"
+
+[[package]]
+name = "xz2"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2"
+dependencies = [
+ "lzma-sys",
+]
+
+[[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 = "zeroize"
+version = "1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94693807d016b2f2d2e14420eb3bfcca689311ff775dcf113d74ea624b7cdf07"
+
+[[package]]
+name = "zip"
+version = "0.5.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93ab48844d61251bb3835145c521d88aa4031d7139e8485990f60ca911fa0815"
+dependencies = [
+ "byteorder",
+ "bzip2",
+ "crc32fast",
+ "flate2",
+ "thiserror",
+ "time 0.1.43",
+]
+
+[[package]]
+name = "zip-extensions"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a64c3c977bc3434ce2d4bcea8ad3c644672de0f2c402b72b9171ca80a8885d14"
+dependencies = [
+ "zip",
+]
+
+[[package]]
+name = "zstd"
+version = "0.11.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
+dependencies = [
+ "zstd-safe",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "5.0.2+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.1+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fd07cbbc53846d9145dbffdf6dd09a7a0aa52be46741825f5c97bdd4f73f12b"
+dependencies = [
+ "cc",
+ "libc",
+]
diff --git a/nixpkgs/pkgs/tools/misc/tremor-rs/default.nix b/nixpkgs/pkgs/tools/misc/tremor-rs/default.nix
new file mode 100644
index 000000000000..62ddf4e725e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tremor-rs/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, rustPlatform
+, pkg-config
+, cmake
+, openssl
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, Security
+, libiconv
+, protobuf
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tremor";
+  version = "0.12.4";
+
+  src = fetchFromGitHub {
+    owner = "tremor-rs";
+    repo = "tremor-runtime";
+    rev = "v${version}";
+    sha256 = "sha256-+cN+nMDMX4rxjs1VQnSgjBvCsjxxAd13otp9qd21SYo=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "http-client-6.5.1" = "sha256-IfFZSiNqN4kiro8qSR5HV7e0U3nadS2vaYtBF+7UPVs=";
+      "qwal-0.1.0" = "sha256-PFdqRTNht77+/7GWzJm7/wESEaO3QjTTY+aRwpK9Ddo=";
+      "rdkafka-0.28.0" = "sha256-6dUGf5TRtiGz9OCxcrPmLdhtZoOd/aJR9VgNFQC2tnQ=";
+      "window-0.1.1" = "sha256-H6w1Y8ClhXISNYmALSRSwfREOaMzccNafygc6E44NYs=";
+    };
+  };
+
+  nativeBuildInputs = [ cmake pkg-config installShellFiles rustPlatform.bindgenHook ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ Security libiconv ];
+
+  # relax lints to fix an error caused by invalid macro_export
+  # error: `log_error` isn't a valid `#[macro_export]` argument
+  # note: `#[deny(invalid_macro_export_arguments)]` implied by `#[deny(warnings)]`
+  postPatch = ''
+    substituteInPlace src/lib.rs \
+      --replace '#![deny(' '#![warn('
+  '';
+
+  # TODO export TREMOR_PATH($out/lib) variable
+  postInstall = ''
+    # Copy the standard library to $out/lib
+    cp -r ${src}/tremor-script/lib/ $out
+
+    installShellCompletion --cmd tremor \
+      --bash <($out/bin/tremor completions bash) \
+      --fish <($out/bin/tremor completions fish) \
+      --zsh <($out/bin/tremor completions zsh)
+  '';
+
+  # OPENSSL_NO_VENDOR - If set, always find OpenSSL in the system, even if the vendored feature is enabled.
+  OPENSSL_NO_VENDOR = 1;
+
+  # needed for internal protobuf c wrapper library
+  PROTOC = "${protobuf}/bin/protoc";
+  PROTOC_INCLUDE = "${protobuf}/include";
+
+  env = lib.optionalAttrs (stdenv.system == "x86_64-darwin") {
+    RUSTFLAGS = "-C target-feature=+avx,+avx2,+sse4.2";
+  };
+
+  # tests failed on x86_64-darwin with SIGILL: illegal instruction
+  doCheck = !(stdenv.system == "x86_64-darwin");
+
+  checkFlags = [
+    # all try to make a network access
+    "--skip=connectors::tests::http::server::https_server_test"
+    "--skip=connectors::tests::tcp::client::tls_client"
+    "--skip=connectors::tests::udp::udp_no_bind"
+    "--skip=connectors::tests::ws::ws_client_bad_config"
+    "--skip=connectors::tests::ws::wss_server_binary_routing"
+    "--skip=connectors::tests::ws::wss_server_text_routing"
+    "--skip=connectors::utils::tls::tests::client_config"
+  ];
+
+  cargoBuildFlags = [ "-p tremor-cli" ];
+
+  meta = with lib; {
+    description = ''
+      Early stage event processing system for unstructured data with rich
+      support for structural pattern matching, filtering and transformation
+    '';
+    homepage = "https://www.tremor.rs/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ humancalico happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tremor-rs/ls.nix b/nixpkgs/pkgs/tools/misc/tremor-rs/ls.nix
new file mode 100644
index 000000000000..ea1b30b07e81
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tremor-rs/ls.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tremor-language-server";
+  version = "0.12.4";
+
+  src = fetchFromGitHub {
+    owner = "tremor-rs";
+    repo = "tremor-language-server";
+    rev = "v${version}";
+    sha256 = "sha256-odYhpb3FkbIF1dc2DSpz3Lg+r39lhDKml9KGmbqJAtA=";
+  };
+
+  nativeBuildInputs = [ rustPlatform.bindgenHook ];
+
+  cargoSha256 = "sha256-/RKwmslhMm30QxviVV7HthDHSmTmaGZn1hdt6bNF3d4=";
+
+  meta = with lib; {
+    description = "Tremor Language Server (Trill)";
+    homepage = "https://www.tremor.rs/docs/next/getting-started/tooling";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ happysalada ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/triehash/default.nix b/nixpkgs/pkgs/tools/misc/triehash/default.nix
new file mode 100644
index 000000000000..9e70db4114a5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/triehash/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, perlPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "triehash";
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "julian-klode";
+    repo = pname;
+    rev = "debian/0.3-3";
+    hash = "sha256-LxVcYj2WKHbhNu5x/DFkxQPOYrVkNvwiE/qcODq52Lc=";
+  };
+
+  nativeBuildInputs = [
+    perlPackages.perl
+  ];
+
+  postPatch = ''
+    patchShebangs triehash.pl
+  '';
+
+  dontConfigure = true;
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -d $out/bin $out/share/doc/${pname}/ $out/share/${pname}/
+    install triehash.pl $out/bin/triehash
+    install README.md $out/share/doc/${pname}/
+    cp -r tests/ $out/share/${pname}/tests/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/julian-klode/triehash";
+    description = "Order-preserving minimal perfect hash function generator";
+    license = with licenses; mit;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = perlPackages.perl.meta.platforms;
+    mainProgram = "triehash";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/trillian/default.nix b/nixpkgs/pkgs/tools/misc/trillian/default.nix
new file mode 100644
index 000000000000..f52c8f518dd7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/trillian/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "trillian";
+  version = "1.6.0";
+  vendorHash = "sha256-tLhq6ILiKzFM1lIK0DbiIKsn1NWEI168BMaf/MOAtEo=";
+
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YHwT+ddVRyHkmXkw2vROL4PS948pOMj9UwOtHorbTAQ=";
+  };
+
+  subPackages = [
+    "cmd/trillian_log_server"
+    "cmd/trillian_log_signer"
+    "cmd/createtree"
+    "cmd/deletetree"
+    "cmd/updatetree"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/google/trillian";
+    description = "A transparent, highly scalable and cryptographically verifiable data store";
+    license = [ licenses.asl20 ];
+    maintainers = [ maintainers.adisbladis ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttchat/default.nix b/nixpkgs/pkgs/tools/misc/ttchat/default.nix
new file mode 100644
index 000000000000..5aad1527df42
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttchat/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ttchat";
+  version = "0.1.10";
+
+  src = fetchFromGitHub {
+    owner = "atye";
+    repo = "ttchat";
+    rev = "v${version}";
+    hash = "sha256-Ezlqji/j6nyCzc1jrfB1MZR4ugKAa5D5CL6wfuP6PsY=";
+  };
+
+  vendorHash = "sha256-6GcbEGC1O+lcTO+GsaVXOO69yIHMPywXJy7OFX15/eI=";
+
+  meta = with lib; {
+    description = "Connect to a Twitch channel's chat from your terminal";
+    homepage = "https://github.com/atye/ttchat";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ wolfangaukang ];
+    mainProgram = "ttchat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix b/nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix
new file mode 100644
index 000000000000..2383a96eedfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttf2pt1/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, perl, freetype }:
+
+stdenv.mkDerivation rec {
+  pname = "ttf2pt1";
+  version = "3.4.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/ttf2pt1/ttf2pt1-${version}.tgz";
+    sha256 = "1l718n4k4widx49xz7qrj4mybzb8q67kp2jw7f47604ips4654mf";
+  };
+
+  preConfigure = ''
+    find -type f | xargs sed -i 's@/usr/bin/perl@${perl}/bin/perl@'
+    mkdir -p $out
+    sed -e 's/chown/true/' \
+        -e 's/chgrp/true/' \
+        -e 's@^CFLAGS_FT =.*@CFLAGS_FT=-DUSE_FREETYPE -I${freetype.dev}/include/freetype2@' \
+        -i scripts/{inst_dir,inst_file} Makefile
+    makeFlags="INSTDIR=$out OWNER=`id -u`"
+  '';
+
+  buildInputs = [ freetype ];
+  nativeBuildInputs = [ perl ];
+
+  patches = ./gentoo-makefile.patch; # also contains the freetype patch
+
+  meta = {
+    description = "True Type to Postscript Type 3 converter, fpdf";
+    homepage = "https://ttf2pt1.sourceforge.net/index.html";
+    license = "ttf2pt1";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch b/nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch
new file mode 100644
index 000000000000..84854606131f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttf2pt1/gentoo-makefile.patch
@@ -0,0 +1,98 @@
+diff -Naur ttf2pt1-3.4.4-orig/Makefile ttf2pt1-3.4.4/Makefile
+--- ttf2pt1-3.4.4-orig/Makefile	2007-07-15 20:06:50.000000000 -0600
++++ ttf2pt1-3.4.4/Makefile	2007-07-15 20:12:40.000000000 -0600
+@@ -9,7 +9,7 @@
+ #
+ # Use GNU C even if it's not the default compiler
+ #
+-#CC=gcc
++CC=gcc
+ #
+ # Use the standard ANSI C compiler on HP-UX even if it's not default
+ #
+@@ -60,18 +60,18 @@
+ # (if the include and lib directory do not match your installation,
+ # modify them), also uncomment LIBS_FT
+ #
+-#CFLAGS_FT = -DUSE_FREETYPE -I/usr/local/include/freetype2 -I/usr/local/include
++CFLAGS_FT = -DUSE_FREETYPE -I/usr/include/freetype2 -I/usr/include
+ 
+ # 
+ # The FreeType-2 library flags (disabled by default)
+ 
+-LIBS_FT=
++#LIBS_FT=
+ 
+ # To enable use of the FreeType-2 library
+ # (if the include and lib directory do not match your installation,
+ # modify them), also uncomment CFLAGS_FT
+ #
+-#LIBS_FT= -L/usr/local/lib -lfreetype
++LIBS_FT= -L/usr/lib -lfreetype
+ 
+ #
+ # The flags for C compiler for the Autotrace library (disabled by default). 
+@@ -120,18 +120,18 @@
+ # Installation-related stuff
+ # 
+ # The base dir for installation and subdirs in it
+-INSTDIR = /usr/local
++INSTDIR = /usr
+ # for binaries
+ BINDIR = $(INSTDIR)/bin
+ # for binaries of little general interest
+ LIBXDIR = $(INSTDIR)/libexec/ttf2pt1
+ # for scripts, maps/encodings etc.
+ SHAREDIR = $(INSTDIR)/share/ttf2pt1
+-MANDIR = $(INSTDIR)/man
++MANDIR = $(INSTDIR)/share/man
+ 
+ # owner and group of installed files
+ OWNER = root
+-GROUP = bin
++GROUP = root
+ 
+ # After you have configured the Makefile, comment out the following
+ # definition:
+@@ -244,17 +244,19 @@
+ 	chmod -R go-w $(SHAREDIR)
+ 	scripts/inst_file ttf2pt1 $(BINDIR)/ttf2pt1 $(OWNER) $(GROUP) 0755
+ 	[ -f $(BINDIR)/t1asm ] || scripts/inst_file t1asm $(LIBXDIR)/t1asm $(OWNER) $(GROUP) 0755
+-	sed 's|^TTF2PT1_BINDIR=$$|TTF2PT1_BINDIR=$(BINDIR)|;\
+-		s|^TTF2PT1_LIBXDIR=$$|TTF2PT1_LIBXDIR=$(LIBXDIR)|;\
+-		s|^TTF2PT1_SHAREDIR=$$|TTF2PT1_SHAREDIR=$(SHAREDIR)|;' <scripts/convert >cvt.tmp
++	sed -e 's|^TTF2PT1_BINDIR=$$|TTF2PT1_BINDIR=$(BINDIR)|' \
++		-e 's|^TTF2PT1_LIBXDIR=$$|TTF2PT1_LIBXDIR=$(LIBXDIR)|' \
++		-e 's|^TTF2PT1_SHAREDIR=$$|TTF2PT1_SHAREDIR=$(SHAREDIR)|' \
++		<scripts/convert >cvt.tmp
+ 	scripts/inst_file cvt.tmp $(BINDIR)/ttf2pt1_convert $(OWNER) $(GROUP) 0755
+ 	scripts/inst_file cvt.tmp $(SHAREDIR)/scripts/convert $(OWNER) $(GROUP) 0755
+ 	rm cvt.tmp
+ 	scripts/inst_file scripts/x2gs $(BINDIR)/ttf2pt1_x2gs $(OWNER) $(GROUP) 0755
+ 	for i in $(MANS1); do { \
+-		sed 's|TTF2PT1_BINDIR|$(BINDIR)|;\
+-			s|TTF2PT1_LIBXDIR|$(LIBXDIR)|;\
+-			s|TTF2PT1_SHAREDIR|$(SHAREDIR)|;' <$$i >$(MANDIR)/man1/$$i \
++		sed -e 's|TTF2PT1_BINDIR|$(BINDIR)|' \
++			-e 's|TTF2PT1_LIBXDIR|$(LIBXDIR)|' \
++			-e 's|TTF2PT1_SHAREDIR|$(SHAREDIR)|' \
++			<$$i >$(MANDIR)/man1/$$i \
+ 		&& chown $(OWNER) $(MANDIR)/man1/$$i \
+ 		&& chgrp $(GROUP) $(MANDIR)/man1/$$i \
+ 		&& chmod 0644 $(MANDIR)/man1/$$i \
+
+
+
+
+
+diff -Naur ttf2pt1-3.4.4-orig/ft.c ttf2pt1-3.4.4/ft.c
+--- ttf2pt1-3.4.4-orig/ft.c	2007-07-15 20:23:43.000000000 -0600
++++ ttf2pt1-3.4.4/ft.c	2007-07-15 20:24:02.000000000 -0600
+@@ -12,6 +12,7 @@
+ #include <stdlib.h>
+ #include <ctype.h>
+ #include <sys/types.h>
++#include <ft2build.h>
+ #include <freetype/freetype.h>
+ #include <freetype/ftglyph.h>
+ #include <freetype/ftsnames.h>
diff --git a/nixpkgs/pkgs/tools/misc/ttfautohint/default.nix b/nixpkgs/pkgs/tools/misc/ttfautohint/default.nix
new file mode 100644
index 000000000000..14572d12a781
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttfautohint/default.nix
@@ -0,0 +1,50 @@
+{
+  stdenv, lib, fetchurl, pkg-config, autoreconfHook
+, freetype, harfbuzz, libiconv, qtbase
+, enableGUI ? true
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.8.3";
+  pname = "ttfautohint";
+
+  src = fetchurl {
+    url = "mirror://savannah/freetype/${pname}-${version}.tar.gz";
+    sha256 = "0zpqgihn3yh3v51ynxwr8asqrijvs4gv686clwv7bm8sawr4kfw7";
+  };
+
+  postAutoreconf = ''
+    substituteInPlace configure --replace "macx-g++" "macx-clang"
+  '';
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+
+  buildInputs = [ freetype harfbuzz libiconv ] ++ lib.optional enableGUI qtbase;
+
+  configureFlags = [ ''--with-qt=${if enableGUI then "${qtbase}/lib" else "no"}'' ];
+
+  # workaround https://github.com/NixOS/nixpkgs/issues/155458
+  preBuild = lib.optionalString stdenv.cc.isClang ''
+    rm version
+  '';
+
+  enableParallelBuilding = true;
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    description = "An automatic hinter for TrueType fonts";
+    mainProgram = "ttfautohint";
+    longDescription = ''
+      A library and two programs which take a TrueType font as the
+      input, remove its bytecode instructions (if any), and return a
+      new font where all glyphs are bytecode hinted using the
+      information given by FreeType’s auto-hinting module.
+    '';
+    homepage = "https://www.freetype.org/ttfautohint";
+    license = licenses.gpl2Plus; # or the FreeType License (BSD + advertising clause)
+    maintainers = with maintainers; [ goibhniu ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch b/nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch
new file mode 100644
index 000000000000..e1da347c64f1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttmkfdir/cstring.patch
@@ -0,0 +1,78 @@
+diff --git a/Makefile b/Makefile
+index e65b64c..52af5ed 100644
+--- a/Makefile
++++ b/Makefile
+@@ -41,8 +41,9 @@ all: ttmkfdir
+ .cpp.o:
+ 	libtool --mode=compile $(CXX) $(CXXFLAGS) -o $@ -c $^
+ 
++# ulgy hack for libtool to find .o files !!
+ ttmkfdir: ttmkfdir.o directory.o commandline.o ttf.o encoding.o parser.o builtin.o
+-	libtool --mode=link $(CXX) -o $@ $^ $(LDFLAGS)
++	libtool --mode=link $(CXX) -o $@ ./.libs/ttmkfdir.o ./.libs/directory.o ./.libs/commandline.o ./.libs/ttf.o ./.libs/encoding.o ./.libs/parser.o ./.libs/builtin.o $(LDFLAGS)
+ 
+ parser.cpp: encoding.l
+ 	    flex -i -8 -o$@ $<
+diff --git a/encoding.cpp b/encoding.cpp
+index 9035d35..b4e9733 100644
+--- a/encoding.cpp
++++ b/encoding.cpp
+@@ -2,7 +2,9 @@
+ #include <cstdio>
+ #include <cstdlib>
+ #include <cstring>
+-#include "freetype/freetype.h"
++#include <ft2build.h>
++#include FT_FREETYPE_H
++#include <freetype/ftsnames.h>
+ 
+ #include "ttmkfdir.h"
+ #include "encoding.h"
+diff --git a/encoding.h b/encoding.h
+index fc618bc..e01518f 100644
+--- a/encoding.h
++++ b/encoding.h
+@@ -6,7 +6,8 @@
+ #include <map>
+ #include <string>
+ 
+-#include "freetype/freetype.h"
++#include <ft2build.h>
++#include FT_FREETYPE_H
+ 
+ #include "util.h"
+ 
+diff --git a/ttf.cpp b/ttf.cpp
+index 1dda774..97b37f3 100644
+--- a/ttf.cpp
++++ b/ttf.cpp
+@@ -239,7 +239,7 @@ Face::FontFamilyName (void) const
+ 	for (i = 0; i < n; i++) {
+ 	    if ((fterror = FT_Get_Sfnt_Name (face, i, &NamePtr)) != FT_Err_Ok) {
+                     std::cout << "Warning: Can't SFNT name : " << FileName << "(" << fterror << ")" << std::endl;
+-	            return;
++	            return 0;
+             };
+             platform = NamePtr.platform_id;
+             encoding = NamePtr.encoding_id;
+diff --git a/ttf.h b/ttf.h
+index 4261ef8..c4a0f1f 100644
+--- a/ttf.h
++++ b/ttf.h
+@@ -3,13 +3,14 @@
+ #define TTF_H__
+ 
+ #include <string>
++#include <ft2build.h>
++#include FT_FREETYPE_H
+ #include "freetype/freetype.h"
+ #include "freetype/tttables.h"
+ #include "freetype/ftsnames.h"
+ #include "freetype/ttnameid.h"
+ #include "freetype/fterrors.h"
+-#include "freetype/ftmodule.h"
+-
++#include "freetype/ftmodapi.h"
+ #include "util.h"
+ #include "encoding.h"
+ 
diff --git a/nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix b/nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix
new file mode 100644
index 000000000000..6edf9cc4ef98
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttmkfdir/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, freetype, libtool, flex, bison, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "ttf-mkfontdir";
+  version = "3.0.9-6";
+
+  src = fetchurl {
+    url = "http://mirror.fsf.org/trisquel/pool/main/t/ttmkfdir/ttmkfdir_3.0.9.orig.tar.gz";
+    sha256 = "0n6bmmndmp4c1myisvv7cby559gzgvwsw4rfw065a3f92m87jxiq";
+  };
+
+  # all the patches up from ttmkfdir-3.0.9/Makefile should be reviewed by someone
+  # who knows more about C/C++ ..
+  patches =
+    [ (fetchurl {
+        url = "http://mirror.fsf.org/trisquel/pool/main/t/ttmkfdir/ttmkfdir_3.0.9-6.diff.gz";
+        sha256 = "141kxaf2by8nf87hqyszaxi0n7nnmswr1nh2i5r5bsvxxmaj9633";
+      })
+
+      ./cstring.patch # also fixes some other compilation issues (freetype includes)
+    ];
+
+  # cross-compilation fixes:
+  # - fix libtool, the reason it does not work in nativeBuildInputs is complicated
+  #   see https://github.com/NixOS/nixpkgs/pull/192878 for more info
+  # - freetype-config doesn't properly support cross-compilation, but is just a thin
+  #   wrapper around pkg-config anyways
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "libtool " "${libtool}/bin/libtool --tag=CXX " \
+      --replace "freetype-config" "${stdenv.cc.targetPrefix}pkg-config freetype2"
+  '';
+
+  makeFlags = [ "DESTDIR=${placeholder "out"}" "BINDIR=/bin" "CXX=${stdenv.cc.targetPrefix}c++" ];
+
+  nativeBuildInputs = [ flex bison pkg-config ];
+  buildInputs = [ freetype ];
+
+  meta = {
+    description = "Create fonts.dir for TTF font directory";
+    platforms = lib.platforms.linux;
+    mainProgram = "ttmkfdir";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttwatch/default.nix b/nixpkgs/pkgs/tools/misc/ttwatch/default.nix
new file mode 100644
index 000000000000..273d34ffdb8e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttwatch/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub
+, cmake, perl, pkg-config
+, openssl, curl, libusb1, protobufc
+, enableUnsafe ? false }:
+
+stdenv.mkDerivation {
+  pname = "ttwatch";
+  version = "2020-06-24";
+
+  src = fetchFromGitHub {
+    owner = "ryanbinns";
+    repo = "ttwatch";
+    rev = "260aff5869fd577d788d86b546399353d9ff72c1";
+    sha256 = "0yd2hs9d03gfvwm1vywpg2qga6x5c74zrj665wf9aa8gmn96hv8r";
+  };
+
+  nativeBuildInputs = [ cmake perl pkg-config ];
+  buildInputs = [ openssl curl libusb1 protobufc ];
+
+  cmakeFlags = lib.optionals enableUnsafe [ "-Dunsafe=on" ];
+
+  preFixup = ''
+    chmod +x $out/bin/ttbin2mysports
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ryanbinns/ttwatch";
+    description = "Linux TomTom GPS Watch Utilities";
+    maintainers = with maintainers; [ dotlambda ];
+    license = licenses.mit;
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tty-clock/default.nix b/nixpkgs/pkgs/tools/misc/tty-clock/default.nix
new file mode 100644
index 000000000000..0abb0c668be0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tty-clock/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ncurses, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "tty-clock";
+  version = "2.3+unstable=2021-04-07";
+
+  src = fetchFromGitHub {
+    owner = "xorg62";
+    repo = "tty-clock";
+    # Use unreleased version to pull in fix for ncurses-6.3
+    rev = "9e00c32098524c30dac4dab701f7e33f8bc7c880";
+    sha256 = "14jrzz06jr29887bxgad1x6kd26c2fnqrc26864wqm3838fpcqw0";
+  };
+
+  patches = [
+    # Pull upstream patch pending inclusion fir more ncurses-6.3 fixes:
+    #  https://github.com/xorg62/tty-clock/pull/100
+    (fetchpatch {
+      name = "ncurses-6.2.patch";
+      url = "https://github.com/xorg62/tty-clock/commit/4cfd73080da1964557484da620c401745d73881c.patch";
+      sha256 = "13pj1v6yrfc4vynsa746974kixfxxsy2jzzpl73c8bp7msr9d3md";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://github.com/xorg62/tty-clock";
+    license = licenses.bsd3;
+    description = "Digital clock in ncurses";
+    platforms = platforms.all;
+    maintainers = [ maintainers.koral ];
+    mainProgram = "tty-clock";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttygif/default.nix b/nixpkgs/pkgs/tools/misc/ttygif/default.nix
new file mode 100644
index 000000000000..689138186cb6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttygif/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, imagemagick, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "ttygif";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "icholy";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-GsMeVR2wNivQguZ6B/0v39Td9VGHg+m3RtAG9DYkNmU=";
+  };
+
+  makeFlags = [ "CC:=$(CC)" "PREFIX=${placeholder "out"}" ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  postInstall = ''
+    wrapProgram $out/bin/ttygif \
+      --prefix PATH : ${lib.makeBinPath [ imagemagick xorg.xwd ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/icholy/ttygif";
+    description = "Convert terminal recordings to animated gifs";
+    platforms = platforms.unix;
+    license = licenses.mit;
+    maintainers = with maintainers; [ moaxcp ];
+    mainProgram = "ttygif";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttylog/default.nix b/nixpkgs/pkgs/tools/misc/ttylog/default.nix
new file mode 100644
index 000000000000..ca90481ba9e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttylog/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "ttylog";
+  version = "0.31";
+
+  src = fetchFromGitHub {
+    owner = "rocasa";
+    repo = "ttylog";
+    rev = version;
+    sha256 = "0c746bpjpa77vsr88fxk8h1803p5np1di1mpjf4jy5bv5x3zwm07";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    homepage = "https://ttylog.sourceforge.net";
+    description = "Simple serial port logger";
+    longDescription = ''
+      A serial port logger which can be used to print everything to stdout
+      that comes from a serial device.
+    '';
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    mainProgram = "ttylog";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ttyplot/default.nix b/nixpkgs/pkgs/tools/misc/ttyplot/default.nix
new file mode 100644
index 000000000000..fc53f0b8997a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ttyplot/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "ttyplot";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "tenox7";
+    repo = "ttyplot";
+    rev = version;
+    hash = "sha256-HBJvTDhp1CA96gRU2Q+lMxcFaZ+txXcmNb8Cg1BFiH4=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    ncurses
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A simple general purpose plotting utility for tty with data input from stdin";
+    homepage = "https://github.com/tenox7/ttyplot";
+    license = licenses.asl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ lassulus ];
+    mainProgram = "ttyplot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/turbo/Cargo.lock b/nixpkgs/pkgs/tools/misc/turbo/Cargo.lock
new file mode 100644
index 000000000000..8efd3e697d46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/turbo/Cargo.lock
@@ -0,0 +1,13638 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "Inflector"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
+dependencies = [
+ "lazy_static",
+ "regex",
+]
+
+[[package]]
+name = "addr2line"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
+dependencies = [
+ "gimli 0.27.3",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d713b3834d76b85304d4d525563c1276e2e30dc97cc67bfb4585a4a29fc2c89f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "getrandom",
+ "once_cell",
+ "serde",
+ "version_check 0.9.4",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "ansi-str"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84252a7e1a0df81706ce70bbad85ed1e4916448a4093ccd52dd98c6a44a477cd"
+dependencies = [
+ "ansitok",
+]
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ansitok"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "220044e6a1bb31ddee4e3db724d29767f352de47445a6cd75e1a173142136c83"
+dependencies = [
+ "nom",
+ "vte 0.10.1",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c4c2c83f81532e5845a733998b6971faca23490340a418e9b72a3ec9de12ea"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "any_ascii"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70033777eb8b5124a81a1889416543dddef2de240019b674c81285a2635a7e1e"
+
+[[package]]
+name = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "arbitrary"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db55d72333851e17d572bec876e390cd3b11eb1ef53ae821dd9f3b653d2b4569"
+
+[[package]]
+name = "arg_enum_proc_macro"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "assert-json-diff"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d6b683edf8d1119fe420a94f8a7e389239666aa72e65495d91c00462510151"
+dependencies = [
+ "anstyle",
+ "bstr 1.4.0",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "ast_node"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3e3e06ec6ac7d893a0db7127d91063ad7d9da8988f8a1a256f03729e6eec026"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "swc_macros_common",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833"
+dependencies = [
+ "concurrent-queue",
+ "event-listener",
+ "futures-core",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17adb73da160dfb475c183343c8cccd80721ea5a605d3eb57125f0a7b7a92d0b"
+dependencies = [
+ "async-lock",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 1.9.0",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock",
+ "autocfg 1.1.0",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "futures-lite",
+ "log 0.4.20",
+ "parking",
+ "polling",
+ "rustix 0.37.23",
+ "slab",
+ "socket2 0.4.9",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-object-pool"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aeb901c30ebc2fc4ab46395bbfbdba9542c16559d853645d75190c3056caf3bc"
+dependencies = [
+ "async-std",
+]
+
+[[package]]
+name = "async-once-cell"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9338790e78aa95a416786ec8389546c4b6a1dfc3dc36071ed9518a9413a542eb"
+
+[[package]]
+name = "async-process"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6381ead98388605d0d9ff86371043b5aa922a3905824244de40dc263a14fcba4"
+dependencies = [
+ "async-io",
+ "async-lock",
+ "autocfg 1.1.0",
+ "blocking",
+ "cfg-if 1.0.0",
+ "event-listener",
+ "futures-lite",
+ "libc",
+ "signal-hook",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "async-std"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d"
+dependencies = [
+ "async-channel",
+ "async-global-executor",
+ "async-io",
+ "async-lock",
+ "async-process",
+ "crossbeam-utils 0.8.16",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-lite",
+ "gloo-timers",
+ "kv-log-macro",
+ "log 0.4.20",
+ "memchr",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "async-task"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a40729d2133846d9ed0ea60a8b9541bccddab49cd30f0715a1da672fe9a2524"
+
+[[package]]
+name = "async-trait"
+version = "0.1.73"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "async-tungstenite"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6acf7e4a267eecbb127ed696bb2d50572c22ba7f586a646321e1798d8336a1"
+dependencies = [
+ "futures-io",
+ "futures-util",
+ "log 0.4.20",
+ "pin-project-lite",
+ "tokio",
+ "tungstenite",
+]
+
+[[package]]
+name = "atomic-polyfill"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3ff7eb3f316534d83a8a2c3d1674ace8a5a71198eba31e2e2b597833f699b28"
+dependencies = [
+ "critical-section",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "auto-hash-map"
+version = "0.1.0"
+dependencies = [
+ "serde",
+ "smallvec 1.13.1",
+]
+
+[[package]]
+name = "auto_impl"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fee3da8ef1276b0bee5dd1c7258010d8fffd31801447323115a25560e1327b89"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "autocfg"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "av-metrics"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "996ce95bbdb0203e5b91d4a0c9b81c0d67d11c80f884482a0c1ea19e732e3530"
+dependencies = [
+ "crossbeam",
+ "itertools 0.10.5",
+ "lab",
+ "num-traits",
+ "rayon",
+ "thiserror",
+ "v_frame",
+]
+
+[[package]]
+name = "av1-grain"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f6ca6f0c18c02c2fbfc119df551b8aeb8a385f6d5980f1475ba0255f1e97f1e"
+dependencies = [
+ "anyhow",
+ "arrayvec 0.7.4",
+ "itertools 0.10.5",
+ "log 0.4.20",
+ "nom",
+ "num-rational",
+ "serde",
+ "v_frame",
+]
+
+[[package]]
+name = "avif-serialize"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "876c75a42f6364451a033496a14c44bffe41f5f4a8236f697391f11024e596d2"
+dependencies = [
+ "arrayvec 0.7.4",
+]
+
+[[package]]
+name = "axum"
+version = "0.6.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f8ccfd9221ee7d1f3d4b33e1f8319b3a81ed8f61f2ea40b37b859794b4491"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags 1.3.2",
+ "bytes 1.5.0",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper 0.14.28",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime 0.3.17",
+ "percent-encoding 2.3.0",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_urlencoded",
+ "sync_wrapper",
+ "tokio",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2f958c80c248b34b9a877a643811be8dbca03ca5ba827f2b63baf3a81e5fc4e"
+dependencies = [
+ "async-trait",
+ "bytes 1.5.0",
+ "futures-util",
+ "http",
+ "http-body",
+ "mime 0.3.17",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-macros"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bb524613be645939e280b7279f7b017f98cf7f5ef084ec374df373530e73277"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "axum-server"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bace45b270e36e3c27a190c65883de6dfc9f1d18c829907c127464815dc67b24"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-util",
+ "http",
+ "http-body",
+ "hyper 0.14.28",
+ "tokio",
+ "tower-service",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "miniz_oxide 0.7.1",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "backtrace-ext"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "537beee3be4a18fb023b570f80e3ae28003db9167a751266b259926e25539d50"
+dependencies = [
+ "backtrace",
+]
+
+[[package]]
+name = "base-encode"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17bd29f7c70f32e9387f4d4acfa5ea7b7749ef784fb78cf382df97069337b8c"
+
+[[package]]
+name = "base16"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d27c3610c36aee21ce8ac510e6224498de4228ad772a171ed65643a24693a5a8"
+
+[[package]]
+name = "base64"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489d6c0ed21b11d038c31b6ceccca973e65d73ba3bd8ecb9a2babf5546164643"
+dependencies = [
+ "byteorder",
+ "safemem",
+]
+
+[[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.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2"
+
+[[package]]
+name = "base64-simd"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5"
+dependencies = [
+ "simd-abstraction",
+]
+
+[[package]]
+name = "better_scoped_tls"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "794edcc9b3fb07bb4aecaa11f093fd45663b4feadb782d68303a2268bc2701de"
+dependencies = [
+ "scoped-tls",
+]
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.65.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "log 0.4.20",
+ "peeking_take_while",
+ "prettyplease 0.2.4",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.32",
+ "which",
+]
+
+[[package]]
+name = "binding_macros"
+version = "0.64.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfd8f34cab921542b9dcddd34d65e5ee3953d16d07a643509494ad2d7946cb1a"
+dependencies = [
+ "anyhow",
+ "console_error_panic_hook",
+ "js-sys",
+ "once_cell",
+ "serde",
+ "serde-wasm-bindgen",
+ "swc",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms",
+ "swc_ecma_visit",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+]
+
+[[package]]
+name = "biome_console"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bff6dcd31afe7872430d10b3b79d66ba01e090c3a000ba826e91830bca95d0c"
+dependencies = [
+ "biome_markup",
+ "biome_text_size",
+ "schemars",
+ "serde",
+ "termcolor",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "biome_deserialize"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9969c2b032155b05dc837c71337149800bdc56b07ecc3cfd7c2d963db07f049"
+dependencies = [
+ "biome_console",
+ "biome_diagnostics",
+ "biome_json_parser",
+ "biome_json_syntax",
+ "biome_rowan",
+ "bitflags 2.4.0",
+ "indexmap 1.9.3",
+ "serde",
+ "serde_json",
+ "tracing",
+]
+
+[[package]]
+name = "biome_diagnostics"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92eeba94d7926178e59511b85cdcd0398ba1cc54a9f658ec261184e20028dd0e"
+dependencies = [
+ "backtrace",
+ "biome_console",
+ "biome_diagnostics_categories",
+ "biome_diagnostics_macros",
+ "biome_rowan",
+ "biome_text_edit",
+ "biome_text_size",
+ "bitflags 2.4.0",
+ "bpaf",
+ "serde",
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "biome_diagnostics_categories"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4e8ef1f8a683438b2c6e68c996d66ceeb4764c3672e1eb20c9e6b404056a3d4"
+dependencies = [
+ "quote",
+ "serde",
+]
+
+[[package]]
+name = "biome_diagnostics_macros"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9a4eeb40457bd8ed3ea91d2b48ad12e80dc92eb083f909a8b5ad1d1b71d5c4"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "biome_js_unicode_table"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b174dd2a0e5d74e1763045a9eb021bf89c38e3bf48f5852653635688a8675b9"
+
+[[package]]
+name = "biome_json_factory"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ec30f94381f11b6c4f2cb49492cf02b34dec74fd8cf01b7b1b10138d2f6b41e"
+dependencies = [
+ "biome_json_syntax",
+ "biome_rowan",
+]
+
+[[package]]
+name = "biome_json_parser"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baddbd7fee954d8b20b6db922e77c70db8d73fadeb43bae254e7fb2e0364a553"
+dependencies = [
+ "biome_console",
+ "biome_diagnostics",
+ "biome_js_unicode_table",
+ "biome_json_factory",
+ "biome_json_syntax",
+ "biome_parser",
+ "biome_rowan",
+ "tracing",
+ "unicode-bom",
+]
+
+[[package]]
+name = "biome_json_syntax"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97bb81952034ac0a4e5100d939c4286862193361a687c21aa0c15da388b29b32"
+dependencies = [
+ "biome_rowan",
+]
+
+[[package]]
+name = "biome_markup"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94b75b241c9346a7a55968398e51502333c18e200bec5d72b08d448084045e02"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "biome_parser"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33531b8a29ce80cfd320f3278a167ec41985d9b4701013184d95aef9642bf761"
+dependencies = [
+ "biome_console",
+ "biome_diagnostics",
+ "biome_rowan",
+ "bitflags 2.4.0",
+ "drop_bomb",
+]
+
+[[package]]
+name = "biome_rowan"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e46e82f8245181cdf45794f3025db1daa4865e8730214345e540eae570957aa"
+dependencies = [
+ "biome_text_edit",
+ "biome_text_size",
+ "countme",
+ "hashbrown 0.12.3",
+ "memoffset 0.8.0",
+ "rustc-hash",
+ "tracing",
+]
+
+[[package]]
+name = "biome_text_edit"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81ff84924f11cc4d9a5ee2a3b59630aa9f2c2c359f7623ac541b1ff82390d80b"
+dependencies = [
+ "biome_text_size",
+ "serde",
+ "similar",
+]
+
+[[package]]
+name = "biome_text_size"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e945f7da7f14dd66563ca6be0133014e6a1cbe935247f7b5ee8e28b2b8282f6"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
+
+[[package]]
+name = "bitstream-io"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82704769cb85a22df2c54d6bdd6a158b7931d256cf3248a07d6ecbe9d58b31d7"
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "blake3"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.7.4",
+ "cc",
+ "cfg-if 1.0.0",
+ "constant_time_eq",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
+dependencies = [
+ "block-padding",
+ "byte-tools",
+ "byteorder",
+ "generic-array 0.12.4",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array 0.14.7",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
+dependencies = [
+ "byte-tools",
+]
+
+[[package]]
+name = "blocking"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c67b173a56acffd6d2326fb7ab938ba0b00a71480e14902b2591c87bc5741e8"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "atomic-waker",
+ "fastrand 1.9.0",
+ "futures-lite",
+]
+
+[[package]]
+name = "bpaf"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19232d7d855392d993f6dabd8dea40a457a6d24ef679fe98f5edca811bb11e21"
+dependencies = [
+ "bpaf_derive",
+]
+
+[[package]]
+name = "bpaf_derive"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efeab2975f8102de445dcf898856a638332403c50216144653a89aec22fd79e0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "browserslist-rs"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "405bbd46590a441abe5db3e5c8af005aa42e640803fecb51912703e93e4ce8d3"
+dependencies = [
+ "ahash 0.8.9",
+ "anyhow",
+ "chrono",
+ "either",
+ "indexmap 2.2.3",
+ "itertools 0.12.0",
+ "nom",
+ "once_cell",
+ "quote",
+ "serde",
+ "serde_json",
+ "string_cache",
+ "string_cache_codegen",
+ "thiserror",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "bstr"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09"
+dependencies = [
+ "memchr",
+ "once_cell",
+ "regex-automata 0.1.10",
+ "serde",
+]
+
+[[package]]
+name = "build-fs-tree"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c68339add1d0c864575cd425203adee58c8b64ea1709b35bb90fc0fc07e4286"
+dependencies = [
+ "derive_more",
+ "pipe-trait",
+ "serde",
+ "serde_yaml 0.9.27",
+ "text-block-macros",
+]
+
+[[package]]
+name = "build-target"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "832133bbabbbaa9fbdba793456a2827627a7d2b8fb96032fa1e7666d7895832b"
+
+[[package]]
+name = "built"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b9c056b9ed43aee5e064b683aa1ec783e19c6acec7559e3ae931b7490472fbe"
+dependencies = [
+ "cargo-lock",
+ "git2 0.15.0",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
+
+[[package]]
+name = "byte-tools"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
+
+[[package]]
+name = "bytecheck"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627"
+dependencies = [
+ "bytecheck_derive",
+ "ptr_meta",
+ "simdutf8",
+]
+
+[[package]]
+name = "bytecheck_derive"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bytecount"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c676a478f63e9fa2dd5368a42f28bba0d6c560b775f38583c8bbaa7fcd67c9c"
+
+[[package]]
+name = "bytemuck"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "bytes"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+dependencies = [
+ "byteorder",
+ "iovec",
+]
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "camino"
+version = "1.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "capnp"
+version = "0.17.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95e65021d89250bbfe7c2791789ced2c4bdc21b0e8bb59c64f3fd6145a5fd678"
+
+[[package]]
+name = "capnp"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9eddbd729bd9742aa22d29e871a42ffea7f216a4ddbfdaf09ea88150ef2e7f76"
+dependencies = [
+ "embedded-io",
+]
+
+[[package]]
+name = "capnpc"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5067f3c8ee94d993d03150153e9a57a6ff330127b1c1ad76475051e1cef79c2d"
+dependencies = [
+ "capnp 0.18.1",
+]
+
+[[package]]
+name = "cargo-lock"
+version = "8.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "031718ddb8f78aa5def78a09e90defe30151d1f6c672f937af4dd916429ed996"
+dependencies = [
+ "semver 1.0.18",
+ "serde",
+ "toml 0.5.11",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "cargo-platform"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cfa25e60aea747ec7e1124f238816749faa93759c6ff5b31f1ccdda137f4479"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cargo_metadata"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
+dependencies = [
+ "camino",
+ "cargo-platform",
+ "semver 1.0.18",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "castaway"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6"
+
+[[package]]
+name = "castaway"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc"
+dependencies = [
+ "rustversion",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9"
+dependencies = [
+ "smallvec 1.13.1",
+ "target-lexicon",
+]
+
+[[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 = "chromiumoxide"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fbef58698a487c253c55c3d17bb1efbe268d2961a2c8278e3f86fff721355fc"
+dependencies = [
+ "async-tungstenite",
+ "base64 0.21.4",
+ "cfg-if 1.0.0",
+ "chromiumoxide_cdp",
+ "chromiumoxide_types",
+ "dunce",
+ "fnv",
+ "futures 0.3.28",
+ "futures-timer",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "url 2.4.1",
+ "which",
+ "winreg",
+]
+
+[[package]]
+name = "chromiumoxide_cdp"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "902b90e019dff479bf5a36ed3961e955afa48c35fb2d4245d0b193e7746d50b9"
+dependencies = [
+ "chromiumoxide_pdl",
+ "chromiumoxide_types",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "chromiumoxide_pdl"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc9319fb29ecce08ac90dd5a798c391f6a8ae1d7c90aff71f3fa27cb3cdfc3ec"
+dependencies = [
+ "chromiumoxide_types",
+ "either",
+ "heck 0.4.1",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "chromiumoxide_types"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c9187058637b8e555690935a6d25a1f7af1d71b377fc45b4257712efb34551f"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "wasm-bindgen",
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
+dependencies = [
+ "bitflags 1.3.2",
+ "clap_lex 0.2.4",
+ "indexmap 1.9.3",
+ "textwrap 0.16.0",
+]
+
+[[package]]
+name = "clap"
+version = "4.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b230ab84b0ffdf890d5a10abdbc8b83ae1c4918275daea1ab8801f71536b2651"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex 0.7.0",
+ "strsim 0.11.0",
+ "terminal_size 0.3.0",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "885e4d7d5af40bfb99ae6f9433e292feac98d452dcb3ec3d25dfe7552b77da8c"
+dependencies = [
+ "clap 4.5.2",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
+
+[[package]]
+name = "cloudabi"
+version = "0.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "cobs"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15"
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes 1.5.0",
+ "memchr",
+]
+
+[[package]]
+name = "command-group"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5080df6b0f0ecb76cab30808f00d937ba725cebe266a3da8cd89dff92f2a9916"
+dependencies = [
+ "async-trait",
+ "nix 0.26.2",
+ "tokio",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "compact_str"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f"
+dependencies = [
+ "castaway 0.2.2",
+ "cfg-if 1.0.0",
+ "itoa",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e"
+dependencies = [
+ "crossbeam-utils 0.8.16",
+]
+
+[[package]]
+name = "config"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca"
+dependencies = [
+ "async-trait",
+ "lazy_static",
+ "nom",
+ "pathdiff",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "console-api"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e57ff02e8ad8e06ab9731d5dc72dc23bef9200778eae1a89d555d8c42e5d4a86"
+dependencies = [
+ "prost 0.11.8",
+ "prost-types 0.11.8",
+ "tonic 0.8.3",
+ "tracing-core",
+]
+
+[[package]]
+name = "console-subscriber"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22a3a81dfaf6b66bce5d159eddae701e3a002f194d378cbf7be5f053c281d9be"
+dependencies = [
+ "console-api",
+ "crossbeam-channel",
+ "crossbeam-utils 0.8.16",
+ "futures 0.3.28",
+ "hdrhistogram",
+ "humantime",
+ "prost-types 0.11.8",
+ "serde",
+ "serde_json",
+ "thread_local",
+ "tokio",
+ "tokio-stream",
+ "tonic 0.8.3",
+ "tracing",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "console_error_panic_hook"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "const-cstr"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed3d0b5ff30645a68f35ece8cea4556ca14ef8a1651455f789a099a0513532a6"
+
+[[package]]
+name = "const-random"
+version = "0.1.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359"
+dependencies = [
+ "const-random-macro",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "const-str"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21077772762a1002bb421c3af42ac1725fa56066bfc53d9a55bb79905df2aaf3"
+dependencies = [
+ "const-str-proc-macro",
+]
+
+[[package]]
+name = "const-str-proc-macro"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e1e0fdd2e5d3041e530e1b21158aeeef8b5d0e306bc5c1e3d6cf0930d10e25a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "const_fn_assert"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27d614f23f34f7b5165a77dc1591f497e2518f9cec4b4f4b92bfc4dc6cf7a190"
+
+[[package]]
+name = "const_format"
+version = "0.2.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7309d9b4d3d2c0641e018d449232f2e28f1b22933c137f157d3dbc14228b8c0e"
+dependencies = [
+ "const_format_proc_macros",
+]
+
+[[package]]
+name = "const_format_proc_macros"
+version = "0.2.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f47bf7270cf70d370f8f98c1abb6d2d4cf60a6845d30e05bfb90c6568650"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "convert_case"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb4a24b1aaf0fd0ce8b45161144d6f42cd91677fd5940fd431183eb023b3a2b8"
+
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "cooked-waker"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "147be55d677052dabc6b22252d5dd0fd4c29c8c27aa4f2fbef0f94aa003b406f"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-text"
+version = "19.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25"
+dependencies = [
+ "core-foundation",
+ "core-graphics",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "corosensei"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9847f90f32a50b0dcbd68bc23ff242798b13080b97b0569f6ed96a45ce4cf2cd"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 1.0.0",
+ "libc",
+ "scopeguard",
+ "windows-sys 0.33.0",
+]
+
+[[package]]
+name = "countme"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636"
+
+[[package]]
+name = "cpp_demangle"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8227005286ec39567949b33df9896bcadfa6051bccca2488129f108ca23119"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cranelift-bforest"
+version = "0.91.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a2ab4512dfd3a6f4be184403a195f76e81a8a9f9e6c898e19d2dc3ce20e0115"
+dependencies = [
+ "cranelift-entity",
+]
+
+[[package]]
+name = "cranelift-codegen"
+version = "0.91.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98b022ed2a5913a38839dfbafe6cf135342661293b08049843362df4301261dc"
+dependencies = [
+ "arrayvec 0.7.4",
+ "bumpalo",
+ "cranelift-bforest",
+ "cranelift-codegen-meta",
+ "cranelift-codegen-shared",
+ "cranelift-egraph",
+ "cranelift-entity",
+ "cranelift-isle",
+ "gimli 0.26.2",
+ "log 0.4.20",
+ "regalloc2",
+ "smallvec 1.13.1",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cranelift-codegen-meta"
+version = "0.91.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "639307b45434ad112a98f8300c0f0ab085cbefcd767efcdef9ef19d4c0756e74"
+dependencies = [
+ "cranelift-codegen-shared",
+]
+
+[[package]]
+name = "cranelift-codegen-shared"
+version = "0.91.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "278e52e29c53fcf32431ef08406c295699a70306d05a0715c5b1bf50e33a9ab7"
+
+[[package]]
+name = "cranelift-egraph"
+version = "0.91.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624b54323b06e675293939311943ba82d323bb340468ce1889be5da7932c8d73"
+dependencies = [
+ "cranelift-entity",
+ "fxhash",
+ "hashbrown 0.12.3",
+ "indexmap 1.9.3",
+ "log 0.4.20",
+ "smallvec 1.13.1",
+]
+
+[[package]]
+name = "cranelift-entity"
+version = "0.91.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a59bcbca89c3f1b70b93ab3cbba5e5e0cbf3e63dadb23c7525cb142e21a9d4c"
+
+[[package]]
+name = "cranelift-frontend"
+version = "0.91.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d70abacb8cfef3dc8ff7e8836e9c1d70f7967dfdac824a4cd5e30223415aca6"
+dependencies = [
+ "cranelift-codegen",
+ "log 0.4.20",
+ "smallvec 1.13.1",
+ "target-lexicon",
+]
+
+[[package]]
+name = "cranelift-isle"
+version = "0.91.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "393bc73c451830ff8dbb3a07f61843d6cb41a084f9996319917c0b291ed785bb"
+
+[[package]]
+name = "crc"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49fc9a695bca7f35f5f4c15cddc84415f66a74ea78eef08e90c5024f2b540e23"
+dependencies = [
+ "crc-catalog",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "criterion"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb"
+dependencies = [
+ "anes",
+ "atty",
+ "cast",
+ "ciborium",
+ "clap 3.2.23",
+ "criterion-plot",
+ "futures 0.3.28",
+ "itertools 0.10.5",
+ "lazy_static",
+ "num-traits",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "tokio",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools 0.10.5",
+]
+
+[[package]]
+name = "critical-section"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6548a0ad5d2549e111e1f6a11a6c2e2d00ce6a3dafe22948d67c2b443f775e52"
+
+[[package]]
+name = "crop"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f7cba78cdac608a5e2e645de47e566c0f63e1b6110318736581ec97d5669767"
+dependencies = [
+ "str_indices",
+]
+
+[[package]]
+name = "crossbeam"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2801af0d36612ae591caa9568261fddce32ce6e08a7275ea334a06a4ad021a2c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-epoch",
+ "crossbeam-queue",
+ "crossbeam-utils 0.8.16",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils 0.8.16",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-epoch",
+ "crossbeam-utils 0.8.16",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 1.0.0",
+ "crossbeam-utils 0.8.16",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1cfb3ea8a53f37c40dea2c7bedcbd88bdfae54f5e2175d6ecaff1c988353add"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crossbeam-utils 0.8.16",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
+dependencies = [
+ "autocfg 1.1.0",
+ "cfg-if 0.1.10",
+ "lazy_static",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi",
+ "libc",
+ "mio 0.8.8",
+ "parking_lot 0.12.1",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm_winapi",
+ "libc",
+ "mio 0.8.8",
+ "parking_lot 0.12.1",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
+dependencies = [
+ "bitflags 2.4.0",
+ "crossterm_winapi",
+ "libc",
+ "mio 0.8.8",
+ "parking_lot 0.12.1",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array 0.14.7",
+ "typenum",
+]
+
+[[package]]
+name = "cssparser"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9be934d936a0fbed5bcdc01042b770de1398bf79d0e192f49fa7faea0e99281e"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa",
+ "phf 0.11.2",
+ "serde",
+ "smallvec 1.13.1",
+]
+
+[[package]]
+name = "cssparser-color"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556c099a61d85989d7af52b692e35a8d68a57e7df8c6d07563dc0778b3960c9f"
+dependencies = [
+ "cssparser",
+]
+
+[[package]]
+name = "cssparser-macros"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
+dependencies = [
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "ctor"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd4056f63fce3b82d852c3da92b08ea59959890813a7f4ce9c0ff85b10cf301b"
+dependencies = [
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "ctrlc"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e"
+dependencies = [
+ "nix 0.26.2",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "cty"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+
+[[package]]
+name = "curl"
+version = "0.4.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22"
+dependencies = [
+ "curl-sys",
+ "libc",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "socket2 0.4.9",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "curl-sys"
+version = "0.4.60+curl-7.88.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "717abe2cb465a5da6ce06617388a3980c9a2844196734bec8ccb8e575250f13f"
+dependencies = [
+ "cc",
+ "libc",
+ "libnghttp2-sys",
+ "libz-sys",
+ "openssl-sys",
+ "pkg-config",
+ "vcpkg",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
+dependencies = [
+ "darling_core 0.14.4",
+ "darling_macro 0.14.4",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0558d22a7b463ed0241e993f76f09f30b126687447751a8638587b864e4b3944"
+dependencies = [
+ "darling_core 0.20.1",
+ "darling_macro 0.20.1",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.10.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab8bfa2e259f8ee1ce5e97824a3c55ec4404a0d772ca7fa96bf19f0752a046eb"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
+dependencies = [
+ "darling_core 0.14.4",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29a358ff9f12ec09c3e61fef9b5a9902623a695a46a917b07f269bff1445611a"
+dependencies = [
+ "darling_core 0.20.1",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if 1.0.0",
+ "hashbrown 0.14.3",
+ "lock_api 0.4.10",
+ "once_cell",
+ "parking_lot_core 0.9.8",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
+
+[[package]]
+name = "data-url"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30bfce702bcfa94e906ef82421f2c0e61c076ad76030c16ee5d2e9a32fe193"
+dependencies = [
+ "matches",
+]
+
+[[package]]
+name = "debugid"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d"
+dependencies = [
+ "serde",
+ "uuid",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+dependencies = [
+ "powerfmt",
+ "serde",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8"
+dependencies = [
+ "derive_builder_macro",
+]
+
+[[package]]
+name = "derive_builder_core"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f"
+dependencies = [
+ "darling 0.14.4",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_builder_macro"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e"
+dependencies = [
+ "derive_builder_core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case 0.4.0",
+ "proc-macro2",
+ "quote",
+ "rustc_version 0.4.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "dialoguer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87"
+dependencies = [
+ "console",
+ "fuzzy-matcher",
+ "shell-words",
+ "tempfile",
+ "zeroize",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difference"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
+dependencies = [
+ "generic-array 0.12.4",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer 0.10.4",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "directories"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210"
+dependencies = [
+ "dirs-sys 0.3.7",
+]
+
+[[package]]
+name = "directories"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35"
+dependencies = [
+ "dirs-sys 0.4.1",
+]
+
+[[package]]
+name = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys 0.3.7",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "dlv-list"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f"
+dependencies = [
+ "const-random",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "dotenvs"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88e3201db19ec4199af513d38c49fcbc5f8ca31d268f942e97324a826c9e9fdb"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "drop_bomb"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bda8e21c04aca2ae33ffc2fd8c23134f3cac46db123ba97bd9d3f3b8a4a85e1"
+
+[[package]]
+name = "dtoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653"
+
+[[package]]
+name = "dtoa-short"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74"
+dependencies = [
+ "dtoa",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c"
+
+[[package]]
+name = "dwrote"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "winapi 0.3.9",
+ "wio",
+]
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30"
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "embedded-io"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658bbadc628dc286b9ae02f0cb0f5411c056eb7487b72f0083203f115de94060"
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "enum-iterator"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eeac5c5edb79e4e39fe8439ef35207780a11f69c52cbe424ce3dfad4cb78de6"
+dependencies = [
+ "enum-iterator-derive",
+]
+
+[[package]]
+name = "enum-iterator-derive"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c134c37760b27a871ba422106eedbb8247da973a09e82558bf26d619c882b159"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enumset"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e875f1719c16de097dee81ed675e2d9bb63096823ed3f0ca827b7dea3028bbbb"
+dependencies = [
+ "enumset_derive",
+]
+
+[[package]]
+name = "enumset_derive"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08b6c6ab82d70f08844964ba10c7babb716de2ecaeab9be5717918a5177d3af"
+dependencies = [
+ "darling 0.20.1",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "log 0.4.20",
+ "regex",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "erased-serde"
+version = "0.3.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f2b0c2380453a92ea8b6c8e5f64ecaafccddde8ceab55ff7a8ac1029f894569"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "fake-simd"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
+
+[[package]]
+name = "fdeflate"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "fern"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee"
+dependencies = [
+ "log 0.4.20",
+]
+
+[[package]]
+name = "file-id"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6584280525fb2059cba3db2c04abf947a1a29a45ddae89f3870f8281704fafc9"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "filedescriptor"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7199d965852c3bac31f779ef99cbb4537f80e952e2d6aa0ffeb30cce00f4f46e"
+dependencies = [
+ "libc",
+ "thiserror",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.3.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "findshlibs"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40b9e59cd0f7e0806cca4be089683ecb6434e602038df21fe6bf6711b2f07f64"
+dependencies = [
+ "cc",
+ "lazy_static",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide 0.6.2",
+]
+
+[[package]]
+name = "float-ord"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e"
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "font-kit"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21fe28504d371085fae9ac7a3450f0b289ab71e07c8e57baa3fb68b9e57d6ce5"
+dependencies = [
+ "bitflags 1.3.2",
+ "byteorder",
+ "core-foundation",
+ "core-graphics",
+ "core-text",
+ "dirs-next",
+ "dwrote",
+ "float-ord",
+ "freetype",
+ "lazy_static",
+ "libc",
+ "log 0.4.20",
+ "pathfinder_geometry",
+ "pathfinder_simd",
+ "walkdir",
+ "winapi 0.3.9",
+ "yeslogic-fontconfig-sys",
+]
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding 2.3.0",
+]
+
+[[package]]
+name = "freetype"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bee38378a9e3db1cc693b4f88d166ae375338a0ff75cb8263e1c601d51f35dc6"
+dependencies = [
+ "freetype-sys",
+ "libc",
+]
+
+[[package]]
+name = "freetype-sys"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a37d4011c0cc628dfa766fcc195454f4b068d7afdc2adfd28861191d866e731a"
+dependencies = [
+ "cmake",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "from_variant"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a0b11eeb173ce52f84ebd943d42e58813a2ebb78a6a3ff0a243b71c5199cd7b"
+dependencies = [
+ "proc-macro2",
+ "swc_macros_common",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "fs-err"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0845fa252299212f0389d64ba26f34fa32cfe41588355f21ed507c59a0f64541"
+
+[[package]]
+name = "fs_extra"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42703706b716c37f96a77aea830392ad231f44c9e9a67872fa5548707e11b11c"
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "fuchsia-cprng"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
+
+[[package]]
+name = "fuchsia-zircon"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
+dependencies = [
+ "bitflags 1.3.2",
+ "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 = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
+
+[[package]]
+name = "futures"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
+
+[[package]]
+name = "futures-lite"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "futures-retry"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fde5a672a61f96552aa5ed9fd9c81c3fbdae4be9b1e205d6eaf17c83705adc0f"
+dependencies = [
+ "futures 0.3.28",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
+
+[[package]]
+name = "futures-task"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
+
+[[package]]
+name = "futures-timer"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+
+[[package]]
+name = "futures-util"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "fuzzy-matcher"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94"
+dependencies = [
+ "thread_local",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gif"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gif"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "gimli"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
+dependencies = [
+ "fallible-iterator",
+ "indexmap 1.9.3",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "gimli"
+version = "0.27.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
+
+[[package]]
+name = "git2"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2994bee4a3a6a51eb90c218523be382fd7ea09b16380b9312e9dbe955ff7c7d1"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "libgit2-sys",
+ "log 0.4.20",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "git2"
+version = "0.16.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "libgit2-sys",
+ "log 0.4.20",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "globset"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
+dependencies = [
+ "aho-corasick 0.7.20",
+ "bstr 1.4.0",
+ "fnv",
+ "log 0.4.20",
+ "regex",
+]
+
+[[package]]
+name = "globwalk"
+version = "0.1.0"
+dependencies = [
+ "camino",
+ "itertools 0.10.5",
+ "path-clean 1.0.1",
+ "path-slash",
+ "rayon",
+ "regex",
+ "tempdir",
+ "test-case",
+ "thiserror",
+ "tracing",
+ "turbopath",
+ "walkdir",
+ "wax",
+]
+
+[[package]]
+name = "globwatch"
+version = "0.1.0"
+dependencies = [
+ "camino",
+ "futures 0.3.28",
+ "itertools 0.10.5",
+ "merge-streams",
+ "notify",
+ "notify-debouncer-mini",
+ "pin-project",
+ "stop-token",
+ "test-case",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tracing",
+ "tracing-subscriber",
+ "tracing-test",
+ "turbopath",
+ "unic-segment",
+ "walkdir",
+]
+
+[[package]]
+name = "gloo-timers"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b995a66bb87bebce9a0f4a95aed01daca4872c050bfcb21653361c03bc35e5c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "go-parse-duration"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "558b88954871f5e5b2af0e62e2e176c8bde7a6c2c4ed41b13d138d96da2e2cbd"
+
+[[package]]
+name = "h2"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9"
+dependencies = [
+ "bytes 1.5.0",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 2.2.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "handlebars"
+version = "4.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a"
+dependencies = [
+ "log 0.4.20",
+ "pest",
+ "pest_derive",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "hash32"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash 0.7.8",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
+dependencies = [
+ "ahash 0.8.9",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+dependencies = [
+ "ahash 0.8.9",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hdrhistogram"
+version = "7.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f19b9f54f7c7f55e31401bb647626ce0cf0f67b0004982ce815b3ee72a02aa8"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "flate2",
+ "nom",
+ "num-traits",
+]
+
+[[package]]
+name = "heapless"
+version = "0.7.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db04bc24a18b9ea980628ecf00e6c0264f3c1426dac36c00cb49b6fbad8b0743"
+dependencies = [
+ "atomic-polyfill",
+ "hash32",
+ "rustc_version 0.4.0",
+ "serde",
+ "spin 0.9.8",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "hstr"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de90d3db62411eb62eddabe402d706ac4970f7ac8d088c05f11069cad9be9857"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "phf 0.11.2",
+ "rustc-hash",
+ "smallvec 1.13.1",
+]
+
+[[package]]
+name = "http"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
+dependencies = [
+ "bytes 1.5.0",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes 1.5.0",
+ "http",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
+
+[[package]]
+name = "httpmock"
+version = "0.6.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b02e044d3b4c2f94936fb05f9649efa658ca788f44eb6b87554e2033fc8ce93"
+dependencies = [
+ "assert-json-diff",
+ "async-object-pool",
+ "async-trait",
+ "base64 0.21.4",
+ "crossbeam-utils 0.8.16",
+ "form_urlencoded",
+ "futures-util",
+ "hyper 0.14.28",
+ "isahc",
+ "lazy_static",
+ "levenshtein",
+ "log 0.4.20",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_regex",
+ "similar",
+ "tokio",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "human-panic"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b82da652938b83f94cfdaaf9ae7aaadb8430d84b0dfda226998416318727eac2"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "backtrace",
+ "os_info",
+ "serde",
+ "serde_derive",
+ "toml 0.7.8",
+ "uuid",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.10.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a0652d9a2609a968c14be1a9ea00bf4b1d64e2e1f53a1b51b6fff3a6e829273"
+dependencies = [
+ "base64 0.9.3",
+ "httparse",
+ "language-tags",
+ "log 0.3.9",
+ "mime 0.2.6",
+ "num_cpus",
+ "time 0.1.45",
+ "traitobject",
+ "typeable",
+ "unicase 1.4.2",
+ "url 1.7.2",
+]
+
+[[package]]
+name = "hyper"
+version = "0.14.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.5.4",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
+dependencies = [
+ "http",
+ "hyper 0.14.28",
+ "rustls 0.20.9",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper 0.14.28",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes 1.5.0",
+ "hyper 0.14.28",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "hyper-tungstenite"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "880b8b1c98a5ec2a505c7c90db6d3f6f1f480af5655d9c5b55facc9382a5a5b5"
+dependencies = [
+ "hyper 0.14.28",
+ "pin-project",
+ "tokio",
+ "tokio-tungstenite",
+ "tungstenite",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "id-arena"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005"
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[package]]
+name = "idna"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "if_chain"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed"
+
+[[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+dependencies = [
+ "globset",
+ "lazy_static",
+ "log 0.4.20",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "image"
+version = "0.24.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "jpeg-decoder",
+ "num-rational",
+ "num-traits",
+ "png",
+]
+
+[[package]]
+name = "image"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9b4f005360d32e9325029b38ba47ebd7a56f3316df09249368939562d518645"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "gif 0.13.1",
+ "image-webp",
+ "num-traits",
+ "png",
+ "ravif",
+ "rgb",
+ "zune-core",
+ "zune-jpeg",
+]
+
+[[package]]
+name = "image-webp"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba6107a25f04af48ceeb4093eebc9b405ee5a1813a0bab5ecf1805d3eabb3337"
+dependencies = [
+ "byteorder",
+ "thiserror",
+]
+
+[[package]]
+name = "imgref"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2cf49df1085dcfb171460e4592597b84abe50d900fb83efb6e41b20fefd6c2c"
+
+[[package]]
+name = "include_dir"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e"
+dependencies = [
+ "include_dir_macros",
+]
+
+[[package]]
+name = "include_dir_macros"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg 1.1.0",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.3",
+ "rayon",
+ "serde",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729"
+dependencies = [
+ "console",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
+]
+
+[[package]]
+name = "indoc"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f2cb48b81b1dc9f39676bf99f5499babfec7cd8fe14307f7b3d747208fb5690"
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "inquire"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a94f0659efe59329832ba0452d3ec753145fc1fb12a8e1d60de4ccf99f5364"
+dependencies = [
+ "bitflags 1.3.2",
+ "crossterm 0.25.0",
+ "dyn-clone",
+ "lazy_static",
+ "newline-converter",
+ "thiserror",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "insta"
+version = "1.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc"
+dependencies = [
+ "console",
+ "lazy_static",
+ "linked-hash-map",
+ "serde",
+ "similar",
+ "yaml-rust",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[package]]
+name = "interpolate_name"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "intervaltree"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "270bc34e57047cab801a8c871c124d9dc7132f6473c6401f645524f4e6edd111"
+dependencies = [
+ "smallvec 1.13.1",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ioctl-rs"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7970510895cee30b3e9128319f2cefd4bde883a39f38baa279567ba3a7eb97d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
+
+[[package]]
+name = "is-macro"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4467ed1321b310c2625c5aa6c1b1ffc5de4d9e42668cf697a08fb033ee8265e"
+dependencies = [
+ "Inflector",
+ "pmutil",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is_ci"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"
+
+[[package]]
+name = "isahc"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9"
+dependencies = [
+ "async-channel",
+ "castaway 0.1.2",
+ "crossbeam-utils 0.8.16",
+ "curl",
+ "curl-sys",
+ "encoding_rs",
+ "event-listener",
+ "futures-lite",
+ "http",
+ "log 0.4.20",
+ "mime 0.3.17",
+ "once_cell",
+ "polling",
+ "slab",
+ "sluice",
+ "tracing",
+ "tracing-futures",
+ "url 2.4.1",
+ "waker-fn",
+]
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "ivf"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fb01c64361a3a67b511439f0dcd54fa3aa5581c861a17e2ede76e46b9c5b7e2"
+dependencies = [
+ "bitstream-io",
+]
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if 1.0.0",
+ "combine",
+ "jni-sys",
+ "log 0.4.20",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+
+[[package]]
+name = "js-sys"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json_comments"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41ee439ee368ba4a77ac70d04f14015415af8600d6c894dc1f11bd79758c57d5"
+
+[[package]]
+name = "jsonc-parser"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a1853e40333206f9a685358046d13ab200169e3ee573019bddf0ede0dc29307"
+dependencies = [
+ "serde_json",
+]
+
+[[package]]
+name = "jsonc-parser"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7725c320caac8c21d8228c1d055af27a995d371f78cc763073d3e068323641b5"
+
+[[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 = "kqueue"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+]
+
+[[package]]
+name = "kv-log-macro"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f"
+dependencies = [
+ "log 0.4.20",
+]
+
+[[package]]
+name = "lab"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf36173d4167ed999940f804952e6b08197cae5ad5d572eb4db150ce8ad5d58f"
+
+[[package]]
+name = "language-tags"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
+
+[[package]]
+name = "lazy-regex"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff63c423c68ea6814b7da9e88ce585f793c87ddd9e78f646970891769c8235d4"
+dependencies = [
+ "lazy-regex-proc_macros",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "lazy-regex-proc_macros"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8edfc11b8f56ce85e207e62ea21557cfa09bb24a8f6b04ae181b086ff8611c22"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lazycell"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
+
+[[package]]
+name = "leb128"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67"
+
+[[package]]
+name = "levenshtein"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
+
+[[package]]
+name = "lexical"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6"
+dependencies = [
+ "lexical-core",
+]
+
+[[package]]
+name = "lexical-core"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46"
+dependencies = [
+ "lexical-parse-float",
+ "lexical-parse-integer",
+ "lexical-util",
+ "lexical-write-float",
+ "lexical-write-integer",
+]
+
+[[package]]
+name = "lexical-parse-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f"
+dependencies = [
+ "lexical-parse-integer",
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-parse-integer"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-sort"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c09e4591611e231daf4d4c685a66cb0410cc1e502027a20ae55f2bb9e997207a"
+dependencies = [
+ "any_ascii",
+]
+
+[[package]]
+name = "lexical-util"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc"
+dependencies = [
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-float"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862"
+dependencies = [
+ "lexical-util",
+ "lexical-write-integer",
+ "static_assertions",
+]
+
+[[package]]
+name = "lexical-write-integer"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446"
+dependencies = [
+ "lexical-util",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7"
+
+[[package]]
+name = "libfuzzer-sys"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcf184a4b6b274f82a5df6b357da6055d3e82272327bba281c28bbba6f1664ef"
+dependencies = [
+ "arbitrary",
+ "cc",
+]
+
+[[package]]
+name = "libgit2-sys"
+version = "0.14.2+1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f3d95f6b51075fe9810a7ae22c7095f12b98005ab364d8544797a825ce946a4"
+dependencies = [
+ "cc",
+ "libc",
+ "libz-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "libloading"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+dependencies = [
+ "cfg-if 1.0.0",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "libm"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
+
+[[package]]
+name = "libmimalloc-sys"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8c7cbf8b89019683667e347572e6d55a7df7ea36b0c4ce69961b0cde67b174"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "libnghttp2-sys"
+version = "0.1.7+1.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9702761c3935f8cc2f101793272e202c72b99da8f4224a19ddcf1279a6450bbf"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "lightningcss"
+version = "1.0.0-alpha.51"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d6ad516c08b24c246b339159dc2ee2144c012e8ebdf4db4bddefb8734b2b69"
+dependencies = [
+ "ahash 0.7.8",
+ "bitflags 2.4.0",
+ "const-str",
+ "cssparser",
+ "cssparser-color",
+ "dashmap",
+ "data-encoding",
+ "itertools 0.10.5",
+ "lazy_static",
+ "lightningcss-derive",
+ "parcel_selectors",
+ "parcel_sourcemap",
+ "paste",
+ "pathdiff",
+ "rayon",
+ "serde",
+ "smallvec 1.13.1",
+ "static-self",
+]
+
+[[package]]
+name = "lightningcss-derive"
+version = "1.0.0-alpha.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f02a09f0b79d31f1ee13ea55e2f7021037c6b72e0a3ab6c1cb0e9bd7ac8a295"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linked_hash_set"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
+
+[[package]]
+name = "lock_api"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4da24a77a3d8a6d4862d95f72e6fdb9c09a643ecdb402d754004a557f2bec75"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg 1.1.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+dependencies = [
+ "log 0.4.20",
+]
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+dependencies = [
+ "value-bag",
+]
+
+[[package]]
+name = "loop9"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a703804431e5927454bcaf2b2a162595e95db931130c2728c18d050090f69940"
+dependencies = [
+ "imgref",
+]
+
+[[package]]
+name = "lru"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03f1160296536f10c833a82dca22267d5486734230d47bf00bf435885814ba1e"
+dependencies = [
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "lru"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db2c024b41519440580066ba82aab04092b333e09066a5eb86c7c4890df31f22"
+dependencies = [
+ "hashbrown 0.14.3",
+]
+
+[[package]]
+name = "lsp-types"
+version = "0.94.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c66bfd44a06ae10647fe3f8214762e9369fd4248df1350924b4ef9e770a85ea1"
+dependencies = [
+ "bitflags 1.3.2",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "mach"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "markdown"
+version = "1.0.0-alpha.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b0f0025e8c0d89b84d6dc63e859475e40e8e82ab1a08be0a93ad5731513a508"
+dependencies = [
+ "unicode-id",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "matchit"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
+
+[[package]]
+name = "maybe-rayon"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519"
+dependencies = [
+ "cfg-if 1.0.0",
+ "rayon",
+]
+
+[[package]]
+name = "maybe-uninit"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
+
+[[package]]
+name = "md4"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7da5ac363534dce5fabf69949225e174fbf111a498bf0ff794c8ea1fba9f3dda"
+dependencies = [
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "mdxjs"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "539f014f8de0298191ec2c05cb91b8bab0530be56b268dffedac7944c9c5f36a"
+dependencies = [
+ "markdown",
+ "serde",
+ "swc_core",
+]
+
+[[package]]
+name = "memchr"
+version = "2.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
+
+[[package]]
+name = "memmap2"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memmap2"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "merge-streams"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f84f6452969abd246e7ac1fe4fe75906c76e8ec88d898df9aef37e0f3b6a7c2"
+dependencies = [
+ "futures-core",
+ "pin-project",
+]
+
+[[package]]
+name = "miette"
+version = "4.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c90329e44f9208b55f45711f9558cec15d7ef8295cc65ecd6d4188ae8edc58c"
+dependencies = [
+ "atty",
+ "backtrace",
+ "miette-derive 4.7.1",
+ "once_cell",
+ "owo-colors",
+ "supports-color 1.3.1",
+ "supports-hyperlinks 1.2.0",
+ "supports-unicode 1.0.2",
+ "terminal_size 0.1.17",
+ "textwrap 0.15.2",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "miette"
+version = "5.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e"
+dependencies = [
+ "backtrace",
+ "backtrace-ext",
+ "is-terminal",
+ "miette-derive 5.10.0",
+ "once_cell",
+ "owo-colors",
+ "supports-color 2.1.0",
+ "supports-hyperlinks 2.1.0",
+ "supports-unicode 2.0.0",
+ "terminal_size 0.1.17",
+ "textwrap 0.15.2",
+ "thiserror",
+ "unicode-width",
+]
+
+[[package]]
+name = "miette-derive"
+version = "4.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b5bc45b761bcf1b5e6e6c4128cd93b84c218721a8d9b894aa0aff4ed180174c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "miette-derive"
+version = "5.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "mimalloc"
+version = "0.1.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dcb174b18635f7561a0c6c9fc2ce57218ac7523cf72c50af80e2d79ab8f3ba1"
+dependencies = [
+ "libmimalloc-sys",
+]
+
+[[package]]
+name = "mimalloc-rust"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5eb726c8298efb4010b2c46d8050e4be36cf807b9d9e98cb112f830914fc9bbe"
+dependencies = [
+ "cty",
+ "mimalloc-rust-sys",
+]
+
+[[package]]
+name = "mimalloc-rust-sys"
+version = "1.7.9-source"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6413e13241a9809f291568133eca6694572cf528c1a6175502d090adce5dd5db"
+dependencies = [
+ "cc",
+ "cty",
+]
+
+[[package]]
+name = "mime"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba626b8a6de5da682e1caa06bdb42a335aee5a84db8e5046a3e8ab17ba0a3ae0"
+dependencies = [
+ "log 0.3.9",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime 0.3.17",
+ "unicase 2.6.0",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+ "simd-adler32",
+]
+
+[[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 0.4.20",
+ "miow",
+ "net2",
+ "slab",
+ "winapi 0.2.8",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
+dependencies = [
+ "libc",
+ "log 0.4.20",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[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 = "modularize_imports"
+version = "0.68.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca835b60f32cd43b7bcd21ba77563bee0c08f336700463e03eb086d15e46608a"
+dependencies = [
+ "convert_case 0.5.0",
+ "handlebars",
+ "once_cell",
+ "regex",
+ "serde",
+ "swc_atoms",
+ "swc_cached",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_visit",
+]
+
+[[package]]
+name = "mopa"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a785740271256c230f57462d3b83e52f998433a7062fc18f96d5999474a9f915"
+
+[[package]]
+name = "more-asserts"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7843ec2de400bcbc6a6328c958dc38e5359da6e93e72e37bc5246bf1ae776389"
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "napi"
+version = "2.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efbf98e1bcb85cc441bbf7cdfb11070d2537a100e2697d75397b2584c32492d1"
+dependencies = [
+ "bitflags 2.4.0",
+ "ctor",
+ "napi-derive",
+ "napi-sys",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "tokio",
+]
+
+[[package]]
+name = "napi-build"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "882a73d9ef23e8dc2ebbffb6a6ae2ef467c0f18ac10711e4cc59c5485d41df0e"
+
+[[package]]
+name = "napi-derive"
+version = "2.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7622f0dbe0968af2dacdd64870eee6dee94f93c989c841f1ad8f300cf1abd514"
+dependencies = [
+ "cfg-if 1.0.0",
+ "convert_case 0.6.0",
+ "napi-derive-backend",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "napi-derive-backend"
+version = "1.0.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cf2d74ac66fd1cccb646be75fdd1c1dce8acfe20a68f61566a31da0d3eb9786"
+dependencies = [
+ "convert_case 0.6.0",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "semver 1.0.18",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "napi-sys"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2503fa6af34dc83fb74888df8b22afe933b58d37daf7d80424b1c60c68196b8b"
+dependencies = [
+ "libloading 0.8.1",
+]
+
+[[package]]
+name = "nasm-rs"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe4d98d0065f4b1daf164b3eafb11974c94662e5e2396cf03f32d0bb5c17da51"
+dependencies = [
+ "rayon",
+]
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log 0.4.20",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "net2"
+version = "0.2.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d0df99cfcd2530b2e694f6e17e7f37b8e26bb23983ac530c0c97408837c631"
+dependencies = [
+ "cfg-if 0.1.10",
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "newline-converter"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f71d09d5c87634207f894c6b31b6a2b2c64ea3bdcf71bd5599fdbbe1600c00f"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "nix"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
+dependencies = [
+ "autocfg 1.1.0",
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.6.5",
+ "pin-utils",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+ "static_assertions",
+]
+
+[[package]]
+name = "node-file-trace"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap 4.5.2",
+ "console-subscriber",
+ "serde",
+ "serde_json",
+ "tokio",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbo-tasks-malloc",
+ "turbo-tasks-memory",
+ "turbopack",
+ "turbopack-cli-utils",
+ "turbopack-core",
+ "turbopack-resolve",
+]
+
+[[package]]
+name = "node-semver"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84f390c1756333538f2aed01cf280a56bc683e199b9804a504df6e7320d40116"
+dependencies = [
+ "bytecount",
+ "miette 5.10.0",
+ "nom",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "nohash-hasher"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "noop_proc_macro"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8"
+
+[[package]]
+name = "normpath"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a9da8c9922c35a1033d76f7272dfc2e7ee20392083d75aeea6ced23c6266578"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "notify"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
+dependencies = [
+ "bitflags 2.4.0",
+ "crossbeam-channel",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "log 0.4.20",
+ "mio 0.8.8",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "notify-debouncer-full"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f5dab59c348b9b50cf7f261960a20e389feb2713636399cd9082cd4b536154"
+dependencies = [
+ "crossbeam-channel",
+ "file-id",
+ "log 0.4.20",
+ "notify",
+ "parking_lot 0.12.1",
+ "walkdir",
+]
+
+[[package]]
+name = "notify-debouncer-mini"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e55ee272914f4563a2f8b8553eb6811f3c0caea81c756346bad15b7e3ef969f0"
+dependencies = [
+ "notify",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-integer",
+ "num-traits",
+ "serde",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num-derive"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e6a0fd4f737c707bd9086cc16c925f294943eb62eb71499e9fd4cf71f8b9f4e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "num-format"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3"
+dependencies = [
+ "arrayvec 0.7.4",
+ "itoa",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg 1.1.0",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "object"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "opaque-debug"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
+
+[[package]]
+name = "openssl"
+version = "0.10.47"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8b277f87dacc05a6b709965d1cbafac4649d6ce9f3ce9ceb88508b5666dfec9"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a95792af3c4e0153c3914df2261bedd30a98476f94dc892b67dfe1d89d433a04"
+dependencies = [
+ "autocfg 1.1.0",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "ordered-multimap"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4d6a8c22fc714f0c2373e6091bf6f5e9b37b1bc0b1184874b7e0a4e303d318f"
+dependencies = [
+ "dlv-list",
+ "hashbrown 0.14.3",
+]
+
+[[package]]
+name = "os_info"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e"
+dependencies = [
+ "log 0.4.20",
+ "serde",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "outref"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "papergrid"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1526bb6aa9f10ec339fb10360f22c57edf81d5678d0278e93bc12a47ffbe4b01"
+dependencies = [
+ "ansi-str",
+ "ansitok",
+ "bytecount",
+ "fnv",
+ "unicode-width",
+]
+
+[[package]]
+name = "parcel_selectors"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d74befe2d076330d9a58bf9ca2da424568724ab278adf15fb5718253133887"
+dependencies = [
+ "bitflags 2.4.0",
+ "cssparser",
+ "fxhash",
+ "log 0.4.20",
+ "phf 0.10.1",
+ "phf_codegen",
+ "precomputed-hash",
+ "serde",
+ "smallvec 1.13.1",
+ "static-self",
+]
+
+[[package]]
+name = "parcel_sourcemap"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "485b74d7218068b2b7c0e3ff12fbc61ae11d57cb5d8224f525bd304c6be05bbb"
+dependencies = [
+ "base64-simd",
+ "data-url",
+ "rkyv",
+ "serde",
+ "serde_json",
+ "vlq",
+]
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "parking_lot"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
+dependencies = [
+ "lock_api 0.3.4",
+ "parking_lot_core 0.6.3",
+ "rustc_version 0.2.3",
+]
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api 0.4.10",
+ "parking_lot_core 0.9.8",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bda66b810a62be75176a80873726630147a5ca780cd33921e0b5709033e66b0a"
+dependencies = [
+ "cfg-if 0.1.10",
+ "cloudabi",
+ "libc",
+ "redox_syscall 0.1.57",
+ "rustc_version 0.2.3",
+ "smallvec 0.6.14",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.3.5",
+ "smallvec 1.13.1",
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "path-clean"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd"
+
+[[package]]
+name = "path-clean"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef"
+
+[[package]]
+name = "path-slash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42"
+
+[[package]]
+name = "pathdiff"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd"
+
+[[package]]
+name = "pathfinder_geometry"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3"
+dependencies = [
+ "log 0.4.20",
+ "pathfinder_simd",
+]
+
+[[package]]
+name = "pathfinder_simd"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0444332826c70dc47be74a7c6a5fc44e23a7905ad6858d4162b658320455ef93"
+dependencies = [
+ "rustc_version 0.4.0",
+]
+
+[[package]]
+name = "patricia_tree"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "062a6297f2cd3969a780156ccb288eafb34bb5ed0f3c9a2b4500dbde869d4b86"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "percent-encoding"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pest"
+version = "2.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7a4d085fd991ac8d5b05a147b437791b4260b76326baf0fc60cf7c9c27ecd33"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
+dependencies = [
+ "fixedbitset",
+ "indexmap 1.9.3",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_macros",
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared 0.10.0",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared 0.11.2",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
+dependencies = [
+ "phf_generator 0.11.2",
+ "phf_shared 0.11.2",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pidlock"
+version = "0.1.4"
+dependencies = [
+ "libc",
+ "log 0.4.20",
+ "rand 0.8.5",
+ "tempdir",
+ "thiserror",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pipe-trait"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1be1ec9e59f0360aefe84efa6f699198b685ab0d5718081e9f72aa2344289e2"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "plotters"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
+dependencies = [
+ "chrono",
+ "font-kit",
+ "image 0.24.6",
+ "lazy_static",
+ "num-traits",
+ "pathfinder_geometry",
+ "plotters-backend",
+ "plotters-bitmap",
+ "plotters-svg",
+ "ttf-parser",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
+
+[[package]]
+name = "plotters-bitmap"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4a1f21490a6cf4a84c272ad20bd7844ed99a3178187a4c5ab7f2051295beef"
+dependencies = [
+ "gif 0.11.4",
+ "image 0.24.6",
+ "plotters-backend",
+]
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "pmutil"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52a40bc70c2c58040d2d8b167ba9a5ff59fc9dab7ad44771cfde3dcfde7a09c6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "png"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaeebc51f9e7d2c150d3f3bfeb667f2aa985db5ef1e3d212847bdedb488beeaa"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide 0.7.1",
+]
+
+[[package]]
+name = "polling"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa"
+dependencies = [
+ "autocfg 1.1.0",
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "concurrent-queue",
+ "libc",
+ "log 0.4.20",
+ "pin-project-lite",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "pori"
+version = "0.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a63d338dec139f56dacc692ca63ad35a6be6a797442479b55acd611d79e906"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "port_scanner"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "325a6d2ac5dee293c3b2612d4993b98aec1dff096b0a2dae70ed7d95784a05da"
+
+[[package]]
+name = "portable-atomic"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b"
+
+[[package]]
+name = "portable-pty"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "806ee80c2a03dbe1a9fb9534f8d19e4c0546b790cde8fd1fea9d6390644cb0be"
+dependencies = [
+ "anyhow",
+ "bitflags 1.3.2",
+ "downcast-rs",
+ "filedescriptor",
+ "lazy_static",
+ "libc",
+ "log 0.4.20",
+ "nix 0.25.1",
+ "serial",
+ "shared_library",
+ "shell-words",
+ "winapi 0.3.9",
+ "winreg",
+]
+
+[[package]]
+name = "portpicker"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be97d76faf1bfab666e1375477b23fde79eccf0276e9b63b92a39d676a889ba9"
+dependencies = [
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "postcard"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfa512cd0d087cc9f99ad30a1bf64795b67871edbead083ffc3a4dfafa59aa00"
+dependencies = [
+ "cobs",
+ "heapless",
+ "serde",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "pprof"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978385d59daf9269189d052ca8a84c1acfd0715c0599a5d5188d4acc078ca46a"
+dependencies = [
+ "backtrace",
+ "cfg-if 1.0.0",
+ "findshlibs",
+ "libc",
+ "log 0.4.20",
+ "nix 0.26.2",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "prost 0.11.8",
+ "prost-build",
+ "prost-derive 0.11.8",
+ "sha2",
+ "smallvec 1.13.1",
+ "symbolic-demangle",
+ "tempfile",
+ "thiserror",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "predicates"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09963355b9f467184c04017ced4a2ba2d75cbcb4e7462690d388233253d4b1a9"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "itertools 0.10.5",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "preset_env_base"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d99dc6ba4753f07bfbc4dbf3137618d31af2611fcaced7237647075ca687eaa"
+dependencies = [
+ "ahash 0.8.9",
+ "anyhow",
+ "browserslist-rs",
+ "dashmap",
+ "from_variant",
+ "once_cell",
+ "semver 1.0.18",
+ "serde",
+ "st-map",
+ "tracing",
+]
+
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ceca8aaf45b5c46ec7ed39fff75f57290368c1846d33d24a122ca81416ab058"
+dependencies = [
+ "proc-macro2",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "priority-queue"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca9c6be70d989d21a136eb86c2d83e4b328447fac4a88dace2143c179c86267"
+dependencies = [
+ "autocfg 1.1.0",
+ "indexmap 1.9.3",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prost"
+version = "0.11.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537"
+dependencies = [
+ "bytes 1.5.0",
+ "prost-derive 0.11.8",
+]
+
+[[package]]
+name = "prost"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a"
+dependencies = [
+ "bytes 1.5.0",
+ "prost-derive 0.12.3",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.11.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c828f93f5ca4826f97fedcbd3f9a536c16b12cff3dbbb4a007f932bbad95b12"
+dependencies = [
+ "bytes 1.5.0",
+ "heck 0.4.1",
+ "itertools 0.10.5",
+ "lazy_static",
+ "log 0.4.20",
+ "multimap",
+ "petgraph",
+ "prettyplease 0.1.25",
+ "prost 0.11.8",
+ "prost-types 0.11.8",
+ "regex",
+ "syn 1.0.109",
+ "tempfile",
+ "which",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.11.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b"
+dependencies = [
+ "anyhow",
+ "itertools 0.10.5",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e"
+dependencies = [
+ "anyhow",
+ "itertools 0.11.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.11.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88"
+dependencies = [
+ "prost 0.11.8",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e"
+dependencies = [
+ "prost 0.12.3",
+]
+
+[[package]]
+name = "psm"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ptr_meta"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
+dependencies = [
+ "ptr_meta_derive",
+]
+
+[[package]]
+name = "ptr_meta_derive"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8"
+dependencies = [
+ "bitflags 1.3.2",
+ "memchr",
+ "unicase 2.6.0",
+]
+
+[[package]]
+name = "qstring"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d464fae65fff2680baf48019211ce37aaec0c78e9264c84a3e484717f965104e"
+dependencies = [
+ "percent-encoding 2.3.0",
+]
+
+[[package]]
+name = "quick-error"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3"
+
+[[package]]
+name = "quickcheck"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+dependencies = [
+ "env_logger",
+ "log 0.4.20",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "radix_fmt"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce082a9940a7ace2ad4a8b7d0b1eac6aa378895f18be598230c5f2284ac05426"
+
+[[package]]
+name = "rand"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
+dependencies = [
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.3.1",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
+dependencies = [
+ "autocfg 0.1.8",
+ "libc",
+ "rand_chacha 0.1.1",
+ "rand_core 0.4.2",
+ "rand_hc",
+ "rand_isaac",
+ "rand_jitter",
+ "rand_os",
+ "rand_pcg",
+ "rand_xorshift",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.3.1",
+]
+
+[[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 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
+dependencies = [
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_isaac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "rand_jitter"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b"
+dependencies = [
+ "libc",
+ "rand_core 0.4.2",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_os"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071"
+dependencies = [
+ "cloudabi",
+ "fuchsia-cprng",
+ "libc",
+ "rand_core 0.4.2",
+ "rdrand",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "rand_pcg"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
+dependencies = [
+ "autocfg 0.1.8",
+ "rand_core 0.4.2",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "ratatui"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcb12f8fbf6c62614b0d56eb352af54f6a22410c3b079eb53ee93c7b97dd31d8"
+dependencies = [
+ "bitflags 2.4.0",
+ "cassowary",
+ "compact_str",
+ "crossterm 0.27.0",
+ "indoc",
+ "itertools 0.12.0",
+ "lru 0.12.2",
+ "paste",
+ "stability",
+ "strum",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "rav1e"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "277898094f0d03c6a609e491324102daf5080e71c06b4b25e5acf8b89d26c945"
+dependencies = [
+ "arbitrary",
+ "arg_enum_proc_macro",
+ "arrayvec 0.7.4",
+ "av-metrics",
+ "av1-grain",
+ "bitstream-io",
+ "built",
+ "cc",
+ "cfg-if 1.0.0",
+ "clap 4.5.2",
+ "clap_complete",
+ "console",
+ "const_fn_assert",
+ "fern",
+ "interpolate_name",
+ "itertools 0.10.5",
+ "ivf",
+ "libc",
+ "libfuzzer-sys",
+ "log 0.4.20",
+ "maybe-rayon",
+ "nasm-rs",
+ "new_debug_unreachable",
+ "nom",
+ "noop_proc_macro",
+ "num-derive 0.3.3",
+ "num-traits",
+ "once_cell",
+ "paste",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "rust_hawktracer",
+ "rustc_version 0.4.0",
+ "scan_fmt",
+ "signal-hook",
+ "simd_helpers",
+ "system-deps",
+ "thiserror",
+ "v_frame",
+ "wasm-bindgen",
+ "y4m",
+]
+
+[[package]]
+name = "ravif"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0cd36aa2bc280b60619e0c4386a73ff2ac343551dcf400168562ce08cc0c32e0"
+dependencies = [
+ "avif-serialize",
+ "imgref",
+ "loop9",
+ "quick-error",
+ "rav1e",
+ "rayon",
+ "rgb",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f851a03551ceefd30132e447f07f96cb7011d6b658374f3aed847333adb5559"
+
+[[package]]
+name = "rayon"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils 0.8.16",
+ "num_cpus",
+]
+
+[[package]]
+name = "rdrand"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
+dependencies = [
+ "rand_core 0.3.1",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.1.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "ref-cast"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280"
+dependencies = [
+ "ref-cast-impl",
+]
+
+[[package]]
+name = "ref-cast-impl"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "regalloc2"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c"
+dependencies = [
+ "fxhash",
+ "log 0.4.20",
+ "slice-group-by",
+ "smallvec 1.13.1",
+]
+
+[[package]]
+name = "regex"
+version = "1.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47"
+dependencies = [
+ "aho-corasick 1.0.5",
+ "memchr",
+ "regex-automata 0.3.8",
+ "regex-syntax 0.7.5",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795"
+dependencies = [
+ "aho-corasick 1.0.5",
+ "memchr",
+ "regex-syntax 0.7.5",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "region"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "mach",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "relative-path"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c707298afce11da2efef2f600116fa93ffa7a032b5d7b628aa17711ec81383ca"
+
+[[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 = "rend"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab"
+dependencies = [
+ "bytecheck",
+]
+
+[[package]]
+name = "replace_with"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3a8614ee435691de62bcffcf4a66d91b3594bf1428a5722e79103249a095690"
+
+[[package]]
+name = "reqwest"
+version = "0.11.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91"
+dependencies = [
+ "base64 0.21.4",
+ "bytes 1.5.0",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper 0.14.28",
+ "hyper-rustls",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log 0.4.20",
+ "mime 0.3.17",
+ "native-tls",
+ "once_cell",
+ "percent-encoding 2.3.0",
+ "pin-project-lite",
+ "rustls 0.20.9",
+ "rustls-native-certs",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls",
+ "tower-service",
+ "url 2.4.1",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots 0.22.6",
+ "winreg",
+]
+
+[[package]]
+name = "rgb"
+version = "0.8.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "ring"
+version = "0.16.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
+dependencies = [
+ "cc",
+ "libc",
+ "once_cell",
+ "spin 0.5.2",
+ "untrusted 0.7.1",
+ "web-sys",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc",
+ "spin 0.9.8",
+ "untrusted 0.9.0",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rkyv"
+version = "0.7.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0200c8230b013893c0b2d6213d6ec64ed2b9be2e0e016682b7224ff82cff5c58"
+dependencies = [
+ "bitvec",
+ "bytecheck",
+ "hashbrown 0.12.3",
+ "indexmap 1.9.3",
+ "ptr_meta",
+ "rend",
+ "rkyv_derive",
+ "seahash",
+ "tinyvec",
+ "uuid",
+]
+
+[[package]]
+name = "rkyv_derive"
+version = "0.7.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2e06b915b5c230a17d7a736d1e2e63ee753c256a8614ef3f5147b13a4f5541d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "rstest"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b07f2d176c472198ec1e6551dc7da28f1c089652f66a7b722676c2238ebc0edf"
+dependencies = [
+ "futures 0.3.28",
+ "futures-timer",
+ "rstest_macros",
+ "rustc_version 0.4.0",
+]
+
+[[package]]
+name = "rstest_macros"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7229b505ae0706e64f37ffc54a9c163e11022a6636d58fe1f3f52018257ff9f7"
+dependencies = [
+ "cfg-if 1.0.0",
+ "proc-macro2",
+ "quote",
+ "rustc_version 0.4.0",
+ "syn 1.0.109",
+ "unicode-ident",
+]
+
+[[package]]
+name = "rstest_reuse"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45f80dcc84beab3a327bbe161f77db25f336a1452428176787c8c79ac79d7073"
+dependencies = [
+ "quote",
+ "rand 0.8.5",
+ "rustc_version 0.4.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "rust-ini"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a"
+dependencies = [
+ "cfg-if 1.0.0",
+ "ordered-multimap",
+]
+
+[[package]]
+name = "rust_hawktracer"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3480a29b927f66c6e06527be7f49ef4d291a01d694ec1fe85b0de71d6b02ac1"
+dependencies = [
+ "rust_hawktracer_normal_macro",
+ "rust_hawktracer_proc_macro",
+]
+
+[[package]]
+name = "rust_hawktracer_normal_macro"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a570059949e1dcdc6f35228fa389f54c2c84dfe0c94c05022baacd56eacd2e9"
+
+[[package]]
+name = "rust_hawktracer_proc_macro"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb626abdbed5e93f031baae60d72032f56bc964e11ac2ff65f2ba3ed98d6d3e1"
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.18",
+]
+
+[[package]]
+name = "rustc_version_runtime"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f"
+dependencies = [
+ "rustc_version 0.2.3",
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version_runtime"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dd18cd2bae1820af0b6ad5e54f4a51d0f3fcc53b05f845675074efcc7af071d"
+dependencies = [
+ "rustc_version 0.4.0",
+ "semver 1.0.18",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.13",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.20.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99"
+dependencies = [
+ "log 0.4.20",
+ "ring 0.16.20",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba"
+dependencies = [
+ "log 0.4.20",
+ "ring 0.17.7",
+ "rustls-webpki",
+ "sct",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+dependencies = [
+ "base64 0.21.4",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring 0.17.7",
+ "untrusted 0.9.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "rusty_pool"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ed36cdb20de66d89a17ea04b8883fc7a386f2cf877aaedca5005583ce4876ff"
+dependencies = [
+ "crossbeam-channel",
+ "futures 0.3.28",
+ "futures-channel",
+ "futures-executor",
+ "num_cpus",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "ryu-js"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4950d85bc52415f8432144c97c4791bd0c4f7954de32a7270ee9cccd3c22b12b"
+
+[[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 = "scan_fmt"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b53b0a5db882a8e2fdaae0a43f7b39e7e9082389e978398bdf223a55b581248"
+
+[[package]]
+name = "schannel"
+version = "0.1.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "schemars"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45a28f4c49489add4ce10783f7911893516f15afe45d015608d41faca6bc4d29"
+dependencies = [
+ "dyn-clone",
+ "schemars_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "schemars_derive"
+version = "0.8.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c767fd6fa65d9ccf9cf026122c1b555f2ef9a4f0cea69da4d7dbc3e258d30967"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "serde_derive_internals",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring 0.16.20",
+ "untrusted 0.7.1",
+]
+
+[[package]]
+name = "seahash"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "self_cell"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58bf37232d3bb9a2c4e641ca2a11d83b5062066f88df7fed36c28772046d65ba"
+
+[[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"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+dependencies = [
+ "serde",
+]
+
+[[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.190"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "416bda436f9aab92e02c8e10d49a15ddd339cea90b6e340fe51ed97abb548294"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_cbor"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5"
+dependencies = [
+ "half",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.190"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85bf8229e7920a9f636479437026331ce11aa132b4dde37d121944a44d6e5f3c"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cc66a619ed80bf7a0f6b17dd063a84b88f6dea1813737cf469aef1d081142c2"
+dependencies = [
+ "indexmap 2.2.3",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7f05c1d5476066defcdfacce1f52fc3cae3af1d3089727100c02ae92e5abbe0"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c679fa27b429f2bb57fd4710257e643e86c966e716037259f8baa33de594a1b6"
+dependencies = [
+ "percent-encoding 2.3.0",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_regex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf"
+dependencies = [
+ "regex",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_test"
+version = "1.0.157"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4231c6fab29d02b3cc705db3422aa36f7d23f1e1c096c947c8b8816d7c43dd45"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "331bb8c3bf9b92457ab7abecf07078c13f7d270ba490103e84e8b014490cd0b0"
+dependencies = [
+ "base64 0.13.1",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "serde",
+ "serde_json",
+ "serde_with_macros",
+ "time 0.3.30",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859011bddcc11f289f07f467cc1fe01c7a941daa4d8f6c40d4d1c92eb6d9319c"
+dependencies = [
+ "darling 0.14.4",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap 1.9.3",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c"
+dependencies = [
+ "indexmap 2.2.3",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "serial"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1237a96570fc377c13baa1b88c7589ab66edced652e43ffb17088f003db3e86"
+dependencies = [
+ "serial-core",
+ "serial-unix",
+ "serial-windows",
+]
+
+[[package]]
+name = "serial-core"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f46209b345401737ae2125fe5b19a77acce90cd53e1658cda928e4fe9a64581"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "serial-unix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f03fbca4c9d866e24a459cbca71283f545a37f8e3e002ad8c70593871453cab7"
+dependencies = [
+ "ioctl-rs",
+ "libc",
+ "serial-core",
+ "termios 0.2.2",
+]
+
+[[package]]
+name = "serial-windows"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c6d3b776267a75d31bbdfd5d36c0ca051251caafc285827052bc53bcdc8162"
+dependencies = [
+ "libc",
+ "serial-core",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
+dependencies = [
+ "block-buffer 0.7.3",
+ "digest 0.8.1",
+ "fake-simd",
+ "opaque-debug",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest 0.10.7",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shared-buffer"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6c99835bad52957e7aa241d3975ed17c1e5f8c92026377d117a606f36b84b16"
+dependencies = [
+ "bytes 1.5.0",
+ "memmap2 0.6.2",
+]
+
+[[package]]
+name = "shared_child"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "shared_library"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a9e7e0f2bfae24d8a5b5a66c5b257a83c7412304311512a0c054cd5e619da11"
+dependencies = [
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[package]]
+name = "shlex"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380"
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio 0.8.8",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signposter"
+version = "0.1.0"
+dependencies = [
+ "once_cell",
+ "signposter-sys",
+]
+
+[[package]]
+name = "signposter-sys"
+version = "0.1.0"
+dependencies = [
+ "bindgen",
+]
+
+[[package]]
+name = "simd-abstraction"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987"
+dependencies = [
+ "outref",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f"
+
+[[package]]
+name = "simd_helpers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6"
+dependencies = [
+ "quote",
+]
+
+[[package]]
+name = "simdutf8"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
+
+[[package]]
+name = "similar"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
+dependencies = [
+ "bstr 0.2.17",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg 1.1.0",
+]
+
+[[package]]
+name = "slice-group-by"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03b634d87b960ab1a38c4fe143b508576f075e7c978bfad18217645ebfdfa2ec"
+
+[[package]]
+name = "sluice"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5"
+dependencies = [
+ "async-channel",
+ "futures-core",
+ "futures-io",
+]
+
+[[package]]
+name = "smallvec"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
+dependencies = [
+ "maybe-uninit",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "smartstring"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
+dependencies = [
+ "autocfg 1.1.0",
+ "static_assertions",
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "smawk"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
+
+[[package]]
+name = "socket2"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4031e820eb552adee9295814c0ced9e5cf38ddf1e8b7d566d6de8e2538ea989e"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "sourcemap"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4cbf65ca7dc576cf50e21f8d0712d96d4fcfd797389744b7b222a85cdf5bd90"
+dependencies = [
+ "data-encoding",
+ "debugid",
+ "if_chain",
+ "rustc_version 0.2.3",
+ "serde",
+ "serde_json",
+ "unicode-id",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api 0.4.10",
+]
+
+[[package]]
+name = "st-map"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f352d5d14be5a1f956d76ae0c8060c3487aaa2a080f10a4b4ff023c7c05a9047"
+dependencies = [
+ "arrayvec 0.7.4",
+ "static-map-macro",
+]
+
+[[package]]
+name = "stability"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd1b177894da2a2d9120208c3386066af06a488255caabc5de8ddca22dbc3ce"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "stable_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[package]]
+name = "stacker"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce"
+dependencies = [
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "psm",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "static-map-macro"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7628ae0bd92555d3de4303da41a5c8b1c5363e892001325f34e4be9ed024d0d7"
+dependencies = [
+ "pmutil",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "static-self"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "253e76c8c993a7b1b201b0539228b334582153cd4364292822d2c30776d469c7"
+dependencies = [
+ "smallvec 1.13.1",
+ "static-self-derive",
+]
+
+[[package]]
+name = "static-self-derive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5268c96d4b907c558a9a52d8492522d6c7b559651a5e1d8f2d551e461b9425d5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "stop-token"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af91f480ee899ab2d9f8435bfdfc14d08a5754bd9d3fef1f1a1c23336aad6c8b"
+dependencies = [
+ "async-channel",
+ "cfg-if 1.0.0",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "str_indices"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9557cb6521e8d009c51a8666f09356f4b817ba9ba0981a305bd86aee47bd35c"
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+ "serde",
+]
+
+[[package]]
+name = "string_cache_codegen"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "string_enum"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b650ea2087d32854a0f20b837fc56ec987a1cb4f758c9757e1171ee9812da63"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "swc_macros_common",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strsim"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01"
+
+[[package]]
+name = "struct_iterable"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "849a064c6470a650b72e41fa6c057879b68f804d113af92900f27574828e7712"
+dependencies = [
+ "struct_iterable_derive",
+ "struct_iterable_internal",
+]
+
+[[package]]
+name = "struct_iterable_derive"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bb939ce88a43ea4e9d012f2f6b4cc789deb2db9d47bad697952a85d6978662c"
+dependencies = [
+ "erased-serde",
+ "proc-macro2",
+ "quote",
+ "struct_iterable_internal",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "struct_iterable_internal"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9426b2a0c03e6cc2ea8dbc0168dbbf943f88755e409fb91bcb8f6a268305f4a"
+
+[[package]]
+name = "strum"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "723b93e8addf9aa965ebe2d11da6d7540fa2283fcea14b3371ff055f7ba13f5f"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a3417fc93d76740d974a01654a09777cb500428cc874ca9f45edfe0c4d4cd18"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "styled_components"
+version = "0.96.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b88be314a64500e2931dafab22e915dea4365fef357d04e26d6be4105b0a809c"
+dependencies = [
+ "Inflector",
+ "once_cell",
+ "regex",
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "tracing",
+]
+
+[[package]]
+name = "styled_jsx"
+version = "0.73.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb7b2381ed0b1ba760b75671388d45be3196ab8514a6429b4fca05ab9dcfc86c"
+dependencies = [
+ "anyhow",
+ "lightningcss",
+ "parcel_selectors",
+ "preset_env_base",
+ "serde",
+ "swc_common",
+ "swc_css_ast",
+ "swc_css_codegen",
+ "swc_css_compat",
+ "swc_css_minifier",
+ "swc_css_parser",
+ "swc_css_prefixer",
+ "swc_css_visit",
+ "swc_ecma_ast",
+ "swc_ecma_minifier",
+ "swc_ecma_parser",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_plugin_macro",
+ "tracing",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "supports-color"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ba6faf2ca7ee42fdd458f4347ae0a9bd6bcc445ad7cb57ad82b383f18870d6f"
+dependencies = [
+ "atty",
+ "is_ci",
+]
+
+[[package]]
+name = "supports-color"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89"
+dependencies = [
+ "is-terminal",
+ "is_ci",
+]
+
+[[package]]
+name = "supports-hyperlinks"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "590b34f7c5f01ecc9d78dba4b3f445f31df750a67621cf31626f3b7441ce6406"
+dependencies = [
+ "atty",
+]
+
+[[package]]
+name = "supports-hyperlinks"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f84231692eb0d4d41e4cdd0cabfdd2e6cd9e255e65f80c9aa7c98dd502b4233d"
+dependencies = [
+ "is-terminal",
+]
+
+[[package]]
+name = "supports-unicode"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8b945e45b417b125a8ec51f1b7df2f8df7920367700d1f98aedd21e5735f8b2"
+dependencies = [
+ "atty",
+]
+
+[[package]]
+name = "supports-unicode"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b6c2cb240ab5dd21ed4906895ee23fe5a48acdbd15a3ce388e7b62a9b66baf7"
+dependencies = [
+ "is-terminal",
+]
+
+[[package]]
+name = "svix-ksuid"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75d773122e48817eb6eb74605cf799574a855bf4c7eb0c1bb06c005067123b13"
+dependencies = [
+ "base-encode",
+ "byteorder",
+ "getrandom",
+ "serde",
+ "time 0.3.30",
+]
+
+[[package]]
+name = "swc"
+version = "0.273.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48a68d147a2270bbe2164ee4060d0176590a1035f54d82f7252d16a15e4154a9"
+dependencies = [
+ "anyhow",
+ "base64 0.21.4",
+ "dashmap",
+ "either",
+ "indexmap 2.2.3",
+ "jsonc-parser 0.21.0",
+ "lru 0.10.0",
+ "napi",
+ "napi-derive",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "pathdiff",
+ "regex",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "sourcemap",
+ "swc_atoms",
+ "swc_cached",
+ "swc_common",
+ "swc_compiler_base",
+ "swc_config",
+ "swc_ecma_ast",
+ "swc_ecma_codegen",
+ "swc_ecma_ext_transforms",
+ "swc_ecma_lints",
+ "swc_ecma_loader",
+ "swc_ecma_minifier",
+ "swc_ecma_parser",
+ "swc_ecma_preset_env",
+ "swc_ecma_transforms",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_compat",
+ "swc_ecma_transforms_optimization",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_error_reporters",
+ "swc_node_comments",
+ "swc_plugin_proxy",
+ "swc_plugin_runner",
+ "swc_timer",
+ "swc_visit",
+ "tokio",
+ "tracing",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "swc-ast-explorer"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap 4.5.2",
+ "owo-colors",
+ "regex",
+ "swc_core",
+]
+
+[[package]]
+name = "swc_atoms"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d538eaaa6f085161d088a04cf0a3a5a52c5a7f2b3bd9b83f73f058b0ed357c0"
+dependencies = [
+ "bytecheck",
+ "hstr",
+ "once_cell",
+ "rkyv",
+ "rustc-hash",
+ "serde",
+]
+
+[[package]]
+name = "swc_bundler"
+version = "0.225.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f145a1a7293edce9efa80fe4f92a2cbd821c31d5c3123d04182fc1928613d978"
+dependencies = [
+ "anyhow",
+ "crc",
+ "dashmap",
+ "indexmap 2.2.3",
+ "is-macro",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "petgraph",
+ "radix_fmt",
+ "rayon",
+ "relative-path",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_codegen",
+ "swc_ecma_loader",
+ "swc_ecma_parser",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_optimization",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_fast_graph",
+ "swc_graph_analyzer",
+ "tracing",
+]
+
+[[package]]
+name = "swc_cached"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630c761c74ac8021490b78578cc2223aa4a568241e26505c27bf0e4fd4ad8ec2"
+dependencies = [
+ "ahash 0.8.9",
+ "anyhow",
+ "dashmap",
+ "once_cell",
+ "regex",
+ "serde",
+]
+
+[[package]]
+name = "swc_common"
+version = "0.33.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "317d2fcdbb1bc9ecfd0bfc67468d675a5159a6fd1863abf41c8c5b7b7adcab03"
+dependencies = [
+ "ahash 0.8.9",
+ "anyhow",
+ "ast_node",
+ "atty",
+ "better_scoped_tls",
+ "bytecheck",
+ "cfg-if 1.0.0",
+ "either",
+ "from_variant",
+ "new_debug_unreachable",
+ "num-bigint",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "rkyv",
+ "rustc-hash",
+ "serde",
+ "siphasher",
+ "sourcemap",
+ "swc_atoms",
+ "swc_eq_ignore_macros",
+ "swc_visit",
+ "termcolor",
+ "tracing",
+ "unicode-width",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "swc_compiler_base"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14edecfac835e77c88017d016c48dba60e82632ee94eb9565f516ebc7072e6a"
+dependencies = [
+ "anyhow",
+ "base64 0.21.4",
+ "napi",
+ "napi-derive",
+ "once_cell",
+ "pathdiff",
+ "serde",
+ "sourcemap",
+ "swc_atoms",
+ "swc_common",
+ "swc_config",
+ "swc_ecma_ast",
+ "swc_ecma_codegen",
+ "swc_ecma_minifier",
+ "swc_ecma_parser",
+ "swc_ecma_visit",
+ "swc_timer",
+]
+
+[[package]]
+name = "swc_config"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce837c5eae1cb200a310940de989fd9b3d12ed62d7752bc69b39ef8aa775ec04"
+dependencies = [
+ "anyhow",
+ "indexmap 2.2.3",
+ "serde",
+ "serde_json",
+ "sourcemap",
+ "swc_cached",
+ "swc_config_macro",
+]
+
+[[package]]
+name = "swc_config_macro"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b2574f75082322a27d990116cd2a24de52945fc94172b24ca0b3e9e2a6ceb6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "swc_macros_common",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "swc_core"
+version = "0.90.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "354892a17af24956c9ae5479c2bd0a2f9c344aab79e6f2fbd01b7b8eb4e46c2e"
+dependencies = [
+ "binding_macros",
+ "swc",
+ "swc_atoms",
+ "swc_bundler",
+ "swc_cached",
+ "swc_common",
+ "swc_css_ast",
+ "swc_css_codegen",
+ "swc_css_compat",
+ "swc_css_modules",
+ "swc_css_parser",
+ "swc_css_visit",
+ "swc_ecma_ast",
+ "swc_ecma_codegen",
+ "swc_ecma_lints",
+ "swc_ecma_loader",
+ "swc_ecma_minifier",
+ "swc_ecma_parser",
+ "swc_ecma_preset_env",
+ "swc_ecma_quote_macros",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_module",
+ "swc_ecma_transforms_optimization",
+ "swc_ecma_transforms_proposal",
+ "swc_ecma_transforms_react",
+ "swc_ecma_transforms_testing",
+ "swc_ecma_transforms_typescript",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_malloc",
+ "swc_nodejs_common",
+ "swc_plugin_proxy",
+ "swc_plugin_runner",
+ "testing",
+ "vergen",
+]
+
+[[package]]
+name = "swc_css_ast"
+version = "0.140.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a930397de06e2d10d5042d927993af9e09e7824ff84b7d4d7b4a663e7c63e55d"
+dependencies = [
+ "is-macro",
+ "string_enum",
+ "swc_atoms",
+ "swc_common",
+]
+
+[[package]]
+name = "swc_css_codegen"
+version = "0.151.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dfdbd0d5eeb7b4cb4193d49aad0c1f1d8561b0533607992505a7c4a11dce4e8"
+dependencies = [
+ "auto_impl",
+ "bitflags 2.4.0",
+ "rustc-hash",
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_css_ast",
+ "swc_css_codegen_macros",
+ "swc_css_utils",
+]
+
+[[package]]
+name = "swc_css_codegen_macros"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0db1d634bcd2df2b694e2bf9320b8f808db3451e35d70e36252966b551a11ef4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "swc_macros_common",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "swc_css_compat"
+version = "0.27.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c8c4ffbda70abf13435778820470a804619bd1f33e6d11412a7de595ebcfbbb"
+dependencies = [
+ "bitflags 2.4.0",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "swc_atoms",
+ "swc_common",
+ "swc_css_ast",
+ "swc_css_utils",
+ "swc_css_visit",
+]
+
+[[package]]
+name = "swc_css_minifier"
+version = "0.116.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc7000b4de2dfbd04d8f2a1cc99046b8594fd9cd67fc9593f07df5425a508f75"
+dependencies = [
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_css_ast",
+ "swc_css_utils",
+ "swc_css_visit",
+]
+
+[[package]]
+name = "swc_css_modules"
+version = "0.29.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "209966e658fb11773a8d14c004554fdc667f6d44128942c47f3d0195cf483613"
+dependencies = [
+ "rustc-hash",
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_css_ast",
+ "swc_css_codegen",
+ "swc_css_parser",
+ "swc_css_visit",
+]
+
+[[package]]
+name = "swc_css_parser"
+version = "0.150.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecf8cfbef4c0b847829ca1399d762e7e29da3c9fe6593670145fd222252eab6f"
+dependencies = [
+ "lexical",
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_css_ast",
+]
+
+[[package]]
+name = "swc_css_prefixer"
+version = "0.153.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25c08c9394e9d314f4d7995653e7ef7bc9563aff1cb736457ed9009e278d72b9"
+dependencies = [
+ "once_cell",
+ "preset_env_base",
+ "serde",
+ "serde_json",
+ "swc_atoms",
+ "swc_common",
+ "swc_css_ast",
+ "swc_css_utils",
+ "swc_css_visit",
+]
+
+[[package]]
+name = "swc_css_utils"
+version = "0.137.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ac61660cd182bbb0fc53ee86f470e8bba6f5b0f1d85e44bf4ff9dfa2c862a12"
+dependencies = [
+ "once_cell",
+ "serde",
+ "serde_json",
+ "swc_atoms",
+ "swc_common",
+ "swc_css_ast",
+ "swc_css_visit",
+]
+
+[[package]]
+name = "swc_css_visit"
+version = "0.139.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2bc4deb5540e3869f74e09997b2dd9e1d7b3f750ba2c910f88041f8027868c5"
+dependencies = [
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_css_ast",
+ "swc_visit",
+]
+
+[[package]]
+name = "swc_ecma_ast"
+version = "0.112.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70656acd47c91918635f1e8589963428cb3170975b71d786c79fb7a25605f687"
+dependencies = [
+ "bitflags 2.4.0",
+ "bytecheck",
+ "is-macro",
+ "num-bigint",
+ "phf 0.11.2",
+ "rkyv",
+ "scoped-tls",
+ "serde",
+ "string_enum",
+ "swc_atoms",
+ "swc_common",
+ "unicode-id",
+]
+
+[[package]]
+name = "swc_ecma_codegen"
+version = "0.148.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2afcce205914b8451880fc5ef63dae9bac3dc7b71917921ede64f8e7fd8447a1"
+dependencies = [
+ "memchr",
+ "num-bigint",
+ "once_cell",
+ "rustc-hash",
+ "serde",
+ "sourcemap",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_codegen_macros",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_codegen_macros"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "394b8239424b339a12012ceb18726ed0244fce6bf6345053cb9320b2791dcaa5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "swc_macros_common",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "swc_ecma_compat_bugfixes"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8731bec087336f7ed1cd4d4c082a6f7b7b9072ac5fc6f6379b6f98520a0e8303"
+dependencies = [
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_compat_es2015",
+ "swc_ecma_transforms_base",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_compat_common"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b06844b66a86b8f3bad66888500fd8fe1e4ac09612c5ae0946ca3f77b81f6b0"
+dependencies = [
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+]
+
+[[package]]
+name = "swc_ecma_compat_es2015"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7646243203205d2409a891b998d4d30b7a4563a57429da1cbeabd03f18e506b2"
+dependencies = [
+ "arrayvec 0.7.4",
+ "indexmap 2.2.3",
+ "is-macro",
+ "serde",
+ "serde_derive",
+ "smallvec 1.13.1",
+ "swc_atoms",
+ "swc_common",
+ "swc_config",
+ "swc_ecma_ast",
+ "swc_ecma_compat_common",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_classes",
+ "swc_ecma_transforms_macros",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_compat_es2016"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c75e868ae64fe2625c8aae1f929bae734500ae336d37731f6d4bdf66b8e3b8d3"
+dependencies = [
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_macros",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_compat_es2017"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9335b27e554e21db7cd541bcee1b5a58b5994439d1a2cb1c9188a3a557548d3"
+dependencies = [
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_macros",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_compat_es2018"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66be32a60872762335524766f0afca4900699e1fc7ab14d87567e0e9b3d95cc2"
+dependencies = [
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_compat_common",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_macros",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_compat_es2019"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a984708b06d662df1c10c2fc06bf98562c6ea3bb93c0e4d5491ee8e61c08e00"
+dependencies = [
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms_base",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_compat_es2020"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8b310227bbafd12dbe717c1969bf5095e9b6aff563cea3e9ff6e46371971293"
+dependencies = [
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_compat_es2022",
+ "swc_ecma_transforms_base",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_compat_es2021"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab566642dff583a16b7b188cf9effc6ae603ea2172769f7a3e7fc1aaf41b67b3"
+dependencies = [
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms_base",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_compat_es2022"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62fcfa41b83014ee338c219c446e4ac7f66620706d871b1234d68f990a26225b"
+dependencies = [
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_compat_common",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_classes",
+ "swc_ecma_transforms_macros",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_compat_es3"
+version = "0.4.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3678f2454374d8aefe0997fa32089dd2c3f06d20ecaa0d1fa30c0d3e9871c79b"
+dependencies = [
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms_base",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_ext_transforms"
+version = "0.113.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d02e315207f4c6fd0a1a475039b2874392e46a04d1a297c9c66ef0082d9fce"
+dependencies = [
+ "phf 0.11.2",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+]
+
+[[package]]
+name = "swc_ecma_lints"
+version = "0.92.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12d3615603b9719f33180080ccada04d0cb6a077d90c958a71d746c7b015c040"
+dependencies = [
+ "auto_impl",
+ "dashmap",
+ "parking_lot 0.12.1",
+ "rayon",
+ "regex",
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_config",
+ "swc_ecma_ast",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+]
+
+[[package]]
+name = "swc_ecma_loader"
+version = "0.45.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6732100aba9bec438fcff857ab8db5e5d3b64b42a522aec7c388d8c98a36d22a"
+dependencies = [
+ "anyhow",
+ "dashmap",
+ "lru 0.10.0",
+ "normpath",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "path-clean 0.1.0",
+ "pathdiff",
+ "serde",
+ "serde_json",
+ "swc_atoms",
+ "swc_cached",
+ "swc_common",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_minifier"
+version = "0.192.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624b38cf23679ab41ca0e47c37f49617275cb15ad7bbaa66a307c42e67ebc1d5"
+dependencies = [
+ "arrayvec 0.7.4",
+ "indexmap 2.2.3",
+ "num-bigint",
+ "num_cpus",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "radix_fmt",
+ "rayon",
+ "regex",
+ "rustc-hash",
+ "ryu-js",
+ "serde",
+ "serde_json",
+ "swc_atoms",
+ "swc_common",
+ "swc_config",
+ "swc_ecma_ast",
+ "swc_ecma_codegen",
+ "swc_ecma_parser",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_optimization",
+ "swc_ecma_usage_analyzer",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_timer",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_parser"
+version = "0.143.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b919bb9ae5e1c8c54fb109f7e94b4a00185bd255c1238ba823e8102601e2133"
+dependencies = [
+ "either",
+ "new_debug_unreachable",
+ "num-bigint",
+ "num-traits",
+ "phf 0.11.2",
+ "serde",
+ "smallvec 1.13.1",
+ "smartstring",
+ "stacker",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "tracing",
+ "typed-arena",
+]
+
+[[package]]
+name = "swc_ecma_preset_env"
+version = "0.206.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e30d4cf2d63c2094d22a2778537353ea817f91c42c2e3bafc88cbe064b1f681"
+dependencies = [
+ "anyhow",
+ "dashmap",
+ "indexmap 2.2.3",
+ "once_cell",
+ "preset_env_base",
+ "rustc-hash",
+ "semver 1.0.18",
+ "serde",
+ "serde_json",
+ "st-map",
+ "string_enum",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+]
+
+[[package]]
+name = "swc_ecma_quote_macros"
+version = "0.54.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a0e789f5cced50904847f0fefef0f416156c12f0e0cf8b054f6fba6233023a"
+dependencies = [
+ "anyhow",
+ "proc-macro2",
+ "quote",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_parser",
+ "swc_macros_common",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "swc_ecma_testing"
+version = "0.22.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c5704ef494b1805bc4566ff566b964bc1e9d3fb0f0e046ad6392b09a54de844"
+dependencies = [
+ "anyhow",
+ "hex",
+ "sha2",
+ "testing",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_transforms"
+version = "0.229.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52b22e7877d623332da5f2a93c204e808091ab2da1c060f794eaea66506fb530"
+dependencies = [
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_compat",
+ "swc_ecma_transforms_module",
+ "swc_ecma_transforms_optimization",
+ "swc_ecma_transforms_proposal",
+ "swc_ecma_transforms_react",
+ "swc_ecma_transforms_typescript",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+]
+
+[[package]]
+name = "swc_ecma_transforms_base"
+version = "0.137.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69e9a23d6af398b6efd17bbdad2cfa580102f6c560611f85c63b48f76ffe8f0c"
+dependencies = [
+ "better_scoped_tls",
+ "bitflags 2.4.0",
+ "indexmap 2.2.3",
+ "once_cell",
+ "phf 0.11.2",
+ "rayon",
+ "rustc-hash",
+ "serde",
+ "smallvec 1.13.1",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_parser",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_transforms_classes"
+version = "0.126.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47af84e64f0216f110839f5552a615d07ed74b45757927f29482700966ab4e97"
+dependencies = [
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms_base",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+]
+
+[[package]]
+name = "swc_ecma_transforms_compat"
+version = "0.163.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "895101f18b39009b8d27f231222e6459a0e71151ba0b3ddf934373bf657602b2"
+dependencies = [
+ "arrayvec 0.7.4",
+ "indexmap 2.2.3",
+ "is-macro",
+ "num-bigint",
+ "rayon",
+ "serde",
+ "smallvec 1.13.1",
+ "swc_atoms",
+ "swc_common",
+ "swc_config",
+ "swc_ecma_ast",
+ "swc_ecma_compat_bugfixes",
+ "swc_ecma_compat_common",
+ "swc_ecma_compat_es2015",
+ "swc_ecma_compat_es2016",
+ "swc_ecma_compat_es2017",
+ "swc_ecma_compat_es2018",
+ "swc_ecma_compat_es2019",
+ "swc_ecma_compat_es2020",
+ "swc_ecma_compat_es2021",
+ "swc_ecma_compat_es2022",
+ "swc_ecma_compat_es3",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_classes",
+ "swc_ecma_transforms_macros",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_transforms_macros"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17e309b88f337da54ef7fe4c5b99c2c522927071f797ee6c9fb8b6bf2d100481"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "swc_macros_common",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "swc_ecma_transforms_module"
+version = "0.180.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82c53f9d5e7384e840f78d096f0ed2e8cfd38486adafb282ef8550420cd44890"
+dependencies = [
+ "Inflector",
+ "anyhow",
+ "bitflags 2.4.0",
+ "indexmap 2.2.3",
+ "is-macro",
+ "path-clean 0.1.0",
+ "pathdiff",
+ "regex",
+ "serde",
+ "swc_atoms",
+ "swc_cached",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_loader",
+ "swc_ecma_parser",
+ "swc_ecma_transforms_base",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_transforms_optimization"
+version = "0.198.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86789174146707d78c086cee25868624bdfef924bb535ea3fc42f53fa426d4c0"
+dependencies = [
+ "dashmap",
+ "indexmap 2.2.3",
+ "once_cell",
+ "petgraph",
+ "rayon",
+ "rustc-hash",
+ "serde_json",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_parser",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_macros",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_fast_graph",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_transforms_proposal"
+version = "0.171.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "278fec72878ab88f63cf797b33091045d29789dfe13c4051ab7ea6731c4b7ffd"
+dependencies = [
+ "either",
+ "rustc-hash",
+ "serde",
+ "smallvec 1.13.1",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_classes",
+ "swc_ecma_transforms_macros",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+]
+
+[[package]]
+name = "swc_ecma_transforms_react"
+version = "0.183.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "762dad12edcdca424213354518ce60bc3f03a026f8e1990b11459311cef04c91"
+dependencies = [
+ "base64 0.21.4",
+ "dashmap",
+ "indexmap 2.2.3",
+ "once_cell",
+ "rayon",
+ "serde",
+ "sha-1 0.10.0",
+ "string_enum",
+ "swc_atoms",
+ "swc_common",
+ "swc_config",
+ "swc_ecma_ast",
+ "swc_ecma_parser",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_macros",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+]
+
+[[package]]
+name = "swc_ecma_transforms_testing"
+version = "0.140.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9a51288aebf6894f8643c44ad08ed1d9c81b8bfce47195c13f9ff994b77a946"
+dependencies = [
+ "ansi_term",
+ "anyhow",
+ "base64 0.21.4",
+ "hex",
+ "serde",
+ "serde_json",
+ "sha2",
+ "sourcemap",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_codegen",
+ "swc_ecma_parser",
+ "swc_ecma_testing",
+ "swc_ecma_transforms_base",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "tempfile",
+ "testing",
+]
+
+[[package]]
+name = "swc_ecma_transforms_typescript"
+version = "0.188.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d6824fcd8d32ab2e90745a408f71548bd081bf4522d32617745ac1ea243de9c"
+dependencies = [
+ "ryu-js",
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_transforms_base",
+ "swc_ecma_transforms_react",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+]
+
+[[package]]
+name = "swc_ecma_usage_analyzer"
+version = "0.23.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21ccc0ff427471b70e48f265854a2e0843ef8429c729009898bea993f300fa77"
+dependencies = [
+ "indexmap 2.2.3",
+ "rustc-hash",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_timer",
+ "tracing",
+]
+
+[[package]]
+name = "swc_ecma_utils"
+version = "0.127.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc9c6ad70038b770d844fdfc20fd970d66ccebb1edc91804c8a9adaa689d4e39"
+dependencies = [
+ "indexmap 2.2.3",
+ "num_cpus",
+ "once_cell",
+ "rayon",
+ "rustc-hash",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_visit",
+ "tracing",
+ "unicode-id",
+]
+
+[[package]]
+name = "swc_ecma_visit"
+version = "0.98.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93692bdcdbb63db8f5e10fea5d202b5487cb27eb443aec424f4335c88f9864af"
+dependencies = [
+ "num-bigint",
+ "serde",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_visit",
+ "tracing",
+]
+
+[[package]]
+name = "swc_emotion"
+version = "0.72.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "976cfc9fbfcd2fdeb85b2b7ca10abc789ef17f352d25f9547668cad440319047"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "fxhash",
+ "once_cell",
+ "radix_fmt",
+ "regex",
+ "serde",
+ "sourcemap",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_codegen",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_eq_ignore_macros"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "695a1d8b461033d32429b5befbf0ad4d7a2c4d6ba9cd5ba4e0645c615839e8e4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "swc_error_reporters"
+version = "0.17.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3329e73f159a3d38d4cd5f606a0918eeff39f5bbdbdafd9b6fecb290d2e9a32d"
+dependencies = [
+ "anyhow",
+ "miette 4.7.1",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "swc_common",
+]
+
+[[package]]
+name = "swc_fast_graph"
+version = "0.21.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa43c68166a88e233f241976dc3291c30471385fd1019d1fa5660ac503520110"
+dependencies = [
+ "indexmap 2.2.3",
+ "petgraph",
+ "rustc-hash",
+ "swc_common",
+]
+
+[[package]]
+name = "swc_graph_analyzer"
+version = "0.22.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02b66d0e18899b3a69eca103e5b4af2f0c837427aa07a60be1c4ceb4346ea245"
+dependencies = [
+ "auto_impl",
+ "petgraph",
+ "swc_common",
+ "swc_fast_graph",
+ "tracing",
+]
+
+[[package]]
+name = "swc_macros_common"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50176cfc1cbc8bb22f41c6fe9d1ec53fbe057001219b5954961b8ad0f336fce9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "swc_malloc"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "675984eeb1ba9a8a712a6a442e8176dfd159727a0fa2715e43d08650d7c9b711"
+dependencies = [
+ "mimalloc-rust",
+ "tikv-jemallocator",
+]
+
+[[package]]
+name = "swc_node_comments"
+version = "0.20.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd75c635e4b54961c1c8dc693bb16eb70497eb8a2564f303089a9a66e81ed7ae"
+dependencies = [
+ "dashmap",
+ "swc_atoms",
+ "swc_common",
+]
+
+[[package]]
+name = "swc_nodejs_common"
+version = "0.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c121e55ae90c12401f80a95f0e6de71ba3f3c4dd22b512d163e46fae2f9e175b"
+dependencies = [
+ "anyhow",
+ "napi",
+ "serde",
+ "serde_json",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "swc_plugin_macro"
+version = "0.9.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3232db481484070637b20a155c064096c0ea1ba04fa2247b89b618661b3574f4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "swc_plugin_proxy"
+version = "0.41.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "012e5996e3fe64805342b6e31a79d826402bbe4eed35be6a9366e54e41f5d75d"
+dependencies = [
+ "better_scoped_tls",
+ "rkyv",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_trace_macro",
+ "tracing",
+]
+
+[[package]]
+name = "swc_plugin_runner"
+version = "0.106.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3fe0f8743615139eed21376c94d8201be331040c8999e9a7c86a43d0ca2ff8b"
+dependencies = [
+ "anyhow",
+ "enumset",
+ "futures 0.3.28",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "serde",
+ "serde_json",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_plugin_proxy",
+ "tokio",
+ "tracing",
+ "wasmer",
+ "wasmer-cache",
+ "wasmer-compiler-cranelift",
+ "wasmer-wasix",
+]
+
+[[package]]
+name = "swc_relay"
+version = "0.44.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a029c55b66fa6a0de9d1e7b5d18862542d2257a43406c0b0a6e5bece10219bd"
+dependencies = [
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "swc_atoms",
+ "swc_common",
+ "swc_ecma_ast",
+ "swc_ecma_utils",
+ "swc_ecma_visit",
+ "tracing",
+]
+
+[[package]]
+name = "swc_timer"
+version = "0.21.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e75ce0373fd1b75a021073d796201d5af15106857fc0a801e31379e9e04891e9"
+dependencies = [
+ "tracing",
+]
+
+[[package]]
+name = "swc_trace_macro"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff9719b6085dd2824fd61938a881937be14b08f95e2d27c64c825a9f65e052ba"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "swc_visit"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f5b3e8d1269a7cb95358fed3412645d9c15aa0eb1f4ca003a25a38ef2f30f1b"
+dependencies = [
+ "either",
+ "swc_visit_macros",
+]
+
+[[package]]
+name = "swc_visit_macros"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33fc817055fe127b4285dc85058596768bfde7537ae37da82c67815557f03e33"
+dependencies = [
+ "Inflector",
+ "proc-macro2",
+ "quote",
+ "swc_macros_common",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "symbolic-common"
+version = "12.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fac08504d60cf5bdffeb8a6a028f1a4868a5da1098bb19eb46239440039163fb"
+dependencies = [
+ "debugid",
+ "memmap2 0.5.10",
+ "stable_deref_trait",
+ "uuid",
+]
+
+[[package]]
+name = "symbolic-demangle"
+version = "12.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b212728d4f6c527c1d50d6169e715f6e02d849811843c13e366d8ca6d0cf5c4"
+dependencies = [
+ "cpp_demangle",
+ "rustc-demangle",
+ "symbolic-common",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "239814284fd6f1a4ffe4ca893952cdd93c224b6a1571c9a9eadd670295c0c9e2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "sysinfo"
+version = "0.27.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a902e9050fca0a5d6877550b769abd2bd1ce8c04634b941dbe2809735e1a1e33"
+dependencies = [
+ "cfg-if 1.0.0",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "rayon",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3"
+dependencies = [
+ "cfg-expr",
+ "heck 0.4.1",
+ "pkg-config",
+ "toml 0.7.8",
+ "version-compare",
+]
+
+[[package]]
+name = "tabled"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c3ee73732ffceaea7b8f6b719ce3bb17f253fa27461ffeaf568ebd0cdb4b85"
+dependencies = [
+ "ansi-str",
+ "papergrid",
+ "tabled_derive",
+ "unicode-width",
+]
+
+[[package]]
+name = "tabled_derive"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "beca1b4eaceb4f2755df858b88d9b9315b7ccfd1ffd0d7a48a52602301f01a57"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "tabwriter"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08e1173ee641651a3095fe95d86ae314cd1f959888097debce3e0f9ca532eef1"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tar"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "tardar"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900c942f83b6a8b9998cc8f74ad3ffa24b7ff3c4279ea1c1c52d95dced9f3516"
+dependencies = [
+ "miette 5.10.0",
+ "vec1",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5"
+
+[[package]]
+name = "tempdir"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8"
+dependencies = [
+ "rand 0.4.6",
+ "remove_dir_all",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+dependencies = [
+ "cfg-if 1.0.0",
+ "fastrand 2.0.0",
+ "redox_syscall 0.3.5",
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[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 = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df"
+dependencies = [
+ "libc",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
+dependencies = [
+ "rustix 0.37.23",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termios"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5d9cf598a6d7ce700a4e6a9199da127e6819a61e64b68609683cc9a01b5683a"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "termios"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "411c5bf740737c7918b8b1fe232dca4dc9f8e754b8ad5e20966814001ed0ac6b"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "test-case"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a1d6e7bde536b0412f20765b76e921028059adfd1b90d8974d33fd3c91b25df"
+dependencies = [
+ "test-case-macros",
+]
+
+[[package]]
+name = "test-case-core"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72dc21b5887f4032c4656502d085dc28f2afbb686f25f216472bb0526f4b1b88"
+dependencies = [
+ "cfg-if 1.0.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "test-case-macros"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3786898e0be151a96f730fd529b0e8a10f5990fa2a7ea14e37ca27613c05190"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "test-case-core",
+]
+
+[[package]]
+name = "testing"
+version = "0.35.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "761d1719907168f43b49b438bdb58c41608f4af5eac0995e2a8bb16c522656c5"
+dependencies = [
+ "ansi_term",
+ "cargo_metadata",
+ "difference",
+ "once_cell",
+ "pretty_assertions",
+ "regex",
+ "serde",
+ "serde_json",
+ "swc_common",
+ "swc_error_reporters",
+ "testing_macros",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "testing_macros"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9d3864d4184569c1428645a51a304b3b6e8d3094cd61fb3cce8dfdd9f6d0f72"
+dependencies = [
+ "anyhow",
+ "glob",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "relative-path",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "text-block-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f8b59b4da1c1717deaf1de80f0179a9d8b4ac91c986d5fd9f4a8ff177b84049"
+
+[[package]]
+name = "textwrap"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7b3e525a49ec206798b40326a44121291b530c963cfb01018f63e135bac543d"
+dependencies = [
+ "smawk",
+ "unicode-linebreak",
+ "unicode-width",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "thiserror"
+version = "1.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if 1.0.0",
+ "once_cell",
+]
+
+[[package]]
+name = "tikv-jemalloc-sys"
+version = "0.5.4+5.3.0-patched"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "tikv-jemallocator"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "965fe0c26be5c56c94e38ba547249074803efd52adfb66de62107d95aab3eaca"
+dependencies = [
+ "libc",
+ "tikv-jemalloc-sys",
+]
+
+[[package]]
+name = "time"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi 0.10.0+wasi-snapshot-preview1",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "time"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+dependencies = [
+ "deranged",
+ "itoa",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tiny-gradient"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8063c572fcc935676f1e01615f201f355a053e88525ec41c1b0c4884ce104847"
+dependencies = [
+ "libm",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
+dependencies = [
+ "backtrace",
+ "bytes 1.5.0",
+ "libc",
+ "mio 0.8.8",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.4",
+ "tokio-macros",
+ "tracing",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-codec"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25b2998660ba0e70d18684de5d06b70b70a3a747469af9dea7618cc59e75976b"
+dependencies = [
+ "bytes 0.4.12",
+ "futures 0.1.31",
+ "tokio-io",
+]
+
+[[package]]
+name = "tokio-executor"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb2d1b8f4548dbf5e1f7818512e9c406860678f29c300cdf0ebac72d1a3a1671"
+dependencies = [
+ "crossbeam-utils 0.7.2",
+ "futures 0.1.31",
+]
+
+[[package]]
+name = "tokio-io"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
+dependencies = [
+ "bytes 0.4.12",
+ "futures 0.1.31",
+ "log 0.4.20",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-reactor"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09bc590ec4ba8ba87652da2068d150dcada2cfa2e07faae270a5e0409aa51351"
+dependencies = [
+ "crossbeam-utils 0.7.2",
+ "futures 0.1.31",
+ "lazy_static",
+ "log 0.4.20",
+ "mio 0.6.23",
+ "num_cpus",
+ "parking_lot 0.9.0",
+ "slab",
+ "tokio-executor",
+ "tokio-io",
+ "tokio-sync",
+]
+
+[[package]]
+name = "tokio-retry"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f"
+dependencies = [
+ "pin-project",
+ "rand 0.8.5",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+dependencies = [
+ "rustls 0.20.9",
+ "tokio",
+ "webpki",
+]
+
+[[package]]
+name = "tokio-scoped"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4beb8ba13bc53ac53ce1d52b42f02e5d8060f0f42138862869beb769722b256"
+dependencies = [
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-sync"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edfe50152bc8164fcc456dab7891fa9bf8beaf01c5ee7e1dd43a397c3cf87dee"
+dependencies = [
+ "fnv",
+ "futures 0.1.31",
+]
+
+[[package]]
+name = "tokio-tcp"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98df18ed66e3b72e742f185882a9e201892407957e45fbff8da17ae7a7c51f72"
+dependencies = [
+ "bytes 0.4.12",
+ "futures 0.1.31",
+ "iovec",
+ "mio 0.6.23",
+ "tokio-io",
+ "tokio-reactor",
+]
+
+[[package]]
+name = "tokio-tls"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "354b8cd83825b3c20217a9dc174d6a0c67441a2fae5c41bcb1ea6679f6ae0f7c"
+dependencies = [
+ "futures 0.1.31",
+ "native-tls",
+ "tokio-io",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd"
+dependencies = [
+ "futures-util",
+ "log 0.4.20",
+ "tokio",
+ "tungstenite",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.20.2",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap 2.2.3",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.20.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338"
+dependencies = [
+ "indexmap 2.2.3",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "tonic"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f219fad3b929bef19b1f86fbc0358d35daed8f2cac972037ac0dc10bbb8d5fb"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "axum",
+ "base64 0.13.1",
+ "bytes 1.5.0",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper 0.14.28",
+ "hyper-timeout",
+ "percent-encoding 2.3.0",
+ "pin-project",
+ "prost 0.11.8",
+ "prost-derive 0.11.8",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+ "tracing-futures",
+]
+
+[[package]]
+name = "tonic"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76c4eb7a4e9ef9d4763600161f12f5070b92a578e1b634db88a6887844c91a13"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "axum",
+ "base64 0.21.4",
+ "bytes 1.5.0",
+ "h2",
+ "http",
+ "http-body",
+ "hyper 0.14.28",
+ "hyper-timeout",
+ "percent-encoding 2.3.0",
+ "pin-project",
+ "prost 0.12.3",
+ "tokio",
+ "tokio-stream",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tonic-build"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bf5e9b9c0f7e0a7c027dcfaba7b2c60816c7049171f679d99ee2ff65d0de8c4"
+dependencies = [
+ "prettyplease 0.1.25",
+ "proc-macro2",
+ "prost-build",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "tonic-reflection"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "548c227bd5c0fae5925812c4ec6c66ffcfced23ea370cb823f4d18f0fc1cb6a7"
+dependencies = [
+ "prost 0.12.3",
+ "prost-types 0.12.3",
+ "tokio",
+ "tokio-stream",
+ "tonic 0.11.0",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap 1.9.3",
+ "pin-project",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-lsp"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4ba052b54a6627628d9b3c34c176e7eda8359b7da9acd497b9f20998d118508"
+dependencies = [
+ "async-trait",
+ "auto_impl",
+ "bytes 1.5.0",
+ "dashmap",
+ "futures 0.3.28",
+ "httparse",
+ "lsp-types",
+ "memchr",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tokio-util",
+ "tower",
+ "tower-lsp-macros",
+ "tracing",
+]
+
+[[package]]
+name = "tower-lsp-macros"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84fd902d4e0b9a4b27f2f440108dc034e1758628a9b702f8ec61ad66355422fa"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tower-uds"
+version = "0.1.0"
+dependencies = [
+ "async-io",
+ "http",
+ "tokio",
+ "tokio-util",
+ "tower",
+ "uds_windows",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "log 0.4.20",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-appender"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09d48f71a791638519505cefafe162606f706c25592e4bde4d97600c0195312e"
+dependencies = [
+ "crossbeam-channel",
+ "time 0.3.30",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "tracing-chrome"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "496b3cd5447f7ff527bbbf19b071ad542a000adf297d4127078b4dfdb931f41a"
+dependencies = [
+ "serde_json",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "pin-project",
+ "tracing",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log 0.4.20",
+ "once_cell",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+dependencies = [
+ "serde",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-signpost"
+version = "0.1.0"
+dependencies = [
+ "dashmap",
+ "signposter",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "sharded-slab",
+ "smallvec 1.13.1",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+ "tracing-serde",
+]
+
+[[package]]
+name = "tracing-test"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a2c0ff408fe918a94c428a3f2ad04e4afd5c95bbc08fcf868eff750c15728a4"
+dependencies = [
+ "lazy_static",
+ "tracing-core",
+ "tracing-subscriber",
+ "tracing-test-macro",
+]
+
+[[package]]
+name = "tracing-test-macro"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "258bc1c4f8e2e73a977812ab339d503e6feeb92700f6d07a6de4d321522d5c08"
+dependencies = [
+ "lazy_static",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "traitobject"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "ttf-parser"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd"
+
+[[package]]
+name = "tui-term"
+version = "0.1.8"
+source = "git+https://github.com/a-kenji/tui-term.git?rev=96da15fb9974bb8f77b0e937abbdb2c3b8e932aa#96da15fb9974bb8f77b0e937abbdb2c3b8e932aa"
+dependencies = [
+ "ratatui",
+]
+
+[[package]]
+name = "tungstenite"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788"
+dependencies = [
+ "base64 0.13.1",
+ "byteorder",
+ "bytes 1.5.0",
+ "http",
+ "httparse",
+ "log 0.4.20",
+ "rand 0.8.5",
+ "sha1",
+ "thiserror",
+ "url 2.4.1",
+ "utf-8",
+]
+
+[[package]]
+name = "turbo"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "assert_cmd",
+ "build-target",
+ "clap 4.5.2",
+ "clap_complete",
+ "command-group",
+ "dunce",
+ "human-panic",
+ "itertools 0.10.5",
+ "miette 5.10.0",
+ "pretty_assertions",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.27",
+ "tiny-gradient",
+ "tokio-util",
+ "tracing",
+ "turborepo-lib",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "turbo-tasks"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "auto-hash-map",
+ "concurrent-queue",
+ "dashmap",
+ "erased-serde",
+ "event-listener",
+ "futures 0.3.28",
+ "indexmap 1.9.3",
+ "mopa",
+ "nohash-hasher",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_regex",
+ "serde_test",
+ "stable_deref_trait",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "turbo-tasks-build",
+ "turbo-tasks-hash",
+ "turbo-tasks-macros",
+]
+
+[[package]]
+name = "turbo-tasks-build"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "cargo-lock",
+ "glob",
+ "syn 1.0.109",
+ "turbo-tasks-macros-shared",
+]
+
+[[package]]
+name = "turbo-tasks-bytes"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "bytes 1.5.0",
+ "futures 0.3.28",
+ "serde",
+ "serde_bytes",
+ "serde_test",
+ "tokio",
+ "turbo-tasks",
+ "turbo-tasks-build",
+]
+
+[[package]]
+name = "turbo-tasks-env"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "dotenvs",
+ "indexmap 1.9.3",
+ "serde",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+]
+
+[[package]]
+name = "turbo-tasks-fetch"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "httpmock",
+ "indexmap 1.9.3",
+ "lazy_static",
+ "reqwest",
+ "serde",
+ "tokio",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbo-tasks-memory",
+ "turbo-tasks-testing",
+ "turbopack-core",
+]
+
+[[package]]
+name = "turbo-tasks-fs"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "auto-hash-map",
+ "bitflags 1.3.2",
+ "bytes 1.5.0",
+ "concurrent-queue",
+ "criterion",
+ "dashmap",
+ "dunce",
+ "futures 0.3.28",
+ "futures-retry",
+ "include_dir",
+ "indexmap 1.9.3",
+ "jsonc-parser 0.21.0",
+ "mime 0.3.17",
+ "notify",
+ "notify-debouncer-full",
+ "parking_lot 0.12.1",
+ "rstest",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "sha2",
+ "tempfile",
+ "tokio",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-hash",
+ "turbo-tasks-memory",
+ "turbo-tasks-testing",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "turbo-tasks-hash"
+version = "0.1.0"
+dependencies = [
+ "base16",
+ "hex",
+ "md4",
+ "turbo-tasks-macros",
+ "twox-hash",
+]
+
+[[package]]
+name = "turbo-tasks-macros"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "convert_case 0.6.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "turbo-tasks-macros-shared",
+]
+
+[[package]]
+name = "turbo-tasks-macros-shared"
+version = "0.1.0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "turbo-tasks-macros-tests"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "lazy_static",
+ "tokio",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-memory",
+ "turbo-tasks-testing",
+]
+
+[[package]]
+name = "turbo-tasks-malloc"
+version = "0.1.0"
+dependencies = [
+ "mimalloc",
+]
+
+[[package]]
+name = "turbo-tasks-memory"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "auto-hash-map",
+ "concurrent-queue",
+ "criterion",
+ "dashmap",
+ "indexmap 1.9.3",
+ "lazy_static",
+ "nohash-hasher",
+ "num_cpus",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "priority-queue",
+ "ref-cast",
+ "rustc-hash",
+ "serde",
+ "smallvec 1.13.1",
+ "tokio",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-hash",
+ "turbo-tasks-malloc",
+ "turbo-tasks-testing",
+]
+
+[[package]]
+name = "turbo-tasks-testing"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "auto-hash-map",
+ "futures 0.3.28",
+ "lazy_static",
+ "tokio",
+ "turbo-tasks",
+]
+
+[[package]]
+name = "turbo-updater"
+version = "0.1.0"
+dependencies = [
+ "atty",
+ "console",
+ "reqwest",
+ "semver 1.0.18",
+ "serde",
+ "thiserror",
+ "update-informer",
+]
+
+[[package]]
+name = "turbopack"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-recursion",
+ "criterion",
+ "difference",
+ "futures 0.3.28",
+ "indexmap 1.9.3",
+ "lazy_static",
+ "regex",
+ "rstest",
+ "rstest_reuse",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-env",
+ "turbo-tasks-fs",
+ "turbo-tasks-malloc",
+ "turbo-tasks-memory",
+ "turbopack-core",
+ "turbopack-css",
+ "turbopack-ecmascript",
+ "turbopack-ecmascript-plugins",
+ "turbopack-env",
+ "turbopack-image",
+ "turbopack-json",
+ "turbopack-mdx",
+ "turbopack-node",
+ "turbopack-resolve",
+ "turbopack-static",
+ "turbopack-wasm",
+]
+
+[[package]]
+name = "turbopack-bench"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "chromiumoxide",
+ "clap 4.5.2",
+ "console-subscriber",
+ "criterion",
+ "dunce",
+ "futures 0.3.28",
+ "mime 0.3.17",
+ "nix 0.26.2",
+ "once_cell",
+ "owo-colors",
+ "parking_lot 0.12.1",
+ "portpicker",
+ "rand 0.8.5",
+ "regex",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "tokio",
+ "tungstenite",
+ "turbo-tasks",
+ "turbo-tasks-testing",
+ "turbopack-create-test-app",
+ "url 2.4.1",
+ "webbrowser",
+]
+
+[[package]]
+name = "turbopack-binding"
+version = "0.1.0"
+dependencies = [
+ "auto-hash-map",
+ "mdxjs",
+ "modularize_imports",
+ "node-file-trace",
+ "styled_components",
+ "styled_jsx",
+ "swc-ast-explorer",
+ "swc_core",
+ "swc_emotion",
+ "swc_relay",
+ "testing",
+ "tracing-signpost",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-bytes",
+ "turbo-tasks-env",
+ "turbo-tasks-fetch",
+ "turbo-tasks-fs",
+ "turbo-tasks-hash",
+ "turbo-tasks-macros",
+ "turbo-tasks-macros-shared",
+ "turbo-tasks-malloc",
+ "turbo-tasks-memory",
+ "turbo-tasks-testing",
+ "turbo-updater",
+ "turbopack",
+ "turbopack-bench",
+ "turbopack-browser",
+ "turbopack-cli-utils",
+ "turbopack-core",
+ "turbopack-create-test-app",
+ "turbopack-css",
+ "turbopack-dev-server",
+ "turbopack-ecmascript",
+ "turbopack-ecmascript-hmr-protocol",
+ "turbopack-ecmascript-plugins",
+ "turbopack-ecmascript-runtime",
+ "turbopack-env",
+ "turbopack-image",
+ "turbopack-json",
+ "turbopack-mdx",
+ "turbopack-node",
+ "turbopack-nodejs",
+ "turbopack-static",
+ "turbopack-swc-utils",
+ "turbopack-test-utils",
+ "turbopack-tests",
+ "turbopack-trace-utils",
+]
+
+[[package]]
+name = "turbopack-browser"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "indexmap 1.9.3",
+ "indoc",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "swc_core",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbo-tasks-hash",
+ "turbopack",
+ "turbopack-core",
+ "turbopack-css",
+ "turbopack-ecmascript",
+ "turbopack-ecmascript-runtime",
+ "turbopack-resolve",
+ "urlencoding",
+]
+
+[[package]]
+name = "turbopack-cli"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap 4.5.2",
+ "console-subscriber",
+ "criterion",
+ "dunce",
+ "futures 0.3.28",
+ "mime 0.3.17",
+ "once_cell",
+ "owo-colors",
+ "regex",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "tracing-signpost",
+ "tracing-subscriber",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-env",
+ "turbo-tasks-fetch",
+ "turbo-tasks-fs",
+ "turbo-tasks-malloc",
+ "turbo-tasks-memory",
+ "turbopack",
+ "turbopack-bench",
+ "turbopack-browser",
+ "turbopack-cli-utils",
+ "turbopack-core",
+ "turbopack-dev-server",
+ "turbopack-ecmascript-plugins",
+ "turbopack-ecmascript-runtime",
+ "turbopack-env",
+ "turbopack-node",
+ "turbopack-nodejs",
+ "turbopack-resolve",
+ "turbopack-trace-utils",
+ "webbrowser",
+]
+
+[[package]]
+name = "turbopack-cli-utils"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap 4.5.2",
+ "crossterm 0.26.1",
+ "once_cell",
+ "owo-colors",
+ "serde",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbopack-core",
+ "turbopack-ecmascript",
+ "turbopack-resolve",
+]
+
+[[package]]
+name = "turbopack-core"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-recursion",
+ "async-trait",
+ "auto-hash-map",
+ "browserslist-rs",
+ "futures 0.3.28",
+ "indexmap 1.9.3",
+ "lazy_static",
+ "once_cell",
+ "patricia_tree",
+ "qstring",
+ "ref-cast",
+ "regex",
+ "rstest",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "sourcemap",
+ "swc_core",
+ "tokio",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-env",
+ "turbo-tasks-fs",
+ "turbo-tasks-hash",
+ "turbo-tasks-memory",
+ "turbo-tasks-testing",
+]
+
+[[package]]
+name = "turbopack-create-test-app"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap 4.5.2",
+ "indoc",
+ "pathdiff",
+ "serde_json",
+ "tempfile",
+]
+
+[[package]]
+name = "turbopack-css"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "indexmap 1.9.3",
+ "indoc",
+ "lightningcss",
+ "once_cell",
+ "parcel_selectors",
+ "parcel_sourcemap",
+ "regex",
+ "serde",
+ "smallvec 1.13.1",
+ "swc_core",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbo-tasks-hash",
+ "turbopack-core",
+ "turbopack-ecmascript",
+ "turbopack-swc-utils",
+ "urlencoding",
+]
+
+[[package]]
+name = "turbopack-dev-server"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-compression",
+ "auto-hash-map",
+ "futures 0.3.28",
+ "hyper 0.14.28",
+ "hyper-tungstenite",
+ "indexmap 1.9.3",
+ "mime 0.3.17",
+ "mime_guess",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "socket2 0.4.9",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-bytes",
+ "turbo-tasks-fs",
+ "turbo-tasks-hash",
+ "turbopack-cli-utils",
+ "turbopack-core",
+ "turbopack-ecmascript",
+ "turbopack-ecmascript-hmr-protocol",
+ "urlencoding",
+]
+
+[[package]]
+name = "turbopack-ecmascript"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "criterion",
+ "either",
+ "futures 0.3.28",
+ "indexmap 1.9.3",
+ "indoc",
+ "lazy_static",
+ "num-bigint",
+ "num-traits",
+ "once_cell",
+ "parking_lot 0.12.1",
+ "petgraph",
+ "pin-project-lite",
+ "regex",
+ "rstest",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "sourcemap",
+ "swc_core",
+ "tokio",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbo-tasks-hash",
+ "turbo-tasks-memory",
+ "turbo-tasks-testing",
+ "turbopack-core",
+ "turbopack-resolve",
+ "turbopack-swc-utils",
+ "url 2.4.1",
+ "urlencoding",
+]
+
+[[package]]
+name = "turbopack-ecmascript-hmr-protocol"
+version = "0.1.0"
+dependencies = [
+ "serde",
+ "serde_json",
+ "turbopack-cli-utils",
+ "turbopack-core",
+]
+
+[[package]]
+name = "turbopack-ecmascript-plugins"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "indexmap 1.9.3",
+ "lightningcss",
+ "modularize_imports",
+ "parcel_selectors",
+ "serde",
+ "serde_json",
+ "styled_components",
+ "styled_jsx",
+ "swc_core",
+ "swc_emotion",
+ "swc_relay",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbopack-core",
+ "turbopack-ecmascript",
+]
+
+[[package]]
+name = "turbopack-ecmascript-runtime"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "indoc",
+ "serde",
+ "swc_core",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbopack",
+ "turbopack-core",
+ "turbopack-ecmascript",
+]
+
+[[package]]
+name = "turbopack-env"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "indexmap 1.9.3",
+ "serde",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-env",
+ "turbo-tasks-fs",
+ "turbopack-core",
+ "turbopack-ecmascript",
+]
+
+[[package]]
+name = "turbopack-image"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "base64 0.21.4",
+ "image 0.25.0",
+ "indexmap 1.9.3",
+ "mime 0.3.17",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_with",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbopack-core",
+]
+
+[[package]]
+name = "turbopack-json"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "serde",
+ "serde_json",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbopack-core",
+ "turbopack-ecmascript",
+]
+
+[[package]]
+name = "turbopack-mdx"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "mdxjs",
+ "serde",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbopack-core",
+ "turbopack-ecmascript",
+]
+
+[[package]]
+name = "turbopack-node"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-stream",
+ "async-trait",
+ "bytes 1.5.0",
+ "const_format",
+ "futures 0.3.28",
+ "futures-retry",
+ "indexmap 1.9.3",
+ "indoc",
+ "mime 0.3.17",
+ "once_cell",
+ "owo-colors",
+ "parking_lot 0.12.1",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "tokio",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-bytes",
+ "turbo-tasks-env",
+ "turbo-tasks-fs",
+ "turbopack-cli-utils",
+ "turbopack-core",
+ "turbopack-dev-server",
+ "turbopack-ecmascript",
+ "turbopack-resolve",
+ "url 2.4.1",
+ "urlencoding",
+]
+
+[[package]]
+name = "turbopack-nodejs"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "indexmap 1.9.3",
+ "indoc",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "sourcemap",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbo-tasks-hash",
+ "turbopack-core",
+ "turbopack-css",
+ "turbopack-ecmascript",
+ "turbopack-ecmascript-runtime",
+ "urlencoding",
+]
+
+[[package]]
+name = "turbopack-resolve"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-recursion",
+ "futures 0.3.28",
+ "indexmap 1.9.3",
+ "lazy_static",
+ "regex",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tracing",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-env",
+ "turbo-tasks-fs",
+ "turbopack-core",
+]
+
+[[package]]
+name = "turbopack-static"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "serde",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbo-tasks-hash",
+ "turbopack-core",
+ "turbopack-css",
+ "turbopack-ecmascript",
+]
+
+[[package]]
+name = "turbopack-swc-utils"
+version = "0.1.0"
+dependencies = [
+ "swc_core",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbopack-core",
+]
+
+[[package]]
+name = "turbopack-test-utils"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "once_cell",
+ "regex",
+ "serde",
+ "similar",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbo-tasks-hash",
+ "turbopack-cli-utils",
+ "turbopack-core",
+]
+
+[[package]]
+name = "turbopack-tests"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "dunce",
+ "futures 0.3.28",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "testing",
+ "tokio",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-bytes",
+ "turbo-tasks-env",
+ "turbo-tasks-fs",
+ "turbo-tasks-memory",
+ "turbopack",
+ "turbopack-browser",
+ "turbopack-cli-utils",
+ "turbopack-core",
+ "turbopack-ecmascript-plugins",
+ "turbopack-ecmascript-runtime",
+ "turbopack-env",
+ "turbopack-node",
+ "turbopack-nodejs",
+ "turbopack-resolve",
+ "turbopack-test-utils",
+]
+
+[[package]]
+name = "turbopack-trace-server"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap 4.5.2",
+ "either",
+ "futures 0.3.28",
+ "indexmap 1.9.3",
+ "intervaltree",
+ "itertools 0.10.5",
+ "owo-colors",
+ "postcard",
+ "rustc-demangle",
+ "serde",
+ "serde_json",
+ "turbopack-trace-utils",
+ "websocket",
+ "zstd 0.13.1",
+]
+
+[[package]]
+name = "turbopack-trace-utils"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "crossbeam-channel",
+ "once_cell",
+ "postcard",
+ "serde",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "turbo-tasks-malloc",
+]
+
+[[package]]
+name = "turbopack-wasm"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "indexmap 1.9.3",
+ "indoc",
+ "serde",
+ "turbo-tasks",
+ "turbo-tasks-build",
+ "turbo-tasks-fs",
+ "turbo-tasks-hash",
+ "turbopack-core",
+ "turbopack-ecmascript",
+ "wasmparser 0.110.0",
+ "wat",
+]
+
+[[package]]
+name = "turbopath"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "camino",
+ "dunce",
+ "fs-err",
+ "miette 5.10.0",
+ "path-clean 1.0.1",
+ "serde",
+ "serde_json",
+ "tempdir",
+ "test-case",
+ "thiserror",
+ "wax",
+]
+
+[[package]]
+name = "turborepo-analytics"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "futures 0.3.28",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "turborepo-api-client",
+ "turborepo-vercel-api",
+ "uuid",
+]
+
+[[package]]
+name = "turborepo-api-client"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "chrono",
+ "http",
+ "lazy_static",
+ "port_scanner",
+ "regex",
+ "reqwest",
+ "rustc_version_runtime 0.2.1",
+ "serde",
+ "serde_json",
+ "test-case",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "turbopath",
+ "turborepo-ci",
+ "turborepo-vercel-api",
+ "turborepo-vercel-api-mock",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "turborepo-auth"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "axum",
+ "axum-server",
+ "chrono",
+ "hostname",
+ "lazy_static",
+ "port_scanner",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "turbopath",
+ "turborepo-api-client",
+ "turborepo-dirs",
+ "turborepo-ui",
+ "turborepo-vercel-api",
+ "turborepo-vercel-api-mock",
+ "url 2.4.1",
+ "webbrowser",
+]
+
+[[package]]
+name = "turborepo-cache"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "base64 0.21.4",
+ "bytes 1.5.0",
+ "camino",
+ "chrono",
+ "dunce",
+ "futures 0.3.28",
+ "hex",
+ "hmac",
+ "lazy_static",
+ "libc",
+ "os_str_bytes",
+ "path-clean 1.0.1",
+ "petgraph",
+ "port_scanner",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "sha2",
+ "tar",
+ "tempfile",
+ "test-case",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "turbopath",
+ "turborepo-analytics",
+ "turborepo-api-client",
+ "turborepo-ui",
+ "turborepo-vercel-api-mock",
+ "zstd 0.12.3+zstd.1.5.2",
+]
+
+[[package]]
+name = "turborepo-ci"
+version = "0.1.0"
+dependencies = [
+ "test-case",
+ "tracing",
+]
+
+[[package]]
+name = "turborepo-dirs"
+version = "0.1.0"
+dependencies = [
+ "dirs-next",
+ "thiserror",
+ "turbopath",
+]
+
+[[package]]
+name = "turborepo-env"
+version = "0.1.0"
+dependencies = [
+ "hex",
+ "lazy_static",
+ "regex",
+ "serde",
+ "sha2",
+ "test-case",
+ "thiserror",
+]
+
+[[package]]
+name = "turborepo-errors"
+version = "0.1.0"
+dependencies = [
+ "biome_deserialize",
+ "miette 5.10.0",
+ "serde",
+ "serde_json",
+ "test-case",
+]
+
+[[package]]
+name = "turborepo-filewatch"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "bitflags 1.3.2",
+ "dashmap",
+ "fsevent-sys",
+ "futures 0.3.28",
+ "itertools 0.10.5",
+ "libc",
+ "notify",
+ "tempfile",
+ "thiserror",
+ "tokio",
+ "tokio-scoped",
+ "tracing",
+ "tracing-test",
+ "turbopath",
+ "turborepo-repository",
+ "walkdir",
+ "wax",
+]
+
+[[package]]
+name = "turborepo-fs"
+version = "0.1.0"
+dependencies = [
+ "fs-err",
+ "tempfile",
+ "thiserror",
+ "turbopath",
+ "walkdir",
+]
+
+[[package]]
+name = "turborepo-graph-utils"
+version = "0.1.0"
+dependencies = [
+ "futures 0.3.28",
+ "itertools 0.10.5",
+ "log 0.4.20",
+ "petgraph",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "turborepo-lib"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "assert_cmd",
+ "async-io",
+ "async-stream",
+ "atty",
+ "axum",
+ "axum-server",
+ "biome_console",
+ "biome_deserialize",
+ "biome_diagnostics",
+ "biome_json_parser",
+ "biome_json_syntax",
+ "camino",
+ "capnp 0.17.2",
+ "capnpc",
+ "chrono",
+ "clap 4.5.2",
+ "clap_complete",
+ "command-group",
+ "console",
+ "const_format",
+ "convert_case 0.6.0",
+ "crossterm 0.26.1",
+ "ctrlc",
+ "dialoguer",
+ "directories 4.0.1",
+ "dirs-next",
+ "dunce",
+ "either",
+ "futures 0.3.28",
+ "globwalk",
+ "globwatch",
+ "go-parse-duration",
+ "hex",
+ "hostname",
+ "humantime",
+ "indicatif",
+ "is-terminal",
+ "itertools 0.10.5",
+ "json_comments",
+ "jsonc-parser 0.21.0",
+ "lazy-regex",
+ "lazy_static",
+ "libc",
+ "miette 5.10.0",
+ "nix 0.26.2",
+ "node-semver",
+ "notify",
+ "num_cpus",
+ "owo-colors",
+ "path-clean 1.0.1",
+ "petgraph",
+ "pidlock",
+ "port_scanner",
+ "portable-pty",
+ "pprof",
+ "pretty_assertions",
+ "prost 0.12.3",
+ "rand 0.8.5",
+ "rayon",
+ "regex",
+ "reqwest",
+ "rustc_version_runtime 0.2.1",
+ "semver 1.0.18",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.27",
+ "sha2",
+ "shared_child",
+ "struct_iterable",
+ "svix-ksuid",
+ "sysinfo",
+ "tabwriter",
+ "tempdir",
+ "tempfile",
+ "test-case",
+ "thiserror",
+ "time 0.3.30",
+ "tiny-gradient",
+ "tokio",
+ "tokio-stream",
+ "tokio-util",
+ "tonic 0.11.0",
+ "tonic-build",
+ "tonic-reflection",
+ "tower",
+ "tracing",
+ "tracing-appender",
+ "tracing-chrome",
+ "tracing-subscriber",
+ "tracing-test",
+ "turbo-updater",
+ "turbopath",
+ "turborepo-analytics",
+ "turborepo-api-client",
+ "turborepo-auth",
+ "turborepo-cache",
+ "turborepo-ci",
+ "turborepo-dirs",
+ "turborepo-env",
+ "turborepo-errors",
+ "turborepo-filewatch",
+ "turborepo-fs",
+ "turborepo-graph-utils",
+ "turborepo-lockfiles",
+ "turborepo-repository",
+ "turborepo-scm",
+ "turborepo-telemetry",
+ "turborepo-ui",
+ "turborepo-vercel-api",
+ "turborepo-vercel-api-mock",
+ "twox-hash",
+ "uds_windows",
+ "url 2.4.1",
+ "wax",
+ "webbrowser",
+ "which",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "turborepo-lockfiles"
+version = "0.1.0"
+dependencies = [
+ "itertools 0.10.5",
+ "nom",
+ "pest",
+ "pest_derive",
+ "pretty_assertions",
+ "rayon",
+ "regex",
+ "semver 1.0.18",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.27",
+ "test-case",
+ "thiserror",
+ "tracing",
+ "turbopath",
+]
+
+[[package]]
+name = "turborepo-lsp"
+version = "0.1.0"
+dependencies = [
+ "crop",
+ "futures 0.3.28",
+ "itertools 0.10.5",
+ "jsonc-parser 0.23.0",
+ "pidlock",
+ "serde_json",
+ "tokio",
+ "tokio-retry",
+ "tokio-util",
+ "tower",
+ "tower-lsp",
+ "tower-uds",
+ "tracing",
+ "tracing-subscriber",
+ "turbopath",
+ "turborepo-lib",
+ "turborepo-repository",
+ "wax",
+]
+
+[[package]]
+name = "turborepo-napi"
+version = "0.1.0"
+dependencies = [
+ "napi",
+ "napi-build",
+ "napi-derive",
+ "thiserror",
+ "tokio",
+ "turbopath",
+ "turborepo-repository",
+]
+
+[[package]]
+name = "turborepo-repository"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-once-cell",
+ "globwalk",
+ "itertools 0.10.5",
+ "lazy-regex",
+ "node-semver",
+ "petgraph",
+ "pretty_assertions",
+ "regex",
+ "rust-ini",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.27",
+ "tempfile",
+ "test-case",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tracing",
+ "turbopath",
+ "turborepo-graph-utils",
+ "turborepo-lockfiles",
+ "turborepo-scm",
+ "wax",
+ "which",
+]
+
+[[package]]
+name = "turborepo-scm"
+version = "0.1.0"
+dependencies = [
+ "bstr 1.4.0",
+ "git2 0.16.1",
+ "globwalk",
+ "hex",
+ "ignore",
+ "nom",
+ "sha1",
+ "tempfile",
+ "test-case",
+ "thiserror",
+ "tracing",
+ "turbopath",
+ "turborepo-telemetry",
+ "wax",
+ "which",
+]
+
+[[package]]
+name = "turborepo-telemetry"
+version = "0.1.0"
+dependencies = [
+ "async-trait",
+ "chrono",
+ "config",
+ "dirs-next",
+ "futures 0.3.28",
+ "hex",
+ "once_cell",
+ "reqwest",
+ "rustc_version_runtime 0.3.0",
+ "serde",
+ "serde_json",
+ "sha2",
+ "tempfile",
+ "test-case",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "turbopath",
+ "turborepo-api-client",
+ "turborepo-dirs",
+ "turborepo-ui",
+ "turborepo-vercel-api",
+ "turborepo-vercel-api-mock",
+ "url 2.4.1",
+ "uuid",
+]
+
+[[package]]
+name = "turborepo-ui"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "atty",
+ "console",
+ "crossterm 0.26.1",
+ "dialoguer",
+ "indicatif",
+ "indoc",
+ "lazy_static",
+ "nix 0.26.2",
+ "ratatui",
+ "tempfile",
+ "test-case",
+ "thiserror",
+ "tracing",
+ "tui-term",
+ "turbopath",
+ "turborepo-ci",
+ "turborepo-vt100",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "turborepo-vercel-api"
+version = "0.1.0"
+dependencies = [
+ "chrono",
+ "insta",
+ "serde",
+ "serde_json",
+ "test-case",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "turborepo-vercel-api-mock"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "axum",
+ "axum-macros",
+ "axum-server",
+ "futures-util",
+ "port_scanner",
+ "tempfile",
+ "tokio",
+ "turborepo-vercel-api",
+]
+
+[[package]]
+name = "turborepo-vt100"
+version = "0.15.2"
+dependencies = [
+ "itoa",
+ "log 0.4.20",
+ "quickcheck",
+ "rand 0.8.5",
+ "ratatui",
+ "serde",
+ "serde_json",
+ "terminal_size 0.2.6",
+ "tui-term",
+ "unicode-width",
+ "vte 0.11.1",
+]
+
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if 1.0.0",
+ "rand 0.8.5",
+ "static_assertions",
+]
+
+[[package]]
+name = "typeable"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887"
+
+[[package]]
+name = "typed-arena"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a"
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "uds_windows"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+dependencies = [
+ "tempfile",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "unic-char-property"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+dependencies = [
+ "unic-char-range",
+]
+
+[[package]]
+name = "unic-char-range"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+
+[[package]]
+name = "unic-common"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+
+[[package]]
+name = "unic-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
+dependencies = [
+ "unic-ucd-segment",
+]
+
+[[package]]
+name = "unic-ucd-segment"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
+dependencies = [
+ "unic-char-property",
+ "unic-char-range",
+ "unic-ucd-version",
+]
+
+[[package]]
+name = "unic-ucd-version"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
+dependencies = [
+ "unic-common",
+]
+
+[[package]]
+name = "unicase"
+version = "1.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4765f83163b74f957c797ad9253caf97f103fb064d3999aea9568d09fc8a33"
+dependencies = [
+ "version_check 0.1.5",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check 0.9.4",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-bom"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217"
+
+[[package]]
+name = "unicode-id"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "unicode-linebreak"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6"
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "update-informer"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f8811797a24ff123db3c6e1087aa42551d03d772b3724be421ad063da1f5f3f"
+dependencies = [
+ "directories 5.0.1",
+ "reqwest",
+ "semver 1.0.18",
+ "serde",
+ "serde_json",
+ "ureq",
+]
+
+[[package]]
+name = "ureq"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97"
+dependencies = [
+ "base64 0.21.4",
+ "flate2",
+ "log 0.4.20",
+ "native-tls",
+ "once_cell",
+ "rustls 0.21.10",
+ "rustls-webpki",
+ "serde",
+ "serde_json",
+ "url 2.4.1",
+ "webpki-roots 0.25.3",
+]
+
+[[package]]
+name = "url"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+dependencies = [
+ "idna 0.1.5",
+ "matches",
+ "percent-encoding 1.0.1",
+]
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.4.0",
+ "percent-encoding 2.3.0",
+ "serde",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9"
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "v_frame"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85db69f33d00031c1b07f7292e56317d5aa9475bdbd3d27ef18f3633438a697e"
+dependencies = [
+ "cfg-if 1.0.0",
+ "noop_proc_macro",
+ "num-derive 0.4.0",
+ "num-traits",
+ "rust_hawktracer",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "value-bag"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4d330786735ea358f3bc09eea4caa098569c1c93f342d9aca0514915022fe7e"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vec1"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bda7c41ca331fe9a1c278a9e7ee055f4be7f5eb1c2b72f079b4ff8b5fce9d5c"
+
+[[package]]
+name = "vergen"
+version = "8.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1290fd64cc4e7d3c9b07d7f333ce0ce0007253e32870e632624835cc80b83939"
+dependencies = [
+ "anyhow",
+ "rustversion",
+]
+
+[[package]]
+name = "version-compare"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+
+[[package]]
+name = "version_check"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "virtual-fs"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a16a7893a16a31ef442ce86691e7060a19691fb7739387624f3dd07ec4c04b"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bytes 1.5.0",
+ "derivative",
+ "filetime",
+ "fs_extra",
+ "futures 0.3.28",
+ "getrandom",
+ "indexmap 1.9.3",
+ "lazy_static",
+ "libc",
+ "pin-project-lite",
+ "replace_with",
+ "shared-buffer",
+ "slab",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "webc",
+]
+
+[[package]]
+name = "virtual-mio"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9f38a379f14296f9fb93eda42ece4d57b568af417569102c3dcfeb88ab4800f"
+dependencies = [
+ "async-trait",
+ "bytes 1.5.0",
+ "derivative",
+ "futures 0.3.28",
+ "mio 0.8.8",
+ "serde",
+ "socket2 0.4.9",
+ "thiserror",
+ "tracing",
+]
+
+[[package]]
+name = "virtual-net"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75b66781480898ee7ee62a2bbe2955ce1bb5a90fdc8bfedbdabe3537b177fa3e"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "base64 0.21.4",
+ "bincode",
+ "bytes 1.5.0",
+ "derivative",
+ "futures-util",
+ "pin-project-lite",
+ "serde",
+ "thiserror",
+ "tracing",
+ "virtual-mio",
+]
+
+[[package]]
+name = "vlq"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65dd7eed29412da847b0f78bcec0ac98588165988a8cfe41d4ea1d429f8ccfff"
+
+[[package]]
+name = "vte"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cbce692ab4ca2f1f3047fcf732430249c0e971bfdd2b234cf2c47ad93af5983"
+dependencies = [
+ "arrayvec 0.5.2",
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197"
+dependencies = [
+ "arrayvec 0.7.4",
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "wai-bindgen-gen-core"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aa3dc41b510811122b3088197234c27e08fcad63ef936306dd8e11e2803876c"
+dependencies = [
+ "anyhow",
+ "wai-parser",
+]
+
+[[package]]
+name = "wai-bindgen-gen-rust"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19bc05e8380515c4337c40ef03b2ff233e391315b178a320de8640703d522efe"
+dependencies = [
+ "heck 0.3.3",
+ "wai-bindgen-gen-core",
+]
+
+[[package]]
+name = "wai-bindgen-gen-rust-wasm"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6f35ce5e74086fac87f3a7bd50f643f00fe3559adb75c88521ecaa01c8a6199"
+dependencies = [
+ "heck 0.3.3",
+ "wai-bindgen-gen-core",
+ "wai-bindgen-gen-rust",
+]
+
+[[package]]
+name = "wai-bindgen-gen-wasmer"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f61484185d8c520a86d5a7f7f8265f446617c2f9774b2e20a52de19b6e53432"
+dependencies = [
+ "heck 0.3.3",
+ "wai-bindgen-gen-core",
+ "wai-bindgen-gen-rust",
+]
+
+[[package]]
+name = "wai-bindgen-rust"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e5601c6f448c063e83a5e931b8fefcdf7e01ada424ad42372c948d2e3d67741"
+dependencies = [
+ "bitflags 1.3.2",
+ "wai-bindgen-rust-impl",
+]
+
+[[package]]
+name = "wai-bindgen-rust-impl"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdeeb5c1170246de8425a3e123e7ef260dc05ba2b522a1d369fe2315376efea4"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+ "wai-bindgen-gen-core",
+ "wai-bindgen-gen-rust-wasm",
+]
+
+[[package]]
+name = "wai-bindgen-wasmer"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00f4a7cb5421959864b139870a7ebba26eafc9b46648feda9ac143528e9a8769"
+dependencies = [
+ "anyhow",
+ "bitflags 1.3.2",
+ "once_cell",
+ "thiserror",
+ "tracing",
+ "wai-bindgen-wasmer-impl",
+ "wasmer",
+]
+
+[[package]]
+name = "wai-bindgen-wasmer-impl"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b3488ed88d4dd0e3bf85bad4e27dac6cb31aae5d122a5dda2424803c8dc863a"
+dependencies = [
+ "proc-macro2",
+ "syn 1.0.109",
+ "wai-bindgen-gen-core",
+ "wai-bindgen-gen-wasmer",
+]
+
+[[package]]
+name = "wai-parser"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bd0acb6d70885ea0c343749019ba74f015f64a9d30542e66db69b49b7e28186"
+dependencies = [
+ "anyhow",
+ "id-arena",
+ "pulldown-cmark",
+ "unicode-normalization",
+ "unicode-xid",
+]
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+dependencies = [
+ "log 0.4.20",
+ "try-lock",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b"
+dependencies = [
+ "bumpalo",
+ "log 0.4.20",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.41"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97"
+dependencies = [
+ "cfg-if 1.0.0",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838"
+
+[[package]]
+name = "wasm-encoder"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba64e81215916eaeb48fee292f29401d69235d62d8b8fd92a7b2844ec5ae5f7"
+dependencies = [
+ "leb128",
+]
+
+[[package]]
+name = "wasmer"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5467c7a23f9be04d5691590bea509dbea27e5ba5810d0020bef908456a495f33"
+dependencies = [
+ "bytes 1.5.0",
+ "cfg-if 1.0.0",
+ "derivative",
+ "indexmap 1.9.3",
+ "js-sys",
+ "more-asserts",
+ "rustc-demangle",
+ "serde",
+ "serde-wasm-bindgen",
+ "shared-buffer",
+ "target-lexicon",
+ "thiserror",
+ "wasm-bindgen",
+ "wasmer-compiler",
+ "wasmer-compiler-cranelift",
+ "wasmer-derive",
+ "wasmer-types",
+ "wasmer-vm",
+ "wasmparser 0.83.0",
+ "wasmparser 0.95.0",
+ "wat",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "wasmer-cache"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1613ff5e7db7645eab2f003411b1e7a12dcf0ff4677f6e7712ba74ebf40b276"
+dependencies = [
+ "blake3",
+ "hex",
+ "thiserror",
+ "wasmer",
+]
+
+[[package]]
+name = "wasmer-compiler"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "510ad01a668d774f3a103a7c219bbc0970be93e8f1b27e2fdb48d1f4ccd1deff"
+dependencies = [
+ "backtrace",
+ "bytes 1.5.0",
+ "cfg-if 1.0.0",
+ "enum-iterator",
+ "enumset",
+ "lazy_static",
+ "leb128",
+ "memmap2 0.5.10",
+ "more-asserts",
+ "region",
+ "rkyv",
+ "self_cell",
+ "shared-buffer",
+ "smallvec 1.13.1",
+ "thiserror",
+ "wasmer-types",
+ "wasmer-vm",
+ "wasmparser 0.95.0",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "wasmer-compiler-cranelift"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54bf93078990d83960d798de3c5935bddaba771fc2fefb9ed6bab9c0bbdea5c1"
+dependencies = [
+ "cranelift-codegen",
+ "cranelift-entity",
+ "cranelift-frontend",
+ "gimli 0.26.2",
+ "more-asserts",
+ "rayon",
+ "smallvec 1.13.1",
+ "target-lexicon",
+ "tracing",
+ "wasmer-compiler",
+ "wasmer-types",
+]
+
+[[package]]
+name = "wasmer-derive"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b374fd34d97b1c091d8675f9bc472df52dc6787d139d3762d42c7dc84813a9b"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "wasmer-toml"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d21472954ee9443235ca32522b17fc8f0fe58e2174556266a0d9766db055cc52"
+dependencies = [
+ "anyhow",
+ "derive_builder",
+ "indexmap 2.2.3",
+ "semver 1.0.18",
+ "serde",
+ "serde_cbor",
+ "serde_json",
+ "serde_yaml 0.9.27",
+ "thiserror",
+ "toml 0.8.2",
+]
+
+[[package]]
+name = "wasmer-types"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0caf1c87937b52aba8e9f920a278e1beda282f7439612c0b48f51a58e7a87bab"
+dependencies = [
+ "bytecheck",
+ "enum-iterator",
+ "enumset",
+ "indexmap 1.9.3",
+ "more-asserts",
+ "rkyv",
+ "serde",
+ "target-lexicon",
+ "thiserror",
+]
+
+[[package]]
+name = "wasmer-vm"
+version = "4.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58315c25492bc72a33f47a7d7fb0869a0106fc0164ec051e349a9e1eddba9a01"
+dependencies = [
+ "backtrace",
+ "cc",
+ "cfg-if 1.0.0",
+ "corosensei",
+ "crossbeam-queue",
+ "dashmap",
+ "derivative",
+ "enum-iterator",
+ "fnv",
+ "indexmap 1.9.3",
+ "lazy_static",
+ "libc",
+ "mach",
+ "memoffset 0.9.0",
+ "more-asserts",
+ "region",
+ "scopeguard",
+ "thiserror",
+ "wasmer-types",
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "wasmer-wasix"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9697b8ffc3a37c193648919018848171de0d75e6e955377893d258431b19d7a"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bincode",
+ "bytes 1.5.0",
+ "cfg-if 1.0.0",
+ "chrono",
+ "cooked-waker",
+ "dashmap",
+ "derivative",
+ "futures 0.3.28",
+ "getrandom",
+ "heapless",
+ "hex",
+ "http",
+ "js-sys",
+ "lazy_static",
+ "libc",
+ "linked_hash_set",
+ "once_cell",
+ "petgraph",
+ "pin-project",
+ "rand 0.8.5",
+ "rusty_pool",
+ "semver 1.0.18",
+ "serde",
+ "serde_cbor",
+ "serde_derive",
+ "serde_json",
+ "serde_yaml 0.8.26",
+ "sha2",
+ "tempfile",
+ "term_size",
+ "termios 0.3.3",
+ "thiserror",
+ "tokio",
+ "tracing",
+ "url 2.4.1",
+ "urlencoding",
+ "virtual-fs",
+ "virtual-mio",
+ "virtual-net",
+ "wai-bindgen-wasmer",
+ "waker-fn",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasmer",
+ "wasmer-types",
+ "wasmer-wasix-types",
+ "web-sys",
+ "webc",
+ "weezl",
+ "winapi 0.3.9",
+ "xxhash-rust",
+]
+
+[[package]]
+name = "wasmer-wasix-types"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65ca293eae6e3af6e4fd9fe1c8e096151d4f06cbb405ce5dd65edb779aba42d9"
+dependencies = [
+ "anyhow",
+ "bitflags 1.3.2",
+ "byteorder",
+ "cfg-if 1.0.0",
+ "num_enum",
+ "serde",
+ "time 0.3.30",
+ "tracing",
+ "wai-bindgen-gen-core",
+ "wai-bindgen-gen-rust",
+ "wai-bindgen-gen-rust-wasm",
+ "wai-bindgen-rust",
+ "wai-parser",
+ "wasmer",
+ "wasmer-derive",
+ "wasmer-types",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.83.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a"
+
+[[package]]
+name = "wasmparser"
+version = "0.95.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ea896273ea99b15132414be1da01ab0d8836415083298ecaffbe308eaac87a"
+dependencies = [
+ "indexmap 1.9.3",
+ "url 2.4.1",
+]
+
+[[package]]
+name = "wasmparser"
+version = "0.110.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dfcdb72d96f01e6c85b6bf20102e7423bdbaad5c337301bab2bbf253d26413c"
+dependencies = [
+ "indexmap 2.2.3",
+ "semver 1.0.18",
+]
+
+[[package]]
+name = "wast"
+version = "64.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a259b226fd6910225aa7baeba82f9d9933b6d00f2ce1b49b80fa4214328237cc"
+dependencies = [
+ "leb128",
+ "memchr",
+ "unicode-width",
+ "wasm-encoder",
+]
+
+[[package]]
+name = "wat"
+version = "1.0.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53253d920ab413fca1c7dc2161d601c79b4fdf631d0ba51dd4343bf9b556c3f6"
+dependencies = [
+ "wast",
+]
+
+[[package]]
+name = "wax"
+version = "0.6.0"
+dependencies = [
+ "build-fs-tree",
+ "const_format",
+ "dunce",
+ "itertools 0.11.0",
+ "miette 5.10.0",
+ "nom",
+ "path-slash",
+ "pori",
+ "regex",
+ "tardar",
+ "tempfile",
+ "thiserror",
+ "walkdir",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webbrowser"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579cc485bd5ce5bfa0d738e4921dd0b956eca9800be1fd2e5257ebe95bc4617e"
+dependencies = [
+ "core-foundation",
+ "dirs",
+ "jni",
+ "log 0.4.20",
+ "ndk-context",
+ "objc",
+ "raw-window-handle",
+ "url 2.4.1",
+ "web-sys",
+]
+
+[[package]]
+name = "webc"
+version = "5.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "973ca5a91b4fb3e4bb37cfebe03ef9364d0aff2765256abefdb7e79dc9188483"
+dependencies = [
+ "anyhow",
+ "base64 0.21.4",
+ "byteorder",
+ "bytes 1.5.0",
+ "flate2",
+ "indexmap 1.9.3",
+ "leb128",
+ "lexical-sort",
+ "once_cell",
+ "path-clean 1.0.1",
+ "rand 0.8.5",
+ "semver 1.0.18",
+ "serde",
+ "serde_cbor",
+ "serde_json",
+ "sha2",
+ "shared-buffer",
+ "tar",
+ "tempfile",
+ "thiserror",
+ "toml 0.7.8",
+ "url 2.4.1",
+ "walkdir",
+ "wasmer-toml",
+]
+
+[[package]]
+name = "webpki"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring 0.16.20",
+ "untrusted 0.7.1",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
+
+[[package]]
+name = "websocket"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a1aba896516545a4cea196a12c04074854ab85d53bbaf22f9b79eddadde75a2"
+dependencies = [
+ "bytes 0.4.12",
+ "futures 0.1.31",
+ "hyper 0.10.16",
+ "native-tls",
+ "rand 0.6.5",
+ "tokio-codec",
+ "tokio-io",
+ "tokio-reactor",
+ "tokio-tcp",
+ "tokio-tls",
+ "unicase 1.4.2",
+ "url 1.7.2",
+ "websocket-base",
+]
+
+[[package]]
+name = "websocket-base"
+version = "0.26.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49aec794b07318993d1db16156d5a9c750120597a5ee40c6b928d416186cb138"
+dependencies = [
+ "base64 0.10.1",
+ "bitflags 1.3.2",
+ "byteorder",
+ "bytes 0.4.12",
+ "futures 0.1.31",
+ "native-tls",
+ "rand 0.6.5",
+ "sha-1 0.8.2",
+ "tokio-codec",
+ "tokio-io",
+ "tokio-tcp",
+ "tokio-tls",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
+
+[[package]]
+name = "which"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[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 = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43dbb096663629518eb1dfa72d80243ca5a6aca764cae62a2df70af760a9be75"
+dependencies = [
+ "windows_aarch64_msvc 0.33.0",
+ "windows_i686_gnu 0.33.0",
+ "windows_i686_msvc 0.33.0",
+ "windows_x86_64_gnu 0.33.0",
+ "windows_x86_64_msvc 0.33.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.1",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.0",
+ "windows_aarch64_msvc 0.48.0",
+ "windows_i686_gnu 0.48.0",
+ "windows_i686_msvc 0.48.0",
+ "windows_x86_64_gnu 0.48.0",
+ "windows_x86_64_gnullvm 0.48.0",
+ "windows_x86_64_msvc 0.48.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd761fd3eb9ab8cc1ed81e56e567f02dd82c4c837e48ac3b2181b9ffc5060807"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab0cf703a96bab2dc0c02c0fa748491294bf9b7feb27e1f4f96340f208ada0e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cfdbe89cc9ad7ce618ba34abc34bbb6c36d99e96cae2245b7943cd75ee773d0"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4dd9b0c0e9ece7bb22e84d70d01b71c6d6248b81a3c60d11869451b4cb24784"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff1e4aa646495048ec7f3ffddc411e1d829c026a2ec62b39da15c1055e406eaa"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
+name = "wio"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
+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 = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "xattr"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f"
+dependencies = [
+ "libc",
+ "linux-raw-sys 0.4.13",
+ "rustix 0.38.31",
+]
+
+[[package]]
+name = "xtask"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "cargo-lock",
+ "chrono",
+ "clap 4.5.2",
+ "indexmap 1.9.3",
+ "inquire",
+ "num-format",
+ "owo-colors",
+ "plotters",
+ "semver 1.0.18",
+ "serde",
+ "serde_json",
+ "tabled",
+ "walkdir",
+]
+
+[[package]]
+name = "xxhash-rust"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53be06678ed9e83edb1745eb72efc0bbcd7b5c3c35711a860906aed827a13d61"
+
+[[package]]
+name = "y4m"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a72a9921af8237fe25097a1ae31c92a05c1d39b2454653ad48f2f407cf7a0dae"
+
+[[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 = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
+[[package]]
+name = "yeslogic-fontconfig-sys"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2bbd69036d397ebbff671b1b8e4d918610c181c5a16073b96f984a38d08c386"
+dependencies = [
+ "const-cstr",
+ "dlib",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.32",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+
+[[package]]
+name = "zstd"
+version = "0.12.3+zstd.1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
+dependencies = [
+ "zstd-safe 6.0.5+zstd.1.5.4",
+]
+
+[[package]]
+name = "zstd"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d789b1514203a1120ad2429eae43a7bd32b90976a7bb8a05f7ec02fa88cc23a"
+dependencies = [
+ "zstd-safe 7.1.0",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.5+zstd.1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "7.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cd99b45c6bc03a018c8b8a86025678c87e55526064e38f9df301989dce7ec0a"
+dependencies = [
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.10+zstd.1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
+
+[[package]]
+name = "zune-core"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a"
+
+[[package]]
+name = "zune-jpeg"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec866b44a2a1fd6133d363f073ca1b179f438f99e7e5bfb1e33f7181facfe448"
+dependencies = [
+ "zune-core",
+]
diff --git a/nixpkgs/pkgs/tools/misc/turbo/default.nix b/nixpkgs/pkgs/tools/misc/turbo/default.nix
new file mode 100644
index 000000000000..ca499d635360
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/turbo/default.nix
@@ -0,0 +1,73 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, protobuf
+, rustPlatform
+, pkg-config
+, openssl
+, extra-cmake-modules
+, fontconfig
+, rust-jemalloc-sys
+, testers
+, turbo
+, nix-update-script
+, IOKit
+, CoreServices
+, CoreFoundation
+, capnproto
+}:
+rustPlatform.buildRustPackage rec{
+  pname = "turbo-unwrapped";
+  version = "1.13.2";
+  src = fetchFromGitHub {
+    owner = "vercel";
+    repo = "turbo";
+    rev = "v${version}";
+    hash = "sha256-q1BxBAjfHyGDaH/IywPw9qnZJjzeU4tu2CyUWbnd6y8=";
+  };
+  cargoBuildFlags = [
+    "--package"
+    "turbo"
+  ];
+  RELEASE_TURBO_CLI = "true";
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes."tui-term-0.1.8" = "sha256-MNeVnF141uNWbjqXEbHwXnMTkCnvIteb5v40HpEK6D4=";
+  };
+
+  RUSTC_BOOTSTRAP = 1;
+  nativeBuildInputs = [
+    pkg-config
+    extra-cmake-modules
+    protobuf
+    capnproto
+  ];
+  buildInputs = [
+    openssl
+    fontconfig
+    rust-jemalloc-sys
+  ] ++ lib.optionals stdenv.isDarwin [
+      IOKit
+      CoreServices
+      CoreFoundation
+  ];
+
+  # Browser tests time out with chromium and google-chrome
+  doCheck = false;
+
+  passthru = {
+    updateScript = nix-update-script {
+      extraArgs = [ "--version-regex" "^\d+\.\d+\.\d+$" ];
+    };
+    tests.version = testers.testVersion { package = turbo; };
+  };
+
+  meta = with lib; {
+    description = "High-performance build system for JavaScript and TypeScript codebases";
+    mainProgram = "turbo";
+    homepage = "https://turbo.build/";
+    maintainers = with maintainers; [ dlip ];
+    license = licenses.mpl20;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/turbo/wrapper.nix b/nixpkgs/pkgs/tools/misc/turbo/wrapper.nix
new file mode 100644
index 000000000000..89551f02da46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/turbo/wrapper.nix
@@ -0,0 +1,16 @@
+{ lib, symlinkJoin, makeWrapper, turbo-unwrapped
+, disableTelemetry ? true, disableUpdateNotifier ? true }:
+
+symlinkJoin {
+  pname = "turbo";
+  name = "turbo-${turbo-unwrapped.version}";
+  inherit (turbo-unwrapped) version meta;
+  nativeBuildInputs = [ makeWrapper ];
+  paths = [ turbo-unwrapped ];
+  postBuild = ''
+    rm $out/bin/turbo
+    makeWrapper ${turbo-unwrapped}/bin/turbo $out/bin/turbo \
+      ${lib.optionalString disableTelemetry "--set TURBO_TELEMETRY_DISABLED 1"} \
+      ${lib.optionalString disableUpdateNotifier "--add-flags --no-update-notifier"}
+  '';
+}
diff --git a/nixpkgs/pkgs/tools/misc/tvnamer/default.nix b/nixpkgs/pkgs/tools/misc/tvnamer/default.nix
new file mode 100644
index 000000000000..d1ddb319dc19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tvnamer/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+let
+  python' = python3.override {
+    packageOverrides = final: prev: rec {
+      # tvdb_api v3.1.0 has a hard requirement on requests-cache < 0.6
+      requests-cache = prev.requests-cache.overridePythonAttrs (oldAttrs: rec {
+        version = "0.5.2";
+        src = fetchPypi {
+          inherit (oldAttrs) pname;
+          inherit version;
+          sha256 = "sha256-gTAjJpaGBF+OAeIonMHn6a5asi3dHihJqQk6s6tycOs=";
+        };
+
+        nativeBuildInputs = with final; [
+          setuptools
+        ];
+
+        # too many changes have been made to requests-cache based on version 0.6 so
+        # simply disable tests
+        doCheck = false;
+      });
+    };
+  };
+
+  pypkgs = python'.pkgs;
+
+in
+pypkgs.buildPythonApplication rec {
+  pname = "tvnamer";
+  version = "3.0.4";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "dc2ea8188df6ac56439343630466b874c57756dd0b2538dd8e7905048f425f04";
+  };
+
+  propagatedBuildInputs = with pypkgs; [ tvdb-api ];
+
+  # no tests from pypi
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatic TV episode file renamer, uses data from thetvdb.com via tvdb_api";
+    homepage = "https://github.com/dbr/tvnamer";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "tvnamer";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twm/default.nix b/nixpkgs/pkgs/tools/misc/twm/default.nix
new file mode 100644
index 000000000000..3e15aa256418
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twm/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, rustPlatform
+, openssl
+, pkg-config
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "twm";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "vinnymeller";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-gvo5+lZNe5QOHNI4nrPbCR65D+VFf/anmLVdu5RXJiY=";
+  };
+
+  cargoHash = "sha256-5+1B+SbrIrswGjtNLlwbtLEhARMZNs75DFK8wQI2O0M=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ] ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "A customizable workspace manager for tmux";
+    homepage = "https://github.com/vinnymeller/twm";
+    changelog = "https://github.com/vinnymeller/twm/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vinnymeller ];
+    mainProgram = "twm";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twspace-crawler/default.nix b/nixpkgs/pkgs/tools/misc/twspace-crawler/default.nix
new file mode 100644
index 000000000000..fa38e636c77e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twspace-crawler/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildNpmPackage, fetchFromGitHub }:
+
+buildNpmPackage rec {
+  pname = "twspace-crawler";
+  version = "1.12.9";
+
+  src = fetchFromGitHub {
+    owner = "HitomaruKonpaku";
+    repo = "twspace-crawler";
+    rev = "7875e534b257d4ba5a0cf8179a4772c87005fee6"; # version not tagged
+    hash = "sha256-pA31ak0Rwy4Rc1fVz+4QV1lcTYGUmPOd61FtLQGN1ek=";
+  };
+
+  npmDepsHash = "sha256-2fsYeSZYzadLmikUJbuHE4XMAp38jTZvtRo9xgaZVzg=";
+
+  meta = with lib; {
+    description = "Script to monitor & download Twitter Spaces 24/7";
+    homepage = "https://github.com/HitomaruKonpaku/twspace-crawler";
+    changelog = "https://github.com/HitomaruKonpaku/twspace-crawler/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.isc;
+    maintainers = [ ];
+    mainProgram = "twspace-crawler";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twspace-dl/default.nix b/nixpkgs/pkgs/tools/misc/twspace-dl/default.nix
new file mode 100644
index 000000000000..a9d86a18c66b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twspace-dl/default.nix
@@ -0,0 +1,34 @@
+{ lib, python3Packages, fetchPypi, ffmpeg-headless }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "twspace-dl";
+  version = "2023.7.24.1";
+
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "twspace_dl";
+    sha256 = "sha256-Oq9k5Nfixf1vihhna7g3ZkqCwEtCdnvlbxIuOnGVoKE=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ poetry-core ];
+
+  propagatedBuildInputs = with python3Packages; [
+    mutagen
+    requests
+  ];
+
+  makeWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath [ ffmpeg-headless ]}" ];
+
+  pythonImportsCheck = [ "twspace_dl" ];
+
+  meta = with lib; {
+    description = "A python module to download twitter spaces";
+    homepage = "https://github.com/HoloArchivists/twspace-dl";
+    changelog = "https://github.com/HoloArchivists/twspace-dl/releases/tag/${version}";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ ];
+    mainProgram = "twspace_dl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twurl/Gemfile b/nixpkgs/pkgs/tools/misc/twurl/Gemfile
new file mode 100644
index 000000000000..55b6e9f5650b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twurl/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem 'twurl'
diff --git a/nixpkgs/pkgs/tools/misc/twurl/Gemfile.lock b/nixpkgs/pkgs/tools/misc/twurl/Gemfile.lock
new file mode 100644
index 000000000000..d29268e656dd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twurl/Gemfile.lock
@@ -0,0 +1,15 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    oauth (0.5.6)
+    twurl (0.9.6)
+      oauth (~> 0.4)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  twurl
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/tools/misc/twurl/default.nix b/nixpkgs/pkgs/tools/misc/twurl/default.nix
new file mode 100644
index 000000000000..ff332e88de91
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twurl/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "twurl";
+  gemdir = ./.;
+  exes = [ "twurl" ];
+
+  passthru.updateScript = bundlerUpdateScript "twurl";
+
+  meta = with lib; {
+    description = "OAuth-enabled curl for the Twitter API";
+    homepage    = "https://github.com/twitter/twurl";
+    license     = "MIT";
+    maintainers = with maintainers; [ brecht ];
+    platforms   = platforms.unix;
+    mainProgram = "twurl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/twurl/gemset.nix b/nixpkgs/pkgs/tools/misc/twurl/gemset.nix
new file mode 100644
index 000000000000..a1a2ed835d3e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/twurl/gemset.nix
@@ -0,0 +1,23 @@
+{
+  oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zwd6v39yqfdrpg1p3d9jvzs9ljg55ana2p06m0l7qn5w0lgx1a0";
+      type = "gem";
+    };
+    version = "0.5.6";
+  };
+  twurl = {
+    dependencies = ["oauth"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jgsxa0cnkajnsxxlsrgl2wq3m7khaxvr0rcir4vwbc1hx210700";
+      type = "gem";
+    };
+    version = "0.9.6";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/txt2man/default.nix b/nixpkgs/pkgs/tools/misc/txt2man/default.nix
new file mode 100644
index 000000000000..a6ebcb288216
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/txt2man/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, coreutils, gawk }:
+
+stdenv.mkDerivation rec {
+  pname = "txt2man";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "mvertes";
+    repo = "txt2man";
+    rev = "${pname}-${version}";
+    hash = "sha256-Aqi5PNNaaM/tr9A/7vKeafYKYIs/kHbwHzE7+R/9r9s=";
+  };
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+  ];
+
+  postPatch = ''
+    for f in bookman src2man txt2man; do
+      substituteInPlace $f \
+        --replace "gawk" "${gawk}/bin/gawk" \
+        --replace "(date" "(${coreutils}/bin/date" \
+        --replace "=cat" "=${coreutils}/bin/cat" \
+        --replace "cat <<" "${coreutils}/bin/cat <<" \
+        --replace "expand" "${coreutils}/bin/expand" \
+        --replace "(uname" "(${coreutils}/bin/uname"
+    done
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    # gawk and coreutils are part of stdenv but will not
+    # necessarily be in PATH at runtime.
+    sh -c 'unset PATH; printf hello | ./txt2man'
+  '';
+
+  meta = with lib; {
+    description = "Convert flat ASCII text to man page format";
+    homepage = "http://mvertes.free.fr/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/txtw/default.nix b/nixpkgs/pkgs/tools/misc/txtw/default.nix
new file mode 100644
index 000000000000..9f8783491b11
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/txtw/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, cairo }:
+
+stdenv.mkDerivation rec {
+  version = "0.4";
+  pname = "txtw";
+
+  src = fetchFromGitHub {
+    owner = "baskerville";
+    repo = "txtw";
+    rev = version;
+    sha256 = "17yjdgdd080fsf5r1wzgk6vvzwsa15gcwc9z64v7x588jm1ryy3k";
+  };
+
+  buildInputs = [ cairo ];
+
+  prePatch = ''sed -i "s@/usr/local@$out@" Makefile'';
+
+  meta = with lib; {
+    description = "Compute text widths";
+    homepage = "https://github.com/baskerville/txtw";
+    maintainers = with maintainers; [ lihop ];
+    license = licenses.unlicense;
+    platforms = platforms.linux;
+    mainProgram = "txtw";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tydra/default.nix b/nixpkgs/pkgs/tools/misc/tydra/default.nix
new file mode 100644
index 000000000000..551519695c43
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tydra/default.nix
@@ -0,0 +1,35 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tydra";
+  version = "1.0.2";
+
+  src = fetchFromGitHub {
+    owner = "Mange";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1kvyski3qy2lwlpipynq894i0g9x2j4a1iy2mgdwfibfyfkv2jnm";
+  };
+
+  cargoSha256 = "0handd5vxxvmlllzxhvwgadl4r7yc78f068r8jryprpap31azg3a";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage doc/{tydra.1,tydra-actions.5}
+
+    $out/bin/tydra --generate-completions bash > tydra.bash
+    $out/bin/tydra --generate-completions fish > tydra.fish
+    $out/bin/tydra --generate-completions zsh > _tydra
+
+    installShellCompletion tydra.{bash,fish} _tydra
+  '';
+
+  meta = with lib; {
+    description = "Shortcut menu-based task runner, inspired by Emacs Hydra";
+    homepage = "https://github.com/Mange/tydra";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "tydra";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/tz/default.nix b/nixpkgs/pkgs/tools/misc/tz/default.nix
new file mode 100644
index 000000000000..4059125353f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/tz/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tz";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "oz";
+    repo = "tz";
+    rev = "v${version}";
+    sha256 = "sha256-Mnb0GdJ9dgaUanWBP5JOo6++6MfrUgncBRp4NIbhxf0=";
+  };
+
+  vendorHash = "sha256-lcCra4LyebkmelvBs0Dd2mn6R64Q5MaUWc5AP8V9pec=";
+
+  meta = with lib; {
+    description = "A time zone helper";
+    homepage = "https://github.com/oz/tz";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ siraben ];
+    mainProgram = "tz";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uair/default.nix b/nixpkgs/pkgs/tools/misc/uair/default.nix
new file mode 100644
index 000000000000..5d154ef82d80
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uair/default.nix
@@ -0,0 +1,37 @@
+{ fetchFromGitHub
+, installShellFiles
+, lib
+, rustPlatform
+, scdoc
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "uair";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "metent";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-cxSNBxs6ixbjWMUYzOnwI+vavkfyaQx3/OmVdTCr7M0=";
+  };
+
+  cargoHash = "sha256-cDIF4RvJ7K6t18GPgiRV6NDoD/x3II/3wCHW3KK2/os=";
+
+  nativeBuildInputs = [ installShellFiles scdoc ];
+
+  preFixup = ''
+    scdoc < docs/uair.1.scd > docs/uair.1
+    scdoc < docs/uair.5.scd > docs/uair.5
+    scdoc < docs/uairctl.1.scd > docs/uairctl.1
+
+    installManPage docs/*.[1-9]
+  '';
+
+  meta = with lib; {
+    description = "An extensible pomodoro timer";
+    homepage = "https://github.com/metent/uair";
+    license = licenses.mit;
+    maintainers = with maintainers; [ thled ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ugs/default.nix b/nixpkgs/pkgs/tools/misc/ugs/default.nix
new file mode 100644
index 000000000000..2a3eea73c07f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ugs/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, copyDesktopItems
+, makeDesktopItem
+, makeWrapper
+, jre
+, fetchzip
+}:
+let
+  desktopItem = makeDesktopItem {
+    name = "ugs";
+    exec = "ugs";
+    comment = "A cross-platform G-Code sender for GRBL, Smoothieware, TinyG and G2core.";
+    desktopName = "Universal-G-Code-Sender";
+    categories = [ "Game" ];
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "ugs";
+  version = "2.1.6";
+
+  src = fetchzip {
+    url = "https://github.com/winder/Universal-G-Code-Sender/releases/download/v${version}/UniversalGcodeSender.zip";
+    hash = "sha256-6L/4s/QmlTnYnhwLgPf7z8UVkBUYXi3Wb3doa5JCViE=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    makeWrapper ${jre}/bin/java $out/bin/ugs \
+      --prefix PATH : ${lib.makeBinPath [ jre ]} \
+      --add-flags "-jar ${src}/UniversalGcodeSender.jar"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    description = "A cross-platform G-Code sender for GRBL, Smoothieware, TinyG and G2core";
+    homepage = "https://github.com/winder/Universal-G-Code-Sender";
+    maintainers = with maintainers; [ matthewcroughan ];
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    mainProgram = "ugs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ugtrain/default.nix b/nixpkgs/pkgs/tools/misc/ugtrain/default.nix
new file mode 100644
index 000000000000..e92170ad595a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ugtrain/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, scanmem
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.4.1";
+  pname = "ugtrain";
+
+  src = fetchFromGitHub {
+    owner  = "ugtrain";
+    repo   = "ugtrain";
+    rev    = "v${version}";
+    sha256 = "0pw9lm8y83mda7x39874ax2147818h1wcibi83pd2x4rp1hjbkkn";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config scanmem ];
+
+  meta = with lib; {
+    homepage = "https://github.com/ugtrain/ugtrain";
+    description = "The Universal Elite Game Trainer for CLI (Linux game trainer research project)";
+    maintainers = with maintainers; [ mtrsk ];
+    platforms = platforms.linux;
+    license = licenses.gpl3Only;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uhubctl/default.nix b/nixpkgs/pkgs/tools/misc/uhubctl/default.nix
new file mode 100644
index 000000000000..e148e03f820e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uhubctl/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "uhubctl";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "mvp";
+    repo = "uhubctl";
+    rev = "v${version}";
+    sha256 = "sha256-Rt9hTT0Tn8v+J1XqZm8iXTTY4nKow2qjRPNmNCiWNoY=";
+  };
+
+  buildInputs = [ libusb1 ];
+
+  installFlags = [ "prefix=${placeholder "out"}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mvp/uhubctl";
+    description = "Utility to control USB power per-port on smart USB hubs";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ prusnak ];
+    platforms = with platforms; linux ++ darwin;
+    mainProgram = "uhubctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ulid/default.nix b/nixpkgs/pkgs/tools/misc/ulid/default.nix
new file mode 100644
index 000000000000..f2ff23addfe7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ulid/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ulid";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "oklog";
+    repo = "ulid";
+    rev = "v${version}";
+    hash = "sha256-/oQPgcO1xKbHXutxz0WPfIduShPrfH1l+7/mj8jLst8=";
+  };
+
+  vendorHash = "sha256-s1YkEwFxE1zpUUCgwOAl8i6/9HB2rcGG+4kqnixTit0=";
+
+  ldflags = [ "-s" "-w" ];
+
+  checkFlags = [
+    # skip flaky test
+    "-skip=TestMonotonicSafe"
+  ];
+
+  meta = with lib; {
+    description = "Universally Unique Lexicographically Sortable Identifier (ULID) in Go";
+    homepage = "https://github.com/oklog/ulid";
+    changelog = "https://github.com/oklog/ulid/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "ulid";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix b/nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix
new file mode 100644
index 000000000000..990547291f61
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ultrastar-creator/default.nix
@@ -0,0 +1,45 @@
+{ lib, mkDerivation, fetchFromGitHub
+, qmake, qtbase, pkg-config, taglib, libbass, libbass_fx }:
+
+# TODO: get rid of (unfree) libbass
+# issue:https://github.com/UltraStar-Deluxe/UltraStar-Creator/issues/3
+# there’s a WIP branch here:
+# https://github.com/UltraStar-Deluxe/UltraStar-Creator/commits/BASS_removed
+
+mkDerivation {
+  pname = "ultrastar-creator";
+  version = "2019-04-23";
+
+  src = fetchFromGitHub {
+    owner = "UltraStar-Deluxe";
+    repo = "UltraStar-Creator";
+    rev = "36583b4e482b68f6aa949e77ef2744776aa587b1";
+    sha256 = "1rzz04l7s7pxj74xam0cxlq569lfpgig35kpbsplq531d4007pc9";
+  };
+
+  postPatch = with lib; ''
+    # we don’t want prebuild binaries checked into version control!
+    rm -rf lib include
+    sed -e "s|DESTDIR =.*$|DESTDIR = $out/bin|" \
+        -e 's|-L".*unix"||' \
+        -e "/QMAKE_POST_LINK/d" \
+        -e "s|../include/bass|${getLib libbass}/include|g" \
+        -e "s|../include/bass_fx|${getLib libbass_fx}/include|g" \
+        -e "s|../include/taglib|${getLib taglib}/include|g" \
+        -i src/UltraStar-Creator.pro
+  '';
+
+  preConfigure = ''
+    cd src
+  '';
+
+  nativeBuildInputs = [ qmake pkg-config ];
+  buildInputs = [ qtbase taglib libbass libbass_fx ];
+
+  meta = with lib; {
+    description = "Ultrastar karaoke song creation tool";
+    homepage = "https://github.com/UltraStar-Deluxe/UltraStar-Creator";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix b/nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix
new file mode 100644
index 000000000000..d5dd47e0f669
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ultrastar-manager/default.nix
@@ -0,0 +1,122 @@
+{ lib, mkDerivation, fetchFromGitHub, pkg-config, symlinkJoin, qmake, diffPlugins
+, qtbase, qtmultimedia, taglib, libmediainfo, libzen, libbass }:
+
+let
+  version = "2019-04-23";
+  rev = "ef4524e2239ddbb60f26e05bfba1f4f28cb7b54f";
+  sha256 = "0dl2qp686vbs160b3i9qypb7sv37phy2wn21kgzljbk3wnci3yv4";
+  buildInputs = [ qtbase qtmultimedia taglib libmediainfo libzen libbass ];
+
+  plugins = [
+    "albumartex"
+    "amazon"
+    "audiotag"
+    "cleanup"
+    "freecovers"
+    "lyric"
+    "preparatory"
+    "rename"
+ ];
+
+  patchedSrc =
+    let src = fetchFromGitHub {
+      owner = "UltraStar-Deluxe";
+      repo = "UltraStar-Manager";
+      inherit rev sha256;
+    };
+    in mkDerivation {
+      name = "${src.name}-patched";
+      inherit src;
+
+      dontInstall = true;
+
+      patchPhase = with lib; ''
+        # we don’t want prebuild binaries checked into version control!
+        rm -rf lib include
+
+        # fix up main project file
+        sed -e 's|-L.*unix.*lbass.*$|-lbass|' \
+            -e "/QMAKE_POST_LINK/d" \
+            -e "s|../include/bass|${getLib libbass}/include|g" \
+            -e "s|../include/taglib|${getLib taglib}/include|g" \
+            -e "s|../include/mediainfo|${getLib libmediainfo}/include|g" \
+            -i src/UltraStar-Manager.pro
+
+        # if more plugins start depending on ../../../include,
+        # it should be abstracted out for all .pro files
+        sed -e "s|../../../include/taglib|${getLib taglib}/include/taglib|g" \
+            -i src/plugins/audiotag/audiotag.pro
+
+        mkdir $out
+        mv * $out
+      '';
+    };
+
+  patchApplicationPath = file: path: ''
+    sed -e "s|QCore.*applicationDirPath()|QString(\"${path}\")|" -i "${file}"
+  '';
+
+  buildPlugin = name: mkDerivation {
+    name = "ultrastar-manager-${name}-plugin-${version}";
+    src = patchedSrc;
+
+    buildInputs = [ qmake ] ++ buildInputs;
+
+    postPatch = ''
+      sed -e "s|DESTDIR = .*$|DESTDIR = $out|" \
+          -i src/plugins/${name}/${name}.pro
+
+      # plugins use the application’s binary folder (wtf)
+      for f in $(grep -lr "QCoreApplication::applicationDirPath" src/plugins); do
+        ${patchApplicationPath "$f" "\$out"}
+      done
+
+    '';
+    preConfigure = ''
+      cd src/plugins/${name}
+    '';
+  };
+
+  builtPlugins =
+    symlinkJoin {
+      name = "ultrastar-manager-plugins-${version}";
+      paths = map buildPlugin plugins;
+    };
+
+in mkDerivation {
+  pname = "ultrastar-manager";
+  inherit version;
+  src = patchedSrc;
+
+  postPatch = ''
+    sed -e "s|DESTDIR =.*$|DESTDIR = $out/bin|" \
+        -i src/UltraStar-Manager.pro
+    # patch plugin manager to point to the collected plugin folder
+    ${patchApplicationPath "src/plugins/QUPluginManager.cpp" builtPlugins}
+  '';
+
+  buildPhase = ''
+    find -path './src/plugins/*' -prune -type d -print0 \
+      | xargs -0 -i'{}' basename '{}' \
+      | sed -e '/shared/d' \
+      > found_plugins
+    ${diffPlugins plugins "found_plugins"}
+
+    cd src && qmake && make
+  '';
+
+  # is not installPhase so that qt post hooks can run
+  preInstall = ''
+    make install
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  inherit buildInputs;
+
+  meta = with lib; {
+    description = "Ultrastar karaoke song manager";
+    homepage = "https://github.com/UltraStar-Deluxe/UltraStar-Manager";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ Profpatsch ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/umlet/default.nix b/nixpkgs/pkgs/tools/misc/umlet/default.nix
new file mode 100644
index 000000000000..b9d3e5d31538
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/umlet/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, jre, unzip, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "umlet";
+  version = "15.1.0";
+
+  src = fetchurl {
+    # NOTE: The download URL breaks consistency - sometimes w/ patch versions
+    # and sometimes w/o. Furthermore, for 15.1.0 they moved everything to the
+    # new /download subfolder.
+    # As releases are very rarely, just modify it by hand..
+    url = "https://www.umlet.com/download/umlet_15_1/umlet-standalone-15.1.zip";
+    hash = "sha256-M6oVWbOmPBTygS+TFkY9PWucFfYLD33suNUuWpFLMIo=";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    mkdir -p "$out/bin"
+    mkdir -p "$out/lib"
+
+    cp -R * "$out/lib"
+
+    cat > "$out/bin/umlet" << EOF
+    #!${runtimeShell}
+
+    programDir="$out/lib"
+    cd "\$programDir"
+    if [ \$# -eq 1 ]
+     then "${jre}/bin/java" -jar "\$programDir/umlet.jar" -filename="\$1"
+     else "${jre}/bin/java" -jar "\$programDir/umlet.jar" "\$@"
+    fi
+
+    EOF
+    chmod a+x "$out/bin/umlet"
+  '';
+
+  meta = with lib; {
+    description = "Free, open-source UML tool with a simple user interface";
+    longDescription = ''
+      UMLet is a free, open-source UML tool with a simple user interface:
+      draw UML diagrams fast, produce sequence and activity diagrams from
+      plain text, export diagrams to eps, pdf, jpg, svg, and clipboard,
+      share diagrams using Eclipse, and create new, custom UML elements.
+      UMLet runs stand-alone or as Eclipse plug-in on Windows, macOS and
+      Linux.
+    '';
+    homepage = "https://www.umlet.com";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ oxzi ];
+    platforms = platforms.all;
+    mainProgram = "umlet";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix b/nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix
new file mode 100644
index 000000000000..81db6449eb14
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unclutter-xfixes/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub,
+  libev, libX11, libXext, libXi, libXfixes,
+  pkg-config, asciidoc, libxslt, docbook_xsl }:
+
+stdenv.mkDerivation rec {
+  pname = "unclutter-xfixes";
+  version = "1.6";
+
+  src = fetchFromGitHub {
+    owner = "Airblader";
+    repo = "unclutter-xfixes";
+    rev = "v${version}";
+    sha256 = "sha256-suKmaoJq0PBHZc7NzBQ60JGwJkAtWmvzPtTHWOPJEdc=";
+  };
+
+  nativeBuildInputs = [ pkg-config asciidoc libxslt docbook_xsl ];
+  buildInputs = [ libev libX11 libXext libXi libXfixes ];
+
+  prePatch = ''
+    substituteInPlace Makefile --replace 'PKG_CONFIG =' 'PKG_CONFIG ?='
+  '';
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Rewrite of unclutter using the X11 Xfixes extension";
+    platforms = platforms.unix;
+    license = lib.licenses.mit;
+    maintainers = [ ];
+    mainProgram = "unclutter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unclutter/default.nix b/nixpkgs/pkgs/tools/misc/unclutter/default.nix
new file mode 100644
index 000000000000..5d711c5fd03d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unclutter/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchurl
+, libX11
+}:
+
+stdenv.mkDerivation rec {
+  pname = "unclutter";
+  version = "8";
+  src = fetchurl {
+    url = "https://www.ibiblio.org/pub/X11/contrib/utilities/unclutter-${version}.tar.gz";
+    sha256 = "33a78949a7dedf2e8669ae7b5b2c72067896497820292c96afaa60bb71d1f2a6";
+  };
+
+  buildInputs = [ libX11 ];
+
+  buildFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    mkdir -pv "$out/bin"
+    mkdir -pv "$out/share/man/man1"
+    make DESTDIR="$out" BINDIR="$out/bin" PREFIX="" install
+    make DESTDIR="$out" MANPATH="$out/share/man" PREFIX="" install.man
+  '';
+
+  meta = with lib; {
+    description = "Hides mouse pointer while not in use";
+    longDescription = ''
+      Unclutter hides your X mouse cursor when you do not need it, to prevent
+      it from getting in the way. You have only to move the mouse to restore
+      the mouse cursor. Unclutter is very useful in tiling wm's where you do
+      not need the mouse often.
+
+      Just run it from your .bash_profile like that:
+
+          unclutter -idle 1 &
+    '';
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = platforms.unix;
+    license = lib.licenses.publicDomain;
+    mainProgram = "unclutter";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/undocker/default.nix b/nixpkgs/pkgs/tools/misc/undocker/default.nix
new file mode 100644
index 000000000000..a2ce7dfb7aa1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/undocker/default.nix
@@ -0,0 +1,25 @@
+{ lib
+, buildGoModule
+, fetchFromSourcehut
+}:
+buildGoModule rec {
+  pname = "undocker";
+  version = "1.0.4";
+
+  src = fetchFromSourcehut {
+    owner = "~motiejus";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-I+pTbr1lKELyYlyHrx2gB+aeZ3/PmcePQfXu1ckhKAk=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~motiejus/undocker";
+    description = "A CLI tool to convert a Docker image to a flattened rootfs tarball";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jordanisaacs ];
+    mainProgram = "undocker";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unicode/default.nix b/nixpkgs/pkgs/tools/misc/unicode/default.nix
new file mode 100644
index 000000000000..012ab2fc6cb7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unicode/default.nix
@@ -0,0 +1,41 @@
+{ lib, fetchFromGitHub, fetchurl, python3Packages, installShellFiles, gitUpdater }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "unicode";
+  version = "2.9";
+
+  src = fetchFromGitHub {
+    owner = "garabik";
+    repo = "unicode";
+    rev = "v${version}";
+    sha256 = "sha256-FHAlZ5HID/FE9+YR7Dmc3Uh7E16QKORoD8g9jgTeQdY=";
+  };
+
+  ucdtxt = fetchurl {
+    url = "https://www.unicode.org/Public/15.0.0/ucd/UnicodeData.txt";
+    sha256 = "sha256-gG6a7WUDcZfx7IXhK+bozYcPxWCLTeD//ZkPaJ83anM=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postFixup = ''
+    substituteInPlace "$out/bin/.unicode-wrapped" \
+      --replace "/usr/share/unicode/UnicodeData.txt" "$ucdtxt"
+  '';
+
+  postInstall = ''
+    installManPage paracode.1 unicode.1
+  '';
+
+  passthru.updateScript = gitUpdater {
+    rev-prefix = "v";
+  };
+
+  meta = with lib; {
+    description = "Display unicode character properties";
+    homepage = "https://github.com/garabik/unicode";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.woffs ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/unparam/default.nix b/nixpkgs/pkgs/tools/misc/unparam/default.nix
new file mode 100644
index 000000000000..6578f08c59ae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/unparam/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "unparam";
+  version = "unstable-2023-03-12";
+
+  src = fetchFromGitHub {
+    owner = "mvdan";
+    repo = "unparam";
+    rev = "e84e2d14e3b88193890ff95d72ecb81312f36589";
+    sha256 = "sha256-kbEdOqX/p/FrNfWQ2WjXX+lERprSV2EI9l+kapHuFi4=";
+  };
+
+  vendorHash = "sha256-gEZFAMcr1okqG2IXcS3hDzZKMINohd2JzxezGbzyeBE=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Find unused parameters in Go";
+    homepage = "https://github.com/mvdan/unparam";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "unparam";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/up/default.nix b/nixpkgs/pkgs/tools/misc/up/default.nix
new file mode 100644
index 000000000000..9fa0c700b8c3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/up/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "up";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "akavel";
+    repo = "up";
+    rev = "v${version}";
+    hash = "sha256-d6FCJ9G9ytHhWQ5lXEtlmzclt3odS9e+Y1ry6EiIDsk=";
+  };
+
+  vendorHash = "sha256-PbOMUrKigCUuu5Hv3h0ZYSYezS+64DIZSubnQZ12HOE=";
+
+  meta = with lib; {
+    description = "Ultimate Plumber is a tool for writing Linux pipes with instant live preview";
+    homepage = "https://github.com/akavel/up";
+    maintainers = with maintainers; [ ma27 ];
+    license = licenses.asl20;
+    mainProgram = "up";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/upower-notify/default.nix b/nixpkgs/pkgs/tools/misc/upower-notify/default.nix
new file mode 100644
index 000000000000..8033a91ecf51
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/upower-notify/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+# To use upower-notify, the maintainer suggests adding something like this to your configuration.nix:
+#
+# service.xserver.displayManager.sessionCommands = ''
+#   ${pkgs.dunst}/bin/dunst -shrink -geometry 0x0-50-50 -key space & # ...if don't already have a dbus notification display app
+#   (sleep 3; exec ${pkgs.yeshup}/bin/yeshup ${pkgs.go-upower-notify}/bin/upower-notify) &
+# '';
+buildGoPackage rec {
+  pname = "upower-notify";
+  version = "unstable-2016-03-10";
+
+  goPackagePath = "github.com/omeid/upower-notify";
+
+  src = fetchFromGitHub {
+    owner = "omeid";
+    repo = "upower-notify";
+    rev = "14c581e683a7e90ec9fa6d409413c16599a5323c";
+    sha256 = "16zlvn53p9m10ph8n9gps51fkkvl6sf4afdzni6azk05j0ng49jw";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "simple tool to give you Desktop Notifications about your battery";
+    mainProgram = "upower-notify";
+    homepage = "https://github.com/omeid/upower-notify";
+    maintainers = with maintainers; [ kamilchm ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/upower-notify/deps.nix b/nixpkgs/pkgs/tools/misc/upower-notify/deps.nix
new file mode 100644
index 000000000000..8a729857b819
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/upower-notify/deps.nix
@@ -0,0 +1,11 @@
+[
+  {
+    goPackagePath = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev = "32c6cc29c14570de4cf6d7e7737d68fb2d01ad15";
+      sha256 = "0v401f761l88yapiaw23pxvxviqrwl2r2vfd6lq02044i7x4i5r3";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/upterm/default.nix b/nixpkgs/pkgs/tools/misc/upterm/default.nix
new file mode 100644
index 000000000000..384e315bb872
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/upterm/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+, nixosTests
+}:
+
+buildGoModule rec {
+  pname = "upterm";
+  version = "0.13.5";
+
+  src = fetchFromGitHub {
+    owner = "owenthereal";
+    repo = "upterm";
+    rev = "v${version}";
+    hash = "sha256-uwWP/F8rCc1vJ7Y+84cazAnsJ30zoyxqkbT2E+FzYr8=";
+  };
+
+  vendorHash = "sha256-AYntKxSRO0FSKmOojIS1i9bdUA5Kp3WoI7ThUNw3RNw=";
+
+  subPackages = [ "cmd/upterm" "cmd/uptermd" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    # force go to build for build arch rather than host arch during cross-compiling
+    CGO_ENABLED=0 GOOS= GOARCH= go run cmd/gendoc/main.go
+    installManPage etc/man/man*/*
+    installShellCompletion --bash --name upterm.bash etc/completion/upterm.bash_completion.sh
+    installShellCompletion --zsh --name _upterm etc/completion/upterm.zsh_completion
+  '';
+
+  doCheck = true;
+
+  passthru.tests = { inherit (nixosTests) uptermd; };
+
+  __darwinAllowLocalNetworking = true;
+
+  meta = with lib; {
+    description = "Secure terminal-session sharing";
+    homepage = "https://upterm.dev";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ hax404 ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/urjtag/default.nix b/nixpkgs/pkgs/tools/misc/urjtag/default.nix
new file mode 100644
index 000000000000..33a738f1643c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/urjtag/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchurl
+, autoreconfHook
+, gettext
+, libftdi1
+, libtool
+, libusb-compat-0_1
+, pkg-config
+, readline
+, which
+, bsdlSupport ? true
+, jedecSupport ? true
+, staplSupport ? true
+, svfSupport ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "urjtag";
+  version = "2021.03";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/${pname}/${pname}/${version}/${pname}-${version}.tar.xz";
+    hash = "sha256-sKLqokVROvCW3E13AQmDIzXGlMbBKqXpL++uhoVBbxw=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    which
+    gettext
+  ];
+  buildInputs = [
+    libftdi1
+    libtool
+    libusb-compat-0_1
+    readline
+  ];
+
+  configureFlags = [
+    (lib.enableFeature bsdlSupport  "bsdl")
+    (lib.enableFeature jedecSupport "jedec-exp")
+    (lib.enableFeature staplSupport "stapl")
+    (lib.enableFeature svfSupport   "svf")
+  ];
+
+  meta = with lib; {
+    homepage = "http://urjtag.org/";
+    description = "Universal JTAG library, server and tools";
+    license = with licenses; [ gpl2Plus lgpl21Plus ];
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/url-parser/default.nix b/nixpkgs/pkgs/tools/misc/url-parser/default.nix
new file mode 100644
index 000000000000..39ae506c2524
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/url-parser/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "url-parser";
+  version = "2.0.3";
+
+  src = fetchFromGitHub {
+    owner = "thegeeklab";
+    repo = "url-parser";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-pu6U6YIA7+K1ZSt97Nn0IDaQFVIwMq3m7d8JidK1vJk=";
+  };
+
+  vendorHash = "sha256-QqhjS0uL2Fm2OeFkuAB8VeS7HpoS9dOhgHk/J4j9++M=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X" "main.BuildVersion=${version}"
+    "-X" "main.BuildDate=1970-01-01"
+  ];
+
+  meta = with lib; {
+    description = "Simple command-line URL parser";
+    homepage = "https://github.com/thegeeklab/url-parser";
+    changelog = "https://github.com/thegeeklab/url-parser/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ doronbehar ];
+    mainProgram = "url-parser";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/urlencode/default.nix b/nixpkgs/pkgs/tools/misc/urlencode/default.nix
new file mode 100644
index 000000000000..6b8097a6b527
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/urlencode/default.nix
@@ -0,0 +1,25 @@
+{ fetchFromGitHub
+, lib
+, rustPlatform
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "urlencode";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "dead10ck";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-LvLUbtMPVbYZMUb9vWhTscYfZPtEM5GrZme3azvVlPE=";
+  };
+
+  cargoSha256 = "sha256-UPw+/wVOEM+kciOr70P+gdMCxtCKQ/SXsNAWA44v4v8=";
+
+  meta = with lib; {
+    description = "A CLI utility for URL-encoding or -decoding strings";
+    homepage = "https://github.com/dead10ck/urlencode";
+    license = licenses.mit;
+    maintainers = with maintainers; [ l0b0 ];
+    mainProgram = "urlencode";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/urn-timer/default.nix b/nixpkgs/pkgs/tools/misc/urn-timer/default.nix
new file mode 100644
index 000000000000..df45524a8a06
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/urn-timer/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv
+, fetchFromGitHub
+, unstableGitUpdater
+, xxd
+, pkg-config
+, imagemagick
+, wrapGAppsHook
+, gtk3
+, jansson
+, nixosTests
+}:
+
+stdenv.mkDerivation {
+  pname = "urn-timer";
+  version = "unstable-2024-03-05";
+
+  src = fetchFromGitHub {
+    owner = "paoloose";
+    repo = "urn";
+    rev = "10082428749fabb69db1556f19940d8700ce48a2";
+    hash = "sha256-sQjHQ/i1d4v4ZnM0YAay+MdIj5l/FfIYj+NdH48OqfU=";
+  };
+
+  nativeBuildInputs = [
+    xxd
+    pkg-config
+    imagemagick
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    jansson
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://github.com/paoloose/urn.git";
+  };
+
+  passthru.tests.nixosTest = nixosTests.urn-timer;
+
+  meta = with lib; {
+    homepage = "https://github.com/paoloose/urn";
+    description = "Split tracker / timer for speedrunning with GTK+ frontend";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz ];
+    mainProgram = "urn-gtk";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/usbimager/default.nix b/nixpkgs/pkgs/tools/misc/usbimager/default.nix
new file mode 100644
index 000000000000..57d9855231c7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/usbimager/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchFromGitLab, pkg-config, wrapGAppsHook
+, withLibui ? true, gtk3
+, withUdisks ? stdenv.isLinux, udisks, glib
+, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "usbimager";
+  version = "1.0.10";
+
+  src = fetchFromGitLab {
+    owner = "bztsrc";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-HTFopc2xrhp0XYubQtOwMKWTQ+3JSKAyL4mMyQ82kAs=";
+  };
+
+  sourceRoot = "${src.name}/src";
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+  buildInputs = lib.optionals withUdisks [ udisks glib ]
+    ++ lib.optional (!withLibui) libX11
+    ++ lib.optional withLibui gtk3;
+    # libui is bundled with the source of usbimager as a compiled static library
+
+  postPatch = ''
+    sed -i \
+      -e 's|install -m 2755 -g disk|install |g' \
+      -e 's|-I/usr/include/gio-unix-2.0|-I${glib.dev}/include/gio-unix-2.0|g' \
+      -e 's|install -m 2755 -g $(GRP)|install |g' Makefile
+  '';
+
+  postInstall = ''
+    substituteInPlace $out/share/applications/usbimager.desktop \
+      --replace-fail "Exec=/usr/bin/usbimager" "Exec=usbimager"
+  '';
+
+  dontConfigure = true;
+
+  makeFlags =  [ "PREFIX=$(out)" ]
+    ++ lib.optional withLibui "USE_LIBUI=yes"
+    ++ lib.optional withUdisks "USE_UDISKS2=yes";
+
+  meta = with lib; {
+    description = "A very minimal GUI app that can write compressed disk images to USB drives";
+    homepage = "https://gitlab.com/bztsrc/usbimager";
+    license = licenses.mit;
+    maintainers = with maintainers; [ vdot0x23 ];
+    # windows and darwin could work, but untested
+    # feel free add them if you have a machine to test
+    platforms = with platforms; linux;
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isLinux && stdenv.isAarch64;
+    mainProgram = "usbimager";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/usbmuxd/default.nix b/nixpkgs/pkgs/tools/misc/usbmuxd/default.nix
new file mode 100644
index 000000000000..2cec5d7d77af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/usbmuxd/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, libimobiledevice
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "usbmuxd";
+  version = "1.1.1+date=2023-05-05";
+
+  src = fetchFromGitHub {
+    owner = "libimobiledevice";
+    repo = pname;
+    rev = "01c94c77f59404924f1c46d99c4e5e0c7817281b";
+    hash = "sha256-WqbobkzlJ9g5fb9S2QPi3qdpCLx3pxtNlT7qDI63Zp4=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  propagatedBuildInputs = [
+    libimobiledevice
+    libusb1
+  ];
+
+  preAutoreconf = ''
+    export RELEASE_VERSION=${version}
+  '';
+
+  configureFlags = [
+    "--with-udevrulesdir=${placeholder "out"}/lib/udev/rules.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/libimobiledevice/usbmuxd";
+    description = "A socket daemon to multiplex connections from and to iOS devices";
+    longDescription = ''
+      usbmuxd stands for "USB multiplexing daemon". This daemon is in charge of
+      multiplexing connections over USB to an iOS device. To users, it means
+      you can sync your music, contacts, photos, etc. over USB. To developers, it
+      means you can connect to any listening localhost socket on the device. usbmuxd
+      is not used for tethering data transfer which uses a dedicated USB interface as
+      a virtual network device. Multiple connections to different TCP ports can happen
+      in parallel. The higher-level layers are handled by libimobiledevice.
+    '';
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ ];
+    mainProgram = "usbmuxd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/usbmuxd2/default.nix b/nixpkgs/pkgs/tools/misc/usbmuxd2/default.nix
new file mode 100644
index 000000000000..2eee1bb71324
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/usbmuxd2/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, clangStdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, libimobiledevice
+, libusb1
+, avahi
+, clang
+, git
+}: let
+
+  libgeneral = clangStdenv.mkDerivation rec {
+    pname = "libgeneral";
+    version = "74";
+    src = fetchFromGitHub {
+      owner = "tihmstar";
+      repo = pname;
+      rev = "refs/tags/${version}";
+      hash = "sha256-6aowcIYssc1xqH6kTi/cpH2F7rgc8+lGC8HgZWYH2w0=";
+      # Leave DotGit so that autoconfigure can read version from git tags
+      leaveDotGit = true;
+    };
+    nativeBuildInputs = [
+      autoreconfHook
+      git
+      pkg-config
+    ];
+    meta = with lib; {
+      description = "Helper library used by usbmuxd2";
+      homepage = "https://github.com/tihmstar/libgeneral";
+      license = licenses.lgpl21;
+      platforms = platforms.all;
+    };
+  };
+
+in
+clangStdenv.mkDerivation rec {
+  pname = "usbmuxd2";
+  version = "unstable-2023-12-12";
+
+  src = fetchFromGitHub {
+    owner = "tihmstar";
+    repo = pname;
+    rev = "2ce399ddbacb110bd5a83a6b8232d42c9a9b6e84";
+    hash = "sha256-UVLLE73XuWTgGlpTMxUDykFmiBDqz6NCRO2rpRAYfow=";
+    # Leave DotGit so that autoconfigure can read version from git tags
+    leaveDotGit = true;
+  };
+
+  postPatch = ''
+    # Checking for libgeneral version still fails
+    sed -i 's/libgeneral >= $LIBGENERAL_MINVERS_STR/libgeneral/' configure.ac
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    clang
+    git
+    pkg-config
+  ];
+
+  propagatedBuildInputs = [
+    avahi
+    libgeneral
+    libimobiledevice
+    libusb1
+  ];
+
+  configureFlags = [
+    "--with-udevrulesdir=${placeholder "out"}/lib/udev/rules.d"
+    "--with-systemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
+  ];
+
+  makeFlags = [
+    "sbindir=${placeholder "out"}/bin"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/tihmstar/usbmuxd2";
+    description = "A socket daemon to multiplex connections from and to iOS devices";
+    license = licenses.lgpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ onny ];
+    mainProgram = "usbmuxd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/usbview/default.nix b/nixpkgs/pkgs/tools/misc/usbview/default.nix
new file mode 100644
index 000000000000..17402fe76120
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/usbview/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, pkg-config
+, imagemagick
+, gtk3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "usbview";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner = "gregkh";
+    repo = "usbview";
+    rev = "v${version}";
+    hash = "sha256-h+sB83BYsrB2VxwtatPWNiM0WdTCMY289nh+/0o8GOw=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    imagemagick
+  ];
+
+  buildInputs = [
+    gtk3
+  ];
+
+  meta = with lib; {
+    description = "USB viewer for Linux";
+    license = licenses.gpl2Only;
+    homepage = "http://www.kroah.com/linux-usb/";
+    maintainers = with maintainers; [ shamilton h7x4 ];
+    platforms = platforms.linux;
+    mainProgram = "usbview";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uucp/default.nix b/nixpkgs/pkgs/tools/misc/uucp/default.nix
new file mode 100644
index 000000000000..28f7a6572c18
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uucp/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "uucp";
+  version = "1.07";
+
+  src = fetchurl {
+    url = "mirror://gnu/uucp/uucp-${version}.tar.gz";
+    sha256 = "0b5nhl9vvif1w3wdipjsk8ckw49jj1w85xw1mmqi3zbcpazia306";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  prePatch = ''
+    # do not set sticky bit in nix store
+    substituteInPlace Makefile.in \
+      --replace 4555 0555
+    sed -i '/chown $(OWNER)/d' Makefile.in
+  '';
+
+  makeFlags = [ "AR:=$(AR)" ];
+
+  meta = {
+    description = "Unix-unix cp over serial line, also includes cu program";
+
+    longDescription =
+      '' Taylor UUCP is a free implementation of UUCP and is the standard
+         UUCP used on the GNU system.  If you don't know what UUCP is chances
+         are, nowadays, that you won't need it.  If you do need it, you've
+         just found one of the finest UUCP implementations available.
+      '';
+
+    homepage = "https://www.gnu.org/software/uucp/uucp.html";
+
+    license = lib.licenses.gpl2Plus;
+
+    platforms = lib.platforms.all;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uudeview/default.nix b/nixpkgs/pkgs/tools/misc/uudeview/default.nix
new file mode 100644
index 000000000000..6875e6f12343
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uudeview/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, tcl
+, tk
+}:
+
+stdenv.mkDerivation rec {
+  pname = "uudeview";
+  version = "0.5.20";
+
+  src = fetchurl {
+    url = "http://www.fpx.de/fp/Software/UUDeview/download/${pname}-${version}.tar.gz";
+    sha256 = "0dg4v888fxhmf51vxq1z1gd57fslsidn15jf42pj4817vw6m36p4";
+  };
+
+  buildInputs = [ tcl tk ];
+
+  configureFlags = [ "--enable-tk=${tk.dev}" "--enable-tcl=${tcl}" ];
+
+  patches = [
+    # https://wiki.tcl.tk/3577
+    ./matherr.patch
+    # format hardening
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/OpenMandrivaAssociation/uudeview/master/uudeview-0.5.20-fix-str-fmt.patch";
+      sha256 = "1biipck60mhpd0j6jwizaisvqa8alisw1dpfqm6zf7ic5b93hmfw";
+      extraPrefix = "";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace tcl/xdeview --replace "exec uuwish" "exec $out/bin/uuwish"
+  '';
+
+  meta = {
+    description = "The Nice and Friendly Decoder";
+    homepage = "http://www.fpx.de/fp/Software/UUDeview/";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ woffs ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uudeview/matherr.patch b/nixpkgs/pkgs/tools/misc/uudeview/matherr.patch
new file mode 100644
index 000000000000..a93db7d7858d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uudeview/matherr.patch
@@ -0,0 +1,19 @@
+diff --git a/tcl/uutcl.c b/tcl/uutcl.c
+index f101f2ce52b..71c24688dc4 100644
+--- a/tcl/uutcl.c
++++ b/tcl/uutcl.c
+@@ -48,14 +48,6 @@
+ #include <tcl.h>
+ #endif
+
+-/*
+- * The following variable is a special hack that is needed in order for
+- * Sun shared libraries to be used for Tcl.
+- */
+-
+-extern int matherr();
+-int *tclDummyMathPtr = (int *) matherr;
+-
+ #include <uudeview.h>
+ #include <uuint.h>
+ #include <fptools.h>
diff --git a/nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix b/nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix
new file mode 100644
index 000000000000..0e88aa91c863
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uutils-coreutils/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, cargo
+, sphinx
+, Security
+, libiconv
+, prefix ? "uutils-"
+, buildMulticallBinary ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "uutils-coreutils";
+  version = "0.0.25";
+
+  src = fetchFromGitHub {
+    owner = "uutils";
+    repo = "coreutils";
+    rev = version;
+    hash = "sha256-25jmlGxMWzAaJEmMHruA6H+nqx2QHnYX9c9SKqrQRE4=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-lQoOkiSga2aS8GNgLcHdid1/1u3johYEcGi9oOVsdJs=";
+  };
+
+  nativeBuildInputs = [ rustPlatform.cargoSetupHook sphinx ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security libiconv ];
+
+  makeFlags = [
+    "CARGO=${cargo}/bin/cargo"
+    "PREFIX=${placeholder "out"}"
+    "PROFILE=release"
+    "INSTALLDIR_MAN=${placeholder "out"}/share/man/man1"
+  ] ++ lib.optionals (prefix != null) [ "PROG_PREFIX=${prefix}" ]
+  ++ lib.optionals buildMulticallBinary [ "MULTICALL=y" ];
+
+  # too many impure/platform-dependent tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Cross-platform Rust rewrite of the GNU coreutils";
+    longDescription = ''
+      uutils is an attempt at writing universal (as in cross-platform)
+      CLI utils in Rust. This repo is to aggregate the GNU coreutils rewrites.
+    '';
+    homepage = "https://github.com/uutils/coreutils";
+    maintainers = with maintainers; [ siraben ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uwufetch/default.nix b/nixpkgs/pkgs/tools/misc/uwufetch/default.nix
new file mode 100644
index 000000000000..d0ae239d9ec2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uwufetch/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, viu }:
+
+stdenv.mkDerivation rec {
+  pname = "uwufetch";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "TheDarkBug";
+    repo = pname;
+    rev = version;
+    hash = "sha256-cA8sajh+puswyKikr0Jp9ei+EpVkH+vhEp+pTerkUqA=";
+  };
+
+  postPatch = ''
+    substituteInPlace uwufetch.c \
+      --replace "/usr/lib/uwufetch" "$out/lib/uwufetch" \
+      --replace "/usr/local/lib/uwufetch" "$out/lib/uwufetch" \
+      --replace "/etc/uwufetch/config" "$out/etc/uwufetch/config"
+    # fix command_path for package manager (nix-store)
+    substituteInPlace fetch.c \
+      --replace "/usr/bin" "/run/current-system/sw/bin"
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace Makefile \
+      --replace "local/bin" "bin" \
+      --replace "local/lib" "lib" \
+      --replace "local/include" "include" \
+      --replace "local/share" "share"
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  makeFlags = [
+    "UWUFETCH_VERSION=${version}"
+  ];
+
+  installFlags = [
+    "DESTDIR=${placeholder "out"}"
+    "ETC_DIR=${placeholder "out"}/etc"
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/uwufetch \
+      --prefix PATH ":" ${lib.makeBinPath [ viu ]}
+  '';
+
+  meta = with lib; {
+    description = "A meme system info tool for Linux";
+    homepage = "https://github.com/TheDarkBug/uwufetch";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ bbjubjub ];
+    mainProgram = "uwufetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/uwuify/default.nix b/nixpkgs/pkgs/tools/misc/uwuify/default.nix
new file mode 100644
index 000000000000..abcf5e9b23da
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/uwuify/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "uwuify";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "Daniel-Liu-c0deb0t";
+    repo = "uwu";
+    rev = "v${version}";
+    sha256 = "sha256-MzXObbxccwEG7egmQMCdhUukGqZS+NgbYwZjTaqME7I=";
+  };
+
+  cargoSha256 = "sha256-1BoB7K/dWy3AbogvHIDLrdPD7K54EISvn4RVU5RLTi4=";
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  meta = with lib; {
+    description = "Fast text uwuifier";
+    homepage = "https://github.com/Daniel-Liu-c0deb0t/uwu";
+    license = licenses.mit;
+    platforms = lib.platforms.x86; # uses SSE instructions
+    maintainers = with maintainers; [ siraben ];
+    mainProgram = "uwuify";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/valeronoi/default.nix b/nixpkgs/pkgs/tools/misc/valeronoi/default.nix
new file mode 100644
index 000000000000..b27fe3e499a3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/valeronoi/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, boost
+, cgal
+, cmake
+, gpp
+, mpfr
+, qtbase
+, qtimageformats
+, qtsvg
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "valeronoi";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "ccoors";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-7z967y1hWpitZfXNlHHM8qEBdyuBQSFlJElS4ldsAaE=";
+  };
+
+  buildInputs = [
+    boost
+    cgal
+    gpp
+    mpfr
+    qtbase
+    qtimageformats
+    qtsvg
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    wrapQtAppsHook
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/ccoors/Valeronoi/";
+    description = "A WiFi mapping companion app for Valetudo";
+    license = licenses.gpl3Only;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ nova-madeline maeve ];
+    mainProgram = "valeronoi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vcs_query/default.nix b/nixpkgs/pkgs/tools/misc/vcs_query/default.nix
new file mode 100644
index 000000000000..ccfdc62b1296
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vcs_query/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, python3, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "vcs_query";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "mageta";
+    repo = "vcs_query";
+    rev = "v${version}";
+    sha256 = "05va0na9yxkpqhm9v0x3k58148qcf2bbcv5bnmj7vn9r7fwyjrlx";
+  };
+
+  nativeBuildInputs = [ python3 python3.pkgs.wrapPython ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    install -Dm0755 vcs_query.py $out/bin/vcs_query
+    patchShebangs $out/bin
+    buildPythonPath ${python3.pkgs.vobject};
+    patchPythonScript $out/bin/vcs_query
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mageta/vcs_query";
+    description = "eMail query-command to use vCards in mutt and Vim";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ma27 ];
+    mainProgram = "vcs_query";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vector/Cargo.lock b/nixpkgs/pkgs/tools/misc/vector/Cargo.lock
new file mode 100644
index 000000000000..d24feb253f2e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vector/Cargo.lock
@@ -0,0 +1,11318 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "Inflector"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
+dependencies = [
+ "lazy_static",
+ "regex",
+]
+
+[[package]]
+name = "RustyXML"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b5ace29ee3216de37c0546865ad08edef58b0f9e76838ed8959a84a990e58c5"
+
+[[package]]
+name = "addr2line"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+dependencies = [
+ "gimli",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "aead"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
+dependencies = [
+ "crypto-common",
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "ahash"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
+dependencies = [
+ "getrandom 0.2.12",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if",
+ "getrandom 0.2.12",
+ "once_cell",
+ "version_check",
+ "zerocopy",
+]
+
+[[package]]
+name = "aho-corasick"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "amq-protocol"
+version = "7.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d40d8b2465c7959dd40cee32ba6ac334b5de57e9fca0cc756759894a4152a5d"
+dependencies = [
+ "amq-protocol-tcp",
+ "amq-protocol-types",
+ "amq-protocol-uri",
+ "cookie-factory",
+ "nom",
+ "serde",
+]
+
+[[package]]
+name = "amq-protocol-tcp"
+version = "7.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cb2100adae7da61953a2c3a01935d86caae13329fadce3333f524d6d6ce12e2"
+dependencies = [
+ "amq-protocol-uri",
+ "tcp-stream",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "amq-protocol-types"
+version = "7.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "156ff13c8a3ced600b4e54ed826a2ae6242b6069d00dd98466827cef07d3daff"
+dependencies = [
+ "cookie-factory",
+ "nom",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "amq-protocol-uri"
+version = "7.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "751bbd7d440576066233e740576f1b31fdc6ab86cfabfbd48c548de77eca73e4"
+dependencies = [
+ "amq-protocol-types",
+ "percent-encoding",
+ "url",
+]
+
+[[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
+name = "android_system_properties"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "anes"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299"
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "anstream"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd2405b3ac1faab2990b74d728624cd9fd115651fcecc7c2d8daf01376275ba"
+dependencies = [
+ "anstyle",
+ "anstyle-parse",
+ "anstyle-query",
+ "anstyle-wincon",
+ "colorchoice",
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+
+[[package]]
+name = "anstyle-parse"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+dependencies = [
+ "utf8parse",
+]
+
+[[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+dependencies = [
+ "anstyle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247"
+
+[[package]]
+name = "apache-avro"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ceb7c683b2f8f40970b70e39ff8be514c95b96fcb9c4af87e1ed2cb2e10801a0"
+dependencies = [
+ "digest",
+ "lazy_static",
+ "libflate",
+ "log",
+ "num-bigint",
+ "quad-rand",
+ "rand 0.8.5",
+ "regex-lite",
+ "serde",
+ "serde_json",
+ "strum 0.25.0",
+ "strum_macros 0.25.3",
+ "thiserror",
+ "typed-builder 0.16.2",
+ "uuid",
+]
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "arbitrary"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110"
+dependencies = [
+ "derive_arbitrary",
+]
+
+[[package]]
+name = "arc-swap"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b3d0060af21e8d11a926981cc00c6c1541aa91dd64b9f881985c3da1094425f"
+
+[[package]]
+name = "arr_macro"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c49336e062fa2ae8aca17a2f99c34d9c1a5d30827e8aff1cb4c294f253afe992"
+dependencies = [
+ "arr_macro_impl",
+ "proc-macro-hack",
+ "proc-macro-nested",
+]
+
+[[package]]
+name = "arr_macro_impl"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c6368f9ae5c6ec403ca910327ae0c9437b0a85255b6950c90d497e6177f6e5e"
+dependencies = [
+ "proc-macro-hack",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "ascii"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e"
+
+[[package]]
+name = "ascii-canvas"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6"
+dependencies = [
+ "term",
+]
+
+[[package]]
+name = "assert-json-diff"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "assert_cmd"
+version = "2.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed72493ac66d5804837f480ab3766c72bdfab91a65e565fc54fa9e42db0073a8"
+dependencies = [
+ "anstyle",
+ "bstr 1.9.1",
+ "doc-comment",
+ "predicates",
+ "predicates-core",
+ "predicates-tree",
+ "wait-timeout",
+]
+
+[[package]]
+name = "async-channel"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+dependencies = [
+ "concurrent-queue",
+ "event-listener 2.5.3",
+ "futures-core",
+]
+
+[[package]]
+name = "async-compression"
+version = "0.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a116f46a969224200a0a97f29cfd4c50e7534e4b4826bd23ea2c3c533039c82c"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "zstd 0.13.0",
+ "zstd-safe 7.0.0",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b0c4a4f319e45986f347ee47fef8bf5e81c9abc3f6f58dc2391439f30df65f0"
+dependencies = [
+ "async-lock 2.8.0",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 2.0.1",
+ "futures-lite",
+ "slab",
+]
+
+[[package]]
+name = "async-fs"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06"
+dependencies = [
+ "async-lock 2.8.0",
+ "autocfg",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-global-executor"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "blocking",
+ "futures-lite",
+ "once_cell",
+]
+
+[[package]]
+name = "async-global-executor-trait"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33dd14c5a15affd2abcff50d84efd4009ada28a860f01c14f9d654f3e81b3f75"
+dependencies = [
+ "async-global-executor",
+ "async-trait",
+ "executor-trait",
+]
+
+[[package]]
+name = "async-graphql"
+version = "7.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "261fa27d5bff5afdf7beff291b3bc73f99d1529804c70e51b0fbc51e70b1c6a9"
+dependencies = [
+ "async-graphql-derive",
+ "async-graphql-parser",
+ "async-graphql-value",
+ "async-stream",
+ "async-trait",
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "chrono",
+ "fnv",
+ "futures-util",
+ "http 1.0.0",
+ "indexmap 2.2.5",
+ "mime",
+ "multer",
+ "num-traits",
+ "once_cell",
+ "pin-project-lite",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "static_assertions_next",
+ "thiserror",
+]
+
+[[package]]
+name = "async-graphql-derive"
+version = "7.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3188809947798ea6db736715a60cf645ba3b87ea031c710130e1476b48e45967"
+dependencies = [
+ "Inflector",
+ "async-graphql-parser",
+ "darling 0.20.8",
+ "proc-macro-crate 1.3.1",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "strum 0.26.1",
+ "syn 2.0.53",
+ "thiserror",
+]
+
+[[package]]
+name = "async-graphql-parser"
+version = "7.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4e65a0b83027f35b2a5d9728a098bc66ac394caa8191d2c65ed9eb2985cf3d8"
+dependencies = [
+ "async-graphql-value",
+ "pest",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "async-graphql-value"
+version = "7.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68e40849c29a39012d38bff87bfed431f1ed6c53fbec493294c1045d61a7ae75"
+dependencies = [
+ "bytes 1.5.0",
+ "indexmap 2.2.5",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "async-graphql-warp"
+version = "7.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e901ea60bac5613a1c824da04c8e72906cf79efde5c56f657e3a4ac89624b0a5"
+dependencies = [
+ "async-graphql",
+ "futures-util",
+ "http 0.2.9",
+ "serde_json",
+ "warp",
+]
+
+[[package]]
+name = "async-io"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+dependencies = [
+ "async-lock 2.8.0",
+ "autocfg",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-lite",
+ "log",
+ "parking",
+ "polling 2.8.0",
+ "rustix 0.37.27",
+ "slab",
+ "socket2 0.4.10",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-io"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10da8f3146014722c89e7859e1d7bb97873125d7346d10ca642ffab794355828"
+dependencies = [
+ "async-lock 2.8.0",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-io",
+ "futures-lite",
+ "parking",
+ "polling 3.3.0",
+ "rustix 0.38.31",
+ "slab",
+ "tracing 0.1.40",
+ "waker-fn",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener 2.5.3",
+]
+
+[[package]]
+name = "async-lock"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45e900cdcd39bb94a14487d3f7ef92ca222162e6c7c3fe7cb3550ea75fb486ed"
+dependencies = [
+ "event-listener 3.0.1",
+ "event-listener-strategy",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-nats"
+version = "0.33.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbc1f1a75fd07f0f517322d103211f12d757658e91676def9a2e688774656c60"
+dependencies = [
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "futures 0.3.30",
+ "http 0.2.9",
+ "memchr",
+ "nkeys 0.3.2",
+ "nuid",
+ "once_cell",
+ "rand 0.8.5",
+ "regex",
+ "ring",
+ "rustls 0.21.8",
+ "rustls-native-certs 0.6.3",
+ "rustls-pemfile 1.0.3",
+ "rustls-webpki 0.101.7",
+ "serde",
+ "serde_json",
+ "serde_nanos",
+ "serde_repr",
+ "thiserror",
+ "time",
+ "tokio",
+ "tokio-retry",
+ "tokio-rustls 0.24.1",
+ "tracing 0.1.40",
+ "url",
+]
+
+[[package]]
+name = "async-net"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0434b1ed18ce1cf5769b8ac540e33f01fa9471058b5e89da9e06f3c882a8c12f"
+dependencies = [
+ "async-io 1.13.0",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "async-process"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
+dependencies = [
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "async-signal",
+ "blocking",
+ "cfg-if",
+ "event-listener 3.0.1",
+ "futures-lite",
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-reactor-trait"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a6012d170ad00de56c9ee354aef2e358359deb1ec504254e0e5a3774771de0e"
+dependencies = [
+ "async-io 1.13.0",
+ "async-trait",
+ "futures-core",
+ "reactor-trait",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30c5ef0ede93efbf733c1a727f3b6b5a1060bbedd5600183e66f6e4be4af0ec5"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "async-signal"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5"
+dependencies = [
+ "async-io 2.1.0",
+ "async-lock 2.8.0",
+ "atomic-waker",
+ "cfg-if",
+ "futures-core",
+ "futures-io",
+ "rustix 0.38.31",
+ "signal-hook-registry",
+ "slab",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-stream"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
+dependencies = [
+ "async-stream-impl",
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "async-stream-impl"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "async-task"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1"
+
+[[package]]
+name = "async-trait"
+version = "0.1.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "461abc97219de0eaaf81fe3ef974a540158f3d079c2ab200f891f1a2ef201e85"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "atomic"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba"
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "aws-config"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80c950a809d39bc9480207cb1cfc879ace88ea7e3a4392a8e9999e45d6e5692e"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-sdk-sts",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "fastrand 2.0.1",
+ "http 0.2.9",
+ "hyper 0.14.28",
+ "time",
+ "tokio",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-credential-types"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa8587ae17c8e967e4b05a62d495be2fb7701bec52a97f7acfe8a29f938384c8"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-http"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "361c4310fdce94328cc2d1ca0c8a48c13f43009c61d3367585685a50ca8c66b6"
+dependencies = [
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "pin-project-lite",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-runtime"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ed7ef604a15fd0d4d9e43701295161ea6b504b63c44990ead352afea2bc15e9"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "fastrand 2.0.1",
+ "http 0.2.9",
+ "percent-encoding",
+ "tracing 0.1.40",
+ "uuid",
+]
+
+[[package]]
+name = "aws-sdk-cloudwatch"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "043546afc3d129d3d487c2fd121aabe4208300293f541a5c8adffdc919a603b0"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-query",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-cloudwatchlogs"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67a5bcf460e098cf49292d216fe520b28a5d9c8dae10db0ff9a97bb2c95dd386"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "fastrand 2.0.1",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-elasticsearch"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3090fdd5bf46d4097af7f560cb7305e1ef6f3f743bb7a4531246113e823309b0"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-firehose"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8789c5a2d55cb3ed24d8f0635498c53e0f6413c0f9839e9cb54e130e96a81b53"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-kinesis"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbcd6e94c56f1b4881b405c0953a82d50e110311100cf2355e50fdab79d73f44"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-s3"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9dcafc2fe52cc30b2d56685e2fa6a879ba50d79704594852112337a472ddbd24"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-checksums",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "once_cell",
+ "percent-encoding",
+ "regex",
+ "tracing 0.1.40",
+ "url",
+]
+
+[[package]]
+name = "aws-sdk-sns"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48bff824fe28888cc4ce6acb52ba8e5cd9f4f38fc5bd1bb40d916e3000e17b57"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-query",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-sqs"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5736d9255f65f36df4f0812665c33fa36042b96192e6bba843ef5fcc75187cd8"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sdk-sts"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "798c8d82203af9e15a8b406574e0b36da91dd6db533028b74676489a1bc8bc7d"
+dependencies = [
+ "aws-credential-types",
+ "aws-http",
+ "aws-runtime",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-json",
+ "aws-smithy-query",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-smithy-xml",
+ "aws-types",
+ "http 0.2.9",
+ "regex",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-sigv4"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11d6f29688a4be9895c0ba8bef861ad0c0dac5c15e9618b9b7a6c233990fc263"
+dependencies = [
+ "aws-credential-types",
+ "aws-smithy-eventstream",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "form_urlencoded",
+ "hex",
+ "hmac",
+ "http 0.2.9",
+ "http 1.0.0",
+ "once_cell",
+ "percent-encoding",
+ "sha2",
+ "time",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-smithy-async"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d26ea8fa03025b2face2b3038a63525a10891e3d8829901d502e5384a0d8cd46"
+dependencies = [
+ "futures-util",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "aws-smithy-checksums"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5a373ec01aede3dd066ec018c1bc4e8f5dd11b2c11c59c8eef1a5c68101f397"
+dependencies = [
+ "aws-smithy-http",
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "crc32c",
+ "crc32fast",
+ "hex",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "md-5",
+ "pin-project-lite",
+ "sha1",
+ "sha2",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-smithy-eventstream"
+version = "0.60.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6363078f927f612b970edf9d1903ef5cef9a64d1e8423525ebb1f0a1633c858"
+dependencies = [
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "crc32fast",
+]
+
+[[package]]
+name = "aws-smithy-http"
+version = "0.60.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f10fa66956f01540051b0aa7ad54574640f748f9839e843442d99b970d3aff9"
+dependencies = [
+ "aws-smithy-eventstream",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "bytes-utils",
+ "futures-core",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "pin-utils",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-smithy-json"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a46dd338dc9576d6a6a5b5a19bd678dcad018ececee11cf28ecd7588bd1a55c"
+dependencies = [
+ "aws-smithy-types",
+]
+
+[[package]]
+name = "aws-smithy-query"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "feb5b8c7a86d4b6399169670723b7e6f21a39fc833a30f5c5a2f997608178129"
+dependencies = [
+ "aws-smithy-types",
+ "urlencoding",
+]
+
+[[package]]
+name = "aws-smithy-runtime"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec81002d883e5a7fd2bb063d6fb51c4999eb55d404f4fff3dd878bf4733b9f01"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "fastrand 2.0.1",
+ "h2 0.3.26",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "hyper 0.14.28",
+ "hyper-rustls 0.24.2",
+ "once_cell",
+ "pin-project-lite",
+ "pin-utils",
+ "rustls 0.21.8",
+ "tokio",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "aws-smithy-runtime-api"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9acb931e0adaf5132de878f1398d83f8677f90ba70f01f65ff87f6d7244be1c5"
+dependencies = [
+ "aws-smithy-async",
+ "aws-smithy-types",
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "http 1.0.0",
+ "pin-project-lite",
+ "tokio",
+ "tracing 0.1.40",
+ "zeroize",
+]
+
+[[package]]
+name = "aws-smithy-types"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abe14dceea1e70101d38fbf2a99e6a34159477c0fb95e68e05c66bd7ae4c3729"
+dependencies = [
+ "base64-simd",
+ "bytes 1.5.0",
+ "bytes-utils",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "itoa",
+ "num-integer",
+ "pin-project-lite",
+ "pin-utils",
+ "ryu",
+ "serde",
+ "time",
+]
+
+[[package]]
+name = "aws-smithy-xml"
+version = "0.60.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ec40d74a67fd395bc3f6b4ccbdf1543672622d905ef3f979689aea5b730cb95"
+dependencies = [
+ "xmlparser",
+]
+
+[[package]]
+name = "aws-types"
+version = "1.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dbf2f3da841a8930f159163175cf6a3d16ddde517c1b0fba7aa776822800f40"
+dependencies = [
+ "aws-credential-types",
+ "aws-smithy-async",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "http 0.2.9",
+ "rustc_version 0.4.0",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "axum"
+version = "0.6.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf"
+dependencies = [
+ "async-trait",
+ "axum-core",
+ "bitflags 1.3.2",
+ "bytes 1.5.0",
+ "futures-util",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "hyper 0.14.28",
+ "itoa",
+ "matchit",
+ "memchr",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustversion",
+ "serde",
+ "sync_wrapper",
+ "tokio",
+ "tower",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "axum-core"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
+dependencies = [
+ "async-trait",
+ "bytes 1.5.0",
+ "futures-util",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "mime",
+ "rustversion",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "azure_core"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ccd63c07d1fbfb3d4543d7ea800941bf5a30db1911b9b9e4db3b2c4210a434f"
+dependencies = [
+ "async-trait",
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "dyn-clone",
+ "futures 0.3.30",
+ "getrandom 0.2.12",
+ "http-types",
+ "log",
+ "paste",
+ "pin-project",
+ "quick-xml",
+ "rand 0.8.5",
+ "reqwest",
+ "rustc_version 0.4.0",
+ "serde",
+ "serde_json",
+ "time",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "azure_identity"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bd7ea32ca7eb66ff4757f83baac702ff11d469e5de365b6bc6f79f9c25d3436"
+dependencies = [
+ "async-lock 3.0.0",
+ "async-trait",
+ "azure_core",
+ "futures 0.3.30",
+ "log",
+ "oauth2",
+ "pin-project",
+ "serde",
+ "serde_json",
+ "time",
+ "tz-rs",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "azure_storage"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83ca0a07f89fd72a006da4713e93af3d6c44a693e61a1c3c2e7985de39c182e8"
+dependencies = [
+ "RustyXML",
+ "async-trait",
+ "azure_core",
+ "bytes 1.5.0",
+ "futures 0.3.30",
+ "hmac",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sha2",
+ "time",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "azure_storage_blobs"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8096c04d370118323c42b2752aa1883e4880a56ef65239f317b359f263b6e194"
+dependencies = [
+ "RustyXML",
+ "azure_core",
+ "azure_storage",
+ "bytes 1.5.0",
+ "futures 0.3.30",
+ "log",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "time",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "backoff"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
+dependencies = [
+ "getrandom 0.2.12",
+ "instant",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "backon"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c1a6197b2120bb2185a267f6515038558b019e92b832bb0320e96d66268dcf9"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "pin-project",
+ "tokio",
+]
+
+[[package]]
+name = "backtrace"
+version = "0.3.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+dependencies = [
+ "addr2line",
+ "cc",
+ "cfg-if",
+ "libc",
+ "miniz_oxide",
+ "object",
+ "rustc-demangle",
+]
+
+[[package]]
+name = "base16"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d27c3610c36aee21ce8ac510e6224498de4228ad772a171ed65643a24693a5a8"
+
+[[package]]
+name = "base16ct"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+[[package]]
+name = "base64"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5"
+
+[[package]]
+name = "base64"
+version = "0.21.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
+
+[[package]]
+name = "base64"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51"
+
+[[package]]
+name = "base64-simd"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195"
+dependencies = [
+ "outref",
+ "vsimd",
+]
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bit-set"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
+dependencies = [
+ "bit-vec",
+]
+
+[[package]]
+name = "bit-vec"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "bitflags"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[package]]
+name = "bitmask-enum"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9990737a6d5740ff51cdbbc0f0503015cb30c390f6623968281eb214a520cfc0"
+dependencies = [
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "bitvec"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "blocking"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
+dependencies = [
+ "async-channel",
+ "async-lock 2.8.0",
+ "async-task",
+ "fastrand 2.0.1",
+ "futures-io",
+ "futures-lite",
+ "piper",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "bloomy"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489d2af57852b78a86478273ac6a1ef912061b6af3a439694c49f309f6ea3bdd"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "bollard"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83545367eb6428eb35c29cdec3a1f350fa8d6d9085d59a7d7bcb637f2e38db5a"
+dependencies = [
+ "base64 0.21.7",
+ "bollard-stubs",
+ "bytes 1.5.0",
+ "chrono",
+ "futures-core",
+ "futures-util",
+ "hex",
+ "home",
+ "http 1.0.0",
+ "http-body-util",
+ "hyper 1.2.0",
+ "hyper-named-pipe",
+ "hyper-rustls 0.26.0",
+ "hyper-util",
+ "hyperlocal-next",
+ "log",
+ "pin-project-lite",
+ "rustls 0.22.2",
+ "rustls-native-certs 0.7.0",
+ "rustls-pemfile 2.1.0",
+ "rustls-pki-types",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_repr",
+ "serde_urlencoded",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "winapi",
+]
+
+[[package]]
+name = "bollard-stubs"
+version = "1.44.0-rc.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "709d9aa1c37abb89d40f19f5d0ad6f0d88cb1581264e571c9350fc5bb89cf1c5"
+dependencies = [
+ "chrono",
+ "serde",
+ "serde_repr",
+ "serde_with 3.7.0",
+]
+
+[[package]]
+name = "borsh"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf617fabf5cdbdc92f774bfe5062d870f228b80056d41180797abf48bed4056e"
+dependencies = [
+ "borsh-derive",
+ "cfg_aliases",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f404657a7ea7b5249e36808dff544bc88a28f26e0ac40009f674b7a009d14be3"
+dependencies = [
+ "once_cell",
+ "proc-macro-crate 2.0.0",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+ "syn_derive",
+]
+
+[[package]]
+name = "bson"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61570f4de0cc9c03b481c96057b3ae7c6ff7b5b35da8b0832c44f0131987a718"
+dependencies = [
+ "ahash 0.8.6",
+ "base64 0.13.1",
+ "bitvec",
+ "hex",
+ "indexmap 1.9.3",
+ "js-sys",
+ "once_cell",
+ "rand 0.8.5",
+ "serde",
+ "serde_bytes",
+ "serde_json",
+ "time",
+ "uuid",
+]
+
+[[package]]
+name = "bstr"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
+dependencies = [
+ "lazy_static",
+ "memchr",
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "bstr"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05efc5cfd9110c8416e471df0e96702d58690178e206e61b7173706673c93706"
+dependencies = [
+ "memchr",
+ "regex-automata 0.4.4",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "bytecheck"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627"
+dependencies = [
+ "bytecheck_derive",
+ "ptr_meta",
+ "simdutf8",
+]
+
+[[package]]
+name = "bytecheck_derive"
+version = "0.6.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
+dependencies = [
+ "byteorder",
+ "iovec",
+]
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bytes-utils"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e47d3a8076e283f3acd27400535992edb3ba4b5bb72f8891ad8fbe7932a7d4b9"
+dependencies = [
+ "bytes 1.5.0",
+ "either",
+]
+
+[[package]]
+name = "bytesize"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc"
+
+[[package]]
+name = "cached"
+version = "0.49.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f251fd1e72720ca07bf5d8e310f54a193fd053479a1f6342c6663ee4fa01cf96"
+dependencies = [
+ "ahash 0.8.6",
+ "cached_proc_macro",
+ "cached_proc_macro_types",
+ "hashbrown 0.14.3",
+ "instant",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cached_proc_macro"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad9f16c0d84de31a2ab7fdf5f7783c14631f7075cf464eb3bb43119f61c9cb2a"
+dependencies = [
+ "darling 0.14.4",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cached_proc_macro_types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade8366b8bd5ba243f0a58f036cc0ca8a2f069cff1a2351ef1cac6b083e16fc0"
+
+[[package]]
+name = "cargo_toml"
+version = "0.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a98356df42a2eb1bd8f1793ae4ee4de48e384dd974ce5eac8eee802edb7492be"
+dependencies = [
+ "serde",
+ "toml",
+]
+
+[[package]]
+name = "cassowary"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53"
+
+[[package]]
+name = "cast"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
+
+[[package]]
+name = "castaway"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a17ed5635fc8536268e5d4de1e22e81ac34419e5f052d4d51f4e01dcc263fcc"
+dependencies = [
+ "rustversion",
+]
+
+[[package]]
+name = "cbc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "jobserver",
+ "libc",
+]
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfb-mode"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "738b8d467867f80a71351933f70461f5b56f24d5c93e0cf216e59229c968d330"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
+[[package]]
+name = "chacha20"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3613f74bd2eac03dad61bd53dbe620703d4371614fe0bc3b9f04dd36fe4e818"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "chacha20poly1305"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
+dependencies = [
+ "aead",
+ "chacha20",
+ "cipher",
+ "poly1305",
+ "zeroize",
+]
+
+[[package]]
+name = "charset"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18e9079d1a12a2cc2bffb5db039c43661836ead4082120d5844f02555aca2d46"
+dependencies = [
+ "base64 0.13.1",
+ "encoding_rs",
+]
+
+[[package]]
+name = "chrono"
+version = "0.4.34"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "wasm-bindgen",
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "chrono-tz"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d59ae0466b83e838b81a54256c39d5d7c20b9d7daa10510a242d9b75abd5936e"
+dependencies = [
+ "chrono",
+ "chrono-tz-build",
+ "phf",
+ "serde",
+]
+
+[[package]]
+name = "chrono-tz-build"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "433e39f13c9a060046954e0592a8d0a4bcb1040125cbf91cb8ee58964cfb350f"
+dependencies = [
+ "parse-zoneinfo",
+ "phf",
+ "phf_codegen",
+]
+
+[[package]]
+name = "ciborium"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
+dependencies = [
+ "ciborium-io",
+ "ciborium-ll",
+ "serde",
+]
+
+[[package]]
+name = "ciborium-io"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
+
+[[package]]
+name = "ciborium-ll"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
+dependencies = [
+ "ciborium-io",
+ "half",
+]
+
+[[package]]
+name = "cidr"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d18b093eba54c9aaa1e3784d4361eb2ba944cf7d0a932a830132238f483e8d8"
+
+[[package]]
+name = "cidr-utils"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2315f7119b7146d6a883de6acd63ddf96071b5f79d9d98d2adaa84d749f6abf1"
+dependencies = [
+ "debug-helper",
+ "num-bigint",
+ "num-traits",
+ "once_cell",
+ "regex",
+]
+
+[[package]]
+name = "cidr-utils"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25c0a9fb70c2c2cc2a520aa259b1d1345650046a07df1b6da1d3cefcd327f43e"
+dependencies = [
+ "cidr",
+ "num-bigint",
+ "num-traits",
+]
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+ "zeroize",
+]
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags 1.3.2",
+ "strsim 0.8.0",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "4.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "949626d00e063efc93b6dca932419ceb5432f99769911c0b995f7e884c778813"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap-verbosity-flag"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb9b20c0dd58e4c2e991c8d203bbeb76c11304d1011659686b5b644bc29aa478"
+dependencies = [
+ "clap 4.5.3",
+ "log",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim 0.11.0",
+ "terminal_size",
+]
+
+[[package]]
+name = "clap_complete"
+version = "4.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "885e4d7d5af40bfb99ae6f9433e292feac98d452dcb3ec3d25dfe7552b77da8c"
+dependencies = [
+ "clap 4.5.3",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90239a040c80f5e14809ca132ddc4176ab33d5e17e49691793296e3fcb34d72f"
+dependencies = [
+ "heck 0.5.0",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
+
+[[package]]
+name = "clipboard-win"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c57002a5d9be777c1ef967e33674dac9ebd310d8893e4e3437b14d5f0f6372cc"
+dependencies = [
+ "error-code",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "codecs"
+version = "0.1.0"
+dependencies = [
+ "apache-avro",
+ "bytes 1.5.0",
+ "chrono",
+ "csv-core",
+ "derivative",
+ "dyn-clone",
+ "futures 0.3.30",
+ "indoc",
+ "memchr",
+ "once_cell",
+ "ordered-float 4.2.0",
+ "prost 0.12.3",
+ "prost-reflect",
+ "regex",
+ "rstest",
+ "serde",
+ "serde_json",
+ "similar-asserts",
+ "smallvec",
+ "snafu 0.7.5",
+ "syslog_loose",
+ "tokio",
+ "tokio-util",
+ "tracing 0.1.40",
+ "uuid",
+ "vector-common",
+ "vector-config",
+ "vector-config-common",
+ "vector-config-macros",
+ "vector-core",
+ "vector-lookup",
+ "vrl",
+]
+
+[[package]]
+name = "codespan-reporting"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
+dependencies = [
+ "termcolor",
+ "unicode-width",
+]
+
+[[package]]
+name = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "colored"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8"
+dependencies = [
+ "lazy_static",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "combine"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680"
+dependencies = [
+ "ascii",
+ "byteorder",
+ "either",
+ "memchr",
+ "unreachable",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "community-id"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f6af96839c04974cf381e427792a99913ecf3f7bfb348f153dc8a8e5f9803ad"
+dependencies = [
+ "anyhow",
+ "base64 0.21.7",
+ "hex",
+ "lazy_static",
+ "num_enum 0.6.1",
+ "sha1",
+]
+
+[[package]]
+name = "compact_str"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f"
+dependencies = [
+ "castaway",
+ "cfg-if",
+ "itoa",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "confy"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45b1f4c00870f07dc34adcac82bb6a72cc5aabca8536ba1797e01df51d2ce9a0"
+dependencies = [
+ "directories",
+ "serde",
+ "thiserror",
+ "toml",
+]
+
+[[package]]
+name = "console"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+dependencies = [
+ "encode_unicode 0.3.6",
+ "lazy_static",
+ "libc",
+ "unicode-width",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "console-api"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd326812b3fd01da5bb1af7d340d0d555fd3d4b641e7f1dfcf5962a902952787"
+dependencies = [
+ "futures-core",
+ "prost 0.12.3",
+ "prost-types 0.12.3",
+ "tonic",
+ "tracing-core 0.1.32",
+]
+
+[[package]]
+name = "console-subscriber"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7481d4c57092cd1c19dd541b92bdce883de840df30aa5d03fd48a3935c01842e"
+dependencies = [
+ "console-api",
+ "crossbeam-channel",
+ "crossbeam-utils",
+ "futures-task",
+ "hdrhistogram",
+ "humantime",
+ "prost-types 0.12.3",
+ "serde",
+ "serde_json",
+ "thread_local",
+ "tokio",
+ "tokio-stream",
+ "tonic",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+
+[[package]]
+name = "const_fn"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbdcdcb6d86f71c5e97409ad45898af11cbc995b4ee8112d59095a28d376c935"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "convert_case"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "cookie-factory"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "396de984970346b0d9e93d1415082923c679e5ae5c3ee3dcbd104f5610af126b"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "core2"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crc"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe"
+dependencies = [
+ "crc-catalog",
+]
+
+[[package]]
+name = "crc-catalog"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4939f9ed1444bd8c896d37f3090012fa6e7834fe84ef8c9daa166109515732f9"
+
+[[package]]
+name = "crc32c"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8f48d60e5b4d2c53d5c2b1d8a58c849a70ae5e5509b08a48d047e3b65714a74"
+dependencies = [
+ "rustc_version 0.4.0",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "criterion"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
+dependencies = [
+ "anes",
+ "cast",
+ "ciborium",
+ "clap 4.5.3",
+ "criterion-plot",
+ "futures 0.3.30",
+ "is-terminal",
+ "itertools 0.10.5",
+ "num-traits",
+ "once_cell",
+ "oorandom",
+ "plotters",
+ "rayon",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "tinytemplate",
+ "tokio",
+ "walkdir",
+]
+
+[[package]]
+name = "criterion-plot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
+dependencies = [
+ "cast",
+ "itertools 0.10.5",
+]
+
+[[package]]
+name = "crossbeam-channel"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-deque"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+dependencies = [
+ "cfg-if",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-epoch"
+version = "0.9.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "crossbeam-utils",
+ "memoffset 0.9.0",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-queue"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
+
+[[package]]
+name = "crossterm"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
+dependencies = [
+ "bitflags 2.4.1",
+ "crossterm_winapi",
+ "futures-core",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "signal-hook-mio",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm_winapi"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "crunchy"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+
+[[package]]
+name = "crypto-bigint"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "rand_core 0.6.4",
+ "typenum",
+]
+
+[[package]]
+name = "crypto_secretbox"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1"
+dependencies = [
+ "aead",
+ "cipher",
+ "generic-array",
+ "poly1305",
+ "salsa20",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "csv"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe"
+dependencies = [
+ "csv-core",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ctr"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "4.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89b8c6a2e4b1f45971ad09761aafb85514a84744b67a95e32c3cc1352d1f65c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "curve25519-dalek-derive",
+ "digest",
+ "fiat-crypto",
+ "platforms 3.1.2",
+ "rustc_version 0.4.0",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "curve25519-dalek-derive"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "darling"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c"
+dependencies = [
+ "darling_core 0.13.4",
+ "darling_macro 0.13.4",
+]
+
+[[package]]
+name = "darling"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
+dependencies = [
+ "darling_core 0.14.4",
+ "darling_macro 0.14.4",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391"
+dependencies = [
+ "darling_core 0.20.8",
+ "darling_macro 0.20.8",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "strsim 0.10.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "strsim 0.10.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "strsim 0.10.0",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core 0.13.4",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
+dependencies = [
+ "darling_core 0.14.4",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f"
+dependencies = [
+ "darling_core 0.20.8",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "dary_heap"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7762d17f1241643615821a8455a0b2c3e803784b058693d990b11f2dce25a0ca"
+
+[[package]]
+name = "dashmap"
+version = "5.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
+dependencies = [
+ "cfg-if",
+ "hashbrown 0.14.3",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "data-encoding"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5"
+
+[[package]]
+name = "data-url"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a"
+
+[[package]]
+name = "db-key"
+version = "0.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b72465f46d518f6015d9cf07f7f3013a95dd6b9c2747c3d65ae0cce43929d14f"
+
+[[package]]
+name = "deadpool"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "421fe0f90f2ab22016f32a9881be5134fdd71c65298917084b0c7477cbc3856e"
+dependencies = [
+ "async-trait",
+ "deadpool-runtime",
+ "num_cpus",
+ "retain_mut",
+ "tokio",
+]
+
+[[package]]
+name = "deadpool-runtime"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63dfa964fe2a66f3fde91fc70b267fe193d822c7e603e2a675a49a7f46ad3f49"
+
+[[package]]
+name = "debug-helper"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e"
+
+[[package]]
+name = "der"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c"
+dependencies = [
+ "const-oid",
+ "pem-rfc7468",
+ "zeroize",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+dependencies = [
+ "powerfmt",
+ "serde",
+]
+
+[[package]]
+name = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive_arbitrary"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case 0.4.0",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "rustc_version 0.4.0",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
+[[package]]
+name = "difflib"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "const-oid",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "directories"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
+dependencies = [
+ "cfg-if",
+ "dirs-sys-next",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dirs-sys-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dns-lookup"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5766087c2235fec47fafa4cfecc81e494ee679d0fd4a59887ea0919bfb0e4fc"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "socket2 0.5.6",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "dnsmsg-parser"
+version = "0.1.0"
+dependencies = [
+ "criterion",
+ "data-encoding",
+ "hickory-proto",
+ "thiserror",
+]
+
+[[package]]
+name = "doc-comment"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
+
+[[package]]
+name = "docs-renderer"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "serde",
+ "serde_json",
+ "snafu 0.7.5",
+ "tracing 0.1.40",
+ "tracing-subscriber",
+ "vector-config",
+ "vector-config-common",
+]
+
+[[package]]
+name = "duct"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37ae3fc31835f74c2a7ceda3aeede378b0ae2e74c8f1c36559fcc9ae2a4e7d3e"
+dependencies = [
+ "libc",
+ "once_cell",
+ "os_pipe",
+ "shared_child",
+]
+
+[[package]]
+name = "dunce"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
+
+[[package]]
+name = "ecdsa"
+version = "0.16.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
+dependencies = [
+ "der",
+ "digest",
+ "elliptic-curve",
+ "rfc6979",
+ "signature",
+ "spki",
+]
+
+[[package]]
+name = "ed25519"
+version = "2.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
+dependencies = [
+ "pkcs8",
+ "signature",
+]
+
+[[package]]
+name = "ed25519-dalek"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7277392b266383ef8396db7fdeb1e77b6c52fed775f5df15bb24f35b72156980"
+dependencies = [
+ "curve25519-dalek",
+ "ed25519",
+ "serde",
+ "sha2",
+ "signature",
+ "zeroize",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "elliptic-curve"
+version = "0.13.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9775b22bc152ad86a0cf23f0f348b884b26add12bf741e7ffc4d4ab2ab4d205"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "digest",
+ "ff",
+ "generic-array",
+ "group",
+ "hkdf",
+ "pem-rfc7468",
+ "pkcs8",
+ "rand_core 0.6.4",
+ "sec1",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "ena"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c533630cf40e9caa44bd91aadc88a75d75a4c3a12b4cfde353cbed41daa1e1f1"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "encode_unicode"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
+
+[[package]]
+name = "encode_unicode"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+ "serde",
+]
+
+[[package]]
+name = "endian-type"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d"
+
+[[package]]
+name = "enrichment"
+version = "0.1.0"
+dependencies = [
+ "arc-swap",
+ "chrono",
+ "dyn-clone",
+ "vrl",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "enum-as-inner"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ffccbb6966c05b32ef8fbac435df276c4ae4d3dc55a8cd0eb9745e6c12f546a"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "enum_dispatch"
+version = "0.3.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f33313078bb8d4d05a2733a94ac4c2d8a0df9a2b84424ebf4f33bfc224a890e"
+dependencies = [
+ "once_cell",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.7.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d"
+dependencies = [
+ "enumflags2_derive",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "env-test-util"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62a61b2faff777e62dbccd7f82541d873f96264d050c5dd7e95194f79fc4de29"
+
+[[package]]
+name = "env_logger"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19187fea3ac7e84da7dacf48de0c45d63c6a76f9490dae389aead16c243fce3"
+dependencies = [
+ "log",
+ "regex",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580"
+dependencies = [
+ "humantime",
+ "is-terminal",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "erased-serde"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3286168faae03a0e583f6fde17c02c8b8bba2dcc2061d0f7817066e5b0af706"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "error-chain"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "error-code"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "281e452d3bad4005426416cdba5ccfd4f5c1280e10099e21db27f7c1c28347fc"
+
+[[package]]
+name = "event-listener"
+version = "2.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
+
+[[package]]
+name = "event-listener"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "01cec0252c2afff729ee6f00e903d479fba81784c8e2bd77447673471fdfaea1"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener-strategy"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d96b852f1345da36d551b9473fa1e2b1eb5c5195585c6c018118bc92a8d91160"
+dependencies = [
+ "event-listener 3.0.1",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "executor-trait"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a1052dd43212a7777ec6a69b117da52f5e52f07aec47d00c1a2b33b85d06b08"
+dependencies = [
+ "async-trait",
+]
+
+[[package]]
+name = "exitcode"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de853764b47027c2e862a995c34978ffa63c1501f2e15f987ba11bd4f9bba193"
+
+[[package]]
+name = "fakedata"
+version = "0.1.0"
+dependencies = [
+ "chrono",
+ "fakedata_generator",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "fakedata_generator"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "302a45f60d105c247c9d3131107392da80df844f9215260b7f8ccfa301a6a6f4"
+dependencies = [
+ "passt",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "fallible-iterator"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "ff"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
+dependencies = [
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "fiat-crypto"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a481586acf778f1b1455424c343f71124b048ffa5f4fc3f8f6ae9dc432dcb3c7"
+
+[[package]]
+name = "file-source"
+version = "0.1.0"
+dependencies = [
+ "bstr 1.9.1",
+ "bytes 1.5.0",
+ "chrono",
+ "crc",
+ "criterion",
+ "dashmap",
+ "flate2",
+ "futures 0.3.30",
+ "glob",
+ "indexmap 2.2.5",
+ "libc",
+ "quickcheck",
+ "scan_fmt",
+ "serde",
+ "serde_json",
+ "similar-asserts",
+ "tempfile",
+ "tokio",
+ "tracing 0.1.40",
+ "vector-config",
+ "vector-config-common",
+ "vector-config-macros",
+ "winapi",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.3.5",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "finl_unicode"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fcfdc7a0362c9f4444381a9e697c79d435fe65b52a37466fc2c1184cee9edc6"
+
+[[package]]
+name = "fixedbitset"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
+
+[[package]]
+name = "flagset"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a7e408202050813e6f1d9addadcaafef3dca7530c7ddfb005d4081cce6779"
+
+[[package]]
+name = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float_eq"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28a80e3145d8ad11ba0995949bbcf48b9df2be62772b3d351ef017dff6ecb853"
+
+[[package]]
+name = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "pin-project",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "flume"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "foreign-types"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
+dependencies = [
+ "foreign-types-shared",
+]
+
+[[package]]
+name = "foreign-types-shared"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "fslock"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "funty"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
+
+[[package]]
+name = "futures"
+version = "0.1.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
+
+[[package]]
+name = "futures"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "fastrand 1.9.0",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+ "waker-fn",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
+
+[[package]]
+name = "futures-task"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
+
+[[package]]
+name = "futures-timer"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+
+[[package]]
+name = "futures-util"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
+dependencies = [
+ "futures 0.1.31",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+ "tokio-io",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+ "zeroize",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.9.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "gloo-utils"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa"
+dependencies = [
+ "js-sys",
+ "serde",
+ "serde_json",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "goauth"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d351469a584f3b3565e2e740d4da60839bddc4320dadd7d61da8bdd77ffb373b"
+dependencies = [
+ "arc-swap",
+ "futures 0.3.30",
+ "log",
+ "reqwest",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "simpl",
+ "smpl_jwt",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "governor"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "821239e5672ff23e2a7060901fa622950bbd80b649cdaadd78d1c1767ed14eb4"
+dependencies = [
+ "cfg-if",
+ "dashmap",
+ "futures 0.3.30",
+ "futures-timer",
+ "no-std-compat",
+ "nonzero_ext",
+ "parking_lot",
+ "rand 0.8.5",
+ "smallvec",
+]
+
+[[package]]
+name = "graphql-introspection-query"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f2a4732cf5140bd6c082434494f785a19cfb566ab07d1382c3671f5812fed6d"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "graphql-parser"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2ebc8013b4426d5b81a4364c419a95ed0b404af2b82e2457de52d9348f0e474"
+dependencies = [
+ "combine 3.8.1",
+ "thiserror",
+]
+
+[[package]]
+name = "graphql_client"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cdf7b487d864c2939b23902291a5041bc4a84418268f25fda1c8d4e15ad8fa"
+dependencies = [
+ "graphql_query_derive",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "graphql_client_codegen"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a40f793251171991c4eb75bd84bc640afa8b68ff6907bc89d3b712a22f700506"
+dependencies = [
+ "graphql-introspection-query",
+ "graphql-parser",
+ "heck 0.4.1",
+ "lazy_static",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "serde",
+ "serde_json",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "graphql_query_derive"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00bda454f3d313f909298f626115092d348bc231025699f557b27e248475f48c"
+dependencies = [
+ "graphql_client_codegen",
+ "proc-macro2 1.0.79",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "greptime-proto"
+version = "0.1.0"
+source = "git+https://github.com/GreptimeTeam/greptime-proto.git?tag=v0.4.1#4306ab645ee55b3f7f2ad3fb7acc5820f967c1aa"
+dependencies = [
+ "prost 0.12.3",
+ "serde",
+ "serde_json",
+ "strum 0.25.0",
+ "strum_macros 0.25.3",
+ "tonic",
+ "tonic-build 0.10.2",
+]
+
+[[package]]
+name = "greptimedb-client"
+version = "0.1.0"
+source = "git+https://github.com/GreptimeTeam/greptimedb-ingester-rust.git?rev=d21dbcff680139ed2065b62100bac3123da7c789#d21dbcff680139ed2065b62100bac3123da7c789"
+dependencies = [
+ "dashmap",
+ "enum_dispatch",
+ "futures 0.3.30",
+ "futures-util",
+ "greptime-proto",
+ "parking_lot",
+ "prost 0.12.3",
+ "rand 0.8.5",
+ "snafu 0.7.5",
+ "tokio",
+ "tokio-stream",
+ "tonic",
+ "tonic-build 0.9.2",
+ "tower",
+]
+
+[[package]]
+name = "grok"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "273797968160270573071022613fc4aa28b91fe68f3eef6c96a1b2a1947ddfbd"
+dependencies = [
+ "glob",
+ "onig",
+]
+
+[[package]]
+name = "group"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+dependencies = [
+ "ff",
+ "rand_core 0.6.4",
+ "subtle",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8"
+dependencies = [
+ "bytes 1.5.0",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http 0.2.9",
+ "indexmap 2.2.5",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "h2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "816ec7294445779408f36fe57bc5b7fc1cf59664059096c65f905c1c61f58069"
+dependencies = [
+ "bytes 1.5.0",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http 1.0.0",
+ "indexmap 2.2.5",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hash_hasher"
+version = "2.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74721d007512d0cb3338cd20f0654ac913920061a4c4d0d8708edb3f2a698c0c"
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+dependencies = [
+ "ahash 0.7.7",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038"
+dependencies = [
+ "ahash 0.8.6",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+dependencies = [
+ "ahash 0.8.6",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hdrhistogram"
+version = "7.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "765c9198f173dd59ce26ff9f95ef0aafd0a0fe01fb9d72841bc5066a4c06511d"
+dependencies = [
+ "base64 0.21.7",
+ "byteorder",
+ "crossbeam-channel",
+ "flate2",
+ "nom",
+ "num-traits",
+]
+
+[[package]]
+name = "headers"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270"
+dependencies = [
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "headers-core",
+ "http 0.2.9",
+ "httpdate",
+ "mime",
+ "sha1",
+]
+
+[[package]]
+name = "headers-core"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429"
+dependencies = [
+ "http 0.2.9",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "heck"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
+
+[[package]]
+name = "heim"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "heim-common",
+ "heim-cpu",
+ "heim-disk",
+ "heim-host",
+ "heim-memory",
+ "heim-net",
+ "heim-runtime",
+]
+
+[[package]]
+name = "heim-common"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "cfg-if",
+ "core-foundation",
+ "futures-core",
+ "futures-util",
+ "lazy_static",
+ "libc",
+ "mach",
+ "nix 0.23.2",
+ "pin-utils",
+ "uom",
+ "winapi",
+]
+
+[[package]]
+name = "heim-cpu"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "cfg-if",
+ "futures 0.3.30",
+ "glob",
+ "heim-common",
+ "heim-runtime",
+ "lazy_static",
+ "libc",
+ "mach",
+ "ntapi",
+ "smol",
+ "winapi",
+]
+
+[[package]]
+name = "heim-disk"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "core-foundation",
+ "heim-common",
+ "heim-runtime",
+ "libc",
+ "mach",
+ "widestring 0.4.3",
+ "winapi",
+]
+
+[[package]]
+name = "heim-host"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "cfg-if",
+ "heim-common",
+ "heim-runtime",
+ "lazy_static",
+ "libc",
+ "log",
+ "mach",
+ "ntapi",
+ "platforms 1.1.0",
+ "winapi",
+]
+
+[[package]]
+name = "heim-memory"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "cfg-if",
+ "heim-common",
+ "heim-runtime",
+ "lazy_static",
+ "libc",
+ "mach",
+ "winapi",
+]
+
+[[package]]
+name = "heim-net"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "heim-common",
+ "heim-runtime",
+ "libc",
+ "macaddr",
+ "nix 0.23.2",
+ "widestring 0.4.3",
+ "winapi",
+]
+
+[[package]]
+name = "heim-runtime"
+version = "0.1.0-rc.1"
+source = "git+https://github.com/vectordotdev/heim.git?branch=update-nix#a66c44074fb214e2b9355d7c407315f720664b18"
+dependencies = [
+ "futures 0.3.30",
+ "futures-timer",
+ "once_cell",
+ "smol",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[package]]
+name = "hickory-proto"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "091a6fbccf4860009355e3efc52ff4acf37a63489aad7435372d44ceeb6fbbcf"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner 0.6.0",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.4.0",
+ "ipnet",
+ "once_cell",
+ "rand 0.8.5",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "tracing 0.1.40",
+ "url",
+]
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "home"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "hostname"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+dependencies = [
+ "libc",
+ "match_cfg",
+ "winapi",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes 1.5.0",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b32afd38673a8016f7c9ae69e5af41a58f81b1d31689040f2f1959594ce194ea"
+dependencies = [
+ "bytes 1.5.0",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+dependencies = [
+ "bytes 1.5.0",
+ "http 0.2.9",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-body"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643"
+dependencies = [
+ "bytes 1.5.0",
+ "http 1.0.0",
+]
+
+[[package]]
+name = "http-body-util"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-util",
+ "http 1.0.0",
+ "http-body 1.0.0",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "http-range-header"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
+
+[[package]]
+name = "http-serde"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f560b665ad9f1572cfcaf034f7fb84338a7ce945216d64a90fd81f046a3caee"
+dependencies = [
+ "http 0.2.9",
+ "serde",
+]
+
+[[package]]
+name = "http-types"
+version = "2.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad"
+dependencies = [
+ "anyhow",
+ "async-channel",
+ "base64 0.13.1",
+ "futures-lite",
+ "http 0.2.9",
+ "infer 0.2.3",
+ "pin-project-lite",
+ "rand 0.7.3",
+ "serde",
+ "serde_json",
+ "serde_qs",
+ "serde_urlencoded",
+ "url",
+]
+
+[[package]]
+name = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[package]]
+name = "httpdate"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[package]]
+name = "hyper"
+version = "0.14.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2 0.3.26",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "pin-project-lite",
+ "socket2 0.4.10",
+ "tokio",
+ "tower-service",
+ "tracing 0.1.40",
+ "want",
+]
+
+[[package]]
+name = "hyper"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-channel",
+ "futures-util",
+ "http 1.0.0",
+ "http-body 1.0.0",
+ "httparse",
+ "itoa",
+ "pin-project-lite",
+ "smallvec",
+ "tokio",
+ "want",
+]
+
+[[package]]
+name = "hyper-named-pipe"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278"
+dependencies = [
+ "hex",
+ "hyper 1.2.0",
+ "hyper-util",
+ "pin-project-lite",
+ "tokio",
+ "tower-service",
+ "winapi",
+]
+
+[[package]]
+name = "hyper-openssl"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6ee5d7a8f718585d1c3c61dfde28ef5b0bb14734b4db13f5ada856cdc6c612b"
+dependencies = [
+ "http 0.2.9",
+ "hyper 0.14.28",
+ "linked_hash_set",
+ "once_cell",
+ "openssl",
+ "openssl-sys",
+ "parking_lot",
+ "tokio",
+ "tokio-openssl",
+ "tower-layer",
+]
+
+[[package]]
+name = "hyper-proxy"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca815a891b24fdfb243fa3239c86154392b0953ee584aa1a2a1f66d20cbe75cc"
+dependencies = [
+ "bytes 1.5.0",
+ "futures 0.3.30",
+ "headers",
+ "http 0.2.9",
+ "hyper 0.14.28",
+ "openssl",
+ "tokio",
+ "tokio-openssl",
+ "tower-service",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590"
+dependencies = [
+ "futures-util",
+ "http 0.2.9",
+ "hyper 0.14.28",
+ "log",
+ "rustls 0.21.8",
+ "rustls-native-certs 0.6.3",
+ "tokio",
+ "tokio-rustls 0.24.1",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0bea761b46ae2b24eb4aef630d8d1c398157b6fc29e6350ecf090a0b70c952c"
+dependencies = [
+ "futures-util",
+ "http 1.0.0",
+ "hyper 1.2.0",
+ "hyper-util",
+ "log",
+ "rustls 0.22.2",
+ "rustls-native-certs 0.7.0",
+ "rustls-pki-types",
+ "tokio",
+ "tokio-rustls 0.25.0",
+ "tower-service",
+]
+
+[[package]]
+name = "hyper-timeout"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
+dependencies = [
+ "hyper 0.14.28",
+ "pin-project-lite",
+ "tokio",
+ "tokio-io-timeout",
+]
+
+[[package]]
+name = "hyper-tls"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905"
+dependencies = [
+ "bytes 1.5.0",
+ "hyper 0.14.28",
+ "native-tls",
+ "tokio",
+ "tokio-native-tls",
+]
+
+[[package]]
+name = "hyper-util"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-channel",
+ "futures-util",
+ "http 1.0.0",
+ "http-body 1.0.0",
+ "hyper 1.2.0",
+ "pin-project-lite",
+ "socket2 0.5.6",
+ "tokio",
+ "tower",
+ "tower-service",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "hyperlocal-next"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf569d43fa9848e510358c07b80f4adf34084ddc28c6a4a651ee8474c070dcc"
+dependencies = [
+ "hex",
+ "http-body-util",
+ "hyper 1.2.0",
+ "hyper-util",
+ "pin-project-lite",
+ "tokio",
+ "tower-service",
+]
+
+[[package]]
+name = "iana-time-zone"
+version = "0.1.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core",
+]
+
+[[package]]
+name = "iana-time-zone-haiku"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[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 = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "idna"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.3",
+ "serde",
+]
+
+[[package]]
+name = "indicatif"
+version = "0.17.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3"
+dependencies = [
+ "console",
+ "instant",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "indoc"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+
+[[package]]
+name = "infer"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac"
+
+[[package]]
+name = "infer"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199"
+
+[[package]]
+name = "inotify"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff"
+dependencies = [
+ "bitflags 1.3.2",
+ "inotify-sys",
+ "libc",
+]
+
+[[package]]
+name = "inotify-sys"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "block-padding",
+ "generic-array",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "inventory"
+version = "0.3.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767"
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "iovec"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "ipconfig"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f"
+dependencies = [
+ "socket2 0.5.6",
+ "widestring 1.0.2",
+ "windows-sys 0.48.0",
+ "winreg",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "ipnetwork"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is_ci"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "616cde7c720bb2bb5824a224687d8f77bfd38922027f01d825cd7453be5099fb"
+
+[[package]]
+name = "itertools"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itertools"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
+dependencies = [
+ "either",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jni"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97"
+dependencies = [
+ "cesu8",
+ "cfg-if",
+ "combine 4.6.6",
+ "jni-sys",
+ "log",
+ "thiserror",
+ "walkdir",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json-patch"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6"
+dependencies = [
+ "serde",
+ "serde_json",
+ "thiserror",
+ "treediff",
+]
+
+[[package]]
+name = "jsonpath_lib"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f"
+dependencies = [
+ "log",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "k8s-e2e-tests"
+version = "0.1.0"
+dependencies = [
+ "env_logger 0.10.2",
+ "futures 0.3.30",
+ "indoc",
+ "k8s-openapi 0.16.0",
+ "k8s-test-framework",
+ "rand 0.8.5",
+ "regex",
+ "reqwest",
+ "serde_json",
+ "tokio",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "k8s-openapi"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d9455388f4977de4d0934efa9f7d36296295537d774574113a20f6082de03da"
+dependencies = [
+ "base64 0.13.1",
+ "bytes 1.5.0",
+ "chrono",
+ "serde",
+ "serde-value",
+ "serde_json",
+]
+
+[[package]]
+name = "k8s-openapi"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd990069640f9db34b3b0f7a1afc62a05ffaa3be9b66aa3c313f58346df7f788"
+dependencies = [
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "chrono",
+ "http 0.2.9",
+ "percent-encoding",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "url",
+]
+
+[[package]]
+name = "k8s-test-framework"
+version = "0.1.0"
+dependencies = [
+ "k8s-openapi 0.16.0",
+ "log",
+ "serde_json",
+ "tempfile",
+ "tokio",
+]
+
+[[package]]
+name = "keccak"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
+dependencies = [
+ "cpufeatures",
+]
+
+[[package]]
+name = "kqueue"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c"
+dependencies = [
+ "kqueue-sys",
+ "libc",
+]
+
+[[package]]
+name = "kqueue-sys"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+]
+
+[[package]]
+name = "krb5-src"
+version = "0.3.2+1.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44cd3b7e7735d48bc3793837041294f2eb747bd0f63bbc081e89972abb9e48fb"
+dependencies = [
+ "duct",
+]
+
+[[package]]
+name = "kube"
+version = "0.82.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc7d3d52dd5c871991679102e80dfb192faaaa09fecdbccdd8c55af264ce7a8f"
+dependencies = [
+ "k8s-openapi 0.18.0",
+ "kube-client",
+ "kube-core",
+ "kube-runtime",
+]
+
+[[package]]
+name = "kube-client"
+version = "0.82.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "544339f1665488243f79080441cacb09c997746fd763342303e66eebb9d3ba13"
+dependencies = [
+ "base64 0.20.0",
+ "bytes 1.5.0",
+ "chrono",
+ "dirs-next",
+ "either",
+ "futures 0.3.30",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "hyper 0.14.28",
+ "hyper-openssl",
+ "hyper-timeout",
+ "jsonpath_lib",
+ "k8s-openapi 0.18.0",
+ "kube-core",
+ "openssl",
+ "pem 1.1.1",
+ "pin-project",
+ "secrecy",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.33",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tower",
+ "tower-http",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "kube-core"
+version = "0.82.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25983d07f414dfffba08c5951fe110f649113416b1d8e22f7c89c750eb2555a7"
+dependencies = [
+ "chrono",
+ "form_urlencoded",
+ "http 0.2.9",
+ "json-patch",
+ "k8s-openapi 0.18.0",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "kube-runtime"
+version = "0.82.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "125331201e3073707ac79c294c89021faa76c84da3a566a3749a2a93d295c98a"
+dependencies = [
+ "ahash 0.8.6",
+ "async-trait",
+ "backoff",
+ "derivative",
+ "futures 0.3.30",
+ "json-patch",
+ "k8s-openapi 0.18.0",
+ "kube-client",
+ "parking_lot",
+ "pin-project",
+ "serde",
+ "serde_json",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "tokio-util",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "lalrpop"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da4081d44f4611b66c6dd725e6de3169f9f63905421e8626fcb86b6a898998b8"
+dependencies = [
+ "ascii-canvas",
+ "bit-set",
+ "diff",
+ "ena",
+ "is-terminal",
+ "itertools 0.10.5",
+ "lalrpop-util",
+ "petgraph",
+ "regex",
+ "regex-syntax 0.7.5",
+ "string_cache",
+ "term",
+ "tiny-keccak",
+ "unicode-xid 0.2.4",
+]
+
+[[package]]
+name = "lalrpop-util"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f35c735096c0293d313e8f2a641627472b83d01b937177fe76e5e2708d31e0d"
+
+[[package]]
+name = "lapin"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f3067a1fcfbc3fc46455809c023e69b8f6602463201010f4ae5a3b572adb9dc"
+dependencies = [
+ "amq-protocol",
+ "async-global-executor-trait",
+ "async-reactor-trait",
+ "async-trait",
+ "executor-trait",
+ "flume 0.10.14",
+ "futures-core",
+ "futures-io",
+ "parking_lot",
+ "pinky-swear",
+ "reactor-trait",
+ "serde",
+ "tracing 0.1.40",
+ "waker-fn",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+dependencies = [
+ "spin 0.5.2",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.153"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+
+[[package]]
+name = "libflate"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7d5654ae1795afc7ff76f4365c2c8791b0feb18e8996a96adad8ffd7c3b2bf"
+dependencies = [
+ "adler32",
+ "core2",
+ "crc32fast",
+ "dary_heap",
+ "libflate_lz77",
+]
+
+[[package]]
+name = "libflate_lz77"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be5f52fb8c451576ec6b79d3f4deb327398bc05bbdbd99021a6e77a4c855d524"
+dependencies = [
+ "core2",
+ "hashbrown 0.13.1",
+ "rle-decode-fast",
+]
+
+[[package]]
+name = "libm"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libz-sys"
+version = "1.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
+
+[[package]]
+name = "linked_hash_set"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456"
+
+[[package]]
+name = "listenfd"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0500463acd96259d219abb05dc57e5a076ef04b2db9a2112846929b5f174c96"
+dependencies = [
+ "libc",
+ "uuid",
+ "winapi",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "lockfree-object-pool"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a69c0481fc2424cb55795de7da41add33372ea75a94f9b6588ab6a2826dfebc"
+
+[[package]]
+name = "log"
+version = "0.4.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
+
+[[package]]
+name = "logfmt"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "879777f0cc6f3646a044de60e4ab98c75617e3f9580f7a2032e6ad7ea0cd3054"
+
+[[package]]
+name = "loki-logproto"
+version = "0.1.0"
+dependencies = [
+ "bytes 1.5.0",
+ "chrono",
+ "prost 0.12.3",
+ "prost-build 0.12.3",
+ "prost-types 0.12.3",
+ "snap",
+]
+
+[[package]]
+name = "lru"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3262e75e648fce39813cb56ac41f3c3e3f65217ebf3844d818d1f9398cfb0dc"
+dependencies = [
+ "hashbrown 0.14.3",
+]
+
+[[package]]
+name = "lru-cache"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c"
+dependencies = [
+ "linked-hash-map",
+]
+
+[[package]]
+name = "lua-src"
+version = "546.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2da0daa7eee611a4c30c8f5ee31af55266e26e573971ba9336d2993e2da129b2"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "luajit-src"
+version = "210.5.2+113a168"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "823ec7bedb1819b11633bd583ae981b0082db08492b0c3396412b85dd329ffee"
+dependencies = [
+ "cc",
+ "which 5.0.0",
+]
+
+[[package]]
+name = "lz4"
+version = "1.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1"
+dependencies = [
+ "libc",
+ "lz4-sys",
+]
+
+[[package]]
+name = "lz4-sys"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "macaddr"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baee0bbc17ce759db233beb01648088061bf678383130602a298e6998eedb2d8"
+
+[[package]]
+name = "mach"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "mach2"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "match_cfg"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata 0.1.10",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "matchit"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94"
+
+[[package]]
+name = "matrixmultiply"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2"
+dependencies = [
+ "autocfg",
+ "rawpointer",
+]
+
+[[package]]
+name = "maxminddb"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6087e5d8ea14861bb7c7f573afbc7be3798d3ef0fae87ec4fd9a4de9a127c3c"
+dependencies = [
+ "ipnetwork",
+ "log",
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "md-5"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if",
+ "digest",
+]
+
+[[package]]
+name = "memchr"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
+
+[[package]]
+name = "memmap2"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "metrics"
+version = "0.21.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fde3af1a009ed76a778cb84fdef9e7dbbdf5775ae3e4cc1f434a6a307f6f76c5"
+dependencies = [
+ "ahash 0.8.6",
+ "metrics-macros",
+ "portable-atomic",
+]
+
+[[package]]
+name = "metrics-macros"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddece26afd34c31585c74a4db0630c376df271c285d682d1e55012197830b6df"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "metrics-tracing-context"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fec95d1490f2b7e2d49462f9d75aa4fed52cc21e0b40aefc5987c6f404d40a2"
+dependencies = [
+ "itoa",
+ "lockfree-object-pool",
+ "metrics",
+ "metrics-util",
+ "once_cell",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "metrics-util"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4de2ed6e491ed114b40b732e4d1659a9d53992ebd87490c44a6ffe23739d973e"
+dependencies = [
+ "aho-corasick",
+ "crossbeam-epoch",
+ "crossbeam-utils",
+ "hashbrown 0.13.1",
+ "indexmap 1.9.3",
+ "metrics",
+ "num_cpus",
+ "ordered-float 3.9.2",
+ "quanta 0.11.1",
+ "radix_trie",
+ "sketches-ddsketch",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
+
+[[package]]
+name = "mime_guess"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "mlua"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "868d02cb5eb97761bbf6bd6922c1c7a88b8ea252bbf43bd8350a0bf8497a1fc0"
+dependencies = [
+ "bstr 1.9.1",
+ "mlua-sys",
+ "mlua_derive",
+ "num-traits",
+ "once_cell",
+ "rustc-hash",
+]
+
+[[package]]
+name = "mlua-sys"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2847b42764435201d8cbee1f517edb79c4cca4181877b90047587c89e1b7bce4"
+dependencies = [
+ "cc",
+ "cfg-if",
+ "lua-src",
+ "luajit-src",
+ "pkg-config",
+]
+
+[[package]]
+name = "mlua_derive"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaade5f94e5829db58791664ba98f35fea6a3ffebc783becb51dc97c7a21abee"
+dependencies = [
+ "itertools 0.12.1",
+ "once_cell",
+ "proc-macro-error",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "regex",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "mock_instant"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9366861eb2a2c436c20b12c8dbec5f798cea6b47ad99216be0282942e2c81ea0"
+
+[[package]]
+name = "mongodb"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef206acb1b72389b49bc9985efe7eb1f8a9bb18e5680d262fac26c07f44025f1"
+dependencies = [
+ "async-trait",
+ "base64 0.13.1",
+ "bitflags 1.3.2",
+ "bson",
+ "chrono",
+ "derivative",
+ "derive_more",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-util",
+ "hex",
+ "hmac",
+ "lazy_static",
+ "md-5",
+ "pbkdf2",
+ "percent-encoding",
+ "rand 0.8.5",
+ "rustc_version_runtime",
+ "rustls 0.21.8",
+ "rustls-pemfile 1.0.3",
+ "serde",
+ "serde_bytes",
+ "serde_with 1.14.0",
+ "sha-1",
+ "sha2",
+ "socket2 0.4.10",
+ "stringprep",
+ "strsim 0.10.0",
+ "take_mut",
+ "thiserror",
+ "tokio",
+ "tokio-rustls 0.24.1",
+ "tokio-util",
+ "trust-dns-proto",
+ "trust-dns-resolver",
+ "typed-builder 0.10.0",
+ "uuid",
+ "webpki-roots",
+]
+
+[[package]]
+name = "multer"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a15d522be0a9c3e46fd2632e272d178f56387bdb5c9fbb3a36c649062e9b5219"
+dependencies = [
+ "bytes 1.5.0",
+ "encoding_rs",
+ "futures-util",
+ "http 1.0.0",
+ "httparse",
+ "log",
+ "memchr",
+ "mime",
+ "spin 0.9.8",
+ "version_check",
+]
+
+[[package]]
+name = "multimap"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a"
+
+[[package]]
+name = "native-tls"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[package]]
+name = "ndarray"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32"
+dependencies = [
+ "matrixmultiply",
+ "num-complex",
+ "num-integer",
+ "num-traits",
+ "rawpointer",
+]
+
+[[package]]
+name = "ndarray-stats"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af5a8477ac96877b5bd1fd67e0c28736c12943aba24eda92b127e036b0c8f400"
+dependencies = [
+ "indexmap 1.9.3",
+ "itertools 0.10.5",
+ "ndarray",
+ "noisy_float",
+ "num-integer",
+ "num-traits",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nibble_vec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
+dependencies = [
+ "bitflags 1.3.2",
+ "cc",
+ "cfg-if",
+ "libc",
+ "memoffset 0.6.5",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.2"
+source = "git+https://github.com/vectordotdev/nix.git?branch=memfd/gnu/musl#6c53a918d2d5bf4307fd60a19d9e10913ae71eeb"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "static_assertions",
+]
+
+[[package]]
+name = "nix"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "cfg_aliases",
+ "libc",
+]
+
+[[package]]
+name = "nkeys"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aad178aad32087b19042ee36dfd450b73f5f934fbfb058b59b198684dfec4c47"
+dependencies = [
+ "byteorder",
+ "data-encoding",
+ "ed25519",
+ "ed25519-dalek",
+ "getrandom 0.2.12",
+ "log",
+ "rand 0.8.5",
+ "signatory",
+]
+
+[[package]]
+name = "nkeys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6eafe79aeb8066a6f1f84dc44c03ae97403013e946bf0b13626468e0d5e26c6f"
+dependencies = [
+ "byteorder",
+ "data-encoding",
+ "ed25519",
+ "ed25519-dalek",
+ "getrandom 0.2.12",
+ "log",
+ "rand 0.8.5",
+ "signatory",
+]
+
+[[package]]
+name = "no-proxy"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b41e7479dc3678ea792431e04bafd62a31879035f4a5fa707602df062f58c77"
+dependencies = [
+ "cidr-utils 0.5.11",
+ "serde",
+]
+
+[[package]]
+name = "no-std-compat"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c"
+
+[[package]]
+name = "noisy_float"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "978fe6e6ebc0bf53de533cd456ca2d9de13de13856eda1518a285d7705a213af"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "nonzero_ext"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21"
+
+[[package]]
+name = "notify"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
+dependencies = [
+ "bitflags 2.4.1",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "log",
+ "mio",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.3.7"
+source = "git+https://github.com/MSxDOS/ntapi.git?rev=24fc1e47677fc9f6e38e5f154e6011dc9b270da6#24fc1e47677fc9f6e38e5f154e6011dc9b270da6"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "nu-ansi-term"
+version = "0.46.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
+dependencies = [
+ "overload",
+ "winapi",
+]
+
+[[package]]
+name = "nuid"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc895af95856f929163a0aa20c26a78d26bfdc839f51b9d5aa7a5b79e52b7e83"
+dependencies = [
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint-dig"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151"
+dependencies = [
+ "byteorder",
+ "lazy_static",
+ "libm",
+ "num-integer",
+ "num-iter",
+ "num-traits",
+ "rand 0.8.5",
+ "smallvec",
+ "zeroize",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "num-format"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3"
+dependencies = [
+ "arrayvec",
+ "itoa",
+ "num-bigint",
+]
+
+[[package]]
+name = "num-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-iter"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12ac428b1cb17fce6f731001d307d351ec70a6d202fc2e60f7d4c5e42d8f4f07"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a"
+dependencies = [
+ "autocfg",
+ "libm",
+]
+
+[[package]]
+name = "num_cpus"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
+dependencies = [
+ "hermit-abi 0.3.3",
+ "libc",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+dependencies = [
+ "num_enum_derive 0.5.11",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1"
+dependencies = [
+ "num_enum_derive 0.6.1",
+]
+
+[[package]]
+name = "num_enum"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845"
+dependencies = [
+ "num_enum_derive 0.7.2",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6"
+dependencies = [
+ "proc-macro-crate 1.3.1",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "num_enum_derive"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
+dependencies = [
+ "proc-macro-crate 2.0.0",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "oauth2"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c38841cdd844847e3e7c8d29cef9dcfed8877f8f56f9071f77843ecf3baf937f"
+dependencies = [
+ "base64 0.13.1",
+ "chrono",
+ "getrandom 0.2.12",
+ "http 0.2.9",
+ "rand 0.8.5",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_path_to_error",
+ "sha2",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+]
+
+[[package]]
+name = "object"
+version = "0.32.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ofb"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cc40678e045ff4eb1666ea6c0f994b133c31f673c09aed292261b6d5b6963a0"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
+
+[[package]]
+name = "onig"
+version = "6.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "once_cell",
+ "onig_sys",
+]
+
+[[package]]
+name = "onig_sys"
+version = "69.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
+
+[[package]]
+name = "oorandom"
+version = "11.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "opendal"
+version = "0.45.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52c17c077f23fa2d2c25d9d22af98baa43b8bbe2ef0de80cf66339aa70401467"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "backon",
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "chrono",
+ "flagset",
+ "futures 0.3.30",
+ "getrandom 0.2.12",
+ "http 0.2.9",
+ "log",
+ "md-5",
+ "once_cell",
+ "percent-encoding",
+ "quick-xml",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tokio",
+ "uuid",
+]
+
+[[package]]
+name = "openidconnect"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62d6050f6a84b81f23c569f5607ad883293e57491036e318fafe6fc4895fadb1"
+dependencies = [
+ "base64 0.13.1",
+ "chrono",
+ "dyn-clone",
+ "ed25519-dalek",
+ "hmac",
+ "http 0.2.9",
+ "itertools 0.10.5",
+ "log",
+ "oauth2",
+ "p256",
+ "p384",
+ "rand 0.8.5",
+ "rsa",
+ "serde",
+ "serde-value",
+ "serde_derive",
+ "serde_json",
+ "serde_path_to_error",
+ "serde_plain",
+ "serde_with 3.7.0",
+ "sha2",
+ "subtle",
+ "thiserror",
+ "url",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "foreign-types",
+ "libc",
+ "once_cell",
+ "openssl-macros",
+ "openssl-sys",
+]
+
+[[package]]
+name = "openssl-macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "openssl-probe"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
+
+[[package]]
+name = "openssl-src"
+version = "300.2.3+3.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cff92b6f71555b61bb9315f7c64da3ca43d87531622120fea0195fc761b4843"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.101"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff"
+dependencies = [
+ "cc",
+ "libc",
+ "openssl-src",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "opentelemetry-proto"
+version = "0.1.0"
+dependencies = [
+ "bytes 1.5.0",
+ "chrono",
+ "hex",
+ "ordered-float 4.2.0",
+ "prost 0.12.3",
+ "prost-build 0.12.3",
+ "tonic",
+ "tonic-build 0.10.2",
+ "vector-core",
+ "vector-lookup",
+ "vrl",
+]
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "ordered-float"
+version = "2.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordered-float"
+version = "3.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "ordered-float"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a76df7075c7d4d01fdcb46c912dd17fba5b60c78ea480b475f2b6ab6f666584e"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "os_info"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6cbb46d5d01695d7a1fb8be5f0d1968bd2b2b8ba1d1b3e7062ce2a0593e57af1"
+dependencies = [
+ "log",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "outref"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a"
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "owo-colors"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f"
+dependencies = [
+ "supports-color",
+]
+
+[[package]]
+name = "p256"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
+dependencies = [
+ "ecdsa",
+ "elliptic-curve",
+ "primeorder",
+ "sha2",
+]
+
+[[package]]
+name = "p384"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209"
+dependencies = [
+ "ecdsa",
+ "elliptic-curve",
+ "primeorder",
+ "sha2",
+]
+
+[[package]]
+name = "pad"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2ad9b889f1b12e0b9ee24db044b5129150d5eada288edc800f789928dc8c0e3"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "parking"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
+
+[[package]]
+name = "parking_lot"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
+dependencies = [
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.9.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall 0.4.1",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "parse-zoneinfo"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "passt"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13242a5ce97f39a8095d03c8b273e91d09f2690c0b7d69a2af844941115bab24"
+
+[[package]]
+name = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[package]]
+name = "pbkdf2"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e9ed2178b0575fff8e1b83b58ba6f75e727aafac2e1b6c795169ad3b17eb518"
+
+[[package]]
+name = "pem"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
+dependencies = [
+ "base64 0.13.1",
+]
+
+[[package]]
+name = "pem"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3163d2912b7c3b52d651a055f2c7eec9ba5cd22d26ef75b8dd3a59980b185923"
+dependencies = [
+ "base64 0.21.7",
+ "serde",
+]
+
+[[package]]
+name = "pem-rfc7468"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412"
+dependencies = [
+ "base64ct",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pest"
+version = "2.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "219c0dcc30b6a27553f9cc242972b67f75b60eb0db71f0b5462f38b058c41546"
+dependencies = [
+ "memchr",
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e1288dbd7786462961e69bfd4df7848c1e37e8b74303dbdab82c3a9cdd2809"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1381c29a877c6d34b8c176e734f35d7f7f5b3adaefe940cb4d1bb7af94678e2e"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0934d6907f148c22a3acbda520c7eed243ad7487a30f51f6ce52b58b7077a8a"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.2.5",
+]
+
+[[package]]
+name = "phf"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
+dependencies = [
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a"
+dependencies = [
+ "phf_generator",
+ "phf_shared 0.11.2",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
+dependencies = [
+ "phf_shared 0.11.2",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[package]]
+name = "pin-utils"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+
+[[package]]
+name = "pinky-swear"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d894b67aa7a4bf295db5e85349078c604edaa6fa5c8721e8eca3c7729a27f2ac"
+dependencies = [
+ "doc-comment",
+ "flume 0.10.14",
+ "parking_lot",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "piper"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+dependencies = [
+ "atomic-waker",
+ "fastrand 2.0.1",
+ "futures-io",
+]
+
+[[package]]
+name = "pkcs1"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f"
+dependencies = [
+ "der",
+ "pkcs8",
+ "spki",
+]
+
+[[package]]
+name = "pkcs8"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
+dependencies = [
+ "der",
+ "spki",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "platforms"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "989d43012e2ca1c4a02507c67282691a0a3207f9dc67cec596b43fe925b3d325"
+
+[[package]]
+name = "platforms"
+version = "3.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4503fa043bf02cee09a9582e9554b4c6403b2ef55e4612e96561d294419429f8"
+
+[[package]]
+name = "plotters"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45"
+dependencies = [
+ "num-traits",
+ "plotters-backend",
+ "plotters-svg",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "plotters-backend"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609"
+
+[[package]]
+name = "plotters-svg"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab"
+dependencies = [
+ "plotters-backend",
+]
+
+[[package]]
+name = "polling"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+dependencies = [
+ "autocfg",
+ "bitflags 1.3.2",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "polling"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e53b6af1f60f36f8c2ac2aad5459d75a5a9b4be1e8cdd40264f315d78193e531"
+dependencies = [
+ "cfg-if",
+ "concurrent-queue",
+ "pin-project-lite",
+ "rustix 0.38.31",
+ "tracing 0.1.40",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "poly1305"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf"
+dependencies = [
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bccab0e7fd7cc19f820a1c8c91720af652d0c88dc9664dd72aef2614f04af3b"
+
+[[package]]
+name = "portpicker"
+version = "1.0.0"
+dependencies = [
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "postgres-openssl"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1de0ea6504e07ca78355a6fb88ad0f36cafe9e696cbc6717f16a207f3a60be72"
+dependencies = [
+ "futures 0.3.30",
+ "openssl",
+ "tokio",
+ "tokio-openssl",
+ "tokio-postgres",
+]
+
+[[package]]
+name = "postgres-protocol"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b6c5ef183cd3ab4ba005f1ca64c21e8bd97ce4699cfea9e8d9a2c4958ca520"
+dependencies = [
+ "base64 0.21.7",
+ "byteorder",
+ "bytes 1.5.0",
+ "fallible-iterator",
+ "hmac",
+ "md-5",
+ "memchr",
+ "rand 0.8.5",
+ "sha2",
+ "stringprep",
+]
+
+[[package]]
+name = "postgres-types"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8d2234cdee9408b523530a9b6d2d6b373d1db34f6a8e51dc03ded1828d7fb67c"
+dependencies = [
+ "bytes 1.5.0",
+ "chrono",
+ "fallible-iterator",
+ "postgres-protocol",
+]
+
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "precomputed-hash"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+
+[[package]]
+name = "predicates"
+version = "3.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6dfc28575c2e3f19cb3c73b93af36460ae898d426eba6fc15b9bd2a5220758a0"
+dependencies = [
+ "anstyle",
+ "difflib",
+ "itertools 0.11.0",
+ "predicates-core",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "prettydiff"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ff1fec61082821f8236cf6c0c14e8172b62ce8a72a0eedc30d3b247bb68dc11"
+dependencies = [
+ "ansi_term",
+ "pad",
+ "prettytable-rs",
+ "structopt",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.1.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prettyplease"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae005bd773ab59b4725093fd7df83fd7892f7d8eafb48dbd7de6e024e4215f9d"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "prettytable-rs"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a"
+dependencies = [
+ "csv",
+ "encode_unicode 1.0.0",
+ "is-terminal",
+ "lazy_static",
+ "term",
+ "unicode-width",
+]
+
+[[package]]
+name = "primeorder"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6"
+dependencies = [
+ "elliptic-curve",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+dependencies = [
+ "once_cell",
+ "toml_edit 0.19.15",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
+dependencies = [
+ "toml_edit 0.20.7",
+]
+
+[[package]]
+name = "proc-macro-error"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
+dependencies = [
+ "proc-macro-error-attr",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "version_check",
+]
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro-nested"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
+
+[[package]]
+name = "proc-macro2"
+version = "0.4.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
+dependencies = [
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "prometheus-parser"
+version = "0.1.0"
+dependencies = [
+ "indexmap 2.2.5",
+ "nom",
+ "num_enum 0.7.2",
+ "prost 0.12.3",
+ "prost-build 0.12.3",
+ "prost-types 0.12.3",
+ "snafu 0.7.5",
+ "vector-common",
+]
+
+[[package]]
+name = "proptest"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf"
+dependencies = [
+ "bit-set",
+ "bit-vec",
+ "bitflags 2.4.1",
+ "lazy_static",
+ "num-traits",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "rand_xorshift",
+ "regex-syntax 0.8.2",
+ "rusty-fork",
+ "tempfile",
+ "unarray",
+]
+
+[[package]]
+name = "proptest-derive"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf16337405ca084e9c78985114633b6827711d22b9e6ef6c6c0d665eb3f0b6e"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
+dependencies = [
+ "bytes 1.5.0",
+ "prost-derive 0.11.9",
+]
+
+[[package]]
+name = "prost"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a"
+dependencies = [
+ "bytes 1.5.0",
+ "prost-derive 0.12.3",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
+dependencies = [
+ "bytes 1.5.0",
+ "heck 0.4.1",
+ "itertools 0.10.5",
+ "lazy_static",
+ "log",
+ "multimap",
+ "petgraph",
+ "prettyplease 0.1.25",
+ "prost 0.11.9",
+ "prost-types 0.11.9",
+ "regex",
+ "syn 1.0.109",
+ "tempfile",
+ "which 4.4.2",
+]
+
+[[package]]
+name = "prost-build"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c55e02e35260070b6f716a2423c2ff1c3bb1642ddca6f99e1f26d06268a0e2d2"
+dependencies = [
+ "bytes 1.5.0",
+ "heck 0.4.1",
+ "itertools 0.11.0",
+ "log",
+ "multimap",
+ "once_cell",
+ "petgraph",
+ "prettyplease 0.2.15",
+ "prost 0.12.3",
+ "prost-types 0.12.3",
+ "regex",
+ "syn 2.0.53",
+ "tempfile",
+ "which 4.4.2",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
+dependencies = [
+ "anyhow",
+ "itertools 0.10.5",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "prost-derive"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e"
+dependencies = [
+ "anyhow",
+ "itertools 0.11.0",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "prost-reflect"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ae9372e3227f3685376a0836e5c248611eafc95a0be900d44bc6cdf225b700f"
+dependencies = [
+ "base64 0.21.7",
+ "once_cell",
+ "prost 0.12.3",
+ "prost-types 0.12.3",
+ "serde",
+ "serde-value",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
+dependencies = [
+ "prost 0.11.9",
+]
+
+[[package]]
+name = "prost-types"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "193898f59edcf43c26227dcd4c8427f00d99d61e95dcde58dabd49fa291d470e"
+dependencies = [
+ "prost 0.12.3",
+]
+
+[[package]]
+name = "psl"
+version = "2.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc74a6e6a56708be1cf5c4c4d1a0dc21d33b2dcaa24e731b7fa9c287ce4f916f"
+dependencies = [
+ "psl-types",
+]
+
+[[package]]
+name = "psl-types"
+version = "2.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac"
+
+[[package]]
+name = "ptr_meta"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
+dependencies = [
+ "ptr_meta_derive",
+]
+
+[[package]]
+name = "ptr_meta_derive"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "pulsar"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d21c6a837986cf25d22ac5b951c267d95808f3c830ff009c2879fff259a0268"
+dependencies = [
+ "async-trait",
+ "bit-vec",
+ "bytes 1.5.0",
+ "chrono",
+ "crc",
+ "data-url",
+ "flate2",
+ "futures 0.3.30",
+ "futures-io",
+ "futures-timer",
+ "log",
+ "lz4",
+ "native-tls",
+ "nom",
+ "oauth2",
+ "openidconnect",
+ "pem 3.0.2",
+ "prost 0.11.9",
+ "prost-build 0.11.9",
+ "prost-derive 0.11.9",
+ "rand 0.8.5",
+ "regex",
+ "serde",
+ "serde_json",
+ "snap",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-util",
+ "url",
+ "uuid",
+ "zstd 0.12.4",
+]
+
+[[package]]
+name = "quad-rand"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658fa1faf7a4cc5f057c9ee5ef560f717ad9d8dc66d975267f709624d6e1ab88"
+
+[[package]]
+name = "quanta"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab"
+dependencies = [
+ "crossbeam-utils",
+ "libc",
+ "mach2",
+ "once_cell",
+ "raw-cpuid 10.7.0",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "quanta"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca0b7bac0b97248c40bb77288fc52029cf1459c0461ea1b05ee32ccf011de2c"
+dependencies = [
+ "crossbeam-utils",
+ "libc",
+ "once_cell",
+ "raw-cpuid 11.0.1",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "quick-error"
+version = "1.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
+
+[[package]]
+name = "quick-xml"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "quickcheck"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "588f6378e4dd99458b60ec275b4477add41ce4fa9f64dcba6f15adccb19b50d6"
+dependencies = [
+ "env_logger 0.8.4",
+ "log",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "quickcheck_macros"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b22a693222d716a9587786f37ac3f6b4faedb5b80c23914e7303ff5a1d8016e9"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "quote"
+version = "0.6.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
+dependencies = [
+ "proc-macro2 0.4.30",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
+dependencies = [
+ "proc-macro2 1.0.79",
+]
+
+[[package]]
+name = "quoted_printable"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79ec282e887b434b68c18fe5c121d38e72a5cf35119b59e54ec5b992ea9c8eb0"
+
+[[package]]
+name = "radium"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
+
+[[package]]
+name = "radix_trie"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd"
+dependencies = [
+ "endian-type",
+ "nibble_vec",
+]
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom 0.1.16",
+ "libc",
+ "rand_chacha 0.2.2",
+ "rand_core 0.5.1",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+]
+
+[[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 0.5.1",
+]
+
+[[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 0.6.4",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom 0.1.16",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom 0.2.12",
+]
+
+[[package]]
+name = "rand_distr"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
+dependencies = [
+ "num-traits",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "rand_xorshift"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d25bf25ec5ae4a3f1b92f929810509a2f53d7dca2f50b794ff57e3face536c8f"
+dependencies = [
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "ratatui"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcb12f8fbf6c62614b0d56eb352af54f6a22410c3b079eb53ee93c7b97dd31d8"
+dependencies = [
+ "bitflags 2.4.1",
+ "cassowary",
+ "compact_str",
+ "crossterm",
+ "indoc",
+ "itertools 0.12.1",
+ "lru",
+ "paste",
+ "stability",
+ "strum 0.26.1",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "raw-cpuid"
+version = "10.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "raw-cpuid"
+version = "11.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d86a7c4638d42c44551f4791a20e687dbb4c3de1f33c43dd71e355cd429def1"
+dependencies = [
+ "bitflags 2.4.1",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[package]]
+name = "rawpointer"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
+
+[[package]]
+name = "rayon"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+dependencies = [
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+dependencies = [
+ "crossbeam-deque",
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "rdkafka"
+version = "0.35.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f16c17f411935214a5870e40aff9291f8b40a73e97bf8de29e5959c473d5ef33"
+dependencies = [
+ "futures-channel",
+ "futures-util",
+ "libc",
+ "log",
+ "rdkafka-sys",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "slab",
+ "tokio",
+]
+
+[[package]]
+name = "rdkafka-sys"
+version = "4.7.0+2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55e0d2f9ba6253f6ec72385e453294f8618e9e15c2c6aba2a5c01ccf9622d615"
+dependencies = [
+ "cmake",
+ "libc",
+ "libz-sys",
+ "num_enum 0.5.11",
+ "openssl-sys",
+ "pkg-config",
+ "sasl2-sys",
+ "zstd-sys",
+]
+
+[[package]]
+name = "reactor-trait"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "438a4293e4d097556730f4711998189416232f009c137389e0f961d2bc0ddc58"
+dependencies = [
+ "async-trait",
+ "futures-core",
+ "futures-io",
+]
+
+[[package]]
+name = "redis"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c580d9cbbe1d1b479e8d67cf9daf6a62c957e6846048408b80b43ac3f6af84cd"
+dependencies = [
+ "arc-swap",
+ "async-trait",
+ "bytes 1.5.0",
+ "combine 4.6.6",
+ "futures 0.3.30",
+ "futures-util",
+ "itoa",
+ "native-tls",
+ "percent-encoding",
+ "pin-project-lite",
+ "ryu",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-retry",
+ "tokio-util",
+ "url",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+dependencies = [
+ "bitflags 1.3.2",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.12",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
+name = "regex"
+version = "1.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata 0.4.4",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b7fa1134405e2ec9353fd416b17f8dacd46c473d7d3fd1cf202706a14eb792a"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "regex-lite"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b661b2f27137bdbc16f00eda72866a92bb28af1753ffbd56744fb6e2e9cd8e"
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "relative-path"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c707298afce11da2efef2f600116fa93ffa7a032b5d7b628aa17711ec81383ca"
+
+[[package]]
+name = "rend"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd"
+dependencies = [
+ "bytecheck",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78bf93c4af7a8bb7d879d51cebe797356ff10ae8516ace542b5182d9dcac10b2"
+dependencies = [
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2 0.3.26",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "hyper 0.14.28",
+ "hyper-rustls 0.24.2",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls 0.21.8",
+ "rustls-pemfile 1.0.3",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "sync_wrapper",
+ "system-configuration",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-rustls 0.24.1",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "resolv-conf"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00"
+dependencies = [
+ "hostname",
+ "quick-error",
+]
+
+[[package]]
+name = "retain_mut"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c31b5c4033f8fdde8700e4657be2c497e7288f01515be52168c631e2e4d4086"
+
+[[package]]
+name = "rfc6979"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+dependencies = [
+ "hmac",
+ "subtle",
+]
+
+[[package]]
+name = "ring"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
+dependencies = [
+ "cc",
+ "getrandom 0.2.12",
+ "libc",
+ "spin 0.9.8",
+ "untrusted",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rkyv"
+version = "0.7.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0"
+dependencies = [
+ "bitvec",
+ "bytecheck",
+ "bytes 1.5.0",
+ "hashbrown 0.12.3",
+ "ptr_meta",
+ "rend",
+ "rkyv_derive",
+ "seahash",
+ "tinyvec",
+ "uuid",
+]
+
+[[package]]
+name = "rkyv_derive"
+version = "0.7.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "rle-decode-fast"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422"
+
+[[package]]
+name = "rmp"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f9860a6cc38ed1da53456442089b4dfa35e7cedaa326df63017af88385e6b20"
+dependencies = [
+ "byteorder",
+ "num-traits",
+ "paste",
+]
+
+[[package]]
+name = "rmp-serde"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bffea85eea980d8a74453e5d02a8d93028f3c34725de143085a844ebe953258a"
+dependencies = [
+ "byteorder",
+ "rmp",
+ "serde",
+]
+
+[[package]]
+name = "rmpv"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e0e0214a4a2b444ecce41a4025792fc31f77c7bb89c46d253953ea8c65701ec"
+dependencies = [
+ "num-traits",
+ "rmp",
+ "serde",
+ "serde_bytes",
+]
+
+[[package]]
+name = "roaring"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1c77081a55300e016cb86f2864415b7518741879db925b8d488a0ee0d2da6bf"
+
+[[package]]
+name = "roxmltree"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cd14fd5e3b777a7422cca79358c57a8f6e3a703d9ac187448d0daf220c2407f"
+
+[[package]]
+name = "rsa"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86ef35bf3e7fe15a53c4ab08a998e42271eab13eb0db224126bc7bc4c4bad96d"
+dependencies = [
+ "const-oid",
+ "digest",
+ "num-bigint-dig",
+ "num-integer",
+ "num-traits",
+ "pkcs1",
+ "pkcs8",
+ "rand_core 0.6.4",
+ "signature",
+ "spki",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rstest"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97eeab2f3c0a199bc4be135c36c924b6590b88c377d416494288c14f2db30199"
+dependencies = [
+ "futures 0.3.30",
+ "futures-timer",
+ "rstest_macros",
+ "rustc_version 0.4.0",
+]
+
+[[package]]
+name = "rstest_macros"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d428f8247852f894ee1be110b375111b586d4fa431f6c46e64ba5a0dcccbe605"
+dependencies = [
+ "cfg-if",
+ "glob",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "regex",
+ "relative-path",
+ "rustc_version 0.4.0",
+ "syn 2.0.53",
+ "unicode-ident",
+]
+
+[[package]]
+name = "rumqttc"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1568e15fab2d546f940ed3a21f48bbbd1c494c90c99c4481339364a497f94a9"
+dependencies = [
+ "bytes 1.5.0",
+ "flume 0.11.0",
+ "futures-util",
+ "log",
+ "rustls-native-certs 0.7.0",
+ "rustls-pemfile 2.1.0",
+ "rustls-webpki 0.102.2",
+ "thiserror",
+ "tokio",
+ "tokio-rustls 0.25.0",
+]
+
+[[package]]
+name = "rust_decimal"
+version = "1.33.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06676aec5ccb8fc1da723cc8c0f9a46549f21ebb8753d3915c6c41db1e7f1dc4"
+dependencies = [
+ "arrayvec",
+ "borsh",
+ "bytes 1.5.0",
+ "num-traits",
+ "rand 0.8.5",
+ "rkyv",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rustc-demangle"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc_version"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
+dependencies = [
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver 1.0.22",
+]
+
+[[package]]
+name = "rustc_version_runtime"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f"
+dependencies = [
+ "rustc_version 0.2.3",
+ "semver 0.9.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+dependencies = [
+ "bitflags 1.3.2",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.12",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki 0.101.7",
+ "sct",
+]
+
+[[package]]
+name = "rustls"
+version = "0.22.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-pki-types",
+ "rustls-webpki 0.102.2",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile 1.0.3",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile 2.1.0",
+ "rustls-pki-types",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.7",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c333bb734fcdedcea57de1602543590f545f127dc8b533324318fd492c5c70b"
+dependencies = [
+ "base64 0.21.7",
+ "rustls-pki-types",
+]
+
+[[package]]
+name = "rustls-pki-types"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ede67b28608b4c60685c7d54122d4400d90f62b40caee7700e700380a390fa8"
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.102.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610"
+dependencies = [
+ "ring",
+ "rustls-pki-types",
+ "untrusted",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
+
+[[package]]
+name = "rusty-fork"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
+dependencies = [
+ "fnv",
+ "quick-error",
+ "tempfile",
+ "wait-timeout",
+]
+
+[[package]]
+name = "rustyline"
+version = "14.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7803e8936da37efd9b6d4478277f4b2b9bb5cdb37a113e8d63222e58da647e63"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "clipboard-win",
+ "libc",
+ "log",
+ "memchr",
+ "nix 0.28.0",
+ "unicode-segmentation",
+ "unicode-width",
+ "utf8parse",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1"
+
+[[package]]
+name = "salsa20"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213"
+dependencies = [
+ "cipher",
+]
+
+[[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 = "sasl2-sys"
+version = "0.1.20+2.1.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e645bd98535fc8fd251c43ba7c7c1f9be1e0369c99b6a5ea719052a773e655c"
+dependencies = [
+ "cc",
+ "duct",
+ "krb5-src",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "scan_fmt"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b53b0a5db882a8e2fdaae0a43f7b39e7e9082389e978398bdf223a55b581248"
+dependencies = [
+ "regex",
+]
+
+[[package]]
+name = "schannel"
+version = "0.1.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
+dependencies = [
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "seahash"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
+
+[[package]]
+name = "sec1"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
+dependencies = [
+ "base16ct",
+ "der",
+ "generic-array",
+ "pkcs8",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "secrecy"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
+dependencies = [
+ "serde",
+ "zeroize",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[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"
+version = "1.0.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca"
+dependencies = [
+ "serde",
+]
+
+[[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.197"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-toml-merge"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88075e75b01384301454b1c188243552c674263c0c0c3c7ed5dd82291b20798f"
+dependencies = [
+ "toml",
+]
+
+[[package]]
+name = "serde-value"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
+dependencies = [
+ "ordered-float 2.10.1",
+ "serde",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "serde_bytes"
+version = "0.11.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.197"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "serde_derive_internals"
+version = "0.29.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "330f01ce65a3a5fe59a60c82f3c9a024b573b8a6e875bd233fe5f934e71d54e3"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.114"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0"
+dependencies = [
+ "indexmap 2.2.5",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_nanos"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ae801b7733ca8d6a2b580debe99f67f36826a0f5b8a36055dc6bc40f8d6bc71"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_path_to_error"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4beec8bce849d58d06238cb50db2e1c417cfeafa4c63f692b15c82b7c80f8335"
+dependencies = [
+ "itoa",
+ "serde",
+]
+
+[[package]]
+name = "serde_plain"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_qs"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6"
+dependencies = [
+ "percent-encoding",
+ "serde",
+ "thiserror",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde_urlencoded"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
+dependencies = [
+ "form_urlencoded",
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "678b5a069e50bf00ecd22d0cd8ddf7c236f68581b03db652061ed5eb13a312ff"
+dependencies = [
+ "serde",
+ "serde_with_macros 1.5.2",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee80b0e361bbf88fd2f6e242ccd19cfda072cb0faa6ae694ecee08199938569a"
+dependencies = [
+ "base64 0.21.7",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "indexmap 2.2.5",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "serde_with_macros 3.7.0",
+ "time",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e182d6ec6f05393cc0e5ed1bf81ad6db3a8feedf8ee515ecdd369809bcce8082"
+dependencies = [
+ "darling 0.13.4",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6561dc161a9224638a31d876ccdfefbc1df91d3f3a8342eddb35f055d48c7655"
+dependencies = [
+ "darling 0.20.8",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap 1.9.3",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.9.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0623d197252096520c6f2a5e1171ee436e5af99a5d7caa2891e55e61950e6d9"
+dependencies = [
+ "indexmap 2.2.5",
+ "itoa",
+ "ryu",
+ "serde",
+ "unsafe-libyaml",
+]
+
+[[package]]
+name = "sha-1"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "sha3"
+version = "0.10.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60"
+dependencies = [
+ "digest",
+ "keccak",
+]
+
+[[package]]
+name = "sharded-slab"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shared_child"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0d94659ad3c2137fef23ae75b03d5241d633f8acded53d672decfa0e6e0caef"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "signal-hook"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[package]]
+name = "signal-hook-mio"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af"
+dependencies = [
+ "libc",
+ "mio",
+ "signal-hook",
+]
+
+[[package]]
+name = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signatory"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1e303f8205714074f6068773f0e29527e0453937fe837c9717d066635b65f31"
+dependencies = [
+ "pkcs8",
+ "rand_core 0.6.4",
+ "signature",
+ "zeroize",
+]
+
+[[package]]
+name = "signature"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fe458c98333f9c8152221191a77e2a44e8325d0193484af2e9421a53019e57d"
+dependencies = [
+ "digest",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "simdutf8"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
+
+[[package]]
+name = "similar"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2aeaf503862c419d66959f5d7ca015337d864e9c49485d771b732e2a20453597"
+dependencies = [
+ "bstr 0.2.17",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "similar-asserts"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e041bb827d1bfca18f213411d51b665309f1afb37a04a5d1464530e13779fc0f"
+dependencies = [
+ "console",
+ "similar",
+]
+
+[[package]]
+name = "simpl"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a30f10c911c0355f80f1c2faa8096efc4a58cdf8590b954d5b395efa071c711"
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "sketches-ddsketch"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68a406c1882ed7f29cd5e248c9848a80e7cb6ae0fea82346d2746f2f941c07e1"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "smol"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13f2b548cd8447f8de0fdf1c592929f70f4fc7039a05e47404b0d096ec6987a1"
+dependencies = [
+ "async-channel",
+ "async-executor",
+ "async-fs",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "async-net",
+ "async-process",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "smpl_jwt"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fff23fdd767425c13e6f354b7443b3cc0c23097ae077e2211ef8143fa68ad014"
+dependencies = [
+ "base64 0.21.7",
+ "log",
+ "openssl",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "simpl",
+ "time",
+]
+
+[[package]]
+name = "snafu"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6"
+dependencies = [
+ "doc-comment",
+ "futures-core",
+ "pin-project",
+ "snafu-derive 0.7.5",
+]
+
+[[package]]
+name = "snafu"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d342c51730e54029130d7dc9fd735d28c4cd360f1368c01981d4f03ff207f096"
+dependencies = [
+ "snafu-derive 0.8.0",
+]
+
+[[package]]
+name = "snafu-derive"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "snafu-derive"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080c44971436b1af15d6f61ddd8b543995cf63ab8e677d46b00cc06f4ef267a0"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "snap"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
+
+[[package]]
+name = "socket2"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spki"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "stability"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebd1b177894da2a2d9120208c3386066af06a488255caabc5de8ddca22dbc3ce"
+dependencies = [
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "static_assertions_next"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7beae5182595e9a8b683fa98c4317f956c9a2dec3b9716990d20023cc60c766"
+
+[[package]]
+name = "stream-cancel"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f9fbf9bd71e4cf18d68a8a0951c0e5b7255920c0cd992c4ff51cddd6ef514a3"
+dependencies = [
+ "futures-core",
+ "pin-project",
+ "tokio",
+]
+
+[[package]]
+name = "string_cache"
+version = "0.8.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b"
+dependencies = [
+ "new_debug_unreachable",
+ "once_cell",
+ "parking_lot",
+ "phf_shared 0.10.0",
+ "precomputed-hash",
+]
+
+[[package]]
+name = "stringprep"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb41d74e231a107a1b4ee36bd1214b11285b77768d2e3824aedafa988fd36ee6"
+dependencies = [
+ "finl_unicode",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "strip-ansi-escapes"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ff8ef943b384c414f54aefa961dd2bd853add74ec75e7ac74cf91dba62bcfa"
+dependencies = [
+ "vte",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strsim"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap 2.34.0",
+ "lazy_static",
+ "structopt-derive",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcb5ae327f9cc13b68763b5749770cb9e048a99bd9dfdfa58d0cf05d5f64afe0"
+dependencies = [
+ "heck 0.3.3",
+ "proc-macro-error",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+
+[[package]]
+name = "strum"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "723b93e8addf9aa965ebe2d11da6d7540fa2283fcea14b3371ff055f7ba13f5f"
+dependencies = [
+ "strum_macros 0.26.1",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "rustversion",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a3417fc93d76740d974a01654a09777cb500428cc874ca9f45edfe0c4d4cd18"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "rustversion",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "supports-color"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6398cde53adc3c4557306a96ce67b302968513830a77a95b2b17305d9719a89"
+dependencies = [
+ "is-terminal",
+ "is_ci",
+]
+
+[[package]]
+name = "syn"
+version = "0.15.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
+dependencies = [
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "unicode-xid 0.1.0",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn_derive"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b"
+dependencies = [
+ "proc-macro-error",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "sync_wrapper"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
+
+[[package]]
+name = "syslog"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7434e95bcccce1215d30f4bf84fe8c00e8de1b9be4fb736d747ca53d36e7f96f"
+dependencies = [
+ "error-chain",
+ "hostname",
+ "libc",
+ "log",
+ "time",
+]
+
+[[package]]
+name = "syslog_loose"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "161028c00842709450114c39db3b29f44c898055ed8833bb9b535aba7facf30e"
+dependencies = [
+ "chrono",
+ "nom",
+]
+
+[[package]]
+name = "system-configuration"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
+dependencies = [
+ "bitflags 1.3.2",
+ "core-foundation",
+ "system-configuration-sys",
+]
+
+[[package]]
+name = "system-configuration-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "take_mut"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f764005d11ee5f36500a149ace24e00e3da98b0158b3e2d53a7495660d3f4d60"
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "tcp-stream"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4da30af7998f51ee1aa48ab24276fe303a697b004e31ff542b192c088d5630a5"
+dependencies = [
+ "cfg-if",
+ "native-tls",
+ "rustls-pemfile 1.0.3",
+]
+
+[[package]]
+name = "temp-dir"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd16aa9ffe15fe021c6ee3766772132c6e98dfa395a167e16864f61a9cfb71d6"
+
+[[package]]
+name = "tempfile"
+version = "3.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
+dependencies = [
+ "cfg-if",
+ "fastrand 2.0.1",
+ "rustix 0.38.31",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "term"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f"
+dependencies = [
+ "dirs-next",
+ "rustversion",
+ "winapi",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
+
+[[package]]
+name = "test-generator"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b23be2add79223226e1cb6446cb3e37506a5927089870687a0f1149bb7a073a"
+dependencies = [
+ "glob",
+ "proc-macro2 0.4.30",
+ "quote 0.6.13",
+ "syn 0.15.44",
+]
+
+[[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.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "thread_local"
+version = "1.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+]
+
+[[package]]
+name = "tikv-jemalloc-sys"
+version = "0.5.4+5.3.0-patched"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "tikv-jemallocator"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "965fe0c26be5c56c94e38ba547249074803efd52adfb66de62107d95aab3eaca"
+dependencies = [
+ "libc",
+ "tikv-jemalloc-sys",
+]
+
+[[package]]
+name = "time"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+dependencies = [
+ "deranged",
+ "itoa",
+ "js-sys",
+ "libc",
+ "num_threads",
+ "powerfmt",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
+
+[[package]]
+name = "time-macros"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "tinytemplate"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+dependencies = [
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+dependencies = [
+ "tinyvec_macros",
+]
+
+[[package]]
+name = "tinyvec_macros"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
+
+[[package]]
+name = "tokio"
+version = "1.36.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931"
+dependencies = [
+ "backtrace",
+ "bytes 1.5.0",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.6",
+ "tokio-macros",
+ "tracing 0.1.40",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-io"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57fc868aae093479e3131e3d165c93b1c7474109d13c90ec0dda2a1bbfff0674"
+dependencies = [
+ "bytes 0.4.12",
+ "futures 0.1.31",
+ "log",
+]
+
+[[package]]
+name = "tokio-io-timeout"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
+dependencies = [
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "tokio-native-tls"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
+dependencies = [
+ "native-tls",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-openssl"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ffab79df67727f6acf57f1ff743091873c24c579b1e2ce4d8f53e47ded4d63d"
+dependencies = [
+ "futures-util",
+ "openssl",
+ "openssl-sys",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-postgres"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d340244b32d920260ae7448cb72b6e238bddc3d4f7603394e7dd46ed8e48f5b8"
+dependencies = [
+ "async-trait",
+ "byteorder",
+ "bytes 1.5.0",
+ "fallible-iterator",
+ "futures-channel",
+ "futures-util",
+ "log",
+ "parking_lot",
+ "percent-encoding",
+ "phf",
+ "pin-project-lite",
+ "postgres-protocol",
+ "postgres-types",
+ "rand 0.8.5",
+ "socket2 0.5.6",
+ "tokio",
+ "tokio-util",
+ "whoami",
+]
+
+[[package]]
+name = "tokio-retry"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f"
+dependencies = [
+ "pin-project",
+ "rand 0.8.5",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
+dependencies = [
+ "rustls 0.21.8",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f"
+dependencies = [
+ "rustls 0.22.2",
+ "rustls-pki-types",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-stream"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+]
+
+[[package]]
+name = "tokio-test"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2468baabc3311435b55dd935f702f42cd1b8abb7e754fb7dfb16bd36aa88f9f7"
+dependencies = [
+ "async-stream",
+ "bytes 1.5.0",
+ "futures-core",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c"
+dependencies = [
+ "futures-util",
+ "log",
+ "rustls 0.21.8",
+ "tokio",
+ "tungstenite",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.8"
+source = "git+https://github.com/vectordotdev/tokio?branch=tokio-util-0.7.8-framed-read-continue-on-error#3747655f8f0443e13fe20da3f613ea65c23347c2"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-core",
+ "futures-io",
+ "futures-sink",
+ "pin-project-lite",
+ "slab",
+ "tokio",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "toml"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "toml_edit 0.22.8",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.19.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+dependencies = [
+ "indexmap 2.2.5",
+ "toml_datetime",
+ "winnow 0.5.18",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+dependencies = [
+ "indexmap 2.2.5",
+ "toml_datetime",
+ "winnow 0.5.18",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.22.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c12219811e0c1ba077867254e5ad62ee2c9c190b0d957110750ac0cda1ae96cd"
+dependencies = [
+ "indexmap 2.2.5",
+ "serde",
+ "serde_spanned",
+ "toml_datetime",
+ "winnow 0.6.5",
+]
+
+[[package]]
+name = "tonic"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d560933a0de61cf715926b9cac824d4c883c2c43142f787595e48280c40a1d0e"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "axum",
+ "base64 0.21.7",
+ "bytes 1.5.0",
+ "flate2",
+ "h2 0.3.26",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "hyper 0.14.28",
+ "hyper-timeout",
+ "percent-encoding",
+ "pin-project",
+ "prost 0.12.3",
+ "rustls 0.21.8",
+ "rustls-native-certs 0.6.3",
+ "rustls-pemfile 1.0.3",
+ "tokio",
+ "tokio-rustls 0.24.1",
+ "tokio-stream",
+ "tower",
+ "tower-layer",
+ "tower-service",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "tonic-build"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6fdaae4c2c638bb70fe42803a26fbd6fc6ac8c72f5c59f67ecc2a2dcabf4b07"
+dependencies = [
+ "prettyplease 0.1.25",
+ "proc-macro2 1.0.79",
+ "prost-build 0.11.9",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "tonic-build"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d021fc044c18582b9a2408cd0dd05b1596e3ecdb5c4df822bb0183545683889"
+dependencies = [
+ "prettyplease 0.2.15",
+ "proc-macro2 1.0.79",
+ "prost-build 0.12.3",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "tower"
+version = "0.4.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "indexmap 1.9.3",
+ "pin-project",
+ "pin-project-lite",
+ "rand 0.8.5",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "tower-http"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
+dependencies = [
+ "async-compression",
+ "base64 0.21.7",
+ "bitflags 2.4.1",
+ "bytes 1.5.0",
+ "futures-core",
+ "futures-util",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "http-range-header",
+ "mime",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+ "tower-layer",
+ "tower-service",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0"
+
+[[package]]
+name = "tower-service"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
+
+[[package]]
+name = "tower-test"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4546773ffeab9e4ea02b8872faa49bb616a80a7da66afc2f32688943f97efa7"
+dependencies = [
+ "futures-util",
+ "pin-project",
+ "tokio",
+ "tokio-test",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core 0.1.32",
+]
+
+[[package]]
+name = "tracing"
+version = "0.2.0"
+source = "git+https://github.com/tokio-rs/tracing?rev=e0642d949891546a3bb7e47080365ee7274f05cd#e0642d949891546a3bb7e47080365ee7274f05cd"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-core 0.2.0",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+dependencies = [
+ "once_cell",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.2.0"
+source = "git+https://github.com/tokio-rs/tracing?rev=e0642d949891546a3bb7e47080365ee7274f05cd#e0642d949891546a3bb7e47080365ee7274f05cd"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "tracing-fluent-assertions"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12de1a8c6bcfee614305e836308b596bbac831137a04c61f7e5b0b0bf2cfeaf6"
+dependencies = [
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2"
+dependencies = [
+ "futures 0.3.30",
+ "futures-task",
+ "pin-project",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "tracing-futures"
+version = "0.3.0"
+source = "git+https://github.com/tokio-rs/tracing?rev=e0642d949891546a3bb7e47080365ee7274f05cd#e0642d949891546a3bb7e47080365ee7274f05cd"
+dependencies = [
+ "pin-project-lite",
+ "tracing 0.2.0",
+]
+
+[[package]]
+name = "tracing-limit"
+version = "0.1.0"
+dependencies = [
+ "criterion",
+ "dashmap",
+ "mock_instant",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "tracing-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core 0.1.32",
+]
+
+[[package]]
+name = "tracing-serde"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
+dependencies = [
+ "serde",
+ "tracing-core 0.1.32",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "sharded-slab",
+ "thread_local",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-log",
+ "tracing-serde",
+]
+
+[[package]]
+name = "tracing-tower"
+version = "0.1.0"
+source = "git+https://github.com/tokio-rs/tracing?rev=e0642d949891546a3bb7e47080365ee7274f05cd#e0642d949891546a3bb7e47080365ee7274f05cd"
+dependencies = [
+ "futures 0.3.30",
+ "tower-service",
+ "tracing 0.2.0",
+ "tracing-futures 0.3.0",
+]
+
+[[package]]
+name = "treediff"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303"
+dependencies = [
+ "serde_json",
+]
+
+[[package]]
+name = "trust-dns-proto"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d"
+dependencies = [
+ "async-trait",
+ "cfg-if",
+ "data-encoding",
+ "enum-as-inner 0.4.0",
+ "futures-channel",
+ "futures-io",
+ "futures-util",
+ "idna 0.2.3",
+ "ipnet",
+ "lazy_static",
+ "log",
+ "rand 0.8.5",
+ "smallvec",
+ "thiserror",
+ "tinyvec",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "trust-dns-resolver"
+version = "0.21.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558"
+dependencies = [
+ "cfg-if",
+ "futures-util",
+ "ipconfig",
+ "lazy_static",
+ "log",
+ "lru-cache",
+ "parking_lot",
+ "resolv-conf",
+ "smallvec",
+ "thiserror",
+ "tokio",
+ "trust-dns-proto",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "tungstenite"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9"
+dependencies = [
+ "byteorder",
+ "bytes 1.5.0",
+ "data-encoding",
+ "http 0.2.9",
+ "httparse",
+ "log",
+ "rand 0.8.5",
+ "sha1",
+ "thiserror",
+ "url",
+ "utf-8",
+]
+
+[[package]]
+name = "twox-hash"
+version = "1.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675"
+dependencies = [
+ "cfg-if",
+ "static_assertions",
+]
+
+[[package]]
+name = "typed-builder"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89851716b67b937e393b3daa8423e67ddfc4bbbf1654bcf05488e95e0828db0c"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "typed-builder"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34085c17941e36627a879208083e25d357243812c30e7d7387c3b954f30ade16"
+dependencies = [
+ "typed-builder-macro",
+]
+
+[[package]]
+name = "typed-builder-macro"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f03ca4cb38206e2bef0700092660bb74d696f808514dae47fa1467cbfe26e96e"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "typetag"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "661d18414ec032a49ece2d56eee03636e43c4e8d577047ab334c0ba892e29aaf"
+dependencies = [
+ "erased-serde",
+ "inventory",
+ "once_cell",
+ "serde",
+ "typetag-impl",
+]
+
+[[package]]
+name = "typetag-impl"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac73887f47b9312552aa90ef477927ff014d63d1920ca8037c6c1951eab64bb1"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "tz-rs"
+version = "0.6.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33851b15c848fad2cf4b105c6bb66eb9512b6f6c44a4b13f57c53c73c707e2b4"
+dependencies = [
+ "const_fn",
+]
+
+[[package]]
+name = "uaparser"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf694e7b0434d4fad6c879e984e8fdc3a62f5533c3d421762244f9e9d03f6927"
+dependencies = [
+ "derive_more",
+ "lazy_static",
+ "regex",
+ "serde",
+ "serde_derive",
+ "serde_yaml 0.8.26",
+]
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "unarray"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
+
+[[package]]
+name = "unicase"
+version = "2.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
+
+[[package]]
+name = "unicode-width"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
+
+[[package]]
+name = "unicode-xid"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[package]]
+name = "universal-hash"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
+dependencies = [
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "unreachable"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
+dependencies = [
+ "void",
+]
+
+[[package]]
+name = "unsafe-libyaml"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
+
+[[package]]
+name = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "uom"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1ee6bfd0a27bf614353809a035cf6880b74239ec6c5e39a7b2860ca16809137"
+dependencies = [
+ "num-rational",
+ "num-traits",
+ "typenum",
+]
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna 0.5.0",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "utf8-width"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3"
+
+[[package]]
+name = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[package]]
+name = "uuid"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0"
+dependencies = [
+ "atomic",
+ "getrandom 0.2.12",
+ "rand 0.8.5",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
+
+[[package]]
+name = "vdev"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "cached",
+ "chrono",
+ "clap 4.5.3",
+ "clap-verbosity-flag",
+ "clap_complete",
+ "confy",
+ "directories",
+ "dunce",
+ "glob",
+ "hex",
+ "indexmap 2.2.5",
+ "indicatif",
+ "itertools 0.12.1",
+ "log",
+ "once_cell",
+ "os_info",
+ "owo-colors",
+ "paste",
+ "regex",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_yaml 0.9.33",
+ "sha2",
+ "tempfile",
+ "toml",
+]
+
+[[package]]
+name = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[package]]
+name = "vector"
+version = "0.37.1"
+dependencies = [
+ "apache-avro",
+ "approx",
+ "arc-swap",
+ "arr_macro",
+ "assert_cmd",
+ "async-compression",
+ "async-graphql",
+ "async-graphql-warp",
+ "async-nats",
+ "async-stream",
+ "async-trait",
+ "aws-config",
+ "aws-credential-types",
+ "aws-sdk-cloudwatch",
+ "aws-sdk-cloudwatchlogs",
+ "aws-sdk-elasticsearch",
+ "aws-sdk-firehose",
+ "aws-sdk-kinesis",
+ "aws-sdk-s3",
+ "aws-sdk-sns",
+ "aws-sdk-sqs",
+ "aws-sdk-sts",
+ "aws-sigv4",
+ "aws-smithy-async",
+ "aws-smithy-http",
+ "aws-smithy-runtime",
+ "aws-smithy-runtime-api",
+ "aws-smithy-types",
+ "aws-types",
+ "axum",
+ "azure_core",
+ "azure_identity",
+ "azure_storage",
+ "azure_storage_blobs",
+ "base64 0.22.0",
+ "bloomy",
+ "bollard",
+ "bytes 1.5.0",
+ "bytesize",
+ "chrono",
+ "chrono-tz",
+ "cidr-utils 0.6.1",
+ "clap 4.5.3",
+ "colored",
+ "console-subscriber",
+ "criterion",
+ "crossterm",
+ "csv",
+ "derivative",
+ "dirs-next",
+ "dnsmsg-parser",
+ "dyn-clone",
+ "encoding_rs",
+ "enum_dispatch",
+ "exitcode",
+ "fakedata",
+ "flate2",
+ "futures 0.3.30",
+ "futures-util",
+ "glob",
+ "goauth",
+ "governor",
+ "greptimedb-client",
+ "grok",
+ "h2 0.4.4",
+ "hash_hasher",
+ "hashbrown 0.14.3",
+ "headers",
+ "heim",
+ "hex",
+ "hickory-proto",
+ "hostname",
+ "http 0.2.9",
+ "http-body 0.4.5",
+ "http-serde",
+ "hyper 0.14.28",
+ "hyper-openssl",
+ "hyper-proxy",
+ "indexmap 2.2.5",
+ "indoc",
+ "infer 0.15.0",
+ "inventory",
+ "ipnet",
+ "itertools 0.12.1",
+ "k8s-openapi 0.18.0",
+ "kube",
+ "lapin",
+ "libc",
+ "listenfd",
+ "logfmt",
+ "loki-logproto",
+ "lru",
+ "maxminddb",
+ "md-5",
+ "metrics",
+ "metrics-tracing-context",
+ "mlua",
+ "mongodb",
+ "nix 0.26.2",
+ "nkeys 0.4.0",
+ "nom",
+ "notify",
+ "num-format",
+ "number_prefix",
+ "once_cell",
+ "opendal",
+ "openssl",
+ "openssl-probe",
+ "openssl-src",
+ "ordered-float 4.2.0",
+ "paste",
+ "percent-encoding",
+ "pin-project",
+ "portpicker",
+ "postgres-openssl",
+ "proptest",
+ "prost 0.12.3",
+ "prost-build 0.12.3",
+ "prost-reflect",
+ "prost-types 0.12.3",
+ "pulsar",
+ "quickcheck",
+ "rand 0.8.5",
+ "rand_distr",
+ "ratatui",
+ "rdkafka",
+ "redis",
+ "regex",
+ "reqwest",
+ "rmp-serde",
+ "rmpv",
+ "roaring",
+ "rstest",
+ "rumqttc",
+ "seahash",
+ "semver 1.0.22",
+ "serde",
+ "serde-toml-merge",
+ "serde_bytes",
+ "serde_json",
+ "serde_with 3.7.0",
+ "serde_yaml 0.9.33",
+ "sha2",
+ "similar-asserts",
+ "smallvec",
+ "smpl_jwt",
+ "snafu 0.7.5",
+ "snap",
+ "socket2 0.5.6",
+ "stream-cancel",
+ "strip-ansi-escapes",
+ "syslog",
+ "tempfile",
+ "test-generator",
+ "tikv-jemallocator",
+ "tokio",
+ "tokio-openssl",
+ "tokio-postgres",
+ "tokio-stream",
+ "tokio-test",
+ "tokio-tungstenite",
+ "tokio-util",
+ "toml",
+ "tonic",
+ "tonic-build 0.10.2",
+ "tower",
+ "tower-http",
+ "tower-test",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-futures 0.2.5",
+ "tracing-limit",
+ "tracing-subscriber",
+ "tracing-tower",
+ "typetag",
+ "url",
+ "uuid",
+ "vector-lib",
+ "vector-vrl-functions",
+ "vrl",
+ "warp",
+ "windows-service",
+ "wiremock",
+ "zstd 0.13.0",
+]
+
+[[package]]
+name = "vector-api-client"
+version = "0.1.2"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "chrono",
+ "clap 4.5.3",
+ "futures 0.3.30",
+ "graphql_client",
+ "indoc",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tokio",
+ "tokio-stream",
+ "tokio-tungstenite",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "vector-buffers"
+version = "0.1.0"
+dependencies = [
+ "async-recursion",
+ "async-stream",
+ "async-trait",
+ "bytecheck",
+ "bytes 1.5.0",
+ "clap 4.5.3",
+ "crc32fast",
+ "criterion",
+ "crossbeam-queue",
+ "crossbeam-utils",
+ "derivative",
+ "fslock",
+ "futures 0.3.30",
+ "hdrhistogram",
+ "memmap2",
+ "metrics",
+ "metrics-tracing-context",
+ "metrics-util",
+ "num-traits",
+ "once_cell",
+ "paste",
+ "pin-project",
+ "proptest",
+ "quickcheck",
+ "rand 0.8.5",
+ "rkyv",
+ "serde",
+ "serde_yaml 0.9.33",
+ "snafu 0.7.5",
+ "temp-dir",
+ "tokio",
+ "tokio-test",
+ "tokio-util",
+ "tracing 0.1.40",
+ "tracing-fluent-assertions",
+ "tracing-subscriber",
+ "vector-common",
+ "vector-config",
+ "vector-config-common",
+ "vector-config-macros",
+]
+
+[[package]]
+name = "vector-common"
+version = "0.1.0"
+dependencies = [
+ "async-stream",
+ "bytes 1.5.0",
+ "chrono",
+ "chrono-tz",
+ "crossbeam-utils",
+ "derivative",
+ "futures 0.3.30",
+ "indexmap 2.2.5",
+ "metrics",
+ "nom",
+ "ordered-float 4.2.0",
+ "paste",
+ "pin-project",
+ "quickcheck",
+ "quickcheck_macros",
+ "ryu",
+ "serde",
+ "serde_json",
+ "smallvec",
+ "snafu 0.7.5",
+ "stream-cancel",
+ "tokio",
+ "tracing 0.1.40",
+ "vector-config",
+ "vector-config-common",
+ "vector-config-macros",
+ "vrl",
+]
+
+[[package]]
+name = "vector-config"
+version = "0.1.0"
+dependencies = [
+ "assert-json-diff",
+ "chrono",
+ "chrono-tz",
+ "encoding_rs",
+ "http 0.2.9",
+ "indexmap 2.2.5",
+ "inventory",
+ "no-proxy",
+ "num-traits",
+ "serde",
+ "serde_json",
+ "serde_with 3.7.0",
+ "snafu 0.7.5",
+ "toml",
+ "tracing 0.1.40",
+ "url",
+ "vector-config-common",
+ "vector-config-macros",
+ "vector-core",
+ "vrl",
+]
+
+[[package]]
+name = "vector-config-common"
+version = "0.1.0"
+dependencies = [
+ "convert_case 0.6.0",
+ "darling 0.20.8",
+ "once_cell",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "serde",
+ "serde_json",
+ "syn 2.0.53",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "vector-config-macros"
+version = "0.1.0"
+dependencies = [
+ "darling 0.20.8",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "serde",
+ "serde_derive_internals",
+ "syn 2.0.53",
+ "vector-config",
+ "vector-config-common",
+]
+
+[[package]]
+name = "vector-core"
+version = "0.1.0"
+dependencies = [
+ "async-graphql",
+ "async-trait",
+ "base64 0.22.0",
+ "bitmask-enum",
+ "bytes 1.5.0",
+ "chrono",
+ "chrono-tz",
+ "criterion",
+ "crossbeam-utils",
+ "db-key",
+ "dyn-clone",
+ "enrichment",
+ "enumflags2",
+ "env-test-util",
+ "float_eq",
+ "futures 0.3.30",
+ "futures-util",
+ "headers",
+ "http 0.2.9",
+ "hyper-proxy",
+ "indexmap 2.2.5",
+ "ipnet",
+ "metrics",
+ "metrics-tracing-context",
+ "metrics-util",
+ "mlua",
+ "ndarray",
+ "ndarray-stats",
+ "no-proxy",
+ "noisy_float",
+ "once_cell",
+ "openssl",
+ "ordered-float 4.2.0",
+ "parking_lot",
+ "pin-project",
+ "proptest",
+ "prost 0.12.3",
+ "prost-build 0.12.3",
+ "prost-types 0.12.3",
+ "quanta 0.12.2",
+ "quickcheck",
+ "quickcheck_macros",
+ "rand 0.8.5",
+ "rand_distr",
+ "regex",
+ "ryu",
+ "schannel",
+ "security-framework",
+ "serde",
+ "serde_json",
+ "serde_with 3.7.0",
+ "serde_yaml 0.9.33",
+ "similar-asserts",
+ "smallvec",
+ "snafu 0.7.5",
+ "socket2 0.5.6",
+ "tokio",
+ "tokio-openssl",
+ "tokio-stream",
+ "tokio-test",
+ "tokio-util",
+ "toml",
+ "tonic",
+ "tracing 0.1.40",
+ "tracing-core 0.1.32",
+ "tracing-subscriber",
+ "typetag",
+ "url",
+ "vector-buffers",
+ "vector-common",
+ "vector-config",
+ "vector-config-common",
+ "vector-config-macros",
+ "vector-lookup",
+ "vrl",
+]
+
+[[package]]
+name = "vector-lib"
+version = "0.1.0"
+dependencies = [
+ "codecs",
+ "enrichment",
+ "file-source",
+ "opentelemetry-proto",
+ "prometheus-parser",
+ "vector-api-client",
+ "vector-buffers",
+ "vector-common",
+ "vector-config",
+ "vector-core",
+ "vector-lookup",
+ "vector-stream",
+]
+
+[[package]]
+name = "vector-lookup"
+version = "0.1.0"
+dependencies = [
+ "proptest",
+ "proptest-derive",
+ "serde",
+ "vector-config",
+ "vector-config-macros",
+ "vrl",
+]
+
+[[package]]
+name = "vector-stream"
+version = "0.1.0"
+dependencies = [
+ "async-stream",
+ "futures 0.3.30",
+ "futures-util",
+ "pin-project",
+ "proptest",
+ "rand 0.8.5",
+ "rand_distr",
+ "tokio",
+ "tokio-util",
+ "tower",
+ "tracing 0.1.40",
+ "twox-hash",
+ "vector-common",
+ "vector-core",
+]
+
+[[package]]
+name = "vector-vrl-cli"
+version = "0.1.0"
+dependencies = [
+ "clap 4.5.3",
+ "vector-vrl-functions",
+ "vrl",
+]
+
+[[package]]
+name = "vector-vrl-functions"
+version = "0.1.0"
+dependencies = [
+ "vrl",
+]
+
+[[package]]
+name = "vector-vrl-tests"
+version = "0.1.0"
+dependencies = [
+ "ansi_term",
+ "chrono",
+ "chrono-tz",
+ "clap 4.5.3",
+ "enrichment",
+ "glob",
+ "prettydiff",
+ "regex",
+ "serde",
+ "serde_json",
+ "tikv-jemallocator",
+ "tracing-subscriber",
+ "vector-vrl-functions",
+ "vrl",
+]
+
+[[package]]
+name = "vector-vrl-web-playground"
+version = "0.1.0"
+dependencies = [
+ "cargo_toml",
+ "enrichment",
+ "getrandom 0.2.12",
+ "gloo-utils",
+ "serde",
+ "serde-wasm-bindgen",
+ "vector-vrl-functions",
+ "vrl",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[package]]
+name = "vrl"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81f1e48235e8db47d5010723fc32c38b09820a1a2a57eaea77b089493a375f52"
+dependencies = [
+ "aes",
+ "ansi_term",
+ "arbitrary",
+ "base16",
+ "base64 0.22.0",
+ "bytes 1.5.0",
+ "cbc",
+ "cfb-mode",
+ "cfg-if",
+ "chacha20poly1305",
+ "charset",
+ "chrono",
+ "chrono-tz",
+ "cidr-utils 0.6.1",
+ "clap 4.5.3",
+ "codespan-reporting",
+ "community-id",
+ "crypto_secretbox",
+ "csv",
+ "ctr",
+ "data-encoding",
+ "digest",
+ "dns-lookup",
+ "dyn-clone",
+ "exitcode",
+ "flate2",
+ "grok",
+ "hex",
+ "hmac",
+ "hostname",
+ "iana-time-zone",
+ "idna 0.5.0",
+ "indexmap 2.2.5",
+ "indoc",
+ "itertools 0.12.1",
+ "lalrpop",
+ "lalrpop-util",
+ "md-5",
+ "mlua",
+ "nom",
+ "ofb",
+ "once_cell",
+ "onig",
+ "ordered-float 4.2.0",
+ "paste",
+ "peeking_take_while",
+ "percent-encoding",
+ "pest",
+ "pest_derive",
+ "prettydiff",
+ "prettytable-rs",
+ "prost 0.12.3",
+ "prost-reflect",
+ "psl",
+ "quickcheck",
+ "quoted_printable",
+ "rand 0.8.5",
+ "regex",
+ "roxmltree",
+ "rust_decimal",
+ "rustyline",
+ "seahash",
+ "serde",
+ "serde_json",
+ "sha-1",
+ "sha2",
+ "sha3",
+ "snafu 0.8.0",
+ "snap",
+ "strip-ansi-escapes",
+ "syslog_loose",
+ "termcolor",
+ "thiserror",
+ "tracing 0.1.40",
+ "uaparser",
+ "url",
+ "utf8-width",
+ "uuid",
+ "webbrowser",
+ "woothee",
+ "zstd 0.13.0",
+]
+
+[[package]]
+name = "vsimd"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
+
+[[package]]
+name = "vte"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5022b5fbf9407086c180e9557be968742d839e68346af7792b8592489732197"
+dependencies = [
+ "utf8parse",
+ "vte_generate_state_changes",
+]
+
+[[package]]
+name = "vte_generate_state_changes"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+]
+
+[[package]]
+name = "wait-timeout"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "waker-fn"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
+[[package]]
+name = "want"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
+dependencies = [
+ "try-lock",
+]
+
+[[package]]
+name = "warp"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1e92e22e03ff1230c03a1a8ee37d2f89cd489e2e541b7550d6afad96faed169"
+dependencies = [
+ "bytes 1.5.0",
+ "futures-channel",
+ "futures-util",
+ "headers",
+ "http 0.2.9",
+ "hyper 0.14.28",
+ "log",
+ "mime",
+ "mime_guess",
+ "percent-encoding",
+ "pin-project",
+ "rustls-pemfile 1.0.3",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-stream",
+ "tokio-tungstenite",
+ "tokio-util",
+ "tower-service",
+ "tracing 0.1.40",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasite"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-futures"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
+dependencies = [
+ "quote 1.0.35",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
+
+[[package]]
+name = "wasm-streams"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "web-sys"
+version = "0.3.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "webbrowser"
+version = "0.8.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82b2391658b02c27719fc5a0a73d6e696285138e8b12fba9d4baa70451023c71"
+dependencies = [
+ "core-foundation",
+ "home",
+ "jni",
+ "log",
+ "ndk-context",
+ "objc",
+ "raw-window-handle",
+ "url",
+ "web-sys",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[package]]
+name = "which"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix 0.38.31",
+]
+
+[[package]]
+name = "which"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bf3ea8596f3a0dd5980b46430f2058dfe2c36a27ccfbb1845d6fbfcd9ba6e14"
+dependencies = [
+ "either",
+ "home",
+ "once_cell",
+ "rustix 0.38.31",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "whoami"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fec781d48b41f8163426ed18e8fc2864c12937df9ce54c88ede7bd47270893e"
+dependencies = [
+ "redox_syscall 0.4.1",
+ "wasite",
+ "web-sys",
+]
+
+[[package]]
+name = "widestring"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c"
+
+[[package]]
+name = "widestring"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
+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 = "windows-core"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-service"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd9db37ecb5b13762d95468a2fc6009d4b2c62801243223aabd44fca13ad13c8"
+dependencies = [
+ "bitflags 1.3.2",
+ "widestring 1.0.2",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.45.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.2",
+ "windows_aarch64_msvc 0.42.2",
+ "windows_i686_gnu 0.42.2",
+ "windows_i686_msvc 0.42.2",
+ "windows_x86_64_gnu 0.42.2",
+ "windows_x86_64_gnullvm 0.42.2",
+ "windows_x86_64_msvc 0.42.2",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+dependencies = [
+ "windows_aarch64_gnullvm 0.48.5",
+ "windows_aarch64_msvc 0.48.5",
+ "windows_i686_gnu 0.48.5",
+ "windows_i686_msvc 0.48.5",
+ "windows_x86_64_gnu 0.48.5",
+ "windows_x86_64_gnullvm 0.48.5",
+ "windows_x86_64_msvc 0.48.5",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.42.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
+[[package]]
+name = "winnow"
+version = "0.5.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "176b6138793677221d420fd2f0aeeced263f197688b36484660da767bca2fa32"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winnow"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winreg"
+version = "0.50.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wiremock"
+version = "0.5.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13a3a53eaf34f390dd30d7b1b078287dd05df2aa2e21a589ccb80f5c7253c2e9"
+dependencies = [
+ "assert-json-diff",
+ "async-trait",
+ "base64 0.21.7",
+ "deadpool",
+ "futures 0.3.30",
+ "futures-timer",
+ "http-types",
+ "hyper 0.14.28",
+ "log",
+ "once_cell",
+ "regex",
+ "serde",
+ "serde_json",
+ "tokio",
+]
+
+[[package]]
+name = "woothee"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "896174c6a4779d4d7d4523dd27aef7d46609eda2497e370f6c998325c6bf6971"
+dependencies = [
+ "lazy_static",
+ "regex",
+]
+
+[[package]]
+name = "wyz"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+dependencies = [
+ "tap",
+]
+
+[[package]]
+name = "xmlparser"
+version = "0.13.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4"
+
+[[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 = "zerocopy"
+version = "0.7.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a"
+dependencies = [
+ "proc-macro2 1.0.79",
+ "quote 1.0.35",
+ "syn 2.0.53",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+
+[[package]]
+name = "zstd"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c"
+dependencies = [
+ "zstd-safe 6.0.6",
+]
+
+[[package]]
+name = "zstd"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bffb3309596d527cfcba7dfc6ed6052f1d39dfbd7c867aa2e865e4a449c10110"
+dependencies = [
+ "zstd-safe 7.0.0",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "6.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581"
+dependencies = [
+ "libc",
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-safe"
+version = "7.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43747c7422e2924c11144d5229878b98180ef8b06cca4ab5af37afc8a8d8ea3e"
+dependencies = [
+ "zstd-sys",
+]
+
+[[package]]
+name = "zstd-sys"
+version = "2.0.9+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/tools/misc/vector/default.nix b/nixpkgs/pkgs/tools/misc/vector/default.nix
new file mode 100644
index 000000000000..db6446ec26cf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vector/default.nix
@@ -0,0 +1,139 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, rustPlatform
+, pkg-config
+, openssl
+, protobuf
+, rdkafka
+, oniguruma
+, zstd
+, rust-jemalloc-sys
+, rust-jemalloc-sys-unprefixed
+, Security
+, libiconv
+, coreutils
+, CoreServices
+, SystemConfiguration
+, tzdata
+, cmake
+, perl
+, git
+  # nix has a problem with the `?` in the feature list
+  # enabling kafka will produce a vector with no features at all
+, enableKafka ? false
+  # TODO investigate adding various "vendor-*"
+  # "disk-buffer" is using leveldb TODO: investigate how useful
+  # it would be, perhaps only for massive scale?
+, features ? ([ "api" "api-client" "enrichment-tables" "sinks" "sources" "sources-dnstap" "transforms" "component-validation-runner" ]
+    # the second feature flag is passed to the rdkafka dependency
+    # building on linux fails without this feature flag (both x86_64 and AArch64)
+    ++ lib.optionals enableKafka [ "rdkafka?/gssapi-vendored" ]
+    ++ lib.optional stdenv.hostPlatform.isUnix "unix")
+, nixosTests
+, nix-update-script
+}:
+
+let
+  pname = "vector";
+  version = "0.37.1";
+in
+rustPlatform.buildRustPackage {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "vectordotdev";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-wRXwgy+UY2z5fIWpQbDxRti54GE357WMGWXM/xKjz18=";
+  };
+
+  patches = [
+    # Enable LTO to bring down binary size
+    # Adapted from https://github.com/vectordotdev/vector/pull/20034
+    ./vector-lto.patch
+  ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "greptime-proto-0.1.0" = "sha256-Q8xr6qN6SAGGK0W96WuNRdQ5/8iNlruqzhXD6xq3Ua8=";
+      "greptimedb-client-0.1.0" = "sha256-evL8Q2Ikct9s0r4DWTgSP/8g4XTishuJHmwRoCfQFbU=";
+      "heim-0.1.0-rc.1" = "sha256-TFgLR5zb/oqceVOH4mIOvFFY/HMOLSo8VI5Eh9KP60E=";
+      "nix-0.26.2" = "sha256-uquYvRT56lhupkrESpxwKEimRFhmYvri10n3dj0f2yg=";
+      "ntapi-0.3.7" = "sha256-G6ZCsa3GWiI/FeGKiK9TWkmTxen7nwpXvm5FtjNtjWU=";
+      "tokio-util-0.7.8" = "sha256-HCvtfohOoa1ZjD4s7QLDbIV4fe/MVBKtgM1QQX7gGKQ=";
+      "tracing-0.2.0" = "sha256-YAxeEofFA43PX2hafh3RY+C81a2v6n1fGzYz2FycC3M=";
+    };
+  };
+
+  nativeBuildInputs = [ pkg-config cmake perl git rustPlatform.bindgenHook ];
+  buildInputs =
+    [ oniguruma openssl protobuf rdkafka zstd ]
+    ++ lib.optionals stdenv.isLinux [ rust-jemalloc-sys-unprefixed ]
+    ++ lib.optionals stdenv.isDarwin [ rust-jemalloc-sys Security libiconv coreutils CoreServices SystemConfiguration ];
+
+  # needed for internal protobuf c wrapper library
+  PROTOC = "${protobuf}/bin/protoc";
+  PROTOC_INCLUDE = "${protobuf}/include";
+  RUSTONIG_SYSTEM_LIBONIG = true;
+
+  TZDIR = "${tzdata}/share/zoneinfo";
+
+  # needed to dynamically link rdkafka
+  CARGO_FEATURE_DYNAMIC_LINKING=1;
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = features;
+
+  # TODO investigate compilation failure for tests
+  # there are about 100 tests failing (out of 1100) for version 0.22.0
+  doCheck = false;
+
+  checkFlags = [
+    # tries to make a network access
+    "--skip=sinks::loki::tests::healthcheck_grafana_cloud"
+
+    # flaky on linux-aarch64
+    "--skip=kubernetes::api_watcher::tests::test_stream_errors"
+
+    # flaky on linux-x86_64
+    "--skip=sources::socket::test::tcp_with_tls_intermediate_ca"
+    "--skip=sources::host_metrics::cgroups::tests::generates_cgroups_metrics"
+    "--skip=sources::aws_kinesis_firehose::tests::aws_kinesis_firehose_forwards_events"
+    "--skip=sources::aws_kinesis_firehose::tests::aws_kinesis_firehose_forwards_events_gzip_request"
+    "--skip=sources::aws_kinesis_firehose::tests::handles_acknowledgement_failure"
+  ];
+
+  # recent overhauls of DNS support in 0.9 mean that we try to resolve
+  # vector.dev during the checkPhase, which obviously isn't going to work.
+  # these tests in the DNS module are trivial though, so stubbing them out is
+  # fine IMO.
+  #
+  # the geoip transform yields maxmindb.so which contains references to rustc.
+  # neither figured out why the shared object is included in the output
+  # (it doesn't seem to be a runtime dependencies of the geoip transform),
+  # nor do I know why it depends on rustc.
+  # However, in order for the closure size to stay at a reasonable level,
+  # transforms-geoip is patched out of Cargo.toml for now - unless explicitly asked for.
+  postPatch = ''
+    substituteInPlace ./src/dns.rs \
+      --replace "#[tokio::test]" ""
+  '';
+
+  passthru = {
+    inherit features;
+    tests = { inherit (nixosTests) vector; };
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A high-performance observability data pipeline";
+    homepage = "https://github.com/vectordotdev/vector";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ thoughtpolice happysalada ];
+    platforms = with platforms; all;
+    mainProgram = "vector";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vector/vector-lto.patch b/nixpkgs/pkgs/tools/misc/vector/vector-lto.patch
new file mode 100644
index 000000000000..a795c1f16d25
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vector/vector-lto.patch
@@ -0,0 +1,12 @@
+--- ./Cargo.toml	2024-04-10 00:01:12.033806583 +0100
++++ ./Cargo.toml	2024-04-10 00:01:48.324228125 +0100
+@@ -45,7 +45,8 @@ path = "tests/e2e/mod.rs"
+ # This results in roughly a 5% reduction in performance when compiling locally vs when
+ # compiled via the CI pipeline.
+ [profile.release]
+-debug = false # Do not include debug symbols in the executable.
++lto = true
++codegen-units = 1
+ 
+ [profile.bench]
+ debug = true
diff --git a/nixpkgs/pkgs/tools/misc/veikk-linux-driver-gui/default.nix b/nixpkgs/pkgs/tools/misc/veikk-linux-driver-gui/default.nix
new file mode 100644
index 000000000000..28e3194f56ec
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/veikk-linux-driver-gui/default.nix
@@ -0,0 +1,33 @@
+{ lib, mkDerivation, fetchFromGitHub, qmake }:
+
+mkDerivation rec {
+  pname = "veikk-linux-driver-gui";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "jlam55555";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "02g1q79kwjlzg95w38a1d7nxvcry8xcsvhax2js4c7xqvzhkki5j";
+  };
+
+  nativeBuildInputs = [ qmake ];
+
+  postBuild = ''
+    make all clean
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp veikk-linux-driver-gui $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Configuration tool for the VEIKK Linux driver";
+    homepage = "https://github.com/jlam55555/veikk-linux-driver-gui/";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ nicbk ];
+    mainProgram = "veikk-linux-driver-gui";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/via/default.nix b/nixpkgs/pkgs/tools/misc/via/default.nix
new file mode 100644
index 000000000000..ffcd456e75ff
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/via/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "via";
+  version = "3.0.0";
+  src = fetchurl {
+    url = "https://github.com/the-via/releases/releases/download/v${version}/via-${version}-linux.AppImage";
+    name = "via-${version}-linux.AppImage";
+    sha256 = "sha256-+uTvmrqHK7L5VA/lUHCZZeRYPUrcVA+vjG7venxuHhs=";
+  };
+  appimageContents = appimageTools.extractType2 { inherit pname version src; };
+in
+appimageTools.wrapType2 {
+  inherit pname version src;
+
+  profile = ''
+    # Skip prompt to add udev rule.
+    # On NixOS you can add this rule with `services.udev.packages = [ pkgs.via ];`.
+    export DISABLE_SUDO_PROMPT=1
+  '';
+
+  extraInstallCommands = ''
+    install -m 444 -D ${appimageContents}/via-nativia.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/via-nativia.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+
+    mkdir -p $out/etc/udev/rules.d
+    echo 'KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"' > $out/etc/udev/rules.d/92-viia.rules
+  '';
+
+  meta = with lib; {
+    description = "Yet another keyboard configurator";
+    homepage = "https://caniusevia.com/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ emilytrau ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "via";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vial/default.nix b/nixpkgs/pkgs/tools/misc/vial/default.nix
new file mode 100644
index 000000000000..d33a6053d574
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vial/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchurl, appimageTools }:
+let
+  version = "0.7.1";
+  pname = "Vial";
+
+  src = fetchurl {
+    url = "https://github.com/vial-kb/vial-gui/releases/download/v${version}/${pname}-v${version}-x86_64.AppImage";
+    hash = "sha256-pOcrxZ6vbnbdE/H4Kxufxm/ZovaYBXjFpVpKZYV7f3c=";
+  };
+
+  appimageContents = appimageTools.extractType2 { inherit pname version src; };
+in
+appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+    cp -r ${appimageContents}/usr/share/icons $out/share
+
+    mkdir -p $out/etc/udev/rules.d/ # https://get.vial.today/getting-started/linux-udev.html
+    echo 'KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0666", TAG+="uaccess", TAG+="udev-acl"' > $out/etc/udev/rules.d/92-viia.rules
+  '';
+
+  meta = {
+    description = "An Open-source GUI and QMK fork for configuring your keyboard in real time";
+    homepage = "https://get.vial.today";
+    license = lib.licenses.gpl2Plus;
+    mainProgram = "Vial";
+    maintainers = with lib.maintainers; [ kranzes ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/viddy/default.nix b/nixpkgs/pkgs/tools/misc/viddy/default.nix
new file mode 100644
index 000000000000..280cf82c4b41
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/viddy/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "viddy";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "sachaos";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-iF5b5e3HPT3GJLRDxz9wN1U5rO9Ey51Cpw4p2zjffTI=";
+  };
+
+  vendorHash = "sha256-/lx2D2FIByRnK/097M4SQKRlmqtPTvbFo1dwbThJ5Fs=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X"
+    "main.version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "A modern watch command";
+    homepage = "https://github.com/sachaos/viddy";
+    license = licenses.mit;
+    maintainers = with maintainers; [ j-hui ];
+    mainProgram = "viddy";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimer/default.nix b/nixpkgs/pkgs/tools/misc/vimer/default.nix
new file mode 100644
index 000000000000..684ecfc5fe38
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimer/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  version = "0.2.0";
+  pname = "vimer";
+
+  src = fetchFromGitHub {
+    owner = "susam";
+    repo = "vimer";
+    rev = version;
+    sha256 = "01qhr3i7wasbaxvms39c81infpry2vk0nzh7r5m5b9p713p0phsi";
+  };
+
+  installPhase = ''
+    mkdir $out/bin/ -p
+    cp vimer $out/bin/
+    chmod +x $out/bin/vimer
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/susam/vimer";
+    description = ''
+      A convenience wrapper for gvim/mvim --remote(-tab)-silent to open files
+      in an existing instance of GVim or MacVim.
+    '';
+    license = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.all;
+    mainProgram = "vimer";
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/vimpager/build.nix b/nixpkgs/pkgs/tools/misc/vimpager/build.nix
new file mode 100644
index 000000000000..a610a461656c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimpager/build.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv
+, fetchFromGitHub
+, coreutils
+, sharutils
+, version
+, sha256
+}:
+
+stdenv.mkDerivation {
+  inherit version;
+  pname = "vimpager";
+
+  src = fetchFromGitHub {
+    inherit sha256;
+
+    owner  = "rkitover";
+    repo   = "vimpager";
+    rev    = version;
+  };
+
+  nativeBuildInputs = [ sharutils ]; # for uuencode
+  buildInputs = [ coreutils ];
+
+  makeFlags = [
+    "PREFIX=$(out)"
+  ];
+
+  buildPhase = ''
+    sed -i 's,/bin/cat,${coreutils}/bin/cat,g' vimpager
+    make
+  '';
+
+
+  meta = with lib; {
+    description = "Use Vim as PAGER";
+    homepage    = "https://www.vim.org/scripts/script.php?script_id=1723";
+    license     = with licenses; [ bsd2 mit vim ];
+    platforms   = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimpager/default.nix b/nixpkgs/pkgs/tools/misc/vimpager/default.nix
new file mode 100644
index 000000000000..1b1512db3cfe
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimpager/default.nix
@@ -0,0 +1,6 @@
+{ callPackage }:
+
+callPackage ./build.nix {
+  version = "2.06";
+  sha256  = "05yr7j72bw64nx7a0y6w9fjmz54zd4g46fn1qjfbbqvbc19fjpl8";
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimpager/latest.nix b/nixpkgs/pkgs/tools/misc/vimpager/latest.nix
new file mode 100644
index 000000000000..4ea8d5be57fd
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimpager/latest.nix
@@ -0,0 +1,10 @@
+{ callPackage, runtimeShell }:
+
+(callPackage ./build.nix {
+  version = "a4da4dfac44d1bbc6986c5c76fea45a60ebdd8e5";
+  sha256  = "0gcjpw2q263hh8w2sjvq3f3k2d28qpkkv0jnl8hw1l7v604i8zxg";
+}).overrideAttrs (old: {
+  postPatch = old.postPatch or "" + ''
+    echo 'echo ${runtimeShell}' > scripts/find_shell
+  '';
+})
diff --git a/nixpkgs/pkgs/tools/misc/vimv-rs/default.nix b/nixpkgs/pkgs/tools/misc/vimv-rs/default.nix
new file mode 100644
index 000000000000..2b419e5403c0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimv-rs/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchCrate, stdenv, Foundation }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vimv-rs";
+  version = "3.1.0";
+
+  src = fetchCrate {
+    inherit version;
+    crateName = "vimv";
+    hash = "sha256-jbRsgEsRYF5hlvo0jEB4jhy5jzCAXNzOsNWWyh4XULQ=";
+  };
+
+  cargoHash = "sha256-rYQxIttuGBGEkYkFtSBl8ce1I/Akm6FxeITJcaIeP6M=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Foundation ];
+
+  meta = with lib; {
+    description = "Command line utility for batch-renaming files";
+    homepage = "https://www.dmulholl.com/dev/vimv.html";
+    license = licenses.bsd0;
+    mainProgram = "vimv";
+    maintainers = with maintainers; [ zowoq ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimv/default.nix b/nixpkgs/pkgs/tools/misc/vimv/default.nix
new file mode 100644
index 000000000000..46753688ec73
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimv/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenvNoCC, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation {
+  pname = "vimv";
+  version = "unstable-2019-10-31";
+
+  src = fetchFromGitHub {
+    owner = "thameera";
+    repo = "vimv";
+    rev = "4152496c1946f68a13c648fb7e583ef23dac4eb8";
+    sha256 = "1fsrfx2gs6bqx7wk7pgcji2i2x4alqpsi66aif4kqvnpqfhcfzjd";
+  };
+
+  installPhase = ''
+    install -d $out/bin
+    install $src/vimv $out/bin/vimv
+    patchShebangs $out/bin/vimv
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thameera/vimv";
+    description = "Batch-rename files using Vim";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ kmein ];
+    mainProgram = "vimv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix b/nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix
new file mode 100644
index 000000000000..b285d18a90ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vimwiki-markdown/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, markdown
+, pygments
+}:
+
+buildPythonApplication rec {
+  version = "0.4.1";
+  pname = "vimwiki-markdown";
+
+  src = fetchPypi {
+    inherit version pname;
+    sha256 = "sha256-hJl0OTE6kHucVGOxgOZBG0noYRfxma3yZSrUWEssLN4=";
+  };
+
+  propagatedBuildInputs= [
+    markdown
+    pygments
+  ];
+
+  meta = with lib; {
+    description = "Vimwiki markdown plugin";
+    homepage = "https://github.com/WnP/vimwiki_markdown";
+    license = licenses.mit;
+    maintainers = with maintainers; [ seqizz ];
+    mainProgram = "vimwiki_markdown";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vivid/default.nix b/nixpkgs/pkgs/tools/misc/vivid/default.nix
new file mode 100644
index 000000000000..3115735ed9be
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vivid/default.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vivid";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zNsNEXj/SaJaYsYvoOGPopLhJDfLIXSs7eeZDdJrHiQ=";
+  };
+
+  cargoHash = "sha256-gtqdQuf3Ybt0PDCQw3gGAzIROq39NJKPIat0lyIPGgg=";
+
+  meta = with lib; {
+    description = "A generator for LS_COLORS with support for multiple color themes";
+    homepage = "https://github.com/sharkdp/vivid";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = [ maintainers.dtzWill ];
+    platforms = platforms.unix;
+    mainProgram = "vivid";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vix/default.nix b/nixpkgs/pkgs/tools/misc/vix/default.nix
new file mode 100644
index 000000000000..9e759536d74c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vix/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, SDL }:
+
+stdenv.mkDerivation {
+  pname = "vix";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "BatchDrake";
+    repo = "vix";
+    rev = "824b6755157a0f7430a0be0af454487d1492204d";
+    sha256 = "1y0a2sajkrsg36px21b8lgx1irf0pyj7hccyd6k806bm4zhgxw1z";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ SDL ];
+
+  meta = with lib; {
+    description = "Visual Interface heXadecimal dump ";
+    homepage = "http://actinid.org/vix/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ehmry ];
+    mainProgram = "vix";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vmtouch/default.nix b/nixpkgs/pkgs/tools/misc/vmtouch/default.nix
new file mode 100644
index 000000000000..120012019a72
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vmtouch/default.nix
@@ -0,0 +1,27 @@
+{lib, stdenv, fetchFromGitHub, perl}:
+
+stdenv.mkDerivation rec {
+  pname = "vmtouch";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "hoytech";
+    repo = "vmtouch";
+    rev = "v${version}";
+    sha256 = "08da6apzfkfjwasn4dxrlfxqfx7arl28apdzac5nvm0fhvws0dxk";
+  };
+
+  buildInputs = [perl];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "Portable file system cache diagnostics and control";
+    longDescription = "vmtouch is a tool for learning about and controlling the file system cache of unix and unix-like systems.";
+    homepage = "https://hoytech.com/vmtouch/";
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.garrison ];
+    platforms = lib.platforms.all;
+    mainProgram = "vmtouch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/void/default.nix b/nixpkgs/pkgs/tools/misc/void/default.nix
new file mode 100644
index 000000000000..1204206d34b6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/void/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "void";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "spacejam";
+    repo = "void";
+    rev = version;
+    sha256 = "08vazw4rszqscjz988k89z28skyj3grm81bm5iwknxxagmrb20fz";
+  };
+
+  # The tests are long-running and not that useful
+  doCheck = false;
+
+  cargoSha256 = "1wh1yb02w5afghd19i2s0v8mq4lq20djsljrr44xciq68bqfdcp0";
+
+  meta = with lib; {
+    description = "Terminal-based personal organizer";
+    homepage = "https://github.com/spacejam/void";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ spacekookie ];
+    mainProgram = "void";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vorbisgain/default.nix b/nixpkgs/pkgs/tools/misc/vorbisgain/default.nix
new file mode 100644
index 000000000000..e5a85049df0a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vorbisgain/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, libogg, libvorbis }:
+
+stdenv.mkDerivation rec {
+  pname = "vorbisgain";
+  version = "0.37";
+
+  src = fetchurl {
+    url = "https://sjeng.org/ftp/vorbis/vorbisgain-${version}.tar.gz";
+    sha256 = "1v1h6mhnckmvvn7345hzi9abn5z282g4lyyl4nnbqwnrr98v0vfx";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  buildInputs = [ libogg libvorbis ];
+
+  patchPhase = ''
+    chmod -v +x configure
+    configureFlags="--mandir=$out/share/man"
+  '';
+
+  meta = with lib; {
+    homepage = "https://sjeng.org/vorbisgain.html";
+    description = "A utility that corrects the volume of an Ogg Vorbis file to a predefined standardized loudness";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pSub ];
+    mainProgram = "vorbisgain";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vrc-get/default.nix b/nixpkgs/pkgs/tools/misc/vrc-get/default.nix
new file mode 100644
index 000000000000..140fba5c11f3
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vrc-get/default.nix
@@ -0,0 +1,25 @@
+{ fetchCrate, lib, rustPlatform, pkg-config, stdenv, Security, SystemConfiguration }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "vrc-get";
+  version = "1.8.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-+xbHw1DpFmapjsFoUvxUqTok8TKMebMw3gYjO/rx/iU=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security SystemConfiguration ];
+
+  cargoHash = "sha256-iuLhDcii+wXDNUsUMo8lj4kfJve5RAz7FT5Pxs9yFPQ=";
+
+  meta = with lib; {
+    description = "Command line client of VRChat Package Manager, the main feature of VRChat Creator Companion (VCC)";
+    homepage = "https://github.com/vrc-get/vrc-get";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bddvlpr ];
+    mainProgram = "vrc-get";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vsc-leetcode-cli/default.nix b/nixpkgs/pkgs/tools/misc/vsc-leetcode-cli/default.nix
new file mode 100644
index 000000000000..cb70f9a80eed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vsc-leetcode-cli/default.nix
@@ -0,0 +1,28 @@
+{ buildNpmPackage
+, fetchFromGitHub
+, lib
+}:
+
+buildNpmPackage {
+  pname = "vsc-leetcode-cli";
+  version = "unstable-2021-04-11";
+
+  src = fetchFromGitHub {
+    owner = "leetcode-tools";
+    repo = "leetcode-cli";
+    rev = "c5f6b8987185ae9f181e138f999825516240f44c";
+    hash = "sha256-N8hQqIzCUYTT5RAd0eqNynSNkGiN4omFY+8QLBemIbs=";
+  };
+
+  npmDepsHash = "sha256-t8eEnyAKeDmbmduUXuxo/WbJTced5dLeJTbtjxrrxY8=";
+
+  dontNpmBuild = true;
+
+  meta = with lib; {
+    description = "A CLI tool for leetcode.com";
+    homepage = "https://github.com/leetcode-tools/leetcode-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cpcloud ];
+    mainProgram = "leetcode";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vsh/default.nix b/nixpkgs/pkgs/tools/misc/vsh/default.nix
new file mode 100644
index 000000000000..c061a14f2e30
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vsh/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "vsh";
+  version = "0.12.2";
+
+  src = fetchFromGitHub {
+    owner = "fishi0x01";
+    repo = "vsh";
+    rev = "v${version}";
+    sha256 = "13qa9r7kij6aqhackzmsn38vyhmajgmhflnrd9rarfhhyg6ldv4z";
+  };
+
+  # vendor directory is part of repository
+  vendorHash = null;
+
+  # make sure version gets set at compile time
+  ldflags = [ "-s" "-w" "-X main.vshVersion=v${version}" ];
+
+  meta = with lib; {
+    description = "HashiCorp Vault interactive shell";
+    homepage = "https://github.com/fishi0x01/vsh";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fishi0x01 ];
+    mainProgram = "vsh";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/vtm/default.nix b/nixpkgs/pkgs/tools/misc/vtm/default.nix
new file mode 100644
index 000000000000..9cd8d5df9010
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vtm/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "vtm";
+  version = "0.9.81";
+
+  src = fetchFromGitHub {
+    owner = "netxs-group";
+    repo = "vtm";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-/PVZr87w4Iu44355U9YH51jWF+mNPZvdyfYKJvOLDJU=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  meta = {
+    description = "Terminal multiplexer with window manager and session sharing";
+    homepage = "https://vtm.netxs.online/";
+    license = lib.licenses.mit;
+    mainProgram = "vtm";
+    maintainers = with lib.maintainers; [ ahuzik ];
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/vttest/default.nix b/nixpkgs/pkgs/tools/misc/vttest/default.nix
new file mode 100644
index 000000000000..4808d4dacdbf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/vttest/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "vttest";
+  version = "20240218";
+
+  src = fetchurl {
+    urls = [
+      "https://invisible-mirror.net/archives/${pname}/${pname}-${version}.tgz"
+      "ftp://ftp.invisible-island.net/${pname}/${pname}-${version}.tgz"
+    ];
+    sha256 = "sha256-YlspL4BS/7vv59nW+9+cjR/Bi1yFVo8lRwl9l8VAvXU=";
+  };
+
+  meta = with lib; {
+    description = "Tests the compatibility of so-called 'VT100-compatible' terminals";
+    homepage = "https://invisible-island.net/vttest/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    mainProgram = "vttest";
+  };
+}
+
diff --git a/nixpkgs/pkgs/tools/misc/wacomtablet/default.nix b/nixpkgs/pkgs/tools/misc/wacomtablet/default.nix
new file mode 100644
index 000000000000..f10ccd698cb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wacomtablet/default.nix
@@ -0,0 +1,37 @@
+{ lib, mkDerivation, fetchurl, fetchpatch, extra-cmake-modules, qtx11extras,
+  plasma-workspace, libwacom, xf86_input_wacom
+}:
+
+mkDerivation rec {
+  pname = "wacomtablet";
+  version = "3.2.0";
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/${pname}-${version}.tar.xz";
+    sha256 = "197pwpl87gqlnza36bp68jvw8ww25znk08acmi8bpz7n84xfc368";
+  };
+  patches = [
+    (fetchpatch {
+      url = "https://invent.kde.org/system/wacomtablet/commit/4f73ff02b3efd5e8728b18fcf1067eca166704ee.patch";
+      sha256 = "0185gbh1vywfz8a3wnvncmzdk0dd189my4bzimkbh85rlrqq2nf8";
+    })
+  ];
+
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [
+    qtx11extras plasma-workspace
+    libwacom xf86_input_wacom
+  ];
+
+  meta = {
+    description = "KDE Configuration Module for Wacom Graphics Tablets";
+    mainProgram = "kde_wacom_tabletfinder";
+    longDescription = ''
+      This module implements a GUI for the Wacom Linux Drivers and extends it
+      with profile support to handle different button / pen layouts per profile.
+    '';
+    homepage = "https://invent.kde.org/system/wacomtablet";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.Thra11 ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wagyu/default.nix b/nixpkgs/pkgs/tools/misc/wagyu/default.nix
new file mode 100644
index 000000000000..39e1085d4c96
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wagyu/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wagyu";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "AleoHQ";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ltWNKB3DHtwVVzJyvRWj2I8rjsl7ru2i/RCO9yiQhpg=";
+  };
+
+  cargoHash = "sha256-8dbeSHN6+1jLdVA9QxNAy7Y6EX7wflpQI72kqZAEVIE=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "Rust library for generating cryptocurrency wallets";
+    homepage = "https://github.com/AleoHQ/wagyu";
+    license = with licenses; [ mit asl20 ];
+    maintainers = [ maintainers.offline ];
+    mainProgram = "wagyu";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wakapi/default.nix b/nixpkgs/pkgs/tools/misc/wakapi/default.nix
new file mode 100644
index 000000000000..372d20771f37
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wakapi/default.nix
@@ -0,0 +1,35 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "wakapi";
+  version = "2.11.1";
+
+  src = fetchFromGitHub {
+    owner = "muety";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-ZdKPaHe4miMKb6qEKdRz/fRIkTWDXp2Veu7CP1gRuQw=";
+  };
+
+  vendorHash = "sha256-pRj7Y2xp+Z2StaXRIzI5b2WAkIhR9y8T8DMXWrxOiy4=";
+
+  # Not a go module required by the project, contains development utilities
+  excludedPackages = [ "scripts" ];
+
+  # Fix up reported version
+  postPatch = ''echo ${version} > version.txt'';
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    homepage = "https://wakapi.dev/";
+    changelog = "https://github.com/muety/wakapi/releases/tag/${version}";
+    description = "A minimalist self-hosted WakaTime-compatible backend for coding statistics";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ t4ccer ];
+    mainProgram = "wakapi";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wakatime/default.nix b/nixpkgs/pkgs/tools/misc/wakatime/default.nix
new file mode 100644
index 000000000000..2ce8df19867e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wakatime/default.nix
@@ -0,0 +1,53 @@
+{ lib, buildGoModule, fetchFromGitHub, testers, wakatime }:
+
+buildGoModule rec {
+  pname = "wakatime";
+  version = "1.73.0";
+
+  src = fetchFromGitHub {
+    owner = "wakatime";
+    repo = "wakatime-cli";
+    rev = "v${version}";
+    hash = "sha256-EUZgYRsQRqtp0yiqNYex+ILSZwGEdO4BhciEgUVdui4=";
+  };
+
+  vendorHash = "sha256-SlYYrlRDBvhNm2BxemK9HzzsqM/RGH/sDQXpoGEY8rw=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/wakatime/wakatime-cli/pkg/version.Version=${version}"
+  ];
+
+  preCheck =
+    let
+      skippedTests = [
+        # Tests requiring network
+        "TestFileExperts"
+        "TestSendHeartbeats"
+        "TestSendHeartbeats_ExtraHeartbeats"
+        "TestSendHeartbeats_IsUnsavedEntity"
+        "TestSendHeartbeats_NonExistingExtraHeartbeatsEntity"
+
+        # Flaky tests
+        "TestLoadParams_ApiKey_FromVault_Err_Darwin"
+      ];
+    in
+    ''
+      # Disable tests
+      buildFlagsArray+=("-run" "[^(${builtins.concatStringsSep "|" skippedTests})]")
+    '';
+
+  passthru.tests.version = testers.testVersion {
+    package = wakatime;
+    command = "HOME=$(mktemp -d) wakatime-cli --version";
+  };
+
+  meta = with lib; {
+    homepage = "https://wakatime.com/";
+    description = "WakaTime command line interface";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ ];
+    mainProgram = "wakatime-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wasm-tools/default.nix b/nixpkgs/pkgs/tools/misc/wasm-tools/default.nix
new file mode 100644
index 000000000000..529815b12ec4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wasm-tools/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wasm-tools";
+  version = "1.206.0";
+
+  src = fetchFromGitHub {
+    owner = "bytecodealliance";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-dRCPur2EmEF5GV4PWSWAKIE+A9KfW2FbnUJVdXct3aA=";
+    fetchSubmodules = true;
+  };
+
+  # Disable cargo-auditable until https://github.com/rust-secure-code/cargo-auditable/issues/124 is solved.
+  auditable = false;
+  cargoHash = "sha256-M3wtgvZWWTlB1mmyLJNHBXwVMc5b61ie/RmSGn1ow9U=";
+  cargoBuildFlags = [ "--package" "wasm-tools" ];
+  cargoTestFlags = [ "--all" ];
+
+  meta = with lib; {
+    description = "Low level tooling for WebAssembly in Rust";
+    homepage = "https://github.com/bytecodealliance/wasm-tools";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ereslibre ];
+    mainProgram = "wasm-tools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/watchexec/default.nix b/nixpkgs/pkgs/tools/misc/watchexec/default.nix
new file mode 100644
index 000000000000..0841a6490cc4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/watchexec/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Cocoa, AppKit, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "watchexec";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-wJt8247RKS6g+O2Ho75Fn4O4w6RoxotRm0yXBRM9d8g=";
+  };
+
+  cargoHash = "sha256-JLDNAuYE7Pu9E82TD2cz9lnCWEC9bNQxd3MP4lXjo3k=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Cocoa AppKit ];
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-framework AppKit";
+
+  checkFlags = [ "--skip=help" "--skip=help_short" ];
+
+  postPatch = ''
+    rm .cargo/config
+  '';
+
+  postInstall = ''
+    installManPage doc/watchexec.1
+    installShellCompletion --zsh --name _watchexec completions/zsh
+  '';
+
+  meta = with lib; {
+    description = "Executes commands in response to file modifications";
+    homepage = "https://watchexec.github.io/";
+    license = with licenses; [ asl20 ];
+    maintainers = [ maintainers.michalrus ];
+    mainProgram = "watchexec";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/watchlog/default.nix b/nixpkgs/pkgs/tools/misc/watchlog/default.nix
new file mode 100644
index 000000000000..d942d8282379
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/watchlog/default.nix
@@ -0,0 +1,30 @@
+{
+  lib,
+  rustPlatform,
+  fetchFromGitLab,
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "watchlog";
+  version = "1.213.0";
+
+  src = fetchFromGitLab {
+    owner = "kevincox";
+    repo = "watchlog";
+    rev = "v${version}";
+    sha256 = "sha256-UNywUEhhJy2cJIwl/S9hRReoBfkzvNoN0c4mxp7PuG0=";
+  };
+
+  cargoSha256 = "sha256-HBlfSgR96XIUBj2ZyHi1qaEKP8jG9kcrxJmhIGWjfUE=";
+
+  meta = {
+    description = "Easier monitoring of live logs";
+    homepage = "https://gitlab.com/kevincox/watchlog";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ kevincox ];
+
+    # Dependency only supports Linux + Windows: https://github.com/mentaljam/standard_paths/tree/master/src
+    platforms = with lib.platforms; linux ++ windows;
+    mainProgram = "wl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wayback-machine-archiver/default.nix b/nixpkgs/pkgs/tools/misc/wayback-machine-archiver/default.nix
new file mode 100644
index 000000000000..c3ebc937eb35
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wayback-machine-archiver/default.nix
@@ -0,0 +1,32 @@
+{ lib, python3, fetchFromGitHub }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "wayback-machine-archiver";
+  version = "1.9.1";
+
+  src = fetchFromGitHub {
+    owner = "agude";
+    repo = "wayback-machine-archiver";
+    rev = "v${version}";
+    sha256 = "0dnnqx507gpj8wsx6f2ivfmha969ydayiqsvxh23p9qcixw9257x";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [ pypandoc ];
+  propagatedBuildInputs = with python3.pkgs; [ requests ];
+  nativeCheckInputs = with python3.pkgs; [ pytestCheckHook requests-mock ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace \"pytest-runner\", ""
+  '';
+
+  pythonImportsCheck = [ "wayback_machine_archiver" ];
+
+  meta = with lib; {
+    description = "A Python script to submit web pages to the Wayback Machine for archiving";
+    homepage = "https://github.com/agude/wayback-machine-archiver";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dandellion ];
+    mainProgram = "archiver";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wayback/default.nix b/nixpkgs/pkgs/tools/misc/wayback/default.nix
new file mode 100644
index 000000000000..368d1bad63f9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wayback/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, chromium
+}:
+
+buildGoModule rec {
+  pname = "wayback";
+  version = "0.19.1";
+
+  src = fetchFromGitHub {
+    owner = "wabarc";
+    repo = "wayback";
+    rev = "v${version}";
+    hash = "sha256-LIWCT0/5T52VQQK4Dy6EFmFlJ02MkfvKddN/O/5zpZc=";
+  };
+
+  vendorHash = "sha256-TC4uwJswpD5oKqF/rpXqU/h+k0jErwhguT/LkdBA83Y=";
+
+  doCheck = false;
+
+  buildInputs = [
+    chromium
+  ];
+
+  meta = with lib; {
+    description = "An archiving tool with an IM-style interface";
+    homepage = "https://docs.wabarc.eu.org";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ _2gn ];
+    # binary build for darwin is possible, but it requires chromium for runtime dependency, whose build (for nix) is not supported on darwin.
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/waylevel/default.nix b/nixpkgs/pkgs/tools/misc/waylevel/default.nix
new file mode 100644
index 000000000000..b3b1ddfeeebf
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/waylevel/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, fetchFromSourcehut
+, rustPlatform
+, wayland
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "waylevel";
+  version = "1.0.0";
+
+  src = fetchFromSourcehut {
+    owner = "~shinyzenith";
+    repo = pname;
+    rev = version;
+    hash = "sha256-T2gqiRcKrKsvwGNnWrxR1Ga/VX4AyllYn1H25aIKt5s=";
+  };
+
+  cargoHash = "sha256-gw5m1/btJ5zZP04C7BCnHqEOUBoeu0whK8W7xA+xSQo=";
+
+  postFixup = ''
+    patchelf --set-rpath ${lib.makeLibraryPath [wayland]} $out/bin/waylevel
+  '';
+
+  meta = with lib; {
+    description = "A tool to print wayland toplevels and other compositor info";
+    homepage = "https://git.sr.ht/~shinyzenith/waylevel";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dit7ya ];
+    platforms = platforms.linux;
+    mainProgram = "waylevel";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wayshot/default.nix b/nixpkgs/pkgs/tools/misc/wayshot/default.nix
new file mode 100644
index 000000000000..e8d5576af51e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wayshot/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "wayshot";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "waycrate";
+    repo = pname;
+    rev = version;
+    hash = "sha256-nUpIN4WTePtFZTmKAjv0tgj4VTdZeXjoQX6am9+M3ig=";
+  };
+
+  cargoHash = "sha256-1Y9ymodZHtxHzhudjGbkP2ohMaBMOD9K+GpUoNmzHQs=";
+
+  # tests are off as they are broken and pr for integration testing is still WIP
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A native, blazing-fast screenshot tool for wlroots based compositors such as sway and river";
+    homepage = "https://github.com/waycrate/wayshot";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ dit7ya id3v1669 ];
+    platforms = platforms.linux;
+    mainProgram = "wayshot";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/webcat/default.nix b/nixpkgs/pkgs/tools/misc/webcat/default.nix
new file mode 100644
index 000000000000..7c8c56dc86c1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/webcat/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub, asciidoctor, installShellFiles }:
+
+buildGoModule rec {
+  pname = "webcat";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "rumpelsepp";
+    repo = "webcat";
+    rev = "v${version}";
+    hash = "sha256-JyZHH8JgS3uoNVicx1wj0SAzlrXyTrpwIBZuok6buRw=";
+  };
+
+  vendorHash = "sha256-duVp/obT+5M4Dl3BAdSgRaP3+LKmS0y51loMMdoGysw=";
+
+  nativeBuildInputs = [ asciidoctor installShellFiles ];
+
+  postInstall = ''
+    make -C man man
+    installManPage man/webcat.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://rumpelsepp.org/blog/ssh-through-websocket/";
+    description = "The lightweight swiss army knife for websockets";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ montag451 ];
+    mainProgram = "webcat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/websocat/default.nix b/nixpkgs/pkgs/tools/misc/websocat/default.nix
new file mode 100644
index 000000000000..786062cfffb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/websocat/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, openssl, rustPlatform, libiconv
+, Security, makeWrapper, bash }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "websocat";
+  version = "1.13.0";
+
+  src = fetchFromGitHub {
+    owner = "vi";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-tQvI3wlNDa+S3KK4z0NFGuB/QLXlSsyipvzO0xIrBIo=";
+  };
+
+  cargoHash = "sha256-hkfFhx0y2v122ozeWMm+tu+EHSxzu/bSbCpXKIm57rQ=";
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  buildFeatures = [ "ssl" ];
+
+  # Needed to get openssl-sys to use pkg-config.
+  OPENSSL_NO_VENDOR=1;
+
+  # The wrapping is required so that the "sh-c" option of websocat works even
+  # if sh is not in the PATH (as can happen, for instance, when websocat is
+  # started as a systemd service).
+  postInstall = ''
+    wrapProgram $out/bin/websocat \
+      --prefix PATH : ${lib.makeBinPath [ bash ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/vi/websocat";
+    description = "Command-line client for WebSockets (like netcat/socat)";
+    changelog = "https://github.com/vi/websocat/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ thoughtpolice Br1ght0ne ];
+    mainProgram = "websocat";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wemux/default.nix b/nixpkgs/pkgs/tools/misc/wemux/default.nix
new file mode 100644
index 000000000000..99adf8bb0823
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wemux/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, lib, fetchFromGitHub, tmux, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "wemux";
+  version = "unstable-2021-04-16";
+
+  src = fetchFromGitHub {
+    owner = "zolrath";
+    repo = "wemux";
+    rev = "01c6541f8deceff372711241db2a13f21c4b210c";
+    sha256 = "1y962nzvs7sf720pl3wa582l6irxc8vavd0gp4ag4243b2gs4qvm";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+
+    substituteInPlace wemux \
+        --replace tmux ${tmux}/bin/tmux \
+        --replace "/usr/local/etc" "/etc"
+
+    substituteInPlace man/wemux.1 --replace "/usr/local/etc" "/etc"
+
+    install -Dm755 wemux -t $out/bin
+    installManPage man/wemux.1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/zolrath/wemux";
+    description = "Multi-user tmux made easy";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bsima ];
+    mainProgram = "wemux";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/whatsapp-chat-exporter/default.nix b/nixpkgs/pkgs/tools/misc/whatsapp-chat-exporter/default.nix
new file mode 100644
index 000000000000..9b2281d07a6f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/whatsapp-chat-exporter/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "whatsapp-chat-exporter";
+  version = "0.9.7";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "KnugiHK";
+    repo = "Whatsapp-Chat-Exporter";
+    rev = "refs/tags/${version}";
+    hash = "sha256-ySKZM7zmPKb+AHAK7IDpn07qinwz0YY8btb4KWGfy7w=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    bleach
+    jinja2
+    pycryptodome
+    javaobj-py3
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/KnugiHK/Whatsapp-Chat-Exporter";
+    description = "WhatsApp database parser";
+    changelog = "https://github.com/KnugiHK/Whatsapp-Chat-Exporter/releases/tag/${version}";
+    longDescription = ''
+      A customizable Android and iPhone WhatsApp database parser that will give
+      you the history of your WhatsApp conversations inHTML and JSON. Android
+      Backup Crypt12, Crypt14 and Crypt15 supported.
+    '';
+    license = licenses.mit;
+    mainProgram = "wtsexporter";
+    maintainers = with maintainers; [ bbenno ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wimboot/default.nix b/nixpkgs/pkgs/tools/misc/wimboot/default.nix
new file mode 100644
index 000000000000..e8d8098ad95c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wimboot/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, libbfd, zlib, libiberty }:
+
+stdenv.mkDerivation rec {
+  pname = "wimboot";
+  version = "2.7.6";
+
+  src = fetchFromGitHub {
+    owner = "ipxe";
+    repo = "wimboot";
+    rev = "v${version}";
+    sha256 = "sha256-AFPuHxcDM/cdEJ5nRJnVbPk7Deg97NeSMsg/qwytZX4=";
+  };
+
+  sourceRoot = "${src.name}/src";
+
+  buildInputs = [ libbfd zlib libiberty ];
+  makeFlags = [ "wimboot.x86_64.efi" ];
+
+  env.NIX_CFLAGS_COMPILE = toString [
+    # Needed with GCC 12
+    "-Wno-error=array-bounds"
+  ];
+
+  installPhase = ''
+    mkdir -p $out/share/wimboot/
+    cp wimboot.x86_64.efi $out/share/wimboot
+  '';
+
+  meta = with lib; {
+    homepage = "https://ipxe.org/wimboot";
+    description = "Windows Imaging Format bootloader";
+    license = licenses.gpl2Plus;
+    maintainers = teams.helsinki-systems.members;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wlc/default.nix b/nixpkgs/pkgs/tools/misc/wlc/default.nix
new file mode 100644
index 000000000000..648f05587d07
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wlc/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+with python3.pkgs;
+
+buildPythonPackage rec {
+  pname = "wlc";
+  version = "1.14";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-QMF41B6a2jMSdhjeFoRQq+K1YJAEz96msHLzX6wVqSc=";
+  };
+
+  propagatedBuildInputs = [
+    argcomplete
+    python-dateutil
+    requests
+    pyxdg
+    responses
+    twine
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "A Weblate commandline client using Weblate's REST API";
+    homepage = "https://github.com/WeblateOrg/wlc";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ paperdigits ];
+    mainProgram = "wlc";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/woeusb-ng/default.nix b/nixpkgs/pkgs/tools/misc/woeusb-ng/default.nix
new file mode 100644
index 000000000000..821eb73a4a89
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/woeusb-ng/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, wrapGAppsHook
+, p7zip
+, parted
+, grub2
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "woeusb-ng";
+  version = "0.2.12";
+
+  src = fetchFromGitHub {
+    owner = "WoeUSB";
+    repo = "WoeUSB-ng";
+    rev = "v${version}";
+    hash = "sha256-2opSiXbbk0zDRt6WqMh97iAt6/KhwNDopOas+OZn6TU=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py WoeUSB/*.py miscellaneous/* \
+      --replace "/usr/local/" "$out/" \
+      --replace "/usr/" "$out/"
+  '';
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    p7zip
+    parted
+    grub2
+    termcolor
+    wxpython
+    six
+  ];
+
+  preConfigure = ''
+    mkdir -p $out/bin $out/share/applications $out/share/polkit-1/actions
+  '';
+
+  # Unable to access the X Display, is $DISPLAY set properly?
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool to create a Windows USB stick installer from a real Windows DVD or image";
+    homepage = "https://github.com/WoeUSB/WoeUSB-ng";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ stunkymonkey ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/woeusb/default.nix b/nixpkgs/pkgs/tools/misc/woeusb/default.nix
new file mode 100644
index 000000000000..9add255896f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/woeusb/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub, installShellFiles, makeWrapper
+, coreutils, dosfstools, findutils, gawk, gnugrep, grub2_light, ncurses, ntfs3g, parted, p7zip, util-linux, wimlib, wget }:
+
+stdenv.mkDerivation rec {
+  version = "5.2.4";
+  pname = "woeusb";
+
+  src = fetchFromGitHub {
+    owner = "WoeUSB";
+    repo = "WoeUSB";
+    rev = "v${version}";
+    sha256 = "sha256-HB1E7rP/U58dyL3j6YnhF5AOGAcHqmA/ZZ5JNBDibco=";
+  };
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  postPatch = ''
+    # Emulate version smudge filter (see .gitattributes, .gitconfig).
+    for file in sbin/woeusb share/man/man1/woeusb.1; do
+      substituteInPlace "$file" \
+        --replace '@@WOEUSB_VERSION@@' '${version}'
+    done
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mv sbin/woeusb $out/bin
+    installManPage share/man/man1/woeusb.1
+
+    wrapProgram "$out/bin/woeusb" \
+      --set PATH '${lib.makeBinPath [ coreutils dosfstools findutils gawk gnugrep grub2_light ncurses ntfs3g parted p7zip util-linux wget wimlib ]}'
+
+    runHook postInstall
+  '';
+
+  doInstallCheck = true;
+
+  postInstallCheck = ''
+    # woeusb --version checks for missing runtime dependencies.
+    out_version="$("$out/bin/woeusb" --version)"
+    [ "$out_version" = '${version}' ]
+  '';
+
+  meta = with lib; {
+    description = "Create bootable USB disks from Windows ISO images";
+    homepage = "https://github.com/WoeUSB/WoeUSB";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ bjornfor ];
+    platforms = platforms.linux;
+    mainProgram = "woeusb";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/woof/default.nix b/nixpkgs/pkgs/tools/misc/woof/default.nix
new file mode 100644
index 000000000000..b73ad5615dd0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/woof/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, python3 }:
+
+stdenv.mkDerivation {
+  pname = "woof";
+  version = "2022-01-13";
+
+  src = fetchFromGitHub {
+    owner = "simon-budig";
+    repo = "woof";
+    rev = "f51e9db264118d4cbcd839348c4a6223fda49813";
+    sha256 = "sha256-tk55q2Ew2mZkQtkxjWCuNgt9t+UbjH4llIJ42IruqGY=";
+  };
+
+  propagatedBuildInputs = [ python3 ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 -t $out/bin woof
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.home.unix-ag.org/simon/woof.html";
+    description = "Web Offer One File - Command-line utility to easily exchange files over a local network";
+    license = lib.licenses.gpl2Plus;
+    platforms = lib.platforms.unix;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    mainProgram = "woof";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wootility/default.nix b/nixpkgs/pkgs/tools/misc/wootility/default.nix
new file mode 100644
index 000000000000..803ad53038e7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wootility/default.nix
@@ -0,0 +1,38 @@
+{ appimageTools
+, fetchurl
+, lib
+, xorg
+, udev
+, wooting-udev-rules
+}:
+
+appimageTools.wrapType2 rec {
+  pname = "wootility";
+  version = "4.6.15";
+
+  src = fetchurl {
+    url = "https://s3.eu-west-2.amazonaws.com/wooting-update/wootility-lekker-linux-latest/wootility-lekker-${version}.AppImage";
+    sha256 = "sha256-A/cjm9rhcgp68hbyjy7OfYPBKBcccl0OdD7MTdpEdPM=";
+  };
+
+  profile = ''
+    export LC_ALL=C.UTF-8
+  '';
+
+  multiPkgs = extraPkgs;
+  extraPkgs =
+    pkgs: (appimageTools.defaultFhsEnvArgs.multiPkgs pkgs) ++ ([
+      udev
+      wooting-udev-rules
+      xorg.libxkbfile
+    ]);
+
+  meta = with lib; {
+    homepage = "https://wooting.io/wootility";
+    description = "A customization and management software for Wooting keyboards";
+    platforms = [ "x86_64-linux" ];
+    license = "unknown";
+    maintainers = with maintainers; [ davidtwco ];
+    mainProgram = "wootility";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/writedisk/default.nix b/nixpkgs/pkgs/tools/misc/writedisk/default.nix
new file mode 100644
index 000000000000..cbceb9b7cb10
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/writedisk/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "writedisk";
+  version = "1.3.0";
+
+  src = fetchCrate {
+    inherit version;
+    pname = "writedisk";
+    sha256 = "sha256-MZFnNb8rJMu/nlH8rfnD//bhqPSkhyXucbTrwsRM9OY=";
+  };
+
+  cargoSha256 = "sha256-DGroBBozAViibbIYbtqH2SxIGLqdtyJ9XKyz7O1L05g=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "Small utility for writing a disk image to a USB drive";
+    homepage = "https://github.com/nicholasbishop/writedisk";
+    platforms = platforms.linux;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ devhell ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wsl-open/default.nix b/nixpkgs/pkgs/tools/misc/wsl-open/default.nix
new file mode 100644
index 000000000000..e4698ccbabd0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wsl-open/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "wsl-open";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner = "4U6U57";
+    repo = "wsl-open";
+    rev = "v${version}";
+    sha256 = "sha256-amqkDXdgIqGjRZMkltwco0UAI++G0RY/MxLXwtlxogE=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    install -m0755 -D wsl-open.sh $out/bin/wsl-open
+    installManPage wsl-open.1
+  '';
+
+  meta = with lib; {
+    description = "Open files with xdg-open from Windows Subsystem for Linux (WSL) in Windows applications";
+    homepage = "https://gitlab.com/4U6U57/wsl-open";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "wsl-open";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wv/default.nix b/nixpkgs/pkgs/tools/misc/wv/default.nix
new file mode 100644
index 000000000000..e1824c1d3709
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wv/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, zlib, imagemagick, libpng, glib, pkg-config, libgsf
+, libxml2, bzip2
+, autoreconfHook
+, buildPackages
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "wv";
+  version = "1.2.9";
+
+  src = fetchFromGitHub {
+    owner = "AbiWord";
+    repo = "wv";
+    rev = "wv-${builtins.replaceStrings ["."] ["-"] finalAttrs.version}";
+    hash = "sha256-xcC+/M1EzFqQFeF5Dw9qd8VIy7r8JdKMp2X/GHkFiPA=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ zlib imagemagick libpng glib libgsf libxml2 bzip2 ];
+
+  configureFlags = [
+    "PKG_CONFIG=${buildPackages.pkg-config}/bin/${buildPackages.pkg-config.targetPrefix}pkg-config"
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  enableParallelBuilding = true;
+
+  # autoreconfHook fails hard if these two files do not exist
+  postPatch = ''
+    touch AUTHORS ChangeLog
+  '';
+
+  meta = {
+    homepage = "https://github.com/AbiWord/wv";
+    description = "Converter from Microsoft Word formats to human-editable ones";
+    platforms = lib.platforms.unix;
+    license = lib.licenses.gpl2;
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/wv2/default.nix b/nixpkgs/pkgs/tools/misc/wv2/default.nix
new file mode 100644
index 000000000000..14420c1c3908
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wv2/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, pkg-config, cmake, libgsf, glib, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "wv2";
+  version = "0.4.2";
+  src = fetchurl {
+    url = "mirror://sourceforge/wvware/wv2-${version}.tar.bz2";
+    sha256 = "1p1qxr8z5bsiq8pvlina3c8c1vjcb5d96bs3zz4jj3nb20wnsawz";
+  };
+
+  patches = [ ./fix-include.patch ];
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libgsf glib libxml2 ];
+
+  env.NIX_CFLAGS_COMPILE = "-I${libxml2.dev}/include/libxml2";
+
+  meta = {
+    description = "Excellent MS Word filter lib, used in most Office suites";
+    mainProgram = "wv2-config";
+    license = lib.licenses.lgpl2;
+    homepage = "https://wvware.sourceforge.net";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wv2/fix-include.patch b/nixpkgs/pkgs/tools/misc/wv2/fix-include.patch
new file mode 100644
index 000000000000..df34d24af942
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wv2/fix-include.patch
@@ -0,0 +1,12 @@
+From: http://sourceforge.net/tracker/?func=detail&aid=3544851&group_id=10501&atid=110501
+--- a/src/olestream.h
++++ b/src/olestream.h
+@@ -23,7 +23,7 @@
+ #include "global.h"  // U8,... typedefs
+ #include <stack>
+ 
+-#include <glib/giochannel.h> // GSeekType
++#include <glib.h> // GSeekType
+ 
+ namespace wvWare {
+ 
diff --git a/nixpkgs/pkgs/tools/misc/wwcd/default.nix b/nixpkgs/pkgs/tools/misc/wwcd/default.nix
new file mode 100644
index 000000000000..0e83ada195b0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wwcd/default.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, lib
+, fetchFromSourcehut
+, autoreconfHook
+, pkg-config
+, check
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wwcd";
+  version = "unstable-2022-02-05";
+
+  src = fetchFromSourcehut {
+    owner = "~bitfehler";
+    repo = pname;
+    rev = "cdf70bb18dc60c66c074d4810cb37b9e697811e5";
+    sha256 = "sha256-laf1DEtdEs7q+rtp5Y5rb+7AGsKUv5T413CFWJiURWw=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook pkg-config check
+  ];
+
+  autoreconfFlags = [ "-if" ];
+
+  meta = with lib; {
+    description = "What would cron do? Read crontab entries from stdin and print time of next execution(s)";
+    homepage = "https://git.sr.ht/~bitfehler/wwcd";
+    license = licenses.mit;
+    maintainers = with maintainers; [ laalsaas ];
+    mainProgram = "wwcd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/wyrd/default.nix b/nixpkgs/pkgs/tools/misc/wyrd/default.nix
new file mode 100644
index 000000000000..4010a0b42d0f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/wyrd/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, ocamlPackages, ncurses, remind }:
+
+stdenv.mkDerivation rec {
+  version = "1.4.6";
+  pname = "wyrd";
+
+  src = fetchurl {
+    url = "http://pessimization.com/software/wyrd/wyrd-${version}.tar.gz";
+    sha256 = "0zlrg602q781q8dij62lwdprpfliyy9j1rqfqcz8p2wgndpivddj";
+  };
+
+  preConfigure = ''
+    substituteInPlace curses/curses.ml --replace 'pp gcc' "pp $CC"
+  '';
+
+  strictDeps = true;
+  nativeBuildInputs = [ ocamlPackages.ocaml ocamlPackages.camlp4  ];
+  buildInputs = [ ncurses remind ];
+
+  preferLocalBuild = true;
+
+  meta = with lib; {
+    description = "A text-based front-end to Remind";
+    longDescription = ''
+      Wyrd is a text-based front-end to Remind, a sophisticated
+      calendar and alarm program. Remind's power lies in its
+      programmability, and Wyrd does not hide this capability behind
+      flashy GUI dialogs. Rather, Wyrd is designed to make you more
+      efficient at editing your reminder files directly.
+    '';
+    homepage = "http://pessimization.com/software/wyrd/";
+    downloadPage = "http://pessimization.com/software/wyrd/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.prikhi ];
+    platforms = platforms.linux;
+    mainProgram = "wyrd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/x11idle/default.nix b/nixpkgs/pkgs/tools/misc/x11idle/default.nix
new file mode 100644
index 000000000000..e349b54eecae
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/x11idle/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, libXScrnSaver, libX11 }:
+
+stdenv.mkDerivation rec {
+  version = "9.2.4";
+  pname = "x11idle-org";
+
+  src = fetchurl {
+    url = "https://code.orgmode.org/bzg/org-mode/raw/release_${version}/contrib/scripts/x11idle.c";
+    sha256 = "0fc5g57xd6bmghyl214gcff0ni3idv33i3gkr339kgn1mdjljv5g";
+  };
+
+  buildInputs = [ libXScrnSaver libX11 ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    gcc -lXss -lX11 $src -o $out/bin/x11idle
+  '';
+
+  meta = with lib; {
+    description = ''
+      Compute consecutive idle time for current X11 session with millisecond resolution
+    '';
+    longDescription = ''
+      Idle time passes when the user does not act, i.e. when the user doesn't move the mouse or use the keyboard.
+    '';
+    homepage = "https://orgmode.org/";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.swflint ];
+    mainProgram = "x11idle";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xburst-tools/default.nix b/nixpkgs/pkgs/tools/misc/xburst-tools/default.nix
new file mode 100644
index 000000000000..e850e347b29a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xburst-tools/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchgit, libusb-compat-0_1, libusb1, autoconf, automake, libconfuse, pkg-config
+, gccCross ? null
+}:
+
+let
+  version = "2011-12-26";
+in
+stdenv.mkDerivation {
+  pname = "xburst-tools";
+  inherit version;
+
+  src = fetchgit {
+    url = "git://projects.qi-hardware.com/xburst-tools.git";
+    rev = "c71ce8e15db25fe49ce8702917cb17720882e341";
+    sha256 = "1hzdngs1l5ivvwnxjwzc246am6w1mj1aidcf0awh9yw0crzcjnjr";
+  };
+
+  preConfigure = ''
+    sh autogen.sh
+  '';
+
+  # Workaround build failure on -fno-common toolchains:
+  #   mipsel-unknown-linux-uclibc-ld: boothandler.o:(.bss+0x8): multiple definition of
+  #     `start_addr'; main.o:(.bss+0x8): first defined here
+  NIX_CFLAGS_COMPILE_FOR_TARGET = "-fcommon";
+
+  configureFlags = lib.optionals (gccCross != null) [
+    "--enable-firmware"
+    "CROSS_COMPILE=${gccCross.targetPrefix}"
+  ];
+
+  hardeningDisable = [ "pic" "stackprotector" ];
+
+  # Not to strip cross build binaries (this is for the gcc-cross-wrapper)
+  dontCrossStrip = true;
+
+  nativeBuildInputs = [ autoconf automake pkg-config ];
+  buildInputs = [ libusb-compat-0_1 libusb1 libconfuse ] ++
+    lib.optional (gccCross != null) gccCross;
+
+  meta = {
+    broken = stdenv.isDarwin;
+    description = "Qi tools to access the Ben Nanonote USB_BOOT mode";
+    license = lib.licenses.gpl3;
+    homepage = "http://www.linux-mtd.infradead.org/";
+    maintainers = with lib.maintainers; [viric];
+    platforms = lib.platforms.x86_64;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xcd/default.nix b/nixpkgs/pkgs/tools/misc/xcd/default.nix
new file mode 100644
index 000000000000..350da6c93925
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xcd/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "xcd";
+  version = "1.2";
+
+  src = fetchurl {
+    url = "https://www.muppetlabs.com/~breadbox/pub/software/${pname}-${version}.tar.gz";
+    sha256 = "1cgwspy08q05rhxbp7m1yrrix252i9jzfcfbzmhdvlgf5bfpl25g";
+  };
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D $pname $out/bin/$pname
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Colorized hexdump tool";
+    homepage = "https://www.muppetlabs.com/~breadbox/software/xcd.html";
+    maintainers = [ maintainers.xfnw ];
+    license = licenses.mit;
+    platforms = platforms.unix;
+    mainProgram = "xcd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xclip/default.nix b/nixpkgs/pkgs/tools/misc/xclip/default.nix
new file mode 100644
index 000000000000..721d300a19ed
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xclip/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, libXmu }:
+
+stdenv.mkDerivation rec {
+  pname = "xclip";
+  version = "0.13";
+
+  src = fetchFromGitHub {
+    owner = "astrand";
+    repo = "xclip";
+    rev = version;
+    sha256 = "0q0hmvcjlv8arhh1pzhja2wglyj6n7z209jnpnzd281kqqv4czcs";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ libXmu ];
+
+  meta = {
+    description = "Tool to access the X clipboard from a console application";
+    homepage = "https://github.com/astrand/xclip";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.all;
+    mainProgram = "xclip";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xcp/default.nix b/nixpkgs/pkgs/tools/misc/xcp/default.nix
new file mode 100644
index 000000000000..bb310c3cce7c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xcp/default.nix
@@ -0,0 +1,26 @@
+{ rustPlatform, fetchFromGitHub, lib }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xcp";
+  version = "0.20.4";
+
+  src = fetchFromGitHub {
+    owner = "tarka";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-0ucm8XBxYwXvpVJN8If8BIToQGiBisKLZJYKuvaORto=";
+  };
+
+  # no such file or directory errors
+  doCheck = false;
+
+  cargoHash = "sha256-UdQUrIRos3TmebotdESvKH+90WVMJ0oTc43p+AT4xMI=";
+
+  meta = with lib; {
+    description = "An extended cp(1)";
+    homepage = "https://github.com/tarka/xcp";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ lom ];
+    mainProgram = "xcp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdaliclock/default.nix b/nixpkgs/pkgs/tools/misc/xdaliclock/default.nix
new file mode 100644
index 000000000000..7201ffcbbe99
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdaliclock/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl
+, gtk3
+, wrapGAppsHook
+, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "xdaliclock";
+  version = "2.48";
+
+  src = fetchurl {
+    url = "https://www.jwz.org/xdaliclock/${pname}-${version}.tar.gz";
+    hash = "sha256-BZiqjTSSAgvT/56OJDcKh4pDP9uqVhR5cCx89H+5FLQ=";
+  };
+
+  # Note: don't change this to set sourceRoot, or updateAutotoolsGnuConfigScriptsHook
+  # on aarch64 doesn't find the files to patch and the aarch64 build fails!
+  preConfigure = "cd X11";
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook
+  ];
+  buildInputs = [
+    gtk3
+  ];
+
+  preInstall = ''
+    mkdir -vp $out/bin $out/share/man/man1 $out/share/gsettings-schemas/$name/glib-2.0/schemas $out/share/pixmaps $out/share/applications
+
+    # https://www.jwz.org/blog/2022/08/dali-clock-2-45-released/#comment-236762
+    gappsWrapperArgs+=(--set MESA_GL_VERSION_OVERRIDE 3.1)
+  '';
+
+  installFlags = [
+    "GTK_ICONDIR=${placeholder "out"}/share/pixmaps/"
+    "GTK_APPDIR=${placeholder "out"}/share/applications/"
+  ];
+
+  meta = with lib; {
+    description = "A clock application that morphs digits when they are changed";
+    maintainers = with maintainers; [ raskin ];
+    platforms = with platforms; linux ++ freebsd;
+    license = licenses.free; #TODO BSD on Gentoo, looks like MIT
+    downloadPage = "http://www.jwz.org/xdaliclock/";
+    mainProgram = "xdaliclock";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdg-ninja/default.nix b/nixpkgs/pkgs/tools/misc/xdg-ninja/default.nix
new file mode 100644
index 000000000000..f3c4ca677051
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdg-ninja/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenvNoCC, fetchFromGitHub, makeWrapper, jq, glow }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "xdg-ninja";
+  version = "0.2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "b3nj5m1n";
+    repo = "xdg-ninja";
+    rev = "v${version}";
+    sha256 = "sha256-ASJIFQ/BpZMQGRtw8kPhtMCbXC1eb/X8TWQz+CAnaSM=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 xdg-ninja.sh "$out/share/xdg-ninja/xdg-ninja.sh"
+    install -Dm644 programs/* -t "$out/share/xdg-ninja/programs"
+
+    mkdir -p "$out/bin"
+    ln -s "$out/share/xdg-ninja/xdg-ninja.sh" "$out/bin/xdg-ninja"
+
+    wrapProgram "$out/bin/xdg-ninja" \
+      --prefix PATH : "${lib.makeBinPath [ glow jq ]}"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A shell script which checks your $HOME for unwanted files and directories";
+    homepage = "https://github.com/b3nj5m1n/xdg-ninja";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ arcuru ];
+    mainProgram = "xdg-ninja";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdiskusage/default.nix b/nixpkgs/pkgs/tools/misc/xdiskusage/default.nix
new file mode 100644
index 000000000000..9db3563ca247
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdiskusage/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, fltk }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xdiskusage";
+  version = "1.60";
+
+  src = fetchurl {
+    url = "https://xdiskusage.sourceforge.net/xdiskusage-${finalAttrs.version}.tgz";
+    hash = "sha256-e1NtxvG9xtm+x8KblDXCPZ0yv/ig6+4muZZrJz3J9n4=";
+  };
+
+  nativeBuildInputs = [ fltk ];
+
+  meta = {
+    description = "Program to show you what is using up all your disk space";
+    homepage = "https://xdiskusage.sourceforge.net/";
+    license = with lib.licenses; [ gpl2Plus ];
+    maintainers = with lib.maintainers; [ fuzzdk ];
+    platforms = with lib.platforms; linux;
+    mainProgram = "xdiskusage";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/xdo/default.nix b/nixpkgs/pkgs/tools/misc/xdo/default.nix
new file mode 100644
index 000000000000..268dfcd66e04
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdo/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, libxcb, xcbutil, xcbutilwm }:
+
+stdenv.mkDerivation rec {
+   pname = "xdo";
+   version = "0.5.7";
+
+   src = fetchFromGitHub {
+     owner = "baskerville";
+     repo = "xdo";
+     rev = version;
+     sha256 = "1h3jrygcjjbavdbkpx2hscsf0yf97gk487lzjdlvymd7dxdv9hy9";
+   };
+
+   makeFlags = [ "PREFIX=$(out)" ];
+
+   buildInputs = [ libxcb xcbutilwm xcbutil ];
+
+   meta = with lib; {
+     description = "Small X utility to perform elementary actions on windows";
+     homepage = "https://github.com/baskerville/xdo";
+     maintainers = with maintainers; [ meisternu ];
+     license = licenses.bsd2;
+     platforms = platforms.linux;
+     mainProgram = "xdo";
+   };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xdummy/default.nix b/nixpkgs/pkgs/tools/misc/xdummy/default.nix
new file mode 100644
index 000000000000..227829346cd0
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdummy/default.nix
@@ -0,0 +1,85 @@
+{ writeText, writeScriptBin, xorg, xkeyboard_config, runtimeShell
+, unfreeFonts ? false, lib}:
+
+let
+  xorgConfig = writeText "dummy-xorg.conf" ''
+    Section "ServerLayout"
+      Identifier     "dummy_layout"
+      Screen         0 "dummy_screen"
+      InputDevice    "dummy_keyboard" "CoreKeyboard"
+      InputDevice    "dummy_mouse" "CorePointer"
+    EndSection
+
+    Section "ServerFlags"
+      Option "DontVTSwitch" "true"
+      Option "AllowMouseOpenFail" "true"
+      Option "PciForceNone" "true"
+      Option "AutoEnableDevices" "false"
+      Option "AutoAddDevices" "false"
+    EndSection
+
+    Section "Files"
+      ModulePath "${xorg.xorgserver.out}/lib/xorg/modules"
+      ModulePath "${xorg.xf86videodummy}/lib/xorg/modules"
+      XkbDir "${xkeyboard_config}/share/X11/xkb"
+      FontPath "${xorg.fontadobe75dpi}/lib/X11/fonts/75dpi"
+      FontPath "${xorg.fontadobe100dpi}/lib/X11/fonts/100dpi"
+      FontPath "${xorg.fontmiscmisc}/lib/X11/fonts/misc"
+      FontPath "${xorg.fontcursormisc}/lib/X11/fonts/misc"
+    ${lib.optionalString unfreeFonts ''
+      FontPath "${xorg.fontbhlucidatypewriter75dpi}/lib/X11/fonts/75dpi"
+      FontPath "${xorg.fontbhlucidatypewriter100dpi}/lib/X11/fonts/100dpi"
+      FontPath "${xorg.fontbh100dpi}/lib/X11/fonts/100dpi"
+    ''}
+    EndSection
+
+    Section "Module"
+      Load           "dbe"
+      Load           "extmod"
+      Load           "freetype"
+      Load           "glx"
+    EndSection
+
+    Section "InputDevice"
+      Identifier     "dummy_mouse"
+      Driver         "void"
+    EndSection
+
+    Section "InputDevice"
+      Identifier     "dummy_keyboard"
+      Driver         "void"
+    EndSection
+
+    Section "Monitor"
+      Identifier     "dummy_monitor"
+      HorizSync       30.0 - 130.0
+      VertRefresh     50.0 - 250.0
+      Option         "DPMS"
+    EndSection
+
+    Section "Device"
+      Identifier     "dummy_device"
+      Driver         "dummy"
+      VideoRam       192000
+    EndSection
+
+    Section "Screen"
+      Identifier     "dummy_screen"
+      Device         "dummy_device"
+      Monitor        "dummy_monitor"
+      DefaultDepth    24
+      SubSection     "Display"
+        Depth       24
+        Modes      "1280x1024"
+      EndSubSection
+    EndSection
+  '';
+
+in writeScriptBin "xdummy" ''
+  #!${runtimeShell}
+  exec ${xorg.xorgserver.out}/bin/Xorg \
+    -noreset \
+    -logfile /dev/null \
+    "$@" \
+    -config "${xorgConfig}"
+''
diff --git a/nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix b/nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix
new file mode 100644
index 000000000000..e23d68f8fccb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xdxf2slob/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication {
+  pname = "xdxf2slob";
+  version = "unstable-2015-06-30";
+
+  src = fetchFromGitHub {
+    owner = "itkach";
+    repo = "xdxf2slob";
+    rev = "6831b93c3db8c73200900fa4ddcb17350a677e1b";
+    sha256 = "0m3dnc3816ja3kmik1wabb706dkqdf5sxvabwgf2rcrq891xcddd";
+  };
+
+  propagatedBuildInputs = [ python3Packages.pyicu python3Packages.slob ];
+
+  meta = with lib; {
+    description = "Tool to convert XDXF dictionary files to slob format";
+    homepage = "https://github.com/itkach/xdxf2slob/";
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    mainProgram = "xdxf2slob";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xflux/default.nix b/nixpkgs/pkgs/tools/misc/xflux/default.nix
new file mode 100644
index 000000000000..5cfda2df174f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xflux/default.nix
@@ -0,0 +1,42 @@
+{lib, stdenv, fetchurl, libXxf86vm, libXext, libX11, libXrandr, gcc}:
+stdenv.mkDerivation {
+  pname = "xflux";
+  version = "unstable-2013-09-01";
+  src = fetchurl {
+    url = "https://justgetflux.com/linux/xflux64.tgz";
+    sha256 = "cc50158fabaeee58c331f006cc1c08fd2940a126e99d37b76c8e878ef20c2021";
+  };
+
+  libPath = lib.makeLibraryPath [
+    gcc.cc
+    libXxf86vm
+    libXext
+    libX11
+    libXrandr
+  ];
+
+  unpackPhase = ''
+    unpackFile $src;
+  '';
+  installPhase = ''
+    mkdir -p "$out/bin"
+    cp  xflux "$out/bin"
+  '';
+  postFixup = ''
+    patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) --set-rpath "$libPath" "$out/bin/xflux"
+  '';
+  meta = {
+    description = "Adjusts your screen to emit warmer light at night";
+    longDescription = ''
+      xflux changes the color temperature of your screen to be much warmer
+      when the sun sets, and then changes it back its colder temperature
+      when the sun rises.
+    '';
+    homepage = "https://justgetflux.com/";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.paholg ];
+    mainProgram = "xflux";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xflux/gui.nix b/nixpkgs/pkgs/tools/misc/xflux/gui.nix
new file mode 100644
index 000000000000..a9ec5d5d0eeb
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xflux/gui.nix
@@ -0,0 +1,49 @@
+{ lib, fetchFromGitHub, buildPythonApplication, python3Packages, wrapGAppsHook
+, xflux, gtk3, gobject-introspection, pango, gdk-pixbuf, atk
+, pexpect, pygobject3, pyxdg, libappindicator-gtk3
+}:
+buildPythonApplication rec {
+  pname = "xflux-gui";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    repo = "xflux-gui";
+    owner = "xflux-gui";
+    rev = "v${version}";
+    sha256 = "09zphcd9821ink63636swql4g85hg6lpsazqg1mawlk9ikc8zbps";
+  };
+
+  propagatedBuildInputs = [
+    pyxdg
+    pexpect
+    pygobject3
+  ];
+
+  buildInputs = [
+    xflux gtk3
+  ];
+
+  nativeBuildInputs = [
+    wrapGAppsHook gobject-introspection
+    pango gdk-pixbuf atk libappindicator-gtk3
+  ];
+
+  postPatch = ''
+     substituteInPlace src/fluxgui/xfluxcontroller.py \
+       --replace "pexpect.spawn(\"xflux\"" "pexpect.spawn(\"${xflux}/bin/xflux\""
+  '';
+
+  postFixup = ''
+    wrapGAppsHook
+    wrapPythonPrograms
+    patchPythonScript $out/${python3Packages.python.sitePackages}/fluxgui/fluxapp.py
+  '';
+
+  meta = {
+    description = "Better lighting for Linux. Open source GUI for xflux";
+    homepage = "https://justgetflux.com/linux.html";
+    license = lib.licenses.unfree; # marked as unfree since the source code contains a copy of the unfree xflux binary
+    maintainers = [ lib.maintainers.sheenobu ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xfstests/default.nix b/nixpkgs/pkgs/tools/misc/xfstests/default.nix
new file mode 100644
index 000000000000..5080c8592492
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xfstests/default.nix
@@ -0,0 +1,111 @@
+{ stdenv, acl, attr, autoconf, automake, bash, bc, coreutils, e2fsprogs
+, fetchzip, fio, gawk, keyutils, killall, lib, libaio, libcap, libtool
+, libuuid, libxfs, lvm2, openssl, perl, procps, quota
+, time, util-linux, which, writeScript, xfsprogs, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "xfstests";
+  version = "2023.05.14";
+
+  src = fetchzip {
+    url = "https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/snapshot/xfstests-dev-v${version}.tar.gz";
+    hash = "sha256-yyjY9Q3eUH+q+o15zFUjOcNz1HpXPCwdcxWXoycOx98=";
+  };
+
+  nativeBuildInputs = [
+    autoconf automake libtool
+  ];
+  buildInputs = [
+    acl attr gawk libaio libuuid libxfs openssl perl
+  ];
+
+  hardeningDisable = [ "format" ];
+  enableParallelBuilding = true;
+
+  patchPhase = ''
+    substituteInPlace Makefile \
+      --replace "cp include/install-sh ." "cp -f include/install-sh ."
+
+    # Patch the destination directory
+    sed -i include/builddefs.in -e "s|^PKG_LIB_DIR\s*=.*|PKG_LIB_DIR=$out/lib/xfstests|"
+
+    # Don't canonicalize path to mkfs (in util-linux) - otherwise e.g. mkfs.ext4 isn't found
+    sed -i common/config -e 's|^export MKFS_PROG=.*|export MKFS_PROG=mkfs|'
+
+    # Move the Linux-specific test output files to the correct place, or else it will
+    # try to move them at runtime. Also nuke all the irix crap.
+    for f in tests/*/*.out.linux; do
+      mv $f $(echo $f | sed -e 's/\.linux$//')
+    done
+    rm -f tests/*/*.out.irix
+
+    # Fix up lots of impure paths
+    for f in common/* tools/* tests/*/*; do
+      sed -i $f -e 's|/bin/bash|${bash}/bin/bash|'
+      sed -i $f -e 's|/bin/true|true|'
+      sed -i $f -e 's|/usr/sbin/filefrag|${e2fsprogs}/bin/filefrag|'
+      sed -i $f -e 's|hostname -s|hostname|'   # `hostname -s` seems problematic on NixOS
+      sed -i $f -e 's|$(_yp_active)|1|'        # NixOS won't ever have Yellow Pages enabled
+    done
+
+    for f in src/*.c src/*.sh; do
+      sed -e 's|/bin/rm|${coreutils}/bin/rm|' -i $f
+      sed -e 's|/usr/bin/time|${time}/bin/time|' -i $f
+    done
+
+    patchShebangs .
+  '';
+
+  preConfigure = ''
+    # The configure scripts really don't like looking in PATH at all...
+    export AWK=$(type -P awk)
+    export ECHO=$(type -P echo)
+    export LIBTOOL=$(type -P libtool)
+    export MAKE=$(type -P make)
+    export SED=$(type -P sed)
+    export SORT=$(type -P sort)
+
+    make configure
+  '';
+
+  postInstall = ''
+    patchShebangs $out/lib/xfstests
+
+    mkdir -p $out/bin
+    substitute $wrapperScript $out/bin/xfstests-check --subst-var out
+    chmod a+x $out/bin/xfstests-check
+  '';
+
+  # The upstream package is pretty hostile to packaging; it looks up
+  # various paths relative to current working directory, and also
+  # wants to write temporary files there. So create a temporary
+  # to run from and symlink the runtime files to it.
+  wrapperScript = writeScript "xfstests-check" ''
+    #!${runtimeShell}
+    set -e
+    export RESULT_BASE="$(pwd)/results"
+
+    dir=$(mktemp --tmpdir -d xfstests.XXXXXX)
+    trap "rm -rf $dir" EXIT
+
+    chmod a+rx "$dir"
+    cd "$dir"
+    for f in $(cd @out@/lib/xfstests; echo *); do
+      ln -s @out@/lib/xfstests/$f $f
+    done
+
+    export PATH=${lib.makeBinPath [acl attr bc e2fsprogs fio gawk keyutils
+                                   libcap lvm2 perl procps killall quota
+                                   util-linux which xfsprogs]}:$PATH
+    exec ./check "$@"
+  '';
+
+  meta = with lib; {
+    description = "Torture test suite for filesystems";
+    homepage = "https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.dezgeg ];
+    platforms = platforms.linux;
+    mainProgram = "xfstests-check";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xiccd/default.nix b/nixpkgs/pkgs/tools/misc/xiccd/default.nix
new file mode 100644
index 000000000000..4ffb5b689e3b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xiccd/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, libX11, libXrandr, glib, colord }:
+
+stdenv.mkDerivation rec {
+  pname = "xiccd";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "agalakhov";
+    repo = "xiccd";
+    rev = "v${version}";
+    sha256 = "159fyz5535lcabi5bzmxgmjdgxlqcjaiqgzr00mi3ax0i5fdldwn";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libX11 libXrandr glib colord ];
+
+  meta = with lib; {
+    description = "X color profile daemon";
+    homepage = "https://github.com/agalakhov/xiccd";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = platforms.linux;
+    mainProgram = "xiccd";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix b/nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix
new file mode 100644
index 000000000000..1eece16d3511
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xilinx-bootgen/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "xilinx-bootgen";
+  version = "xilinx_v2023.2";
+
+  src = fetchFromGitHub {
+    owner = "xilinx";
+    repo = "bootgen";
+    rev = version;
+    hash = "sha256-YRaq36N6uBHyjuHQ5hCO35Y+y818NuSjg/js181iItA=";
+  };
+
+  buildInputs = [ openssl ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    install -Dm755 bootgen $out/bin/bootgen
+  '';
+
+  meta = with lib; {
+    description = "Generate Boot Images for Xilinx Zynq and ZU+ SoCs";
+    longDescription = ''
+      Bootgen for Xilinx Zynq and ZU+ SoCs, without code related to generating
+      obfuscated key and without code to support FPGA encryption and
+      authentication. These features are only available as part of Bootgen
+      shipped with Vivado tools.
+
+      For more details about Bootgen, please refer to Xilinx UG1283.
+    '';
+    homepage = "https://github.com/Xilinx/bootgen";
+    license = licenses.asl20;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.flokli ];
+    mainProgram = "bootgen";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xjobs/default.nix b/nixpkgs/pkgs/tools/misc/xjobs/default.nix
new file mode 100644
index 000000000000..9dfa605fbc47
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xjobs/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv, fetchurl
+, flex, installShellFiles, ncurses, which
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xjobs";
+  version = "20200726";
+
+  src = fetchurl {
+    url = "mirror://sourceforge//xjobs/files/${pname}-${version}.tgz";
+    sha256 = "0ay6gn43pnm7r1jamwgpycl67bjg5n87ncl27jb01w2x6x70z0i3";
+  };
+
+  nativeBuildInputs = [
+    flex
+    installShellFiles
+    which
+  ];
+  buildInputs = [
+    ncurses
+  ];
+
+  checkPhase = ''
+    runHook preCheck
+    ./${pname} -V
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{bin,etc}
+    install -m755 ${pname} $out/bin/${pname}
+    install -m644 ${pname}.rc $out/etc/${pname}.rc
+    installManPage ${pname}.1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A program which reads job descriptions line by line and executes them in parallel";
+    homepage = "https://www.maier-komor.de/xjobs.html";
+    license = licenses.gpl2Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.siriobalmelli ];
+    longDescription = ''
+      xjobs reads job descriptions line by line and executes them in parallel.
+
+      It limits the number of parallel executing jobs and starts new jobs when jobs finish.
+
+      Therefore, it combines the arguments from every input line with the utility
+      and arguments given on the command line.
+      If no utility is given as an argument to xjobs,
+      then the first argument on every job line will be used as utility.
+      To execute utility xjobs searches the directories given in the PATH environment variable
+      and uses the first file found in these directories.
+
+      xjobs is most useful on multi-processor/core machines when one needs to execute
+      several time consuming command several that could possibly be run in parallel.
+      With xjobs this can be achieved easily, and it is possible to limit the load
+      of the machine to a useful value.
+
+      It works similar to xargs, but starts several processes simultaneously
+      and gives only one line of arguments to each utility call.
+    '';
+    mainProgram = "xjobs";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xmlbeans/default.nix b/nixpkgs/pkgs/tools/misc/xmlbeans/default.nix
new file mode 100644
index 000000000000..f3702d0302c5
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xmlbeans/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchzip, jre_headless }:
+
+stdenv.mkDerivation rec {
+  pname = "xmlbeans";
+  version = "5.1.1-20220819";
+
+  src = fetchzip {
+    # old releases are deleted from the cdn
+    url = "https://web.archive.org/web/20230313151507/https://dlcdn.apache.org/poi/xmlbeans/release/bin/xmlbeans-bin-${version}.zip";
+    sha256 = "sha256-TDnWo1uJWL6k6Z8/uaF2LBNzRVQMHYopYze/2Fb/0aI=";
+  };
+
+  postPatch = ''
+    rm bin/*.cmd
+    substituteInPlace bin/dumpxsb \
+      --replace 'echo `dirname $0`' ""
+
+    substituteInPlace bin/_setlib \
+      --replace 'echo XMLBEANS_LIB=$XMLBEANS_LIB' ""
+
+    for file in bin/*; do
+      substituteInPlace $file \
+        --replace "java " "${jre_headless}/bin/java "
+    done
+  '';
+
+  installPhase = ''
+    mkdir -p $out
+    chmod +x bin/*
+    cp -r bin/ lib/ $out/
+  '';
+
+  meta = with lib; {
+    description = "Java library for accessing XML by binding it to Java types";
+    homepage = "https://xmlbeans.apache.org/";
+    downloadPage = "https://dlcdn.apache.org/poi/xmlbeans/release/bin/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xmonad-log/default.nix b/nixpkgs/pkgs/tools/misc/xmonad-log/default.nix
new file mode 100644
index 000000000000..9ba7941b45f7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xmonad-log/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "xmonad-log";
+  version = "0.1.0";
+
+  goPackagePath = "github.com/xintron/xmonad-log";
+
+  src = fetchFromGitHub {
+    owner = "xintron";
+    repo = "xmonad-log";
+    rev = version;
+    sha256 = "1il6v0zcjw0pfb1hjj198y94jmlcx255h422ph0f1zr7afqkzmaw";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "xmonad DBus monitoring solution";
+    homepage = "https://github.com/xintron/xmonad-log";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ joko ];
+    mainProgram = "xmonad-log";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix b/nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix
new file mode 100644
index 000000000000..f5a7c7e5dd1d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xmonad-log/deps.nix
@@ -0,0 +1,12 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/godbus/dbus";
+    fetch = {
+      type = "git";
+      url = "https://github.com/godbus/dbus";
+      rev = "a389bdde4dd695d414e47b755e95e72b7826432c";
+      sha256 = "1ckvg15zdsgmbn4mi36cazkb407ixc9mmyf7vwj8b8wi3d00rgn9";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/xprite-editor/default.nix b/nixpkgs/pkgs/tools/misc/xprite-editor/default.nix
new file mode 100644
index 000000000000..b6a0a9b47085
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xprite-editor/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, gtk3
+, AppKit
+, pkg-config
+, python3
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xprite-editor-unstable";
+  version = "2019-09-22";
+
+  src = fetchFromGitHub {
+    owner = "rickyhan";
+    repo = "xprite-editor";
+    rev = "7f899dff982642927024540e4bafd74e4ea5e52a";
+    sha256 = "1k6k8y8gg1vdmyjz27q689q9rliw0rrnzwlpjcd4vlc6swaq9ahx";
+    fetchSubmodules = true;
+    # Rename unicode file name which leads to different checksums on HFS+
+    # vs. other filesystems because of unicode normalization.
+    postFetch = ''
+      mv $out/config/palettes/Sweet\ Guaran*.hex $out/config/palettes/Sweet\ Guarana.hex
+    '';
+  };
+
+  buildInputs = lib.optionals stdenv.isLinux [ gtk3 ]
+    ++ lib.optionals stdenv.isDarwin [ AppKit ];
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config python3 ];
+
+  cargoSha256 = "0z1ip667d1qwvm9md3zg8ib9jixpg7qj5ypwib7r2928h14yg7ck";
+
+  cargoBuildFlags = [ "--bin" "xprite-native" ];
+
+  meta = with lib; {
+    # error[E0034]: multiple applicable items in scope
+    # multiple `clamp` found
+    # https://github.com/NixOS/nixpkgs/issues/146949
+    broken = true;
+    homepage = "https://github.com/rickyhan/xprite-editor";
+    description = "Pixel art editor";
+    license = licenses.gpl3;
+    maintainers = [ ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xq/default.nix b/nixpkgs/pkgs/tools/misc/xq/default.nix
new file mode 100644
index 000000000000..67d09807afc9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xq/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "xq";
+  version = "0.4.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-pQhzyXLurFnBn9DkkXA54NsAX8wE4rQvaHXZLkLDwdw=";
+  };
+
+  cargoHash = "sha256-gfCH/jnJTUiqwzxUYuZuFWh9Wq8hp43z2gRdaDQ908g=";
+
+  meta = with lib; {
+    description = "Pure rust implementation of jq";
+    homepage = "https://github.com/MiSawa/xq";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthewcroughan ];
+    mainProgram = "xq";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xsel/default.nix b/nixpkgs/pkgs/tools/misc/xsel/default.nix
new file mode 100644
index 000000000000..f32d0a81a61e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xsel/default.nix
@@ -0,0 +1,34 @@
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+  pkg-config,
+  autoreconfHook,
+  libX11,
+  libXt
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xsel";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "kfish";
+    repo = "xsel";
+    rev = finalAttrs.version;
+    hash = "sha256-F2w/Ad8IWxJNH90/0a9+1M8bLfn1M3m4TH3PNpQmEFI=";
+  };
+
+  nativeBuildInputs = [pkg-config autoreconfHook];
+  buildInputs = [libX11 libXt];
+
+  meta = with lib; {
+    description = "Command-line program for getting and setting the contents of the X selection";
+    homepage = "http://www.kfish.org/software/xsel";
+    changelog = "https://github.com/kfish/xsel/releases/tag/${finalAttrs.version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [cafkafk];
+    platforms = lib.platforms.unix;
+    mainProgram = "xsel";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/xstow/default.nix b/nixpkgs/pkgs/tools/misc/xstow/default.nix
new file mode 100644
index 000000000000..e40cffb51659
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xstow/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, ncurses
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xstow";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "majorkingleo";
+    repo = "xstow";
+    rev = version;
+    fetchSubmodules = true;
+    hash = "sha256-c89+thw5N3Cgl1Ww+W7c3YsyhNJMLlreedvdWJFY3WY=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  # Upstream seems to try to support building both static and dynamic version
+  # of executable on dynamic systems, but fails with link error when attempting
+  # to cross-build "xstow-static" to the system where "xstow" proper is static.
+  postPatch = lib.optionalString stdenv.hostPlatform.isStatic ''
+    substituteInPlace src/Makefile.am --replace xstow-static ""
+    substituteInPlace src/Makefile.am --replace xstow-stow ""
+  '';
+
+  buildInputs = [
+    ncurses
+  ];
+
+  meta = with lib; {
+    description = "A replacement of GNU Stow written in C++";
+    homepage = "https://github.com/majorkingleo/xstow";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ nzbr ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xtitle/default.nix b/nixpkgs/pkgs/tools/misc/xtitle/default.nix
new file mode 100644
index 000000000000..94e650144956
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xtitle/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, libxcb, xcbutil, xcbutilwm, git }:
+
+stdenv.mkDerivation rec {
+  pname = "xtitle";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "baskerville";
+    repo = "xtitle";
+    rev = version;
+    hash = "sha256-SVfM2vCCacgchXj0c0sPk3VR6DUI4R0ofFnxJSY4oDg=";
+  };
+
+  postPatch = ''
+    sed -i "s|/usr/local|$out|" Makefile
+  '';
+
+  buildInputs = [ libxcb git xcbutil xcbutilwm ];
+
+  meta = with lib; {
+    description = "Outputs X window titles";
+    homepage = "https://github.com/baskerville/xtitle";
+    maintainers = with maintainers; [ meisternu ];
+    license = "Custom";
+    platforms = platforms.linux;
+    mainProgram = "xtitle";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xvfb-run/default.nix b/nixpkgs/pkgs/tools/misc/xvfb-run/default.nix
new file mode 100644
index 000000000000..eb1e7c5b01b7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xvfb-run/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, makeWrapper
+, xorgserver
+, getopt
+, xauth
+, util-linux
+, which
+, fontsConf
+, gawk
+, coreutils
+, installShellFiles
+, xterm
+}:
+stdenvNoCC.mkDerivation rec {
+  pname = "xvfb-run";
+  version = "1+g87f6705";
+
+  src = fetchFromGitHub {
+    owner = "archlinux";
+    repo = "svntogit-packages";
+    rev = "87f67054c49b32511893acd22be94c47ecd44b4a";
+    sha256 = "sha256-KEg92RYgJd7naHFDKbdXEy075bt6NLcmX8VhQROHVPs=";
+  };
+
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+
+  dontUnpack = true;
+  dontBuild = true;
+  dontConfigure = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src/trunk/xvfb-run $out/bin/xvfb-run
+    installManPage $src/trunk/xvfb-run.1
+
+    chmod a+x $out/bin/xvfb-run
+    patchShebangs $out/bin/xvfb-run
+    wrapProgram $out/bin/xvfb-run \
+      --set-default FONTCONFIG_FILE "${fontsConf}" \
+      --prefix PATH : ${lib.makeBinPath [ getopt xorgserver xauth which util-linux gawk coreutils ]}
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    (
+      unset PATH
+      echo "running xterm with xvfb-run"
+      $out/bin/xvfb-run ${lib.getBin xterm}/bin/xterm -e true
+    )
+  '';
+
+  passthru = {
+    updateScript = ./update.sh;
+  };
+
+  meta = with lib; {
+    description = "Convenience script to run a virtualized X-Server";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = [ maintainers.artturin ];
+    mainProgram = "xvfb-run";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/xvfb-run/update.sh b/nixpkgs/pkgs/tools/misc/xvfb-run/update.sh
new file mode 100755
index 000000000000..e592323154e2
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xvfb-run/update.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl gnused nix-prefetch jq common-updater-scripts
+# shellcheck shell=bash
+
+set -e
+
+info=$(nix-prefetch-git --quiet --url "https://github.com/archlinux/svntogit-packages" --rev "refs/heads/packages/xorg-server")
+
+rev=$(jq -r '.rev' <<< "$info")
+sha256=$(nix hash to-sri --type sha256 "$(jq -r '.sha256' <<< "$info")")
+dir=$(jq -r '.path' <<< "$info")
+
+newXvfbsha=$(sha256sum "$dir/trunk/xvfb-run")
+oldXvfbsha=$(sha256sum "$(nix build --quiet ".#xvfb-run.src" --json --no-link | jq -r '.[].outputs.out')/trunk/xvfb-run")
+
+if [[ "$newXvfbsha" != "$oldXvfbsha" ]]; then
+    (
+        cd "$(git rev-parse --show-toplevel)"
+        update-source-version xvfb-run "1+g${rev:0:7}" "$sha256" --rev="$rev"
+    )
+fi
diff --git a/nixpkgs/pkgs/tools/misc/xxv/default.nix b/nixpkgs/pkgs/tools/misc/xxv/default.nix
new file mode 100644
index 000000000000..0068de3c9245
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/xxv/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchFromGitHub, rustPlatform
+, ncurses ? null
+, darwin ? null }:
+
+let useNcurses = !stdenv.hostPlatform.isWindows; in
+
+assert useNcurses -> ncurses != null;
+
+rustPlatform.buildRustPackage rec {
+  pname   = "xxv";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner  = "chrisvest";
+    repo   = pname;
+    rev    = version;
+    sha256 = "0ppfsgdigza2jppbkg4qanjhlkpnq7p115c4471vc6vpikpfrlk3";
+  };
+
+  cargoSha256 = "0pmpvlmy4pw252is34r9af1ysrp78xs8pz8cw4rys9s4fh2hmhjb";
+
+  buildInputs = lib.optionals useNcurses [ ncurses ]
+  ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ Security ])
+  ;
+
+  # I'm picking pancurses for Windows simply because that's the example given in Cursive's
+  # documentation for picking an alternative backend. We could just as easily pick crossterm.
+  buildNoDefaultFeatures = !useNcurses;
+  buildFeatures = lib.optional (!useNcurses) "pancurses-backend";
+
+  meta = with lib; {
+    description = "A visual hex viewer for the terminal";
+    longDescription = ''
+      XXV is a terminal hex viewer with a text user interface, written in 100% safe Rust.
+    '';
+    homepage    = "https://chrisvest.github.io/xxv/";
+    license     = with licenses; [ gpl3 ];
+    maintainers = with maintainers; [ lilyball ];
+    mainProgram = "xxv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yad/default.nix b/nixpkgs/pkgs/tools/misc/yad/default.nix
new file mode 100644
index 000000000000..9bbb955f1a1b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yad/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, intltool, autoreconfHook, wrapGAppsHook
+, gtk3, hicolor-icon-theme, netpbm }:
+
+stdenv.mkDerivation rec {
+  pname = "yad";
+  version = "13.0";
+
+  src = fetchFromGitHub {
+    owner = "v1cont";
+    repo = "yad";
+    rev = "v${version}";
+    sha256 = "sha256-iYAhiaGfC9/OQ5HrSjX2fhpbwdZun6sxyw8o+8svcvY=";
+  };
+
+  configureFlags = [
+    "--enable-icon-browser"
+    "--with-gtk=gtk3"
+    "--with-rgb=${placeholder "out"}/share/yad/rgb.txt"
+  ];
+
+  buildInputs = [ gtk3 hicolor-icon-theme ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config intltool wrapGAppsHook ];
+
+  postPatch = ''
+    sed -i src/file.c -e '21i#include <glib/gprintf.h>'
+    sed -i src/form.c -e '21i#include <stdlib.h>'
+
+    # there is no point to bring in the whole netpbm package just for this file
+    install -Dm644 ${netpbm.out}/share/netpbm/misc/rgb.txt $out/share/yad/rgb.txt
+  '';
+
+  postAutoreconf = ''
+    intltoolize
+  '';
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/yad-dialog/";
+    description = "GUI dialog tool for shell scripts";
+    longDescription = ''
+      Yad (yet another dialog) is a GUI dialog tool for shell scripts. It is a
+      fork of Zenity with many improvements, such as custom buttons, additional
+      dialogs, pop-up menu in notification icon and more.
+    '';
+
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ smironov ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yafetch/default.nix b/nixpkgs/pkgs/tools/misc/yafetch/default.nix
new file mode 100644
index 000000000000..49611df587af
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yafetch/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "yafetch";
+  version = "unstable-2022-04-20";
+
+  src = fetchFromGitHub {
+    owner = "kira64xyz";
+    repo = pname;
+    rev = "a118cfc13f0b475db7c266105c10138d838788b8";
+    sha256 = "bSJlerfbJG6h5dDwWQKHnVLH6DEuvuUyqaRuJ7jvOsA=";
+  };
+
+  # Use the provided NixOS logo automatically
+  prePatch = ''
+    substituteInPlace ./config.h --replace \
+      "#include \"ascii/gnu.h\"" "#include \"ascii/nixos.h\""
+
+    sed '1i#include <array>' -i config.h # gcc12
+  '';
+
+  # Fixes installation path
+  PREFIX = placeholder "out";
+
+  meta = with lib; {
+    homepage = "https://github.com/kira64xyz/yafetch";
+    description = "Yet another fetch clone written in C++";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ivar ashley ];
+    platforms = platforms.linux;
+    mainProgram = "yafetch";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yai/default.nix b/nixpkgs/pkgs/tools/misc/yai/default.nix
new file mode 100644
index 000000000000..958b88bc2297
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yai/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+buildGoModule rec {
+  pname = "yai";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "ekkinox";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-MoblXLfptlIYJbXQTpbc8GBo2a3Zgxdvwra8IUEGiZs==";
+  };
+
+  vendorHash = "sha256-+NhYK8FXd5B3GsGUPJOMM7Tt3GS1ZJ7LeApz38Xkwx8=";
+
+  ldflags = [
+    "-w -s"
+    "-X main.buildVersion=${version}"
+  ];
+
+  preCheck = ''
+    # analyzer_test.go needs a user
+    export USER=test
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ekkinox/yai";
+    description = "Your AI powered terminal assistant";
+    longDescription = ''
+      Yai (your AI) is an assistant for your terminal, using OpenAI ChatGPT to build and run commands for you.
+      You just need to describe them in your everyday language, it will take care or the rest.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ georgesalkhouri ];
+    mainProgram = "yai";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yajsv/default.nix b/nixpkgs/pkgs/tools/misc/yajsv/default.nix
new file mode 100644
index 000000000000..d6293c74399d
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yajsv/default.nix
@@ -0,0 +1,34 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+let
+  version = "1.4.1";
+in
+buildGoModule {
+  pname = "yajsv";
+  version = version;
+
+  src = fetchFromGitHub {
+    owner = "neilpa";
+    repo = "yajsv";
+    rev = "v${version}";
+    hash = "sha256-dp7PBN8yR+gPPUWA+ug11dUN7slU6CJAojuxt5eNTxA=";
+  };
+
+  vendorHash = "sha256-f45climGKl7HxD+1vz2TGqW/d0dqJ0RfvgJoRRM6lUk=";
+
+  ldflags = [ "-s" "-w" ];
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/yajsv -v > /dev/null
+  '';
+
+  meta = {
+    description = "Yet Another JSON Schema Validator";
+    homepage = "https://github.com/neilpa/yajsv";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ rycee ];
+    mainProgram = "yajsv";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yank/default.nix b/nixpkgs/pkgs/tools/misc/yank/default.nix
new file mode 100644
index 000000000000..50d883759130
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yank/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, xsel }:
+
+stdenv.mkDerivation rec {
+  pname = "yank";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "mptre";
+    repo = "yank";
+    rev = "v${version}";
+    sha256 = "sha256-sZiZki2Zl0Tfmls5KrLGxT94Bdf9TA9EwoaLoFOX9B4=";
+  };
+
+  installFlags = [ "PREFIX=$(out)" ];
+  makeFlags = [ "YANKCMD=${xsel}/bin/xsel" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mptre/yank";
+    description = "Yank terminal output to clipboard";
+    longDescription = ''
+      Read input from stdin and display a selection interface that allows a
+      field to be selected and copied to the clipboard. Fields are determined
+      by splitting the input on a delimiter sequence, optionally specified
+      using the -d option. New line, carriage return and tab characters are
+      always treated as delimiters.
+    '';
+    downloadPage = "https://github.com/mptre/yank/releases";
+    license = licenses.mit;
+    maintainers = [ maintainers.dochang ];
+    platforms = platforms.unix;
+    mainProgram = "yank";
+  };
+
+}
diff --git a/nixpkgs/pkgs/tools/misc/yle-dl/default.nix b/nixpkgs/pkgs/tools/misc/yle-dl/default.nix
new file mode 100644
index 000000000000..9a87e000e8e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yle-dl/default.nix
@@ -0,0 +1,38 @@
+{ lib, fetchFromGitHub, rtmpdump, php, wget, python3Packages, ffmpeg
+, testers, yle-dl
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "yle-dl";
+  version = "20240130";
+
+  src = fetchFromGitHub {
+    owner = "aajanki";
+    repo = "yle-dl";
+    rev = version;
+    hash = "sha256-I2DP14PfeU+cDst098SXn6OVx5FKrH/KgKtVfmRPVqE=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    attrs configargparse ffmpeg future lxml requests
+  ];
+  pythonPath = [ rtmpdump php wget ];
+
+  doCheck = false; # tests require network access
+  nativeCheckInputs = with python3Packages; [ pytestCheckHook ];
+
+  passthru.tests.version = testers.testVersion {
+    package = yle-dl;
+    command = "yle-dl -h";
+  };
+
+  meta = with lib; {
+    description = "Downloads videos from Yle (Finnish Broadcasting Company) servers";
+    homepage = "https://aajanki.github.io/yle-dl/";
+    changelog = "https://github.com/aajanki/yle-dl/blob/${version}/ChangeLog";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dezgeg ];
+    platforms = platforms.unix;
+    mainProgram = "yle-dl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/you-get/default.nix b/nixpkgs/pkgs/tools/misc/you-get/default.nix
new file mode 100644
index 000000000000..225c37e4ba46
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/you-get/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, python3
+, fetchPypi
+, substituteAll
+, ffmpeg
+, installShellFiles
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "you-get";
+  version = "0.4.1650";
+  format = "setuptools";
+
+  # Tests aren't packaged, but they all hit the real network so
+  # probably aren't suitable for a build environment anyway.
+  doCheck = false;
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-s8lEz3pjzEaMzMiBbc5/wAjC5rW6Uq7+XOIIGBijrUc=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./ffmpeg-path.patch;
+      ffmpeg = "${lib.getBin ffmpeg}/bin/ffmpeg";
+      ffprobe = "${lib.getBin ffmpeg}/bin/ffmpeg";
+      version = lib.getVersion ffmpeg;
+    })
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd you-get \
+      --zsh contrib/completion/_you-get \
+      --fish contrib/completion/you-get.fish \
+      --bash contrib/completion/you-get-completion.bash
+  '';
+
+  pythonImportsCheck = [
+    "you_get"
+  ];
+
+  meta = with lib; {
+    description = "A tiny command line utility to download media contents from the web";
+    homepage = "https://you-get.org";
+    changelog = "https://github.com/soimort/you-get/raw/v${version}/CHANGELOG.rst";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ryneeverett ];
+    mainProgram = "you-get";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/you-get/ffmpeg-path.patch b/nixpkgs/pkgs/tools/misc/you-get/ffmpeg-path.patch
new file mode 100644
index 000000000000..abbd0be9d3e1
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/you-get/ffmpeg-path.patch
@@ -0,0 +1,13 @@
+diff --git a/src/you_get/processor/ffmpeg.py b/src/you_get/processor/ffmpeg.py
+index 50e2c9f..46e7f61 100755
+--- a/src/you_get/processor/ffmpeg.py
++++ b/src/you_get/processor/ffmpeg.py
+@@ -31,7 +31,7 @@ def get_usable_ffmpeg(cmd):
+     except:
+         return None
+ 
+-FFMPEG, FFPROBE, FFMPEG_VERSION = get_usable_ffmpeg('ffmpeg') or get_usable_ffmpeg('avconv') or (None, None, None)
++FFMPEG, FFPROBE, FFMPEG_VERSION = ('@ffmpeg@', '@ffprobe@', '@version@')
+ if logging.getLogger().isEnabledFor(logging.DEBUG):
+     LOGLEVEL = ['-loglevel', 'info']
+     STDIN = None
diff --git a/nixpkgs/pkgs/tools/misc/youtube-dl/default.nix b/nixpkgs/pkgs/tools/misc/youtube-dl/default.nix
new file mode 100644
index 000000000000..77a6eceb8a2f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/youtube-dl/default.nix
@@ -0,0 +1,96 @@
+{ lib, fetchurl, fetchpatch, buildPythonPackage
+, zip, ffmpeg, rtmpdump, atomicparsley, pycryptodome, pandoc
+# Pandoc is required to build the package's man page. Release tarballs contain a
+# formatted man page already, though, it will still be installed. We keep the
+# manpage argument in place in case someone wants to use this derivation to
+# build a Git version of the tool that doesn't have the formatted man page
+# included.
+, generateManPage ? false
+, ffmpegSupport ? true
+, rtmpSupport ? true
+, hlsEncryptedSupport ? true
+, installShellFiles, makeWrapper }:
+
+buildPythonPackage rec {
+
+  pname = "youtube-dl";
+  # The websites youtube-dl deals with are a very moving target. That means that
+  # downloads break constantly. Because of that, updates should always be backported
+  # to the latest stable release.
+  version = "2021.12.17";
+
+  src = fetchurl {
+    url = "https://yt-dl.org/downloads/${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-nzuZyLd4RVFltFJfIVBehsf/Vl86wxnhlzPYEBlBNd8=";
+  };
+
+  patches = [
+    # Fixes throttling on youtube.com by decoding a "n-parameter". Without the patch
+    # downloads are capped at about 80KiB/s. See, e.g.,
+    #
+    #   https://github.com/ytdl-org/youtube-dl/issues/29326
+    #
+    # The patch comes from PR https://github.com/ytdl-org/youtube-dl/pull/30184#issuecomment-1025261055
+    # plus follow-up (1e677567) from https://github.com/ytdl-org/youtube-dl/pull/30582
+    (fetchpatch {
+      name = "fix-youtube-dl-speed.patch";
+      url = "https://github.com/ytdl-org/youtube-dl/compare/57044eacebc6f2f3cd83c345e1b6e659a22e4773...1e677567cd083d43f55daef0cc74e5fa24575ae3.diff";
+      sha256 = "11s0j3w60r75xx20p0x2j3yc4d3yvz99r0572si8b5qd93lqs4pr";
+    })
+    # The above patch may fail to decode the n-parameter (if, say, YouTube is updated). Failure to decode
+    # it blocks the download instead of falling back to the throttled version. The patch below implements
+    # better fallback behaviour.
+    (fetchpatch {
+      name = "avoid-crashing-if-nsig-decode-fails.patch";
+      url = "https://github.com/ytdl-org/youtube-dl/commit/41f0043983c831b7c0c3614340d2f66ec153087b.diff";
+      sha256 = "sha256-a72gWhBXCLjuBBD36PpZ5F/AHBdiBv4W8Wf9g4P/aBY=";
+    })
+    # YouTube changed the n-parameter format in April 2022, so decoder updates are required.
+    (fetchpatch {
+      name = "fix-n-descrambling.patch";
+      url = "https://github.com/ytdl-org/youtube-dl/commit/a0068bd6bec16008bda7a39caecccbf84881c603.diff";
+      sha256 = "sha256-tSuEns4jputa2nOOo6JsFXpK3hvJ/+z1/ymcLsd3A6w=";
+    })
+  ];
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+  buildInputs = [ zip ] ++ lib.optional generateManPage pandoc;
+  propagatedBuildInputs = lib.optional hlsEncryptedSupport pycryptodome;
+
+  # Ensure these utilities are available in $PATH:
+  # - ffmpeg: post-processing & transcoding support
+  # - rtmpdump: download files over RTMP
+  # - atomicparsley: embedding thumbnails
+  makeWrapperArgs = let
+      packagesToBinPath =
+        [ atomicparsley ]
+        ++ lib.optional ffmpegSupport ffmpeg
+        ++ lib.optional rtmpSupport rtmpdump;
+    in [ ''--prefix PATH : "${lib.makeBinPath packagesToBinPath}"'' ];
+
+  setupPyBuildFlags = [
+    "build_lazy_extractors"
+  ];
+
+  postInstall = ''
+    installShellCompletion youtube-dl.zsh
+  '';
+
+  # Requires network
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://ytdl-org.github.io/youtube-dl/";
+    description = "Command-line tool to download videos from YouTube.com and other sites";
+    longDescription = ''
+      youtube-dl is a small, Python-based command-line program to download
+      videos from YouTube.com and a few more sites.  youtube-dl is released to
+      the public domain, which means you can modify it, redistribute it or use
+      it however you like.
+    '';
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ bluescreen303 fpletz ];
+    platforms = with platforms; linux ++ darwin;
+    mainProgram = "youtube-dl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yt-dlp/default.nix b/nixpkgs/pkgs/tools/misc/yt-dlp/default.nix
new file mode 100644
index 000000000000..87326c453131
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yt-dlp/default.nix
@@ -0,0 +1,94 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, brotli
+, hatchling
+, certifi
+, ffmpeg
+, rtmpdump
+, atomicparsley
+, pycryptodomex
+, websockets
+, mutagen
+, requests
+, secretstorage
+, urllib3
+, atomicparsleySupport ? true
+, ffmpegSupport ? true
+, rtmpSupport ? true
+, withAlias ? false # Provides bin/youtube-dl for backcompat
+, update-python-libraries
+}:
+
+buildPythonPackage rec {
+  pname = "yt-dlp";
+  # The websites yt-dlp deals with are a very moving target. That means that
+  # downloads break constantly. Because of that, updates should always be backported
+  # to the latest stable release.
+  version = "2024.4.9";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit version;
+    pname = "yt_dlp";
+    hash = "sha256-fukFcrTTE7WCuZyJ5OzPd5tX/1TtwzGHPGs/unf6qLA=";
+  };
+
+  build-system = [
+    hatchling
+  ];
+
+  dependencies = [
+    brotli
+    certifi
+    mutagen
+    pycryptodomex
+    requests
+    secretstorage  # "optional", as in not in requirements.txt, needed for `--cookies-from-browser`
+    urllib3
+    websockets
+  ];
+
+  # Ensure these utilities are available in $PATH:
+  # - ffmpeg: post-processing & transcoding support
+  # - rtmpdump: download files over RTMP
+  # - atomicparsley: embedding thumbnails
+  makeWrapperArgs =
+    let
+      packagesToBinPath = []
+        ++ lib.optional atomicparsleySupport atomicparsley
+        ++ lib.optional ffmpegSupport ffmpeg
+        ++ lib.optional rtmpSupport rtmpdump;
+    in lib.optionals (packagesToBinPath != [])
+    [ ''--prefix PATH : "${lib.makeBinPath packagesToBinPath}"'' ];
+
+  setupPyBuildFlags = [
+    "build_lazy_extractors"
+  ];
+
+  # Requires network
+  doCheck = false;
+
+  postInstall = lib.optionalString withAlias ''
+    ln -s "$out/bin/yt-dlp" "$out/bin/youtube-dl"
+  '';
+
+  passthru.updateScript = [ update-python-libraries (toString ./.) ];
+
+  meta = with lib; {
+    homepage = "https://github.com/yt-dlp/yt-dlp/";
+    description = "Command-line tool to download videos from YouTube.com and other sites (youtube-dl fork)";
+    longDescription = ''
+      yt-dlp is a youtube-dl fork based on the now inactive youtube-dlc.
+
+      youtube-dl is a small, Python-based command-line program
+      to download videos from YouTube.com and a few more sites.
+      youtube-dl is released to the public domain, which means
+      you can modify it, redistribute it or use it however you like.
+    '';
+    changelog = "https://github.com/yt-dlp/yt-dlp/releases/tag/${version}";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ mkg20001 SuperSandro2000 ];
+    mainProgram = "yt-dlp";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ytarchive/default.nix b/nixpkgs/pkgs/tools/misc/ytarchive/default.nix
new file mode 100644
index 000000000000..fd26b0f5d28c
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ytarchive/default.nix
@@ -0,0 +1,31 @@
+{ lib, buildGoModule, fetchFromGitHub, makeBinaryWrapper, ffmpeg-headless }:
+
+buildGoModule rec {
+  pname = "ytarchive";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "Kethsar";
+    repo = "ytarchive";
+    rev = "v${version}";
+    hash = "sha256-mQgpwuTIEHeDv/PzBHpK1sraxFj8Ef3y8vN5bLw5E94=";
+  };
+
+  vendorHash = "sha256-sjwQ/zEYJRkeWUDB7TzV8z+kET8lVRnQkXYbZbcUeHY=";
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  ldflags = [ "-s" "-w" "-X main.Commit=-${src.rev}" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/ytarchive --prefix PATH : ${lib.makeBinPath [ ffmpeg-headless ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Kethsar/ytarchive";
+    description = "Garbage Youtube livestream downloader";
+    license = licenses.mit;
+    maintainers = [ ];
+    mainProgram = "ytarchive";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ytcast/default.nix b/nixpkgs/pkgs/tools/misc/ytcast/default.nix
new file mode 100644
index 000000000000..798508f2451e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ytcast/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub, }:
+
+buildGoModule rec {
+  pname = "ytcast";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "MarcoLucidi01";
+    repo = "ytcast";
+    rev = "v${version}";
+    sha256 = "sha256-iy9+MgXwP4ALz4NHJyn2ghC5boR53H3ioB2+7tcJunE=";
+  };
+
+  vendorHash = null;
+  ldflags = [ "-X main.progVersion=${version}" ];
+
+  meta = with lib; {
+    description = "A tool to cast YouTube videos from the command-line";
+    homepage = "https://github.com/MarcoLucidi01/ytcast";
+    license = licenses.mit;
+    maintainers = with maintainers; [ waelwindows ];
+    mainProgram = "ytcast";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ytfzf/default.nix b/nixpkgs/pkgs/tools/misc/ytfzf/default.nix
new file mode 100644
index 000000000000..783ac793604f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ytfzf/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, coreutils
+, curl
+, dmenu
+, fzf
+, gnused
+, jq
+, mpv
+, ueberzugpp
+, yt-dlp
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ytfzf";
+  version = "2.6.2";
+
+  src = fetchFromGitHub {
+    owner = "pystardust";
+    repo = "ytfzf";
+    rev = "v${version}";
+    hash = "sha256-rwCVOdu9UfTArISt8ITQtLU4Gj2EZd07bcFKvxXQ7Bc=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+
+  installFlags = [
+    "PREFIX="
+    "DESTDIR=${placeholder "out"}"
+    "doc"
+    "addons"
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/ytfzf" \
+      --prefix PATH : ${lib.makeBinPath [
+        coreutils curl dmenu fzf gnused jq mpv ueberzugpp yt-dlp
+      ]} \
+      --set YTFZF_SYSTEM_ADDON_DIR "$out/share/ytfzf/addons"
+  '';
+
+  meta = with lib; {
+    description = "A posix script to find and watch youtube videos from the terminal";
+    homepage = "https://github.com/pystardust/ytfzf";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dotlambda ];
+    mainProgram = "ytfzf";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/ytmdl/default.nix b/nixpkgs/pkgs/tools/misc/ytmdl/default.nix
new file mode 100644
index 000000000000..9baf2888d78b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/ytmdl/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, python3Packages
+, fetchPypi
+, yt-dlp
+, ffmpeg
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ytmdl";
+  version = "2023.11.26";
+
+  src = fetchPypi {
+    inherit pname;
+    version = builtins.replaceStrings [ ".0" ] [ "." ] version;
+    sha256 = "sha256-Im3rQAs/TYookv6FeGpU6tJxUGBMb6/UW1ZMDg9FW4s=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "bs4" "beautifulsoup4" \
+      --replace "/etc/bash_completion.d" "share/bash-completion/completions" \
+      --replace "/usr/share/zsh/functions/Completion/Unix" "share/zsh/site-functions"
+    sed -i '/python_requires=/d' setup.py
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    ffmpeg-python
+    musicbrainzngs
+    rich
+    simber
+    pydes
+    youtube-search-python
+    unidecode
+    pyxdg
+    downloader-cli
+    beautifulsoup4
+    itunespy
+    mutagen
+    pysocks
+    yt-dlp
+    ytmusicapi
+    spotipy
+  ];
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ ffmpeg ])
+  ];
+
+  # This application has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/deepjyoti30/ytmdl";
+    description = "YouTube Music Downloader";
+    license = licenses.mit;
+    maintainers = with maintainers; [ j0hax ];
+    mainProgram = "ytmdl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix b/nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix
new file mode 100644
index 000000000000..2b8e50a7222e
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubico-piv-tool/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, openssl
+, check
+, pcsclite
+, PCSC
+, gengetopt
+, help2man
+, cmake
+, zlib
+, withApplePCSC ? stdenv.isDarwin
+, nix-update-script
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "yubico-piv-tool";
+  version = "2.5.1";
+
+  outputs = [ "out" "dev" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "Yubico";
+    repo = "yubico-piv-tool";
+    rev = "refs/tags/yubico-piv-tool-${finalAttrs.version}";
+    hash = "sha256-8W5c5JwEAhBAgoRC/pmQs3U3RekQMmkHAXVW36Y+J+U=";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt --replace "-Werror" ""
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    gengetopt
+    help2man
+  ];
+
+  buildInputs = [
+    openssl
+    check
+    zlib.dev
+  ]
+  ++ (if withApplePCSC then [ PCSC ] else [ pcsclite ]);
+
+  cmakeFlags = [
+    "-DGENERATE_MAN_PAGES=ON"
+    "-DCMAKE_INSTALL_BINDIR=bin"
+    "-DCMAKE_INSTALL_INCLUDEDIR=include"
+    "-DCMAKE_INSTALL_MANDIR=share/man"
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+  ];
+
+  configureFlags = [ "--with-backend=${if withApplePCSC then "macscard" else "pcsc"}" ];
+
+  passthru = {
+    updateScript = nix-update-script {
+      extraArgs = [ "--version-regex" "yubico-piv-tool-([0-9.]+)$" ];
+    };
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+      command = "yubico-piv-tool --version";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://developers.yubico.com/yubico-piv-tool/";
+    changelog = "https://developers.yubico.com/yubico-piv-tool/Release_Notes.html";
+    description = ''
+      Used for interacting with the Privilege and Identification Card (PIV)
+      application on a YubiKey
+    '';
+    longDescription = ''
+      The Yubico PIV tool is used for interacting with the Privilege and
+      Identification Card (PIV) application on a YubiKey.
+      With it you may generate keys on the device, importing keys and
+      certificates, and create certificate requests, and other operations.
+      A shared library and a command-line tool is included.
+    '';
+    license = licenses.bsd2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ viraptor anthonyroussel ];
+    mainProgram = "yubico-piv-tool";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix
new file mode 100644
index 000000000000..ce0d06bb089a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-manager-qt/default.nix
@@ -0,0 +1,86 @@
+{ lib
+, mkDerivation
+, fetchurl
+, imagemagick
+, pcsclite
+, pyotherside
+, python3
+, qmake
+, qtbase
+, qtgraphicaleffects
+, qtquickcontrols2
+, yubikey-manager
+, yubikey-personalization
+}:
+
+mkDerivation rec {
+  pname = "yubikey-manager-qt";
+  version = "1.2.5";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubikey-manager-qt/Releases/yubikey-manager-qt-${version}.tar.gz";
+    hash = "sha256-6bKeR3UX2DhXGcKJ1bxvT1aLTgCfc+aNo6ckE89NV+I=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.wrapPython
+    qmake
+    imagemagick
+  ];
+
+  postPatch = ''
+    substituteInPlace ykman-gui/deployment.pri --replace '/usr/bin' "$out/bin"
+  '';
+
+  buildInputs = [
+    pyotherside
+    python3
+    qtbase
+    qtgraphicaleffects
+    qtquickcontrols2
+  ];
+
+  pythonPath = [
+    (yubikey-manager.override { python3Packages = python3.pkgs; })
+  ];
+
+  postInstall = ''
+    # Desktop files
+    install -D -m0644 resources/ykman-gui.desktop "$out/share/applications/ykman-gui.desktop"
+    substituteInPlace "$out/share/applications/ykman-gui.desktop" \
+      --replace Exec=ykman-gui "Exec=$out/bin/ykman-gui"
+
+    # Icons
+    install -Dt $out/share/ykman-gui/icons resources/icons/*.{icns,ico}
+    install -D -m0644 resources/icons/ykman.png "$out/share/icons/hicolor/128x128/apps/ykman.png"
+    ln -s -- "$out/share/icons/hicolor/128x128/apps/ykman.png" "$out/share/icons/hicolor/128x128/apps/ykman-gui.png"
+    for SIZE in 16 24 32 48 64 96; do
+      # set modify/create for reproducible builds
+      convert -scale ''${SIZE} +set date:create +set date:modify \
+        resources/icons/ykman.png ykman.png
+
+      imageFolder="$out/share/icons/hicolor/''${SIZE}x''${SIZE}/apps"
+      install -D -m0644 ykman.png "$imageFolder/ykman.png"
+      ln -s -- "$imageFolder/ykman.png" "$imageFolder/ykman-gui.png"
+    done
+    unset SIZE imageFolder
+  '';
+
+  qtWrapperArgs = [
+    "--prefix" "LD_LIBRARY_PATH" ":" (lib.makeLibraryPath [ pcsclite yubikey-personalization ])
+  ];
+
+  preFixup = ''
+    buildPythonPath "$pythonPath"
+    qtWrapperArgs+=(--prefix PYTHONPATH : "$program_PYTHONPATH")
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform application for configuring any YubiKey over all USB interfaces";
+    homepage = "https://developers.yubico.com/yubikey-manager-qt/";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.cbley ];
+    mainProgram = "ykman-gui";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix
new file mode 100644
index 000000000000..0bad719e3362
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-manager/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, python3Packages
+, installShellFiles
+, procps
+}:
+
+python3Packages.buildPythonPackage rec {
+  pname = "yubikey-manager";
+  version = "5.4.0";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "Yubico";
+    repo = "yubikey-manager";
+    rev = version;
+    hash = "sha256-Rn3iGiiR48EFVAn9BRQ043L8x7WwH7XnazZlVw50IGU=";
+  };
+
+  postPatch = ''
+    substituteInPlace "ykman/pcsc/__init__.py" \
+      --replace 'pkill' '${if stdenv.isLinux then procps else "/usr"}/bin/pkill'
+  '';
+
+  nativeBuildInputs = with python3Packages; [
+    poetry-core
+    pythonRelaxDepsHook
+    installShellFiles
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    cryptography
+    pyscard
+    fido2
+    click
+    keyring
+  ];
+
+  pythonRelaxDeps = [
+    "keyring"
+  ];
+
+  postInstall = ''
+    installManPage man/ykman.1
+
+    installShellCompletion --cmd ykman \
+      --bash <(_YKMAN_COMPLETE=bash_source "$out/bin/ykman") \
+      --zsh  <(_YKMAN_COMPLETE=zsh_source  "$out/bin/ykman") \
+      --fish <(_YKMAN_COMPLETE=fish_source "$out/bin/ykman") \
+  '';
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+    makefun
+  ];
+
+  meta = {
+    homepage = "https://developers.yubico.com/yubikey-manager";
+    changelog = "https://github.com/Yubico/yubikey-manager/releases/tag/${version}";
+    description = "Command line tool for configuring any YubiKey over all USB transports";
+
+    license = lib.licenses.bsd2;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ benley lassulus pinpox nickcao ];
+    mainProgram = "ykman";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix
new file mode 100644
index 000000000000..a63ab7a7ce19
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-personalization-gui/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, lib, fetchurl, mkDerivation, pkg-config, qtbase, qmake, imagemagick
+, libyubikey, yubikey-personalization }:
+
+mkDerivation rec {
+  pname = "yubikey-personalization-gui";
+  version = "3.1.25";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubikey-personalization-gui/Releases/yubikey-personalization-gui-${version}.tar.gz";
+    sha256 = "1knyv5yss8lhzaff6jpfqv12fjf1b8b21mfxzx3qi0hw4nl8n2v8";
+  };
+
+  nativeBuildInputs = [ pkg-config qmake imagemagick ];
+  buildInputs = [ yubikey-personalization qtbase libyubikey ];
+
+  installPhase = ''
+    install -D -m0755 build/release/yubikey-personalization-gui "$out/bin/yubikey-personalization-gui"
+    install -D -m0644 resources/lin/yubikey-personalization-gui.1 "$out/share/man/man1/yubikey-personalization-gui.1"
+
+    # Desktop files
+    install -D -m0644 resources/lin/yubikey-personalization-gui.desktop "$out/share/applications/yubikey-personalization-gui.desktop"
+
+    # Icons
+    install -D -m0644 resources/lin/yubikey-personalization-gui.xpm "$out/share/pixmaps/yubikey-personalization-gui.xpm"
+    install -D -m0644 resources/lin/yubikey-personalization-gui.png "$out/share/icons/hicolor/128x128/apps/yubikey-personalization-gui.png"
+    for SIZE in 16 24 32 48 64 96; do
+      # set modify/create for reproducible builds
+      convert -scale ''${SIZE} +set date:create +set date:modify \
+        resources/lin/yubikey-personalization-gui.png \
+        yubikey-personalization-gui.png
+
+      install -D -m0644 yubikey-personalization-gui.png "$out/share/icons/hicolor/''${SIZE}x''${SIZE}/apps/yubikey-personalization-gui.png"
+    done
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://developers.yubico.com/yubikey-personalization-gui";
+    description = "A QT based cross-platform utility designed to facilitate reconfiguration of the Yubikey";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    mainProgram = "yubikey-personalization-gui";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix b/nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix
new file mode 100644
index 000000000000..f8583f361402
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/yubikey-personalization/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, libusb1, libyubikey, json_c }:
+
+stdenv.mkDerivation rec {
+  pname = "yubikey-personalization";
+  version = "1.20.0";
+
+  src = fetchurl {
+    url = "https://developers.yubico.com/yubikey-personalization/Releases/ykpers-${version}.tar.gz";
+    sha256 = "14wvlwqnwj0gllkpvfqiy8ns938bwvjsz8x1hmymmx32m074vj0f";
+  };
+
+  patches = [
+    # remove after updating to next release
+    (fetchpatch {
+      name = "json-c-0.14-support.patch";
+      url = "https://github.com/Yubico/yubikey-personalization/commit/0aa2e2cae2e1777863993a10c809bb50f4cde7f8.patch";
+      sha256 = "1wnigf3hbq59i15kgxpq3pwrl1drpbj134x81mmv9xm1r44cjva8";
+    })
+
+    # Pull upstream fix for -fno-common toolchain support:
+    #  https://github.com/Yubico/yubikey-personalization/issues/155
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/Yubico/yubikey-personalization/commit/09ea16d9e2030e4da6ad00c1e5147e962aa7ff84.patch";
+      sha256 = "0n3ka8n7f3ndbxv3k0bi77d850kr2ypglkw81gqycpqyaciidqwa";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 libyubikey json_c ];
+
+  configureFlags = [
+    "--with-backend=libusb-1.0"
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    # Don't use 70-yubikey.rules because it depends on ConsoleKit
+    install -D -t $out/lib/udev/rules.d 69-yubikey.rules
+  '';
+
+  meta = with lib; {
+    homepage = "https://developers.yubico.com/yubikey-personalization";
+    description = "A library and command line tool to personalize YubiKeys";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/z-lua/default.nix b/nixpkgs/pkgs/tools/misc/z-lua/default.nix
new file mode 100644
index 000000000000..f9347ad41c45
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/z-lua/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, lua52Packages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "z-lua";
+  version = "1.8.18";
+
+  src = fetchFromGitHub {
+    owner = "skywind3000";
+    repo = "z.lua";
+    rev = version;
+    sha256 = "sha256-QSwZhdBXO+x4vcwRnZjdYdIdWW0Nfu0oImftUgm4wyo=";
+  };
+
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ lua52Packages.lua ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 z.lua $out/bin/z.lua
+    wrapProgram $out/bin/z.lua --set LUA_CPATH "${lua52Packages.luafilesystem}/lib/lua/5.2/lfs.so" --set _ZL_USE_LFS 1;
+    # Create symlink for backwards compatibility. See: https://github.com/NixOS/nixpkgs/pull/96081
+    ln -s $out/bin/z.lua $out/bin/z
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/skywind3000/z.lua";
+    description = "A new cd command that helps you navigate faster by learning your habits";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "z.lua";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix b/nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix
new file mode 100644
index 000000000000..49f8d504d701
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zabbix-cli/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "zabbix-cli";
+  version = "2.3.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "usit-gd";
+    repo = "zabbix-cli";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-B5t/vxCmPdRR9YKOc2htI57Kmk1ZrpwPUln4JoUrK6g=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    packaging
+    requests
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  disabledTests = [
+    # TypeError: option values must be strings
+    "test_descriptor_del"
+    "test_initialize"
+  ];
+
+  meta = with lib; {
+    description = "Command-line interface for Zabbix";
+    homepage = "https://github.com/unioslo/zabbix-cli";
+    license = licenses.gpl3Plus;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zabbixctl/default.nix b/nixpkgs/pkgs/tools/misc/zabbixctl/default.nix
new file mode 100644
index 000000000000..ce45196fdba7
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zabbixctl/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "zabbixctl";
+  version = "unstable-2021-05-25";
+
+  src = fetchFromGitHub {
+    owner = "kovetskiy";
+    repo = pname;
+    rev = "872d73b12901b143898bffe3711b93a34ca75abe";
+    sha256 = "sha256-fWT3cgIHjHcKwFDjWIf3BUUUaVZ7hyc2ibkpU+AsW0I=";
+  };
+
+  vendorHash = "sha256-BphQcPPmeNU7RDtaHJQxIoW8xxD86xWgqLBsLR08Tag=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Most effective way for operating in Zabbix Server";
+    homepage = "https://github.com/kovetskiy/zabbixctl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mmahut ];
+    mainProgram = "zabbixctl";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zalgo/default.nix b/nixpkgs/pkgs/tools/misc/zalgo/default.nix
new file mode 100644
index 000000000000..0ca9f3366ce4
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zalgo/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "zalgo";
+  version = "unstable-2020-08-26";
+
+  src = fetchFromGitHub {
+    owner = "lunasorcery";
+    repo = "zalgo";
+    rev = "6aa1f66cfe183f8164a666730dfeaf39133cf01a";
+    sha256 = "00q56yvfcj2f89wllrckvizihivqmd6l77nihb52ffqd99rdd24w";
+  };
+
+  installPhase = ''
+    install -Dm755 zalgo -t $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Read stdin and corrupt it with combining diacritics";
+    homepage = "https://github.com/lunasorcery/zalgo";
+    license = licenses.unfree;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ djanatyn ];
+    mainProgram = "zalgo";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zellij/default.nix b/nixpkgs/pkgs/tools/misc/zellij/default.nix
new file mode 100644
index 000000000000..dbb7f4ecc054
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zellij/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, stdenv
+, installShellFiles
+, perl
+, pkg-config
+, libiconv
+, openssl
+, DiskArbitration
+, Foundation
+, mandown
+, zellij
+, testers
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zellij";
+  version = "0.40.1";
+
+  src = fetchFromGitHub {
+    owner = "zellij-org";
+    repo = "zellij";
+    rev = "v${version}";
+    hash = "sha256-n8cwsCeKWzTw/psvLL3chBr8EcwGoeKB8JeiLSLna1k=";
+  };
+
+  cargoHash = "sha256-TyIQaovmpiu7USURA//+IQWNT95rrVk0x9TRspXYUNk=";
+
+  nativeBuildInputs = [
+    mandown
+    installShellFiles
+    perl
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+    DiskArbitration
+    Foundation
+  ];
+
+  preCheck = ''
+    HOME=$TMPDIR
+  '';
+
+  postInstall = ''
+    mandown docs/MANPAGE.md > zellij.1
+    installManPage zellij.1
+
+    installShellCompletion --cmd $pname \
+      --bash <($out/bin/zellij setup --generate-completion bash) \
+      --fish <($out/bin/zellij setup --generate-completion fish) \
+      --zsh <($out/bin/zellij setup --generate-completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion { package = zellij; };
+
+  meta = with lib; {
+    description = "A terminal workspace with batteries included";
+    homepage = "https://zellij.dev/";
+    changelog = "https://github.com/zellij-org/zellij/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ therealansh _0x4A6F abbe pyrox0 ];
+    mainProgram = "zellij";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zf/default.nix b/nixpkgs/pkgs/tools/misc/zf/default.nix
new file mode 100644
index 000000000000..402fbbb5f697
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zf/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+, testers
+, zig_0_11
+, callPackage
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "zf";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "natecraddock";
+    repo = "zf";
+    rev = "refs/tags/${finalAttrs.version}";
+    hash = "sha256-JPv/59ELh+CS1/akuLNy0qSimMEJsypPO8hiHFAOirI=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    zig_0_11.hook
+  ];
+
+  postPatch = ''
+    ln -s ${callPackage ./deps.nix { }} $ZIG_GLOBAL_CACHE_DIR/p
+  '';
+
+  postInstall = ''
+    installManPage doc/zf.1
+    installShellCompletion \
+      --bash complete/zf \
+      --fish complete/zf.fish \
+      --zsh complete/_zf
+  '';
+
+  passthru.tests.version = testers.testVersion { package = finalAttrs.finalPackage; };
+
+  meta = {
+    homepage = "https://github.com/natecraddock/zf";
+    description = "A commandline fuzzy finder that prioritizes matches on filenames";
+    changelog = "https://github.com/natecraddock/zf/releases/tag/${finalAttrs.version}";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ dit7ya figsoda mmlb ];
+    mainProgram = "zf";
+  };
+})
diff --git a/nixpkgs/pkgs/tools/misc/zf/deps.nix b/nixpkgs/pkgs/tools/misc/zf/deps.nix
new file mode 100644
index 000000000000..226dd9eaeb6a
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zf/deps.nix
@@ -0,0 +1,13 @@
+# generated by zon2nix (https://github.com/nix-community/zon2nix)
+
+{ linkFarm, fetchzip }:
+
+linkFarm "zig-packages" [
+  {
+    name = "1220dee955839b7f267c1bb21e0ee60888c08f408c30f0722b243cabcc8cce8b7508";
+    path = fetchzip {
+      url = "https://codeberg.org/dude_the_builder/ziglyph/archive/v0.11.1.tar.gz";
+      hash = "sha256-tpl4RyCcukKWZehlZf6t2n41gYFDyL27t7+bzcxHP7g=";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/tools/misc/zitadel-tools/default.nix b/nixpkgs/pkgs/tools/misc/zitadel-tools/default.nix
new file mode 100644
index 000000000000..cd5ae370805b
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zitadel-tools/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "zitadel-tools";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "zitadel";
+    repo = "zitadel-tools";
+    rev = "v${version}";
+    hash = "sha256-r9GEHpfDlpK98/dnsxjhUgWKn6vHQla8Z+jQUVrHGyo=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  vendorHash = "sha256-y2PYj0XRSgfiaYpeqAh4VR/+NKUPKd1c0w9pPCWsUrY=";
+
+  ldflags = [
+    "-s" "-w"
+    "-X main.version=${version}"
+  ];
+
+  postInstall = ''
+    local INSTALL="$out/bin/zitadel-tools"
+    installShellCompletion --cmd zitadel-tools \
+      --bash <($out/bin/zitadel-tools completion bash) \
+      --fish <($out/bin/zitadel-tools completion fish) \
+      --zsh <($out/bin/zitadel-tools completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Helper tools for zitadel";
+    homepage = "https://github.com/zitadel/zitadel-tools";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ janik ];
+    mainProgram = "zitadel-tools";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zotero-translation-server/default.nix b/nixpkgs/pkgs/tools/misc/zotero-translation-server/default.nix
new file mode 100644
index 000000000000..5150df1fbb8f
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zotero-translation-server/default.nix
@@ -0,0 +1,36 @@
+{ lib, buildNpmPackage, fetchFromGitHub, nodejs }:
+
+buildNpmPackage rec {
+  pname = "zotero-translation-server";
+  version = "unstable-2023-07-13";
+
+  src = fetchFromGitHub {
+    owner = "zotero";
+    repo = "translation-server";
+    rev = "cf96d57f4e2af66fee7df9bad00681b3f4ac7d77";
+    hash = "sha256-GJn7UAl0raVGzplvFzo4A0RUjNbyGt/YI2mt1UZIJv0=";
+    fetchSubmodules = true;
+  };
+
+  npmDepsHash = "sha256-JHoBxUybs1GGRxEVG5GgX2mOCplTgR5dcPjnR42SEbY=";
+
+  makeCacheWritable = true;
+
+  dontNpmBuild = true;
+
+  postInstall = ''
+    mkdir -p $out/bin/ $out/share/zotero-translation-server/
+    makeWrapper ${nodejs}/bin/node $out/bin/translation-server \
+      --add-flags "$out/lib/node_modules/translation-server/src/server.js"
+    ln -s $out/lib/node_modules/translation-server/config $out/share/zotero-translation-server/config
+    ln -s $out/lib/node_modules/translation-server/modules $out/share/zotero-translation-server/modules
+  '';
+
+  meta = with lib; {
+    description = "A Node.js-based server to run Zotero translators";
+    homepage = "https://github.com/zotero/translation-server";
+    license = licenses.agpl3Only;
+    maintainers = [ ];
+    mainProgram = "translation-server";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zoxide/default.nix b/nixpkgs/pkgs/tools/misc/zoxide/default.nix
new file mode 100644
index 000000000000..091730f7c1e6
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zoxide/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, withFzf ? true
+, fzf
+, installShellFiles
+, libiconv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zoxide";
+  version = "0.9.4";
+
+  src = fetchFromGitHub {
+    owner = "ajeetdsouza";
+    repo = "zoxide";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Yp7uLoFEDkb0TztcDCeAkt+EHQRt56ncPqkBtd/zzzI=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  postPatch = lib.optionalString withFzf ''
+    substituteInPlace src/util.rs \
+      --replace '"fzf"' '"${fzf}/bin/fzf"'
+  '';
+
+  cargoHash = "sha256-t6GVoMBCD0s36GhtqJu9Z2bwwq5P+beEObG+gSC+QUw=";
+
+  postInstall = ''
+    installManPage man/man*/*
+    installShellCompletion --cmd zoxide \
+      --bash contrib/completions/zoxide.bash \
+      --fish contrib/completions/zoxide.fish \
+      --zsh contrib/completions/_zoxide
+  '';
+
+  meta = with lib; {
+    description = "A fast cd command that learns your habits";
+    homepage = "https://github.com/ajeetdsouza/zoxide";
+    changelog = "https://github.com/ajeetdsouza/zoxide/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ ysndr cole-h SuperSandro2000 ];
+    mainProgram = "zoxide";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix b/nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix
new file mode 100644
index 000000000000..d16410c31538
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zsh-autoenv/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "zsh-autoenv";
+  version = "unstable-2017-12-16";
+
+  src = fetchFromGitHub {
+    owner = "Tarrasch";
+    repo = "zsh-autoenv";
+    rev = "2c8cfbcea8e7286649840d7ec98d7e9d5e1d45a0";
+    sha256 = "004svkfzhc3ab6q2qvwzgj36wvicg5bs8d2gcibx6adq042di7zj";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/{bin,share}
+    cp -R $src $out/share/zsh-autoenv
+
+    cat <<SCRIPT > $out/bin/zsh-autoenv-share
+    #!${runtimeShell}
+    # Run this script to find the zsh-autoenv shared folder where all the shell
+    # integration scripts are living.
+    echo $out/share/zsh-autoenv
+    SCRIPT
+    chmod +x $out/bin/zsh-autoenv-share
+  '';
+
+  meta = with lib; {
+    description = "Automatically sources whitelisted .autoenv.zsh files";
+    longDescription = ''
+      zsh-autoenv automatically sources (known/whitelisted)
+      .autoenv.zsh files, typically used in project root directories.
+      It handles "enter" and "leave" events, nesting, and stashing of
+      variables (overwriting and restoring).
+    '';
+    homepage = "https://github.com/Tarrasch/zsh-autoenv";
+    mainProgram = "zsh-autoenv-share";
+    platforms = lib.platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zsh-history-to-fish/default.nix b/nixpkgs/pkgs/tools/misc/zsh-history-to-fish/default.nix
new file mode 100644
index 000000000000..4e8da001f835
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zsh-history-to-fish/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchPypi
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "zsh-history-to-fish";
+  version = "0.3.0";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-expPuffZttyXNRreplPC5Ee/jfWAyOnmjTIMXONtrnw=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+  ];
+
+  # upstream has no tests
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "zsh_history_to_fish"
+  ];
+
+  meta = with lib; {
+    description = "Bring your ZSH history to Fish shell";
+    homepage = "https://github.com/rsalmei/zsh-history-to-fish";
+    license = licenses.mit;
+    maintainers = with maintainers; [ alanpearce ];
+    mainProgram = "zsh-history-to-fish";
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix b/nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix
new file mode 100644
index 000000000000..f719fe3b6922
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zsh-navigation-tools/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "zsh-navigation-tools";
+  version = "2.2.7";
+
+  src = fetchFromGitHub {
+    owner = "psprint";
+    repo = "zsh-navigation-tools";
+    rev = "v${version}";
+    sha256 = "0c4kb19aprb868xnlyq8h1nd2d32r0zkrqblsrzvg7m9gx8vqps8";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/zsh/site-functions/
+    cp zsh-navigation-tools.plugin.zsh $out/share/zsh/site-functions/
+    cp n-* $out/share/zsh/site-functions/
+    cp znt-* $out/share/zsh/site-functions/
+    mkdir -p $out/share/zsh/site-functions/.config/znt
+    cp .config/znt/n-* $out/share/zsh/site-functions/.config/znt
+  '';
+
+  meta = with lib; {
+    description = "Curses-based tools for ZSH";
+    homepage = "https://github.com/psprint/zsh-navigation-tools";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/tools/misc/zthrottle/default.nix b/nixpkgs/pkgs/tools/misc/zthrottle/default.nix
new file mode 100644
index 000000000000..1598215e0eb9
--- /dev/null
+++ b/nixpkgs/pkgs/tools/misc/zthrottle/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, zsh }:
+
+stdenv.mkDerivation rec {
+  pname = "zthrottle";
+  version = "unstable-2017-7-24";
+
+  src = fetchFromGitHub {
+    owner = "anko";
+    repo = pname;
+    rev = "f62066661e49375baeb891fa8e43ad4527cbd0a0";
+    sha256 = "1ipvwmcsigzmxlg7j22cxpvdcgqckkmfpsnvzy18nbybd5ars9l5";
+  };
+
+  buildInputs = [ zsh ];
+
+  installPhase = ''
+    install -D zthrottle $out/bin/zthrottle
+  '';
+
+  meta = with lib; {
+    description = "A program that throttles a pipeline, only letting a line through at most every $1 seconds";
+    homepage = "https://github.com/anko/zthrottle";
+    license = licenses.unlicense;
+    maintainers = [ maintainers.ckie ];
+    platforms = platforms.unix;
+    mainProgram = "zthrottle";
+  };
+}