about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/misc
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/misc')
-rw-r--r--nixpkgs/pkgs/applications/misc/1password-gui/darwin.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/1password-gui/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/1password-gui/linux.nix141
-rwxr-xr-xnixpkgs/pkgs/applications/misc/1password-gui/update.sh58
-rw-r--r--nixpkgs/pkgs/applications/misc/1password/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/misc/9menu/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/ArchiSteamFarm/default.nix81
-rw-r--r--nixpkgs/pkgs/applications/misc/ArchiSteamFarm/deps.nix130
-rwxr-xr-xnixpkgs/pkgs/applications/misc/ArchiSteamFarm/update.sh26
-rw-r--r--nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/.gitignore1
-rw-r--r--nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/default.nix33
-rwxr-xr-xnixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/update.sh19
-rw-r--r--nixpkgs/pkgs/applications/misc/HentaiAtHome/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/OSCAR/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/ablog/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/abook/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/acpic/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/activate-linux/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/adobe-reader/builder.sh43
-rw-r--r--nixpkgs/pkgs/applications/misc/adobe-reader/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/aitrack/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/albert/default.nix81
-rw-r--r--nixpkgs/pkgs/applications/misc/almanah/default.nix101
-rw-r--r--nixpkgs/pkgs/applications/misc/antfs-cli/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/anup/Cargo.lock1179
-rw-r--r--nixpkgs/pkgs/applications/misc/anup/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/ape/apeclex.nix8
-rw-r--r--nixpkgs/pkgs/applications/misc/ape/clex.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/ape/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/appcleaner/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/appeditor/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/apvlv/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/misc/apvlv/fix-build-with-poppler-0.73.0.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/archivebox/default.nix102
-rw-r--r--nixpkgs/pkgs/applications/misc/archiver/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/archivy/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/artha/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/asciiquarium/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/audio/sox/0001-musl-rewind-pipe-workaround.patch24
-rw-r--r--nixpkgs/pkgs/applications/misc/audio/sox/default.nix91
-rw-r--r--nixpkgs/pkgs/applications/misc/audio/soxr/arm64-check.patch79
-rw-r--r--nixpkgs/pkgs/applications/misc/audio/soxr/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/audio/wavrsocvt/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/ausweisapp/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/authenticator/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/authy/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/auto-multiple-choice/default.nix177
-rw-r--r--nixpkgs/pkgs/applications/misc/autospotting/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/avalonia-ilspy/default.nix117
-rw-r--r--nixpkgs/pkgs/applications/misc/avalonia-ilspy/deps.nix218
-rw-r--r--nixpkgs/pkgs/applications/misc/avalonia-ilspy/remove-broken-sources.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/avell-unofficial-control-center/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/avizo/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/avrdudess/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/azuredatastudio/default.nix198
-rw-r--r--nixpkgs/pkgs/applications/misc/bambu-studio/0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.patch34
-rw-r--r--nixpkgs/pkgs/applications/misc/bambu-studio/default.nix175
-rw-r--r--nixpkgs/pkgs/applications/misc/bambu-studio/orca-slicer.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/barrier/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/base16-universal-manager/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/bashSnippets/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/batsignal/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/bazecor/10-dygma.rules4
-rw-r--r--nixpkgs/pkgs/applications/misc/bazecor/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/bb/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/bemenu/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/bfcal/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/bibletime/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/bicon/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/bikeshed/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/binocle/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/birdtray/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/bitwarden-menu/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/bklk/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/bleachbit/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/blender/darwin.patch80
-rw-r--r--nixpkgs/pkgs/applications/misc/blender/default.nix259
-rw-r--r--nixpkgs/pkgs/applications/misc/blender/draco.patch26
-rw-r--r--nixpkgs/pkgs/applications/misc/blender/fix-include.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/blender/libdecor.patch34
-rw-r--r--nixpkgs/pkgs/applications/misc/blender/wrapper.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/blogc/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/bloodhound/default.nix127
-rw-r--r--nixpkgs/pkgs/applications/misc/blucontrol/wrapper.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/bluetooth_battery/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/blugon/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/boatswain/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/bottles/default.nix114
-rw-r--r--nixpkgs/pkgs/applications/misc/bottles/fhsenv.nix112
-rw-r--r--nixpkgs/pkgs/applications/misc/bottles/vulkan_icd.patch15
-rw-r--r--nixpkgs/pkgs/applications/misc/break-time/Cargo.lock1621
-rw-r--r--nixpkgs/pkgs/applications/misc/break-time/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/brewtarget/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/buku/default.nix86
-rw-r--r--nixpkgs/pkgs/applications/misc/caerbannog/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/calcoo/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/misc/calcure/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/calcurse/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/calibre/default.nix211
-rw-r--r--nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/cambrinary/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/camunda-modeler/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/misc/candle/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/cardpeek/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/cartridges/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/cask-server/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/cataract/build.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/cataract/default.nix8
-rw-r--r--nixpkgs/pkgs/applications/misc/cataract/unstable.nix8
-rw-r--r--nixpkgs/pkgs/applications/misc/catclock/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/cbatticon/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/charm/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/chatblade/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/cheat/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/cherrytree/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/chewing-editor/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/cipher/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/misc/citations/default.nix91
-rw-r--r--nixpkgs/pkgs/applications/misc/cli-visualizer/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/clight/clightd.nix80
-rw-r--r--nixpkgs/pkgs/applications/misc/clight/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/clipit/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/clipmenu/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/clipqr/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/cloak/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/cmatrix/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/cobalt/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/cobang/default.nix104
-rw-r--r--nixpkgs/pkgs/applications/misc/cointop/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/collision/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/collision/make.patch20
-rw-r--r--nixpkgs/pkgs/applications/misc/collision/shards.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/colorstorm/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/colort/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/coltrane/Gemfile2
-rw-r--r--nixpkgs/pkgs/applications/misc/coltrane/Gemfile.lock45
-rw-r--r--nixpkgs/pkgs/applications/misc/coltrane/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/coltrane/gemset.nix159
-rw-r--r--nixpkgs/pkgs/applications/misc/comodoro/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/conceal/Cargo.lock853
-rw-r--r--nixpkgs/pkgs/applications/misc/conceal/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/conduktor/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/confclerk/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/confetty/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/confy/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/coolreader/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/copyq/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/corectrl/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/misc/corectrl/polkit-dir.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/cotp/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/coursera-dl/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/misc/crow-translate/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/crumbs/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/ctodo/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/cubiomes-viewer/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/coreaction/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corearchiver/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corefm/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/coregarage/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corehunt/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/coreimage/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/coreinfo/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corekeyboard/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corepad/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corepaint/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corepdf/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corepins/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corerenamer/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/coreshot/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corestats/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corestuff/0001-fix-installPhase.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/corestuff/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/coreterminal/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/coretime/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/coretoppings/0001-fix-install-phase.patch8
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/coretoppings/default.nix87
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/coreuniverse/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/libcprime/0001-fix-application-dirs.patch31
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/libcprime/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/cubocore-packages/libcsys/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/cum/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/cura/plugins.nix76
-rw-r--r--nixpkgs/pkgs/applications/misc/curaengine/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/curaengine/stable.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/darkman/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/dasel/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/databricks-sql-cli/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/dbeaver/default.nix140
-rw-r--r--nixpkgs/pkgs/applications/misc/dbx/default.nix101
-rw-r--r--nixpkgs/pkgs/applications/misc/ddcui/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/ddgr/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/deadd-notification-center/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/debian-goodies/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/deckmaster/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/deco/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/devdocs-desktop/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/devilspie2/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/dialect/default.nix81
-rw-r--r--nixpkgs/pkgs/applications/misc/dict-cc-py/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/diebahn/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/misc/diff-pdf/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/diffpdf/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/diffpdf/fix_path_poppler_qt5.patch16
-rw-r--r--nixpkgs/pkgs/applications/misc/diffuse/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/digitalbitbox/default.nix148
-rw-r--r--nixpkgs/pkgs/applications/misc/ding/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/ding/dict.patch26
-rw-r--r--nixpkgs/pkgs/applications/misc/djvulibre/CVE-2021-3500+CVE-2021-32490+CVE-2021-32491+CVE-2021-32492+CVE-2021-32493.patch105
-rw-r--r--nixpkgs/pkgs/applications/misc/djvulibre/c++17-register-class.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/djvulibre/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/dmensamenu/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/dmensamenu/dmenu-path.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/dmenu-rs/Cargo.lock1085
-rw-r--r--nixpkgs/pkgs/applications/misc/dmenu-rs/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/misc/dmenu/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/dmenu/wayland.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/dnd-tools/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/dockbarx/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/misc/doctave/cargo-lock.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/doctave/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/doing/Gemfile2
-rw-r--r--nixpkgs/pkgs/applications/misc/doing/Gemfile.lock25
-rw-r--r--nixpkgs/pkgs/applications/misc/doing/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/doing/gemset.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/done/Cargo.lock3504
-rw-r--r--nixpkgs/pkgs/applications/misc/done/default.nix76
-rw-r--r--nixpkgs/pkgs/applications/misc/dotfiles/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/downonspot/Cargo.lock.patch97
-rw-r--r--nixpkgs/pkgs/applications/misc/downonspot/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/dozenal/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/dozenal/lua-header.patch16
-rw-r--r--nixpkgs/pkgs/applications/misc/dstask/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/duden/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/dupeguru/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/dwdiff/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/dwmbar/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/dwmblocks/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/eaglemode/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/misc/edgetx/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/effitask/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/elastic/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/electron-cash/default.nix96
-rw-r--r--nixpkgs/pkgs/applications/misc/electrum/default.nix146
-rw-r--r--nixpkgs/pkgs/applications/misc/electrum/grs.nix119
-rw-r--r--nixpkgs/pkgs/applications/misc/electrum/ltc.nix141
-rw-r--r--nixpkgs/pkgs/applications/misc/electrum/update.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/elf-dissector/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/elf-dissector/fix_build_for_src_lib_disassembler_disassembler.diff17
-rw-r--r--nixpkgs/pkgs/applications/misc/elfx86exts/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/elogind/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/misc/emem/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/emoji-picker/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/emoji-picker/xsys.patch63
-rw-r--r--nixpkgs/pkgs/applications/misc/emojipick/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/eos-installer/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/epdfview/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/epr/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/ericw-tools/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/misc/et/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/etesync-dav/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/eureka-ideas/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/evtest-qt/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/evtest/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/exercism/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/expenses/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/extract_url/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/faircamp/Cargo.lock2659
-rw-r--r--nixpkgs/pkgs/applications/misc/faircamp/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/misc/faircamp/test-wav.nix14
-rw-r--r--nixpkgs/pkgs/applications/misc/far2l/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/misc/fbmenugen/0001-Fix-paths.patch60
-rw-r--r--nixpkgs/pkgs/applications/misc/fbmenugen/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/fead/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/feedbackd/default.nix107
-rw-r--r--nixpkgs/pkgs/applications/misc/fehlstart/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/fehlstart/use-nix-profiles.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/fetchmail/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/fetchmail/v7.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/ff2mpv/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/fff/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/filet/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/findex/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/firefly-desktop/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/firestarter/default.nix110
-rw-r--r--nixpkgs/pkgs/applications/misc/flamerobin/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/flashprint/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/flavours/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/flowtime/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/misc/fluidd/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/fluxboxlauncher/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/font-manager/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/misc/fontfinder/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/fontpreview/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/formatter/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/formatter/fix-paths.patch53
-rw-r--r--nixpkgs/pkgs/applications/misc/foxtrotgps/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/freemind/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/freeplane/default.nix152
-rw-r--r--nixpkgs/pkgs/applications/misc/fspy/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/fsv/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/furtherance/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/fusee-interfacee-tk/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/fuzzel/default.nix76
-rw-r--r--nixpkgs/pkgs/applications/misc/gImageReader/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/galculator/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/gallery-dl/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/gammu/bashcomp-dir.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/gammu/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/gammu/gammu-config-dialog.patch20
-rw-r--r--nixpkgs/pkgs/applications/misc/gammu/systemd.patch30
-rw-r--r--nixpkgs/pkgs/applications/misc/ganttproject-bin/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/gcal/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/gcalcli/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/gcfflasher/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/gcstar/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/geek-life/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/genact/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/genesys/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/genxword/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/geoipupdate/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/get_iplayer/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/getxbook/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/ghosttohugo/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/gimoji/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/girara/default.nix87
-rw-r--r--nixpkgs/pkgs/applications/misc/gitit/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/gkrellm/default.nix76
-rw-r--r--nixpkgs/pkgs/applications/misc/glava/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/misc/globe-cli/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/glom/default.nix132
-rw-r--r--nixpkgs/pkgs/applications/misc/gmnitohtml/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/gmrun/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/gmrun/find-config-file-in-system-etc-dir.patch18
-rw-r--r--nixpkgs/pkgs/applications/misc/gmrun/gcc43.patch51
-rw-r--r--nixpkgs/pkgs/applications/misc/gmrun/gmrun-0.9.2-xdg.patch58
-rw-r--r--nixpkgs/pkgs/applications/misc/gmtp/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-epub-thumbnailer/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-extension-manager/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-firmware/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-frog/default.nix97
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-frog/update-compatible-with-non-flatpak-env.patch33
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-multi-writer/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-recipes/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-secrets/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-solanum/default.nix76
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-tecla/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/gnome-usage/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/go-jira/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/go-org/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/gofu/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/golden-cheetah-bin/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/golden-cheetah/0001-Fix-building-with-bison-3.7.patch59
-rw-r--r--nixpkgs/pkgs/applications/misc/golden-cheetah/default.nix83
-rw-r--r--nixpkgs/pkgs/applications/misc/goldendict-ng/default.nix93
-rw-r--r--nixpkgs/pkgs/applications/misc/goldendict/0001-dont-check-for-updates.patch49
-rw-r--r--nixpkgs/pkgs/applications/misc/goldendict/0001-dont-use-maclibs.patch62
-rw-r--r--nixpkgs/pkgs/applications/misc/goldendict/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/gollum/Gemfile10
-rw-r--r--nixpkgs/pkgs/applications/misc/gollum/Gemfile.lock147
-rw-r--r--nixpkgs/pkgs/applications/misc/gollum/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/gollum/gemset.nix632
-rw-r--r--nixpkgs/pkgs/applications/misc/gomatrix/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/googleearth-pro/default.nix125
-rw-r--r--nixpkgs/pkgs/applications/misc/googler/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/gopacked/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/gostatic/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/gpa/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/gpg-mdp/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/gphoto2/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/gphoto2/gphotofs.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/gpsbabel/debian-patches.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/gpsbabel/debian-patches.txt6
-rw-r--r--nixpkgs/pkgs/applications/misc/gpsbabel/default.nix119
-rw-r--r--nixpkgs/pkgs/applications/misc/gpscorrelate/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/gpsprune/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/gpu-burn/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/gpu-viewer/default.nix76
-rw-r--r--nixpkgs/pkgs/applications/misc/gpx-viewer/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/gpx/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/gpxlab/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/gpxsee/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/gradience/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/misc/gramps/default.nix124
-rw-r--r--nixpkgs/pkgs/applications/misc/grb/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/green-pdfviewer/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/green-pdfviewer/gdk-libs.patch55
-rw-r--r--nixpkgs/pkgs/applications/misc/gremlin-console/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/gremlin-server/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/grip/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/grsync/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/gsctl/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/gsctl/go120-compatibility.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/gsimplecal/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/gtk2fontsel/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/gtkradiant/default.nix255
-rw-r--r--nixpkgs/pkgs/applications/misc/gum/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/gummi/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/gv/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/gxkb/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/gxmessage/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/gxneur/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/hamster/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/harsh/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/has/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/haxor-news/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/hcl2json/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/hdate/default.nix16
-rw-r--r--nixpkgs/pkgs/applications/misc/health/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/heimer/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/hello-unfree/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/herbe/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/hivemind/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/hmm/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/hollywood/default.nix94
-rw-r--r--nixpkgs/pkgs/applications/misc/hollywood/nixos-paths.patch67
-rw-r--r--nixpkgs/pkgs/applications/misc/holochain-launcher/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/houdini/default.nix101
-rw-r--r--nixpkgs/pkgs/applications/misc/houdini/runtime-build.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/houdini/runtime.nix11
-rw-r--r--nixpkgs/pkgs/applications/misc/hovercraft/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/hr/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/hstr/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/html5validator/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/hubstaff/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/hue-plus/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/huggle/00-remove-third-party.patch14
-rw-r--r--nixpkgs/pkgs/applications/misc/huggle/01-extensions.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/huggle/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/hyprdim/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/hyprland-autoname-workspaces/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/hyprnome/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/icesl/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/ikiwiki/default.nix99
-rw-r--r--nixpkgs/pkgs/applications/misc/ikiwiki/remove-markdown-tests.patch35
-rw-r--r--nixpkgs/pkgs/applications/misc/imaginer/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/inherd-quake/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/inkcut/default.nix95
-rw-r--r--nixpkgs/pkgs/applications/misc/inlyne/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/input-leap/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/insulator2/Cargo.lock5639
-rw-r--r--nixpkgs/pkgs/applications/misc/insulator2/default.nix100
-rw-r--r--nixpkgs/pkgs/applications/misc/ipatool/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/ipmicfg/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/ipmiview/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/misc/iptsd/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/itd/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/j4-dmenu-desktop/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile8
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile.lock104
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/basic/gemset.nix434
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile29
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile.lock172
-rw-r--r--nixpkgs/pkgs/applications/misc/jekyll/full/gemset.nix812
-rwxr-xr-xnixpkgs/pkgs/applications/misc/jekyll/update.sh15
-rw-r--r--nixpkgs/pkgs/applications/misc/jetbrains-toolbox/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/jgmenu/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/jiten/cookie-fix.patch39
-rw-r--r--nixpkgs/pkgs/applications/misc/jiten/default.nix111
-rw-r--r--nixpkgs/pkgs/applications/misc/johnny-reborn/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/johnny-reborn/with-data.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/johnny/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/joplin-desktop/default.nix81
-rw-r--r--nixpkgs/pkgs/applications/misc/josm/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/jot/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/jotta-cli/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/jp2a/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/jquake/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/jrnl/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/junction/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/k2pdfopt/0001-Fix-CMakeLists.patch49
-rw-r--r--nixpkgs/pkgs/applications/misc/k2pdfopt/default.nix170
-rw-r--r--nixpkgs/pkgs/applications/misc/k40-whisperer/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/misc/k4dirstat/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/kanjidraw/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/kapow/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/kaufkauflist/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/kbt/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/kchmviewer/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/kdbplus/default.nix76
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-diff/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/charactercopy/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/keeagent/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/keepasshttp/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/keetraytotp/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/keepass-plugins/qrcodeview/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/keepassxc/darwin.patch37
-rw-r--r--nixpkgs/pkgs/applications/misc/keepassxc/default.nix148
-rw-r--r--nixpkgs/pkgs/applications/misc/keepassxc/firefox-native-messaging-host.json9
-rw-r--r--nixpkgs/pkgs/applications/misc/keepmenu/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/keeweb/default.nix117
-rw-r--r--nixpkgs/pkgs/applications/misc/kemai/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/keyleds/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/keylight-controller-mschneider82/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/misc/keymapp/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/keystore-explorer/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/khal/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/misc/khard/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/kickoff/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/kile-wl/Cargo.lock295
-rw-r--r--nixpkgs/pkgs/applications/misc/kile-wl/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/kiln/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/kiwix/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/kiwix/lib.nix63
-rw-r--r--nixpkgs/pkgs/applications/misc/kiwix/tools.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/kjv/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/kjv/lukesmithxyz-kjv.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/klayout/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/klipper-estimator/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/klipperscreen/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/kondo/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/konsave/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/kord/Cargo.lock3574
-rw-r--r--nixpkgs/pkgs/applications/misc/kord/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/koreader/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/krabby/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/kratos/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/krename/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/ksmoothdock/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/kup/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/kupfer/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/kuro/default.nix89
-rw-r--r--nixpkgs/pkgs/applications/misc/kuro/package.json149
-rw-r--r--nixpkgs/pkgs/applications/misc/latte-dock/0001-Disable-autostart.patch34
-rw-r--r--nixpkgs/pkgs/applications/misc/latte-dock/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/lavalauncher/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/leetcode-cli/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/lemonade/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/lenmus/default.nix99
-rw-r--r--nixpkgs/pkgs/applications/misc/liberasurecode/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/misc/librecad/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/lifelines/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/limesctl/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/livecaptions/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/llpp/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/logseq/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/misc/loxodo/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/loxodo/wxpython.patch25
-rw-r--r--nixpkgs/pkgs/applications/misc/lscolors/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/lsd2dsl/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/lswt/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/lttoolbox/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/ltwheelconf/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/lunatask/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/lutris/default.nix153
-rw-r--r--nixpkgs/pkgs/applications/misc/lutris/fhsenv.nix161
-rw-r--r--nixpkgs/pkgs/applications/misc/lyx/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/madonctl/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/mainsail/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/makeself/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/mako/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/maliit-framework/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/maliit-keyboard/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/misc/mangal/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/markets/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/marktext/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/masterpdfeditor/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/masterpdfeditor4/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/matcha-rss-digest/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/mbutil/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/mdp/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/mdzk/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/mdzk/update-mdbook-for-rust-1.64.patch246
-rw-r--r--nixpkgs/pkgs/applications/misc/mediaelch/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/mediainfo-gui/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/mediainfo/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/meerk40t/camera.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/meerk40t/default.nix81
-rw-r--r--nixpkgs/pkgs/applications/misc/megacmd/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/misc/megasync/default.nix129
-rw-r--r--nixpkgs/pkgs/applications/misc/megasync/ffmpeg_44.patch14
-rw-r--r--nixpkgs/pkgs/applications/misc/megasync/install-megasync.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/megasync/noinstall-distro-version.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/memo/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/mencal/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/menumaker/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/mepo/default.nix98
-rw-r--r--nixpkgs/pkgs/applications/misc/merkaartor/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/metadata-cleaner/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/metamorphose2/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/metar/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/michabo/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/milu/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/minder/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/misc/minigalaxy/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/mission-center/Cargo.lock2146
-rw-r--r--nixpkgs/pkgs/applications/misc/mission-center/default.nix150
-rw-r--r--nixpkgs/pkgs/applications/misc/mission-center/gatherer-Cargo.lock1021
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/build.xml.patch46
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/deps.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/splitter/build.xml.patch54
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/splitter/default.nix83
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/splitter/fix-failing-test.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/splitter/testinputs.nix18
-rw-r--r--nixpkgs/pkgs/applications/misc/mkgmap/testinputs.nix66
-rwxr-xr-xnixpkgs/pkgs/applications/misc/mkgmap/update.sh7
-rw-r--r--nixpkgs/pkgs/applications/misc/mnamer/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/mnamer/remove_requirements.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/mnamer/update_hack.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/mob/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/mobilecoin-wallet/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/monitorcontrol/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/moolticute/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/moonlight-embedded/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/moonlight-qt/darwin.diff38
-rw-r--r--nixpkgs/pkgs/applications/misc/moonlight-qt/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/misc/mop/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/mozphab/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/misc/mpvc/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/mu-repo/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/0001-Use-command-v-in-favor-of-which.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/0002-Add-Darwin-deps.patch57
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/0003-Fix-cpp-build.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/1.17/darwin.patch30
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/1.17/default.nix94
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/1.17/mupdf-1.14-shared_libs.patch39
-rw-r--r--nixpkgs/pkgs/applications/misc/mupdf/default.nix215
-rw-r--r--nixpkgs/pkgs/applications/misc/mwic/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/mya/argp.patch26
-rw-r--r--nixpkgs/pkgs/applications/misc/mya/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/mysql-workbench/default.nix209
-rw-r--r--nixpkgs/pkgs/applications/misc/mysql-workbench/fix-swig-build.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/mysql-workbench/fix-xml2.patch25
-rw-r--r--nixpkgs/pkgs/applications/misc/mysql-workbench/hardcode-paths.patch203
-rw-r--r--nixpkgs/pkgs/applications/misc/mystem/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/nanoblogger/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/natural-docs/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/navi/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/neo/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/neo4j-desktop/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/nerd-font-patcher/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/nimbo/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/nix-tour/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/nixnote2/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/notable/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/notejot/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/notesnook/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/notify-osd-customizable/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/notify-osd/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/notifymuch/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/nrsc5/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/misc/ns-usbloader/99-ns-usbloader.rules4
-rw-r--r--nixpkgs/pkgs/applications/misc/ns-usbloader/default.nix105
-rw-r--r--nixpkgs/pkgs/applications/misc/ns-usbloader/make-deterministic.patch130
-rw-r--r--nixpkgs/pkgs/applications/misc/ns-usbloader/no-launch4j.patch70
-rw-r--r--nixpkgs/pkgs/applications/misc/numberstation/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/nut/default.nix106
-rw-r--r--nixpkgs/pkgs/applications/misc/nut/hardcode-paths.patch15
-rw-r--r--nixpkgs/pkgs/applications/misc/nut/nutshutdown-conf-default.patch10
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-bar/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-bar/fix-paths.patch47
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-displays/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-dock-hyprland/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-dock/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-launchers/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-look/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-look/fix-paths.patch35
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-look/go.mod10
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-menu/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-panel/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/nwg-wrapper/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/obinskit/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/obs-cli/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/obsidian/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/misc/octoprint/default.nix261
-rw-r--r--nixpkgs/pkgs/applications/misc/octoprint/ffmpeg-path.patch22
-rw-r--r--nixpkgs/pkgs/applications/misc/octoprint/pip-path.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/octoprint/plugins.nix482
-rw-r--r--nixpkgs/pkgs/applications/misc/oil-buku/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/ola/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/omegat.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/onagre/Cargo.lock5128
-rw-r--r--nixpkgs/pkgs/applications/misc/onagre/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/onboard/default.nix178
-rw-r--r--nixpkgs/pkgs/applications/misc/onboard/fix-paths.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/onboard/hunspell-use-xdg-datadirs.patch20
-rw-r--r--nixpkgs/pkgs/applications/misc/oneko/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/onthespot/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/openambit/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/openbangla-keyboard/Cargo.lock334
-rw-r--r--nixpkgs/pkgs/applications/misc/openbangla-keyboard/default.nix90
-rw-r--r--nixpkgs/pkgs/applications/misc/openbox-menu/000-enable-svg.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/openbox-menu/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/openbrf/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/opencpn/default.nix142
-rw-r--r--nixpkgs/pkgs/applications/misc/openjump/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/openlp/default.nix87
-rw-r--r--nixpkgs/pkgs/applications/misc/openlp/lib.nix103
-rw-r--r--nixpkgs/pkgs/applications/misc/openrgb-plugins/effects/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/openrgb-plugins/hardwaresync/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/openrgb/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/openring/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/opentrack/aruco.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/opentrack/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/opentx/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/oranda/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/orca/default.nix115
-rw-r--r--nixpkgs/pkgs/applications/misc/orca/fix-paths.patch88
-rw-r--r--nixpkgs/pkgs/applications/misc/organicmaps/default.nix100
-rw-r--r--nixpkgs/pkgs/applications/misc/orpie/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/orpie/prefix.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/osm2xmap/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/osmctools/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/osmium-tool/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/misc/osmscout-server/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/osmtogeojson/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/osmtogeojson/package-lock.json2967
-rw-r--r--nixpkgs/pkgs/applications/misc/otf2bdf/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/otpclient/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/overmind/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/oversteer/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/owmods-cli/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/misc/oxker/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/p2pool/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/pagefind/default.nix111
-rw-r--r--nixpkgs/pkgs/applications/misc/pairdrop/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/parsec/bin.nix124
-rw-r--r--nixpkgs/pkgs/applications/misc/pass-secret-service/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/passky-desktop/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/pastel/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/pattypan/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/misc/pcmanx-gtk2/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/pdf-quench/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfarranger/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfdiff/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfpc/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfposter/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfsam-basic/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfslicer/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfstudio/common.nix102
-rw-r--r--nixpkgs/pkgs/applications/misc/pdfstudio/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/misc/pe-bear/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/peaclock/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/pell/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/perkeep/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/pgmanage/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/pgmodeler/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/phoc/default.nix89
-rw-r--r--nixpkgs/pkgs/applications/misc/phockup/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/pinfo/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/misc/pipr/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/plank/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/misc/plank/hide-in-pantheon.patch9
-rw-r--r--nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/cmake.patch20
-rw-r--r--nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/plasma-theme-switcher/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/plater/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/playonlinux/0001-fix-locale.patch17
-rw-r--r--nixpkgs/pkgs/applications/misc/playonlinux/default.nix151
-rw-r--r--nixpkgs/pkgs/applications/misc/please-cli/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/plots/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/plover/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/pokemon-colorscripts-mac/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/polar-bookshelf/default.nix131
-rw-r--r--nixpkgs/pkgs/applications/misc/polar-bookshelf1/default.nix117
-rw-r--r--nixpkgs/pkgs/applications/misc/polychromatic/default.nix89
-rw-r--r--nixpkgs/pkgs/applications/misc/pomodoro/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/pop-launcher/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/pop/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/porsmo/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/pot/Cargo.lock7348
-rw-r--r--nixpkgs/pkgs/applications/misc/pot/default.nix137
-rw-r--r--nixpkgs/pkgs/applications/misc/premid/default.nix94
-rw-r--r--nixpkgs/pkgs/applications/misc/printrun/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/process-compose/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/process-viewer/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/procmail/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/projectlibre/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/protonup-qt/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/prusa-slicer/default.nix200
-rw-r--r--nixpkgs/pkgs/applications/misc/prusa-slicer/super-slicer.nix106
-rw-r--r--nixpkgs/pkgs/applications/misc/prusa-slicer/wxWidgets-Makefile.in-fix.patch112
-rw-r--r--nixpkgs/pkgs/applications/misc/psi-notify/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/pstree/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/pt/.bundle/config2
-rw-r--r--nixpkgs/pkgs/applications/misc/pt/Gemfile3
-rw-r--r--nixpkgs/pkgs/applications/misc/pt/Gemfile.lock69
-rw-r--r--nixpkgs/pkgs/applications/misc/pt/default.nix18
-rw-r--r--nixpkgs/pkgs/applications/misc/pt/gemset.nix273
-rw-r--r--nixpkgs/pkgs/applications/misc/ptask/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/ptask/json_c_is_error.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/ptask/tw-version.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/pueue/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/pure-maps/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/pw-viz/Cargo.lock2664
-rw-r--r--nixpkgs/pkgs/applications/misc/pw-viz/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/misc/pwsafe/default.nix118
-rw-r--r--nixpkgs/pkgs/applications/misc/pydf/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/pyditz/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/pysentation/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/pytrainer/default.nix98
-rw-r--r--nixpkgs/pkgs/applications/misc/q4wine/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/qMasterPassword/default.nix76
-rw-r--r--nixpkgs/pkgs/applications/misc/qcad/application-dir.patch35
-rw-r--r--nixpkgs/pkgs/applications/misc/qcad/default.nix132
-rw-r--r--nixpkgs/pkgs/applications/misc/qdirstat/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/qelectrotech/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/qlcplus/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/qolibri/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/qsudo/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/qsyncthingtray/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/qsyncthingtray/qsyncthingtray-0.5.8-qt-5.6.3.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/qt-box-editor/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/qt-video-wlr/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/qtbitcointrader/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/qtpass/default.nix62
-rw-r--r--nixpkgs/pkgs/applications/misc/quicksynergy/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/raider/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/raiseorlaunch/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/ratt/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/razergenie/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/reddsaver/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/redshift-plasma-applet/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/redshift/575.patch51
-rw-r--r--nixpkgs/pkgs/applications/misc/redshift/default.nix145
-rw-r--r--nixpkgs/pkgs/applications/misc/regextester/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/remarkable/restream/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/remarkable/rmapi/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/remarkable/rmview/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/remnote/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/remontoire/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/rescuetime/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/resp-app/default.nix103
-rw-r--r--nixpkgs/pkgs/applications/misc/resumed/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/retool/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/revanced-cli/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/river-luatile/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/river-tag-overlay/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/rivercarro/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/rlaunch/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/rm-improved/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/robo3t/default.nix99
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-bluetooth/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-emoji/0001-Patch-plugindir-to-output.patch25
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-emoji/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-file-browser/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-menugen/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-power-menu/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-rbw/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-screenshot/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-top/0001-Patch-plugindir-to-output.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-top/0002-Patch-add-cairo.patch25
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi-top/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi/wayland.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/rofi/wrapper.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/rofimoji/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/rootbar/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/rsclock/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/rsibreak/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/rss-bridge-cli/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/rtfm/default.nix91
-rw-r--r--nixpkgs/pkgs/applications/misc/rtfm/patches/enable-write-permissions.patch10
-rw-r--r--nixpkgs/pkgs/applications/misc/rtfm/patches/friendly-docs-path.patch11
-rw-r--r--nixpkgs/pkgs/applications/misc/rtfm/patches/make.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/rtfm/shards.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/rust-traverse/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/rusty-psn/default.nix92
-rw-r--r--nixpkgs/pkgs/applications/misc/safecloset/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/safeeyes/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/sampler/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/sbagen/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/sc-im/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/schemes/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/misc/scli/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/sdcv/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/seashells/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/seatd/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/selectdefaultapplication/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/semver/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/sent/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/senv/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/sequeler/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/sequelpro/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/serial-studio/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/sfwbar/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/shavee/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/shell-genie/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/shipments/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/sidequest/default.nix126
-rw-r--r--nixpkgs/pkgs/applications/misc/sigal/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/sigi/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/siglo/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/misc/siglo/siglo-no-user-install.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/sioyek/default.nix94
-rw-r--r--nixpkgs/pkgs/applications/misc/skate/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/skytemple/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/sl1-to-photon/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/slic3r/default.nix102
-rw-r--r--nixpkgs/pkgs/applications/misc/slides/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/slippy/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/slstatus/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/slweb/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/smpq/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/snagboot/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/snapmaker-luban/default.nix99
-rw-r--r--nixpkgs/pkgs/applications/misc/snapper-gui/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/snixembed/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/snowsql/default.nix49
-rw-r--r--nixpkgs/pkgs/applications/misc/solaar/default.nix87
-rw-r--r--nixpkgs/pkgs/applications/misc/somebar/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/spacenav-cube-example/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/speedread/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/spnavcfg/configure-cfgfile-path.patch100
-rw-r--r--nixpkgs/pkgs/applications/misc/spnavcfg/configure-pidfile-path.patch40
-rw-r--r--nixpkgs/pkgs/applications/misc/spnavcfg/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/spotify-tray/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/sqls/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/ssh-tools/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/ssocr/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/ssw/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/stag/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/stepreduce/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/sticky/default.nix86
-rw-r--r--nixpkgs/pkgs/applications/misc/stog/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/stork/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/streamdeck-ui/default.nix106
-rw-r--r--nixpkgs/pkgs/applications/misc/streamdeck-ui/update-pillow.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/stretchly/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/misc/stw/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/stylish/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/misc/styx/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/misc/subsurface/default.nix154
-rw-r--r--nixpkgs/pkgs/applications/misc/sunwait/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/surface-control/Cargo.lock501
-rw-r--r--nixpkgs/pkgs/applications/misc/surface-control/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/survex/default.nix83
-rw-r--r--nixpkgs/pkgs/applications/misc/swappy/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/sway-contrib/default.nix108
-rw-r--r--nixpkgs/pkgs/applications/misc/sway-launcher-desktop/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/swaynag-battery/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/swaynotificationcenter/default.nix96
-rw-r--r--nixpkgs/pkgs/applications/misc/swaysettings/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/misc/sweethome3d/default.nix131
-rw-r--r--nixpkgs/pkgs/applications/misc/sweethome3d/editors.nix113
-rw-r--r--nixpkgs/pkgs/applications/misc/synapse/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/syncthing-tray/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/syncthing-tray/deps.nix93
-rw-r--r--nixpkgs/pkgs/applications/misc/syncthingtray/default.nix112
-rw-r--r--nixpkgs/pkgs/applications/misc/synergy/darwin-non-static-openssl.patch14
-rw-r--r--nixpkgs/pkgs/applications/misc/synergy/default.nix147
-rw-r--r--nixpkgs/pkgs/applications/misc/system76-keyboard-configurator/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/systembus-notify/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/tabula-java/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/tabula/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/tagtime/default.nix80
-rw-r--r--nixpkgs/pkgs/applications/misc/tailscale-systray/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/taizen/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/tandoor-recipes/common.nix19
-rw-r--r--nixpkgs/pkgs/applications/misc/tandoor-recipes/default.nix163
-rw-r--r--nixpkgs/pkgs/applications/misc/tandoor-recipes/frontend.nix56
-rwxr-xr-xnixpkgs/pkgs/applications/misc/tandoor-recipes/update.sh41
-rw-r--r--nixpkgs/pkgs/applications/misc/tango/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile3
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile.lock39
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/taskjuggler/gemset.nix140
-rw-r--r--nixpkgs/pkgs/applications/misc/tasknc/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/taskopen/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/tasksh/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/tasktimer/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/taskwarrior-tui/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/taskwarrior/default.nix51
-rw-r--r--nixpkgs/pkgs/applications/misc/tdrop/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/teleprompter/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/tellico/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/termdown/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/terminal-colors/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/misc/terminal-notifier/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/terminal-parrot/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/terminal-stocks/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/terminal-typeracer/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/termpdf.py/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/teseq/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/thedesk/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/themechanger/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/therion/default.nix97
-rw-r--r--nixpkgs/pkgs/applications/misc/thinking-rock/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/thokr/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/ticker/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/tickrs/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/tilemaker/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/timew-sync-server/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/timewarrior/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/tint2/default.nix92
-rw-r--r--nixpkgs/pkgs/applications/misc/tipp10/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/tiramisu/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/tiv/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/tmatrix/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/tnef/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/todiff/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/todoist-electron/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/todoist/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/tofi/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/toipe/default.nix20
-rw-r--r--nixpkgs/pkgs/applications/misc/tomato-c/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/misc/toot/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/topydo/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/misc/tpmmanager/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/transifex-cli/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/translate-shell/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/translatelocally/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/misc/translatelocally/version_without_git.patch66
-rw-r--r--nixpkgs/pkgs/applications/misc/trenchbroom/default.nix126
-rw-r--r--nixpkgs/pkgs/applications/misc/tsukae/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/ttdl/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/tthsum/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/tty-share/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/tty-solitaire/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/ttyper/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/tuba/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/misc/tuckr/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/tuhi/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/tui-journal/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/misc/tuir/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/tumpa/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/tut/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/tuxclocker/default.nix71
-rw-r--r--nixpkgs/pkgs/applications/misc/tvbrowser/default.nix87
-rw-r--r--nixpkgs/pkgs/applications/misc/tvbrowser/test.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/twitch-chat-downloader/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/twmn/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/typer/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/typioca/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/tzupdate/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/ubpm/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/udevil/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/udevil/device-info-sys-stat.patch14
-rw-r--r--nixpkgs/pkgs/applications/misc/udict/0001-update-version-in-lock-file.patch25
-rw-r--r--nixpkgs/pkgs/applications/misc/udict/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/udiskie/default.nix108
-rw-r--r--nixpkgs/pkgs/applications/misc/udiskie/locale-path.patch17
-rw-r--r--nixpkgs/pkgs/applications/misc/ulauncher/default.nix125
-rw-r--r--nixpkgs/pkgs/applications/misc/ulauncher/fix-extensions.patch13
-rw-r--r--nixpkgs/pkgs/applications/misc/ulauncher/fix-path.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/ultralist/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/misc/uni/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/unipicker/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/upwork/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/misc/urlscan/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/usb-reset/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/usync/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/misc/valent/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/misc/valentina/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/variety/default.nix100
-rw-r--r--nixpkgs/pkgs/applications/misc/vcal/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/veracrypt/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/misc/veracrypt/fix-paths.patch22
-rw-r--r--nixpkgs/pkgs/applications/misc/verbiste/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/vhs/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/viking/default.nix81
-rw-r--r--nixpkgs/pkgs/applications/misc/visidata/default.nix158
-rw-r--r--nixpkgs/pkgs/applications/misc/vit/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/volnoti/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/vp/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/vue/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/vul/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/vym/000-fix-zip-paths.diff21
-rw-r--r--nixpkgs/pkgs/applications/misc/vym/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/misc/wallust/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/warpd/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/watchmate/Cargo.lock3072
-rw-r--r--nixpkgs/pkgs/applications/misc/watchmate/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/watershot/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/waybar/default.nix195
-rw-r--r--nixpkgs/pkgs/applications/misc/waycorner/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/misc/waylock/default.nix52
-rwxr-xr-xnixpkgs/pkgs/applications/misc/waylock/update.nu5
-rw-r--r--nixpkgs/pkgs/applications/misc/waypaper/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/wbg/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/misc/wcalc/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/misc/weather/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/webfontkitgenerator/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/misc/wego/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/misc/whalebird/default.nix100
-rw-r--r--nixpkgs/pkgs/applications/misc/wike/default.nix74
-rw-r--r--nixpkgs/pkgs/applications/misc/wikicurses/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/misc/with-shell/default.nix77
-rw-r--r--nixpkgs/pkgs/applications/misc/wlclock/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/wmenu/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/misc/wmname/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/wofi-emoji/default.nix55
-rw-r--r--nixpkgs/pkgs/applications/misc/wofi/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/wofi/do_not_follow_symlinks.patch39
-rw-r--r--nixpkgs/pkgs/applications/misc/wordbook/default.nix69
-rw-r--r--nixpkgs/pkgs/applications/misc/wordnet/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/workrave/default.nix102
-rw-r--r--nixpkgs/pkgs/applications/misc/wpm/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/writefreely/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/wtf/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/wthrr/default.nix48
-rw-r--r--nixpkgs/pkgs/applications/misc/wttrbar/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/xastir/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/misc/xautoclick/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/xbattbar/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/xbattbar/sys-by-default.patch26
-rw-r--r--nixpkgs/pkgs/applications/misc/xca/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/xchm/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/xcruiser/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/misc/xdg-launch/default.nix57
-rw-r--r--nixpkgs/pkgs/applications/misc/xdgmenumaker/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/misc/xfontsel/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/xiphos/0001-Add-dbus-glib-dependency-to-main.patch38
-rw-r--r--nixpkgs/pkgs/applications/misc/xiphos/default.nix112
-rw-r--r--nixpkgs/pkgs/applications/misc/xkbd/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/misc/xkblayout-state/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/xkbmon/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/xlights/default.nix20
-rw-r--r--nixpkgs/pkgs/applications/misc/xmenu/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/xmind/default.nix97
-rw-r--r--nixpkgs/pkgs/applications/misc/xmind/java-env-config-fixes.patch40
-rw-r--r--nixpkgs/pkgs/applications/misc/xmr-stak/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/misc/xmrig/default.nix73
-rw-r--r--nixpkgs/pkgs/applications/misc/xmrig/donate-level.patch12
-rw-r--r--nixpkgs/pkgs/applications/misc/xmrig/moneroocean.nix37
-rw-r--r--nixpkgs/pkgs/applications/misc/xmrig/proxy.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/xneur/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/misc/xpad/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/misc/xpdf/default.nix101
-rw-r--r--nixpkgs/pkgs/applications/misc/xpdf/libxpdf.nix60
-rw-r--r--nixpkgs/pkgs/applications/misc/xpdf/libxpdf.patch45
-rw-r--r--nixpkgs/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch74
-rw-r--r--nixpkgs/pkgs/applications/misc/xrandr-invert-colors/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/misc/xrq/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/xscope/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/misc/xsuspender/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/misc/xsw/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/misc/xsw/parse.patch21
-rw-r--r--nixpkgs/pkgs/applications/misc/xteddy/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/xxkb/default.nix58
-rw-r--r--nixpkgs/pkgs/applications/misc/xygrib/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/yambar-hyprland-wses/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/misc/yambar/default.nix124
-rw-r--r--nixpkgs/pkgs/applications/misc/yate/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/misc/ydict/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/yewtube/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/yokadi/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/yubioath-flutter/default.nix92
-rw-r--r--nixpkgs/pkgs/applications/misc/yubioath-flutter/helper.nix47
-rw-r--r--nixpkgs/pkgs/applications/misc/yubioath-flutter/pubspec.lock.json1354
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/cb/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/core/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/djvu/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/pdf-mupdf/default.nix63
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/pdf-poppler/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/ps/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/misc/zathura/wrapper.nix38
-rw-r--r--nixpkgs/pkgs/applications/misc/zettlr/default.nix8
-rw-r--r--nixpkgs/pkgs/applications/misc/zettlr/generic.nix43
-rw-r--r--nixpkgs/pkgs/applications/misc/zine/default.nix39
-rw-r--r--nixpkgs/pkgs/applications/misc/zk-shell/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/misc/zktree/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/misc/zscroll/default.nix27
1159 files changed, 109132 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/misc/1password-gui/darwin.nix b/nixpkgs/pkgs/applications/misc/1password-gui/darwin.nix
new file mode 100644
index 000000000000..6f3d86f51c34
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/1password-gui/darwin.nix
@@ -0,0 +1,24 @@
+{ stdenv
+, pname
+, version
+, src
+, meta
+, unzip
+, undmg
+}:
+
+stdenv.mkDerivation {
+  inherit pname version src meta;
+
+  nativeBuildInputs = [ unzip undmg ];
+
+  sourceRoot = ".";
+
+  installPhase = ''
+    mkdir -p $out/Applications
+    cp -r *.app $out/Applications
+  '';
+
+  # 1Password is notarized.
+  dontFixup = true;
+}
diff --git a/nixpkgs/pkgs/applications/misc/1password-gui/default.nix b/nixpkgs/pkgs/applications/misc/1password-gui/default.nix
new file mode 100644
index 000000000000..925dfaef5302
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/1password-gui/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, callPackage
+, channel ? "stable"
+, fetchurl
+, lib
+# This is only relevant for Linux, so we need to pass it through
+, polkitPolicyOwners ? [ ] }:
+
+let
+
+  pname = "1password";
+  version = if channel == "stable" then "8.10.26" else "8.10.28-1.BETA";
+
+  sources = {
+    stable = {
+      x86_64-linux = {
+        url = "https://downloads.1password.com/linux/tar/stable/x86_64/1password-${version}.x64.tar.gz";
+        hash = "sha256-w2Msl8eSQGX6euRcNJY4rET2yJpLWyfWzqvf0veFDU0=";
+      };
+      aarch64-linux = {
+        url = "https://downloads.1password.com/linux/tar/stable/aarch64/1password-${version}.arm64.tar.gz";
+        hash = "sha256-3Hq202h2BOUnk1XiAgeW2Tc2BBq3ZCN0EXTh8u3OQ6o=";
+      };
+      x86_64-darwin = {
+        url = "https://downloads.1password.com/mac/1Password-${version}-x86_64.zip";
+        hash = "sha256-PXlmJfcMiTHdUoXfnk2Za86xUHozQF8cpKMJ75SmCjg=";
+      };
+      aarch64-darwin = {
+        url = "https://downloads.1password.com/mac/1Password-${version}-aarch64.zip";
+        hash = "sha256-Wd5rsln8itagb/F5ZaDenBiBjJc8SlRxtlWD+JCDrVY=";
+      };
+    };
+    beta = {
+      x86_64-linux = {
+        url = "https://downloads.1password.com/linux/tar/beta/x86_64/1password-${version}.x64.tar.gz";
+        hash = "sha256-2XwSBJHvv0YYMQUHw2baiMJm5FizmxbaKoQaCIRc5UY=";
+      };
+      aarch64-linux = {
+        url = "https://downloads.1password.com/linux/tar/beta/aarch64/1password-${version}.arm64.tar.gz";
+        hash = "sha256-pxEGRpzMaxxJ+W2lSDZ7jNKHLQ22pgOKqD/Bt6ot2lk=";
+      };
+      x86_64-darwin = {
+        url = "https://downloads.1password.com/mac/1Password-${version}-x86_64.zip";
+        hash = "sha256-WoitPHQ6yW5jmCGL976am73TTGbcqBfCvYnDKUORAVU=";
+      };
+      aarch64-darwin = {
+        url = "https://downloads.1password.com/mac/1Password-${version}-aarch64.zip";
+        hash = "sha256-YE0TvbA7jXpISywC/AWFBfV09jjgY+DLHhRUYbxpaXE=";
+      };
+    };
+  };
+
+  src = fetchurl {
+    inherit (sources.${channel}.${stdenv.system}) url hash;
+  };
+
+  meta = with lib; {
+    description = "Multi-platform password manager";
+    homepage = "https://1password.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ timstott savannidgerinel amaxine sebtm ];
+    platforms = builtins.attrNames sources.${channel};
+    mainProgram = "1password";
+  };
+
+in if stdenv.isDarwin
+then callPackage ./darwin.nix { inherit pname version src meta; }
+else callPackage ./linux.nix { inherit pname version src meta polkitPolicyOwners; }
diff --git a/nixpkgs/pkgs/applications/misc/1password-gui/linux.nix b/nixpkgs/pkgs/applications/misc/1password-gui/linux.nix
new file mode 100644
index 000000000000..751e94c38f7f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/1password-gui/linux.nix
@@ -0,0 +1,141 @@
+{ lib
+, stdenv
+, pname
+, version
+, src
+, meta
+, makeShellWrapper
+, wrapGAppsHook
+, alsa-lib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, cairo
+, cups
+, dbus
+, expat
+, gdk-pixbuf
+, glib
+, gtk3
+, libX11
+, libXcomposite
+, libXdamage
+, libXext
+, libXfixes
+, libXrandr
+, libdrm
+, libxcb
+, libxkbcommon
+, libxshmfence
+, libGL
+, libappindicator-gtk3
+, mesa
+, nspr
+, nss
+, pango
+, systemd
+, udev
+, xdg-utils
+
+  # The 1Password polkit file requires a list of users for whom polkit
+  # integrations should be enabled. This should be a list of strings that
+  # correspond to usernames.
+, polkitPolicyOwners ? []
+}:
+let
+  # Convert the polkitPolicyOwners variable to a polkit-compatible string for the polkit file.
+  policyOwners = lib.concatStringsSep " " (map (user: "unix-user:${user}") polkitPolicyOwners);
+
+in stdenv.mkDerivation {
+  inherit pname version src meta;
+
+  nativeBuildInputs = [ makeShellWrapper wrapGAppsHook ];
+  buildInputs = [ glib ];
+
+  dontConfigure = true;
+  dontBuild = true;
+  dontPatchELF = true;
+  dontWrapGApps = true;
+
+  installPhase =
+    let rpath = lib.makeLibraryPath [
+      alsa-lib
+      at-spi2-atk
+      at-spi2-core
+      atk
+      cairo
+      cups
+      dbus
+      expat
+      gdk-pixbuf
+      glib
+      gtk3
+      libX11
+      libXcomposite
+      libXdamage
+      libXext
+      libXfixes
+      libXrandr
+      libdrm
+      libxcb
+      libxkbcommon
+      libxshmfence
+      libGL
+      libappindicator-gtk3
+      mesa
+      nspr
+      nss
+      pango
+      systemd
+    ] + ":${stdenv.cc.cc.lib}/lib64";
+    in ''
+      runHook preInstall
+
+      mkdir -p $out/bin $out/share/1password
+      cp -a * $out/share/1password
+
+      # Desktop file
+      install -Dt $out/share/applications resources/${pname}.desktop
+      substituteInPlace $out/share/applications/${pname}.desktop \
+        --replace 'Exec=/opt/1Password/${pname}' 'Exec=${pname}'
+
+      '' + (lib.optionalString (polkitPolicyOwners != [ ])
+      ''
+      # Polkit file
+        mkdir -p $out/share/polkit-1/actions
+        substitute com.1password.1Password.policy.tpl $out/share/polkit-1/actions/com.1password.1Password.policy --replace "\''${POLICY_OWNERS}" "${policyOwners}"
+        '') + ''
+
+      # Icons
+      cp -a resources/icons $out/share
+
+      interp="$(cat $NIX_CC/nix-support/dynamic-linker)"
+      patchelf --set-interpreter $interp $out/share/1password/{1password,1Password-BrowserSupport,1Password-HIDHelper,1Password-KeyringHelper,1Password-LastPass-Exporter,op-ssh-sign}
+      patchelf --set-rpath ${rpath}:$out/share/1password $out/share/1password/{1password,1Password-BrowserSupport,1Password-HIDHelper,1Password-KeyringHelper,1Password-LastPass-Exporter,op-ssh-sign}
+      for file in $(find $out -type f -name \*.so\* ); do
+        patchelf --set-rpath ${rpath}:$out/share/1password $file
+      done
+
+      ln -s $out/share/1password/op-ssh-sign $out/bin/op-ssh-sign
+
+      runHook postInstall
+    '';
+
+  preFixup = ''
+    # makeWrapper defaults to makeBinaryWrapper due to wrapGAppsHook
+    # but we need a shell wrapper specifically for `NIXOS_OZONE_WL`.
+    # Electron is trying to open udev via dlopen()
+    # and for some reason that doesn't seem to be impacted from the rpath.
+    # Adding udev to LD_LIBRARY_PATH fixes that.
+    # Make xdg-open overrideable at runtime.
+    makeShellWrapper $out/share/1password/1password $out/bin/1password \
+      "''${gappsWrapperArgs[@]}" \
+      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]} \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ udev ]}
+      # Currently half broken on wayland (e.g. no copy functionality)
+      # See: https://github.com/NixOS/nixpkgs/pull/232718#issuecomment-1582123406
+      # Remove this comment when upstream fixes:
+      # https://1password.community/discussion/comment/624011/#Comment_624011
+      #--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/misc/1password-gui/update.sh b/nixpkgs/pkgs/applications/misc/1password-gui/update.sh
new file mode 100755
index 000000000000..fc6d350f2330
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/1password-gui/update.sh
@@ -0,0 +1,58 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p jq
+#shellcheck shell=bash
+
+CURRENT_HASH=""
+
+print_hash() {
+    OS="$1"
+    CHANNEL="$2"
+    ARCH="$3"
+    VERSION="$4"
+
+    if [[ "$OS" == "linux" ]]; then
+        if [[ "$ARCH" == "x86_64" ]]; then
+            EXT="x64.tar.gz"
+        else
+            EXT="arm64.tar.gz"
+        fi
+        URL="https://downloads.1password.com/${OS}/tar/${CHANNEL}/${ARCH}/1password-${VERSION}.${EXT}"
+    else
+        EXT="$ARCH.zip"
+        URL="https://downloads.1password.com/${OS}/1Password-${VERSION}-${EXT}"
+    fi
+
+    CURRENT_HASH=$(nix store prefetch-file "$URL" --json | jq -r '.hash')
+
+    echo "$CHANNEL ${ARCH}-${OS}: $CURRENT_HASH"
+}
+
+if [[ -z "$STABLE_VER" && -n "$1" ]]; then
+    STABLE_VER="$1"
+fi
+
+if [[ -z "$BETA_VER" && -n "$2" ]]; then
+    BETA_VER="$2"
+fi
+
+if [[ "${BETA_VER: -4}" != "BETA" ]]; then
+    BETA_VER="$BETA_VER.BETA"
+fi
+
+if [[ -z "$STABLE_VER" ]]; then
+    echo "No 'STABLE_VER' environment variable provided, skipping"
+else
+    print_hash "linux" "stable" "x86_64" "$STABLE_VER"
+    print_hash "linux" "stable" "aarch64" "$STABLE_VER"
+    print_hash "mac" "stable" "x86_64" "$STABLE_VER"
+    print_hash "mac" "stable" "aarch64" "$STABLE_VER"
+fi
+
+if [[ -z "$BETA_VER" ]]; then
+    echo "No 'BETA_VER' environment variable provided, skipping"
+else
+    print_hash "linux" "beta" "x86_64" "$BETA_VER"
+    print_hash "linux" "beta" "aarch64" "$BETA_VER"
+    print_hash "mac" "beta" "x86_64" "$BETA_VER"
+    print_hash "mac" "beta" "aarch64" "$BETA_VER"
+fi
diff --git a/nixpkgs/pkgs/applications/misc/1password/default.nix b/nixpkgs/pkgs/applications/misc/1password/default.nix
new file mode 100644
index 000000000000..b7df39ee2b08
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/1password/default.nix
@@ -0,0 +1,79 @@
+{ lib, stdenv, fetchurl, fetchzip, autoPatchelfHook, installShellFiles, cpio, xar, _1password, testers }:
+
+let
+  inherit (stdenv.hostPlatform) system;
+  fetch = srcPlatform: hash: extension:
+    let
+      args = {
+        url = "https://cache.agilebits.com/dist/1P/op2/pkg/v${version}/op_${srcPlatform}_v${version}.${extension}";
+        inherit hash;
+      } // lib.optionalAttrs (extension == "zip") { stripRoot = false; };
+    in
+    if extension == "zip" then fetchzip args else fetchurl args;
+
+  pname = "1password-cli";
+  version = "2.25.0";
+  sources = rec {
+    aarch64-linux = fetch "linux_arm64" "sha256-Fs7psSWGqQqnUpGtU0nv1Mv+GysL/wD8AeVbMUDJ9pg=" "zip";
+    i686-linux = fetch "linux_386" "sha256-Vqk2COKRtDkOn7960VknyHx7sZVHZ4GP+aaC1rU4eqc=" "zip";
+    x86_64-linux = fetch "linux_amd64" "sha256-rMIZU92A13eiUqr35C+RTg3OTE9u8hcYJRinHoPWYTE=" "zip";
+    aarch64-darwin = fetch "apple_universal" "sha256-JO7Hh8PUnW5D3GCJFPcVfIYXzHV6HkckqFnGK9vH7Qs=" "pkg";
+    x86_64-darwin = aarch64-darwin;
+  };
+  platforms = builtins.attrNames sources;
+  mainProgram = "op";
+in
+
+stdenv.mkDerivation {
+  inherit pname version;
+  src =
+    if (builtins.elem system platforms) then
+      sources.${system}
+    else
+      throw "Source for ${pname} is not available for ${system}";
+
+  nativeBuildInputs = [ installShellFiles ] ++ lib.optional stdenv.isLinux autoPatchelfHook;
+
+  buildInputs = lib.optionals stdenv.isDarwin [ xar cpio ];
+
+  unpackPhase = lib.optionalString stdenv.isDarwin ''
+    xar -xf $src
+    zcat op.pkg/Payload | cpio -i
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D ${mainProgram} $out/bin/${mainProgram}
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    HOME=$TMPDIR
+    installShellCompletion --cmd ${mainProgram} \
+      --bash <($out/bin/${mainProgram} completion bash) \
+      --fish <($out/bin/${mainProgram} completion fish) \
+      --zsh <($out/bin/${mainProgram} completion zsh)
+  '';
+
+  dontStrip = stdenv.isDarwin;
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    $out/bin/${mainProgram} --version
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = _1password;
+  };
+
+  meta = with lib; {
+    description = "1Password command-line tool";
+    homepage = "https://developer.1password.com/docs/cli/";
+    downloadPage = "https://app-updates.agilebits.com/product_history/CLI2";
+    maintainers = with maintainers; [ joelburget marsam ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    inherit mainProgram platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/9menu/default.nix b/nixpkgs/pkgs/applications/misc/9menu/default.nix
new file mode 100644
index 000000000000..8e6b7b3bcbec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/9menu/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, meson
+, ninja
+, libX11
+, libXext
+}:
+
+stdenv.mkDerivation rec {
+  pname = "9menu";
+  version = "unstable-2021-02-24";
+
+  src = fetchFromGitHub {
+    owner = "arnoldrobbins";
+    repo = pname;
+    rev = "00cbf99c48dc580ca28f81ed66c89a98b7a182c8";
+    sha256 = "arca8Gbr4ytiCk43cifmNj7SUrDgn1XB26zAhZrVDs0=";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja ];
+  buildInputs = [ libX11 libXext ];
+
+  meta = with lib; {
+    homepage = "https://github.com/arnoldrobbins/9menu";
+    description = "Simple X11 menu program for running commands";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = libX11.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/default.nix b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/default.nix
new file mode 100644
index 000000000000..13620b254a58
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, buildDotnetModule
+, fetchFromGitHub
+, dotnetCorePackages
+, libkrb5
+, zlib
+, openssl
+, callPackage
+}:
+
+buildDotnetModule rec {
+  pname = "ArchiSteamFarm";
+  # nixpkgs-update: no auto update
+  version = "5.5.3.4";
+
+  src = fetchFromGitHub {
+    owner = "JustArchiNET";
+    repo = "ArchiSteamFarm";
+    rev = version;
+    hash = "sha256-9ISEIKrAK6UTDM3TPizBRMU+wfiinhnaWmS5CkXpkYo=";
+  };
+
+  dotnet-runtime = dotnetCorePackages.aspnetcore_8_0;
+  dotnet-sdk = dotnetCorePackages.sdk_8_0;
+
+  nugetDeps = ./deps.nix;
+
+  projectFile = "ArchiSteamFarm.sln";
+  executables = [ "ArchiSteamFarm" ];
+  dotnetFlags = [
+    "-p:PublishSingleFile=true"
+    "-p:PublishTrimmed=true"
+  ];
+  dotnetInstallFlags = [
+    "--framework=net8.0"
+  ];
+  selfContainedBuild = true;
+
+  runtimeDeps = [ libkrb5 zlib openssl ];
+
+  doCheck = true;
+
+  preBuild = ''
+    export projectFile=(ArchiSteamFarm)
+  '';
+
+  preInstall = ''
+    # A mutable path, with this directory tree must be set. By default, this would point at the nix store causing errors.
+    makeWrapperArgs+=(
+      --run 'mkdir -p ~/.config/archisteamfarm/{config,logs,plugins}'
+      --set "ASF_PATH" "~/.config/archisteamfarm"
+    )
+  '';
+
+  postInstall = ''
+    buildPlugin() {
+      echo "Publishing plugin $1"
+      dotnet publish $1 -p:ContinuousIntegrationBuild=true -p:Deterministic=true \
+        --output $out/lib/ArchiSteamFarm/plugins/$1 --configuration Release \
+        -p:UseAppHost=false
+     }
+
+     buildPlugin ArchiSteamFarm.OfficialPlugins.ItemsMatcher
+     buildPlugin ArchiSteamFarm.OfficialPlugins.MobileAuthenticator
+     buildPlugin ArchiSteamFarm.OfficialPlugins.SteamTokenDumper
+  '';
+
+  passthru = {
+    # nix-shell maintainers/scripts/update.nix --argstr package ArchiSteamFarm
+    updateScript = ./update.sh;
+    ui = callPackage ./web-ui { };
+  };
+
+  meta = with lib; {
+    description = "Application with primary purpose of idling Steam cards from multiple accounts simultaneously";
+    homepage = "https://github.com/JustArchiNET/ArchiSteamFarm";
+    license = licenses.asl20;
+    mainProgram = "ArchiSteamFarm";
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/deps.nix b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/deps.nix
new file mode 100644
index 000000000000..8c547f70c1c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/deps.nix
@@ -0,0 +1,130 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "AngleSharp"; version = "1.0.2"; sha256 = "0808lnbggp3dl116amxj1hz8cfh1a3hi8q10qwgdiwhqx919jslb"; })
+  (fetchNuGet { pname = "AngleSharp.XPath"; version = "2.0.3"; sha256 = "1z6j171ffw2w5c44j2d7kqki6c8j229i3xbi6pgpk9pas41mdrxx"; })
+  (fetchNuGet { pname = "ConfigureAwaitChecker.Analyzer"; version = "5.0.0.1"; sha256 = "01llfwhra5m3jj1qpa4rj1hbh01drirakzjc2963vkl9iwrzscyl"; })
+  (fetchNuGet { pname = "CryptSharpStandard"; version = "1.0.0"; sha256 = "0nikzb92z4a2n969sz747ginwxsbrap5741bcwwxr4r6m2na9jz7"; })
+  (fetchNuGet { pname = "Humanizer"; version = "2.14.1"; sha256 = "18cycx9gvbc3735chdi2r583x73m2fkz1ws03yi3g640j9zv00fp"; })
+  (fetchNuGet { pname = "Humanizer.Core"; version = "2.14.1"; sha256 = "1ai7hgr0qwd7xlqfd92immddyi41j3ag91h3594yzfsgsy6yhyqi"; })
+  (fetchNuGet { pname = "Humanizer.Core.af"; version = "2.14.1"; sha256 = "197lsky6chbmrixgsg6dvxbdbbpis0an8mn6vnwjcydhncis087h"; })
+  (fetchNuGet { pname = "Humanizer.Core.ar"; version = "2.14.1"; sha256 = "03rz12mxrjv5afm1hn4rrpimkkb8wdzp17634dcq10fhpbwhy6i5"; })
+  (fetchNuGet { pname = "Humanizer.Core.az"; version = "2.14.1"; sha256 = "138kdhy86afy5n72wy12qlb25q4034z73lz5nbibmkixxdnj9g5r"; })
+  (fetchNuGet { pname = "Humanizer.Core.bg"; version = "2.14.1"; sha256 = "0scwzrvv8332prijkbp4y11n172smjb4sf7ygia6bi3ibhzq7zjy"; })
+  (fetchNuGet { pname = "Humanizer.Core.bn-BD"; version = "2.14.1"; sha256 = "1322kn7ym46mslh32sgwkv07l3jkkx7cw5wjphql2ziphxw536p8"; })
+  (fetchNuGet { pname = "Humanizer.Core.cs"; version = "2.14.1"; sha256 = "1zl3vsdd2pw3nm05qpnr6c75y7gacgaghg9sj07ksvsjmklgqqih"; })
+  (fetchNuGet { pname = "Humanizer.Core.da"; version = "2.14.1"; sha256 = "10rmrvzwp212fpxv0sdq8f0sjymccsdn71k99f845kz0js83r70s"; })
+  (fetchNuGet { pname = "Humanizer.Core.de"; version = "2.14.1"; sha256 = "0j7kld0jdiqwin83arais9gzjj85mpshmxls64yi58qhl7qjzk0j"; })
+  (fetchNuGet { pname = "Humanizer.Core.el"; version = "2.14.1"; sha256 = "143q1321qh5506wwvcpy0fj7hpbd9i1k75247mqs2my05x9vc8n0"; })
+  (fetchNuGet { pname = "Humanizer.Core.es"; version = "2.14.1"; sha256 = "011kscy671mgyx412h55b0x9a1ngmdsgqzqq1w0l10xhf90y4hc8"; })
+  (fetchNuGet { pname = "Humanizer.Core.fa"; version = "2.14.1"; sha256 = "184dxwkf251c27h7gg9y5zciixgcwy1cmdrs0bqrph7gg69kp6yq"; })
+  (fetchNuGet { pname = "Humanizer.Core.fi-FI"; version = "2.14.1"; sha256 = "144jlnlipr3pnbcyhbgrd2lxibx8vy00lp2zn60ihxppgbisircc"; })
+  (fetchNuGet { pname = "Humanizer.Core.fr"; version = "2.14.1"; sha256 = "0klnfy8n659sp8zngd87gy7qakd56dwr1axjjzk0zph1zvww09jq"; })
+  (fetchNuGet { pname = "Humanizer.Core.fr-BE"; version = "2.14.1"; sha256 = "0b70illi4m58xvlqwcvar0smh6292zadzk2r8c25ryijh6d5a9qv"; })
+  (fetchNuGet { pname = "Humanizer.Core.he"; version = "2.14.1"; sha256 = "08xkiv88qqd1b0frpalb2npq9rvz2q1yz48k6dikrjvy6amggirh"; })
+  (fetchNuGet { pname = "Humanizer.Core.hr"; version = "2.14.1"; sha256 = "12djmwxfg03018j2bqq5ikwkllyma8k7zmvpw61vxs7cv4izc6wh"; })
+  (fetchNuGet { pname = "Humanizer.Core.hu"; version = "2.14.1"; sha256 = "0lw13p9b2kbqf96lif5kx59axxiahd617h154iswjfka9kxdw65x"; })
+  (fetchNuGet { pname = "Humanizer.Core.hy"; version = "2.14.1"; sha256 = "1bgm0yabhvsv70amzmkvf3mls32lvd7yyr59yxf3xc96msqczgjh"; })
+  (fetchNuGet { pname = "Humanizer.Core.id"; version = "2.14.1"; sha256 = "1w0bnyac46f2321l09ckb6vz66s1bxl27skfww1iwrmf03i7m2cw"; })
+  (fetchNuGet { pname = "Humanizer.Core.is"; version = "2.14.1"; sha256 = "10w1fprlhxm1qy3rh0qf6z86ahrv8fcza3wrsx55idlmar1x9jyz"; })
+  (fetchNuGet { pname = "Humanizer.Core.it"; version = "2.14.1"; sha256 = "1msrmih8cp7r4yj7r85kr0l5h4yln80450mivliy1x322dav8xz2"; })
+  (fetchNuGet { pname = "Humanizer.Core.ja"; version = "2.14.1"; sha256 = "04ry6z0v85y4y5vzbqlbxppfdm04i02dxbxaaykbps09rwqaa250"; })
+  (fetchNuGet { pname = "Humanizer.Core.ko-KR"; version = "2.14.1"; sha256 = "156641v0ilrpbzprscvbzfha57pri4y1i66n9v056nc8bm10ggbg"; })
+  (fetchNuGet { pname = "Humanizer.Core.ku"; version = "2.14.1"; sha256 = "1scz21vgclbm1xhaw89f0v8s0vx46yv8yk3ij0nr6shsncgq9f7h"; })
+  (fetchNuGet { pname = "Humanizer.Core.lv"; version = "2.14.1"; sha256 = "1909dsbxiv2sgj6myfhn8lbbmvkp2hjahj0knawypyq3jw9sq86g"; })
+  (fetchNuGet { pname = "Humanizer.Core.ms-MY"; version = "2.14.1"; sha256 = "1dmjrxb0kb297ycr8xf7ni3l7y4wdqrdhqbhy8xnm8dx90nmj9x5"; })
+  (fetchNuGet { pname = "Humanizer.Core.mt"; version = "2.14.1"; sha256 = "0b183r1apzfa1hasimp2f27yfjkfp87nfbd8qdyrqdigw6nzcics"; })
+  (fetchNuGet { pname = "Humanizer.Core.nb"; version = "2.14.1"; sha256 = "12rd75f83lv6z12b5hbwnarv3dkk29pvc836jpg2mzffm0g0kxj2"; })
+  (fetchNuGet { pname = "Humanizer.Core.nb-NO"; version = "2.14.1"; sha256 = "1n033yfw44sjf99mv51c53wggjdffz8b9wv7gwm3q7i6g7ck4vv1"; })
+  (fetchNuGet { pname = "Humanizer.Core.nl"; version = "2.14.1"; sha256 = "0q4231by40bsr6mjy93n0zs365pz6da32pwkxcz1cc2hfdlkn0vd"; })
+  (fetchNuGet { pname = "Humanizer.Core.pl"; version = "2.14.1"; sha256 = "0h2wbwrlcmjk8b2mryyd8rbb1qmripvg0zyg61gg0hifiqfg3cr2"; })
+  (fetchNuGet { pname = "Humanizer.Core.pt"; version = "2.14.1"; sha256 = "0pg260zvyhqz8h1c96px1vs9q5ywvd0j2ixsq21mj96dj7bl5fay"; })
+  (fetchNuGet { pname = "Humanizer.Core.ro"; version = "2.14.1"; sha256 = "04mr28bjcb9hs0wmpb4nk2v178i0fjr0ymc78dv9bbqkmrzfsmcn"; })
+  (fetchNuGet { pname = "Humanizer.Core.ru"; version = "2.14.1"; sha256 = "060abvk7mrgawipjgw0h4hrvizby7acmj58w2g35fv54g43isgcl"; })
+  (fetchNuGet { pname = "Humanizer.Core.sk"; version = "2.14.1"; sha256 = "182xiqf71kiqp42b8yqrag6z57wzqraqi10bnhx0crrc1gxq8v0j"; })
+  (fetchNuGet { pname = "Humanizer.Core.sl"; version = "2.14.1"; sha256 = "12ygvzyqa0km7a0wz42zssq8qqakvghh96x1ng7qvwcrna3v2rdi"; })
+  (fetchNuGet { pname = "Humanizer.Core.sr"; version = "2.14.1"; sha256 = "1ggj15qksyr16rilq2w76x38bxp6a6z75b30c9b7w5ni88nkgc7x"; })
+  (fetchNuGet { pname = "Humanizer.Core.sr-Latn"; version = "2.14.1"; sha256 = "0lwr0gnashirny8lgaw0qnbb7x0qrjg8fs11594x8l7li3mahzz3"; })
+  (fetchNuGet { pname = "Humanizer.Core.sv"; version = "2.14.1"; sha256 = "1c7yx59haikdqx7k7vqll6223jjmikgwbl3dzmrcs3laywgfnmgn"; })
+  (fetchNuGet { pname = "Humanizer.Core.th-TH"; version = "2.14.1"; sha256 = "0kyyi5wc23i2lcag3zvrhga9gsnba3ahl4kdlaqvvg2jhdfarl4m"; })
+  (fetchNuGet { pname = "Humanizer.Core.tr"; version = "2.14.1"; sha256 = "0rdvp0an263b2nj3c5v11hvdwgmj86ljf2m1h3g1x28pygbcx6am"; })
+  (fetchNuGet { pname = "Humanizer.Core.uk"; version = "2.14.1"; sha256 = "0a2p6mhh0ajn0y7x98zbfasln1l04iiknd50sgf3svna99wybnxd"; })
+  (fetchNuGet { pname = "Humanizer.Core.uz-Cyrl-UZ"; version = "2.14.1"; sha256 = "1jfzfgnk6wz5na2md800vq0djm6z194x618yvwxbnk2c7wikbjj2"; })
+  (fetchNuGet { pname = "Humanizer.Core.uz-Latn-UZ"; version = "2.14.1"; sha256 = "0vimhw500rq60naxfari8qm6gjmjm8h9j6c04k67fs447djy8ndi"; })
+  (fetchNuGet { pname = "Humanizer.Core.vi"; version = "2.14.1"; sha256 = "1yr0l73cy2qypkssmmjwfbbqgdplam62dqnzk9vx6x47dzpys077"; })
+  (fetchNuGet { pname = "Humanizer.Core.zh-CN"; version = "2.14.1"; sha256 = "1k6nnawd016xpwgzdzy84z1lcv2vc1cygcksw19wbgd8dharyyk7"; })
+  (fetchNuGet { pname = "Humanizer.Core.zh-Hans"; version = "2.14.1"; sha256 = "0zn99311zfn602phxyskfjq9vly0w5712z6fly8r4q0h94qa8c85"; })
+  (fetchNuGet { pname = "Humanizer.Core.zh-Hant"; version = "2.14.1"; sha256 = "0qxjnbdj645l5sd6y3100yyrq1jy5misswg6xcch06x8jv7zaw1p"; })
+  (fetchNuGet { pname = "JetBrains.Annotations"; version = "2023.3.0"; sha256 = "0vp4mpn6gfckn8grzjm1jxlbqiq2fglm2rk9wq787adw7rxs8k7w"; })
+  (fetchNuGet { pname = "Markdig.Signed"; version = "0.34.0"; sha256 = "1jrs5fc8k99mh1kipvvlgwm0qlacrsh82bbpdclb84xz0h6nwwrh"; })
+  (fetchNuGet { pname = "Microsoft.ApplicationInsights"; version = "2.21.0"; sha256 = "1q034jbqkxb8lddkd0ijp0wp0ymnnf3bg2mjpay027zv7jswnc4x"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.JsonPatch"; version = "7.0.0"; sha256 = "1f13vsfs1rp9bmdp3khk4mk2fif932d72yxm2wszpsr239x4s2bf"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Mvc.NewtonsoftJson"; version = "7.0.0"; sha256 = "1w49rg0n5wb1m5wnays2mmym7qy7bsi2b1zxz97af2rkbw3s3hbd"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "6.0.0"; sha256 = "15gqy2m14fdlvy1g59207h5kisznm355kbw010gy19vh47z8gpz3"; })
+  (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "17.9.0"; sha256 = "1gljgi69k0fz8vy8bn6xlyxabj6q4vls2zza9wz7ng6ix3irm89r"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.ApiDescription.Server"; version = "6.0.5"; sha256 = "1pi2bm3cm0a7jzqzmfc2r7bpcdkmk3hhjfvb2c81j7wl7xdw3624"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "8.0.0"; sha256 = "1jlpa4ggl1gr5fs7fdcw04li3y3iy05w3klr9lrrlc7v8w76kq71"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "8.0.0"; sha256 = "0i7qziz0iqmbk8zzln7kx9vd0lbx1x3va0yi3j1bgkjir13h78ps"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "8.0.0"; sha256 = "1zw0bpp5742jzx03wvqc8csnvsbgdqi0ls9jfc5i2vd3cl8b74pg"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "8.0.0"; sha256 = "0nppj34nmq25gnrg0wh1q22y4wdqbih4ax493f226azv8mkp9s1i"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "8.0.0"; sha256 = "1klcqhg3hk55hb6vmjiq2wgqidsl81aldw0li2z98lrwx26msrr6"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "8.0.0"; sha256 = "0p50qn6zhinzyhq9sy5svnmqqwhw2jajs2pbjh9sah504wjvhscz"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "8.0.0"; sha256 = "0aldaz5aapngchgdr7dax9jw5wy7k7hmjgjpfgfv1wfif27jlkqm"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Abstractions"; version = "7.3.1"; sha256 = "0dvknvmnzi3jn2kz0fbcb3ilryd75dwyiwqn6cwc6nd5gdz4mdlm"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.JsonWebTokens"; version = "7.3.1"; sha256 = "03pd6b35a5j1qxmcf9552rp43fwddn1z3czyb6wlf1w1f95b5fqb"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Logging"; version = "7.3.1"; sha256 = "0368p59kf6r9dyk511phl65wvk76n8885d2m9812fpj0ifqcdqg8"; })
+  (fetchNuGet { pname = "Microsoft.IdentityModel.Tokens"; version = "7.3.1"; sha256 = "0i8mqrvzx9xi9pg1c92iy6cr756nnc3lr5cdawj0yh1x919wvx59"; })
+  (fetchNuGet { pname = "Microsoft.NET.ILLink.Tasks"; version = "8.0.1"; sha256 = "1drbgqdcvbpisjn8mqfgba1pwb6yri80qc4mfvyczqwrcsj5k2ja"; })
+  (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.9.0"; sha256 = "1lls1fly2gr1n9n1xyl9k33l2v4pwfmylyzkq8v4v5ldnwkl1zdb"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.OpenApi"; version = "1.2.3"; sha256 = "07b19k89whj69j87afkz86gp9b3iybw8jqwvlgcn43m7fb2y99rr"; })
+  (fetchNuGet { pname = "Microsoft.Testing.Extensions.Telemetry"; version = "1.0.0"; sha256 = "1b52s7z01wkg83dpkpyg7girjflm84zr65pacsfwm2hvhb9xa2w6"; })
+  (fetchNuGet { pname = "Microsoft.Testing.Extensions.TrxReport.Abstractions"; version = "1.0.0"; sha256 = "0pvr4yga99fqr4z8s8js9hxki5c92qy7scvpqwslws5mri625m38"; })
+  (fetchNuGet { pname = "Microsoft.Testing.Extensions.VSTestBridge"; version = "1.0.0"; sha256 = "0zzrwp5in56fhc2cdmn4i44v2jf13frbjwpb9v8s7fkr9ky4wh5w"; })
+  (fetchNuGet { pname = "Microsoft.Testing.Platform"; version = "1.0.0"; sha256 = "1qbf922frk4c0cam57d98f3d5q5226pgrgjm7pfcamwy5whvx5sh"; })
+  (fetchNuGet { pname = "Microsoft.Testing.Platform.MSBuild"; version = "1.0.0"; sha256 = "0my1fihyh86rckfzbrvl5kdcq34yp0ywl8azs2gx3c27sg4pjrp2"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.5.0"; sha256 = "0qkjyf3ky6xpjg5is2sdsawm99ka7fzgid2bvpglwmmawqgm8gls"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "17.9.0"; sha256 = "1kgsl9w9fganbm9wvlkqgk0ag9hfi58z88rkfybc6kvg78bx89ca"; })
+  (fetchNuGet { pname = "Microsoft.TestPlatform.TestHost"; version = "17.9.0"; sha256 = "19ffh31a1jxzn8j69m1vnk5hyfz3dbxmflq77b8x82zybiilh5nl"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "MSTest.TestAdapter"; version = "3.2.0"; sha256 = "0n7iw8ppjyps4sg0rfh5pags4wq58yg1g9vnxfwa73z38jws2c10"; })
+  (fetchNuGet { pname = "MSTest.TestFramework"; version = "3.2.0"; sha256 = "0n9aab1cxf8w23dl4yw7rqpi47v7gd02csq3zisc5whsrb9i0xbq"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.3"; sha256 = "0xrwysmrn4midrjal8g2hr1bbg38iyisl0svamb11arqws4w2bw7"; })
+  (fetchNuGet { pname = "Newtonsoft.Json.Bson"; version = "1.0.2"; sha256 = "0c27bhy9x3c2n26inq32kmp6drpm71n6mqnmcr19wrlcaihglj35"; })
+  (fetchNuGet { pname = "Nito.AsyncEx.Coordination"; version = "5.1.2"; sha256 = "0sxvmqnv8a94k3pq1w3lh1vgjb8l62h1qamxcjl3pkq634h2fwrl"; })
+  (fetchNuGet { pname = "Nito.AsyncEx.Tasks"; version = "5.1.2"; sha256 = "11wp47kc69sjdxrbg5pgx0wlffqlp0x5kr54ggnz2v19kmjz362v"; })
+  (fetchNuGet { pname = "Nito.Collections.Deque"; version = "1.1.1"; sha256 = "152564q3s0n5swfv5p5rx0ghn2sm0g2xsnbd7gv8vb9yfklv7yg8"; })
+  (fetchNuGet { pname = "Nito.Disposables"; version = "2.2.1"; sha256 = "1hx5k8497j34kxxgh060bvij0vfnraw90dmm3h9bmamcdi8wp80l"; })
+  (fetchNuGet { pname = "NLog"; version = "5.2.8"; sha256 = "1z3h20m5rjnizm1jbf5j0vpdc1f373rzzkg6478p1lxv5j385c12"; })
+  (fetchNuGet { pname = "NLog.Extensions.Logging"; version = "5.3.8"; sha256 = "1qnz91099f51vk7f5g2ig0041maw5hcbyqllxvj5zj7zkp0qw9b8"; })
+  (fetchNuGet { pname = "NLog.Web.AspNetCore"; version = "5.3.8"; sha256 = "05a6bzvdf63lbnn6sj3yfggxcgv96j91kdbcw0ac5hxl58df58r6"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.11.0"; sha256 = "0wv26gq39hfqw9md32amr5771s73f5zn1z9vs4y77cgynxr73s4z"; })
+  (fetchNuGet { pname = "protobuf-net"; version = "3.2.26"; sha256 = "1mcg46xnhgqwjacy6j8kvp3rylpi26wjnmhwv8mh5cwjya9nynqb"; })
+  (fetchNuGet { pname = "protobuf-net.Core"; version = "3.2.26"; sha256 = "1wrr38ygdanf121bkl8b1d4kz1pawm064z69bqf3qbr46h4j575w"; })
+  (fetchNuGet { pname = "SteamKit2"; version = "2.5.0"; sha256 = "06rdagrxqws5yq1nrsd8chv3n9kgrb8rg894vcc40a8w6v27222w"; })
+  (fetchNuGet { pname = "Swashbuckle.AspNetCore"; version = "6.5.0"; sha256 = "0k61chpz5j59s1yax28vx0mppx20ff8vg8grwja112hfrzj1f45n"; })
+  (fetchNuGet { pname = "Swashbuckle.AspNetCore.Annotations"; version = "6.5.0"; sha256 = "00n8s45xwbayj3p6x3awvs87vqvmzypny21nqc61m7a38d1asijv"; })
+  (fetchNuGet { pname = "Swashbuckle.AspNetCore.Newtonsoft"; version = "6.5.0"; sha256 = "1160r9splvmxrgk3b8yzgls0pxxwak3iqfr8v13ah5mwy8zkpx71"; })
+  (fetchNuGet { pname = "Swashbuckle.AspNetCore.Swagger"; version = "6.5.0"; sha256 = "1s6axf6fin8sss3bvzp0s039rxrx71vx4rl559miw12bz3lld8kc"; })
+  (fetchNuGet { pname = "Swashbuckle.AspNetCore.SwaggerGen"; version = "6.5.0"; sha256 = "0hq93gy5vyrigpdk9lhqwxglxwkbxa8ydllwcqs4bwfcsspzrs83"; })
+  (fetchNuGet { pname = "Swashbuckle.AspNetCore.SwaggerUI"; version = "6.5.0"; sha256 = "17hx7kc187higm0gk67dndng3n7932sn3fwyj48l45cvyr3025h7"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.7.1"; sha256 = "1nh4nlxfc7lbnbl86wwk1a3jwl6myz5j6hvgh5sp4krim9901hsq"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "7.0.0"; sha256 = "1n9122cy6v3qhsisc9lzwa1m1j62b8pi2678nsmnlyvfpk0zdagm"; })
+  (fetchNuGet { pname = "System.Composition"; version = "8.0.0"; sha256 = "0y7rp5qwwvh430nr0r15zljw01gny8yvr0gg6w5cmsk3q7q7a3dc"; })
+  (fetchNuGet { pname = "System.Composition.AttributedModel"; version = "8.0.0"; sha256 = "16j61piz1jf8hbh14i1i4m2r9vw79gdqhjr4f4i588h52249fxlz"; })
+  (fetchNuGet { pname = "System.Composition.Convention"; version = "8.0.0"; sha256 = "10fwp7692a6yyw1p8b923k061zh95a6xs3vzfdmdv5pmf41cxlb7"; })
+  (fetchNuGet { pname = "System.Composition.Hosting"; version = "8.0.0"; sha256 = "1gbfimhxx6v6073pblv4rl5shz3kgx8lvfif5db26ak8pl5qj4kb"; })
+  (fetchNuGet { pname = "System.Composition.Runtime"; version = "8.0.0"; sha256 = "0snljpgfmg0wlkwilkvn9qjjghq1pjdfgdpnwhvl2qw6vzdij703"; })
+  (fetchNuGet { pname = "System.Composition.TypedParts"; version = "8.0.0"; sha256 = "0skwla26d8clfz3alr8m42qbzsrbi7dhg74z6ha832b6730mm4pr"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "5.0.0"; sha256 = "0phd2qizshjvglhzws1jd0cq4m54gscz4ychzr3x6wbgl4vvfrga"; })
+  (fetchNuGet { pname = "System.Linq.Async"; version = "6.0.1"; sha256 = "10ira8hmv0i54yp9ggrrdm1c06j538sijfjpn1kmnh9j2xk5yzmq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "8.0.0"; sha256 = "1ysjx3b5ips41s32zacf4vs7ig41906mxrsbmykdzi0hvdmjkgbx"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "7.0.0"; sha256 = "0sn6hxdjm7bw3xgsmg041ccchsa4sp02aa27cislw3x61dbr68kq"; })
+  (fetchNuGet { pname = "zxcvbn-core"; version = "7.0.92"; sha256 = "1pbi0n3za8zsnkbvq19njy4h4hy12a6rv4rknf4a2m1kdhxb3cgx"; })
+]
diff --git a/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/update.sh b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/update.sh
new file mode 100755
index 000000000000..53d3ee664191
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/update.sh
@@ -0,0 +1,26 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=./. -i bash -p curl gnused jq common-updater-scripts
+set -euo pipefail
+cd "$(dirname "${BASH_SOURCE[0]}")"
+
+new_version="$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} -s "https://api.github.com/repos/JustArchiNET/ArchiSteamFarm/releases" | jq -r  'map(select(.prerelease == false)) | .[0].tag_name')"
+old_version="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
+
+if [[ "$new_version" == "$old_version" ]]; then
+  echo "Already up to date!"
+  if [[ "${1-default}" != "--deps-only" ]]; then
+    exit 0
+  fi
+fi
+
+asf_path=$PWD
+cd ../../../..
+
+if [[ "${1:-}" != "--deps-only" ]]; then
+    update-source-version ArchiSteamFarm "$new_version"
+fi
+
+$(nix-build -A ArchiSteamFarm.fetch-deps --no-out-link)
+
+cd "$asf_path/web-ui"
+./update.sh
diff --git a/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/.gitignore b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/.gitignore
new file mode 100644
index 000000000000..d8b83df9cdb6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/.gitignore
@@ -0,0 +1 @@
+package-lock.json
diff --git a/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/default.nix b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/default.nix
new file mode 100644
index 000000000000..d7f70bb8c62d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, buildNpmPackage, ArchiSteamFarm }:
+
+buildNpmPackage rec {
+  pname = "asf-ui";
+  version = "7406f7126a8351db67aad9f3a0f90c9dc123d80d";
+
+  src = fetchFromGitHub {
+    owner = "JustArchiNET";
+    repo = "ASF-ui";
+    # updated by the update script
+    # this is always the commit that should be used with asf-ui from the latest asf version
+    rev = version;
+    hash = "sha256-yTBJoihDc4z4+a03S56MQORvz/l6aqBDzLEi0UrM1N4=";
+  };
+
+  npmDepsHash = "sha256-S/OwjmfAyEVZfWQ7vqKFctbJRqED0HVJlWEGXrqB1Ys=";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    cp -rv dist/* $out/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "The official web interface for ASF";
+    license = licenses.asl20;
+    homepage = "https://github.com/JustArchiNET/ASF-ui";
+    inherit (ArchiSteamFarm.meta) maintainers platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/update.sh b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/update.sh
new file mode 100755
index 000000000000..6fa8e67a1217
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ArchiSteamFarm/web-ui/update.sh
@@ -0,0 +1,19 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -I nixpkgs=../../../../.. -i bash -p curl gnused jq common-updater-scripts prefetch-npm-deps
+set -eou pipefail
+
+cd "$(dirname "$0")"/../../../../..
+version=$(nix-instantiate --strict --eval -A ArchiSteamFarm.version | jq -r)
+cd -
+ui=$(curl ${GITHUB_TOKEN:+" -u \":$GITHUB_TOKEN\""} "https://api.github.com/repos/JustArchiNET/ArchiSteamFarm/contents/ASF-ui?ref=$version" | jq -r .sha)
+
+curl "https://raw.githubusercontent.com/JustArchiNET/ASF-ui/$ui/package-lock.json" -o package-lock.json
+
+cd -
+update-source-version ArchiSteamFarm.ui "$ui"
+cd -
+
+npmDepsHash=$(prefetch-npm-deps ./package-lock.json)
+sed -E 's#\bnpmDepsHash = ".*?"#npmDepsHash = "'"$npmDepsHash"'"#' -i default.nix
+
+rm package-lock.json
diff --git a/nixpkgs/pkgs/applications/misc/HentaiAtHome/default.nix b/nixpkgs/pkgs/applications/misc/HentaiAtHome/default.nix
new file mode 100644
index 000000000000..e34c2434a4f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/HentaiAtHome/default.nix
@@ -0,0 +1,57 @@
+{ buildPackages
+, fetchzip
+, javaOpts ? "-XX:+UseZGC"
+, jdk
+, jre_headless
+, lib
+, makeWrapper
+, stdenvNoCC
+,
+}:
+stdenvNoCC.mkDerivation rec {
+  pname = "HentaiAtHome";
+  version = "1.6.2";
+
+  src = fetchzip {
+    url = "https://repo.e-hentai.org/hath/HentaiAtHome_${version}_src.zip";
+    hash = "sha256-ioL/GcnbYjt1IETH8521d1TcLGtENdFzceJui1ywXTY=";
+    stripRoot = false;
+  };
+
+  nativeBuildInputs = [ jdk makeWrapper ];
+
+  LANG = "en_US.UTF-8";
+  LOCALE_ARCHIVE = lib.optionalString (stdenvNoCC.buildPlatform.libc == "glibc")
+    "${buildPackages.glibcLocales}/lib/locale/locale-archive";
+
+  buildPhase = ''
+    make all
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/java
+    cp build/HentaiAtHome.jar $out/share/java
+
+    mkdir -p $out/bin
+    makeWrapper ${jre_headless}/bin/java $out/bin/HentaiAtHome \
+      --add-flags "${javaOpts} -jar $out/share/java/HentaiAtHome.jar"
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    pushd $(mktemp -d)
+    $out/bin/HentaiAtHome
+    popd
+  '';
+
+  strictDeps = true;
+
+  meta = with lib; {
+    homepage = "https://ehwiki.org/wiki/Hentai@Home";
+    description =
+      "Hentai@Home is an open-source P2P gallery distribution system which reduces the load on the E-Hentai Galleries";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ terrorjack ];
+    mainProgram = "HentaiAtHome";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/OSCAR/default.nix b/nixpkgs/pkgs/applications/misc/OSCAR/default.nix
new file mode 100644
index 000000000000..6e20a855acb7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/OSCAR/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, mkDerivation, fetchFromGitLab, qmake, qtbase, qttools, qtserialport, libGLU }:
+mkDerivation rec {
+  pname = "OSCAR";
+  version = "1.5.1";
+
+  src = fetchFromGitLab {
+    owner = "pholy";
+    repo = "OSCAR-code";
+    rev = "v${version}";
+    sha256 = "sha256-FBHbPtMZeIgcR1pQflfEWK2FS8bquctXaeY/yaZofHg=";
+  };
+
+  buildInputs = [ qtbase qttools qtserialport libGLU ];
+  nativeBuildInputs = [ qmake ];
+  postPatch = ''
+    substituteInPlace oscar/oscar.pro --replace "/bin/bash" "${stdenv.shell}"
+  '';
+
+  qmakeFlags = [ "OSCAR_QT.pro" ];
+
+  installPhase = ''
+    runHook preInstall
+    install -d $out/bin
+    install -d $out/share/OSCAR/Help
+    install -d $out/share/OSCAR/Html
+    install -d $out/share/OSCAR/Translations
+    install -d $out/share/icons/OSCAR
+    install -d $out/share/applications
+    install -T oscar/OSCAR $out/bin/OSCAR
+    # help browser was removed 'temporarily' in https://gitlab.com/pholy/OSCAR-code/-/commit/57c3e4c33ccdd2d0eddedbc24c0e4f2969da3841
+    # install oscar/Help/* $out/share/OSCAR/Help
+    install oscar/Html/* $out/share/OSCAR/Html
+    install oscar/Translations/* $out/share/OSCAR/Translations
+    install -T Building/Linux/OSCAR.png $out/share/icons/OSCAR/OSCAR.png
+    install -T Building/Linux/OSCAR.desktop $out/share/applications/OSCAR.desktop
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.sleepfiles.com/OSCAR/";
+    description = "Software for reviewing and exploring data produced by CPAP and related machines used in the treatment of sleep apnea";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.roconnor ];
+    # Someone needs to create a suitable installPhase for Darwin and Windows.
+    # See https://gitlab.com/pholy/OSCAR-code/-/tree/master/Building.
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ablog/default.nix b/nixpkgs/pkgs/applications/misc/ablog/default.nix
new file mode 100644
index 000000000000..a9cc6670e899
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ablog/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "ablog";
+  version = "0.11.6";
+  format = "pyproject";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-fV4W4AaiqyruIz3OQ7/lGkMPMKmyiFa+fdU2QeeQCvs=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    setuptools-scm
+    wheel
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    docutils
+    feedgen
+    invoke
+    packaging
+    python-dateutil
+    sphinx
+    watchdog
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  pytestFlagsArray = [
+    "-W" "ignore::sphinx.deprecation.RemovedInSphinx90Warning"
+    "--rootdir" "src/ablog"
+    "-W" "ignore::sphinx.deprecation.RemovedInSphinx90Warning" # Ignore ImportError
+  ];
+
+  meta = with lib; {
+    description = "ABlog for blogging with Sphinx";
+    homepage = "https://ablog.readthedocs.io/en/latest/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rgrinberg ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/abook/default.nix b/nixpkgs/pkgs/applications/misc/abook/default.nix
new file mode 100644
index 000000000000..358ecbcef39b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/abook/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, ncurses, readline, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "abook";
+  version = "0.6.1";
+
+  src = fetchurl {
+    url = "http://abook.sourceforge.net/devel/abook-${version}.tar.gz";
+    sha256 = "1yf0ifyjhq2r003pnpn92mn0924bn9yxjifxxj2ldcsgd7w0vagh";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://projects.archlinux.org/svntogit/packages.git/plain/trunk/gcc5.patch?h=packages/abook";
+      name = "gcc5.patch";
+      sha256 = "13n3qd6yy45i5n8ppjn9hj6y63ymjrq96280683xk7f7rjavw5nn";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ ncurses readline ];
+
+  meta = {
+    homepage = "http://abook.sourceforge.net/";
+    description = "Text-based addressbook program designed to use with mutt mail client";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.edwtjo ];
+    platforms = with lib.platforms; unix;
+    mainProgram = "abook";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/acpic/default.nix b/nixpkgs/pkgs/applications/misc/acpic/default.nix
new file mode 100644
index 000000000000..7d05f0a05702
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/acpic/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, fetchPypi
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "acpic";
+  version = "1.0.0";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit version pname;
+    hash = "sha256-vQ9VxCNbOmqHIY3e1wq1wNJl5ywfU2tm62gDg3vKvcg=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "pbr>=5.8.1,<6" "pbr"
+  '';
+
+  nativeBuildInputs = with python3Packages; [
+    pbr
+    setuptools
+  ];
+
+  # no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Daemon extending acpid event handling capabilities.";
+    homepage = "https://github.com/psliwka/acpic";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ aacebedo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/activate-linux/default.nix b/nixpkgs/pkgs/applications/misc/activate-linux/default.nix
new file mode 100644
index 000000000000..3515f190fe77
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/activate-linux/default.nix
@@ -0,0 +1,71 @@
+{ stdenv
+, fetchFromGitHub
+, lib
+, pkg-config
+, xorg
+, cairo
+, wayland
+, wayland-protocols
+, wayland-scanner
+, libconfig
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "activate-linux";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "MrGlockenspiel";
+    repo = "activate-linux";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-6XnoAoZwAs2hKToWlDqkaGqucmV1VMkEc4QO0G0xmrg=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  nativeBuildInputs = [
+    pkg-config
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    cairo
+    xorg.libX11
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXinerama
+    xorg.libXrandr
+    xorg.libXt
+    xorg.xorgproto
+    wayland
+    wayland-protocols
+    libconfig
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+
+    cp activate-linux $out/bin
+    cp activate-linux.1 $out/share/man/man1
+
+    install -Dm444 res/icon.png $out/share/icons/hicolor/128x128/apps/activate-linux.png
+    install -Dm444 res/activate-linux.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/activate-linux.desktop \
+      --replace 'Icon=icon' 'Icon=activate-linux'
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "The \"Activate Windows\" watermark ported to Linux";
+    homepage = "https://github.com/MrGlockenspiel/activate-linux";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ alexnortung donovanglover ];
+    platforms = platforms.linux;
+    mainProgram = "activate-linux";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/adobe-reader/builder.sh b/nixpkgs/pkgs/applications/misc/adobe-reader/builder.sh
new file mode 100644
index 000000000000..4291da80576d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/adobe-reader/builder.sh
@@ -0,0 +1,43 @@
+if [ -e "$NIX_ATTRS_SH_FILE" ]; then . "$NIX_ATTRS_SH_FILE"; elif [ -f .attrs.sh ]; then . .attrs.sh; fi
+source $stdenv/setup
+
+echo "unpacking $src..."
+tar xvfa $src
+
+echo "unpacking reader..."
+p=$out/libexec/adobe-reader
+mkdir -p $out/libexec
+tar xvf AdobeReader/COMMON.TAR -C $out
+tar xvf AdobeReader/ILINXR.TAR -C $out
+mv $out/Adobe/Reader9 $p
+rmdir $out/Adobe
+
+# Disable this plugin for now (it needs LDAP, and I'm too lazy to add it).
+rm $p/Reader/intellinux/plug_ins/PPKLite.api
+
+# More pointless files.
+rm $p/bin/UNINSTALL
+
+patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+    --set-rpath $libPath \
+    $p/Reader/intellinux/bin/acroread
+
+# The "xargs -r" is to shut up a warning when Mozilla can't be found.
+substituteInPlace $p/bin/acroread \
+    --replace /bin/pwd $(type -P pwd) \
+    --replace /bin/ls $(type -P ls) \
+    --replace xargs "xargs -r"
+
+mkdir -p $out/bin
+ln -s $p/bin/acroread $out/bin/acroread
+
+mkdir -p $out/share/applications
+mv $p/Resource/Support/AdobeReader.desktop $out/share/applications/
+icon=$p/Resource/Icons/128x128/AdobeReader9.png
+[ -e $icon ]
+sed -i $out/share/applications/AdobeReader.desktop \
+    -e "s|Icon=.*|Icon=$icon|"
+
+# Not sure if this works.
+mkdir -p $out/share/mimelnk/application
+mv $p/Resource/Support/vnd*.desktop $out/share/mimelnk/application
diff --git a/nixpkgs/pkgs/applications/misc/adobe-reader/default.nix b/nixpkgs/pkgs/applications/misc/adobe-reader/default.nix
new file mode 100644
index 000000000000..1a164f578a01
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/adobe-reader/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchurl
+, libX11
+, cups
+, zlib
+, libxml2
+, pango
+, atk
+, gtk2
+, glib
+, gdk-pixbuf
+, gdk-pixbuf-xlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "adobe-reader";
+  version = "9.5.5";
+
+  # TODO: convert to phases
+  builder = ./builder.sh;
+
+  src = fetchurl {
+    url = "http://ardownload.adobe.com/pub/adobe/reader/unix/9.x/${version}/enu/AdbeRdr${version}-1_i486linux_enu.tar.bz2";
+    sha256 = "0h35misxrqkl5zlmmvray1bqf4ywczkm89n9qw7d9arqbg3aj3pf";
+  };
+
+  # !!! Adobe Reader contains copies of OpenSSL, libcurl, and libicu.
+  # We should probably remove those and use the regular Nixpkgs versions.
+  libPath = lib.makeLibraryPath [ stdenv.cc.cc libX11 zlib libxml2 cups pango atk gtk2 glib gdk-pixbuf gdk-pixbuf-xlib ];
+
+  passthru.mozillaPlugin = "/libexec/adobe-reader/Browser/intellinux";
+
+  meta = {
+    description = "Adobe Reader, a viewer for PDF documents";
+    homepage = "http://www.adobe.com/products/reader";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfree;
+    knownVulnerabilities = [
+      "Numerous unresolved vulnerabilities"
+      "See: https://www.cvedetails.com/product/497/Adobe-Acrobat-Reader.html?vendor_id=53"
+    ];
+    platforms = [ "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/aitrack/default.nix b/nixpkgs/pkgs/applications/misc/aitrack/default.nix
new file mode 100644
index 000000000000..48e0afe13ebd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/aitrack/default.nix
@@ -0,0 +1,51 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, qmake
+, wrapQtAppsHook
+, opencv
+, spdlog
+, onnxruntime
+, qtx11extras
+}: stdenv.mkDerivation {
+  pname = "aitrack";
+  version = "0.6.5";
+
+  src = fetchFromGitHub {
+    owner = "mdk97";
+    repo = "aitrack-linux";
+    rev = "00bcca9b685abf3a19e4eab653198ca2b1895ae4";
+    sha256 = "sha256-pPvYVLUPYdjtJKdxqZI+JN7OZ4xw9gZ3baYTnJUSTGE=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    qmake
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    opencv
+    spdlog
+    qtx11extras
+    onnxruntime
+  ];
+
+  postPatch = ''
+    substituteInPlace Client/src/Main.cpp \
+      --replace "/usr/share/" "$out/share/"
+  '';
+
+  postInstall = ''
+    install -Dt $out/bin aitrack
+    install -Dt $out/share/aitrack/models models/*
+  '';
+
+  meta = with lib; {
+    description = "6DoF Head tracking software";
+    maintainers = with maintainers; [ ck3d ];
+    platforms = platforms.linux;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/albert/default.nix b/nixpkgs/pkgs/applications/misc/albert/default.nix
new file mode 100644
index 000000000000..4bfeaea7d36a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/albert/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libqalculate
+, muparser
+, libarchive
+, python3Packages
+, qtbase
+, qtscxml
+, qtsvg
+, qtdeclarative
+, qtwayland
+, qt5compat
+, wrapQtAppsHook
+, nix-update-script
+, pkg-config
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "albert";
+  version = "0.22.17";
+
+  src = fetchFromGitHub {
+    owner = "albertlauncher";
+    repo = "albert";
+    rev = "v${finalAttrs.version}";
+    sha256 = "sha256-2wu4bOQDKoZ4DDzTttXXRNDluvuJth7M1pCvJmYQ+f4=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    libqalculate
+    libarchive
+    muparser
+    qtbase
+    qtscxml
+    qtsvg
+    qtdeclarative
+    qtwayland
+    qt5compat
+  ] ++ (with python3Packages; [ python pybind11 ]);
+
+  postPatch = ''
+    find -type f -name CMakeLists.txt -exec sed -i {} -e '/INSTALL_RPATH/d' \;
+
+    sed -i src/qtpluginprovider.cpp \
+      -e "/QStringList dirs = {/a    QFileInfo(\"$out/lib\").canonicalFilePath(),"
+  '';
+
+  postFixup = ''
+    for i in $out/{bin/.albert-wrapped,lib/albert/plugins/*.so}; do
+      patchelf $i --add-rpath $out/lib/albert
+    done
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A fast and flexible keyboard launcher";
+    longDescription = ''
+      Albert is a desktop agnostic launcher. Its goals are usability and beauty,
+      performance and extensibility. It is written in C++ and based on the Qt
+      framework.
+    '';
+    homepage = "https://albertlauncher.github.io";
+    changelog = "https://github.com/albertlauncher/albert/blob/${finalAttrs.src.rev}/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ericsagnes synthetica ];
+    mainProgram = "albert";
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/almanah/default.nix b/nixpkgs/pkgs/applications/misc/almanah/default.nix
new file mode 100644
index 000000000000..3b27f5b96e30
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/almanah/default.nix
@@ -0,0 +1,101 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchpatch
+, atk
+, cairo
+, desktop-file-utils
+, evolution-data-server-gtk4
+, evolution
+, gcr_4
+, gettext
+, glib
+, gnome
+, gpgme
+, gtk3
+, gtksourceview4
+, gtkspell3
+, libcryptui
+, libxml2
+, meson
+, ninja
+, pkg-config
+, python3
+, sqlite
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "almanah";
+  version = "0.12.3";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "lMpDQOxlGljP66APR49aPbTZnfrGakbQ2ZcFvmiPMFo=";
+  };
+
+  patches = [
+    # Fix build with meson 0.61
+    # data/meson.build:2:5: ERROR: Function does not take positional arguments.
+    # Patch taken from https://gitlab.gnome.org/GNOME/almanah/-/merge_requests/13
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/almanah/-/commit/8c42a67695621d1e30cec933a04e633e6030bbaf.patch";
+      sha256 = "qyqFgYSu4emFDG/Mjwz1bZb3v3/4gwQSKmGCoPPNYCQ=";
+    })
+
+    # Port to Gcr 4
+    # https://gitlab.gnome.org/GNOME/almanah/-/merge_requests/14
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/almanah/-/commit/cd44b476f4ffbf37c5d5f5b996ecd711db925576.patch";
+      sha256 = "wJ1035NxgeTwUa0LoNcB6TSLxffoXBR3WbGAGkfggYY=";
+    })
+
+    # Port to GtkSourceView 4
+    # https://gitlab.gnome.org/GNOME/almanah/-/merge_requests/15
+    (fetchpatch {
+      url = "https://gitlab.gnome.org/GNOME/almanah/-/commit/0ba7f05cba7feaf2ae2c220596aead5dfc676675.patch";
+      sha256 = "5uvHTPzQloEq8SVt3EnZ+8mziBdXsDmu/e92/RtyFzE=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    libxml2
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    atk
+    cairo
+    evolution-data-server-gtk4
+    gcr_4
+    glib
+    evolution
+    gpgme
+    gtk3
+    gtksourceview4
+    gtkspell3
+    libcryptui
+    sqlite
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+      versionPolicy = "none"; # it is quite odd
+    };
+  };
+
+  meta = with lib; {
+    description = "Small GTK application to allow to keep a diary of your life";
+    homepage = "https://wiki.gnome.org/Apps/Almanah_Diary";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = teams.gnome.members;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/antfs-cli/default.nix b/nixpkgs/pkgs/applications/misc/antfs-cli/default.nix
new file mode 100644
index 000000000000..516b786222db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/antfs-cli/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication {
+  pname = "antfs-cli";
+  version = "unstable-2017-02-11";
+
+  meta = with lib; {
+    homepage = "https://github.com/Tigge/antfs-cli";
+    description = "Extracts FIT files from ANT-FS based sport watches";
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+
+  src = fetchFromGitHub {
+    owner = "Tigge";
+    repo = "antfs-cli";
+    rev = "85a6cc6fe6fc0ec38399f5aa30fb39177c565b52";
+    sha256 = "0v8y64kldfbs809j1g9d75dd1vxq7mfxnp4b45pz8anpxhjf64fy";
+  };
+
+  propagatedBuildInputs = [ python3Packages.openant ];
+}
diff --git a/nixpkgs/pkgs/applications/misc/anup/Cargo.lock b/nixpkgs/pkgs/applications/misc/anup/Cargo.lock
new file mode 100644
index 000000000000..2482edcce7a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/anup/Cargo.lock
@@ -0,0 +1,1179 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "anime"
+version = "0.1.0"
+dependencies = [
+ "attohttpc",
+ "base64 0.13.0",
+ "chrono",
+ "diesel",
+ "enum_dispatch",
+ "nom",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "smallvec",
+ "strsim",
+ "thiserror",
+]
+
+[[package]]
+name = "anup"
+version = "0.4.0"
+dependencies = [
+ "anime",
+ "anyhow",
+ "argh",
+ "bincode",
+ "bitflags",
+ "chrono",
+ "crossterm 0.19.0",
+ "diesel",
+ "dirs-next",
+ "futures",
+ "once_cell",
+ "parking_lot",
+ "pico-args",
+ "ron",
+ "serde",
+ "serde_derive",
+ "smallvec",
+ "strsim",
+ "thiserror",
+ "tokio",
+ "tui",
+ "tui-utils",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "anyhow"
+version = "1.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cddc5f91628367664cc7c69714ff08deee8a3efc54623011c772544d7b2767"
+
+[[package]]
+name = "argh"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91792f088f87cdc7a2cfb1d617fa5ea18d7f1dc22ef0e1b5f82f3157cdc522be"
+dependencies = [
+ "argh_derive",
+ "argh_shared",
+]
+
+[[package]]
+name = "argh_derive"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4eb0c0c120ad477412dc95a4ce31e38f2113e46bd13511253f79196ca68b067"
+dependencies = [
+ "argh_shared",
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "argh_shared"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "781f336cc9826dbaddb9754cb5db61e64cab4f69668bd19dcc4a0394a86f4cb1"
+
+[[package]]
+name = "arrayvec"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b"
+
+[[package]]
+name = "attohttpc"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdb8867f378f33f78a811a8eb9bf108ad99430d7aad43315dd9319c827ef6247"
+dependencies = [
+ "http",
+ "log",
+ "rustls",
+ "serde",
+ "serde_json",
+ "url",
+ "webpki",
+ "webpki-roots",
+ "wildmatch",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[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 = "bincode"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d175dfa69e619905c4c3cdb7c3c203fa3bdd5d51184e3afdb2742c0280493772"
+dependencies = [
+ "byteorder",
+ "serde",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "bitvec"
+version = "0.19.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8942c8d352ae1838c9dda0b0ca2ab657696ef2232a20147cf1b30ae1a9cb4321"
+dependencies = [
+ "funty",
+ "radium",
+ "tap",
+ "wyz",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63396b8a4b9de3f4fdfb320ab6080762242f66a8ef174c49d8e19b674db4cdbe"
+
+[[package]]
+name = "byteorder"
+version = "1.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
+
+[[package]]
+name = "bytes"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
+
+[[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.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 = "crossterm"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e86d73f2a0b407b5768d10a8c720cf5d2df49a9efc10ca09176d201ead4b7fb"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi 0.6.2",
+ "lazy_static",
+ "libc",
+ "mio",
+ "parking_lot",
+ "signal-hook",
+ "winapi",
+]
+
+[[package]]
+name = "crossterm"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c36c10130df424b2f3552fcc2ddcd9b28a27b1e54b358b45874f88d1ca6888c"
+dependencies = [
+ "bitflags",
+ "crossterm_winapi 0.7.0",
+ "futures-core",
+ "lazy_static",
+ "libc",
+ "mio",
+ "parking_lot",
+ "serde",
+ "signal-hook",
+ "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.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0da8964ace4d3e4a044fd027919b2237000b24315a37c916f61809f1ff2140b9"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "diesel"
+version = "1.4.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "047bfc4d5c3bd2ef6ca6f981941046113524b9a9f9a7cbdfdd7ff40f58e6f542"
+dependencies = [
+ "byteorder",
+ "diesel_derives",
+ "libsqlite3-sys",
+]
+
+[[package]]
+name = "diesel_derives"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "enum_dispatch"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8946e241a7774d5327d92749c50806f275f57d031d2229ecbfd65469a8ad338e"
+dependencies = [
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
+dependencies = [
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "funty"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7"
+
+[[package]]
+name = "futures"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f55667319111d593ba876406af7c409c0ebb44dc4be6132a783ccf163ea14c1"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2dd2df839b57db9ab69c2c9d8f3e8c81984781937fe2807dc6dcf3b2ad2939"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15496a72fabf0e62bdc3df11a59a3787429221dd0710ba8ef163d6f7a9112c94"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "891a4b7b96d84d5940084b2a37632dd65deeae662c114ceaa2c879629c9c0ad1"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71c2c65c57704c32f5241c1223167c2c3294fd34ac020c807ddbe6db287ba59"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea405816a5139fb39af82c2beb921d52143f556038378d6db21183a5c37fbfb7"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85754d98985841b7d4f5e8e6fbfa4a4ac847916893ec511a2917ccd8525b8bb3"
+
+[[package]]
+name = "futures-task"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa189ef211c15ee602667a6fcfe1c1fd9e07d42250d2156382820fba33c9df80"
+
+[[package]]
+name = "futures-util"
+version = "0.3.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1812c7ab8aedf8d6f2701a43e1243acdbcc2b36ab26e2ad421eb99ac963d96d1"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "proc-macro-hack",
+ "proc-macro-nested",
+ "slab",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cbf45460356b7deeb5e3415b5563308c0a9b057c85e12b06ad551f98d0a6ac"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "http"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "idna"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89829a5d69c23d348314a7ac337fe39173b61149a9864deabd260983aed48c21"
+dependencies = [
+ "matches",
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "itoa"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd25036021b0de88a0aff6b850051563c6516d0bf53f8638938edbb9de732736"
+
+[[package]]
+name = "js-sys"
+version = "0.3.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc15e39392125075f60c95ba416f5381ff6c3a948ff02ab12464715adf56c821"
+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 = "lexical-core"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21f866863575d0e1d654fbeeabdc927292fdf862873dc3c96c6f753357e13374"
+dependencies = [
+ "arrayvec",
+ "bitflags",
+ "cfg-if",
+ "ryu",
+ "static_assertions",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.90"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba4aede83fc3617411dc6993bc8c70919750c1c257c6ca6a502aed6e0e2394ae"
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64d31059f22935e6c31830db5249ba2b7ecd54fd73a9909286f0a67aa55c2fbd"
+dependencies = [
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "lock_api"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312"
+dependencies = [
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
+
+[[package]]
+name = "memchr"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
+
+[[package]]
+name = "mio"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2182a122f3b7f3f5329cb1972cee089ba2459a0a80a56935e6e674f096f8d839"
+dependencies = [
+ "libc",
+ "log",
+ "miow",
+ "ntapi",
+ "winapi",
+]
+
+[[package]]
+name = "miow"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897"
+dependencies = [
+ "socket2",
+ "winapi",
+]
+
+[[package]]
+name = "nom"
+version = "6.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2"
+dependencies = [
+ "bitvec",
+ "funty",
+ "lexical-core",
+ "memchr",
+ "version_check",
+]
+
+[[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 = "once_cell"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
+
+[[package]]
+name = "parking_lot"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
+dependencies = [
+ "instant",
+ "lock_api",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "parking_lot_core"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa7a782938e745763fe6907fc6ba86946d72f49fe7e21de074e08128a99fb018"
+dependencies = [
+ "cfg-if",
+ "instant",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pico-args"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d70072c20945e1ab871c472a285fc772aefd4f5407723c206242f2c6f94595d6"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc0e1f259c92177c30a4c9d177246edd0a3568b25756a977d0632cf8fa37e905"
+
+[[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.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
+
+[[package]]
+name = "proc-macro-hack"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
+
+[[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 = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
+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 = "radium"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8"
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "redox_users"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+]
+
+[[package]]
+name = "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 = "ron"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "064ea8613fb712a19faf920022ec8ddf134984f100090764a4e1d768f3827f1f"
+dependencies = [
+ "base64 0.13.0",
+ "bitflags",
+ "serde",
+]
+
+[[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",
+ "webpki",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sct"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.124"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd761ff957cb2a45fbb9ab3da6512de9de55872866160b23c25f1a841e99d29f"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.124"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1800f7693e94e186f5e25a28291ae1570da908aff7d97a095dec1e56ff99069b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "799e97dc9fdae36a5c8b8f2cae9ce2ee9fdce2058c57a93e6099d919fd982f79"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[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-registry"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "slab"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
+
+[[package]]
+name = "smallvec"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
+
+[[package]]
+name = "socket2"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[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 = "1.0.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "tap"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
+
+[[package]]
+name = "thiserror"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0f4a65597094d4483ddaed134f409b2cb7c1beccf25201a9f73c719254fa98e"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7765189610d8241a44529806d6fd1f2e0a08734313a35d5b3a556f92b381f3c0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "time"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "tinyvec"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "317cca572a0e89c3ce0ca1f1bdc9369547fe318a683418e42ac8f59d14701023"
+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.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134af885d758d645f0f0505c9a8b3f9bf8a348fd822e112ab5248138348f1722"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "mio",
+ "once_cell",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "winapi",
+]
+
+[[package]]
+name = "tui"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ced152a8e9295a5b168adc254074525c17ac4a83c90b2716274cc38118bddc9"
+dependencies = [
+ "bitflags",
+ "cassowary",
+ "crossterm 0.18.2",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "tui-utils"
+version = "0.10.0"
+source = "git+https://github.com/Acizza/tui-utils?rev=0.10.0#109a7f264b0c160799552d209fffaee0c3f1c703"
+dependencies = [
+ "smallvec",
+ "tui",
+ "unicode-segmentation",
+ "unicode-width",
+]
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
+dependencies = [
+ "matches",
+]
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07fbfce1c8a97d547e8b5334978438d9d6ec8c20e38f56d4a4374d181493eaef"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb0d2e7be6ae3a5fa87eed5fb451aff96f2573d2694942e40543ae0bbe19c796"
+
+[[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 = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "url"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ccd964113622c8e9322cfac19eb1004a07e636c545f325da085d5cdde6f1f8b"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "matches",
+ "percent-encoding",
+]
+
+[[package]]
+name = "vcpkg"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb"
+
+[[package]]
+name = "version_check"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fe8f61dba8e5d645a4d8132dc7a0a66861ed5e1045d2c0ed940fab33bac0fbe"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046ceba58ff062da072c7cb4ba5b22a37f00a302483f7e2a6cdc18fedbdc1fd3"
+dependencies = [
+ "bumpalo",
+ "lazy_static",
+ "log",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9aa01d36cda046f797c57959ff5f3c615c9cc63997a8d545831ec7976819b"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96eb45c1b2ee33545a813a92dbb53856418bf7eb54ab34f7f7ff1448a5b3735d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.72"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7148f4696fb4960a346eaa60bbfb42a1ac4ebba21f750f75fc1375b098d5ffa"
+
+[[package]]
+name = "web-sys"
+version = "0.3.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59fe19d70f5dacc03f6e46777213facae5ac3801575d56ca6cbd4c93dcd12310"
+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-roots"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8eff4b7516a57307f9349c64bf34caa34b940b66fed4b2fb3136cb7386e5739"
+dependencies = [
+ "webpki",
+]
+
+[[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-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "wyz"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214"
diff --git a/nixpkgs/pkgs/applications/misc/anup/default.nix b/nixpkgs/pkgs/applications/misc/anup/default.nix
new file mode 100644
index 000000000000..94c21164184d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/anup/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Security, sqlite, xdg-utils}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "anup";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "Acizza";
+    repo = "anup";
+    rev = version;
+    sha256 = "sha256-4pXF4p4K8+YihVB9NdgT6bOidmQEgWXUbcbvgXJ0IDA=";
+  };
+
+  buildInputs = [
+    sqlite
+    xdg-utils
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "tui-utils-0.10.0" = "sha256-xazeXTGiMFZEcSFEF26te3LQ5oFFcskIiYkLzfsXf/A=";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/Acizza/anup";
+    description = "An anime tracker for AniList featuring a TUI";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ natto1784 ];
+    mainProgram = "anup";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ape/apeclex.nix b/nixpkgs/pkgs/applications/misc/ape/apeclex.nix
new file mode 100644
index 000000000000..81096d9877f7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ape/apeclex.nix
@@ -0,0 +1,8 @@
+{ lib, attemptoClex, callPackage }:
+
+callPackage ./. {
+  pname = "ape-clex";
+  lexiconPath = "${attemptoClex}/clex_lexicon.pl";
+  description = "Parser for Attempto Controlled English (ACE) with a large lexicon (~100,000 entries)";
+  license = with lib; [ licenses.lgpl3 licenses.gpl3 ];
+}
diff --git a/nixpkgs/pkgs/applications/misc/ape/clex.nix b/nixpkgs/pkgs/applications/misc/ape/clex.nix
new file mode 100644
index 000000000000..a98695dab682
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ape/clex.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "attempto-clex";
+  version = "5133afe";
+
+  src = fetchFromGitHub {
+     owner = "Attempto";
+     repo = "Clex";
+     rev = version;
+     sha256 = "0p9s64g1jic213bwm6347jqckszgnni9szrrz31qjgaf32kf7nkp";
+  };
+
+  installPhase = ''
+    mkdir -p $out
+    cp clex_lexicon.pl $out
+  '';
+
+  meta = with lib; {
+    description = "Large lexicon for APE (~100,000 entries)";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ yrashk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ape/default.nix b/nixpkgs/pkgs/applications/misc/ape/default.nix
new file mode 100644
index 000000000000..e50d766a88b2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ape/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, swiProlog, makeWrapper,
+  fetchFromGitHub,
+  lexiconPath ? "prolog/lexicon/clex_lexicon.pl",
+  pname ? "ape",
+  description ? "Parser for Attempto Controlled English (ACE)",
+  license ? with lib; licenses.lgpl3
+}:
+
+stdenv.mkDerivation rec {
+  inherit pname;
+  version = "2019-08-10";
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ swiProlog ];
+
+  src = fetchFromGitHub {
+     owner = "Attempto";
+     repo = "APE";
+     rev = "113b81621262d7a395779465cb09397183e6f74c";
+     sha256 = "0xyvna2fbr18hi5yvm0zwh77q02dfna1g4g53z9mn2rmlfn2mhjh";
+  };
+
+  patchPhase = ''
+    # We move the file first to avoid "same file" error in the default case
+    cp ${lexiconPath} new_lexicon.pl
+    rm prolog/lexicon/clex_lexicon.pl
+    cp new_lexicon.pl prolog/lexicon/clex_lexicon.pl
+  '';
+
+  buildPhase = ''
+    make SHELL=${stdenv.shell} build
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ape.exe $out
+    makeWrapper $out/ape.exe $out/bin/ape --add-flags ace
+  '';
+
+  meta = with lib; {
+    description = description;
+    license = license;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ yrashk ];
+    mainProgram = "ape";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/appcleaner/default.nix b/nixpkgs/pkgs/applications/misc/appcleaner/default.nix
new file mode 100644
index 000000000000..eff32c76f988
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/appcleaner/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenvNoCC
+, fetchurl
+, unzip
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
+  pname = "appcleaner";
+  version = "3.6.8";
+
+  src = fetchurl {
+    url = "https://freemacsoft.net/downloads/AppCleaner_${finalAttrs.version}.zip";
+    hash = "sha256-4BL3KUQkc8IOfM4zSwAYJSHktmcupoGzSTGxgP6z1r4=";
+  };
+  dontUnpack = true;
+
+  nativeBuildInputs = [ unzip ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/Applications
+    unzip -d $out/Applications $src
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Uninstall unwanted apps";
+    homepage = "https://freemacsoft.net/appcleaner";
+    license = licenses.unfree;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ emilytrau Enzime ];
+    platforms = platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/appeditor/default.nix b/nixpkgs/pkgs/applications/misc/appeditor/default.nix
new file mode 100644
index 000000000000..508c59bab7c2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/appeditor/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, vala
+, meson
+, ninja
+, pkg-config
+, pantheon
+, python3
+, gettext
+, glib
+, gtk3
+, libgee
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "appeditor";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "donadigo";
+    repo = "appeditor";
+    rev = version;
+    sha256 = "sha256-A0YasHw5osGrgUPiUPuRBnv1MR/Pth6jVHGEx/klOGY=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    meson
+    ninja
+    vala
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    pantheon.granite
+    libgee
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Edit the Pantheon desktop application menu";
+    homepage = "https://github.com/donadigo/appeditor";
+    maintainers = with maintainers; [ xiorcale ] ++ teams.pantheon.members;
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+    mainProgram = "com.github.donadigo.appeditor";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/apvlv/default.nix b/nixpkgs/pkgs/applications/misc/apvlv/default.nix
new file mode 100644
index 000000000000..78d353ce2a85
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/apvlv/default.nix
@@ -0,0 +1,74 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, pkg-config, pcre, libxkbcommon, libepoxy
+, gtk3, poppler, freetype, libpthreadstubs, libXdmcp, libxshmfence, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.1.5";
+  pname = "apvlv";
+
+  src = fetchFromGitHub {
+    owner = "naihe2010";
+    repo = "apvlv";
+    rev = "v${version}";
+    sha256 = "1n4xiic8lqnv3mqi7wpdv866gyyakax71gffv3n9427rmcld465i";
+  };
+
+  env.NIX_CFLAGS_COMPILE = "-I${poppler.dev}/include/poppler";
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    poppler pcre libxkbcommon libepoxy
+    freetype gtk3
+    libpthreadstubs libXdmcp libxshmfence # otherwise warnings in compilation
+  ];
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/naihe2010/apvlv/commit/d432635b9c5ea6c052a2ae1fb71aedec5c4ad57a.patch";
+      sha256 = "1am8dgv2kkpqmm2vaysa61czx8ppdx94zb3c59sx88np50jpy70w";
+    })
+    (fetchpatch {
+      url = "https://github.com/naihe2010/apvlv/commit/4c7a583e8431964def482e5471f02e6de8e62a7b.patch";
+      sha256 = "1dszm120lwm90hcg5zmd4vr6pjyaxc84qmb7k0fr59mmb3qif62j";
+    })
+    # fix build with gcc7
+    (fetchpatch {
+      url = "https://github.com/naihe2010/apvlv/commit/a3a895772a27d76dab0c37643f0f4c73f9970e62.patch";
+      sha256 = "1fpc7wr1ajilvwi5gjsy5g9jcx4bl03gp5dmajg90ljqbhwz2bfi";
+    })
+    ./fix-build-with-poppler-0.73.0.patch
+  ];
+
+  installPhase = ''
+    # binary
+    mkdir -p $out/bin
+    cp src/apvlv $out/bin/apvlv
+
+    # displays pdfStartup.pdf as default pdf entry
+    mkdir -p $out/share/doc/apvlv/
+    cp ../Startup.pdf $out/share/doc/apvlv/Startup.pdf
+    cp ../main_menubar.glade $out/share/doc/apvlv/main_menubar.glade
+  ''
+  + lib.optionalString (!stdenv.isDarwin) ''
+    install -D ../apvlv.desktop $out/share/applications/apvlv.desktop
+  '';
+
+  meta = with lib; {
+    homepage = "http://naihe2010.github.io/apvlv/";
+    description = "PDF viewer with Vim-like behaviour";
+    longDescription = ''
+      apvlv is a PDF/DJVU/UMD/TXT Viewer Under Linux/WIN32
+      with Vim-like behaviour.
+    '';
+
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ardumont ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/apvlv/fix-build-with-poppler-0.73.0.patch b/nixpkgs/pkgs/applications/misc/apvlv/fix-build-with-poppler-0.73.0.patch
new file mode 100644
index 000000000000..d2a7831dca63
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/apvlv/fix-build-with-poppler-0.73.0.patch
@@ -0,0 +1,13 @@
+diff --git a/src/ApvlvPdf.cc b/src/ApvlvPdf.cc
+index 765b112..83d133f 100644
+--- a/src/ApvlvPdf.cc
++++ b/src/ApvlvPdf.cc
+@@ -29,7 +29,7 @@
+ #include "ApvlvPdf.h"
+
+ #ifndef POPPLER_WITH_GDK
+-#include <goo/gtypes.h>
++#include <goo/gfile.h>
+
+ static void
+ copy_cairo_surface_to_pixbuf (cairo_surface_t *surface,
diff --git a/nixpkgs/pkgs/applications/misc/archivebox/default.nix b/nixpkgs/pkgs/applications/misc/archivebox/default.nix
new file mode 100644
index 000000000000..4979a683ebe0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/archivebox/default.nix
@@ -0,0 +1,102 @@
+{ lib
+, stdenv
+, python3
+, fetchFromGitHub
+, fetchPypi
+, curl
+, wget
+, git
+, ripgrep
+, postlight-parser
+, readability-extractor
+, chromium
+, yt-dlp
+}:
+
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      django = super.django_3.overridePythonAttrs (old: rec {
+        version = "3.1.14";
+        src = old.src.override {
+          inherit version;
+          hash = "sha256-cqSloTaiFMOc8BbM3Wtp4qoIx0ecZtk/OpteS7nYo0c=";
+        };
+        meta = old.meta // {
+          knownVulnerabilities = [
+            "CVE-2021-45115"
+            "CVE-2021-45116"
+            "CVE-2021-45452"
+            "CVE-2022-23833"
+            "CVE-2022-22818"
+            "CVE-2022-28347"
+            "CVE-2022-28346"
+          ];
+        };
+      });
+      django-extensions = super.django-extensions.overridePythonAttrs (old: rec {
+        version = "3.1.5";
+        src = fetchFromGitHub {
+          inherit version;
+          owner = "django-extensions";
+          repo = "django-extensions";
+          rev = "e43f383dae3a35237e42f6acfe1207a8e7e7bdf5";
+          hash = "sha256-NAMa78KhAuoJfp0Cb0Codz84sRfRQ1JhSLNYRI4GBPM=";
+        };
+        # possibly a real issue, but that version is not supported anymore
+        disabledTests = [ "test_should_highlight_bash_syntax_without_name" ];
+      });
+    };
+  };
+in
+
+python.pkgs.buildPythonApplication rec {
+  pname = "archivebox";
+  version = "0.7.2";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-hdBUEX2tOWN2b11w6aG3x7MP7KQTj4Rwc2w8XvABGf4=";
+  };
+
+  nativeBuildInputs = with python.pkgs; [
+    pdm-backend
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    croniter
+    dateparser
+    django
+    django-extensions
+    ipython
+    mypy-extensions
+    python-crontab
+    requests
+    w3lib
+    yt-dlp
+  ];
+
+  makeWrapperArgs = [
+    "--set USE_NODE True" # used through dependencies, not needed explicitly
+    "--set READABILITY_BINARY ${lib.meta.getExe readability-extractor}"
+    "--set MERCURY_BINARY ${lib.meta.getExe postlight-parser}"
+    "--set CURL_BINARY ${lib.meta.getExe curl}"
+    "--set RIPGREP_BINARY ${lib.meta.getExe ripgrep}"
+    "--set WGET_BINARY ${lib.meta.getExe wget}"
+    "--set GIT_BINARY ${lib.meta.getExe git}"
+    "--set YOUTUBEDL_BINARY ${lib.meta.getExe yt-dlp}"
+  ] ++ (if (lib.meta.availableOn stdenv.hostPlatform chromium) then [
+    "--set CHROME_BINARY ${chromium}/bin/chromium-browser"
+  ] else [
+    "--set-default USE_CHROME False"
+  ]);
+
+  meta = with lib; {
+    description = "Open source self-hosted web archiving";
+    homepage = "https://archivebox.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben viraptor ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/archiver/default.nix b/nixpkgs/pkgs/applications/misc/archiver/default.nix
new file mode 100644
index 000000000000..2389285e99c0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/archiver/default.nix
@@ -0,0 +1,30 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "archiver";
+  version = "3.5.1";
+
+  src = fetchFromGitHub {
+    owner = "mholt";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-l9exOq8QF3WSQ/+WQr0NfPeRQ/R6VQwfT+YS76BBwd8=";
+  };
+
+  vendorHash = "sha256-sTzjTKQ9m5BicDk6M1wR1EU+o9+87DbHCyGoF35Jm/g=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" "-X main.commit=${src.rev}" "-X main.date=unknown" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Easily create & extract archives, and compress & decompress files of various formats";
+    homepage = "https://github.com/mholt/archiver";
+    mainProgram = "arc";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/archivy/default.nix b/nixpkgs/pkgs/applications/misc/archivy/default.nix
new file mode 100644
index 000000000000..c89bbde6569a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/archivy/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+      wtforms = super.wtforms.overridePythonAttrs (oldAttrs: rec {
+        version = "2.3.1";
+
+        src = oldAttrs.src.override {
+          inherit version;
+          sha256 = "sha256-hhoTs65SHWcA2sOydxlwvTVKY7pwQ+zDqCtSiFlqGXI=";
+        };
+
+        doCheck = false;
+      });
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "archivy";
+  version = "1.7.3";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-ns1Y0DqqnTAQMEt+oBJ/P2gqKqPsX9P3/Z4561qzuns";
+  };
+
+  nativeBuildInputs = [ pythonRelaxDepsHook ];
+
+  pythonRelaxDeps = true;
+
+  propagatedBuildInputs = [
+    appdirs
+    attrs
+    beautifulsoup4
+    click-plugins
+    elasticsearch
+    flask-compress
+    flask-login
+    flask-wtf
+    html2text
+    python-dotenv
+    python-frontmatter
+    readability-lxml
+    requests
+    setuptools
+    tinydb
+    validators
+    wtforms
+  ];
+
+  # __init__.py attempts to mkdir in read-only file system
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Self-hosted knowledge repository";
+    homepage = "https://archivy.github.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siraben ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/artha/default.nix b/nixpkgs/pkgs/applications/misc/artha/default.nix
new file mode 100644
index 000000000000..0dfc3285c061
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/artha/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, autoreconfHook, fetchurl, dbus-glib, gtk2, pkg-config, wordnet }:
+
+stdenv.mkDerivation rec {
+  pname = "artha";
+  version = "1.0.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/artha/${version}/artha-${version}.tar.bz2";
+    sha256 = "034r7vfk5y7705k068cdlq52ikp6ip10w6047a5zjdakbn55c3as";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ dbus-glib gtk2 wordnet ];
+
+  meta = with lib; {
+    description = "An offline thesaurus based on WordNet";
+    homepage = "https://artha.sourceforge.net";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.goibhniu ];
+    platforms = platforms.linux;
+    mainProgram = "artha";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/asciiquarium/default.nix b/nixpkgs/pkgs/applications/misc/asciiquarium/default.nix
new file mode 100644
index 000000000000..a4276dac1d1f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/asciiquarium/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, makeWrapper, perlPackages }:
+
+let version = "1.1";
+in stdenv.mkDerivation {
+  pname = "asciiquarium";
+  inherit version;
+  src = fetchurl {
+    url = "https://robobunny.com/projects/asciiquarium/asciiquarium_${version}.tar.gz";
+    sha256 = "0qfkr5b7sxzi973nh0h84blz2crvmf28jkkgaj3mxrr56mhwc20v";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp asciiquarium $out/bin
+    chmod +x $out/bin/asciiquarium
+    wrapProgram $out/bin/asciiquarium \
+      --set PERL5LIB ${perlPackages.makeFullPerlPath [ perlPackages.TermAnimation ] }
+  '';
+
+  meta = with lib; {
+    description = "Enjoy the mysteries of the sea from the safety of your own terminal!";
+    homepage = "https://robobunny.com/projects/asciiquarium/html/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.utdemir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/audio/sox/0001-musl-rewind-pipe-workaround.patch b/nixpkgs/pkgs/applications/misc/audio/sox/0001-musl-rewind-pipe-workaround.patch
new file mode 100644
index 000000000000..6aacbcc65bcb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/audio/sox/0001-musl-rewind-pipe-workaround.patch
@@ -0,0 +1,24 @@
+From e7446c9bcb47674c9d0ee3b5bab129e9b86eb1c9 Mon Sep 17 00:00:00 2001
+From: Walter Franzini <walter.franzini@gmail.com>
+Date: Fri, 7 Jun 2019 17:57:11 +0200
+Subject: [PATCH] musl does not support rewind pipe, make it build anyway
+
+---
+ src/formats.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/src/formats.c b/src/formats.c
+index f3efe764..477bf451 100644
+--- a/src/formats.c
++++ b/src/formats.c
+@@ -424,7 +424,6 @@ static void UNUSED rewind_pipe(FILE * fp)
+   /* To fix this #error, either simply remove the #error line and live without
+    * file-type detection with pipes, or add support for your compiler in the
+    * lines above.  Test with cat monkey.wav | ./sox --info - */
+-  #error FIX NEEDED HERE
+   #define NO_REWIND_PIPE
+   (void)fp;
+ #endif
+-- 
+2.19.2
+
diff --git a/nixpkgs/pkgs/applications/misc/audio/sox/default.nix b/nixpkgs/pkgs/applications/misc/audio/sox/default.nix
new file mode 100644
index 000000000000..bb751ae01c9d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/audio/sox/default.nix
@@ -0,0 +1,91 @@
+{ config
+, lib
+, stdenv
+, fetchgit
+, autoreconfHook
+, autoconf-archive
+, pkg-config
+, CoreAudio
+, enableAlsa ? true
+, alsa-lib
+, enableLibao ? true
+, libao
+, enableLame ? config.sox.enableLame or false
+, lame
+, enableLibmad ? true
+, libmad
+, enableLibogg ? true
+, libogg
+, libvorbis
+, enableOpusfile ? true
+, opusfile
+, enableFLAC ? true
+, flac
+, enablePNG ? true
+, libpng
+, enableLibsndfile ? true
+, libsndfile
+, enableWavpack ? true
+, wavpack
+  # amrnb and amrwb are unfree, disabled by default
+, enableAMR ? false
+, amrnb
+, amrwb
+, enableLibpulseaudio ? stdenv.isLinux
+, libpulseaudio
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sox";
+  version = "unstable-2021-05-09";
+
+  src = fetchgit {
+    # not really needed, but when this src was updated from `fetchurl ->
+    # fetchgit`, we spared the mass rebuild by changing this `name` and
+    # therefor merge this to `master` and not to `staging`.
+    name = "source";
+    url = "https://git.code.sf.net/p/sox/code";
+    rev = "42b3557e13e0fe01a83465b672d89faddbe65f49";
+    hash = "sha256-9cpOwio69GvzVeDq79BSmJgds9WU5kA/KUlAkHcpN5c=";
+  };
+
+  outputs = [
+    "out"
+    "dev"
+    "lib"
+    "man"
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    autoconf-archive
+    pkg-config
+  ];
+
+  patches = [ ./0001-musl-rewind-pipe-workaround.patch ];
+
+  buildInputs =
+    lib.optional (enableAlsa && stdenv.isLinux) alsa-lib
+    ++ lib.optional enableLibao libao
+    ++ lib.optional enableLame lame
+    ++ lib.optional enableLibmad libmad
+    ++ lib.optionals enableLibogg [ libogg libvorbis ]
+    ++ lib.optional enableOpusfile opusfile
+    ++ lib.optional enableFLAC flac
+    ++ lib.optional enablePNG libpng
+    ++ lib.optional enableLibsndfile libsndfile
+    ++ lib.optional enableWavpack wavpack
+    ++ lib.optionals enableAMR [ amrnb amrwb ]
+    ++ lib.optional enableLibpulseaudio libpulseaudio
+    ++ lib.optional stdenv.isDarwin CoreAudio;
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Sample Rate Converter for audio";
+    homepage = "https://sox.sourceforge.net/";
+    maintainers = with maintainers; [ marcweber ];
+    license = if enableAMR then licenses.unfree else licenses.gpl2Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/audio/soxr/arm64-check.patch b/nixpkgs/pkgs/applications/misc/audio/soxr/arm64-check.patch
new file mode 100644
index 000000000000..ac16a214c3aa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/audio/soxr/arm64-check.patch
@@ -0,0 +1,79 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Misty De Meo <mistydemeo@gmail.com>
+Date: Tue, 15 Sep 2020 16:57:26 -0700
+Subject: [PATCH] Check for __arm64__, not just __arm__
+
+On at least one 64-bit ARM processor I've tested (Apple Silicon on macOS),
+__arm__ isn't defined but __arm64__ is. As a result, some of the
+ARM-specific macros are missing and calls to them fail.
+---
+ src/cr-core.c    | 2 +-
+ src/dev32s.h     | 2 +-
+ src/pffft-wrap.c | 2 +-
+ src/pffft.c      | 4 ++--
+ 4 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/src/cr-core.c b/src/cr-core.c
+index 159a5d9..fe5ea8a 100644
+--- a/src/cr-core.c
++++ b/src/cr-core.c
+@@ -80,7 +80,7 @@ static void cubic_stage_fn(stage_t * p, fifo_t * output_fifo)
+   #define DEFINED_X86 0
+ #endif
+ 
+-#if defined __arm__
++#if defined(__arm__) || defined(__arm64__)
+   #define DEFINED_ARM 1
+ #else
+   #define DEFINED_ARM 0
+diff --git a/src/dev32s.h b/src/dev32s.h
+index 7edae86..a14d7ad 100644
+--- a/src/dev32s.h
++++ b/src/dev32s.h
+@@ -31,7 +31,7 @@ SIMD_INLINE(void) vStorSum(float * a, v4_t b) {
+   v4_t t = vAdd(_mm_movehl_ps(b, b), b);
+   _mm_store_ss(a, vAdd(t, _mm_shuffle_ps(t,t,1)));}
+ 
+-#elif defined __arm__
++#elif defined(__arm__) || defined(__arm64__)
+ 
+ #include <arm_neon.h>
+ 
+diff --git a/src/pffft-wrap.c b/src/pffft-wrap.c
+index c920f06..1641fc4 100644
+--- a/src/pffft-wrap.c
++++ b/src/pffft-wrap.c
+@@ -40,7 +40,7 @@ static void pffft_zconvolve(PFFFT_Setup *s, const float *a, const float *b, floa
+ 
+   float ar, ai, br, bi;
+ 
+-#ifdef __arm__
++#if defined(__arm__) || defined(__arm64__)
+   __builtin_prefetch(va);
+   __builtin_prefetch(vb);
+   __builtin_prefetch(va+2);
+diff --git a/src/pffft.c b/src/pffft.c
+index 46c841e..8c775a9 100644
+--- a/src/pffft.c
++++ b/src/pffft.c
+@@ -157,7 +157,7 @@ typedef __m128 v4sf;
+ /*
+   ARM NEON support macros
+ */
+-#elif !defined(PFFFT_SIMD_DISABLE) && defined(__arm__)
++#elif !defined(PFFFT_SIMD_DISABLE) && (defined(__arm__) || defined(__arm64__))
+ #  include <arm_neon.h>
+ typedef float32x4_t v4sf;
+ #  define SIMD_SZ 4
+@@ -1732,7 +1732,7 @@ void pffft_zconvolve_accumulate(PFFFT_Setup *s, const float *a, const float *b,
+   const v4sf * RESTRICT vb = (const v4sf*)b;
+   v4sf * RESTRICT vab = (v4sf*)ab;
+ 
+-#ifdef __arm__
++#if defined(__arm__) || defined(__arm64__)
+   __builtin_prefetch(va);
+   __builtin_prefetch(vb);
+   __builtin_prefetch(vab);
+-- 
+2.30.1
+
diff --git a/nixpkgs/pkgs/applications/misc/audio/soxr/default.nix b/nixpkgs/pkgs/applications/misc/audio/soxr/default.nix
new file mode 100644
index 000000000000..6762fbe25742
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/audio/soxr/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, cmake }:
+
+stdenv.mkDerivation rec {
+  pname = "soxr";
+  version = "0.1.3";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/soxr/soxr-${version}-Source.tar.xz";
+    sha256 = "12aql6svkplxq5fjycar18863hcq84c5kx8g6f4rj0lcvigw24di";
+  };
+
+  patches = [
+    # Remove once https://sourceforge.net/p/soxr/code/merge-requests/5/ is merged.
+    ./arm64-check.patch
+  ];
+
+  outputs = [ "out" "dev" "doc" ];
+
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "An audio resampling library";
+    homepage = "https://soxr.sourceforge.net";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.unix ++ platforms.windows;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/audio/wavrsocvt/default.nix b/nixpkgs/pkgs/applications/misc/audio/wavrsocvt/default.nix
new file mode 100644
index 000000000000..c9f97c5602b2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/audio/wavrsocvt/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation {
+  pname = "wavrsocvt";
+  version = "1.0.2.0";
+
+  src = fetchurl {
+    url = "https://bricxcc.sourceforge.net/wavrsocvt.tgz";
+    sha256 = "15qlvdfwbiclljj7075ycm78yzqahzrgl4ky8pymix5179acm05h";
+  };
+
+  unpackPhase = ''
+    tar -zxf $src
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp wavrsocvt $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Convert .wav files into sound files for Lego NXT brick";
+    longDescription = ''
+      wavrsocvt is a command-line utility which can be used from a
+      terminal window or script to convert .wav files into sound
+      files for the NXT brick (.rso files). It can also convert the
+      other direction (i.e., .rso -> .wav). It can produce RSO files
+      with a sample rate between 2000 and 16000 (the min/max range of
+      supported sample rates in the standard NXT firmware).
+      You can then upload these with e.g. nxt-python.
+    '';
+    homepage = "https://bricxcc.sourceforge.net/";
+    license = licenses.mpl11;
+    maintainers = with maintainers; [ leenaars ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ausweisapp/default.nix b/nixpkgs/pkgs/applications/misc/ausweisapp/default.nix
new file mode 100644
index 000000000000..25599f383819
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ausweisapp/default.nix
@@ -0,0 +1,62 @@
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+  testers,
+  cmake,
+  pkg-config,
+  wrapQtAppsHook,
+  pcsclite,
+  qtscxml,
+  qtsvg,
+  qttools,
+  qtwayland,
+  qtwebsockets,
+}:
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ausweisapp";
+  version = "2.0.3";
+
+  src = fetchFromGitHub {
+    owner = "Governikus";
+    repo = "AusweisApp2";
+    rev = finalAttrs.version;
+    hash = "sha256-pnGtlNXwYNG+m3mmo815dqp2i098I/i7EKdLrDm/Su8=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  # The build scripts copy the entire translations directory from Qt
+  # which ends up being read-only because it's in the store.
+  preBuild = ''
+    chmod +w resources/translations
+  '';
+
+  buildInputs = [
+    pcsclite
+    qtscxml
+    qtsvg
+    qttools
+    qtwayland
+    qtwebsockets
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+    command = "QT_QPA_PLATFORM=offscreen ${finalAttrs.meta.mainProgram} --version";
+  };
+
+  meta = {
+    description = "Official authentication app for German ID card and residence permit";
+    downloadPage = "https://github.com/Governikus/AusweisApp2/releases";
+    homepage = "https://www.ausweisapp.bund.de/open-source-software";
+    license = lib.licenses.eupl12;
+    mainProgram = "AusweisApp";
+    maintainers = with lib.maintainers; [b4dm4n];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/authenticator/default.nix b/nixpkgs/pkgs/applications/misc/authenticator/default.nix
new file mode 100644
index 000000000000..dac943fee677
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/authenticator/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, appstream-glib
+, cargo
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, rustPlatform
+, rustc
+, wrapGAppsHook4
+, gdk-pixbuf
+, glib
+, gst_all_1
+, gtk4
+, libadwaita
+, openssl
+, pipewire
+, sqlite
+, wayland
+, zbar
+}:
+
+stdenv.mkDerivation rec {
+  pname = "authenticator";
+  version = "4.4.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = "Authenticator";
+    rev = version;
+    hash = "sha256-LNYhUDV5nM46qx29xXE6aCEdBo7VnwT61YgAW0ZXW30=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-ntkKH4P3Ui2NZSVy87hGAsRA1GDRwoK9UnA/nFjyLnA=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    glib
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    (gst_all_1.gst-plugins-bad.override { enableZbar = true; })
+    gtk4
+    libadwaita
+    openssl
+    pipewire
+    sqlite
+    wayland
+    zbar
+  ];
+
+  meta = {
+    description = "Two-factor authentication code generator for GNOME";
+    homepage = "https://gitlab.gnome.org/World/Authenticator";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ austinbutler ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/authy/default.nix b/nixpkgs/pkgs/applications/misc/authy/default.nix
new file mode 100644
index 000000000000..95a439b67539
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/authy/default.nix
@@ -0,0 +1,68 @@
+{ autoPatchelfHook
+, electron
+, fetchurl
+, lib
+, makeWrapper
+, squashfsTools
+, stdenv
+}:
+
+stdenv.mkDerivation rec {
+  pname = "authy";
+  # curl -H 'X-Ubuntu-Series: 16' 'https://api.snapcraft.io/api/v1/snaps/details/authy?channel=stable' | jq '.download_url,.version'
+  version = "2.4.1";
+  rev = "21";
+
+  src = fetchurl {
+    url = "https://api.snapcraft.io/api/v1/snaps/download/H8ZpNgIoPyvmkgxOWw5MSzsXK1wRZiHn_${rev}.snap";
+    hash = "sha256-a5z6Lwdgody88f7has/f2AMg9m9fGWsJSexZM6KUGOY=";
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper squashfsTools ];
+
+  unpackPhase = ''
+    runHook preUnpack
+    unsquashfs "$src"
+    cd squashfs-root
+    if ! grep -q '${version}' meta/snap.yaml; then
+      echo "Package version differs from version found in snap metadata:"
+      grep 'version: ' meta/snap.yaml
+      echo "While the nix package specifies: ${version}."
+      echo "You probably chose the wrong revision or forgot to update the nix version."
+      exit 1
+    fi
+    runHook postUnpack
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/applications $out/share/pixmaps/apps
+
+    # Copy only what is needed
+    cp -r resources* $out/
+    cp -r locales* $out/
+    cp meta/gui/authy.desktop $out/share/applications/
+    cp meta/gui/icon.png $out/share/pixmaps/authy.png
+
+    # Replace icon name in Desktop file
+    sed -i 's|''${SNAP}/meta/gui/icon.png|authy|g' "$out/share/applications/authy.desktop"
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper ${electron}/bin/electron $out/bin/${pname} \
+      --add-flags $out/resources/app.asar
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.authy.com";
+    description = "Twilio Authy two factor authentication desktop application";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ iammrinal0 ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "authy";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/auto-multiple-choice/default.nix b/nixpkgs/pkgs/applications/misc/auto-multiple-choice/default.nix
new file mode 100644
index 000000000000..43aad6d5be16
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/auto-multiple-choice/default.nix
@@ -0,0 +1,177 @@
+{ lib
+, stdenv
+, fetchurl
+, perlPackages
+, makeWrapper
+, wrapGAppsHook
+, cairo
+, dblatex
+, gnumake
+, gobject-introspection
+, graphicsmagick
+, gsettings-desktop-schemas
+, gtk3
+, hicolor-icon-theme
+, libnotify
+, librsvg
+, libxslt
+, netpbm
+, opencv
+, pango
+, perl
+, pkg-config
+, poppler
+, auto-multiple-choice
+}:
+stdenv.mkDerivation (finalAttrs: rec {
+  pname = "auto-multiple-choice";
+  version = "1.6.0";
+  src = fetchurl {
+    url = "https://download.auto-multiple-choice.net/${pname}_${version}_dist.tar.gz";
+    # before 1.6.0, the URL pattern used "precomp" instead of "dist".    ^^^^
+    sha256 = "sha256-I9Xw1BN8ZSQhi5F1R3axHBKE6tnaCNk8k5tts6LoMjY=";
+  };
+
+  # There's only the Makefile
+  dontConfigure = true;
+
+  makeFlags = [
+    "PERLPATH=${perl}/bin/perl"
+    # We *need* to pass DESTDIR, as the Makefile ignores PREFIX.
+    "DESTDIR=$(out)"
+    # Relative paths.
+    "BINDIR=/bin"
+    "PERLDIR=/share/perl5"
+    "MODSDIR=/lib" # At runtime, AMC will test for that dir before
+    # defaulting to the "portable" strategy we use, so this test
+    # *must* fail.  *But* this variable cannot be set to anything but
+    # "/lib" , because that name is hardcoded in the main executable
+    # and this variable controls both both the path AMC will check at
+    # runtime, AND the path where the actual modules will be stored at
+    # build-time.  This has been reported upstream as
+    # https://project.auto-multiple-choice.net/issues/872
+    "TEXDIR=/tex/latex/" # what texlive.combine expects
+    "TEXDOCDIR=/share/doc/texmf/" # TODO where to put this?
+    "MAN1DIR=/share/man/man1"
+    "DESKTOPDIR=/share/applications"
+    "METAINFODIR=/share/metainfo"
+    "ICONSDIR=/share/auto-multiple-choice/icons"
+    "APPICONDIR=/share/icons/hicolor"
+    "LOCALEDIR=/share/locale"
+    "MODELSDIR=/share/auto-multiple-choice/models"
+    "DOCDIR=/share/doc/auto-multiple-choice"
+    "SHARED_MIMEINFO_DIR=/share/mime/packages"
+    "LANG_GTKSOURCEVIEW_DIR=/share/gtksourceview-4/language-specs"
+    # Pretend to be redhat so `install` doesn't try to chown/chgrp.
+    "SYSTEM_TYPE=rpm"
+    "GCC=${stdenv.cc.targetPrefix}cc"
+    "GCC_PP=${stdenv.cc.targetPrefix}c++"
+  ];
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/auto-multiple-choice \
+    ''${makeWrapperArgs[@]} \
+    --prefix PERL5LIB : "${with perlPackages; makeFullPerlPath [
+      ArchiveZip
+      DBDSQLite
+      Cairo
+      CairoGObject
+      DBI
+      Glib
+      GlibObjectIntrospection
+      Gtk3
+      LocaleGettext
+      OpenOfficeOODoc
+      PerlMagick
+      TextCSV
+      XMLParser
+      XMLSimple
+      XMLWriter
+    ]}:"$out/share/perl5 \
+    --prefix XDG_DATA_DIRS : "$out/share:$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH" \
+    --set TEXINPUTS ":.:$out/tex/latex"
+  '';
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    cairo
+    cairo.dev
+    dblatex
+    gnumake
+    graphicsmagick
+    gsettings-desktop-schemas
+    gtk3
+    hicolor-icon-theme
+    libnotify
+    librsvg
+    libxslt
+    netpbm
+    opencv
+    pango
+    poppler
+  ] ++ (with perlPackages; [
+    perl
+    ArchiveZip
+    Cairo
+    CairoGObject
+    DBDSQLite
+    DBI
+    Glib
+    GlibObjectIntrospection
+    Gtk3
+    LocaleGettext
+    PerlMagick
+    TextCSV
+    XMLParser
+    XMLSimple
+    XMLWriter
+  ]);
+
+  passthru = {
+    tlType = "run";
+    pkgs = [ finalAttrs.finalPackage ];
+  };
+
+  meta = with lib; {
+    description = "Create and manage multiple choice questionnaires with automated marking.";
+    longDescription = ''
+      Create, manage and mark multiple-choice questionnaires.
+      auto-multiple-choice features automated or manual formatting with
+      LaTeX, shuffling of questions and answers and automated marking using
+      Optical Mark Recognition.
+
+      Questionnaires can be created using either a very simple text syntax,
+      AMC-TXT, or LaTeX. In the latter case, your TeXLive installation must
+      be combined with this package.  This can be done in configuration.nix
+      as follows:
+
+      <screen>
+      …
+      environment.systemPackages = with pkgs; [
+        auto-multiple-choice
+        (texlive.combine {
+          inherit (pkgs.texlive) scheme-full;
+          inherit auto-multiple-choice;
+        })
+      ];
+      </screen>
+
+      For usage instructions, see documentation at the project's homepage.
+    '';
+    homepage = "https://www.auto-multiple-choice.net/";
+    changelog = "https://gitlab.com/jojo_boulix/auto-multiple-choice/-/blob/master/ChangeLog";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.thblt ];
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/autospotting/default.nix b/nixpkgs/pkgs/applications/misc/autospotting/default.nix
new file mode 100644
index 000000000000..0018102bd817
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/autospotting/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "autospotting";
+  version = "unstable-2023-07-03";
+
+  src = fetchFromGitHub {
+    owner = "LeanerCloud";
+    repo = "AutoSpotting";
+    rev = "6b08f61d72eafddf01bb68ccb789505f1c7be3eb";
+    hash = "sha256-gW8AIPqwNXfjsPxPv/5+gF374wTw8iavhjmlG4Onkxg=";
+  };
+
+  vendorHash = "sha256-RuBchKainwE6RM3AphKWjndGZc1nh7A/Xxcacq1r7Nk=";
+
+  excludedPackages = [ "scripts" ];
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Automatically convert your existing AutoScaling groups to up to 90% cheaper spot instances with minimal configuration changes";
+    homepage = "https://github.com/cloudutil/AutoSpotting";
+    license = licenses.osl3;
+    maintainers = with maintainers; [ costrouc ];
+    mainProgram = "AutoSpotting";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/avalonia-ilspy/default.nix b/nixpkgs/pkgs/applications/misc/avalonia-ilspy/default.nix
new file mode 100644
index 000000000000..797a8ffe5c93
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/avalonia-ilspy/default.nix
@@ -0,0 +1,117 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, buildDotnetModule
+, dotnetCorePackages
+, libX11
+, libICE
+, libSM
+, libXi
+, libXcursor
+, libXext
+, libXrandr
+, fontconfig
+, glew
+, makeDesktopItem
+, copyDesktopItems
+, icoutils
+, autoPatchelfHook
+, bintools
+, fixDarwinDylibNames
+, autoSignDarwinBinariesHook
+}:
+
+buildDotnetModule rec {
+  pname = "avalonia-ilspy";
+  version = "7.2-rc";
+
+  src = fetchFromGitHub {
+    owner = "icsharpcode";
+    repo = "AvaloniaILSpy";
+    rev = "v${version}";
+    sha256 = "cCQy5cSpJNiVZqgphURcnraEM0ZyXGhzJLb5AThNfPQ=";
+  };
+
+  patches = [
+    # Remove dead nuget package source
+    ./remove-broken-sources.patch
+  ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    icoutils
+  ] ++ lib.optionals stdenv.hostPlatform.isLinux [ autoPatchelfHook ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ bintools fixDarwinDylibNames ]
+    ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64) [ autoSignDarwinBinariesHook ];
+
+  buildInputs = [
+    # Dependencies of nuget packages w/ native binaries
+    stdenv.cc.cc.lib
+    fontconfig
+  ];
+
+  runtimeDeps = [
+    # Avalonia UI
+    libX11
+    libICE
+    libSM
+    libXi
+    libXcursor
+    libXext
+    libXrandr
+    fontconfig
+    glew
+  ];
+
+  postInstall = ''
+    icotool --icon -x ILSpy/ILSpy.ico
+    for i in 16 32 48 256; do
+      size=''${i}x''${i}
+      install -Dm444 *_''${size}x32.png $out/share/icons/hicolor/$size/apps/ILSpy.png
+    done
+  '' + lib.optionalString stdenv.hostPlatform.isDarwin ''
+    install -Dm444 ILSpy/Info.plist $out/Applications/ILSpy.app/Contents/Info.plist
+    install -Dm444 ILSpy/ILSpy.icns $out/Applications/ILSpy.app/Contents/Resources/ILSpy.icns
+    mkdir -p $out/Applications/ILSpy.app/Contents/MacOS
+    ln -s $out/bin/ILSpy $out/Applications/ILSpy.app/Contents/MacOS/ILSpy
+  '';
+
+  dotnet-sdk = dotnetCorePackages.sdk_6_0;
+  dotnet-runtime = dotnetCorePackages.runtime_6_0;
+
+  projectFile = "ILSpy/ILSpy.csproj";
+  nugetDeps = ./deps.nix;
+  executables = [ "ILSpy" ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "ILSpy";
+      desktopName = "ILSpy";
+      exec = "ILSpy";
+      icon = "ILSpy";
+      comment = ".NET assembly browser and decompiler";
+      categories = [
+        "Development"
+      ];
+      keywords = [
+        ".net"
+        "il"
+        "assembly"
+      ];
+    })
+  ];
+
+  meta = with lib; {
+    description = ".NET assembly browser and decompiler";
+    homepage = "https://github.com/icsharpcode/AvaloniaILSpy";
+    license = with licenses; [
+      mit
+      # third party dependencies
+      lgpl21Only
+      mspl
+    ];
+    sourceProvenance = with sourceTypes; [ fromSource binaryBytecode binaryNativeCode ];
+    maintainers = with maintainers; [ AngryAnt emilytrau ];
+    mainProgram = "ILSpy";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/avalonia-ilspy/deps.nix b/nixpkgs/pkgs/applications/misc/avalonia-ilspy/deps.nix
new file mode 100644
index 000000000000..628115740e0e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/avalonia-ilspy/deps.nix
@@ -0,0 +1,218 @@
+# This file was automatically generated by passthru.fetch-deps.
+# Please dont edit it manually, your changes might get overwritten!
+
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Avalonia"; version = "0.10.13"; sha256 = "1df46dvjyax8jjdcvdavpzq5bwxacrw71j557mcm1401vv3r1vn3"; })
+  (fetchNuGet { pname = "Avalonia.Angle.Windows.Natives"; version = "2.1.0.2020091801"; sha256 = "04jm83cz7vkhhr6n2c9hya2k8i2462xbf6np4bidk55as0jdq43a"; })
+  (fetchNuGet { pname = "Avalonia.AvaloniaEdit"; version = "0.10.12.2"; sha256 = "1sn8k71xcfnjxgxfqzdrv1hy7h7pvdk820nyzkmrf02gi77mx7nw"; })
+  (fetchNuGet { pname = "Avalonia.Controls.DataGrid"; version = "0.10.13"; sha256 = "1yl402l5cwbv6gwy3p8r702ypp3p8w5wi8im25c2bjnv31889l8r"; })
+  (fetchNuGet { pname = "Avalonia.Desktop"; version = "0.10.13"; sha256 = "1y206hrfwyg8023z0m7dik1hlir1r18h8q0f0zqz3sabyy5k276w"; })
+  (fetchNuGet { pname = "Avalonia.Diagnostics"; version = "0.10.13"; sha256 = "11khr3w7gwlm1bajfh5zhrsfcfd9kbw5mbgwnbjq7i5lq9glriid"; })
+  (fetchNuGet { pname = "Avalonia.FreeDesktop"; version = "0.10.13"; sha256 = "18gygzg12facawvzmfgpja4rsagy670dv1dcrx4shfl7w8l998jp"; })
+  (fetchNuGet { pname = "Avalonia.Markup.Xaml.Loader"; version = "0.10.13"; sha256 = "187r64xpidliqbp9c3qar0grhn97ffvc0mp0gyrxxszrff9vf69k"; })
+  (fetchNuGet { pname = "Avalonia.Native"; version = "0.10.13"; sha256 = "18b2pykfcgw9pyjmdqq7i1n8j330n7xrwyldl9bpkvahswinvhza"; })
+  (fetchNuGet { pname = "Avalonia.Remote.Protocol"; version = "0.10.13"; sha256 = "0j0kdh6dbii59v972azhwq69rmak63lp5f5jqz3pi94mifx4bayy"; })
+  (fetchNuGet { pname = "Avalonia.Skia"; version = "0.10.13"; sha256 = "0k5y0w164m03q278m4wr7zzf3vfq9nb0am9vmmprivpn1xwwa7ml"; })
+  (fetchNuGet { pname = "Avalonia.Win32"; version = "0.10.13"; sha256 = "0jyl1rrn1n07dnqn76ijwhxgkc45dmsfh2d811n4695ndaz85nkl"; })
+  (fetchNuGet { pname = "Avalonia.X11"; version = "0.10.13"; sha256 = "1y8x9hjdlxg4q8q958i364cbak8xjh4nldp38cnxwjir814p0xwh"; })
+  (fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2-preview.178"; sha256 = "1p5nwzl7jpypsd6df7hgcf47r977anjlyv21wacmalsj6lvdgnvn"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Linux"; version = "2.8.2-preview.178"; sha256 = "1402ylkxbgcnagcarqlfvg4gppy2pqs3bmin4n5mphva1g7bqb2p"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.macOS"; version = "2.8.2-preview.178"; sha256 = "0p8miaclnbfpacc1jaqxwfg0yfx9byagi4j4k91d9621vd19i8b2"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.WebAssembly"; version = "2.8.2-preview.178"; sha256 = "1n9jay9sji04xly6n8bzz4591fgy8i65p21a8mv5ip9lsyj1c320"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2-preview.178"; sha256 = "1r5syii96wv8q558cvsqw3lr10cdw6677lyiy82p6i3if51v3mr7"; })
+  (fetchNuGet { pname = "ICSharpCode.Decompiler"; version = "7.1.0.6543"; sha256 = "1xrajs5dcd7aqsg9ibhdcy39yrd8737kknkmqf907n7fqs2jxr46"; })
+  (fetchNuGet { pname = "ICSharpCode.Decompiler"; version = "7.2.1.6856"; sha256 = "19z68rgzl93lh1h8anbgzw119mhvcgr9nh5q2nxk6qihl2mx97ba"; })
+  (fetchNuGet { pname = "JetBrains.Annotations"; version = "10.3.0"; sha256 = "1grdx28ga9fp4hwwpwv354rizm8anfq4lp045q4ss41gvhggr3z8"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "2.9.6"; sha256 = "18mr1f0wpq0fir8vjnq0a8pz50zpnblr7sabff0yqx37c975934a"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "3.4.0"; sha256 = "12rn6gl4viycwk3pz5hp5df63g66zvba4hnkwr3f0876jj5ivmsw"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "3.4.0"; sha256 = "0rhylcwa95bxawcgixk64knv7p7xrykdjcabmx3gknk8hvj1ai9y"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "3.4.0"; sha256 = "1h2f0z9xnw987x8bydka1sd42ijqjx973md6v1gvpy1qc6ad244g"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "3.4.0"; sha256 = "195gqnpwqkg2wlvk8x6yzm7byrxfq9bki20xmhf6lzfsdw3z4mf2"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.3.0"; sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb"; })
+  (fetchNuGet { pname = "Microsoft.DiaSymReader"; version = "1.4.0"; sha256 = "0li9shnm941jza40kqfkbbys77mrr55nvi9h3maq9fipq4qwx92d"; })
+  (fetchNuGet { pname = "Microsoft.DiaSymReader.Converter.Xml"; version = "1.1.0-beta2-22164-02"; sha256 = "1f8ha43xp0zy7kn1n98aaaapv6fdxl3a2qabg29fq74jzb16j9fp"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.diasymreader.converter.xml/1.1.0-beta2-22164-02/microsoft.diasymreader.converter.xml.1.1.0-beta2-22164-02.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.DiaSymReader.Native"; version = "17.0.0-beta1.21524.1"; sha256 = "0gash3xgzvcb78w2xqv003l0cld199zpfilnjbagwbr5ikdh6f3s"; })
+  (fetchNuGet { pname = "Microsoft.DiaSymReader.PortablePdb"; version = "1.7.0-beta-21525-03"; sha256 = "0jb70rjgdif61jjc93pysfrr52hi5jlfmjdaqic7s0a3rfg0ahyk"; url = "https://pkgs.dev.azure.com/dnceng/9ee6d478-d288-47f7-aacc-f6e6d082ae6d/_packaging/d1622942-d16f-48e5-bc83-96f4539e7601/nuget/v3/flat2/microsoft.diasymreader.portablepdb/1.7.0-beta-21525-03/microsoft.diasymreader.portablepdb.1.7.0-beta-21525-03.nupkg"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.1"; sha256 = "164wycgng4mi9zqi2pnsf1pq6gccbqvw6ib916mqizgjmd8f44pj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.0.0"; sha256 = "1fk2fk2639i7nzy58m9dvpdnzql4vb8yl8vr19r2fp8lmj9w2jr0"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.1.2"; sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.3"; sha256 = "05smkcyxir59rgrmp7d6327vvrlacdgldfxhmyr1azclvga1zfsq"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Composition"; version = "17.1.20"; sha256 = "028bcxrzqc0nng2l7fqqaa0z1k4wc541jfhcdwjvw9f45q6nf3fs"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Composition.Analyzers"; version = "17.1.20"; sha256 = "14fm8j1bvqh0bpfg3x814c1m747q99i4q3xplqb8db7l2xkn3v7a"; })
+  (fetchNuGet { pname = "Microsoft.VisualStudio.Validation"; version = "17.0.34"; sha256 = "09la67gw6xdss3as3ph0ql3b3zhblni2qmkma9gz53kx1hav9ygp"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.0.1"; sha256 = "1n8ap0cmljbqskxpf8fjzn7kh1vvlndsa75k01qig26mbw97k2q7"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.0.0"; sha256 = "1spf4m9pikkc19544p29a47qnhcd885klncahz133hbnyqbkmz9k"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "4.5.0"; sha256 = "0fnkv3ky12227zqg4zshx4kw2mvysq2ppxjibfw02cc3iprv4njq"; })
+  (fetchNuGet { pname = "Mono.Cecil"; version = "0.11.3"; sha256 = "0xcx7pk9y2n1hr15c0l1balzi69kw5gy8dk7sb8jwqyyvm35q4j3"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
+  (fetchNuGet { pname = "NuGet.Client"; version = "4.2.0"; sha256 = "1s34w7yi0xcm0hi9g32xx9njy52hjkh4gbizldvpp48mkki6bfrl"; })
+  (fetchNuGet { pname = "NuGet.Common"; version = "4.2.0"; sha256 = "0j8bk9nkaxcf52az2rxhx27rqn7hs9mmw0p48i0x7g8i9b40wvwc"; })
+  (fetchNuGet { pname = "NuGet.ContentModel"; version = "4.2.0"; sha256 = "1989zmdgwh13zwg9kafapdka6p46i50iw434fb8k22jp6amnwnvm"; })
+  (fetchNuGet { pname = "NuGet.Frameworks"; version = "4.2.0"; sha256 = "0dwzg8kq0fwdjzl00ag969sxakj3brppr4y7k37yx5w1slj7wsb3"; })
+  (fetchNuGet { pname = "NuGet.Packaging"; version = "4.2.0"; sha256 = "1g83ry4x0zlcdcgwd7c8daxig4cx77jics6rlfasy223hyvss8p3"; })
+  (fetchNuGet { pname = "NuGet.Packaging.Core"; version = "4.2.0"; sha256 = "11dpszywsxb12ybx176z2703181xixzhxg3w3rc8ivw699ivsdfk"; })
+  (fetchNuGet { pname = "NuGet.Packaging.Core.Types"; version = "4.2.0"; sha256 = "031gzbs5sqb46c2rbqpybc9bw0i7ilidbbv2k7rdas3300cjp5kj"; })
+  (fetchNuGet { pname = "NuGet.Repositories"; version = "4.2.0"; sha256 = "0w18lj7q85grdd563p429cg0pg8hi9xmsrr4pzskha139vhfq0lp"; })
+  (fetchNuGet { pname = "NuGet.RuntimeModel"; version = "4.2.0"; sha256 = "0k59ww2zk56bsqici62zn59h19wp4ai9v395hy5mq6wl6mz6qaax"; })
+  (fetchNuGet { pname = "NuGet.Versioning"; version = "4.2.0"; sha256 = "1mx7b4hgdhl6g7yzp3lknmkxkyfjw372nxpsmvdznwhg214iz2d3"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
+  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.0.0"; sha256 = "1ppk69xk59ggacj9n7g6fyxvzmk1g5p4fkijm0d7xqfkig98qrkf"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography"; version = "4.0.0"; sha256 = "0k57aa2c3b10wl3hfqbgrl7xq7g8hh3a3ir44b31dn5p61iiw3z9"; })
+  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
+  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
+  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "SkiaSharp"; version = "2.88.0-preview.178"; sha256 = "062g14s6b2bixanpwihj3asm3jwvfw15mhvzqv6901afrlgzx4nk"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Linux"; version = "2.88.0-preview.178"; sha256 = "07kga1j51l3l302nvf537zg5clf6rflinjy0xd6i06cmhpkf3ksw"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.macOS"; version = "2.88.0-preview.178"; sha256 = "14p95nxccs6yq4rn2h9zbb60k0232k6349zdpy31jcfr6gc99cgi"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.WebAssembly"; version = "2.88.0-preview.178"; sha256 = "09jmcg5k1vpsal8jfs90mwv0isf2y5wq3h4hd77rv6vffn5ic4sm"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Win32"; version = "2.88.0-preview.178"; sha256 = "0ficil702lv3fvwpngbqh5l85i05l5jafzyh4jprzshr2qbnd8nl"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.4.0"; sha256 = "183f8063w8zqn99pv0ni0nnwh7fgx46qzxamwnans55hhs2l0g19"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.0.12"; sha256 = "07y08kvrzpak873pmyxs129g1ch8l27zmg51pcyj2jvq03n0r0fc"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.5.0"; sha256 = "1d5gjn5afnrf461jlxzawcvihz195gayqpcfbv6dd7pxa9ialn06"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.6.0"; sha256 = "1pbxzdz3pwqyybzv5ff2b7nrc281bhg7hq34w0fn1w3qfgrbwyw2"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.5.0"; sha256 = "1jj6f6g87k0iwsgmg3xmnn67a14mq88np0l1ys5zkxhkvbc8976p"; })
+  (fetchNuGet { pname = "System.ComponentModel.Composition"; version = "6.0.0"; sha256 = "16zfx5mivkkykp76krw8x68izmjf79ldfmn26k9x3m55lmp9i77c"; })
+  (fetchNuGet { pname = "System.Composition"; version = "6.0.0"; sha256 = "1p7hysns39cc24af6dwd4m48bqjsrr3clvi4aws152mh2fgyg50z"; })
+  (fetchNuGet { pname = "System.Composition.AttributedModel"; version = "6.0.0"; sha256 = "1mqrblb0l65hw39d0hnspqcv85didpn4wbiwhfgj4784wzqx2w6k"; })
+  (fetchNuGet { pname = "System.Composition.Convention"; version = "6.0.0"; sha256 = "02km3yb94p1c4s7liyhkmda0g71zm1rc8ijsfmy4bnlkq15xjw3b"; })
+  (fetchNuGet { pname = "System.Composition.Hosting"; version = "6.0.0"; sha256 = "0big5nk8c44rxp6cfykhk7rxvn2cgwa99w6c3v2a36adc3lj36ky"; })
+  (fetchNuGet { pname = "System.Composition.Runtime"; version = "6.0.0"; sha256 = "0vq5ik63yii1784gsa2f2kx9w6xllmm8b8rk0arid1jqdj1nyrlw"; })
+  (fetchNuGet { pname = "System.Composition.TypedParts"; version = "6.0.0"; sha256 = "0y9pq3y60nyrpfy51f576a0qjjdh61mcv8vnik32pm4bz56h9q72"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.Process"; version = "4.1.0"; sha256 = "061lrcs7xribrmq7kab908lww6kn2xn1w3rdc41q189y0jibl19s"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.1.0"; sha256 = "1d2r76v1x610x61ahfpigda89gd13qydz6vbwzhpqlyvq8jj6394"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "4.5.0"; sha256 = "0knqa0zsm91nfr34br8gx5kjqq4v81zdhqkacvs2hzc8nqk0ddhc"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reactive"; version = "5.0.0"; sha256 = "1lafmpnadhiwxyd543kraxa3jfdpm6ipblxrjlibym9b1ykpr5ik"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.7.0"; sha256 = "0l8jpxhpgjlf1nkz5lvp61r4kfdbhr29qi8aapcxn3izd9wd0j8r"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "5.0.0"; sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.7.0"; sha256 = "04qw9km34pmzr2alckb3mqdb4fpqwlvzk59lg8c7jfidghcl4jqq"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.0.1"; sha256 = "0b4i7mncaf8cnai85jv3wnw6hps140cxz8vylv2bik6wyzgvz7bi"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.1"; sha256 = "03ch4d2acf6q037a4njxpll2kkx3dwzlg07yxr4z5m6j1kqgmm27"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.3"; sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.6.0"; sha256 = "0xmzi2gpbmgyfr75p24rqqsba3cmrqgmcv45lsqp5amgrdwd0f0m"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.1"; sha256 = "1bzkwqm1yhvm70yq2bx2s3mqfx2lr01sqsay8cl5n5xcbq07ynf6"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.WindowsRuntime"; version = "4.3.0"; sha256 = "0bpsy91yqm2ryp5y9li8p6yh4yrxcvg9zvm569ifw25rpy67bgp9"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.0.1"; sha256 = "1y308zfvy0l5nrn46mqqr4wb4z1xk758pkk8svbz8b5ij7jnv4nn"; })
+  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.2.0"; sha256 = "148s9g5dgm33ri7dnh19s4lgnlxbpwvrw2jnzllq2kijj4i4vs85"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.0.0"; sha256 = "0a8y1a5wkmpawc787gfmnrnbzdgxmx1a14ax43jf3rj9gxmy3vk4"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.0.0"; sha256 = "0i7cfnwph9a10bm26m538h5xcr8b36jscp9sy1zhgifksxz4yixh"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.7.0"; sha256 = "1a56ls5a9sr3ya0nr086sdpa9qv0abv31dd6fp27maqa9zclqq5d"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Dataflow"; version = "5.0.0"; sha256 = "028fimgwn5j9fv6m547c975a8b90d9qcnb89k5crjyspsnjcqbhy"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.3"; sha256 = "0g7r6hm572ax8v28axrdxz1gnsblg6kszq17g51pj14a5rn2af7i"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Threading.Thread"; version = "4.0.0"; sha256 = "1gxxm5fl36pjjpnx1k688dcw8m9l7nmf802nxis6swdaw8k54jzc"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.0.10"; sha256 = "0fdr61yjcxh5imvyf93n2m3n5g9pp54bnw2l1d2rdl9z6dd31ypx"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.5.0"; sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.1"; sha256 = "15f9vd7r0bxmyv754238bdckfg6sxaa3d4yx71hdzkz9k0mhjcky"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
+  (fetchNuGet { pname = "Tmds.DBus"; version = "0.9.0"; sha256 = "0vvx6sg8lxm23g5jvm5wh2gfs95mv85vd52lkq7d1b89bdczczf3"; })
+]
diff --git a/nixpkgs/pkgs/applications/misc/avalonia-ilspy/remove-broken-sources.patch b/nixpkgs/pkgs/applications/misc/avalonia-ilspy/remove-broken-sources.patch
new file mode 100644
index 000000000000..8fbe5dfc6e6a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/avalonia-ilspy/remove-broken-sources.patch
@@ -0,0 +1,12 @@
+diff --git a/nuget.config b/nuget.config
+index 08b468c..349bb11 100644
+--- a/nuget.config
++++ b/nuget.config
+@@ -3,7 +3,6 @@
+   <packageSources>
+     <clear/>
+     <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
+-    <add key="AvaloniaCI" value="https://www.myget.org/F/avalonia-ci/api/v2" />
+     <add key="dotnet-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" />
+   </packageSources>
+ </configuration>
diff --git a/nixpkgs/pkgs/applications/misc/avell-unofficial-control-center/default.nix b/nixpkgs/pkgs/applications/misc/avell-unofficial-control-center/default.nix
new file mode 100644
index 000000000000..45d4f69075d2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/avell-unofficial-control-center/default.nix
@@ -0,0 +1,26 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "avell-unofficial-control-center";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "rodgomesc";
+    repo = "avell-unofficial-control-center";
+    # https://github.com/rodgomesc/avell-unofficial-control-center/issues/58
+    rev = "e32e243e31223682a95a719bc58141990eef35e6";
+    sha256 = "1qz1kv7p09nxffndzz9jlkzpfx26ppz66f8603zyamjq9dqdmdin";
+  };
+
+  # No tests included
+  doCheck = false;
+
+  propagatedBuildInputs = with python3Packages; [ pyusb elevate ];
+
+  meta = with lib; {
+    homepage = "https://github.com/rodgomesc/avell-unofficial-control-center";
+    description = "Software for controlling RGB keyboard lights on some gaming laptops that use ITE Device(8291) Rev 0.03";
+    license = licenses.mit;
+    maintainers = with maintainers; [ rkitover ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/avizo/default.nix b/nixpkgs/pkgs/applications/misc/avizo/default.nix
new file mode 100644
index 000000000000..59021e92b0d8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/avizo/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, vala
+, gtk3
+, glib
+, gtk-layer-shell
+, dbus
+, dbus-glib
+, librsvg
+, gobject-introspection
+, gdk-pixbuf
+, wrapGAppsHook
+, pamixer
+, brightnessctl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "avizo";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "misterdanb";
+    repo = "avizo";
+    rev = version;
+    sha256 = "sha256-Vj8OrNlAstl0AXTeVAPdEf5JgnAmJwl9s3Jdc0ZiYQc=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config vala gobject-introspection wrapGAppsHook ];
+
+  buildInputs = [ dbus dbus-glib gdk-pixbuf glib gtk-layer-shell gtk3 librsvg ];
+
+  postInstall = ''
+    wrapProgram $out/bin/volumectl --suffix PATH : $out/bin:${lib.makeBinPath ([ pamixer ])}
+    wrapProgram $out/bin/lightctl --suffix PATH : $out/bin:${lib.makeBinPath ([ brightnessctl ])}
+  '';
+
+  meta = with lib; {
+    description = "A neat notification daemon for Wayland";
+    homepage = "https://github.com/misterdanb/avizo";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.berbiche ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/avrdudess/default.nix b/nixpkgs/pkgs/applications/misc/avrdudess/default.nix
new file mode 100644
index 000000000000..af12e6b2f4b8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/avrdudess/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, runtimeShell, fetchurl, unzip, mono, avrdude, gtk2, xdg-utils }:
+
+stdenv.mkDerivation {
+  pname = "avrdudess";
+  version = "2.17";
+
+  src = fetchurl {
+    url = "https://github.com/ZakKemble/AVRDUDESS/releases/download/v2.17/AVRDUDESS-2.17-portable.zip";
+    sha256 = "sha256-TcXXGDs75Q2ew+m2B/p00Y24O5aJQlp+3FcAn7GSVyI=";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  dontUnpack = true;
+  dontInstall = true;
+
+  buildPhase = ''
+    mkdir -p "$out/avrdudess"
+    mkdir -p "$out/bin"
+
+    unzip "$src" -d "$out/avrdudess"
+
+    cat >> "$out/bin/avrdudess" << __EOF__
+    #!${runtimeShell}
+    export LD_LIBRARY_PATH="${lib.makeLibraryPath [gtk2 mono]}"
+    # We need PATH from user env for xdg-open to find its tools, which
+    # typically depend on the currently running desktop environment.
+    export PATH="\$PATH:${lib.makeBinPath [ avrdude xdg-utils ]}"
+
+    # avrdudess must have its resource files in its current working directory
+    cd $out/avrdudess && exec ${mono}/bin/mono "$out/avrdudess/avrdudess.exe" "\$@"
+    __EOF__
+
+    chmod a+x "$out/bin/"*
+  '';
+
+  meta = with lib; {
+    description = "GUI for AVRDUDE (AVR microcontroller programmer)";
+    homepage = "https://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/";
+    changelog = "https://github.com/ZakKemble/AVRDUDESS/blob/v${version}/Changelog.txt";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "avrdudess";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/azuredatastudio/default.nix b/nixpkgs/pkgs/applications/misc/azuredatastudio/default.nix
new file mode 100644
index 000000000000..ff441f672a50
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/azuredatastudio/default.nix
@@ -0,0 +1,198 @@
+{ stdenv
+, lib
+, fetchurl
+, copyDesktopItems
+, makeDesktopItem
+, makeWrapper
+, alsa-lib
+, at-spi2-atk
+, at-spi2-core
+, cairo
+, cups
+, curl
+, dbus
+, expat
+, gdk-pixbuf
+, glib
+, gnutar
+, gtk3
+, icu
+, libdrm
+, libunwind
+, libuuid
+, libxkbcommon
+, mesa
+, nspr
+, nss
+, openssl
+, pango
+, systemd
+, xorg
+, zlib
+}:
+
+# from justinwoo/azuredatastudio-nix
+# https://github.com/justinwoo/azuredatastudio-nix/blob/537c48aa3981cd1a82d5d6e508ab7e7393b3d7c8/default.nix
+
+let
+  desktopItem = makeDesktopItem {
+    name = "azuredatastudio";
+    desktopName = "Azure Data Studio";
+    comment = "Data Management Tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.";
+    genericName = "Text Editor";
+    exec = "azuredatastudio --no-sandbox --unity-launch %F";
+    icon = "azuredatastudio";
+    startupNotify = true;
+    startupWMClass = "azuredatastudio";
+    categories = [ "Utility" "TextEditor" "Development" "IDE" ];
+    mimeTypes = [ "text/plain" "inode/directory" "application/x-azuredatastudio-workspace" ];
+    keywords = [ "azuredatastudio" ];
+    actions.new-empty-window = {
+      name = "New Empty Window";
+      exec = "azuredatastudio --no-sandbox --new-window %F";
+      icon = "azuredatastudio";
+    };
+  };
+
+  urlHandlerDesktopItem = makeDesktopItem {
+    name = "azuredatastudio-url-handler";
+    desktopName = "Azure Data Studio - URL Handler";
+    comment = "Azure Data Studio";
+    genericName = "Text Editor";
+    exec = "azuredatastudio --no-sandbox --open-url %U";
+    icon = "azuredatastudio";
+    startupNotify = true;
+    startupWMClass = "azuredatastudio";
+    categories = [ "Utility" "TextEditor" "Development" "IDE" ];
+    mimeTypes = [ "x-scheme-handler/azuredatastudio" ];
+    keywords = [ "azuredatastudio" ];
+    noDisplay = true;
+  };
+in
+stdenv.mkDerivation rec {
+
+  pname = "azuredatastudio";
+  version = "1.44.1";
+
+  desktopItems = [ desktopItem urlHandlerDesktopItem ];
+
+  src = fetchurl {
+    name = "${pname}-${version}.tar.gz";
+    url = "https://azuredatastudio-update.azurewebsites.net/${version}/linux-x64/stable";
+    sha256 = "sha256-6kEV331kt+/7/uWKZmTTkJX4P06CfxC8Ogq052qlUEg=";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    libuuid
+    at-spi2-core
+    at-spi2-atk
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/pixmaps
+    cp ${targetPath}/resources/app/resources/linux/code.png $out/share/pixmaps/azuredatastudio.png
+
+    runHook postInstall
+  '';
+
+  # change this to azuredatastudio-insiders for insiders releases
+  edition = "azuredatastudio";
+  targetPath = "$out/${edition}";
+
+  unpackPhase = ''
+    mkdir -p ${targetPath}
+    ${gnutar}/bin/tar xf $src --strip 1 -C ${targetPath}
+  '';
+
+  sqltoolsserviceRpath = lib.makeLibraryPath [
+    stdenv.cc.cc
+    libunwind
+    libuuid
+    icu
+    openssl
+    zlib
+    curl
+  ];
+
+  # this will most likely need to be updated when azuredatastudio's version changes
+  sqltoolsservicePath = "${targetPath}/resources/app/extensions/mssql/sqltoolsservice/Linux/4.7.1.6";
+
+  rpath = lib.concatStringsSep ":" [
+    (lib.makeLibraryPath [
+      alsa-lib
+      at-spi2-atk
+      cairo
+      cups
+      dbus
+      expat
+      gdk-pixbuf
+      glib
+      gtk3
+      mesa
+      nss
+      nspr
+      libdrm
+      xorg.libX11
+      xorg.libxcb
+      xorg.libXcomposite
+      xorg.libXdamage
+      xorg.libXext
+      xorg.libXfixes
+      xorg.libXrandr
+      xorg.libxshmfence
+      libxkbcommon
+      xorg.libxkbfile
+      pango
+      stdenv.cc.cc.lib
+      systemd
+    ])
+    targetPath
+    sqltoolsserviceRpath
+  ];
+
+  fixupPhase = ''
+    fix_sqltoolsservice()
+    {
+      mv ${sqltoolsservicePath}/$1 ${sqltoolsservicePath}/$1_old
+      patchelf \
+        --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \
+        ${sqltoolsservicePath}/$1_old
+
+      makeWrapper \
+        ${sqltoolsservicePath}/$1_old \
+        ${sqltoolsservicePath}/$1 \
+        --set LD_LIBRARY_PATH ${sqltoolsserviceRpath}
+    }
+
+    fix_sqltoolsservice MicrosoftSqlToolsServiceLayer
+    fix_sqltoolsservice MicrosoftSqlToolsCredentials
+    fix_sqltoolsservice SqlToolsResourceProviderService
+
+    patchelf \
+      --set-interpreter "${stdenv.cc.bintools.dynamicLinker}" \
+      ${targetPath}/${edition}
+
+    mkdir -p $out/bin
+    makeWrapper \
+      ${targetPath}/bin/${edition} \
+      $out/bin/azuredatastudio \
+      --set LD_LIBRARY_PATH ${rpath}
+  '';
+
+  meta = {
+    maintainers = with lib.maintainers; [ xavierzwirtz ];
+    description = "A data management tool that enables working with SQL Server, Azure SQL DB and SQL DW";
+    homepage = "https://docs.microsoft.com/en-us/sql/azure-data-studio/download-azure-data-studio";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.unfreeRedistributable;
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "azuredatastudio";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bambu-studio/0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.patch b/nixpkgs/pkgs/applications/misc/bambu-studio/0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.patch
new file mode 100644
index 000000000000..15f1bf8f0b59
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bambu-studio/0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.patch
@@ -0,0 +1,34 @@
+From 7eed499898226222a949a792e0400ec10db4a1c9 Mon Sep 17 00:00:00 2001
+From: Zhaofeng Li <hello@zhaofeng.li>
+Date: Tue, 22 Nov 2022 13:00:39 -0700
+Subject: [PATCH] [not for upstream] CMakeLists: Link against webkit2gtk in
+ libslic3r_gui
+
+WebView.cpp uses symbols from webkitgtk directly. Upstream setup
+links wxGTK statically so webkitgtk is already pulled in.
+
+> /nix/store/039g378vc3pc3dvi9dzdlrd0i4q93qwf-binutils-2.39/bin/ld: slic3r/liblibslic3r_gui.a(WebView.cpp.o): undefined reference to symbol 'webkit_web_view_run_javascript_finish'
+> /nix/store/039g378vc3pc3dvi9dzdlrd0i4q93qwf-binutils-2.39/bin/ld: /nix/store/8yvy428jy2nwq4dhmrcs7gj5r27a2pv6-webkitgtk-2.38.2+abi=4.0/lib/libwebkit2gtk-4.0.so.37: error adding symbols: DSO missing from command line
+---
+ src/CMakeLists.txt | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 9c5cb96..e92a0e3 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -175,6 +175,11 @@ if (WIN32)
+     target_link_libraries(BambuStudio_app_gui PRIVATE boost_headeronly)
+ endif ()
+ 
++# We link against webkit2gtk symbols in src/slic3r/GUI/Widgets/WebView.cpp
++if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
++    target_link_libraries(libslic3r_gui "-lwebkit2gtk-4.0")
++endif ()
++
+ # Link the resources dir to where Slic3r GUI expects it
+ set(output_dlls_Release "")
+ set(output_dlls_Debug "")
+-- 
+2.38.1
+
diff --git a/nixpkgs/pkgs/applications/misc/bambu-studio/default.nix b/nixpkgs/pkgs/applications/misc/bambu-studio/default.nix
new file mode 100644
index 000000000000..1455558dcc2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bambu-studio/default.nix
@@ -0,0 +1,175 @@
+{ stdenv
+, lib
+, openexr
+, jemalloc
+, c-blosc
+, binutils
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wrapGAppsHook
+, boost179
+, cereal
+, cgal_5
+, curl
+, dbus
+, eigen
+, expat
+, gcc-unwrapped
+, glew
+, glfw
+, glib
+, glib-networking
+, gmp
+, gstreamer
+, gst-plugins-base
+, gst-plugins-bad
+, gst-plugins-good
+, gtest
+, gtk3
+, hicolor-icon-theme
+, ilmbase
+, libpng
+, mesa
+, mpfr
+, nlopt
+, opencascade-occt
+, openvdb
+, pcre
+, qhull
+, systemd
+, tbb_2021_8
+, webkitgtk
+, wxGTK31
+, xorg
+, fetchpatch
+, withSystemd ? stdenv.isLinux
+}:
+let
+  wxGTK31' = wxGTK31.overrideAttrs (old: {
+    configureFlags = old.configureFlags ++ [
+      # Disable noisy debug dialogs
+      "--enable-debug=no"
+    ];
+  });
+  openvdb_tbb_2021_8 = openvdb.overrideAttrs (old: rec {
+    buildInputs = [ openexr boost179 tbb_2021_8 jemalloc c-blosc ilmbase ];
+  });
+in
+stdenv.mkDerivation rec {
+  pname = "bambu-studio";
+  version = "01.08.04.51";
+
+  src = fetchFromGitHub {
+    owner = "bambulab";
+    repo = "BambuStudio";
+    rev = "v${version}";
+    hash = "sha256-rqD1+3Q4ZUBgS57iCItuLX6ZMP7VQuedaJmgKB1szgs=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    binutils
+    boost179
+    cereal
+    cgal_5
+    curl
+    dbus
+    eigen
+    expat
+    gcc-unwrapped
+    glew
+    glfw
+    glib
+    glib-networking
+    gmp
+    gstreamer
+    gst-plugins-base
+    gst-plugins-bad
+    gst-plugins-good
+    gtk3
+    hicolor-icon-theme
+    ilmbase
+    libpng
+    mesa.osmesa
+    mpfr
+    nlopt
+    opencascade-occt
+    openvdb_tbb_2021_8
+    pcre
+    tbb_2021_8
+    webkitgtk
+    wxGTK31'
+    xorg.libX11
+  ] ++ lib.optionals withSystemd [
+    systemd
+  ] ++ checkInputs;
+
+  patches = [
+    # Fix for webkitgtk linking
+    ./0001-not-for-upstream-CMakeLists-Link-against-webkit2gtk-.patch
+  ];
+
+  doCheck = true;
+  checkInputs = [ gtest ];
+
+  separateDebugInfo = true;
+
+  # The build system uses custom logic - defined in
+  # cmake/modules/FindNLopt.cmake in the package source - for finding the nlopt
+  # library, which doesn't pick up the package in the nix store.  We
+  # additionally need to set the path via the NLOPT environment variable.
+  NLOPT = nlopt;
+
+  # Disable compiler warnings that clutter the build log.
+  # It seems to be a known issue for Eigen:
+  # http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1221
+  NIX_CFLAGS_COMPILE = "-Wno-ignored-attributes";
+
+  # prusa-slicer uses dlopen on `libudev.so` at runtime
+  NIX_LDFLAGS = lib.optionalString withSystemd "-ludev";
+
+  # TODO: macOS
+  prePatch = ''
+    # Since version 2.5.0 of nlopt we need to link to libnlopt, as libnlopt_cxx
+    # now seems to be integrated into the main lib.
+    sed -i 's|nlopt_cxx|nlopt|g' cmake/modules/FindNLopt.cmake
+  '';
+
+  cmakeFlags = [
+    "-DSLIC3R_STATIC=0"
+    "-DSLIC3R_FHS=1"
+    "-DSLIC3R_GTK=3"
+
+    # BambuStudio-specific
+    "-DBBL_RELEASE_TO_PUBLIC=1"
+    "-DBBL_INTERNAL_TESTING=0"
+    "-DDEP_WX_GTK3=ON"
+    "-DSLIC3R_BUILD_TESTS=0"
+    "-DCMAKE_CXX_FLAGS=-DBOOST_LOG_DYN_LINK"
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH : "$out/lib"
+
+      # Fixes intermittent crash
+      # The upstream setup links in glew statically
+      --prefix LD_PRELOAD : "${glew.out}/lib/libGLEW.so"
+    )
+  '';
+
+  meta = with lib; {
+    description = "PC Software for BambuLab's 3D printers";
+    homepage = "https://github.com/bambulab/BambuStudio";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ zhaofengli ];
+    mainProgram = "bambu-studio";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bambu-studio/orca-slicer.nix b/nixpkgs/pkgs/applications/misc/bambu-studio/orca-slicer.nix
new file mode 100644
index 000000000000..251423d24d35
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bambu-studio/orca-slicer.nix
@@ -0,0 +1,24 @@
+{ lib, fetchFromGitHub, makeDesktopItem, bambu-studio }:
+let
+  orca-slicer = bambu-studio.overrideAttrs (finalAttrs: previousAttrs: {
+    version = "1.9.0";
+    pname = "orca-slicer";
+
+    src = fetchFromGitHub {
+      owner = "SoftFever";
+      repo = "OrcaSlicer";
+      rev = "v${finalAttrs.version}";
+      hash = "sha256-v6REKDlFhyW6kEEfpcm8Sjezkh6uLaBusMuVk8n3Ts0=";
+    };
+
+    meta = with lib; {
+      description = "G-code generator for 3D printers (Bambu, Prusa, Voron, VzBot, RatRig, Creality, etc";
+      homepage = "https://github.com/SoftFever/OrcaSlicer";
+      license = licenses.agpl3Only;
+      maintainers = with maintainers; [ zhaofengli ovlach pinpox ];
+      mainProgram = "orca-slicer";
+      platforms = platforms.linux;
+    };
+  });
+in
+orca-slicer
diff --git a/nixpkgs/pkgs/applications/misc/barrier/default.nix b/nixpkgs/pkgs/applications/misc/barrier/default.nix
new file mode 100644
index 000000000000..d02712848b72
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/barrier/default.nix
@@ -0,0 +1,59 @@
+{ lib, fetchFromGitHub, cmake, curl, xorg, avahi, qtbase, mkDerivation,
+  openssl, wrapGAppsHook,
+  avahiWithLibdnssdCompat ? avahi.override { withLibdnssdCompat = true; },
+  fetchpatch
+}:
+
+mkDerivation rec {
+  pname = "barrier";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "debauchee";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-2tHqLF3zS3C4UnOVIZfpcuzaemC9++nC7lXgFnFSfKU=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # This patch can be removed when a new version of barrier (greater than 2.4.0)
+    # is released, which will contain this commit.
+    (fetchpatch {
+      name = "add-missing-cstddef-header.patch";
+      url = "https://github.com/debauchee/barrier/commit/4b12265ae5d324b942698a3177e1d8b1749414d7.patch";
+      sha256 = "sha256-ajMxP7szBFi4h8cMT3qswfa3k/QiJ1FGI3q9fkCFQQk=";
+    })
+  ];
+
+  CXXFLAGS = [
+    # error: 'uint8_t' is not a member of 'std'; did you mean 'wint_t'?
+    "-include cstdint"
+  ];
+
+  buildInputs = [ curl xorg.libX11 xorg.libXext xorg.libXtst avahiWithLibdnssdCompat qtbase ];
+  nativeBuildInputs = [ cmake wrapGAppsHook ];
+
+  postFixup = ''
+    substituteInPlace "$out/share/applications/barrier.desktop" --replace "Exec=barrier" "Exec=$out/bin/barrier"
+  '';
+
+  qtWrapperArgs = [
+    ''--prefix PATH : ${lib.makeBinPath [ openssl ]}''
+  ];
+
+  meta = {
+    description = "Open-source KVM software";
+    longDescription = ''
+      Barrier is KVM software forked from Symless's synergy 1.9 codebase.
+      Synergy was a commercialized reimplementation of the original
+      CosmoSynergy written by Chris Schoeneman.
+    '';
+    homepage = "https://github.com/debauchee/barrier";
+    downloadPage = "https://github.com/debauchee/barrier/releases";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.phryneas ];
+    platforms = lib.platforms.linux;
+    mainProgram = "barrier";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/base16-universal-manager/default.nix b/nixpkgs/pkgs/applications/misc/base16-universal-manager/default.nix
new file mode 100644
index 000000000000..98a255f87398
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/base16-universal-manager/default.nix
@@ -0,0 +1,23 @@
+{ buildGoModule, fetchFromGitHub, lib }:
+
+buildGoModule rec {
+  pname = "base16-universal-manager";
+  version = "1.0";
+
+  src = fetchFromGitHub {
+    owner = "pinpox";
+    repo = "base16-universal-manager";
+    rev = "v${version}";
+    hash = "sha256-9KflJ863j0VeOyu6j6O28VafetRrM8FW818qCvqhaoY=";
+  };
+
+  vendorHash = "sha256-U28OJ5heeiaj3aGAhR6eAXzfvFMehAUcHzyFkZBRK6c=";
+
+  meta = with lib; {
+    description = "A universal manager to set base16 themes for any supported application";
+    homepage = "https://github.com/pinpox/base16-universal-manager";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jo1gi ];
+    mainProgram = "base16-universal-manager";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bashSnippets/default.nix b/nixpkgs/pkgs/applications/misc/bashSnippets/default.nix
new file mode 100644
index 000000000000..cec4e8dd8c91
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bashSnippets/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper
+, curl, python3, bind, iproute2, bc, gitMinimal }:
+let
+  version = "1.23.0";
+  deps = lib.makeBinPath [
+    curl
+    python3
+    bind.dnsutils
+    iproute2
+    bc
+    gitMinimal
+  ];
+in
+stdenv.mkDerivation {
+  pname = "bashSnippets";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "alexanderepstein";
+    repo = "Bash-Snippets";
+    rev = "v${version}";
+    sha256 = "044nxgd3ic2qr6hgq5nymn3dyf5i4s8mv5z4az6jvwlrjnvbg8cp";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postPatch = ''
+    patchShebangs install.sh
+    substituteInPlace install.sh --replace /usr/local "$out"
+  '';
+
+  strictDeps = true;
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p "$out"/bin "$out"/share/man/man1
+    ./install.sh all
+    for file in "$out"/bin/*; do
+      wrapProgram "$file" --prefix PATH : "${deps}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "A collection of small bash scripts for heavy terminal users";
+    homepage = "https://github.com/alexanderepstein/Bash-Snippets";
+    license = licenses.mit;
+    maintainers = with maintainers; [ infinisil ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/batsignal/default.nix b/nixpkgs/pkgs/applications/misc/batsignal/default.nix
new file mode 100644
index 000000000000..94a1a45fe107
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/batsignal/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, libnotify, pkg-config, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "batsignal";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "electrickite";
+    repo = "batsignal";
+    rev = version;
+    sha256 = "sha256-yngd2yP6XtRp8y8ZUd0NISdf8+8wJvpLogrQQMdB0lA=";
+  };
+
+  buildInputs = [ libnotify glib ];
+  nativeBuildInputs = [ pkg-config ];
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/electrickite/batsignal";
+    description = "Lightweight battery daemon written in C";
+    license = licenses.isc;
+    maintainers = with maintainers; [ SlothOfAnarchy ];
+    platforms = platforms.linux;
+    mainProgram = "batsignal";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bazecor/10-dygma.rules b/nixpkgs/pkgs/applications/misc/bazecor/10-dygma.rules
new file mode 100644
index 000000000000..6805e68c0644
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bazecor/10-dygma.rules
@@ -0,0 +1,4 @@
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2201", MODE="0666"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2200", MODE="0666"
+SUBSYSTEMS=="usb", ATTRS{idVendor}=="35ef", MODE="0666"
+KERNEL=="hidraw*", ATTRS{idVendor}=="35ef", MODE="0666"
diff --git a/nixpkgs/pkgs/applications/misc/bazecor/default.nix b/nixpkgs/pkgs/applications/misc/bazecor/default.nix
new file mode 100644
index 000000000000..0767c3c03818
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bazecor/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, appimageTools
+, fetchurl
+}:
+
+appimageTools.wrapAppImage rec {
+  pname = "bazecor";
+  version = "1.3.9";
+
+  src = appimageTools.extract {
+    inherit pname version;
+    src = fetchurl {
+      url = "https://github.com/Dygmalab/Bazecor/releases/download/v${version}/Bazecor-${version}-x64.AppImage";
+      hash = "sha256-qve5xxhhyVej8dPDkZ7QQdeDUmqGO4pHJTykbS4RhAk=";
+    };
+
+    # Workaround for https://github.com/Dygmalab/Bazecor/issues/370
+    postExtract = ''
+      substituteInPlace \
+        $out/usr/lib/bazecor/resources/app/.webpack/main/index.js \
+        --replace \
+          'checkUdev=()=>{try{if(c.default.existsSync(f))return c.default.readFileSync(f,"utf-8").trim()===l.trim()}catch(e){console.error(e)}return!1}' \
+          'checkUdev=()=>{return 1}'
+    '';
+  };
+
+  # also make sure to update the udev rules in ./10-dygma.rules; most recently
+  # taken from
+  # https://github.com/Dygmalab/Bazecor/blob/v1.3.9/src/main/utils/udev.ts#L6
+
+  extraPkgs = p: (appimageTools.defaultFhsEnvArgs.multiPkgs p) ++ [
+    p.glib
+  ];
+
+  # Also expose the udev rules here, so it can be used as:
+  #   services.udev.packages = [ pkgs.bazecor ];
+  # to allow non-root modifications to the keyboards.
+
+  extraInstallCommands = ''
+    mv $out/bin/bazecor-* $out/bin/bazecor
+
+    install -m 444 -D ${src}/Bazecor.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/Bazecor.desktop \
+      --replace 'Exec=Bazecor' 'Exec=bazecor'
+
+    install -m 444 -D ${src}/bazecor.png -t $out/share/pixmaps
+
+    mkdir -p $out/lib/udev/rules.d
+    ln -s --target-directory=$out/lib/udev/rules.d ${./10-dygma.rules}
+  '';
+
+  meta = {
+    description = "Graphical configurator for Dygma Products";
+    homepage = "https://github.com/Dygmalab/Bazecor";
+    changelog = "https://github.com/Dygmalab/Bazecor/releases/tag/v${version}";
+    sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ amesgen ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "bazecor";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bb/default.nix b/nixpkgs/pkgs/applications/misc/bb/default.nix
new file mode 100644
index 000000000000..89a0d75fc2b5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bb/default.nix
@@ -0,0 +1,33 @@
+{ stdenv, lib, fetchurl, darwin, aalib, ncurses, xorg, libmikmod }:
+
+stdenv.mkDerivation rec {
+  pname = "bb";
+  version = "1.3rc1";
+
+  src = fetchurl {
+    url    = "mirror://sourceforge/aa-project/bb/${version}/${pname}-${version}.tar.gz";
+    sha256 = "1i411glxh7g4pfg4gw826lpwngi89yrbmxac8jmnsfvrfb48hgbr";
+  };
+
+  buildInputs = [
+    aalib ncurses libmikmod
+    xorg.libXau xorg.libXdmcp xorg.libX11
+  ] ++ lib.optional stdenv.isDarwin darwin.apple_sdk.frameworks.CoreAudio;
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    sed -i -e '/^#include <malloc.h>$/d' *.c
+  '';
+
+  # error: 'regparm' is not valid on this platform
+  env.NIX_CFLAGS_COMPILE = lib.optionalString (stdenv.isDarwin && stdenv.isAarch64)
+    "-D__STRICT_ANSI__";
+
+  meta = with lib; {
+    homepage    = "http://aa-project.sourceforge.net/bb";
+    description = "AA-lib demo";
+    license     = licenses.gpl2Plus;
+    maintainers = [ maintainers.rnhmjoj ];
+    platforms   = platforms.unix;
+    mainProgram = "bb";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bemenu/default.nix b/nixpkgs/pkgs/applications/misc/bemenu/default.nix
new file mode 100644
index 000000000000..2640cbd154d2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bemenu/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, lib, fetchFromGitHub, fetchpatch, cairo, libxkbcommon
+, pango, fribidi, harfbuzz, pcre, pkg-config, scdoc
+, ncursesSupport ? true, ncurses
+, waylandSupport ? true, wayland, wayland-protocols, wayland-scanner
+, x11Support ? true, xorg
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "bemenu";
+  version = "0.6.17";
+
+  src = fetchFromGitHub {
+    owner = "Cloudef";
+    repo = finalAttrs.pname;
+    rev = finalAttrs.version;
+    sha256 = "sha256-HfA8VtYP8YHMQNXrg3E6IwX7rR3rp/gyE62InsddjZE=";
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [ pkg-config scdoc ]
+    ++ lib.optionals waylandSupport [ wayland-scanner ];
+
+  buildInputs = with lib; [
+    cairo
+    fribidi
+    harfbuzz
+    libxkbcommon
+    pango
+  ] ++ optional ncursesSupport ncurses
+    ++ optionals waylandSupport [ wayland wayland-protocols ]
+    ++ optionals x11Support [
+      xorg.libX11 xorg.libXinerama xorg.libXft
+      xorg.libXdmcp xorg.libpthreadstubs xorg.libxcb
+    ];
+
+  makeFlags = ["PREFIX=$(out)"];
+
+  buildFlags = ["clients"]
+    ++ lib.optional ncursesSupport "curses"
+    ++ lib.optional waylandSupport "wayland"
+    ++ lib.optional x11Support "x11";
+
+  meta = with lib; {
+    homepage = "https://github.com/Cloudef/bemenu";
+    description = "Dynamic menu library and client program inspired by dmenu";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ lheckemann ];
+    mainProgram = "bemenu";
+    platforms = with platforms; linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/bfcal/default.nix b/nixpkgs/pkgs/applications/misc/bfcal/default.nix
new file mode 100644
index 000000000000..695f5bc69b0c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bfcal/default.nix
@@ -0,0 +1,37 @@
+{ stdenv
+, lib
+, fetchFromSourcehut
+, meson
+, ninja
+, pkg-config
+, wrapQtAppsHook
+, qtbase
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bfcal";
+  version = "1.0.1";
+
+  src = fetchFromSourcehut {
+    owner = "~bitfehler";
+    repo = "bfcal";
+    rev = "v${version}";
+    sha256 = "sha256-5xyBU+0XUNFUGgvw7U8YE64zncw6SvPmbJhc1LY2u/g=";
+  };
+
+  nativeBuildInputs = [
+    meson ninja pkg-config wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+  ];
+
+  meta = with lib; {
+    description = "Quickly display a calendar";
+    homepage = "https://git.sr.ht/~bitfehler/bfcal";
+    license = licenses.gpl3Plus;
+    platforms = qtbase.meta.platforms;
+    maintainers = with maintainers; [ laalsaas ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bibletime/default.nix b/nixpkgs/pkgs/applications/misc/bibletime/default.nix
new file mode 100644
index 000000000000..f5b027a9b2de
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bibletime/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, docbook_xml_dtd_45
+, pkg-config
+, wrapQtAppsHook
+, boost
+, clucene_core_2
+, docbook_xsl_ns
+, perlPackages
+, qtbase
+, qtsvg
+, qttools
+, sword
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "bibletime";
+  version = "3.0.3";
+
+  src = fetchFromGitHub {
+    owner = "bibletime";
+    repo = finalAttrs.pname;
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-4O8F5/EyoJFJBEWOAs9lzN3TKuu/CEdKfPaOF8gNqps=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    docbook_xml_dtd_45
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    boost
+    clucene_core_2
+    perlPackages.Po4a
+    qtbase
+    qtsvg
+    qttools
+    sword
+  ];
+
+  preConfigure = ''
+    export CLUCENE_HOME=${clucene_core_2};
+    export SWORD_HOME=${sword};
+  '';
+
+  cmakeFlags = [
+    "-DBUILD_HOWTO_PDF=OFF"
+    "-DBUILD_HANDBOOK_PDF=OFF"
+    "-DBT_DOCBOOK_XSL_HTML_CHUNK_XSL=${docbook_xsl_ns}/share/xml/docbook-xsl-ns/html/chunk.xsl"
+    "-DBT_DOCBOOK_XSL_PDF_DOCBOOK_XSL=${docbook_xsl_ns}/share/xml/docbook-xsl-ns/html/chunk.xsl"
+  ];
+
+  meta = with lib; {
+    homepage = "http://www.bibletime.info/";
+    description = "A powerful cross platform Bible study tool";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/bicon/default.nix b/nixpkgs/pkgs/applications/misc/bicon/default.nix
new file mode 100644
index 000000000000..dfb424ea9da5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bicon/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoreconfHook
+, pkg-config
+, perl
+, fribidi
+, kbd
+, xkbutils
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bicon";
+  version = "unstable-2020-06-04";
+
+  src = fetchFromGitHub {
+    owner = "behdad";
+    repo = pname;
+    rev = "64ae10c94b94a573735a2c2b1502334b86d3b1f7";
+    sha256 = "0ixsf65j4dbdl2aazjc2j0hiagbp6svvfwfmyivha0i1k5yx12v1";
+  };
+
+  patches = [
+    # Fix build on clang-13. Pull the change pending upstream
+    # inclusion: https://github.com/behdad/bicon/pull/29
+    (fetchpatch {
+      name = "clang.patch";
+      url = "https://github.com/behdad/bicon/commit/20f5a79571f222f96e07d7c0c5e76e2c9ff1c59a.patch";
+      sha256 = "0l1dm7w52k57nv3lvz5pkbwp021mlsk3csyalxi90np1lx5sqbd1";
+    })
+  ];
+
+  buildInputs = [ fribidi kbd xkbutils perl ];
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  preConfigure = ''
+    patchShebangs .
+  '';
+
+  meta = with lib; {
+    description = "A bidirectional console";
+    homepage =  "https://github.com/behdad/bicon";
+    license = [ licenses.lgpl21 licenses.psfl licenses.bsd0 ];
+    maintainers = [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bikeshed/default.nix b/nixpkgs/pkgs/applications/misc/bikeshed/default.nix
new file mode 100644
index 000000000000..f3e58b778718
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bikeshed/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+# build inputs
+, aiofiles
+, aiohttp
+, attrs
+, certifi
+, cssselect
+, html5lib
+, isodate
+, json-home-client
+, lxml
+, pillow
+, pygments
+, requests
+, result
+, setuptools
+, tenacity
+, widlparser
+}:
+
+buildPythonApplication rec {
+  pname = "bikeshed";
+  version = "3.7.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-3fVo+B71SsJs+XF4+FWH2nz0ouTnpC/02fXYr1C9Jrk=";
+  };
+
+  # Relax requirements from "==" to ">="
+  # https://github.com/tabatkins/bikeshed/issues/2178
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace "==" ">="
+  '';
+
+  propagatedBuildInputs = [
+    aiofiles
+    aiohttp
+    attrs
+    certifi
+    cssselect
+    html5lib
+    isodate
+    json-home-client
+    lxml
+    pillow
+    pygments
+    requests
+    result
+    setuptools
+    tenacity
+    widlparser
+  ];
+
+  checkPhase = ''
+    $out/bin/bikeshed test
+  '';
+
+  pythonImportsCheck = [ "bikeshed" ];
+
+  meta = with lib; {
+    description = "Preprocessor for anyone writing specifications that converts source files into actual specs";
+    longDescription = ''
+      Bikeshed is a pre-processor for spec documents, turning a source document
+      (containing only the actual spec content, plus several shorthands for linking
+      to terms and other things) into a final spec document, with appropriate boilerplate,
+      bibliography, indexes, etc all filled in. It's used on specs for CSS
+      and many other W3C working groups, WHATWG, the C++ standards committee, and elsewhere!
+    '';
+    homepage = "https://tabatkins.github.io/bikeshed/";
+    license = licenses.cc0;
+    maintainers = [];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/binocle/default.nix b/nixpkgs/pkgs/applications/misc/binocle/default.nix
new file mode 100644
index 000000000000..02b1b4c7b5d5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/binocle/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, makeWrapper
+, AppKit
+, CoreFoundation
+, CoreGraphics
+, CoreVideo
+, Foundation
+, Metal
+, QuartzCore
+, xorg
+, vulkan-loader
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "binocle";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-WAk7xIrCRfVofn4w+gP5E3wnSZbXm/6MZWlNmtoLm20=";
+  };
+
+  cargoHash = "sha256-ZmY88WcoQiDLSXkBbnE/+jPX713qh6n+nyNXeWWTBKA=";
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    AppKit CoreFoundation CoreGraphics CoreVideo Foundation Metal QuartzCore
+  ];
+
+  postInstall = lib.optionalString (!stdenv.isDarwin) ''
+    wrapProgram $out/bin/binocle \
+      --suffix LD_LIBRARY_PATH : ${lib.makeLibraryPath (with xorg; [ libX11 libXcursor libXi libXrandr ] ++ [ vulkan-loader ])}
+  '';
+
+  meta = with lib; {
+    description = "Graphical tool to visualize binary data";
+    homepage = "https://github.com/sharkdp/binocle";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/birdtray/default.nix b/nixpkgs/pkgs/applications/misc/birdtray/default.nix
new file mode 100644
index 000000000000..4865f9f29eda
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/birdtray/default.nix
@@ -0,0 +1,39 @@
+{ mkDerivation
+  , lib
+  , fetchFromGitHub
+
+  , cmake
+  , pkg-config
+  , qtbase
+  , qttools
+  , qtx11extras
+}:
+
+mkDerivation rec {
+  pname = "birdtray";
+  version = "1.11.4";
+
+  src = fetchFromGitHub {
+    owner = "gyunaev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-rj8tPzZzgW0hXmq8c1LiunIX1tO/tGAaqDGJgCQda5M=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [
+    qtbase qttools qtx11extras
+  ];
+
+  # Wayland support is broken.
+  # https://github.com/gyunaev/birdtray/issues/113#issuecomment-621742315
+  qtWrapperArgs = [ "--set QT_QPA_PLATFORM xcb" ];
+
+  meta = with lib; {
+    description = "Mail system tray notification icon for Thunderbird";
+    homepage = "https://github.com/gyunaev/birdtray";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ Flakebi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bitwarden-menu/default.nix b/nixpkgs/pkgs/applications/misc/bitwarden-menu/default.nix
new file mode 100644
index 000000000000..d6c7faab4da5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bitwarden-menu/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, pynput
+, xdg
+}:
+
+buildPythonApplication rec {
+  pname = "bitwarden-menu";
+  version = "0.4.1";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-OC+MHEiUU6bDT2wSSDtu0KnwDwBpbLTBta0xjfuzlOI=";
+  };
+
+  propagatedBuildInputs = [
+    pynput
+    xdg
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    changelog = "https://github.com/firecat53/bitwarden-menu/releases/tag/v${version}";
+    description = "Dmenu/Rofi frontend for managing Bitwarden vaults. Uses the Bitwarden CLI tool to interact with the Bitwarden database.";
+    homepage = "https://github.com/firecat53/bitwarden-menu";
+    license = licenses.mit;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bklk/default.nix b/nixpkgs/pkgs/applications/misc/bklk/default.nix
new file mode 100644
index 000000000000..a62eed5f8e1b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bklk/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "bklk";
+  version = "unstable-2020-12-29";
+
+  src = fetchFromGitHub {
+    owner = "Ruunyox";
+    repo = pname;
+    rev = "26f3420aa5726e152a745278ddb98dc99c0a935e";
+    sha256 = "sha256-R3H6tv6fzQG41Y2rui0K8fdQ/+Ywnc5hqTPFjktrhF8=";
+  };
+
+  makeFlags = [ "CC=$$CXX" ];
+
+  buildInputs = [ ncurses ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bklk $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Ncurses Binary Clock";
+    longDescription = "bklk is a simple binary clock for your terminal.";
+    homepage = "https://github.com/Ruunyox/bklk";
+    license = licenses.mit;
+    maintainers = with maintainers; [ j0hax ];
+    platforms = platforms.all;
+    mainProgram = "bklk";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bleachbit/default.nix b/nixpkgs/pkgs/applications/misc/bleachbit/default.nix
new file mode 100644
index 000000000000..c6e4adf8a560
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bleachbit/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, python3Packages
+, fetchurl
+, gettext
+, gobject-introspection
+, wrapGAppsHook
+, glib
+, gtk3
+, libnotify
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "bleachbit";
+  version = "4.4.0";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.bz2";
+    sha256 = "0kqqfzq6bh03n7kxb9vd483bqi1cklfvj35a7h4iqk96sq1xv8z6";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    libnotify
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    chardet
+    pygobject3
+    requests
+  ];
+
+  # Patch the many hardcoded uses of /usr/share/ and /usr/bin
+  postPatch = ''
+    find -type f -exec sed -i -e 's@/usr/share@${placeholder "out"}/share@g' {} \;
+    find -type f -exec sed -i -e 's@/usr/bin@${placeholder "out"}/bin@g' {} \;
+    find -type f -exec sed -i -e 's@${placeholder "out"}/bin/python3@${python3Packages.python}/bin/python3@' {} \;
+  '';
+
+  dontBuild = true;
+
+  installFlags = [
+    "prefix=${placeholder "out"}"
+  ];
+
+  # Prevent double wrapping from wrapGApps and wrapPythonProgram
+  dontWrapGApps = true;
+  makeWrapperArgs = [
+    "\${gappsWrapperArgs[@]}"
+  ];
+
+  strictDeps = false;
+
+  meta = with lib; {
+    homepage = "http://bleachbit.sourceforge.net";
+    description = "A program to clean your computer";
+    longDescription = "BleachBit helps you easily clean your computer to free space and maintain privacy.";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ leonardoce mbprtpmnr ];
+    mainProgram = "bleachbit";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/blender/darwin.patch b/nixpkgs/pkgs/applications/misc/blender/darwin.patch
new file mode 100644
index 000000000000..c86aa2444602
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blender/darwin.patch
@@ -0,0 +1,80 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1894,7 +1894,7 @@ if(WITH_COMPILER_SHORT_FILE_MACRO)
+   ADD_CHECK_CXX_COMPILER_FLAG(CXX_PREFIX_MAP_FLAGS CXX_MACRO_PREFIX_MAP -fmacro-prefix-map=foo=bar)
+   if(C_MACRO_PREFIX_MAP AND CXX_MACRO_PREFIX_MAP)
+     if(APPLE)
+-      if(XCODE AND ${XCODE_VERSION} VERSION_LESS 12.0)
++      if(FALSE)
+       # Developers may have say LLVM Clang-10.0.1 toolchain (which supports the flag)
+       # with Xcode-11 (the Clang of which doesn't support the flag).
+         message(WARNING
+diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
+--- a/build_files/cmake/platform/platform_apple.cmake
++++ b/build_files/cmake/platform/platform_apple.cmake
+@@ -60,7 +60,6 @@ else()
+   message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
+ endif()
+ if(NOT EXISTS "${LIBDIR}/")
+-  message(FATAL_ERROR "Mac OSX requires pre-compiled libs at: '${LIBDIR}'")
+ endif()
+ 
+ # Prefer lib directory paths
+@@ -98,10 +97,6 @@ if(WITH_CODEC_SNDFILE)
+   find_library(_sndfile_VORBIS_LIBRARY NAMES vorbis HINTS ${LIBDIR}/ffmpeg/lib)
+   find_library(_sndfile_VORBISENC_LIBRARY NAMES vorbisenc HINTS ${LIBDIR}/ffmpeg/lib)
+   list(APPEND LIBSNDFILE_LIBRARIES
+-    ${_sndfile_FLAC_LIBRARY}
+-    ${_sndfile_OGG_LIBRARY}
+-    ${_sndfile_VORBIS_LIBRARY}
+-    ${_sndfile_VORBISENC_LIBRARY}
+   )
+ 
+   print_found_status("SndFile libraries" "${LIBSNDFILE_LIBRARIES}")
+@@ -118,7 +113,7 @@ if(WITH_PYTHON)
+     # Normally cached but not since we include them with blender.
+     set(PYTHON_INCLUDE_DIR "${LIBDIR}/python/include/python${PYTHON_VERSION}")
+     set(PYTHON_EXECUTABLE "${LIBDIR}/python/bin/python${PYTHON_VERSION}")
+-    set(PYTHON_LIBRARY ${LIBDIR}/python/lib/libpython${PYTHON_VERSION}.a)
++    set(PYTHON_LIBRARY ${LIBDIR}/python/lib/libpython${PYTHON_VERSION}.dylib)
+     set(PYTHON_LIBPATH "${LIBDIR}/python/lib/python${PYTHON_VERSION}")
+   else()
+     # Module must be compiled against Python framework.
+@@ -147,7 +142,7 @@ endif()
+ 
+ # FreeType compiled with Brotli compression for woff2.
+ find_package(Freetype REQUIRED)
+-list(APPEND FREETYPE_LIBRARIES
++message(TRACE APPEND FREETYPE_LIBRARIES
+   ${LIBDIR}/brotli/lib/libbrotlicommon-static.a
+   ${LIBDIR}/brotli/lib/libbrotlidec-static.a)
+ 
+@@ -159,9 +154,7 @@ if(WITH_CODEC_FFMPEG)
+   set(FFMPEG_ROOT_DIR ${LIBDIR}/ffmpeg)
+   set(FFMPEG_FIND_COMPONENTS
+     avcodec avdevice avformat avutil
+-    mp3lame ogg opus swresample swscale
+-    theora theoradec theoraenc vorbis vorbisenc
+-    vorbisfile vpx x264 xvidcore)
++    swresample swscale)
+   if(EXISTS ${LIBDIR}/ffmpeg/lib/libaom.a)
+     list(APPEND FFMPEG_FIND_COMPONENTS aom)
+   endif()
+@@ -273,7 +266,6 @@ if(WITH_BOOST)
+ endif()
+ 
+ if(WITH_INTERNATIONAL OR WITH_CODEC_FFMPEG)
+-  string(APPEND PLATFORM_LINKFLAGS " -liconv") # boost_locale and ffmpeg needs it !
+ endif()
+ 
+ if(WITH_PUGIXML)
+@@ -402,7 +394,7 @@ endif()
+ 
+ # CMake FindOpenMP doesn't know about AppleClang before 3.12, so provide custom flags.
+ if(WITH_OPENMP)
+-  if(CMAKE_C_COMPILER_ID MATCHES "Clang")
++  if(FALSE)
+     # Use OpenMP from our precompiled libraries.
+     message(STATUS "Using ${LIBDIR}/openmp for OpenMP")
+     set(OPENMP_CUSTOM ON)
diff --git a/nixpkgs/pkgs/applications/misc/blender/default.nix b/nixpkgs/pkgs/applications/misc/blender/default.nix
new file mode 100644
index 000000000000..ec1f11617321
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blender/default.nix
@@ -0,0 +1,259 @@
+{ config, stdenv, lib, fetchurl, fetchzip, fetchpatch, boost, cmake, ffmpeg, gettext, glew
+, libepoxy, libXi, libX11, libXext, libXrender
+, libjpeg, libpng, libsamplerate, libsndfile
+, libtiff, libwebp, libGLU, libGL, openal, opencolorio, openexr, openimagedenoise, openimageio, openjpeg, python310Packages
+, openvdb, libXxf86vm, tbb, alembic
+, zlib, zstd, fftw, fftwFloat, opensubdiv, freetype, jemalloc, ocl-icd, addOpenGLRunpath
+, jackaudioSupport ? false, libjack2
+, cudaSupport ? config.cudaSupport, cudaPackages ? { }
+, hipSupport ? false, rocmPackages # comes with a significantly larger closure size
+, colladaSupport ? true, opencollada
+, spaceNavSupport ? stdenv.isLinux, libspnav
+, makeWrapper
+, pugixml, llvmPackages, SDL, Cocoa, CoreGraphics, ForceFeedback, OpenAL, OpenGL
+, waylandSupport ? stdenv.isLinux, pkg-config, wayland, wayland-protocols, libffi, libdecor, libxkbcommon, dbus
+, potrace
+, openxr-loader
+, embree, gmp, libharu
+, openpgl
+, mesa
+, runCommand
+, callPackage
+}:
+
+let
+  pythonPackages = python310Packages;
+  inherit (pythonPackages) python;
+  buildEnv = callPackage ./wrapper.nix {};
+  optix = fetchzip {
+    # url taken from the archlinux blender PKGBUILD
+    url = "https://developer.download.nvidia.com/redist/optix/v7.3/OptiX-7.3.0-Include.zip";
+    sha256 = "0max1j4822mchj0xpz9lqzh91zkmvsn4py0r174cvqfz8z8ykjk8";
+  };
+  libdecor' = libdecor.overrideAttrs (old: {
+    # Blender uses private APIs, need to patch to expose them
+    patches = (old.patches or [ ]) ++ [ ./libdecor.patch ];
+  });
+
+in
+stdenv.mkDerivation (finalAttrs: rec {
+  pname = "blender";
+  version = "4.0.2";
+
+  src = fetchurl {
+    url = "https://download.blender.org/source/${pname}-${version}.tar.xz";
+    hash = "sha256-qqDnKdp1kc+/RXcq92NFl32qp7EaCvNdmPkxPiRgd6M=";
+  };
+
+  patches = [
+    ./draco.patch
+    (fetchpatch {
+      url = "https://projects.blender.org/blender/blender/commit/cf4365e555a759d5b3225bce77858374cb07faad.diff";
+      hash = "sha256-Nypd04yFSHYa7RBa8kNmoApqJrU4qpaOle3tkj44d4g=";
+    })
+  ] ++ lib.optional stdenv.isDarwin ./darwin.patch;
+
+  nativeBuildInputs =
+    [ cmake makeWrapper python310Packages.wrapPython llvmPackages.llvm.dev
+    ]
+    ++ lib.optionals cudaSupport [
+      addOpenGLRunpath
+      cudaPackages.cuda_nvcc
+    ]
+    ++ lib.optionals waylandSupport [ pkg-config ];
+  buildInputs =
+    [ boost ffmpeg gettext glew
+      freetype libjpeg libpng libsamplerate libsndfile libtiff libwebp
+      opencolorio openexr openimageio openjpeg python zlib zstd fftw fftwFloat jemalloc
+      alembic
+      (opensubdiv.override { inherit cudaSupport; })
+      tbb
+      gmp
+      pugixml
+      potrace
+      libharu
+      libepoxy
+      openpgl
+    ]
+    ++ lib.optionals waylandSupport [
+      wayland wayland-protocols libffi libdecor' libxkbcommon dbus
+    ]
+    ++ lib.optionals (!stdenv.isAarch64) [
+      openimagedenoise
+      embree
+    ]
+    ++ (if (!stdenv.isDarwin) then [
+      libXi libX11 libXext libXrender
+      libGLU libGL openal
+      libXxf86vm
+      openxr-loader
+      # OpenVDB currently doesn't build on darwin
+      openvdb
+    ]
+    else [
+      llvmPackages.openmp SDL Cocoa CoreGraphics ForceFeedback OpenAL OpenGL
+    ])
+    ++ lib.optional jackaudioSupport libjack2
+    ++ lib.optionals cudaSupport [ cudaPackages.cuda_cudart ]
+    ++ lib.optional colladaSupport opencollada
+    ++ lib.optional spaceNavSupport libspnav;
+  pythonPath = with python310Packages; [ numpy requests zstandard ];
+
+  postPatch = ''
+  '' +
+    (if stdenv.isDarwin then ''
+      : > build_files/cmake/platform/platform_apple_xcode.cmake
+      substituteInPlace source/creator/CMakeLists.txt \
+        --replace '${"$"}{LIBDIR}/python' \
+                  '${python}'
+      substituteInPlace build_files/cmake/platform/platform_apple.cmake \
+        --replace '${"$"}{LIBDIR}/python' \
+                  '${python}' \
+        --replace '${"$"}{LIBDIR}/opencollada' \
+                  '${opencollada}' \
+        --replace '${"$"}{PYTHON_LIBPATH}/site-packages/numpy' \
+                  '${python310Packages.numpy}/${python.sitePackages}/numpy'
+    '' else ''
+      substituteInPlace extern/clew/src/clew.c --replace '"libOpenCL.so"' '"${ocl-icd}/lib/libOpenCL.so"'
+    '') +
+    (lib.optionalString hipSupport ''
+      substituteInPlace extern/hipew/src/hipew.c --replace '"/opt/rocm/hip/lib/libamdhip64.so"' '"${rocmPackages.clr}/lib/libamdhip64.so"'
+      substituteInPlace extern/hipew/src/hipew.c --replace '"opt/rocm/hip/bin"' '"${rocmPackages.clr}/bin"'
+    '');
+
+  cmakeFlags =
+    [
+      "-DWITH_ALEMBIC=ON"
+      # Blender supplies its own FindAlembic.cmake (incompatible with the Alembic-supplied config file)
+      "-DALEMBIC_INCLUDE_DIR=${lib.getDev alembic}/include"
+      "-DALEMBIC_LIBRARY=${lib.getLib alembic}/lib/libAlembic.so"
+      "-DWITH_MOD_OCEANSIM=ON"
+      "-DWITH_CODEC_FFMPEG=ON"
+      "-DWITH_CODEC_SNDFILE=ON"
+      "-DWITH_INSTALL_PORTABLE=OFF"
+      "-DWITH_FFTW3=ON"
+      "-DWITH_SDL=OFF"
+      "-DWITH_OPENCOLORIO=ON"
+      "-DWITH_OPENSUBDIV=ON"
+      "-DPYTHON_LIBRARY=${python.libPrefix}"
+      "-DPYTHON_LIBPATH=${python}/lib"
+      "-DPYTHON_INCLUDE_DIR=${python}/include/${python.libPrefix}"
+      "-DPYTHON_VERSION=${python.pythonVersion}"
+      "-DWITH_PYTHON_INSTALL=OFF"
+      "-DWITH_PYTHON_INSTALL_NUMPY=OFF"
+      "-DPYTHON_NUMPY_PATH=${python310Packages.numpy}/${python.sitePackages}"
+      "-DPYTHON_NUMPY_INCLUDE_DIRS=${python310Packages.numpy}/${python.sitePackages}/numpy/core/include"
+      "-DWITH_PYTHON_INSTALL_REQUESTS=OFF"
+      "-DWITH_OPENVDB=ON"
+      "-DWITH_TBB=ON"
+      "-DWITH_IMAGE_OPENJPEG=ON"
+      "-DWITH_OPENCOLLADA=${if colladaSupport then "ON" else "OFF"}"
+    ]
+    ++ lib.optionals waylandSupport [
+      "-DWITH_GHOST_WAYLAND=ON"
+      "-DWITH_GHOST_WAYLAND_DBUS=ON"
+      "-DWITH_GHOST_WAYLAND_DYNLOAD=OFF"
+      "-DWITH_GHOST_WAYLAND_LIBDECOR=ON"
+    ]
+    ++ lib.optionals stdenv.hostPlatform.isAarch64 [
+      "-DWITH_CYCLES_EMBREE=OFF"
+    ]
+    ++ lib.optionals stdenv.isDarwin [
+      "-DWITH_CYCLES_OSL=OFF" # requires LLVM
+      "-DWITH_OPENVDB=OFF" # OpenVDB currently doesn't build on darwin
+
+      "-DLIBDIR=/does-not-exist"
+    ]
+    # Clang doesn't support "-export-dynamic"
+    ++ lib.optional stdenv.cc.isClang "-DPYTHON_LINKFLAGS="
+    ++ lib.optional jackaudioSupport "-DWITH_JACK=ON"
+    ++ lib.optionals cudaSupport [
+      "-DWITH_CYCLES_CUDA_BINARIES=ON"
+      "-DWITH_CYCLES_DEVICE_OPTIX=ON"
+      "-DOPTIX_ROOT_DIR=${optix}"
+    ];
+
+  env.NIX_CFLAGS_COMPILE = "-I${python}/include/${python.libPrefix}";
+
+  # Since some dependencies are built with gcc 6, we need gcc 6's
+  # libstdc++ in our RPATH. Sigh.
+  NIX_LDFLAGS = lib.optionalString cudaSupport "-rpath ${stdenv.cc.cc.lib}/lib";
+
+  blenderExecutable =
+    placeholder "out" + (if stdenv.isDarwin then "/Applications/Blender.app/Contents/MacOS/Blender" else "/bin/blender");
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir $out/Applications
+    mv $out/Blender.app $out/Applications
+  '' + ''
+    mv $out/share/blender/${lib.versions.majorMinor version}/python{,-ext}
+    buildPythonPath "$pythonPath"
+    wrapProgram $blenderExecutable \
+      --prefix PATH : $program_PATH \
+      --prefix PYTHONPATH : "$program_PYTHONPATH" \
+      --add-flags '--python-use-system-env'
+  '';
+
+  # Set RUNPATH so that libcuda and libnvrtc in /run/opengl-driver(-32)/lib can be
+  # found. See the explanation in libglvnd.
+  postFixup = lib.optionalString cudaSupport ''
+    for program in $out/bin/blender $out/bin/.blender-wrapped; do
+      isELF "$program" || continue
+      addOpenGLRunpath "$program"
+    done
+  '';
+
+  passthru = {
+    inherit python pythonPackages;
+
+    withPackages = f: let packages = f pythonPackages; in buildEnv.override { blender = finalAttrs.finalPackage; extraModules = packages; };
+
+    tests = {
+      render = runCommand "${pname}-test" { } ''
+        set -euo pipefail
+
+        export LIBGL_DRIVERS_PATH=${mesa.drivers}/lib/dri
+        export __EGL_VENDOR_LIBRARY_FILENAMES=${mesa.drivers}/share/glvnd/egl_vendor.d/50_mesa.json
+
+        cat <<'PYTHON' > scene-config.py
+        import bpy
+        bpy.context.scene.eevee.taa_render_samples = 32
+        bpy.context.scene.cycles.samples = 32
+        if ${if stdenv.isAarch64 then "True" else "False"}:
+            bpy.context.scene.cycles.use_denoising = False
+        bpy.context.scene.render.resolution_x = 100
+        bpy.context.scene.render.resolution_y = 100
+        bpy.context.scene.render.threads_mode = 'FIXED'
+        bpy.context.scene.render.threads = 1
+        PYTHON
+
+        mkdir $out
+        for engine in BLENDER_EEVEE CYCLES; do
+          echo "Rendering with $engine..."
+          # Beware that argument order matters
+          ${finalAttrs.finalPackage}/bin/blender \
+            --background \
+            -noaudio \
+            --factory-startup \
+            --python-exit-code 1 \
+            --python scene-config.py \
+            --engine "$engine" \
+            --render-output "$out/$engine" \
+            --render-frame 1
+        done
+      '';
+    };
+  };
+
+  meta = with lib; {
+    description = "3D Creation/Animation/Publishing System";
+    homepage = "https://www.blender.org";
+    # They comment two licenses: GPLv2 and Blender License, but they
+    # say: "We've decided to cancel the BL offering for an indefinite period."
+    # OptiX, enabled with cudaSupport, is non-free.
+    license = with licenses; [ gpl2Plus ] ++ optional cudaSupport unfree;
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" ];
+    broken = stdenv.isDarwin;
+    maintainers = with maintainers; [ goibhniu veprbl ];
+    mainProgram = "blender";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/blender/draco.patch b/nixpkgs/pkgs/applications/misc/blender/draco.patch
new file mode 100644
index 000000000000..2a856a0638ae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blender/draco.patch
@@ -0,0 +1,26 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -898,11 +898,6 @@ set_and_warn_dependency(WITH_PYTHON WITH_CYCLES        OFF)
+ set_and_warn_dependency(WITH_PYTHON WITH_DRACO         OFF)
+ set_and_warn_dependency(WITH_PYTHON WITH_MOD_FLUID     OFF)
+ 
+-if(WITH_DRACO AND NOT WITH_PYTHON_INSTALL)
+-  message(STATUS "WITH_DRACO requires WITH_PYTHON_INSTALL to be ON, disabling WITH_DRACO for now")
+-  set(WITH_DRACO OFF)
+-endif()
+-
+ # enable boost for cycles, audaspace or i18n
+ # otherwise if the user disabled
+ 
+--- a/scripts/addons/io_scene_gltf2/io/com/gltf2_io_draco_compression_extension.py
++++ b/scripts/addons/io_scene_gltf2/io/com/gltf2_io_draco_compression_extension.py
+@@ -17,7 +17,7 @@ def dll_path() -> Path:
+     """
+     lib_name = 'extern_draco'
+-    blender_root = Path(bpy.app.binary_path).parent
++    blender_root = Path(bpy.app.binary_path).parent.parent
+-    python_lib = Path('{v[0]}.{v[1]}/python/lib'.format(v=bpy.app.version))
++    python_lib = Path('share/blender/{v[0]}.{v[1]}/python-ext/lib'.format(v=bpy.app.version))
+     python_version = 'python{v[0]}.{v[1]}'.format(v=sys.version_info)
+ 
+     path = os.environ.get('BLENDER_EXTERN_DRACO_LIBRARY_PATH')
diff --git a/nixpkgs/pkgs/applications/misc/blender/fix-include.patch b/nixpkgs/pkgs/applications/misc/blender/fix-include.patch
new file mode 100644
index 000000000000..44e2147d073c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blender/fix-include.patch
@@ -0,0 +1,12 @@
+diff --git a/intern/smoke/intern/WAVELET_NOISE.h b/intern/smoke/intern/WAVELET_NOISE.h
+index fce901b..1f73c5e 100644
+--- a/intern/smoke/intern/WAVELET_NOISE.h
++++ b/intern/smoke/intern/WAVELET_NOISE.h
+@@ -43,6 +43,7 @@
+ #ifndef WAVELET_NOISE_H
+ #define WAVELET_NOISE_H
+ 
++#include <string.h>
+ #include <MERSENNETWISTER.h>
+ 
+ #ifdef WIN32
diff --git a/nixpkgs/pkgs/applications/misc/blender/libdecor.patch b/nixpkgs/pkgs/applications/misc/blender/libdecor.patch
new file mode 100644
index 000000000000..73c32f983cc2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blender/libdecor.patch
@@ -0,0 +1,34 @@
+diff --git a/src/libdecor-plugin.h b/src/libdecor-plugin.h
+index ba80ce6..59199dd 100644
+--- a/src/libdecor-plugin.h
++++ b/src/libdecor-plugin.h
+@@ -132,12 +132,6 @@ struct libdecor_plugin_interface {
+ struct wl_surface *
+ libdecor_frame_get_wl_surface(struct libdecor_frame *frame);
+ 
+-int
+-libdecor_frame_get_content_width(struct libdecor_frame *frame);
+-
+-int
+-libdecor_frame_get_content_height(struct libdecor_frame *frame);
+-
+ enum libdecor_window_state
+ libdecor_frame_get_window_state(struct libdecor_frame *frame);
+ 
+diff --git a/src/libdecor.h b/src/libdecor.h
+index af67e2f..b5eba41 100644
+--- a/src/libdecor.h
++++ b/src/libdecor.h
+@@ -532,6 +532,12 @@ bool
+ libdecor_configuration_get_window_state(struct libdecor_configuration *configuration,
+ 					enum libdecor_window_state *window_state);
+ 
++int
++libdecor_frame_get_content_width(struct libdecor_frame *frame);
++
++int
++libdecor_frame_get_content_height(struct libdecor_frame *frame);
++
+ #ifdef __cplusplus
+ }
+ #endif
diff --git a/nixpkgs/pkgs/applications/misc/blender/wrapper.nix b/nixpkgs/pkgs/applications/misc/blender/wrapper.nix
new file mode 100644
index 000000000000..7450827a8fa9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blender/wrapper.nix
@@ -0,0 +1,29 @@
+{ stdenv
+, lib
+, blender
+, makeWrapper
+, extraModules ? []
+}:
+stdenv.mkDerivation (finalAttrs: {
+  pname = blender.pname + "-wrapped";
+  src = blender;
+
+  inherit (blender) version meta;
+
+  nativeBuildInputs = [ blender.pythonPackages.wrapPython makeWrapper ];
+  installPhase = ''
+    mkdir $out/{share/applications,bin} -p
+    sed 's/Exec=blender/Exec=${finalAttrs.finalPackage.pname}/g' $src/share/applications/blender.desktop > $out/share/applications/${finalAttrs.finalPackage.pname}.desktop
+    cp -r $src/share/blender $out/share
+    cp -r $src/share/doc $out/share
+    cp -r $src/share/icons $out/share
+
+    buildPythonPath "$pythonPath"
+
+    makeWrapper ${blender}/bin/blender $out/bin/${finalAttrs.finalPackage.pname} \
+      --prefix PATH : $program_PATH \
+      --prefix PYTHONPATH : $program_PYTHONPATH
+  '';
+
+  pythonPath = extraModules;
+})
diff --git a/nixpkgs/pkgs/applications/misc/blogc/default.nix b/nixpkgs/pkgs/applications/misc/blogc/default.nix
new file mode 100644
index 000000000000..86d52625dc2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blogc/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, ronn, git, cmocka }:
+
+stdenv.mkDerivation rec {
+  pname = "blogc";
+  version = "0.20.1";
+
+  src = fetchFromGitHub {
+    owner = "blogc";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-YAwGgV5Vllz8JlIASbGIkdRzpciQbgPiXl5DjiSEJyE=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ ronn git cmocka ];
+
+  configureFlags = [
+    "--enable-git-receiver"
+    "--enable-make"
+    "--enable-runserver"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A blog compiler";
+    license = licenses.bsd3;
+    homepage = "https://blogc.rgm.io";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bloodhound/default.nix b/nixpkgs/pkgs/applications/misc/bloodhound/default.nix
new file mode 100644
index 000000000000..175b293c9d88
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bloodhound/default.nix
@@ -0,0 +1,127 @@
+{ lib
+, stdenv
+, fetchzip
+, makeWrapper
+, alsa-lib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, cairo
+, cups
+, dbus
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gtk3
+, libGL
+, libappindicator-gtk3
+, libdrm
+, libnotify
+, libpulseaudio
+, libuuid
+, libxcb
+, libxkbcommon
+, libxshmfence
+, mesa
+, nspr
+, nss
+, pango
+, systemd
+, udev
+, unzip
+, xdg-utils
+, xorg
+}:
+stdenv.mkDerivation (finalAttrs: {
+  pname = "bloodhound";
+  version = "4.3.1";
+
+  src = fetchzip {
+    url = "https://github.com/BloodHoundAD/BloodHound/releases/download/v${finalAttrs.version}/BloodHound-linux-x64.zip";
+    hash = "sha256-gGfZ5Mj8rmz3dwKyOitRExkgOmSVDOqKpPxvGlE4izw=";
+  };
+
+  rpath = lib.makeLibraryPath [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gtk3
+    libGL
+    libappindicator-gtk3
+    libdrm
+    libnotify
+    libpulseaudio
+    libuuid
+    libxcb
+    libxkbcommon
+    mesa
+    nspr
+    nss
+    pango
+    systemd
+    stdenv.cc.cc.lib
+    udev
+    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
+  ];
+
+  buildInputs = [
+    gtk3 # needed for GSETTINGS_SCHEMAS_PATH
+  ];
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/{bin,/lib/BloodHound}
+    mv * $out/lib/BloodHound
+    chmod +x $out/lib/BloodHound/BloodHound
+
+    patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \
+       $out/lib/BloodHound/BloodHound --set-rpath ${finalAttrs.rpath}:$out/lib/BloodHound \
+       --add-needed libudev.so # Needed to fix trace trap (core dump)
+
+    makeWrapper $out/lib/BloodHound/BloodHound $out/bin/BloodHound \
+      --prefix XDG_DATA_DIRS : $GSETTINGS_SCHEMAS_PATH \
+      --suffix PATH : ${lib.makeBinPath [xdg-utils]} \
+      --append-flags "--in-process-gpu" # fix for sandbox issues
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Active Directory reconnaissance and attack path management tool";
+    homepage = "https://github.com/BloodHoundAD/BloodHound";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    changelog = "https://github.com/BloodHoundAD/BloodHound/releases/tag/v${finalAttrs.version}";
+    downloadPage = "https://github.com/BloodHoundAD/BloodHound/releases";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ akechishiro ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "BloodHound";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/blucontrol/wrapper.nix b/nixpkgs/pkgs/applications/misc/blucontrol/wrapper.nix
new file mode 100644
index 000000000000..c0c76b4ef49d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blucontrol/wrapper.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, makeWrapper, ghcWithPackages, packages ? (_:[]) }:
+let
+  blucontrolEnv = ghcWithPackages (self: [ self.blucontrol ] ++ packages self);
+in
+  stdenv.mkDerivation {
+    pname = "blucontrol-with-packages";
+    version = blucontrolEnv.version;
+
+    nativeBuildInputs = [ makeWrapper ];
+
+    buildCommand = ''
+      makeWrapper ${blucontrolEnv}/bin/blucontrol $out/bin/blucontrol \
+        --prefix PATH : ${lib.makeBinPath [ blucontrolEnv ]}
+    '';
+
+    # trivial derivation
+    preferLocalBuild = true;
+    allowSubstitues = false;
+
+    meta = with lib; {
+      description = "Configurable blue light filter";
+      longDescription = ''
+        This application is a blue light filter, with the main focus on configurability.
+        Configuration is done in Haskell in the style of xmonad.
+        Blucontrol makes use of monad transformers and allows monadic calculation of gamma values and recoloring. The user chooses, what will be captured in the monadic state.
+      '';
+      license = licenses.bsd3;
+      homepage = "https://github.com/jumper149/blucontrol";
+      platforms = platforms.unix;
+      maintainers = with maintainers; [ jumper149 ];
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/misc/bluetooth_battery/default.nix b/nixpkgs/pkgs/applications/misc/bluetooth_battery/default.nix
new file mode 100644
index 000000000000..d9c3f5bc2a43
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bluetooth_battery/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitHub, buildPythonApplication, pybluez }:
+
+buildPythonApplication rec {
+  pname = "bluetooth_battery";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "TheWeirdDev";
+    repo = "Bluetooth_Headset_Battery_Level";
+    rev = "v${version}";
+    sha256 = "067qfxh228cy1x95bnjp88dx4k00ajj7ay7fz5vr1gkj2yfa203s";
+  };
+
+  propagatedBuildInputs = [ pybluez ];
+
+  format = "other";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp $src/bluetooth_battery.py $out/bin/bluetooth_battery
+  '';
+
+  meta = with lib; {
+    description = "Fetch the battery charge level of some Bluetooth headsets";
+    homepage = "https://github.com/TheWeirdDev/Bluetooth_Headset_Battery_Level";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ cheriimoya ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/blugon/default.nix b/nixpkgs/pkgs/applications/misc/blugon/default.nix
new file mode 100644
index 000000000000..5aab73ef1467
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/blugon/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, python3, libX11, libXrandr }:
+
+stdenv.mkDerivation rec {
+  pname = "blugon";
+  version = "1.12.1";
+
+  src = fetchFromGitHub {
+    owner = "jumper149";
+    repo = pname;
+    rev = version;
+    sha256 = "1i67v8jxvavgax3dwvns200iwwdcvgki04liq0x64q52lg0vrh7m";
+  };
+
+  buildInputs = [ python3 libX11 libXrandr ];
+
+  # Remove at next release
+  # https://github.com/jumper149/blugon/commit/d262cd05
+  postPatch = ''
+    sed -i 's,CC = gcc,CC ?= gcc,g' backends/scg/Makefile
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Simple and configurable Blue Light Filter for X";
+    longDescription = ''
+      blugon is a simple and fast Blue Light Filter, that is highly configurable and provides a command line interface.
+      The program can be run just once or as a daemon (manually or via systemd).
+      There are several different backends available.
+      blugon calculates the screen color from your local time and configuration.
+    '';
+    license = licenses.asl20;
+    homepage = "https://github.com/jumper149/blugon";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jumper149 ];
+    mainProgram = "blugon";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/boatswain/default.nix b/nixpkgs/pkgs/applications/misc/boatswain/default.nix
new file mode 100644
index 000000000000..62912798b535
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/boatswain/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, gtk4
+, libgee
+, libadwaita
+, wrapGAppsHook4
+, appstream-glib
+, desktop-file-utils
+, libpeas
+, libportal-gtk4
+, gusb
+, hidapi
+, json-glib
+, libsecret
+, libsoup_3
+, libpeas2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "boatswain";
+  version = "0.4.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = "boatswain";
+    rev = version;
+    hash = "sha256-Yqf7NJMyE6mg1zJJCLrIr6Emwt/nvlLHLAEtCXqFT8M=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+    appstream-glib
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    gtk4
+    libadwaita
+    libgee
+    libpeas
+    libportal-gtk4
+    gusb
+    hidapi
+    json-glib
+    libsecret
+    libsoup_3
+    libpeas2
+  ];
+
+  meta = with lib; {
+    description = "Control Elgato Stream Deck devices.";
+    homepage = "https://gitlab.gnome.org/World/boatswain";
+    mainProgram = "boatswain";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ _0xMRTT ];
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bottles/default.nix b/nixpkgs/pkgs/applications/misc/bottles/default.nix
new file mode 100644
index 000000000000..eb0c6a841425
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bottles/default.nix
@@ -0,0 +1,114 @@
+{ lib
+, fetchFromGitHub
+, gitUpdater
+, python3Packages
+, blueprint-compiler
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook4
+, appstream-glib
+, desktop-file-utils
+, librsvg
+, gtk4
+, gtksourceview5
+, libadwaita
+, cabextract
+, p7zip
+, xdpyinfo
+, imagemagick
+, lsb-release
+, pciutils
+, procps
+, gamescope
+, mangohud
+, vkbasalt-cli
+, vmtouch
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "bottles-unwrapped";
+  version = "51.9";
+
+  src = fetchFromGitHub {
+    owner = "bottlesdevs";
+    repo = "bottles";
+    rev = version;
+    sha256 = "sha256-iZUszwVcbVn6Xsqou6crSp9gJBRmm5vEqxS87h/s3PQ=";
+  };
+
+  patches = [
+    ./vulkan_icd.patch
+  ];
+
+  # https://github.com/bottlesdevs/Bottles/wiki/Packaging
+  nativeBuildInputs = [
+    blueprint-compiler
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+    gtk4 # gtk4-update-icon-cache
+    appstream-glib
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    librsvg
+    gtk4
+    gtksourceview5
+    libadwaita
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pathvalidate
+    pycurl
+    pyyaml
+    requests
+    pygobject3
+    patool
+    markdown
+    fvs
+    pefile
+    urllib3
+    chardet
+    certifi
+    idna
+    orjson
+    icoextract
+  ] ++ [
+    cabextract
+    p7zip
+    xdpyinfo
+    imagemagick
+    vkbasalt-cli
+
+    gamescope
+    mangohud
+    vmtouch
+
+    # Undocumented (subprocess.Popen())
+    lsb-release
+    pciutils
+    procps
+  ];
+
+  format = "other";
+  dontWrapGApps = true; # prevent double wrapping
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = with lib; {
+    description = "An easy-to-use wineprefix manager";
+    homepage = "https://usebottles.com/";
+    downloadPage = "https://github.com/bottlesdevs/Bottles/releases";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ psydvl shamilton ];
+    platforms = platforms.linux;
+    mainProgram = "bottles";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/bottles/fhsenv.nix b/nixpkgs/pkgs/applications/misc/bottles/fhsenv.nix
new file mode 100644
index 000000000000..fd0d38f69892
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bottles/fhsenv.nix
@@ -0,0 +1,112 @@
+{ buildFHSEnv
+, symlinkJoin
+, bottles-unwrapped
+, extraPkgs ? pkgs: [ ]
+, extraLibraries ? pkgs: [ ]
+}:
+
+let fhsEnv = {
+  # Many WINE games need 32bit
+  multiArch = true;
+
+  targetPkgs = pkgs: with pkgs; [
+    bottles-unwrapped
+    # This only allows to enable the toggle, vkBasalt won't work if not installed with environment.systemPackages (or nix-env)
+    # See https://github.com/bottlesdevs/Bottles/issues/2401
+    vkbasalt
+  ] ++ extraPkgs pkgs;
+
+  multiPkgs =
+    let
+      xorgDeps = pkgs: with pkgs.xorg; [
+        libpthreadstubs
+        libSM
+        libX11
+        libXaw
+        libxcb
+        libXcomposite
+        libXcursor
+        libXdmcp
+        libXext
+        libXi
+        libXinerama
+        libXmu
+        libXrandr
+        libXrender
+        libXv
+        libXxf86vm
+      ];
+      gstreamerDeps = pkgs: with pkgs.gst_all_1; [
+        gstreamer
+        gst-plugins-base
+        gst-plugins-good
+        gst-plugins-ugly
+        gst-plugins-bad
+        gst-libav
+      ];
+    in
+    pkgs: with pkgs; [
+      # https://wiki.winehq.org/Building_Wine
+      alsa-lib
+      cups
+      dbus
+      fontconfig
+      freetype
+      glib
+      gnutls
+      libglvnd
+      gsm
+      libgphoto2
+      libjpeg_turbo
+      libkrb5
+      libpcap
+      libpng
+      libpulseaudio
+      libtiff
+      libunwind
+      libusb1
+      libv4l
+      libxml2
+      mpg123
+      ocl-icd
+      openldap
+      samba4
+      sane-backends
+      SDL2
+      udev
+      vulkan-loader
+
+      # https://www.gloriouseggroll.tv/how-to-get-out-of-wine-dependency-hell/
+      alsa-plugins
+      dosbox
+      giflib
+      gtk3
+      libva
+      libxslt
+      ncurses
+      openal
+
+      # Steam runtime
+      libgcrypt
+      libgpg-error
+      p11-kit
+      zlib # Freetype
+    ] ++ xorgDeps pkgs
+    ++ gstreamerDeps pkgs
+    ++ extraLibraries pkgs;
+};
+in
+symlinkJoin {
+  name = "bottles";
+  paths = [
+    (buildFHSEnv (fhsEnv // { name = "bottles"; runScript = "bottles"; }))
+    (buildFHSEnv (fhsEnv // { name = "bottles-cli"; runScript = "bottles-cli"; }))
+  ];
+  postBuild = ''
+    mkdir -p $out/share
+    ln -s ${bottles-unwrapped}/share/applications $out/share
+    ln -s ${bottles-unwrapped}/share/icons $out/share
+  '';
+
+  inherit (bottles-unwrapped) meta;
+}
diff --git a/nixpkgs/pkgs/applications/misc/bottles/vulkan_icd.patch b/nixpkgs/pkgs/applications/misc/bottles/vulkan_icd.patch
new file mode 100644
index 000000000000..ff376e136bb2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/bottles/vulkan_icd.patch
@@ -0,0 +1,15 @@
+diff --git a/bottles/backend/utils/vulkan.py b/bottles/backend/utils/vulkan.py
+index 6673493..9191004 100644
+--- a/bottles/backend/utils/vulkan.py
++++ b/bottles/backend/utils/vulkan.py
+@@ -28,7 +28,9 @@ class VulkanUtils:
+         "/usr/share/vulkan",
+         "/etc/vulkan",
+         "/usr/local/share/vulkan",
+-        "/usr/local/etc/vulkan"
++        "/usr/local/etc/vulkan",
++        "/run/opengl-driver/share/vulkan",
++        "/run/opengl-driver-32/share/vulkan",
+     ]
+     if "FLATPAK_ID" in os.environ:
+         __vk_icd_dirs += [
diff --git a/nixpkgs/pkgs/applications/misc/break-time/Cargo.lock b/nixpkgs/pkgs/applications/misc/break-time/Cargo.lock
new file mode 100644
index 000000000000..fd1bc29723cf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/break-time/Cargo.lock
@@ -0,0 +1,1621 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[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 = "antidote"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34fde25430d87a9388dadbe6e34d7f72a462c8b43ac8d309b42b0a8505d7e2a5"
+
+[[package]]
+name = "atk"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "444daefa55f229af145ea58d77efd23725024ee1f6f3102743709aa6b18c663e"
+dependencies = [
+ "atk-sys",
+ "bitflags",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e552c1776737a4c80110d06b36d099f47c727335f9aaa5d942a72b6863a8ec6f"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[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.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 = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "break-time"
+version = "0.1.2"
+dependencies = [
+ "byteorder",
+ "cairo-rs",
+ "chrono",
+ "gdk",
+ "gdk-pixbuf",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "google-calendar3",
+ "gtk",
+ "gtk-sys",
+ "hyper",
+ "hyper-rustls",
+ "indoc",
+ "pango",
+ "serde",
+ "serde_json",
+ "structopt",
+ "toml",
+ "xcb",
+ "xdg",
+ "yup-oauth2",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c6ed94e98ecff0c12dd1b04c15ec0d7d9458ca8fe806cea6f12954efe74c63b"
+
+[[package]]
+name = "byteorder"
+version = "1.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
+
+[[package]]
+name = "cairo-rs"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "157049ba9618aa3a61c39d5d785102c04d3b1f40632a706c621a9aedc21e6084"
+dependencies = [
+ "bitflags",
+ "cairo-sys-rs",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff65ba02cac715be836f63429ab00a767d48336efc5497c5637afb53b4f14d63"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[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 = "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 = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "ansi_term",
+ "atty",
+ "bitflags",
+ "strsim",
+ "textwrap",
+ "unicode-width",
+ "vec_map",
+]
+
+[[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 = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[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 = "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 = "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.15",
+]
+
+[[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 = "gdk"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbe5e8772fc0865c52460cdd7a59d7d47700f44d9809d1dd00eecceb769a7589"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "cairo-sys-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e248220c46b329b097d4b158d2717f8c688f16dd76d0399ace82b3e98062bdd7"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8991b060a9e9161bafd09bf4a202e6fd404f5b4dd1a08d53a1e84256fb34ab0"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6adf679e91d1bff0c06860287f80403e7db54c2d2424dce0a470023b56c88fbb"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "gio"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0cd10f9415cce39b53f8024bf39a21f84f8157afa52da53837b102e585a296a5"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fad225242b9eae7ec8a063bb86974aca56885014672375e5775dc0ea3533911"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "glib"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40fb573a09841b6386ddf15fd4bc6655b4f5b106ca962f57ecaecde32a0061c0"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "futures-util",
+ "glib-sys",
+ "gobject-sys",
+ "lazy_static",
+ "libc",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95856f3802f446c05feffa5e24859fe6a183a7cb849c8449afc35c86b1e316e2"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31d1a804f62034eccf370006ccaef3708a71c31d561fee88564abe71177553d9"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "google-calendar3"
+version = "1.0.14+20200705"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f214b09a7438ccd85fe20a491c8d7c05d0ccd07a125112411aadf0f0d0b17cbb"
+dependencies = [
+ "hyper",
+ "mime",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "url",
+ "yup-oauth2",
+]
+
+[[package]]
+name = "gtk"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87e1e8d70290239c668594002d1b174fcc7d7ef5d26670ee141490ede8facf8f"
+dependencies = [
+ "atk",
+ "bitflags",
+ "cairo-rs",
+ "cairo-sys-rs",
+ "cc",
+ "gdk",
+ "gdk-pixbuf",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "lazy_static",
+ "libc",
+ "pango",
+ "pango-sys",
+]
+
+[[package]]
+name = "gtk-sys"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53def660c7b48b00b510c81ef2d2fbd3c570f1527081d8d7947f471513e1a4c1"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[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 = "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 = "httparse"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+
+[[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",
+ "num_cpus",
+ "time",
+ "traitobject",
+ "typeable",
+ "unicase",
+ "url",
+]
+
+[[package]]
+name = "hyper-native-tls"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d375598f442742b0e66208ee12501391f1c7ac0bafb90b4fe53018f81f06068"
+dependencies = [
+ "antidote",
+ "hyper",
+ "native-tls",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71f7b2e5858ab9e19771dc361159f09ee5031734a6f7471fe0947db0238d92b7"
+dependencies = [
+ "hyper",
+ "rustls",
+ "webpki",
+ "webpki-roots",
+]
+
+[[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 = "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 = "indoc"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47741a8bc60fb26eb8d6e0238bbb26d8575ff623fdc97b1a2c00c050b9684ed8"
+dependencies = [
+ "indoc-impl",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "indoc-impl"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce046d161f000fffde5f432a0d034d0341dc152643b2598ed5bfce44c4f3a8f0"
+dependencies = [
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "unindent",
+]
+
+[[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-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 = "itertools"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
+dependencies = [
+ "either",
+]
+
+[[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.62"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68c16e1bfd491478ab155fd8b4896b86f9ede344949b641e61501e07c2b8b4d5"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "language-tags"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a91d884b6667cd606bb5a69aa0c99ba811a115fc68915e7056ec08a46e93199a"
+
+[[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 = "linux-raw-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ece97ea872ece730aed82664c424eb4c8291e1ff2480247ccf7409044bc6479f"
+
+[[package]]
+name = "log"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e19e8d5c34a3e0e2223db8e060f9e8264aeeb5c5fc64a4ee9965c062211c024b"
+dependencies = [
+ "log 0.4.17",
+]
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[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 = "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.17",
+ "openssl",
+ "openssl-probe",
+ "openssl-sys",
+ "schannel",
+ "security-framework",
+ "security-framework-sys",
+ "tempfile",
+]
+
+[[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.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 = "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.15",
+]
+
+[[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.87"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e17f59264b2809d77ae94f0e1ebabc434773f370d6ca667bd223ea10e06cc7e"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "pango"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e9c6b728f1be8edb5f9f981420b651d5ea30bdb9de89f1f1262d0084a020577"
+dependencies = [
+ "bitflags",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "lazy_static",
+ "libc",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86b93d84907b3cf0819bff8f13598ba72843bee579d5ebc2502e4b0367b4be7d"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
+
+[[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 = "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-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.56"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4f29d145265ec1c483c7c654450edde0bfe043d3938d6972630663356d9500"
+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",
+]
+
+[[package]]
+name = "ring"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c4db68a2e35f3497146b7e4563df7d4773a2433230c5e4b448328e31740458a"
+dependencies = [
+ "cc",
+ "lazy_static",
+ "libc",
+ "untrusted",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustls"
+version = "0.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "942b71057b31981152970d57399c25f72e27a6ee0d207a669d8304cabf44705b"
+dependencies = [
+ "base64 0.9.3",
+ "log 0.4.17",
+ "ring",
+ "sct",
+ "untrusted",
+ "webpki",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "safemem"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072"
+
+[[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 = "sct"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb8f61f9e6eadd062a71c380043d28036304a4706b3c4dd001ff3387ed00745a"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "security-framework"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2855b3715770894e67cbfa3df957790aa0c9edc3bf06efa1a84d77fa0839d1"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
+[[package]]
+name = "security-framework-sys"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[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.15",
+]
+
+[[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 = "slab"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap",
+ "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",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a34fcf3e8b60f57e6a14301a2e916d323af98b0ea63c599441eec8558660c822"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[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",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[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.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
+dependencies = [
+ "libc",
+ "wasi",
+ "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 = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "traitobject"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079"
+
+[[package]]
+name = "typeable"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1410f6f91f21d1612654e7cc69193b0334f909dcf2c790c4826254fbb86f8887"
+
+[[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 = "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.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-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 = "unindent"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c"
+
+[[package]]
+name = "untrusted"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55cd1f4b4e96b46aeb8d4855db4a7a9bd96eeeb5c6a1ab54593328761642ce2f"
+
+[[package]]
+name = "url"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
+dependencies = [
+ "idna",
+ "matches",
+ "percent-encoding",
+]
+
+[[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.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 = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b6cb788c4e39112fbe1822277ef6fb3c55cd86b95cb3d3c4c1c9597e4ac74b4"
+dependencies = [
+ "cfg-if",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35e522ed4105a9d626d885b35d62501b30d9666283a5c8be12c14a8bdafe7822"
+dependencies = [
+ "bumpalo",
+ "log 0.4.17",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "358a79a0cb89d21db8120cbfb91392335913e4890665b1a7981d9e956903b434"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4783ce29f09b9d93134d41297aded3a712b7b979e9c6f28c32cb88c973a94869"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.15",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a901d592cafaa4d711bc324edfaff879ac700b19c3dfd60058d2b445be2691eb"
+
+[[package]]
+name = "webpki"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17d7967316d8411ca3b01821ee6c332bde138ba4363becdb492f12e514daa17f"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85d1f408918fd590908a70d36b7ac388db2edc221470333e4d6e5b598e44cabf"
+dependencies = [
+ "untrusted",
+ "webpki",
+]
+
+[[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 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 = "xcb"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62056f63138b39116f82a540c983cc11f1c90cd70b3d492a70c25eaa50bd22a6"
+dependencies = [
+ "libc",
+ "log 0.4.17",
+]
+
+[[package]]
+name = "xdg"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "688597db5a750e9cad4511cb94729a078e274308099a0382b5b8203bbc767fee"
+dependencies = [
+ "home",
+]
+
+[[package]]
+name = "yup-oauth2"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "add0ccdddbb13a69ba8f7c4738bd6af551425889cc4633b6f8cb3034bb359b07"
+dependencies = [
+ "base64 0.10.1",
+ "chrono",
+ "hyper",
+ "hyper-native-tls",
+ "itertools",
+ "log 0.3.9",
+ "openssl",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "url",
+]
diff --git a/nixpkgs/pkgs/applications/misc/break-time/default.nix b/nixpkgs/pkgs/applications/misc/break-time/default.nix
new file mode 100644
index 000000000000..e72f08fd381e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/break-time/default.nix
@@ -0,0 +1,52 @@
+{ fetchFromGitHub
+, glib
+, gtk3
+, openssl
+, pkg-config
+, python3
+, rustPlatform
+, lib
+, wrapGAppsHook
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "break-time";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "cdepillabout";
+    repo  = "break-time";
+    rev = "v${version}";
+    sha256 = "sha256-q79JXaBwd/oKtJPvK2+72pY2YvaR3of2CMC8cF6wwQ8=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    python3 # needed for Rust xcb package
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    openssl
+  ];
+
+  # update Cargo.lock to work with openssl
+  postPatch = ''
+    ln -sf ${./Cargo.lock} Cargo.lock
+  '';
+
+  meta = with lib; {
+    description = "Break timer that forces you to take a break";
+    homepage    = "https://github.com/cdepillabout/break-time";
+    license     = with licenses; [ mit ];
+    maintainers = with maintainers; [ cdepillabout ];
+    platforms   = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/brewtarget/default.nix b/nixpkgs/pkgs/applications/misc/brewtarget/default.nix
new file mode 100644
index 000000000000..13a5681ebd37
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/brewtarget/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, bash
+, cmake
+, boost
+, xercesc
+, xalanc
+, qtbase
+, qttools
+, qtmultimedia
+, qtsvg
+}:
+
+mkDerivation rec {
+  pname = "brewtarget";
+  version = "3.0.5";
+
+  src = fetchFromGitHub {
+    owner = "Brewtarget";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PqaiZ2eLH8+qRRkIolnQClTL9O9EgHMqFH/nUffosV8=";
+  };
+
+  nativeBuildInputs = [ cmake boost xercesc xalanc ];
+  buildInputs = [ qtbase qttools qtmultimedia qtsvg ];
+
+  preConfigure = ''
+    chmod +x configure
+    substituteInPlace configure --replace /bin/bash "${bash}/bin/bash"
+  '';
+
+  meta = with lib; {
+    description = "Open source beer recipe creation tool";
+    homepage = "http://www.brewtarget.org/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.mmahut ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/buku/default.nix b/nixpkgs/pkgs/applications/misc/buku/default.nix
new file mode 100644
index 000000000000..ddf2b9f528da
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/buku/default.nix
@@ -0,0 +1,86 @@
+{ lib, python3, fetchFromGitHub, withServer ? false }:
+
+let
+  serverRequire = with python3.pkgs; [
+    requests
+    flask
+    flask-admin
+    flask-api
+    flask-bootstrap
+    flask-paginate
+    flask-wtf
+    arrow
+    werkzeug
+    click
+    vcrpy
+    toml
+  ];
+in
+with python3.pkgs; buildPythonApplication rec {
+  version = "4.8";
+  pname = "buku";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "jarun";
+    repo = "buku";
+    rev = "v${version}";
+    sha256 = "sha256-kPVlfTYUusf5CZnKB53WZcCHo3MEnA2bLUHTRPGPn+8=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+  ];
+
+  nativeCheckInputs = [
+    hypothesis
+    pytest
+    pytest-recording
+    pyyaml
+    mypy-extensions
+    click
+    pylint
+    flake8
+    pytest-cov
+    pyyaml
+  ];
+
+  propagatedBuildInputs = [
+    cryptography
+    beautifulsoup4
+    certifi
+    urllib3
+    html5lib
+  ] ++ lib.optionals withServer serverRequire;
+
+  preCheck = ''
+    # Disables a test which requires internet
+    substituteInPlace tests/test_bukuDb.py \
+      --replace "@pytest.mark.slowtest" "@unittest.skip('skipping')" \
+      --replace "self.assertEqual(shorturl, \"http://tny.im/yt\")" "" \
+      --replace "self.assertEqual(url, \"https://www.google.com\")" ""
+    substituteInPlace setup.py \
+      --replace mypy-extensions==0.4.1 mypy-extensions>=0.4.1
+  '' + lib.optionalString (!withServer) ''
+    rm tests/test_{server,views}.py
+  '';
+
+  postInstall = ''
+    make install PREFIX=$out
+
+    mkdir -p $out/share/zsh/site-functions $out/share/bash-completion/completions $out/share/fish/vendor_completions.d
+    cp auto-completion/zsh/* $out/share/zsh/site-functions
+    cp auto-completion/bash/* $out/share/bash-completion/completions
+    cp auto-completion/fish/* $out/share/fish/vendor_completions.d
+  '' + lib.optionalString (!withServer) ''
+    rm $out/bin/bukuserver
+  '';
+
+  meta = with lib; {
+    description = "Private cmdline bookmark manager";
+    homepage = "https://github.com/jarun/Buku";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ matthiasbeyer infinisil ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/caerbannog/default.nix b/nixpkgs/pkgs/applications/misc/caerbannog/default.nix
new file mode 100644
index 000000000000..2825b371e06d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/caerbannog/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, fetchFromSourcehut
+, python3
+, glib
+, gobject-introspection
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+, gtk3
+, atk
+, libhandy
+, libnotify
+, pango
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "caerbannog";
+  version = "0.3";
+  format = "other";
+
+  src = fetchFromSourcehut {
+    owner = "~craftyguy";
+    repo = "caerbannog";
+    rev = version;
+    sha256 = "0wqkb9zcllxm3fdsr5lphknkzy8r1cr80f84q200hbi99qql1dxh";
+  };
+
+  nativeBuildInputs = [
+    glib
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    atk
+    libhandy
+    libnotify
+    pango
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    anytree
+    fuzzyfinder
+    gpgme
+    pygobject3
+  ];
+
+  meta = with lib; {
+    description = "Mobile-friendly Gtk frontend for password-store";
+    homepage = "https://sr.ht/~craftyguy/caerbannog/";
+    changelog = "https://git.sr.ht/~craftyguy/caerbannog/refs/${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/calcoo/default.nix b/nixpkgs/pkgs/applications/misc/calcoo/default.nix
new file mode 100644
index 000000000000..5f90b4bb2363
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/calcoo/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchzip
+, ant
+, canonicalize-jars-hook
+, jdk
+, makeWrapper
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "calcoo";
+  version = "2.1.0";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/calcoo/calcoo-${finalAttrs.version}.zip";
+    hash = "sha256-Bdavj7RaI5CkWiOJY+TPRIRfNelfW5qdl/74J1KZPI0=";
+  };
+
+  nativeBuildInputs = [
+    ant
+    canonicalize-jars-hook
+    jdk
+    makeWrapper
+  ];
+
+  dontConfigure = true;
+
+  env.JAVA_TOOL_OPTIONS = "-Dfile.encoding=iso-8859-1";
+
+  buildPhase = ''
+    runHook preBuild
+    ant
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm644 dist/lib/calcoo.jar -t $out/share/calcoo
+
+    makeWrapper ${jdk}/bin/java $out/bin/calcoo \
+        --add-flags "-jar $out/share/calcoo/calcoo.jar"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    changelog = "https://calcoo.sourceforge.net/changelog.html";
+    description = "RPN and algebraic scientific calculator";
+    homepage = "https://calcoo.sourceforge.net/";
+    license = lib.licenses.gpl2Plus;
+    mainProgram = "calcoo";
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    inherit (jdk.meta) platforms;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/calcure/default.nix b/nixpkgs/pkgs/applications/misc/calcure/default.nix
new file mode 100644
index 000000000000..dcd2c62d2185
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/calcure/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "calcure";
+  version = "3.0.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "anufrievroman";
+    repo = "calcure";
+    rev = "refs/tags/${version}";
+    hash = "sha256-rs3TCZjMndeh2N7e+U62baLs+XqWK1Mk7KVnypSnWPg=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    holidays
+    icalendar
+    jdatetime
+    taskw
+  ];
+
+  pythonImportsCheck = [
+    "calcure"
+  ];
+
+  meta = with lib; {
+    description = "Modern TUI calendar and task manager with minimal and customizable UI";
+    homepage = "https://github.com/anufrievroman/calcure";
+    changelog = "https://github.com/anufrievroman/calcure/releases/tag/${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/calcurse/default.nix b/nixpkgs/pkgs/applications/misc/calcurse/default.nix
new file mode 100644
index 000000000000..07faa52710df
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/calcurse/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, ncurses, gettext, python3, python3Packages, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "calcurse";
+  version = "4.8.1";
+
+  src = fetchurl {
+    url = "https://calcurse.org/files/${pname}-${version}.tar.gz";
+    hash = "sha256-2GuzcBT9abjYPMuQSsl5xrjd9Z7j28gPWidFJeTVgwo=";
+  };
+
+  buildInputs = [ ncurses gettext python3 python3Packages.wrapPython ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    patchShebangs .
+    buildPythonPath "${python3Packages.httplib2} ${python3Packages.oauth2client}"
+    patchPythonScript $out/bin/calcurse-caldav
+  '';
+
+  meta = with lib; {
+    description = "A calendar and scheduling application for the command line";
+    longDescription = ''
+      calcurse is a calendar and scheduling application for the command line. It helps
+      keep track of events, appointments and everyday tasks. A configurable notification
+      system reminds users of upcoming deadlines, the curses based interface can be
+      customized to suit user needs and a very powerful set of command line options can
+      be used to filter and format appointments, making it suitable for use in scripts.
+    '';
+    homepage = "https://calcurse.org/";
+    changelog = "https://git.calcurse.org/calcurse.git/plain/CHANGES.md?h=v${version}";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/calibre/default.nix b/nixpkgs/pkgs/applications/misc/calibre/default.nix
new file mode 100644
index 000000000000..a0966e5555b3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/calibre/default.nix
@@ -0,0 +1,211 @@
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, fetchpatch
+, fontconfig
+, hunspell
+, hyphen
+, icu
+, imagemagick
+, libjpeg
+, libmtp
+, libpng
+, libstemmer
+, libuchardet
+, libusb1
+, pkg-config
+, podofo
+, poppler_utils
+, python3Packages
+, qmake
+, qtbase
+, qtwayland
+, removeReferencesTo
+, speechd
+, sqlite
+, wrapQtAppsHook
+, xdg-utils
+, wrapGAppsHook
+, unrarSupport ? false
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "calibre";
+  version = "7.5.1";
+
+  src = fetchurl {
+    url = "https://download.calibre-ebook.com/${finalAttrs.version}/calibre-${finalAttrs.version}.tar.xz";
+    hash = "sha256-pGo9fWyeX5hpw5YOV05tWy/0YxHShStKN96LMPnqIiA=";
+  };
+
+  patches = [
+    #  allow for plugin update check, but no calibre version check
+    (fetchpatch {
+      name = "0001-only-plugin-update.patch";
+      url = "https://raw.githubusercontent.com/debian-calibre/calibre/debian/${finalAttrs.version}+ds-1/debian/patches/0001-only-plugin-update.patch";
+      hash = "sha256-uL1mSjgCl5ZRLbSuKxJM6XTfvVwog70F7vgKtQzQNEQ=";
+    })
+    (fetchpatch {
+      name = "0007-Hardening-Qt-code.patch";
+      url = "https://raw.githubusercontent.com/debian-calibre/calibre/debian/${finalAttrs.version}+ds-1/debian/patches/hardening/0007-Hardening-Qt-code.patch";
+      hash = "sha256-a6yyG0RUsQJBBNxeJsTtQSBV2lxdzz1hnTob88O+SKg=";
+    })
+  ]
+  ++ lib.optional (!unrarSupport) ./dont_build_unrar_plugin.patch;
+
+  prePatch = ''
+    sed -i "s@\[tool.sip.project\]@[tool.sip.project]\nsip-include-dirs = [\"${python3Packages.pyqt6}/${python3Packages.python.sitePackages}/PyQt6/bindings\"]@g" \
+      setup/build.py
+
+    # Remove unneeded files and libs
+    rm -rf src/odf resources/calibre-portable.*
+  '';
+
+  dontUseQmakeConfigure = true;
+  dontUseCmakeConfigure = true;
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    qmake
+    removeReferencesTo
+    wrapGAppsHook
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    fontconfig
+    hunspell
+    hyphen
+    icu
+    imagemagick
+    libjpeg
+    libmtp
+    libpng
+    libstemmer
+    libuchardet
+    libusb1
+    podofo
+    poppler_utils
+    qtbase
+    qtwayland
+    sqlite
+    xdg-utils
+  ] ++ (
+    with python3Packages; [
+      (apsw.overrideAttrs (oldAttrs: {
+        setupPyBuildFlags = [ "--enable=load_extension" ];
+      }))
+      beautifulsoup4
+      css-parser
+      cssselect
+      python-dateutil
+      dnspython
+      faust-cchardet
+      feedparser
+      html2text
+      html5-parser
+      lxml
+      markdown
+      mechanize
+      msgpack
+      netifaces
+      pillow
+      pychm
+      pyqt-builder
+      pyqt6
+      python
+      regex
+      sip
+      setuptools
+      speechd
+      zeroconf
+      jeepney
+      pycryptodome
+      xxhash
+      # the following are distributed with calibre, but we use upstream instead
+      odfpy
+    ] ++ lib.optionals (lib.lists.any (p: p == stdenv.hostPlatform.system) pyqt6-webengine.meta.platforms) [
+      # much of calibre's functionality is usable without a web
+      # browser, so we enable building on platforms which qtwebengine
+      # does not support by simply omitting qtwebengine.
+      pyqt6-webengine
+    ] ++ lib.optional (unrarSupport) unrardll
+  );
+
+  installPhase = ''
+    runHook preInstall
+
+    export HOME=$TMPDIR/fakehome
+    export POPPLER_INC_DIR=${poppler_utils.dev}/include/poppler
+    export POPPLER_LIB_DIR=${poppler_utils.out}/lib
+    export MAGICK_INC=${imagemagick.dev}/include/ImageMagick
+    export MAGICK_LIB=${imagemagick.out}/lib
+    export FC_INC_DIR=${fontconfig.dev}/include/fontconfig
+    export FC_LIB_DIR=${fontconfig.lib}/lib
+    export PODOFO_INC_DIR=${podofo.dev}/include/podofo
+    export PODOFO_LIB_DIR=${podofo.lib}/lib
+    export XDG_DATA_HOME=$out/share
+    export XDG_UTILS_INSTALL_MODE="user"
+
+    ${python3Packages.python.pythonOnBuildForHost.interpreter} setup.py install --root=$out \
+      --prefix=$out \
+      --libdir=$out/lib \
+      --staging-root=$out \
+      --staging-libdir=$out/lib \
+      --staging-sharedir=$out/share
+
+    PYFILES="$out/bin/* $out/lib/calibre/calibre/web/feeds/*.py
+      $out/lib/calibre/calibre/ebooks/metadata/*.py
+      $out/lib/calibre/calibre/ebooks/rtf2xml/*.py"
+
+    sed -i "s/env python[0-9.]*/python/" $PYFILES
+    sed -i "2i import sys; sys.argv[0] = 'calibre'" $out/bin/calibre
+
+    mkdir -p $out/share
+    cp -a man-pages $out/share/man
+
+    runHook postInstall
+  '';
+
+  # Wrap manually
+  dontWrapQtApps = true;
+  dontWrapGApps = true;
+
+  # Remove some references to shrink the closure size. This reference (as of
+  # 2018-11-06) was a single string like the following:
+  #   /nix/store/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-podofo-0.9.6-dev/include/podofo/base/PdfVariant.h
+  preFixup = ''
+    remove-references-to -t ${podofo.dev} \
+      $out/lib/calibre/calibre/plugins/podofo.so
+
+    for program in $out/bin/*; do
+      wrapProgram $program \
+        ''${qtWrapperArgs[@]} \
+        ''${gappsWrapperArgs[@]} \
+        --prefix PYTHONPATH : $PYTHONPATH \
+        --prefix PATH : ${poppler_utils.out}/bin
+    done
+  '';
+
+  disallowedReferences = [ podofo.dev ];
+
+  meta = {
+    homepage = "https://calibre-ebook.com";
+    description = "Comprehensive e-book software";
+    longDescription = ''
+      calibre is a powerful and easy to use e-book manager. Users say it’s
+      outstanding and a must-have. It’ll allow you to do nearly everything and
+      it takes things a step beyond normal e-book software. It’s also completely
+      free and open source and great for both casual users and computer experts.
+    '';
+    changelog = "https://github.com/kovidgoyal/calibre/releases/tag/v${finalAttrs.version}";
+    license = if unrarSupport
+              then lib.licenses.unfreeRedistributable
+              else lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ pSub ];
+    platforms = lib.platforms.unix;
+    broken = stdenv.isDarwin;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch b/nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch
new file mode 100644
index 000000000000..e88e7374431c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/calibre/dont_build_unrar_plugin.patch
@@ -0,0 +1,12 @@
+diff --git a/src/calibre/ebooks/metadata/archive.py b/src/calibre/ebooks/metadata/archive.py
+index 50b4750124..858e39eece 100644
+--- a/src/calibre/ebooks/metadata/archive.py
++++ b/src/calibre/ebooks/metadata/archive.py
+@@ -99,7 +99,7 @@ class ArchiveExtract(FileTypePlugin):
+     description = _('Extract common e-book formats from archive files '
+         '(ZIP/RAR/7z). Also try to autodetect if they are actually '
+         'CBZ/CBR/CB7 files.')
+-    file_types = {'zip', 'rar', '7z'}
++    file_types = {'zip', '7z'}
+     supported_platforms = ['windows', 'osx', 'linux']
+     on_import = True
diff --git a/nixpkgs/pkgs/applications/misc/cambrinary/default.nix b/nixpkgs/pkgs/applications/misc/cambrinary/default.nix
new file mode 100644
index 000000000000..1fecfe1c17cb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cambrinary/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, flit
+, aiohttp
+, beautifulsoup4
+}:
+
+buildPythonApplication rec {
+  pname = "cambrinary";
+  version = "unstable-2023-07-16";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "xueyuanl";
+    repo = "cambrinary";
+    rev = "f0792ef70654a48a7677b6e1a7dee454b2c0971c";
+    hash = "sha256-wDcvpKAY/6lBjO5h3qKH3+Y2G2gm7spcKCXFMt/bAtE=";
+  };
+
+  nativeBuildInputs = [
+    flit
+  ];
+
+  propagatedBuildInputs = [
+    aiohttp
+    beautifulsoup4
+  ];
+
+  pythonImportsCheck = [ "cambrinary" ];
+
+  meta = with lib; {
+    description = "Cambridge dictionary in a terminal";
+    homepage = "https://github.com/xueyuanl/cambrinary";
+    license = licenses.gpl3Only;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ azahi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/camunda-modeler/default.nix b/nixpkgs/pkgs/applications/misc/camunda-modeler/default.nix
new file mode 100644
index 000000000000..3469e8eeb446
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/camunda-modeler/default.nix
@@ -0,0 +1,72 @@
+{ stdenvNoCC
+, lib
+, fetchurl
+, electron
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "camunda-modeler";
+  version = "5.19.0";
+
+  src = fetchurl {
+    url = "https://github.com/camunda/camunda-modeler/releases/download/v${version}/camunda-modeler-${version}-linux-x64.tar.gz";
+    hash = "sha256-EKtdja55KFF394sHIh1C/cXxdjedBPbmHzicDVrbXCA=";
+  };
+  sourceRoot = "camunda-modeler-${version}-linux-x64";
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${pname}
+    cp -a {locales,resources} $out/share/${pname}
+    install -Dm644 support/mime-types.xml $out/share/mime/packages/${pname}.xml
+
+    for SIZE in 16 48 128; do
+      install -D -m0644 support/icon_''${SIZE}.png "$out/share/icons/hicolor/''${SIZE}x''${SIZE}/apps/${pname}.png"
+    done
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper ${electron}/bin/electron $out/bin/${pname} \
+      --add-flags $out/share/${pname}/resources/app.asar
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = pname;
+      desktopName = "Camunda Modeler";
+      icon = pname;
+      keywords = [ "bpmn" "cmmn" "dmn" "form" "modeler" "camunda"];
+      genericName = "Process Modeling Tool";
+      comment = meta.description;
+      mimeTypes = [ "application/bpmn" "application/cmmn" "application/dmn" "application/camunda-form" ];
+      extraConfig = {
+        X-Ayatana-Desktop-Shortcuts = "NewWindow;RepositoryBrowser";
+      };
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/camunda/camunda-modeler";
+    description = "An integrated modeling solution for BPMN, DMN and Forms based on bpmn.io";
+    maintainers = teams.wdz.members;
+    license = licenses.mit;
+    inherit (electron.meta) platforms;
+    mainProgram = "camunda-modeler";
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/candle/default.nix b/nixpkgs/pkgs/applications/misc/candle/default.nix
new file mode 100644
index 000000000000..3f9f2ec678b5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/candle/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchFromGitHub, qtbase, qtserialport, qmake }:
+
+mkDerivation rec {
+  pname = "candle";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner  = "Denvi";
+    repo   = "Candle";
+    rev    = "v${version}";
+    sha256 = "1gpx08gdz8awbsj6lsczwgffp19z3q0r2fvm72a73qd9az29pmm0";
+  };
+
+  nativeBuildInputs = [ qmake ];
+
+  sourceRoot = "${src.name}/src";
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 Candle $out/bin/candle
+    runHook postInstall
+  '';
+
+  buildInputs = [ qtbase qtserialport ];
+
+  meta = with lib; {
+    description = "GRBL controller application with G-Code visualizer written in Qt";
+    homepage = "https://github.com/Denvi/Candle";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ matti-kariluoma ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cardpeek/default.nix b/nixpkgs/pkgs/applications/misc/cardpeek/default.nix
new file mode 100644
index 000000000000..4cf13498be94
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cardpeek/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, autoreconfHook
+, glib
+, gtk3
+, pcsclite
+, lua5_2
+, curl
+, readline
+, PCSC
+, xcbuild
+}:
+let
+  version = "0.8.4";
+in
+stdenv.mkDerivation {
+  pname = "cardpeek";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "L1L1";
+    repo = "cardpeek";
+    rev = "cardpeek-${version}";
+    sha256 = "1ighpl7nvcvwnsd6r5h5n9p95kclwrq99hq7bry7s53yr57l6588";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    # replace xcode check and hard-coded PCSC framework path
+    substituteInPlace configure.ac \
+      --replace 'if test ! -e "/Applications/Xcode.app/"; then' 'if test yes != yes; then' \
+      --replace 'PCSC_HEADERS=`ls -d /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/*.sdk/System/Library/Frameworks/PCSC.framework/Versions/Current/Headers/ | sort | head -1`' 'PCSC_HEADERS=${PCSC}/Library/Frameworks/PCSC.framework/Headers'
+  '';
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ glib gtk3 lua5_2 curl readline ]
+    ++ lib.optional stdenv.isDarwin PCSC
+    ++ lib.optional stdenv.isLinux pcsclite;
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/L1L1/cardpeek";
+    description = "A tool to read the contents of ISO7816 smart cards";
+    license = licenses.gpl3Plus;
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ embr ];
+    mainProgram = "cardpeek";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cartridges/default.nix b/nixpkgs/pkgs/applications/misc/cartridges/default.nix
new file mode 100644
index 000000000000..ff06da875d61
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cartridges/default.nix
@@ -0,0 +1,71 @@
+{ blueprint-compiler
+, desktop-file-utils
+, fetchFromGitHub
+, gobject-introspection
+, lib
+, libadwaita
+, meson
+, ninja
+, python3Packages
+, stdenv
+, wrapGAppsHook4
+, nix-update-script
+}:
+stdenv.mkDerivation (finalAttrs: {
+  pname = "cartridges";
+  version = "2.7.3";
+
+  src = fetchFromGitHub {
+    owner = "kra-mo";
+    repo = "cartridges";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-N1Ow2lkBOSnrxI0qLaaJeqgdU2E+jRYxj5Zu/wzS6ds=";
+  };
+
+  pythonPath = with python3Packages; [
+    pillow
+    pygobject3
+    pyyaml
+    requests
+  ];
+
+  buildInputs = [
+    libadwaita
+    (python3Packages.python.withPackages (_: finalAttrs.pythonPath))
+  ];
+
+  nativeBuildInputs = [
+    blueprint-compiler
+    desktop-file-utils
+    gobject-introspection
+    meson
+    ninja
+    python3Packages.wrapPython
+    wrapGAppsHook4
+  ];
+
+  dontWrapGApps = true;
+
+  postFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+    wrapPythonPrograms "$out/bin" "$out" "$pythonPath"
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A GTK4 + Libadwaita game launcher";
+    longDescription = ''
+      A simple game launcher for all of your games.
+      It has support for importing games from Steam, Lutris, Heroic
+      and more with no login necessary.
+      You can sort and hide games or download cover art from SteamGridDB.
+    '';
+    homepage = "https://apps.gnome.org/app/hu.kramo.Cartridges/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.getchoo ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/cask-server/default.nix b/nixpkgs/pkgs/applications/misc/cask-server/default.nix
new file mode 100644
index 000000000000..603060ec5241
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cask-server/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, pkgs
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+}:
+
+mkDerivation rec {
+  pname = "cask-server";
+  version = "0.6.0";
+
+  src = fetchFromGitHub {
+    owner = "Nitrux";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-XUgLtZMcvzGewtUcgu7FbBCn/1zqOjWvw2AI9gUwWkc=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  meta = with lib; {
+    description = "Public server and API to interface with Cask features";
+    homepage = "https://github.com/Nitrux/cask-server";
+    license = with licenses; [
+      bsd2
+      lgpl21Plus
+      cc0
+    ];
+    maintainers = with maintainers; [ onny ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/cataract/build.nix b/nixpkgs/pkgs/applications/misc/cataract/build.nix
new file mode 100644
index 000000000000..9576ee2ebc6c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cataract/build.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv
+, fetchgit
+, autoreconfHook
+, glib
+, pkg-config
+, libxml2
+, exiv2
+, imagemagick6
+, version
+, sha256
+, rev }:
+
+stdenv.mkDerivation {
+  inherit version;
+  pname = "cataract";
+
+  src = fetchgit {
+    url = "git://git.bzatek.net/cataract";
+    inherit sha256 rev;
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ glib libxml2 exiv2 imagemagick6 ];
+
+  prePatch = ''
+    sed -i 's|#include <exiv2/exif.hpp>|#include <exiv2/exiv2.hpp>|' src/jpeg-utils.cpp
+  '';
+
+  # Add workaround for -fno-common toolchains like upstream gcc-10 to
+  # avoid build failures like:
+  #   ld: stats.o:/build/cataract-675e647/src/stats.h:24: multiple definition of
+  #     `stats_images'; cgg.o:/build/cataract-675e647/src/stats.h:24: first defined here
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  installPhase = ''
+    mkdir $out/{bin,share} -p
+    cp src/cgg{,-dirgen} $out/bin/
+  '';
+
+  meta = with lib; {
+    homepage = "http://cgg.bzatek.net/";
+    description = "A simple static web photo gallery, designed to be clean and easily usable";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = with platforms; linux ++ darwin;
+  };
+}
+
+
diff --git a/nixpkgs/pkgs/applications/misc/cataract/default.nix b/nixpkgs/pkgs/applications/misc/cataract/default.nix
new file mode 100644
index 000000000000..3a9f20289227
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cataract/default.nix
@@ -0,0 +1,8 @@
+{ callPackage }:
+
+callPackage ./build.nix {
+  version = "1.1.0";
+  rev = "675e647dc8ae918d29f520a29be9201ae85a94dd";
+  sha256 = "13b9rvcy9k2ay8w36j28kc7f4lnxp4jc0494ck3xsmwgqsawmzdj";
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/cataract/unstable.nix b/nixpkgs/pkgs/applications/misc/cataract/unstable.nix
new file mode 100644
index 000000000000..397aed355a95
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cataract/unstable.nix
@@ -0,0 +1,8 @@
+{ callPackage }:
+
+callPackage ./build.nix {
+  version = "unstable-2016-10-18";
+  rev = "db3d992febbe703931840e9bdad95c43081694a5";
+  sha256 = "04f85piy675lq36w1mw6mw66n8911mmn4ifj8h9x47z8z806h3rf";
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/catclock/default.nix b/nixpkgs/pkgs/applications/misc/catclock/default.nix
new file mode 100644
index 000000000000..e65bcd2ff2e2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/catclock/default.nix
@@ -0,0 +1,35 @@
+{ stdenv, lib, fetchFromGitHub, motif, xorg
+, withAudioTracking ? false, libpulseaudio, aubio }:
+
+stdenv.mkDerivation {
+  pname = "catclock";
+  version = "unstable-2021-11-15";
+
+  src = fetchFromGitHub {
+    owner = "BarkyTheDog";
+    repo = "catclock";
+    rev = "b2f277974b5a80667647303cabf8a89d6d6a4290";
+    sha256 = "0ls02j9waqg155rj6whisqm7ppsdabgkrln92n4rmkgnwv25hdbi";
+  };
+
+  preInstall = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/man/man1
+    cp xclock.man $out/share/man/man1/xclock.1
+  '';
+
+  makeFlags = [ "DESTINATION=$(out)/bin/" ]
+    ++ lib.optional withAudioTracking "WITH_TEMPO_TRACKER=1";
+
+  buildInputs = [ motif xorg.libX11 xorg.libXext xorg.libXt ]
+    ++ lib.optionals withAudioTracking [ libpulseaudio aubio ];
+
+  meta = with lib; {
+    homepage = "http://codefromabove.com/2014/05/catclock/";
+    description = "Analog / Digital / Cat clock for X";
+    license = with licenses; mit;
+    maintainers = with maintainers; [ ramkromberg ];
+    mainProgram = "xclock";
+    platforms = with platforms; linux ++ darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cbatticon/default.nix b/nixpkgs/pkgs/applications/misc/cbatticon/default.nix
new file mode 100644
index 000000000000..4d189d1c37a4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cbatticon/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gettext, glib, gtk3, libnotify, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "cbatticon";
+  version = "1.6.13";
+
+  src = fetchFromGitHub {
+    owner = "valr";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-VQjJujF9lnVvQxV+0YqodLgnI9F90JKDAGBu5nM/Q/c=";
+  };
+
+  nativeBuildInputs = [ pkg-config gettext wrapGAppsHook ];
+
+  buildInputs =  [ glib gtk3 libnotify ];
+
+  patchPhase = ''
+    sed -i -e 's/ -Wno-format//g' Makefile
+  '';
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Lightweight and fast battery icon that sits in the system tray";
+    homepage = "https://github.com/valr/cbatticon";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.domenkozar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/charm/default.nix b/nixpkgs/pkgs/applications/misc/charm/default.nix
new file mode 100644
index 000000000000..bf3520d4634e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/charm/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "charm";
+  version = "0.12.6";
+
+  src = fetchFromGitHub {
+    owner = "charmbracelet";
+    repo = "charm";
+    rev = "v${version}";
+    sha256 = "sha256-RtUHJIMbodICEDIhjH/QZlAS7dxBsL/uNYA2IoObAg0=";
+  };
+
+  vendorHash = "sha256-V5azvQ8vMkgF2Myt6h5Gw09b+Xwg1XLyTImG52qQ+20=";
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "Manage your charm account on the CLI";
+    homepage = "https://github.com/charmbracelet/charm";
+    changelog = "https://github.com/charmbracelet/charm/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ penguwin ];
+    mainProgram = "charm";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/chatblade/default.nix b/nixpkgs/pkgs/applications/misc/chatblade/default.nix
new file mode 100644
index 000000000000..a285c88a36f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/chatblade/default.nix
@@ -0,0 +1,47 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "chatblade";
+  version = "0.3.4";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-ODC8n4JS7IOfAJMn7CPzJcBNMhfD5A3eEqVUK1e4mZY=";
+  };
+
+  doCheck = false; # there are no tests
+
+  pythonImportsCheck = [ "chatblade" ];
+  propagatedBuildInputs = with python3Packages; [
+    aiohttp
+    aiosignal
+    async-timeout
+    attrs
+    certifi
+    charset-normalizer
+    frozenlist
+    idna
+    markdown-it-py
+    mdurl
+    multidict
+    openai
+    platformdirs
+    pygments
+    pyyaml
+    regex
+    requests
+    rich
+    tiktoken
+    tqdm
+    urllib3
+    yarl
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/npiv/chatblade/";
+    description = "A CLI Swiss Army Knife for ChatGPT";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ deejayem ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cheat/default.nix b/nixpkgs/pkgs/applications/misc/cheat/default.nix
new file mode 100644
index 000000000000..ef8780f1e88b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cheat/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub
+, buildGoModule, installShellFiles }:
+
+buildGoModule rec {
+  pname = "cheat";
+  version = "4.4.2";
+
+  src = fetchFromGitHub {
+    owner = "cheat";
+    repo = "cheat";
+    rev = version;
+    sha256 = "sha256-GUU6VWfTmNS6ny12HnMr3uQmS7HI86Oupcmqx0MVAvE=";
+  };
+
+  subPackages = [ "cmd/cheat" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installManPage doc/cheat.1
+    installShellCompletion scripts/cheat.{bash,fish,zsh}
+  '';
+
+  vendorHash = null;
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Create and view interactive cheatsheets on the command-line";
+    maintainers = with maintainers; [ mic92 ];
+    license = with licenses; [ gpl3 mit ];
+    inherit (src.meta) homepage;
+    mainProgram = "cheat";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cherrytree/default.nix b/nixpkgs/pkgs/applications/misc/cherrytree/default.nix
new file mode 100644
index 000000000000..11944a21e0ef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cherrytree/default.nix
@@ -0,0 +1,69 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, python3
+, wrapGAppsHook
+, gtkmm3
+, gtksourceview
+, gtksourceviewmm
+, gspell
+, libxmlxx
+, sqlite
+, curl
+, libuchardet
+, spdlog
+, fribidi
+, vte
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cherrytree";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "giuspen";
+    repo = "cherrytree";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-SMx3a0pzhNahRzmenZwPQPCBgqoBGo9n3RcNcimNGBE=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtkmm3
+    gtksourceview
+    gtksourceviewmm
+    gspell
+    libxmlxx
+    sqlite
+    curl
+    libuchardet
+    spdlog
+    fribidi
+    vte
+  ];
+
+  meta = with lib; {
+    description = "An hierarchical note taking application";
+    longDescription = ''
+      Cherrytree is an hierarchical note taking application, featuring rich
+      text, syntax highlighting and powerful search capabilities. It organizes
+      all information in units called "nodes", as in a tree, and can be very
+      useful to store any piece of information, from tables and links to
+      pictures and even entire documents. All those little bits of information
+      you have scattered around your hard drive can be conveniently placed into
+      a Cherrytree document where you can easily find it.
+    '';
+    homepage = "https://www.giuspen.com/cherrytree";
+    changelog = "https://raw.githubusercontent.com/giuspen/cherrytree/${version}/changelog.txt";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/chewing-editor/default.nix b/nixpkgs/pkgs/applications/misc/chewing-editor/default.nix
new file mode 100644
index 000000000000..13ee17999fe1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/chewing-editor/default.nix
@@ -0,0 +1,30 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake, pkg-config, libchewing, qtbase
+, qttools }:
+
+mkDerivation rec {
+  pname = "chewing-editor";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "chewing";
+    repo = pname;
+    rev = version;
+    sha256 = "0kc2hjx1gplm3s3p1r5sn0cyxw3k1q4gyv08q9r6rs4sg7xh2w7w";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libchewing qtbase qttools ];
+
+  meta = with lib; {
+    description = "Cross platform chewing user phrase editor";
+    longDescription = ''
+      chewing-editor is a cross platform chewing user phrase editor. It provides a easy way to manage user phrase. With it, user can customize their user phrase to increase input performance.
+    '';
+    homepage = "https://github.com/chewing/chewing-editor";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.ShamrockLee ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cipher/default.nix b/nixpkgs/pkgs/applications/misc/cipher/default.nix
new file mode 100644
index 000000000000..8486db6f7fc0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cipher/default.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, meson
+, ninja
+, vala
+, pkg-config
+, pantheon
+, python3
+, gettext
+, glib
+, gtk3
+, libgee
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "cipher";
+  version = "2.5.0";
+
+  src = fetchFromGitHub {
+    owner = "arshubham";
+    repo = "cipher";
+    rev = version;
+    sha256 = "00azc5ck17zkdypfza6x1viknwhimd9fqgk2ybff3mx6aphmla7a";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    meson
+    ninja
+    vala
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    pantheon.granite
+    libgee
+  ];
+
+  postPatch = ''
+    substituteInPlace data/com.github.arshubham.cipher.desktop.in \
+      --replace "gio" "${glib.bin}/bin/gio"
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "A simple application for encoding and decoding text, designed for elementary OS";
+    homepage = "https://github.com/arshubham/cipher";
+    maintainers = with maintainers; [ xiorcale ] ++ teams.pantheon.members;
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+    mainProgram = "com.github.arshubham.cipher";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/citations/default.nix b/nixpkgs/pkgs/applications/misc/citations/default.nix
new file mode 100644
index 000000000000..ae50a584e0a0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/citations/default.nix
@@ -0,0 +1,91 @@
+{ cargo
+, darwin
+, desktop-file-utils
+, fetchFromGitLab
+, gettext
+, glib
+, gtk4
+, gtksourceview5
+, lib
+, libadwaita
+, meson
+, ninja
+, pkg-config
+, poppler
+, rustPlatform
+, rustc
+, stdenv
+, testers
+, wrapGAppsHook4
+, clippy
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "citations";
+  version = "0.6.2";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = finalAttrs.pname;
+    rev = finalAttrs.version;
+    hash = "sha256-RV9oQcXzRsNcvZc/8Xt7qZ/88DvHofC2Av0ftxzeF6Q=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    src = finalAttrs.src;
+    hash = "sha256-XlqwgXuwxR6oEz0+hYAp/3b+XxH+Vd/DGr5j+iKhUjQ=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    glib
+    meson
+    ninja
+    pkg-config
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    gtksourceview5
+    libadwaita
+    poppler
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Foundation
+  ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang (lib.concatStringsSep " " [
+    "-Wno-typedef-redefinition"
+    "-Wno-unused-parameter"
+    "-Wno-missing-field-initializers"
+    "-Wno-incompatible-function-pointer-types"
+  ]);
+
+  doCheck = true;
+
+  nativeCheckInputs = [ clippy ];
+
+  preCheck = ''
+    sed -i -e '/PATH=/d' ../src/meson.build
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+    command = "citations --help";
+  };
+
+  meta = with lib; {
+    description = "Manage your bibliographies using the BibTeX format";
+    homepage = "https://apps.gnome.org/app/org.gnome.World.Citations";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ benediktbroich ];
+    platforms = platforms.unix;
+    mainProgram = "citations";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/cli-visualizer/default.nix b/nixpkgs/pkgs/applications/misc/cli-visualizer/default.nix
new file mode 100644
index 000000000000..1559a5401ffa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cli-visualizer/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, cmake, fftw, ncurses5, libpulseaudio, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "1.8";
+  pname = "cli-visualizer";
+
+  src = fetchFromGitHub {
+    owner = "dpayne";
+    repo = "cli-visualizer";
+    rev = "v${version}";
+    sha256 = "003mbbwsz43mg3d7llphpypqa9g7rs1p1cdbqi1mbc2bfrc1gcq2";
+  };
+
+  postPatch = ''
+    sed '1i#include <cmath>' -i src/Transformer/SpectrumCircleTransformer.cpp
+  '';
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+
+  buildInputs = [ fftw ncurses5 libpulseaudio ];
+
+  buildFlags = [ "ENABLE_PULSE=1" ];
+
+  postInstall = ''
+    # See https://github.com/dpayne/cli-visualizer/issues/62#issuecomment-330738075
+    wrapProgram $out/bin/vis --set TERM rxvt-256color
+  '';
+
+  meta = {
+    homepage = "https://github.com/dpayne/cli-visualizer";
+    description = "CLI based audio visualizer";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.matthiasbeyer ];
+    platforms = with lib.platforms; linux;
+    mainProgram = "vis";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/clight/clightd.nix b/nixpkgs/pkgs/applications/misc/clight/clightd.nix
new file mode 100644
index 000000000000..7e6b84913a7a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/clight/clightd.nix
@@ -0,0 +1,80 @@
+{ lib, stdenv, fetchFromGitHub
+, dbus, cmake, pkg-config
+, glib, udev, polkit, libusb1, libjpeg, libmodule
+, pcre, libXdmcp, util-linux, libpthreadstubs
+, enableDdc ? true, ddcutil
+, enableDpms ? true, libXext
+, enableGamma ? true, libdrm, libXrandr, wayland
+, enableScreen ? true
+, enableYoctolight ? true }:
+
+stdenv.mkDerivation rec {
+  pname = "clightd";
+  version = "5.8";
+
+  src = fetchFromGitHub {
+    owner = "FedeDP";
+    repo = "Clightd";
+    rev = version;
+    hash = "sha256-Lmno/TJVCQVNzfpKNZzuDf2OM6w6rbz+zJTr3zVo/CM=";
+  };
+
+  # dbus-1.pc has datadir=/etc
+  SYSTEM_BUS_DIR = "${placeholder "out"}/share/dbus-1/system-services";
+  # polkit-gobject-1.pc has prefix=${polkit.out}
+  POLKIT_ACTION_DIR = "${placeholder "out"}/share/polkit-1/actions";
+
+  postPatch = ''
+    sed -i "s@pkg_get_variable(SYSTEM_BUS_DIR.*@set(SYSTEM_BUS_DIR $SYSTEM_BUS_DIR)@" CMakeLists.txt
+    sed -i "s@pkg_get_variable(POLKIT_ACTION_DIR.*@set(POLKIT_ACTION_DIR $POLKIT_ACTION_DIR)@" CMakeLists.txt
+  '';
+
+  cmakeFlags = with lib;
+    [ "-DSYSTEMD_SERVICE_DIR=${placeholder "out"}/lib/systemd/system"
+      "-DDBUS_CONFIG_DIR=${placeholder "out"}/etc/dbus-1/system.d"
+      # systemd.pc has prefix=${systemd.out}
+      "-DMODULE_LOAD_DIR=${placeholder "out"}/lib/modules-load.d"
+    ] ++ optional enableDdc        "-DENABLE_DDC=1"
+      ++ optional enableDpms       "-DENABLE_DPMS=1"
+      ++ optional enableGamma      "-DENABLE_GAMMA=1"
+      ++ optional enableScreen     "-DENABLE_SCREEN=1"
+      ++ optional enableYoctolight "-DENABLE_YOCTOLIGHT=1";
+
+  nativeBuildInputs = [
+    dbus
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = with lib; [
+    glib
+    udev
+    polkit
+    libusb1
+    libjpeg
+    libmodule
+
+    pcre
+    libXdmcp
+    util-linux
+    libpthreadstubs
+  ] ++ optionals enableDdc [ ddcutil ]
+    ++ optionals enableDpms [ libXext ]
+    ++ optionals enableGamma [ libXrandr ]
+    ++ optionals (enableDpms || enableGamma || enableScreen) [ libdrm wayland ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    ln -svT $out/libexec/clightd $out/bin/clightd
+  '';
+
+  meta = with lib; {
+    description = "Linux bus interface that changes screen brightness/temperature";
+    homepage = "https://github.com/FedeDP/Clightd";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [
+      eadwu
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/clight/default.nix b/nixpkgs/pkgs/applications/misc/clight/default.nix
new file mode 100644
index 000000000000..3adff5c62887
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/clight/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub
+, dbus, cmake, pkg-config, bash-completion
+, gsl, popt, clightd, systemd, libconfig, libmodule
+, withGeoclue ? true, geoclue2
+, withUpower ? true, upower }:
+
+stdenv.mkDerivation rec {
+  pname = "clight";
+  version = "4.10";
+
+  src = fetchFromGitHub {
+    owner = "FedeDP";
+    repo = "Clight";
+    rev = version;
+    sha256 = "sha256-IAoz4f4XrX8bgesWL4yLK6m5F+c75WNIMFgKBj+W61Q=";
+  };
+
+  nativeBuildInputs = [
+    dbus
+    cmake
+    pkg-config
+    bash-completion
+  ];
+
+  buildInputs = with lib; [
+    gsl
+    popt
+    upower
+    clightd
+    systemd
+    geoclue2
+    libconfig
+    libmodule
+  ] ++ optional withGeoclue geoclue2
+    ++ optional withUpower upower;
+
+  cmakeFlags = [
+    "-DSESSION_BUS_DIR=${placeholder "out"}/share/dbus-1/services"
+    "-DBASH_COMPLETIONS_DIR=${placeholder "out"}/share/bash-completions/completions"
+    "-DZSH_COMPLETIONS_DIR=${placeholder "out"}/share/zsh/site-functions"
+  ];
+
+  meta = with lib; {
+    description = "A C daemon that turns your webcam into a light sensor";
+    homepage = "https://github.com/FedeDP/Clight";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [
+      eadwu
+    ];
+    mainProgram = "clight";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/clipit/default.nix b/nixpkgs/pkgs/applications/misc/clipit/default.nix
new file mode 100644
index 000000000000..b40bc4fec930
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/clipit/default.nix
@@ -0,0 +1,36 @@
+{ fetchFromGitHub, lib, stdenv
+, autoreconfHook, intltool, pkg-config
+, gtk3, libayatana-appindicator, xdotool, which, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "clipit";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "CristianHenzel";
+    repo = "ClipIt";
+    rev = "45e2ea386d04dbfc411ea370299502450d589d0c";
+    sha256 = "0byqz9hanwmdc7i55xszdby2iqrk93lws7hmjda2kv17g34apwl7";
+  };
+
+  preConfigure = ''
+    intltoolize --copy --force --automake
+  '';
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook autoreconfHook intltool ];
+  configureFlags = [ "--with-gtk3" "--enable-appindicator=yes" ];
+  buildInputs = [ gtk3 libayatana-appindicator ];
+
+  gappsWrapperArgs = [
+    "--prefix" "PATH" ":" "${lib.makeBinPath [ xdotool which ]}"
+  ];
+
+  meta = with lib; {
+    description = "Lightweight GTK Clipboard Manager";
+    inherit (src.meta) homepage;
+    license = licenses.gpl3Plus;
+    platforms   = platforms.linux;
+    mainProgram = "clipit";
+    maintainers = with maintainers; [ kamilchm ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/clipmenu/default.nix b/nixpkgs/pkgs/applications/misc/clipmenu/default.nix
new file mode 100644
index 000000000000..c47dd972ccfd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/clipmenu/default.nix
@@ -0,0 +1,48 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+, clipnotify
+, coreutils
+, dmenu
+, gawk
+, util-linux
+, xdotool
+, xsel
+}:
+stdenv.mkDerivation rec {
+  pname = "clipmenu";
+  version = "6.2.0";
+
+  src = fetchFromGitHub {
+    owner  = "cdown";
+    repo   = "clipmenu";
+    rev    = version;
+    sha256 = "sha256-nvctEwyho6kl4+NXi76jT2kG7nchmI2a7mgxlgjXA5A=";
+  };
+
+  postPatch = ''
+    sed -i init/clipmenud.service \
+      -e "s,/usr/bin,$out/bin,"
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  nativeBuildInputs = [ makeWrapper xsel clipnotify ];
+
+  postFixup = ''
+    sed -i "$out/bin/clipctl" -e 's,clipmenud\$,\.clipmenud-wrapped\$,'
+
+    wrapProgram "$out/bin/clipmenu" \
+      --prefix PATH : "${lib.makeBinPath [ xsel ]}"
+
+    wrapProgram "$out/bin/clipmenud" \
+      --set PATH "${lib.makeBinPath [ clipnotify coreutils gawk util-linux xdotool xsel ]}"
+  '';
+
+  meta = with lib; {
+    description = "Clipboard management using dmenu";
+    inherit (src.meta) homepage;
+    maintainers = with maintainers; [ jb55 ];
+    license = licenses.publicDomain;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/clipqr/default.nix b/nixpkgs/pkgs/applications/misc/clipqr/default.nix
new file mode 100644
index 000000000000..8bbfcc6d4209
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/clipqr/default.nix
@@ -0,0 +1,73 @@
+{ buildGoModule
+, copyDesktopItems
+, fetchFromGitLab
+, lib
+, libGL
+, libX11
+, libXcursor
+, libXext
+, libXi
+, libXinerama
+, libXrandr
+, makeDesktopItem
+, mesa
+, pkg-config
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "clipqr";
+  version = "1.2.0";
+
+  src = fetchFromGitLab {
+    owner = "imatt-foss";
+    repo = "clipqr";
+    rev = "v${version}";
+    hash = "sha256-gfKCuTZY9VsiXMlw6XX6YylMO4xGoLQU/5QvnDV7GbE=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  buildInputs = [
+    libGL
+    libX11
+    libXcursor
+    libXext
+    libXi
+    libXinerama
+    libXrandr
+    mesa
+  ];
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    pkg-config
+  ];
+
+  postInstall = ''
+    install -Dm644 icon.svg $out/share/icons/hicolor/scalable/apps/clipqr.svg
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "ClipQR";
+      desktopName = "ClipQR";
+      exec = "clipqr";
+      categories = [ "Utility" ];
+      icon = "clipqr";
+      comment = "Scan QR codes on screen and from camera";
+      genericName = "ClipQR";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Scan QR codes on screen and from camera, the result is in your clipboard";
+    license = licenses.mit;
+    maintainers = with maintainers; [ MatthieuBarthel ];
+    homepage = "https://gitlab.com/imatt-foss/clipqr";
+    broken = stdenv.isDarwin;
+    mainProgram = "clipqr";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cloak/default.nix b/nixpkgs/pkgs/applications/misc/cloak/default.nix
new file mode 100644
index 000000000000..bf3dd3c4a081
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cloak/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, rustPlatform, fetchFromGitHub, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cloak";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "evansmurithi";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Pd2aorsXdHB1bs609+S5s+WV5M1ql48yIKaoN8SEvsg=";
+  };
+
+  cargoHash = "sha256-m11A5fcJzWoDZglrr2Es1V5ZJNepEkGeIRVhexJ7jws=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    homepage = "https://github.com/evansmurithi/cloak";
+    description = "Command-line OTP authenticator application";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mvs ];
+    mainProgram = "cloak";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cmatrix/default.nix b/nixpkgs/pkgs/applications/misc/cmatrix/default.nix
new file mode 100644
index 000000000000..7aca6851df21
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cmatrix/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "cmatrix";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "abishekvashok";
+    repo = "cmatrix";
+    rev = "v${version}";
+    sha256 = "1h9jz4m4s5l8c3figaq46ja0km1gimrkfxm4dg7mf4s84icmasbm";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    description = "Simulates the falling characters theme from The Matrix movie";
+    license = licenses.gpl3;
+    longDescription = ''
+      CMatrix simulates the display from "The Matrix" and is based
+      on the screensaver from the movie's website.
+    '';
+    homepage = "https://github.com/abishekvashok/cmatrix";
+    platforms = ncurses.meta.platforms;
+    maintainers = [ maintainers.AndersonTorres ];
+    mainProgram = "cmatrix";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cobalt/default.nix b/nixpkgs/pkgs/applications/misc/cobalt/default.nix
new file mode 100644
index 000000000000..feb6a2c80be4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cobalt/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cobalt";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "cobalt-org";
+    repo = "cobalt.rs";
+    rev = "v${version}";
+    sha256 = "sha256-cW9Pj4dTBZ0UmHvrWpx0SREBBaEIb2aaX2cdCUdlFLw=";
+  };
+
+  cargoHash = "sha256-/xkZuGyinQdUGWix/SRtJMJ5nmpXJu39/LxJoTHnT4Q=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "Static site generator written in Rust";
+    homepage = "https://github.com/cobalt-org/cobalt.rs/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ethancedwards8 ];
+    platforms = platforms.unix;
+    mainProgram = "cobalt";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cobang/default.nix b/nixpkgs/pkgs/applications/misc/cobang/default.nix
new file mode 100644
index 000000000000..e36ece60d751
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cobang/default.nix
@@ -0,0 +1,104 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, brotlicffi
+, gst-python
+, kiss-headers
+, logbook
+, pillow
+, pygobject3
+, python-zbar
+, requests
+, single-version
+, gobject-introspection
+, gst-plugins-good
+, gtk3
+, libhandy
+, librsvg
+, networkmanager
+, setuptools
+, python
+, pytestCheckHook
+, wrapGAppsHook
+}:
+
+buildPythonApplication rec {
+  pname = "cobang";
+  version = "0.10.5";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "hongquan";
+    repo = "CoBang";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-CfT/farNOJiWIioFBPx2q7bAFAE4khcojdZ7AsYaU6o=";
+  };
+
+  postPatch = ''
+    # Fixes "Multiple top-level packages discovered in a flat-layout"
+    sed -i '$ a\[tool.setuptools]' pyproject.toml
+    sed -i '$ a\packages = ["cobang"]' pyproject.toml
+  '';
+
+  nativeBuildInputs = [
+    # Needed to recognize gobject namespaces
+    gobject-introspection
+    wrapGAppsHook
+    setuptools
+  ];
+
+  buildInputs = [
+    # Requires v4l2src
+    gst-plugins-good
+    # For gobject namespaces
+    libhandy
+    networkmanager
+  ];
+
+  propagatedBuildInputs = [
+    brotlicffi
+    kiss-headers
+    logbook
+    pillow
+    requests
+    single-version
+    # Unlisted dependencies
+    pygobject3
+    python-zbar
+    # Needed as a gobject namespace and to fix 'Caps' object is not subscriptable
+    gst-python
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  # Wrapping this manually for SVG recognition
+  dontWrapGApps = true;
+
+  postInstall = ''
+    # Needed by the application
+    cp -R data $out/${python.sitePackages}/
+
+    # Icons and applications
+    install -Dm 644 $out/${python.sitePackages}/data/vn.hoabinh.quan.CoBang.svg -t $out/share/pixmaps/
+    install -Dm 644 $out/${python.sitePackages}/data/vn.hoabinh.quan.CoBang.desktop.in -t $out/share/applications/
+    mv $out/${python.sitePackages}/data/vn.hoabinh.quan.CoBang.desktop{.in,}
+  '';
+
+  preFixup = ''
+    wrapProgram $out/bin/cobang \
+      ''${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 = "A QR code scanner desktop app for Linux";
+    homepage = "https://github.com/hongquan/CoBang";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ wolfangaukang ];
+    mainProgram = "cobang";
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cointop/default.nix b/nixpkgs/pkgs/applications/misc/cointop/default.nix
new file mode 100644
index 000000000000..16a59b2fdb71
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cointop/default.nix
@@ -0,0 +1,32 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "cointop";
+  version = "1.6.10";
+
+  src = fetchFromGitHub {
+    owner = "miguelmota";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-NAw1uoBL/FnNLJ86L9aBCOY65aJn1DDGK0Cd0IO2kr0=";
+  };
+
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "The fastest and most interactive terminal based UI application for tracking cryptocurrencies";
+    longDescription = ''
+      cointop is a fast and lightweight interactive terminal based UI
+      application for tracking and monitoring cryptocurrency coin stats in
+      real-time.
+
+      The interface is inspired by htop and shortcut keys are inspired by vim.
+    '';
+    homepage = "https://cointop.sh";
+    maintainers = [ maintainers.marsam ];
+    license = licenses.asl20;
+    mainProgram = "cointop";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/collision/default.nix b/nixpkgs/pkgs/applications/misc/collision/default.nix
new file mode 100644
index 000000000000..f550e48ba954
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/collision/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, crystal
+, wrapGAppsHook4
+, desktopToDarwinBundle
+, gi-crystal
+, gobject-introspection
+, libadwaita
+, openssl
+, libxml2
+, pkg-config
+}:
+crystal.buildCrystalPackage rec {
+  pname = "Collision";
+  version = "3.6.0";
+
+  src = fetchFromGitHub {
+    owner = "GeopJr";
+    repo = "Collision";
+    rev = "v${version}";
+    hash = "sha256-Qxe4ILDdfYfxu95EvKRTvkAOgDIZDiLymBlZouBWn0M=";
+  };
+  patches = [ ./make.patch ];
+  shardsFile = ./shards.nix;
+
+  # Crystal compiler has a strange issue with OpenSSL. The project will not compile due to
+  # main_module:(.text+0x6f0): undefined reference to `SSL_library_init'
+  # There is an explanation for this https://danilafe.com/blog/crystal_nix_revisited/
+  # Shortly, adding pkg-config to buildInputs along with openssl fixes the issue.
+
+  nativeBuildInputs = [ wrapGAppsHook4 pkg-config gobject-introspection gi-crystal ]
+    ++ lib.optionals stdenv.isDarwin [ desktopToDarwinBundle ];
+  buildInputs = [ libadwaita openssl libxml2 ];
+
+  buildTargets = ["bindings" "build"];
+
+  doCheck = false;
+  doInstallCheck = false;
+
+  installTargets = ["desktop" "install"];
+
+  meta = with lib; {
+    description = "Check hashes for your files";
+    homepage = "https://github.com/GeopJr/Collision";
+    license = licenses.bsd2;
+    mainProgram = "collision";
+    maintainers = with maintainers; [ sund3RRR ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/collision/make.patch b/nixpkgs/pkgs/applications/misc/collision/make.patch
new file mode 100644
index 000000000000..73872a789278
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/collision/make.patch
@@ -0,0 +1,20 @@
+--- a/Makefile	2023-07-09 10:49:31.064190374 +0300
++++ b/Makefile	2023-07-19 11:19:37.415480179 +0300
+@@ -6,7 +6,7 @@
+ all: desktop bindings build
+ 
+ bindings: 
+-	./bin/gi-crystal || $(CRYSTAL_LOCATION)shards install && ./bin/gi-crystal
++	gi-crystal
+ 
+ build:
+ 	COLLISION_LOCALE_LOCATION="$(PREFIX)$(LOCALE_LOCATION)" $(CRYSTAL_LOCATION)shards build -Dpreview_mt --release --no-debug
+@@ -43,7 +43,7 @@
+ 	install -D -m 0644 data/dev.geopjr.Collision.desktop $(PREFIX)/share/applications/dev.geopjr.Collision.desktop
+ 	install -D -m 0644 data/icons/dev.geopjr.Collision.svg $(PREFIX)/share/icons/hicolor/scalable/apps/dev.geopjr.Collision.svg
+ 	install -D -m 0644 data/icons/dev.geopjr.Collision-symbolic.svg $(PREFIX)/share/icons/hicolor/symbolic/apps/dev.geopjr.Collision-symbolic.svg
+-	gtk-update-icon-cache $(PREFIX)/share/icons/hicolor
++	gtk4-update-icon-cache --ignore-theme-index $(PREFIX)/share/icons/hicolor
+ 	glib-compile-schemas $(PREFIX)/share/glib-2.0/schemas/
+ 
+ uninstall:
\ No newline at end of file
diff --git a/nixpkgs/pkgs/applications/misc/collision/shards.nix b/nixpkgs/pkgs/applications/misc/collision/shards.nix
new file mode 100644
index 000000000000..e7e93781eb68
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/collision/shards.nix
@@ -0,0 +1,37 @@
+{
+  gettext = {
+    url = "https://github.com/geopjr/gettext.cr.git";
+    rev = "v1.0.0";
+    sha256 = "1y27m4170rr4532j56grzhwbz8hj6z7j3zfkd0jnfwnsxclks1kc";
+  };
+  gio = {
+    url = "https://github.com/hugopl/gio.cr.git";
+    rev = "v0.1.0";
+    sha256 = "0vj35bi64d4hni18nrl8fmms306a0gl4zlxpf3aq08lh0sbwzhd8";
+  };
+  gtk4 = {
+    url = "https://github.com/hugopl/gtk4.cr.git";
+    rev = "v0.15.0";
+    sha256 = "100j5k4sfc2dpj3nplzjcaxw1bwy3hsy5cw93asg00kda9h8dbb1";
+  };
+  harfbuzz = {
+    url = "https://github.com/hugopl/harfbuzz.cr.git";
+    rev = "v0.2.0";
+    sha256 = "06wgqxwyib5416yp53j2iwcbr3bl4jjxb1flm7z103l365par694";
+  };
+  libadwaita = {
+    url = "https://github.com/geopjr/libadwaita.cr.git";
+    rev = "cffabb56e911d2a90c53c2fd14d6bd08bf5ac446";
+    sha256 = "0gcq04vgxg0vff9fcalgzq9phq0y76diihkzhlfn91bdxwkx7rl3";
+  };
+  non-blocking-spawn = {
+    url = "https://github.com/geopjr/non-blocking-spawn.git";
+    rev = "v1.0.5";
+    sha256 = "139gr87zlw0k9kf6pf9k2d88aa9x3kcnfg34qpbqrwsrck7708za";
+  };
+  pango = {
+    url = "https://github.com/hugopl/pango.cr.git";
+    rev = "v0.2.0";
+    sha256 = "0dl3qrhi2ybylmvzx1x5gsznp2pcdkc50waxrljxwnf5avn8ixsf";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/colorstorm/default.nix b/nixpkgs/pkgs/applications/misc/colorstorm/default.nix
new file mode 100644
index 000000000000..ddb429dae33f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/colorstorm/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, zig_0_9
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "colorstorm";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "benbusby";
+    repo = "colorstorm";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-6+P+QQpP1jxsydqhVrZkjl1gaqNcx4kS2994hOBhtu8=";
+  };
+
+  nativeBuildInputs = [
+    zig_0_9.hook
+  ];
+
+  meta = {
+    description = "A color theme generator for editors and terminal emulators";
+    homepage = "https://github.com/benbusby/colorstorm";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ ];
+    inherit (zig_0_9.meta) platforms;
+    mainProgram = "colorstorm";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/colort/default.nix b/nixpkgs/pkgs/applications/misc/colort/default.nix
new file mode 100644
index 000000000000..2716e2d464bc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/colort/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "colort";
+  version = "unstable-2017-03-12";
+
+  src = fetchFromGitHub {
+    owner = "neeasade";
+    repo = "colort";
+    rev = "8470190706f358dc807b4c26ec3453db7f0306b6";
+    sha256 = "10n8rbr2h6hz86hcx73f86pjbbfiaw2rvxsk0yfajnma7bpxgdxw";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A program for 'tinting' color values";
+    homepage = "https://github.com/neeasade/colort";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = [ maintainers.neeasade ];
+    mainProgram = "colort";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/coltrane/Gemfile b/nixpkgs/pkgs/applications/misc/coltrane/Gemfile
new file mode 100644
index 000000000000..58f66b02a9a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/coltrane/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'coltrane'
diff --git a/nixpkgs/pkgs/applications/misc/coltrane/Gemfile.lock b/nixpkgs/pkgs/applications/misc/coltrane/Gemfile.lock
new file mode 100644
index 000000000000..bb733f54288c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/coltrane/Gemfile.lock
@@ -0,0 +1,45 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.0.4.2)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    cli-ui (1.5.1)
+    color (1.8)
+    coltrane (4.1.1)
+      activesupport (> 5.2)
+      color (~> 1.8)
+      dry-monads (~> 0.4)
+      gambiarra (~> 0)
+      paint (~> 2.0)
+    concurrent-ruby (1.2.2)
+    dry-core (0.9.1)
+      concurrent-ruby (~> 1.0)
+      zeitwerk (~> 2.6)
+    dry-equalizer (0.3.0)
+    dry-monads (0.4.0)
+      dry-core (~> 0.3, >= 0.3.3)
+      dry-equalizer
+    gambiarra (0.0.5)
+      activesupport (> 5.2)
+      cli-ui (~> 1.1)
+      thor (~> 1.1.0)
+    i18n (1.12.0)
+      concurrent-ruby (~> 1.0)
+    minitest (5.18.0)
+    paint (2.3.0)
+    thor (1.1.0)
+    tzinfo (2.0.6)
+      concurrent-ruby (~> 1.0)
+    zeitwerk (2.6.7)
+
+PLATFORMS
+  x86_64-linux
+
+DEPENDENCIES
+  coltrane
+
+BUNDLED WITH
+   2.3.26
diff --git a/nixpkgs/pkgs/applications/misc/coltrane/default.nix b/nixpkgs/pkgs/applications/misc/coltrane/default.nix
new file mode 100644
index 000000000000..5d77f8dd6d56
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/coltrane/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, bundlerApp
+, bundlerUpdateScript
+}:
+
+bundlerApp rec {
+  pname = "coltrane";
+  gemdir = ./.;
+  exes = [ "coltrane" ];
+
+  passthru.updateScript = bundlerUpdateScript pname;
+
+  meta = with lib; {
+    homepage = "https://github.com/pedrozath/coltrane";
+    description = "A music calculation library/CLI";
+    longDescription = ''
+      coltrane allows to search for Notes, Chords, Scales for
+      guitar, bass, piano and ukelele
+    '';
+    license = licenses.mit;
+    maintainers = [ maintainers.panaeon ];
+    mainProgram = "coltrane";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/coltrane/gemset.nix b/nixpkgs/pkgs/applications/misc/coltrane/gemset.nix
new file mode 100644
index 000000000000..3463fc8d66d9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/coltrane/gemset.nix
@@ -0,0 +1,159 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dmywys50074vj5rivpx188b00qimlc4jn84xzqlialrgp3ckq5f";
+      type = "gem";
+    };
+    version = "7.0.4.2";
+  };
+  cli-ui = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aghiy4qrh6y6q421lcpal81c98zypj8jki4wymqnc8vjvqsyiv4";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+  color = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10kgsdy86p72q6cf2k92larmbjc0crvd5xq7hy919zm8yvn1518a";
+      type = "gem";
+    };
+    version = "1.8";
+  };
+  coltrane = {
+    dependencies = ["activesupport" "color" "dry-monads" "gambiarra" "paint"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0hchdllbbx2n2fl3ydidl17rsl18mb9953c8k1r6rw1ibzw8sm7f";
+      type = "gem";
+    };
+    version = "4.1.1";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  dry-core = {
+    dependencies = ["concurrent-ruby" "zeitwerk"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dpm9dk11x2zcjsymkl5jcz5nxhffsg7qqy5p6h92cppzbwmm656";
+      type = "gem";
+    };
+    version = "0.9.1";
+  };
+  dry-equalizer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rsqpk0gjja6j6pjm0whx2px06cxr3h197vrwxp6k042p52r4v46";
+      type = "gem";
+    };
+    version = "0.3.0";
+  };
+  dry-monads = {
+    dependencies = ["dry-core" "dry-equalizer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fbji6crgqh88j0p4j1qlfpjnhyf8h1b991dh5wypib0xwzlc5an";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  gambiarra = {
+    dependencies = ["activesupport" "cli-ui" "thor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19kpbqp27fy6w990ciw3vx0z0bdmrcf14fr6dlfcn3r8xqpq56fr";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vdcchz7jli1p0gnc669a7bj3q1fv09y9ppf0y3k0vb1jwdwrqwi";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ic7i5z88zcaqnpzprf7saimq2f6sad57g5mkkqsrqrcd6h3mx06";
+      type = "gem";
+    };
+    version = "5.18.0";
+  };
+  paint = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r9vx3wcx0x2xqlh6zqc81wcsn9qjw3xprcsv5drsq9q80z64z9j";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  thor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18yhlvmfya23cs3pvhr1qy38y41b6mhr5q9vwv5lrgk16wmf3jna";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w2g84dzaf3z13gxyzlzbf748kylk5bdgg3n1ipvkvvqy685bwd";
+      type = "gem";
+    };
+    version = "2.0.6";
+  };
+  zeitwerk = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "028ld9qmgdllxrl7d0qkl65s58wb1n3gv8yjs28g43a8b1hplxk1";
+      type = "gem";
+    };
+    version = "2.6.7";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/comodoro/default.nix b/nixpkgs/pkgs/applications/misc/comodoro/default.nix
new file mode 100644
index 000000000000..2d780d5d514b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/comodoro/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, installShellFiles
+, installShellCompletions ? stdenv.hostPlatform == stdenv.buildPlatform
+, installManPages ? stdenv.hostPlatform == stdenv.buildPlatform
+, withTcp ? true
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "comodoro";
+  version = "0.0.10";
+
+  src = fetchFromGitHub {
+    owner = "soywod";
+    repo = "comodoro";
+    rev = "v${version}";
+    hash = "sha256-Y9SuxqI8wvoF0+X6CLNDlSFCwlSU8R73NYF/LjACP18=";
+  };
+
+  cargoHash = "sha256-1WJIIsTzbChWqvdBSR/OpLC1iR8FgLmypJFQEtpalbw=";
+
+  nativeBuildInputs = lib.optional (installManPages || installShellCompletions) installShellFiles;
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = lib.optional withTcp "tcp";
+
+  postInstall = lib.optionalString installManPages ''
+    mkdir -p $out/man
+    $out/bin/comodoro man $out/man
+    installManPage $out/man/*
+  '' + lib.optionalString installShellCompletions ''
+    installShellCompletion --cmd comodoro \
+      --bash <($out/bin/comodoro completion bash) \
+      --fish <($out/bin/comodoro completion fish) \
+      --zsh <($out/bin/comodoro completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "CLI to manage your time.";
+    homepage = "https://pimalaya.org/comodoro/";
+    changelog = "https://github.com/soywod/comodoro/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ soywod ];
+    mainProgram = "comodoro";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/conceal/Cargo.lock b/nixpkgs/pkgs/applications/misc/conceal/Cargo.lock
new file mode 100644
index 000000000000..05ab253d4ca8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/conceal/Cargo.lock
@@ -0,0 +1,853 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[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",
+]
+
+[[package]]
+name = "anstyle-wincon"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
+dependencies = [
+ "anstyle",
+ "windows-sys",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[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 = "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 = "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",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "clap"
+version = "4.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1640e5cc7fb47dbb8338fd471b105e7ed6c3cb2aeb00c2e067127ffd3764a05d"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98c59138d527eeaf9b53f35a77fcc1fad9d883116070c63d5de1c7dc7b00c72b"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[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_complete_nushell"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d02bc8b1a18ee47c4d2eec3fb5ac034dc68ebea6125b1509e9ccdffcddce66e"
+dependencies = [
+ "clap",
+ "clap_complete",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f"
+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 = "colorchoice"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+
+[[package]]
+name = "conceal"
+version = "0.4.1"
+dependencies = [
+ "clap",
+ "clap_complete",
+ "clap_complete_nushell",
+ "dirs",
+ "owo-colors",
+ "thiserror",
+ "time 0.3.23",
+ "trash",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[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",
+]
+
+[[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",
+]
+
+[[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 = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[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 = "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 0.48.0",
+]
+
+[[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 = "idna"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[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",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a"
+
+[[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.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 = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[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_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "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 = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
+name = "owo-colors"
+version = "3.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f"
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "78803b62cbf1f46fde80d7c0e803111524b9877184cfe7c3033659490ac7a7da"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
+dependencies = [
+ "proc-macro2",
+]
+
+[[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_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom",
+ "redox_syscall",
+ "thiserror",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac5ffa1efe7548069688cd7028f32591853cd7b5b756d41bcffd2353e4fc75b4"
+dependencies = [
+ "bitflags 2.3.3",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[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.171"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9"
+
+[[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.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15e3fc8c0c74267e2df136e5e5fb656a464158aa57624053375eb9c8c6e25ae2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[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",
+]
+
+[[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 = "trash"
+version = "3.0.1"
+source = "git+https://github.com/TD-Sky/trash-rs?branch=conceal#7c698eeff381472fd3a253aa8b0dd2782d3d68db"
+dependencies = [
+ "chrono",
+ "libc",
+ "log",
+ "objc",
+ "once_cell",
+ "scopeguard",
+ "thiserror",
+ "url",
+ "windows 0.44.0",
+]
+
+[[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.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73"
+
+[[package]]
+name = "unicode-normalization"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+dependencies = [
+ "tinyvec",
+]
+
+[[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 = "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",
+ "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 = "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.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[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.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"
diff --git a/nixpkgs/pkgs/applications/misc/conceal/default.nix b/nixpkgs/pkgs/applications/misc/conceal/default.nix
new file mode 100644
index 000000000000..177162499230
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/conceal/default.nix
@@ -0,0 +1,45 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles, stdenv, testers, conceal }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "conceal";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "TD-Sky";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-zrG4AE8I1nVvEGNvi7tOsqn6yNOqpRmhJzbuJINnJBw=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "trash-3.0.1" = "sha256-6GTdT7pVy9yVMeZglPUS4kub2xVLW1h1uynE6zX3w98=";
+    };
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion \
+      completions/{cnc/cnc,conceal/conceal}.{bash,fish} \
+      --zsh completions/{cnc/_cnc,conceal/_conceal}
+  '';
+
+  # There are not any tests in source project.
+  doCheck = false;
+
+  passthru.tests = testers.testVersion {
+    package = conceal;
+    command = "conceal --version";
+    version = "conceal ${version}";
+  };
+
+  meta = with lib; {
+    description = "A trash collector written in Rust";
+    homepage = "https://github.com/TD-Sky/conceal";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jedsek kashw2 ];
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/conduktor/default.nix b/nixpkgs/pkgs/applications/misc/conduktor/default.nix
new file mode 100644
index 000000000000..6eb0e832bc95
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/conduktor/default.nix
@@ -0,0 +1,52 @@
+{ stdenv, lib, fetchurl, fetchzip, jdk11, unzip, makeWrapper, makeDesktopItem, copyDesktopItems }:
+
+stdenv.mkDerivation rec {
+  pname = "conduktor";
+  version = "2.15.1";
+
+  src = fetchzip {
+    url = "https://github.com/conduktor/builds/releases/download/v${version}/Conduktor-linux-${version}.zip";
+    sha256 = "sha256-9y/7jni5zIITUWd75AxsfG/b5vCYotmeMeC9aYM2WEs=";
+  };
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+
+  desktopItems = makeDesktopItem {
+    type = "Application";
+    name = pname;
+    desktopName = "Conduktor";
+    genericName = meta.description;
+    exec = pname;
+    icon = fetchurl {
+      url = "https://github.com/conduktor/builds/raw/v${version}/.github/resources/Conduktor.png";
+      sha256 = "0s7p74qclvac8xj2m22gfxx5m2c7cf0nqpk5sb049p2wvryhn2j4";
+    };
+    comment = "A beautiful and fully-featured desktop client for Apache Kafka";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/applications
+    mv * $out
+    wrapProgram "$out/bin/conduktor" --set JAVA_HOME "${jdk11.home}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Apache Kafka Desktop Client";
+    longDescription = ''
+      Conduktor is a GUI over the Kafka ecosystem, to make the development
+      and management of Apache Kafka clusters as easy as possible.
+    '';
+    homepage = "https://www.conduktor.io/";
+    changelog = "https://www.conduktor.io/changelog/#${version}";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ trobert ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/confclerk/default.nix b/nixpkgs/pkgs/applications/misc/confclerk/default.nix
new file mode 100644
index 000000000000..84095c416541
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/confclerk/default.nix
@@ -0,0 +1,27 @@
+{ lib, mkDerivation, fetchurl, qtbase, qmake }:
+
+mkDerivation rec {
+  pname = "confclerk";
+  version = "0.7.1";
+
+  src = fetchurl {
+    url = "https://www.toastfreeware.priv.at/tarballs/confclerk/confclerk-${version}.tar.gz";
+    sha256 = "0l5i4d6lymh0k6gzihs41x4i8v1dz0mrwpga096af0vchpvlcarg";
+  };
+
+  buildInputs = [ qtbase ];
+  nativeBuildInputs = [ qmake ];
+
+  postInstall = ''
+    mkdir -p $out/bin
+    mv $out/confclerk $out/bin/
+  '';
+
+  meta = {
+    description = "Offline conference schedule viewer";
+    homepage = "http://www.toastfreeware.priv.at/confclerk";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ ehmry ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/confetty/default.nix b/nixpkgs/pkgs/applications/misc/confetty/default.nix
new file mode 100644
index 000000000000..a9e838c84b01
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/confetty/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule {
+  pname = "confetty";
+  version = "unstable-2022-11-05";
+
+  src = fetchFromGitHub {
+    owner = "maaslalani";
+    repo = "confetty";
+    rev = "6c6f1b5b605f78c3ed3bab2d2a1357c0dd794221";
+    hash = "sha256-1BAszv9I2JDflWyHuAlbJo7+oI7BI/TL10uFIYa8mLk=";
+  };
+
+  vendorHash = "sha256-RymdnueY674Zd231O8CIw/TEIDaWDzc+AaI6yk9hFgc=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Confetti in your TTY";
+    homepage = "https://github.com/maaslalani/confetty";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "confetty";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/confy/default.nix b/nixpkgs/pkgs/applications/misc/confy/default.nix
new file mode 100644
index 000000000000..5d9a97d95425
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/confy/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, blueprint-compiler
+, desktop-file-utils
+, fetchFromSourcehut
+, gobject-introspection
+, gtk4
+, libadwaita
+, libnotify
+, meson
+, ninja
+, pkg-config
+, python3
+, stdenv
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "confy";
+  version = "0.7.1";
+
+  src = fetchFromSourcehut {
+    owner = "~fabrixxm";
+    repo = "confy";
+    rev = finalAttrs.version;
+    hash = "sha256-BXQDnRRt2Kuqc1Gwx6Ba6BoEWhICTCsWWkGlBsStyT8=";
+  };
+
+  nativeBuildInputs = [
+    blueprint-compiler
+    desktop-file-utils
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk4
+    libadwaita
+    libnotify
+    (python3.withPackages (ps: with ps; [
+      icalendar
+      pygobject3
+    ]))
+  ];
+
+  postPatch = ''
+    patchShebangs build-aux/meson/postinstall.py
+  '';
+
+  meta = with lib; {
+    changelog = "https://git.sr.ht/~fabrixxm/confy/refs/${finalAttrs.version}";
+    description = "Conferences schedule viewer";
+    homepage = "https://confy.kirgroup.net/";
+    license = licenses.gpl3Plus;
+    mainProgram = "confy";
+    maintainers = with maintainers; [ michaelgrahamevans ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/coolreader/default.nix b/nixpkgs/pkgs/applications/misc/coolreader/default.nix
new file mode 100644
index 000000000000..a1a63992349e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/coolreader/default.nix
@@ -0,0 +1,27 @@
+{ stdenv, mkDerivation, fetchFromGitHub, cmake, pkg-config, lib,
+  qttools, fribidi, libunibreak }:
+
+mkDerivation rec {
+  pname = "coolreader";
+  version = "3.2.57";
+
+  src = fetchFromGitHub {
+    owner = "buggins";
+    repo = pname;
+    rev = "cr${version}";
+    sha256 = "sha256-ZfgaLCLvBU6xP7nx7YJTsJSpvpdQgLpSMWH+BsG8E1g=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+
+  buildInputs = [ qttools fribidi libunibreak ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://github.com/buggins/coolreader";
+    description = "Cross platform open source e-book reader";
+    license = licenses.gpl2Plus; # see https://github.com/buggins/coolreader/issues/80
+    maintainers = with maintainers; [ gebner ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/copyq/default.nix b/nixpkgs/pkgs/applications/misc/copyq/default.nix
new file mode 100644
index 000000000000..dacb6c3af93d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/copyq/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch2
+, cmake
+, ninja
+, extra-cmake-modules
+, qtbase
+, qtsvg
+, qttools
+, qtdeclarative
+, libXfixes
+, libXtst
+, qtwayland
+, wayland
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "CopyQ";
+  version = "7.1.0";
+
+  src = fetchFromGitHub {
+    owner = "hluk";
+    repo = "CopyQ";
+    rev = "v${version}";
+    hash = "sha256-aAmpFKIIFZLPWUaOcf4V1d/wVQ7xRcnXFsqFjROsabg=";
+  };
+
+  patches = [
+    # itemfakevim: fix build with qt 6.6.0
+    # https://github.com/hluk/CopyQ/pull/2508
+    (fetchpatch2 {
+      url = "https://github.com/hluk/CopyQ/commit/a20bfff0d78296b334ff8cabb047ab5d842b7311.patch";
+      hash = "sha256-F/6cQ8+O1Ttd4EFFxQas5ES6U+qxWdmYqUWRQLsVMa4=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    extra-cmake-modules
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtsvg
+    qttools
+    qtdeclarative
+    libXfixes
+    libXtst
+    qtwayland
+    wayland
+  ];
+
+  postPatch = ''
+    substituteInPlace shared/com.github.hluk.copyq.desktop.in \
+      --replace copyq "$out/bin/copyq"
+  '';
+
+  cmakeFlags = [ "-DWITH_QT6=ON" ];
+
+  meta = with lib; {
+    homepage = "https://hluk.github.io/CopyQ";
+    description = "Clipboard Manager with Advanced Features";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ artturin ];
+    # NOTE: CopyQ supports windows and osx, but I cannot test these.
+    platforms = platforms.linux;
+    mainProgram = "copyq";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/corectrl/default.nix b/nixpkgs/pkgs/applications/misc/corectrl/default.nix
new file mode 100644
index 000000000000..2b17ea756878
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/corectrl/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv
+, fetchFromGitLab
+, extra-cmake-modules
+, botan2
+, karchive
+, kauth
+, libdrm
+, hwdata
+, glxinfo
+, polkit
+, procps
+, util-linux
+, vulkan-tools
+, qtbase
+, qtcharts
+, qtquickcontrols2
+, qtsvg
+, qttools
+, qtxmlpatterns
+, quazip
+, wrapQtAppsHook
+} :
+
+stdenv.mkDerivation rec{
+  pname = "corectrl";
+  version = "1.3.10";
+
+  src = fetchFromGitLab {
+    owner = "corectrl";
+    repo = "corectrl";
+    rev = "v${version}";
+    sha256 = "sha256-fN4dX0Ya2DvPEkuwtKIw1zT+JEbC2zyJKtcGwLVdAUs=";
+  };
+  patches = [
+    ./polkit-dir.patch
+  ];
+
+  nativeBuildInputs = [
+    extra-cmake-modules
+    wrapQtAppsHook
+  ];
+  buildInputs = [
+    botan2
+    karchive
+    kauth
+    libdrm
+    glxinfo
+    polkit
+    procps
+    util-linux
+    vulkan-tools
+    qtbase
+    qtcharts
+    qtquickcontrols2
+    qtsvg
+    qttools
+    qtxmlpatterns
+    quazip
+  ];
+
+  cmakeFlags = [
+    "-DWITH_PCI_IDS_PATH=${hwdata}/share/hwdata/pci.ids"
+    "-DINSTALL_DBUS_FILES_IN_PREFIX=true"
+    "-DPOLKIT_POLICY_INSTALL_DIR=${placeholder "out"}/share/polkit-1/actions"
+  ];
+
+  runtimeDeps = [ hwdata glxinfo vulkan-tools util-linux procps ];
+  binPath = lib.makeBinPath runtimeDeps;
+
+  dontWrapQtApps = true;
+
+  postInstall = ''
+    wrapQtApp $out/bin/corectrl --prefix PATH ":" ${binPath}
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/corectrl/corectrl/";
+    description = "Control your computer hardware via application profiles";
+    longDescription = ''
+      CoreCtrl is a Free and Open Source GNU/Linux application that allows you
+      to control with ease your computer hardware using application profiles. It
+      aims to be flexible, comfortable and accessible to regular users.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
+# TODO: report upstream that libdrm is not detected at configure time
diff --git a/nixpkgs/pkgs/applications/misc/corectrl/polkit-dir.patch b/nixpkgs/pkgs/applications/misc/corectrl/polkit-dir.patch
new file mode 100644
index 000000000000..beaef3b5097e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/corectrl/polkit-dir.patch
@@ -0,0 +1,21 @@
+diff --git a/src/helper/CMakeLists.txt b/src/helper/CMakeLists.txt
+index 3fe2ace..2542ea1 100644
+--- a/src/helper/CMakeLists.txt
++++ b/src/helper/CMakeLists.txt
+@@ -22,15 +22,7 @@ message("D-Bus files will be installed into ${DBUS_DATADIR_PREFIX_DIR}/dbus-1")
+ 
+ # Find polkit
+ pkg_check_modules(POLKIT REQUIRED polkit-gobject-1)
+-execute_process(
+-  COMMAND pkg-config --variable=policydir polkit-gobject-1
+-  RESULT_VARIABLE POLKIT_POLICY_INSTALL_DIR_RESULT
+-  OUTPUT_VARIABLE POLKIT_POLICY_INSTALL_DIR
+-  OUTPUT_STRIP_TRAILING_WHITESPACE
+-)
+-if(NOT POLKIT_POLICY_INSTALL_DIR_RESULT EQUAL "0")
+-  message(FATAL_ERROR "Failed to retrieve Polkit `policydir` variable using pkg-config")
+-endif()
++option(POLKIT_POLICY_INSTALL_DIR "Polkit policy directory")
+ 
+ list(APPEND HELPER_COMPILE_DEFINITIONS
+   ELPP_THREAD_SAFE
diff --git a/nixpkgs/pkgs/applications/misc/cotp/default.nix b/nixpkgs/pkgs/applications/misc/cotp/default.nix
new file mode 100644
index 000000000000..824b4353b35f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cotp/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, AppKit
+, libxcb
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "cotp";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "replydev";
+    repo = "cotp";
+    rev = "v${version}";
+    hash = "sha256-q0SI/y4pSNoU+4aQzpkUNioqrxmLxiA2GD1pmyLUISw=";
+  };
+
+  cargoHash = "sha256-pwhihmrFzb7y4ztXnzJVeMbo5VBoyjJTEDh5ogECLrA=";
+
+  buildInputs = lib.optionals stdenv.isLinux [ libxcb ]
+    ++ lib.optionals stdenv.isDarwin [ AppKit ];
+
+  meta = with lib; {
+    homepage = "https://github.com/replydev/cotp";
+    description = "Trustworthy, encrypted, command-line TOTP/HOTP authenticator app with import functionality";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ davsanchez ];
+    mainProgram = "cotp";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/coursera-dl/default.nix b/nixpkgs/pkgs/applications/misc/coursera-dl/default.nix
new file mode 100644
index 000000000000..f95633f0c896
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/coursera-dl/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, glibcLocales
+, pandoc
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "coursera-dl";
+  version = "0.11.5";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "coursera-dl";
+    repo = "coursera-dl";
+    rev = "refs/tags/${version}";
+    hash = "sha256-c+ElGIrd4ZhMfWtsNHrHRO3HaRRtEQuGlCSBrvPnbyo=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/coursera-dl/coursera-dl/commit/c8796e567698be166cb15f54e095140c1a9b567e.patch";
+      hash = "sha256-e52QPr4XH+HnB49R+nkG0KC9Zf1TbPf92dcP7ts3ih0=";
+    })
+    (fetchpatch {
+      url = "https://github.com/coursera-dl/coursera-dl/commit/6c221706ba828285ca7a30a08708e63e3891b36f.patch";
+      hash = "sha256-/AKFvBPInSq/lsz+G0jVSl/ukVgCnt66oePAb+66AjI=";
+    })
+    # https://github.com/coursera-dl/coursera-dl/pull/857
+    (fetchpatch {
+      name = "python-3.11-compatibility.patch";
+      url = "https://github.com/coursera-dl/coursera-dl/commit/7b0783433b6b198fca9e51405b18386f90790892.patch";
+      hash = "sha256-OpW8gqzrMyaE69qH3uGsB5TNQTYaO7pn3uJ7NU5SrcM=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace '==' '>='
+  '';
+
+  preConfigure = ''
+    export LC_ALL=en_US.utf-8
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    pandoc
+  ];
+
+  buildInputs = with python3.pkgs; [
+    glibcLocales
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    attrs
+    beautifulsoup4
+    configargparse
+    keyring
+    pyasn1
+    requests
+    six
+    urllib3
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+    mock
+  ];
+
+  disabledTests = [
+    "test_get_credentials_with_keyring"
+    "test_quiz_exam_to_markup_converter"
+  ];
+
+  meta = with lib; {
+    description = "CLI for downloading Coursera.org videos and naming them";
+    homepage = "https://github.com/coursera-dl/coursera-dl";
+    changelog = "https://github.com/coursera-dl/coursera-dl/blob/0.11.5/CHANGELOG.md";
+    license = licenses.lgpl3Plus;
+    maintainers = with maintainers; [ alexfmpe ];
+    platforms = platforms.darwin ++ platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/crow-translate/default.nix b/nixpkgs/pkgs/applications/misc/crow-translate/default.nix
new file mode 100644
index 000000000000..5209368a6b22
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/crow-translate/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchzip
+, cmake
+, extra-cmake-modules
+, qttools
+, kwayland
+, leptonica
+, tesseract4
+, qtmultimedia
+, qtx11extras
+, wrapQtAppsHook
+, gst_all_1
+, testers
+, crow-translate
+}:
+
+stdenv.mkDerivation rec {
+  pname = "crow-translate";
+  version = "2.11.1";
+
+  src = fetchzip {
+    url = "https://github.com/${pname}/${pname}/releases/download/${version}/${pname}-${version}-source.tar.gz";
+    hash = "sha256-1rq1pF4tOaZNEaHflxlBuHta80EzD9m3O99geR1EPxE=";
+  };
+
+  postPatch = ''
+    substituteInPlace data/io.crow_translate.CrowTranslate.desktop \
+      --replace "Exec=qdbus" "Exec=${lib.getBin qttools}/bin/qdbus"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    kwayland
+    leptonica
+    tesseract4
+    qtmultimedia
+    qtx11extras
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-bad
+  ]);
+
+  preFixup = ''
+    qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0")
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = crow-translate;
+  };
+
+  meta = with lib; {
+    description = "A simple and lightweight translator that allows to translate and speak text using Google, Yandex and Bing";
+    homepage = "https://crow-translate.github.io/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.linux;
+    mainProgram = "crow";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/crumbs/default.nix b/nixpkgs/pkgs/applications/misc/crumbs/default.nix
new file mode 100644
index 000000000000..7dbcf74faf7e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/crumbs/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "crumbs";
+  version = "0.0.3";
+
+  src = fetchFromGitHub
+    { owner = "fasseg";
+      repo = "crumbs";
+      rev = version;
+      sha256 = "0jjvydn4i4n9xv8vsal2jxpa95mk2lw6myv0gx9wih242k9vy0l7";
+    };
+
+  prePatch = ''
+    sed -i 's|gfind|find|' crumbs-completion.fish
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/bash-completion/completions
+    mkdir -p $out/share/fish/vendor_completions.d
+
+    cp crumbs-completion.bash $out/share/bash-completion/completions/crumbs
+    cp crumbs-completion.fish $out/share/fish/vendor_completions.d/crumbs.fish
+  '';
+
+  meta = with lib;
+    { description = "Bookmarks for the command line";
+      homepage    = "https://github.com/fasseg/crumbs";
+      license     = licenses.wtfpl;
+      platforms   = platforms.all;
+      maintainers = with maintainers; [ thesola10 ];
+      mainProgram = "crumbs";
+    };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ctodo/default.nix b/nixpkgs/pkgs/applications/misc/ctodo/default.nix
new file mode 100644
index 000000000000..315d5ffc34cf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ctodo/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, ncurses, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "ctodo";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "Acolarh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0mqy5b35cbdwfpbs91ilsgz3wc4cky38xfz9pnr4q88q1vybigna";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ ncurses readline ];
+
+  meta = with lib; {
+    homepage = "http://ctodo.apakoh.dk/";
+    description = "A simple ncurses-based task list manager";
+    license = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.unix;
+    mainProgram = "ctodo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubiomes-viewer/default.nix b/nixpkgs/pkgs/applications/misc/cubiomes-viewer/default.nix
new file mode 100644
index 000000000000..3600680782d4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubiomes-viewer/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, qtbase
+, qmake
+, qttools
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "cubiomes-viewer";
+  version = "3.4.2";
+
+  src = fetchFromGitHub {
+    owner = "Cubitect";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-bZXsCRT2qBq7N3h2C7WQDDoQsJGlz3rDT7OZ0fUGtiI=";
+    fetchSubmodules = true;
+  };
+
+  postPatch = ''
+    substituteInPlace cubiomes-viewer.pro \
+      --replace '$$[QT_INSTALL_BINS]/lupdate' lupdate \
+      --replace '$$[QT_INSTALL_BINS]/lrelease' lrelease
+  '';
+
+  buildInputs = [
+    qtbase
+  ];
+
+  nativeBuildInputs = [
+    qmake
+    qttools
+    wrapQtAppsHook
+  ];
+
+  preBuild = ''
+    # QMAKE_PRE_LINK is not executed (I dont know why)
+    make -C ./cubiomes libcubiomes CFLAGS="-DSTRUCT_CONFIG_OVERRIDE=1" all
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp cubiomes-viewer $out/bin
+
+    mkdir -p $out/share/{pixmaps,applications}
+    cp rc/icons/map.png $out/share/pixmaps/com.github.cubitect.cubiomes-viewer.png
+    cp etc/com.github.cubitect.cubiomes-viewer.desktop $out/share/applications
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://github.com/Cubitect/cubiomes-viewer";
+    description = "A graphical Minecraft seed finder and map viewer";
+    longDescription = ''
+      Cubiomes Viewer provides a graphical interface for the efficient and flexible seed-finding
+      utilities provided by cubiomes and a map viewer for the Minecraft biomes and structure generation.
+    '';
+    platforms = platforms.all;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ hqurve ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/coreaction/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreaction/default.nix
new file mode 100644
index 000000000000..b21f001a0a80
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreaction/default.nix
@@ -0,0 +1,33 @@
+{ mkDerivation, lib, fetchFromGitLab, qtsvg, qtbase, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "coreaction";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-qhYuLqWXCpOJCqg+JJ8VQQokNEQVwxpHAtYGITxHZ3Y=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtsvg
+    qtbase
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A side bar for showing widgets from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/coreaction";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corearchiver/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corearchiver/default.nix
new file mode 100644
index 000000000000..590f41a764d0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corearchiver/default.nix
@@ -0,0 +1,34 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, libarchive, libarchive-qt, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corearchiver";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-TKBr/CFY4ixQnJuaN+wJB88s6g4lvQz4rwq9YsccRYk=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libarchive-qt
+    libarchive
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "Archiver from the C Suite to create and extract archives";
+    homepage = "https://gitlab.com/cubocore/coreapps/corearchiver";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corefm/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corefm/default.nix
new file mode 100644
index 000000000000..c618ee100a28
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corefm/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corefm";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-mCFFT/vHzfC4jl1I8SkgaX8qu+AFNNcwUZx4eJeE+i4=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A lightwight filemanager from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/corefm";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/coregarage/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/coregarage/default.nix
new file mode 100644
index 000000000000..4c332c4a9a2b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/coregarage/default.nix
@@ -0,0 +1,34 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, libarchive, libarchive-qt, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "coregarage";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-WCSc3ppYaktj9WnPb4n7SmSNWxT2HiXNmPKS3md3ST4=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libarchive
+    libarchive-qt
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A settings manager for the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/coregarage";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corehunt/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corehunt/default.nix
new file mode 100644
index 000000000000..52c39752afae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corehunt/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corehunt";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Xir1RQG7AlO166lZq1TJssiWoSixY6EfLEjxek+9ifo=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A file finder utility from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/corehunt";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/coreimage/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreimage/default.nix
new file mode 100644
index 000000000000..8ba09d6c9416
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreimage/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "coreimage";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-SyGIeoYC4bTBWZ0adOfYJpWkW3/bvFNZg5zK2MN27kA=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "An image viewer from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/coreimage";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/coreinfo/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreinfo/default.nix
new file mode 100644
index 000000000000..69dbcd33a85f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreinfo/default.nix
@@ -0,0 +1,35 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, libzen, libmediainfo, zlib, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "coreinfo";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-DmvmFMttEvNnIp1zwCe0BLrMx3Wlw1U9LcJwyb4Mx9U=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libzen
+    libmediainfo
+    zlib
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A file information tool from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/coreinfo";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corekeyboard/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corekeyboard/default.nix
new file mode 100644
index 000000000000..734b183c844d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corekeyboard/default.nix
@@ -0,0 +1,35 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, qtx11extras, xorg, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corekeyboard";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Hylz1x9Wsk0iVhpNBFZJChsl3gIvJDICgpITjIXDZAg=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    qtx11extras
+    xorg.libXtst
+    xorg.libX11
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A virtual keyboard for X11 from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/corekeyboard";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corepad/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corepad/default.nix
new file mode 100644
index 000000000000..4b27137980ea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corepad/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corepad";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-qiw6P+I9iAcFcBWiMKAzyxM6waXx/2TPVQHLcLjAnoY=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A document editor from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/corepad";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corepaint/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corepaint/default.nix
new file mode 100644
index 000000000000..958532bb6fce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corepaint/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corepaint";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-ndknVT/gl2P0s3ADW0txiVtAyI/l/ZFWEgufFleS0A4=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A paint app from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/corepaint";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corepdf/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corepdf/default.nix
new file mode 100644
index 000000000000..b7679827f321
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corepdf/default.nix
@@ -0,0 +1,34 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, poppler, qtwebengine, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corepdf";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-t3r/bF/uKoprdDoRjrmYTND0Jws+jX6tAGnBeqofBF8=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    poppler
+    qtwebengine
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A PDF viewer from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/corepdf";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corepins/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corepins/default.nix
new file mode 100644
index 000000000000..e1274c6d6dfe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corepins/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corepins";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-vA2Phs+sEs+Gd73xzj6vb91Krm8q3+koWDM7rCUayTQ=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A bookmarking app from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/corepins";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corerenamer/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corerenamer/default.nix
new file mode 100644
index 000000000000..7d87fc6f4526
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corerenamer/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corerenamer";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-jN1keyo2tDlgUu243173zgChw2nhvbsLPH9af6jDhKs=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A batch file renamer from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/corerenamer";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/coreshot/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreshot/default.nix
new file mode 100644
index 000000000000..183765f63511
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreshot/default.nix
@@ -0,0 +1,33 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, qtx11extras, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "coreshot";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-XPECvwZkJIoN/r5oFWJpgl/WASpybgLjCK/F0XVMHyU=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    qtx11extras
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A screen capture utility from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/coreshot";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corestats/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corestats/default.nix
new file mode 100644
index 000000000000..8dd6f1089d45
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corestats/default.nix
@@ -0,0 +1,33 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, lm_sensors, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corestats";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-584dSlXhPfvTBeDjex1o2TZPoG40tl1fNDiIYqjyzOI=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    lm_sensors
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A system resource viewer from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/corestats";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corestuff/0001-fix-installPhase.patch b/nixpkgs/pkgs/applications/misc/cubocore-packages/corestuff/0001-fix-installPhase.patch
new file mode 100644
index 000000000000..d1db6a0a0a2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corestuff/0001-fix-installPhase.patch
@@ -0,0 +1,11 @@
+--- a/corestuff/CMakeLists.txt	2022-01-29 14:09:02.699700817 +0700
++++ b/CMakeLists.txt	2022-01-29 14:09:23.211754633 +0700
+@@ -120,8 +120,3 @@
+ install( FILES org.cubocore.CoreStuff.desktop DESTINATION share/applications )
+ install( FILES org.cubocore.CoreStuff.svg DESTINATION share/icons/hicolor/scalable/apps/ )
+ install( FILES background/default.svg DESTINATION share/coreapps/background )
+-
+-if ( DEFINED ADD_AUTOSTART )
+-	message("INSTALLING TO AUTOSTART LOCATION")
+-	install( FILES org.cubocore.CoreStuff.desktop DESTINATION /etc/xdg/autostart )
+-endif()
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/corestuff/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/corestuff/default.nix
new file mode 100644
index 000000000000..a2946485ab56
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/corestuff/default.nix
@@ -0,0 +1,40 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, qtx11extras, kglobalaccel, xorg, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "corestuff";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-2tnJMBbROGWZQDWjy/xGBNkv7DXXKLWrHf2XnMjOjWQ=";
+  };
+
+  patches = [
+    # Remove autostart
+    ./0001-fix-installPhase.patch
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    qtx11extras
+    kglobalaccel
+    xorg.libXcomposite
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "An activity viewer from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/corestuff";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/coreterminal/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreterminal/default.nix
new file mode 100644
index 000000000000..30570f5e91e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreterminal/default.nix
@@ -0,0 +1,44 @@
+{ mkDerivation
+, lib
+, fetchFromGitLab
+, qtbase
+, qtserialport
+, qtermwidget
+, cmake
+, ninja
+, libcprime
+, libcsys
+}:
+
+mkDerivation rec {
+  pname = "coreterminal";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zMSE1gQ2HJQCqil3MB4slRe0Cojv2XRLd8wLTokF8H0=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    qtserialport
+    qtermwidget
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A terminal emulator from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/coreterminal";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/coretime/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/coretime/default.nix
new file mode 100644
index 000000000000..c2a717453e78
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/coretime/default.nix
@@ -0,0 +1,33 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, qtmultimedia, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "coretime";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-0x3014UG861lXRwIBpYiiYVPmhln9Q20jJ4tIO50Tjs=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    qtmultimedia
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "A time related task manager from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/coretime";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/coretoppings/0001-fix-install-phase.patch b/nixpkgs/pkgs/applications/misc/cubocore-packages/coretoppings/0001-fix-install-phase.patch
new file mode 100644
index 000000000000..3c0c942ee43a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/coretoppings/0001-fix-install-phase.patch
@@ -0,0 +1,8 @@
+--- a/corepkit/CMakeLists.txt	2021-12-25 17:52:20.000000000 +0700
++++ b/corepkit/CMakeLists.txt	2021-12-29 17:58:09.298024297 +0700
+@@ -32,4 +32,4 @@
+ target_link_libraries( corepkit  Qt5::Core )
+ 
+ install( TARGETS corepkit DESTINATION libexec/coreapps/ )
+-install( FILES org.cubocore.coreapps.policy DESTINATION share/polkit-1/actions/ )
++install( FILES org.cubocore.coreapps.policy DESTINATION ${CMAKE_INSTALL_PREFIX}/usr/share/polkit-1/actions/ )
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/coretoppings/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/coretoppings/default.nix
new file mode 100644
index 000000000000..920850cc6021
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/coretoppings/default.nix
@@ -0,0 +1,87 @@
+{ mkDerivation
+, lib
+, fetchFromGitLab
+, ffmpeg
+, cmake
+, ninja
+, qtbase
+, qtx11extras
+, qtconnectivity
+, v4l-utils
+, grim
+, wf-recorder
+, libdbusmenu
+, playerctl
+, xorg
+, iio-sensor-proxy
+, inotify-tools
+, bluez
+, networkmanager
+, connman
+, redshift
+, gawk
+, polkit
+, libnotify
+, systemd
+, xdg-utils
+, libcprime
+, libcsys
+}:
+
+mkDerivation rec {
+  pname = "coretoppings";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-IYUkPGgFGI6889IyromMBobIoqSZtALVsSswQ7O1Bp0=";
+  };
+
+  patches = [
+    # Fix file cannot create directory: /var/empty/share/polkit-1/actions
+    ./0001-fix-install-phase.patch
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    qtx11extras
+    qtconnectivity
+    libdbusmenu
+    ffmpeg
+    v4l-utils
+    grim
+    wf-recorder
+    playerctl
+    xorg.xrandr
+    xorg.xinput
+    xorg.libXdamage
+    iio-sensor-proxy
+    inotify-tools
+    bluez
+    networkmanager
+    connman
+    redshift
+    gawk
+    polkit
+    libnotify
+    systemd
+    xdg-utils
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "Additional features,plugins etc for CuboCore Application Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/coretoppings";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/coreuniverse/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreuniverse/default.nix
new file mode 100644
index 000000000000..8eb056f7772c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/coreuniverse/default.nix
@@ -0,0 +1,32 @@
+{ mkDerivation, lib, fetchFromGitLab, qtbase, cmake, ninja, libcprime, libcsys }:
+
+mkDerivation rec {
+  pname = "coreuniverse";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore/coreapps";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-SjD37+uLKJrPvjxK0douNgGCUq9He3EK86takZlrX7Q=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    libcprime
+    libcsys
+  ];
+
+  meta = with lib; {
+    description = "Shows information about apps from the C Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/coreuniverse";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/libcprime/0001-fix-application-dirs.patch b/nixpkgs/pkgs/applications/misc/cubocore-packages/libcprime/0001-fix-application-dirs.patch
new file mode 100644
index 000000000000..08214c30a887
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/libcprime/0001-fix-application-dirs.patch
@@ -0,0 +1,31 @@
+From a63a4b6de9ba730e10b54f4b5ce454edb10c7c39 Mon Sep 17 00:00:00 2001
+From: dyrnade <gurescicem@gmail.com>
+Date: Wed, 1 Feb 2023 22:28:02 +0100
+Subject: [PATCH] fix application dirs
+
+---
+ cprime/systemxdg.cpp | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/cprime/systemxdg.cpp b/cprime/systemxdg.cpp
+index 4c40d4c..5dbb6ff 100644
+--- a/cprime/systemxdg.cpp
++++ b/cprime/systemxdg.cpp
+@@ -372,9 +372,10 @@ void SystemXdgMime::setApplicationAsDefault(QString appFileName, QString mimetyp
+ 
+ SystemXdgMime::SystemXdgMime()
+ {
+-    appsDirs << QDir::home().filePath(".local/share/applications/");
+-    appsDirs << QDir::root().filePath("usr/local/share/applications/") << QDir::root().filePath("usr/share/applications/");
+-    appsDirs << QDir::root().filePath("usr/share/applications/kde4/") << QDir::root().filePath("usr/share/gnome/applications/");
++    appsDirs << QDir::home().filePath(".nix-profile/share/applications/");
++    appsDirs << "/run/current-system/sw/share/applications/";
++    appsDirs << "/run/current-system/sw/share/applications/kde4/";
++    appsDirs << "/run/current-system/sw/share/gnome/applications/";
+ }
+ 
+ 
+-- 
+2.39.0
+
+
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/libcprime/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/libcprime/default.nix
new file mode 100644
index 000000000000..90df8e546e7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/libcprime/default.nix
@@ -0,0 +1,44 @@
+{ mkDerivation
+, lib
+, fetchFromGitLab
+, libnotify
+, cmake
+, ninja
+, qtbase
+, qtconnectivity
+}:
+
+mkDerivation rec {
+  pname = "libcprime";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-j6WFLcjDMkYl+9HCmhMRttwtjNX05oP5mfdOsoLC7og=";
+  };
+
+  patches = [
+    ./0001-fix-application-dirs.patch
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    qtconnectivity
+    libnotify
+  ];
+
+  meta = with lib; {
+    description = "A library for bookmarking, saving recent activites, managing settings of C-Suite";
+    homepage = "https://gitlab.com/cubocore/coreapps/libcprime";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cubocore-packages/libcsys/default.nix b/nixpkgs/pkgs/applications/misc/cubocore-packages/libcsys/default.nix
new file mode 100644
index 000000000000..3a36c40fd281
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cubocore-packages/libcsys/default.nix
@@ -0,0 +1,31 @@
+{ mkDerivation, lib, fetchFromGitLab, udisks2, qtbase, cmake, ninja }:
+
+mkDerivation rec {
+  pname = "libcsys";
+  version = "4.5.0";
+
+  src = fetchFromGitLab {
+    owner = "cubocore";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-1MHyx01w+dCeAeumcSXRBStgAec2yu1rLwaZaCXRgTc=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    qtbase
+    udisks2
+  ];
+
+  meta = with lib; {
+    description = "Library for managing drive and getting system resource information in real time";
+    homepage = "https://gitlab.com/cubocore/libcsys";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dan4ik605743 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cum/default.nix b/nixpkgs/pkgs/applications/misc/cum/default.nix
new file mode 100644
index 000000000000..d49987c82858
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cum/default.nix
@@ -0,0 +1,36 @@
+{ lib, python3Packages, fetchPypi }:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "cum";
+  version = "0.9.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "15qc6agka2g3kcnpnz0hbjic1s3260cr9bda0rlcyninxs1vndq0";
+  };
+
+  propagatedBuildInputs = [
+    alembic beautifulsoup4 click natsort requests sqlalchemy
+  ];
+
+  # tests seem to fail for `config` not being defined,
+  # but it works once installed
+  doCheck = false;
+
+  # remove the top-level `tests` and `LICENSE` file
+  # they should not be installed, and there can be issues if another package
+  # has a collision (especially with the license file)
+  postInstall = ''
+    rm -rf $out/tests $out/LICENSE
+  '';
+
+  meta = with lib; {
+    description = "comic updater, mangafied";
+    homepage = "https://github.com/Hamuko/cum";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ tadeokondrak ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cura/default.nix b/nixpkgs/pkgs/applications/misc/cura/default.nix
new file mode 100644
index 000000000000..31202a4be6e3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/default.nix
@@ -0,0 +1,65 @@
+{ mkDerivation, lib, fetchFromGitHub, cmake, python3, qtbase,
+ qtquickcontrols2, qtgraphicaleffects, curaengine, plugins ? [] }:
+
+mkDerivation rec {
+  pname = "cura";
+  version = "4.13.1";
+
+  src = fetchFromGitHub {
+    owner = "Ultimaker";
+    repo = "Cura";
+    rev = version;
+    sha256 = "sha256-R88SdAxx3tkQCDInrFTKad1tPSDTSYaVAPUVmdk94Xk=";
+  };
+
+  materials = fetchFromGitHub {
+    owner = "Ultimaker";
+    repo = "fdm_materials";
+    rev = "4.13.2";
+    sha256 = "sha256-7y4OcbeQHv+loJ4cMgPU0e818Zsv90EwARdztNWS8zM=";
+  };
+
+  buildInputs = [ qtbase qtquickcontrols2 qtgraphicaleffects ];
+  propagatedBuildInputs = with python3.pkgs; [
+    libsavitar numpy-stl pyserial requests uranium zeroconf pynest2d
+    sentry-sdk trimesh keyring
+  ] ++ plugins;
+  nativeBuildInputs = [ cmake python3.pkgs.wrapPython ];
+
+  cmakeFlags = [
+    "-DURANIUM_DIR=${python3.pkgs.uranium.src}"
+    "-DCURA_VERSION=${version}"
+  ];
+
+  makeWrapperArgs = [
+    # hacky workaround for https://github.com/NixOS/nixpkgs/issues/59901
+    "--set OMP_NUM_THREADS 1"
+  ];
+
+  postPatch = ''
+    sed -i 's,/python''${PYTHON_VERSION_MAJOR}/dist-packages,/python''${PYTHON_VERSION_MAJOR}.''${PYTHON_VERSION_MINOR}/site-packages,g' CMakeLists.txt
+    sed -i 's, executable_name = .*, executable_name = "${curaengine}/bin/CuraEngine",' plugins/CuraEngineBackend/CuraEngineBackend.py
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/cura/resources/materials
+    cp ${materials}/*.fdm_material $out/share/cura/resources/materials/
+    mkdir -p $out/lib/cura/plugins
+    for plugin in ${toString plugins}; do
+      ln -s $plugin/lib/cura/plugins/* $out/lib/cura/plugins
+    done
+  '';
+
+  postFixup = ''
+    wrapPythonPrograms
+    wrapQtApp $out/bin/cura
+  '';
+
+  meta = with lib; {
+    description = "3D printer / slicing GUI built on top of the Uranium framework";
+    homepage = "https://github.com/Ultimaker/Cura";
+    license = licenses.lgpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/cura/plugins.nix b/nixpkgs/pkgs/applications/misc/cura/plugins.nix
new file mode 100644
index 000000000000..95d3a2aa9333
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/cura/plugins.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages, libspnav, jq }:
+
+let
+
+  self = {
+
+    octoprint = stdenv.mkDerivation rec {
+      pname = "Cura-OctoPrintPlugin";
+      version = "3.5.18";
+
+      src = fetchFromGitHub {
+        owner = "fieldOfView";
+        repo = pname;
+        rev = "7bd73946fbf22d18337dc900a81a011ece26bee0";
+        sha256 = "057b2f5f49p96lkh2wsr9w6yh2003x4a85irqsgbzp6igmk8imdn";
+      };
+
+      propagatedBuildInputs = with python3Packages; [
+        netifaces
+      ];
+
+      installPhase = ''
+        mkdir -p $out/lib/cura/plugins/OctoPrintPlugin
+        cp -rv . $out/lib/cura/plugins/OctoPrintPlugin/
+      '';
+
+      meta = with lib; {
+        description = "Enables printing directly to OctoPrint and monitoring the process";
+        homepage = "https://github.com/fieldOfView/Cura-OctoPrintPlugin";
+        license = licenses.agpl3;
+        maintainers = with maintainers; [ gebner ];
+      };
+    };
+
+    rawmouse = stdenv.mkDerivation rec {
+      pname = "RawMouse";
+      version = "1.1.0";
+
+      src = fetchFromGitHub {
+        owner = "smartavionics";
+        repo = pname;
+        rev = version;
+        sha256 = "0hvi7qwd4xfnqnhbj9dgfjmvv9df7s42asf3fdfxv43n6nx74scw";
+      };
+
+      nativeBuildInputs = [ jq ];
+
+      propagatedBuildInputs = with python3Packages; [
+        hidapi
+      ];
+
+      buildPhase = ''
+        jq 'del(.devices) | .libspnav="${libspnav}/lib/libspnav.so"' \
+          <RawMouse/config.json >RawMouse/config.json.new
+        mv RawMouse/config.json.new RawMouse/config.json
+
+        # remove prebuilt binaries
+        rm -r RawMouse/hidapi
+      '';
+
+      installPhase = ''
+        mkdir -p $out/lib/cura/plugins/RawMouse
+        cp -rv . $out/lib/cura/plugins/RawMouse/
+      '';
+
+      meta = with lib; {
+        description = "Cura plugin for HID mice such as 3Dconnexion spacemouse";
+        homepage = "https://github.com/smartavionics/RawMouse";
+        license = licenses.agpl3Plus;
+        maintainers = with maintainers; [ gebner ];
+      };
+    };
+
+  };
+
+in self
diff --git a/nixpkgs/pkgs/applications/misc/curaengine/default.nix b/nixpkgs/pkgs/applications/misc/curaengine/default.nix
new file mode 100644
index 000000000000..1155ce8e8e8e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/curaengine/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libarcus, stb, protobuf, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "curaengine";
+  version = "4.13.1";
+
+  src = fetchFromGitHub {
+    owner = "Ultimaker";
+    repo = "CuraEngine";
+    rev = version;
+    sha256 = "sha256-dx0Q6cuA66lG4nwR7quW5Tvs9sdxjdV4gtpxXirI4nY=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libarcus stb protobuf ];
+
+  cmakeFlags = [ "-DCURA_ENGINE_VERSION=${version}" ];
+
+  # TODO already fixed in master, remove in next release
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/Ultimaker/CuraEngine/commit/de60e86a6ea11cb7d121471b5dd192e5deac0f3d.patch";
+      hash = "sha256-/gT9yErIDDYAXvZ6vX5TGlwljy31K563+sqkm1UGljQ=";
+      includes = [ "src/utils/math.h" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "A powerful, fast and robust engine for processing 3D models into 3D printing instruction";
+    homepage = "https://github.com/Ultimaker/CuraEngine";
+    license = licenses.agpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar gebner ];
+    mainProgram = "CuraEngine";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/curaengine/stable.nix b/nixpkgs/pkgs/applications/misc/curaengine/stable.nix
new file mode 100644
index 000000000000..6bddfabfb5bb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/curaengine/stable.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "curaengine";
+  version = "15.04.6";
+
+  src = fetchFromGitHub {
+    owner = "Ultimaker";
+    repo = "CuraEngine";
+    rev = version;
+    sha256 = "sha256-8V21TRSqCN+hkTlz51d5A5oK5JOwEtx+ROt8cfJBL/0=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace "--static" ""
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp build/CuraEngine $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Engine for processing 3D models into 3D printing instructions";
+    homepage = "https://github.com/Ultimaker/CuraEngine";
+    license = licenses.agpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/darkman/default.nix b/nixpkgs/pkgs/applications/misc/darkman/default.nix
new file mode 100644
index 000000000000..1b33b9fac3ed
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/darkman/default.nix
@@ -0,0 +1,49 @@
+{ lib, fetchFromGitLab, buildGoModule, scdoc, nix-update-script }:
+
+buildGoModule rec {
+  pname = "darkman";
+  version = "1.5.4";
+
+  src = fetchFromGitLab {
+    owner = "WhyNotHugo";
+    repo = "darkman";
+    rev = "v${version}";
+    sha256 = "sha256-6SNXVe6EfVwcXH9O6BxNw+v4/uhKhCtVS3XE2GTc2Sc=";
+  };
+
+  vendorHash = "sha256-xEPmNnaDwFU4l2G4cMvtNeQ9KneF5g9ViQSFrDkrafY=";
+
+  nativeBuildInputs = [ scdoc ];
+
+  postPatch = ''
+    substituteInPlace darkman.service \
+      --replace "/usr/bin/darkman" "$out/bin/darkman"
+    substituteInPlace contrib/dbus/nl.whynothugo.darkman.service \
+      --replace "/usr/bin/darkman" "$out/bin/darkman"
+    substituteInPlace contrib/dbus/org.freedesktop.impl.portal.desktop.darkman.service \
+      --replace "/usr/bin/darkman" "$out/bin/darkman"
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+    make build
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    make PREFIX=$out install
+    runHook postInstall
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Framework for dark-mode and light-mode transitions on Linux desktop";
+    homepage = "https://gitlab.com/WhyNotHugo/darkman";
+    license = licenses.isc;
+    maintainers = [ maintainers.ajgrf ];
+    platforms = platforms.linux;
+    mainProgram = "darkman";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dasel/default.nix b/nixpkgs/pkgs/applications/misc/dasel/default.nix
new file mode 100644
index 000000000000..75ffbb9080bd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dasel/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "dasel";
+  version = "2.6.0";
+
+  src = fetchFromGitHub {
+    owner = "TomWright";
+    repo = "dasel";
+    rev = "v${version}";
+    hash = "sha256-4SINZXjTILJDmjv6ubuAhBzBmrXY0gJ0huNM3Y0O7Go=";
+  };
+
+  vendorHash = "sha256-G9IdTMF5Lnwq38rdJtuvUjD4RBaSmCYs3g+ETz29Mec=";
+
+  ldflags = [
+    "-s" "-w" "-X github.com/tomwright/dasel/v2/internal.Version=${version}"
+  ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd dasel \
+      --bash <($out/bin/dasel completion bash) \
+      --fish <($out/bin/dasel completion fish) \
+      --zsh <($out/bin/dasel completion zsh)
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    if [[ $($out/bin/dasel --version) == "dasel version ${version}" ]]; then
+      echo '{ "my": { "favourites": { "colour": "blue" } } }' \
+        | $out/bin/dasel put -t json -r json -t string -v "red" "my.favourites.colour" \
+        | grep "red"
+    else
+      return 1
+    fi
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    description = "Query and update data structures from the command line";
+    longDescription = ''
+      Dasel (short for data-selector) allows you to query and modify data structures using selector strings.
+      Comparable to jq / yq, but supports JSON, YAML, TOML and XML with zero runtime dependencies.
+    '';
+    homepage = "https://github.com/TomWright/dasel";
+    changelog = "https://github.com/TomWright/dasel/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    mainProgram = "dasel";
+    maintainers = with maintainers; [ _0x4A6F ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/databricks-sql-cli/default.nix b/nixpkgs/pkgs/applications/misc/databricks-sql-cli/default.nix
new file mode 100644
index 000000000000..ae118501f47d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/databricks-sql-cli/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "databricks-sql-cli";
+  version = "0.1.4";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "databricks";
+    repo = "databricks-sql-cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-gr7LJfnvIu2Jf1XgILqfZoi8CbXeQyq0g1wLEBa5TPM=";
+  };
+
+  patches = [
+    # https://github.com/databricks/databricks-sql-cli/pull/38
+    (fetchpatch {
+      url = "https://github.com/databricks/databricks-sql-cli/commit/fc294e00819b6966f1605e5c1ce654473510aefe.patch";
+      sha256 = "sha256-QVrb7mD0fVbHrbrDywI6tsFNYM19x74LY8rhqqC8szE=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace 'python = ">=3.7.1,<4.0"' 'python = ">=3.8,<4.0"' \
+      --replace 'pandas = "1.3.4"' 'pandas = "~1.5"'
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    cli-helpers
+    click
+    configobj
+    databricks-sql-connector
+    pandas
+    prompt-toolkit
+    pygments
+    sqlparse
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  meta = with lib; {
+    description = "CLI for querying Databricks SQL";
+    homepage = "https://github.com/databricks/databricks-sql-cli";
+    changelog = "https://github.com/databricks/databricks-sql-cli/releases/tag/v${version}";
+    license = licenses.databricks;
+    maintainers = with maintainers; [ kfollesdal ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dbeaver/default.nix b/nixpkgs/pkgs/applications/misc/dbeaver/default.nix
new file mode 100644
index 000000000000..bd4504611758
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dbeaver/default.nix
@@ -0,0 +1,140 @@
+{ lib
+, stdenv
+, copyDesktopItems
+, fetchFromGitHub
+, makeDesktopItem
+, makeWrapper
+, fontconfig
+, freetype
+, glib
+, gtk3
+, jdk17
+, libX11
+, libXrender
+, libXtst
+, zlib
+, maven
+, webkitgtk
+, glib-networking
+}:
+
+let
+  mavenJdk17 = maven.override {
+    jdk = jdk17;
+  };
+in
+mavenJdk17.buildMavenPackage rec {
+  pname = "dbeaver";
+  version = "22.2.2"; # When updating also update mvnHash
+
+  src = fetchFromGitHub {
+    owner = "dbeaver";
+    repo = "dbeaver";
+    rev = version;
+    hash = "sha256-TUdtrhQ1JzqZx+QNauNA1P/+WDSSeOGIgGX3SdS0JTI=";
+  };
+
+  mvnHash = "sha256-ERZYDsPxp1YXteSmunFIgTGZUYqjZJhqrNytLnIUNBQ=";
+  mvnParameters = "-P desktop,all-platforms";
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+  ];
+
+  buildInputs = [
+    fontconfig
+    freetype
+    glib
+    gtk3
+    jdk17
+    libX11
+    libXrender
+    libXtst
+    zlib
+  ] ++ lib.optionals stdenv.isLinux [
+    webkitgtk
+    glib-networking
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "dbeaver";
+      exec = "dbeaver";
+      icon = "dbeaver";
+      desktopName = "dbeaver";
+      comment = "SQL Integrated Development Environment";
+      genericName = "SQL Integrated Development Environment";
+      categories = [ "Development" ];
+    })
+  ];
+
+  installPhase =
+    let
+      productTargetPath = "product/community/target/products/org.jkiss.dbeaver.core.product";
+
+      platformMap = {
+        aarch64-darwin = "aarch64";
+        aarch64-linux = "aarch64";
+        x86_64-darwin = "x86_64";
+        x86_64-linux = "x86_64";
+      };
+
+      systemPlatform = platformMap.${stdenv.hostPlatform.system} or (throw "dbeaver not supported on ${stdenv.hostPlatform.system}");
+    in
+    if stdenv.isDarwin then ''
+      runHook preInstall
+
+      mkdir -p $out/Applications $out/bin
+      cp -r ${productTargetPath}/macosx/cocoa/${systemPlatform}/DBeaver.app $out/Applications
+
+      sed -i "/^-vm/d; /bin\/java/d" $out/Applications/DBeaver.app/Contents/Eclipse/dbeaver.ini
+
+      ln -s $out/Applications/DBeaver.app/Contents/MacOS/dbeaver $out/bin/dbeaver
+
+      wrapProgram $out/Applications/DBeaver.app/Contents/MacOS/dbeaver \
+        --prefix JAVA_HOME : ${jdk17.home} \
+        --prefix PATH : ${jdk17}/bin
+
+      runHook postInstall
+    '' else ''
+      runHook preInstall
+
+      mkdir -p $out/
+      cp -r ${productTargetPath}/linux/gtk/${systemPlatform}/dbeaver $out/dbeaver
+
+      # Patch binaries.
+      interpreter=$(cat $NIX_CC/nix-support/dynamic-linker)
+      patchelf --set-interpreter $interpreter $out/dbeaver/dbeaver
+
+      makeWrapper $out/dbeaver/dbeaver $out/bin/dbeaver \
+        --prefix PATH : ${jdk17}/bin \
+        --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath ([ glib gtk3 libXtst webkitgtk glib-networking ])} \
+        --prefix GIO_EXTRA_MODULES : "${glib-networking}/lib/gio/modules" \
+        --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
+
+      mkdir -p $out/share/pixmaps
+      ln -s $out/dbeaver/icon.xpm $out/share/pixmaps/dbeaver.xpm
+
+      runHook postInstall
+    '';
+
+  meta = with lib; {
+    homepage = "https://dbeaver.io/";
+    description = "Universal SQL Client for developers, DBA and analysts. Supports MySQL, PostgreSQL, MariaDB, SQLite, and more";
+    longDescription = ''
+      Free multi-platform database tool for developers, SQL programmers, database
+      administrators and analysts. Supports all popular databases: MySQL,
+      PostgreSQL, MariaDB, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access,
+      Teradata, Firebird, Derby, etc.
+    '';
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode # dependencies from maven
+    ];
+    license = licenses.asl20;
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ];
+    maintainers = with maintainers; [ jojosch mkg20001 ];
+    mainProgram = "dbeaver";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dbx/default.nix b/nixpkgs/pkgs/applications/misc/dbx/default.nix
new file mode 100644
index 000000000000..e7c72f328559
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dbx/default.nix
@@ -0,0 +1,101 @@
+{ lib
+, fetchFromGitHub
+, git
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "dbx";
+  version = "0.8.18";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "databrickslabs";
+    repo = "dbx";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-5qjEABNTSUD9I2uAn49HQ4n+gbAcmfnqS4Z2M9MvFXQ=";
+  };
+
+  pythonRelaxDeps = [
+    "rich"
+    "typer"
+  ];
+
+  pythonRemoveDeps = [
+    "mlflow-skinny"
+  ];
+
+  nativeBuildInputs = with python3.pkgs; [
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiohttp
+    click
+    cookiecutter
+    cryptography
+    databricks-cli
+    jinja2
+    mlflow
+    pathspec
+    pydantic
+    pyyaml
+    requests
+    retry
+    rich
+    tenacity
+    typer
+    watchdog
+  ] ++ typer.optional-dependencies.all;
+
+  passthru.optional-dependencies = with python3.pkgs; {
+    aws = [
+      boto3
+    ];
+    azure = [
+      azure-storage-blob
+      azure-identity
+    ];
+    gcp = [
+      google-cloud-storage
+    ];
+  };
+
+  nativeCheckInputs = [
+    git
+  ] ++ (with python3.pkgs; [
+    pytest-asyncio
+    pytest-mock
+    pytest-timeout
+    pytestCheckHook
+  ]);
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+    export PATH="$PATH:$out/bin"
+  '';
+
+  pytestFlagsArray = [
+    "tests/unit"
+  ];
+
+  disabledTests = [
+    # Fails because of dbfs CLI wrong call
+    "test_dbfs_unknown_user"
+    "test_dbfs_no_root"
+    # Requires pylint, prospector, pydocstyle
+    "test_python_basic_sanity_check"
+  ];
+
+  pythonImportsCheck = [
+    "dbx"
+  ];
+
+  meta = with lib; {
+    description = "CLI tool for advanced Databricks jobs management";
+    homepage = "https://github.com/databrickslabs/dbx";
+    changelog = "https://github.com/databrickslabs/dbx/blob/v${version}/CHANGELOG.md";
+    license = licenses.databricks-dbx;
+    maintainers = with maintainers; [ GuillaumeDesforges ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ddcui/default.nix b/nixpkgs/pkgs/applications/misc/ddcui/default.nix
new file mode 100644
index 000000000000..ffcd26afc9e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ddcui/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, pkg-config
+, qtbase
+, qttools
+, ddcutil
+}:
+
+mkDerivation rec {
+  pname = "ddcui";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "rockowitz";
+    repo = "ddcui";
+    rev = "v${version}";
+    sha256 = "sha256-T4/c8K1P/o91DWJik/9HtHav948vbVa40qPdy7nKmos=";
+  };
+
+  nativeBuildInputs = [
+    # Using cmake instead of the also-supported qmake because ddcui's qmake
+    # file is not currently written to support PREFIX installations.
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    qtbase
+    qttools
+    ddcutil
+  ];
+
+  meta = with lib; {
+    description = "Graphical user interface for ddcutil - control monitor settings";
+    homepage = "https://www.ddcutil.com/ddcui_main/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ nh2 ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ddgr/default.nix b/nixpkgs/pkgs/applications/misc/ddgr/default.nix
new file mode 100644
index 000000000000..04f27117f8e2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ddgr/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, python3, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  version = "2.2";
+  pname = "ddgr";
+
+  src = fetchFromGitHub {
+    owner = "jarun";
+    repo = "ddgr";
+    rev = "v${version}";
+    sha256 = "sha256-88cCQm3eViy0OwSyCTlnW7uuiFwz2/6Wz45QzxCgXxg=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ python3 ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    installShellCompletion --bash --name ddgr.bash auto-completion/bash/ddgr-completion.bash
+    installShellCompletion --fish auto-completion/fish/ddgr.fish
+    installShellCompletion --zsh auto-completion/zsh/_ddgr
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jarun/ddgr";
+    description = "Search DuckDuckGo from the terminal";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ceedubs markus1189 ];
+    platforms = python3.meta.platforms;
+    mainProgram = "ddgr";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/deadd-notification-center/default.nix b/nixpkgs/pkgs/applications/misc/deadd-notification-center/default.nix
new file mode 100644
index 000000000000..5551ebe1750f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/deadd-notification-center/default.nix
@@ -0,0 +1,64 @@
+{ mkDerivation, haskellPackages, fetchFromGitHub, lib }:
+
+let
+  # deadd-notification-center.service
+  systemd-service = ''
+    [Unit]
+    Description=Deadd Notification Center
+    PartOf=graphical-session.target
+
+    [Service]
+    Type=dbus
+    BusName=org.freedesktop.Notifications
+    ExecStart=$out/bin/deadd-notification-center
+
+    [Install]
+    WantedBy=graphical-session.target
+  '';
+in mkDerivation rec {
+  pname = "deadd-notification-center";
+  version = "2.1.1";
+
+  src = fetchFromGitHub {
+    owner = "phuhl";
+    repo = "linux_notification_center";
+    rev = version;
+    hash = "sha256-VU9NaQVS0n8hFRjWMvCMkaF5mZ4hpnluV31+/SAK7tU=";
+  };
+
+  isLibrary = false;
+
+  isExecutable = true;
+
+  libraryHaskellDepends = with haskellPackages; [
+    aeson base bytestring ConfigFile containers dbus directory env-locale
+    filepath gi-cairo gi-gdk gi-gdkpixbuf gi-gio gi-glib gi-gobject
+    gi-gtk gi-pango haskell-gettext haskell-gi haskell-gi-base
+    hdaemonize here lens mtl process regex-tdfa setlocale split stm
+    tagsoup text time transformers tuple unix yaml
+  ];
+
+  executableHaskellDepends = with haskellPackages; [ base ];
+
+  # Test suite does nothing.
+  doCheck = false;
+
+  postPatch = ''
+    substituteInPlace src/NotificationCenter.hs \
+      --replace '/etc/xdg/deadd/deadd.css' "$out/etc/deadd.css"
+  '';
+
+  # Add systemd user unit and install default style.
+  postInstall = ''
+    mkdir -p $out/lib/systemd/user
+    install -Dm644 style.css $out/etc/deadd.css
+    echo "${systemd-service}" > $out/lib/systemd/user/deadd-notification-center.service
+  '';
+
+  description = "A haskell-written notification center for users that like a desktop with style";
+  homepage = "https://github.com/phuhl/linux_notification_center";
+  license = lib.licenses.bsd3;
+  maintainers = with lib.maintainers; [ melkor333 sna ];
+  platforms = lib.platforms.linux;
+  mainProgram = "deadd-notification-center";
+}
diff --git a/nixpkgs/pkgs/applications/misc/debian-goodies/default.nix b/nixpkgs/pkgs/applications/misc/debian-goodies/default.nix
new file mode 100644
index 000000000000..897881dec46c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/debian-goodies/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, curl
+, dialog
+, installShellFiles
+, perl
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "debian-goodies";
+  version = "0.88.1";
+
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "debian";
+    repo = "debian-goodies";
+    rev = "debian/${version}";
+    sha256 = "sha256-g1xeWhCkC7HEHHOJpcZ6JFA9jmavJE0lUX1Cmp5A0QQ=";
+  };
+
+  postPatch = ''
+    substituteInPlace debmany/debmany \
+      --replace "/usr/bin/dialog" "${dialog}/bin/dialog" \
+      --replace "/usr/bin/whiptail" "${python3.pkgs.snack}/bin/whiptail"
+
+    substituteInPlace dman \
+      --replace "curl" "${curl}/bin/curl"
+  '';
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  buildInputs = [
+    perl
+    python3
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    # see https://salsa.debian.org/debian/debian-goodies/-/blob/master/debian/install
+    for bin in checkrestart dgrep dglob debget dpigs debman dman popbugs which-pkg-broke which-pkg-broke-build dhomepage debmany/debmany check-enhancements find-dbgsym-packages; do
+      install -Dm755 $bin -t $out/bin
+    done
+
+    install -Dm644 find-dbgsym-packages-templates/* -t $out/share/debian-goodies/find-dbgsym-packages-templates/
+
+    installShellCompletion --bash \
+      debmany/bash_completion/debmany \
+      debian/bash-completion
+
+    installManPage \
+      *.1 \
+      debmany/man/*.1 \
+      *.8
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Small toolbox-style utilities for Debian systems";
+    homepage = "https://salsa.debian.org/debian/debian-goodies";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/deckmaster/default.nix b/nixpkgs/pkgs/applications/misc/deckmaster/default.nix
new file mode 100644
index 000000000000..773b1b36e514
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/deckmaster/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+, roboto
+}:
+
+buildGoModule rec {
+  pname = "deckmaster";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "muesli";
+    repo = "deckmaster";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-1hZ7yAKTvkk20ho+QOqFEtspBvFztAtfmITs2uxhdmQ=";
+  };
+
+  vendorHash = "sha256-d38s5sSvENIou+rlphXIrrOcGOdsvkNaMJlhiXVWN6c=";
+
+  proxyVendor = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  # Let the app find Roboto-*.ttf files (hard-coded file names).
+  postFixup = ''
+    wrapProgram $out/bin/deckmaster \
+      --prefix XDG_DATA_DIRS : "${roboto.out}/share/" \
+  '';
+
+  meta = with lib; {
+    description = "An application to control your Elgato Stream Deck on Linux";
+    homepage = "https://github.com/muesli/deckmaster";
+    changelog = "https://github.com/muesli/deckmaster/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ianmjones ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/deco/default.nix b/nixpkgs/pkgs/applications/misc/deco/default.nix
new file mode 100644
index 000000000000..a39f6b4f0bad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/deco/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, scsh, feh, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "deco";
+  version = "unstable-2019-04-03";
+
+  src = fetchFromGitHub {
+    owner = "ebzzry";
+    repo = pname;
+    rev = "dd8ec7905bc85d085eb2ee3bddabea451054288c";
+    sha256 = "sha256-/3GeNvWOCRPOYTUbodXDUxR5QVDEyx6x2Jt5PxsPdvk=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ${pname} $out/bin
+    chmod +x $out/bin/${pname}
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/bin/deco --replace "/usr/bin/env scsh" "${scsh}/bin/scsh"
+    substituteInPlace $out/bin/deco --replace "feh" "${feh}/bin/feh"
+    substituteInPlace $out/bin/deco --replace "xdpyinfo" "${xorg.xdpyinfo}/bin/xdpyinfo"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ebzzry/deco";
+    description = "A simple root image setter";
+    license = licenses.mit;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+    mainProgram = "deco";
+  };
+
+  dontBuild = true;
+}
diff --git a/nixpkgs/pkgs/applications/misc/devdocs-desktop/default.nix b/nixpkgs/pkgs/applications/misc/devdocs-desktop/default.nix
new file mode 100644
index 000000000000..55fe2b9e2cf7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/devdocs-desktop/default.nix
@@ -0,0 +1,40 @@
+{ lib, appimageTools, fetchurl }:
+
+let
+  version = "0.7.2";
+  pname = "devdocs-desktop";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/egoist/devdocs-desktop/releases/download/v${version}/DevDocs-${version}.AppImage";
+    sha256 = "sha256-4ugpzh0Dweae6tKb6uqRhEW9HT+iVIo8MQRbVKTdRFw=";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+
+in appimageTools.wrapType2 rec {
+  inherit name src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/devdocs.desktop $out/share/applications/devdocs.desktop
+    install -m 444 -D ${appimageContents}/devdocs.png $out/share/icons/hicolor/0x0/apps/devdocs.png
+    substituteInPlace $out/share/applications/devdocs.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "A full-featured desktop app for DevDocs.io";
+    longDescription = ''
+      DevDocs.io combines multiple API documentations in a fast, organized, and searchable interface. This is an unofficial desktop app for it.
+    '';
+    homepage = "https://github.com/egoist/devdocs-desktop";
+    downloadPage = "https://github.com/egoist/devdocs-desktop/releases";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ymarkus ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "devdocs-desktop";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/devilspie2/default.nix b/nixpkgs/pkgs/applications/misc/devilspie2/default.nix
new file mode 100644
index 000000000000..8ea982f6059f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/devilspie2/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, intltool, pkg-config, glib, gtk, lua, libwnck }:
+
+stdenv.mkDerivation rec {
+  pname = "devilspie2";
+  version = "0.44";
+
+  src = fetchurl {
+    url = "https://download.savannah.gnu.org/releases/devilspie2/devilspie2-${version}.tar.xz";
+    sha256 = "Cp8erdKyKjGBY+QYAGXUlSIboaQ60gIepoZs0RgEJkA=";
+  };
+
+  nativeBuildInputs = [ intltool pkg-config ];
+  buildInputs = [ glib gtk lua libwnck ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp bin/devilspie2 $out/bin
+    cp devilspie2.1 $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "A window matching utility";
+    longDescription = ''
+      Devilspie2 is a window matching utility, allowing the user to
+      perform scripted actions on windows as they are created. For
+      example you can script a terminal program to always be
+      positioned at a specific screen position, or position a window
+      on a specific workspace.
+    '';
+    homepage = "https://www.nongnu.org/devilspie2/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.linux;
+    mainProgram = "devilspie2";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dialect/default.nix b/nixpkgs/pkgs/applications/misc/dialect/default.nix
new file mode 100644
index 000000000000..519f12490f18
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dialect/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, fetchFromGitHub
+, wrapGAppsHook4
+, python3
+, appstream-glib
+, blueprint-compiler
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, glib
+, gtk4
+, gobject-introspection
+, gst_all_1
+, libsoup_3
+, libadwaita
+, nix-update-script
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "dialect";
+  version = "2.1.1";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "dialect-app";
+    repo = pname;
+    rev = version;
+    fetchSubmodules = true;
+    hash = "sha256-ytZnolQTOj0dpv+ouN1N7sypr1LxSN/Uhp7qP0ZOTHE=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    blueprint-compiler
+    desktop-file-utils
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    gtk4
+    glib
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    libsoup_3
+    libadwaita
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    dbus-python
+    gtts
+    pygobject3
+  ];
+
+  # Prevent double wrapping, let the Python wrapper use the args in preFixup.
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  doCheck = false;
+
+  # handle setup hooks better
+  strictDeps = false;
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://github.com/dialect-app/dialect";
+    description = "A translation app for GNOME";
+    maintainers = with maintainers; [ linsui ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dict-cc-py/default.nix b/nixpkgs/pkgs/applications/misc/dict-cc-py/default.nix
new file mode 100644
index 000000000000..cbacf1191275
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dict-cc-py/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "dict.cc.py";
+  version = "3.1.0";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "rbaron";
+    repo = "dict.cc.py";
+    rev = "a8b469767590fdd15d3aeb0b00e2ae62aa15a918";
+    hash = "sha256-wc0WY1pETBdOT3QUaVGsX8YdcnhxLIHrZ2vt2t5LYKU=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    colorama
+    requests
+  ];
+
+  pythonImportsCheck = [ "dictcc" ];
+
+  meta = with lib; {
+    description = "Unofficial command line client for dict.cc";
+    homepage = "https://github.com/rbaron/dict.cc.py";
+    license = with licenses; [ cc0 ];
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/diebahn/default.nix b/nixpkgs/pkgs/applications/misc/diebahn/default.nix
new file mode 100644
index 000000000000..7e07a05748ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/diebahn/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, cargo
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, rustPlatform
+, rustc
+, wrapGAppsHook4
+, cairo
+, gdk-pixbuf
+, glib
+, gtk4
+, libadwaita
+, pango
+, gettext
+, darwin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "diebahn";
+  version = "2.3.0";
+
+  src = fetchFromGitLab {
+    owner = "schmiddi-on-mobile";
+    repo = "railway";
+    rev = version;
+    hash = "sha256-o1WJJslZLg3UlMLmHDeEozsP8CmMU9e7MqONpIKuq80=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    name = "${pname}-${src}";
+    inherit src;
+    hash = "sha256-/DSbkZev9A7TqRgnCop3PDd8vzSvyOevvl+pBCk1ri0=";
+  };
+
+  nativeBuildInputs = [
+    cargo
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    rustPlatform.cargoSetupHook
+    rustc
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    cairo
+    gdk-pixbuf
+    glib
+    gtk4
+    libadwaita
+    pango
+  ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
+    CoreFoundation
+    Foundation
+    Security
+  ]);
+
+  # Darwin needs to link against gettext from nixpkgs instead of the one vendored by gettext-sys
+  # because the vendored copy does not build with newer versions of clang.
+  env = lib.optionalAttrs stdenv.isDarwin {
+    GETTEXT_BIN_DIR = "${lib.getBin gettext}/bin";
+    GETTEXT_INCLUDE_DIR = "${lib.getDev gettext}/include";
+    GETTEXT_LIB_DIR = "${lib.getLib gettext}/lib";
+  };
+
+  meta = {
+    changelog = "https://gitlab.com/schmiddi-on-mobile/railway/-/blob/${src.rev}/CHANGELOG.md";
+    description = "Travel with all your train information in one place";
+    homepage = "https://gitlab.com/schmiddi-on-mobile/railway";
+    license = lib.licenses.gpl3Plus;
+    mainProgram = "diebahn";
+    maintainers = with lib.maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/diff-pdf/default.nix b/nixpkgs/pkgs/applications/misc/diff-pdf/default.nix
new file mode 100644
index 000000000000..1d54b57c9b2f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/diff-pdf/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, autoconf, automake, pkg-config, cairo, poppler, wxGTK, Cocoa }:
+
+stdenv.mkDerivation rec {
+  pname = "diff-pdf";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "vslavik";
+    repo = "diff-pdf";
+    rev = "v${version}";
+    sha256 = "sha256-6aKF3Xqp/1BoHEiZVZJSemTjn5Qwwr3QyhsXOIjTr08=";
+  };
+
+  nativeBuildInputs = [ autoconf automake pkg-config ];
+  buildInputs = [ cairo poppler wxGTK ]
+    ++ lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  preConfigure = "./bootstrap";
+
+  meta = with lib; {
+    homepage = "https://vslavik.github.io/diff-pdf/";
+    description = "Simple tool for visually comparing two PDF files";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "diff-pdf";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/diffpdf/default.nix b/nixpkgs/pkgs/applications/misc/diffpdf/default.nix
new file mode 100644
index 000000000000..370f41b1b831
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/diffpdf/default.nix
@@ -0,0 +1,58 @@
+{ lib, mkDerivation, fetchurl, fetchpatch, qmake, qttools, qtbase, poppler }:
+
+mkDerivation rec {
+  version = "2.1.3";
+  pname = "diffpdf";
+
+  src = fetchurl {
+    url = "http://www.qtrac.eu/${pname}-${version}.tar.gz";
+    sha256 = "0cr468fi0d512jjj23r5flfzx957vibc9c25gwwhi0d773h2w566";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/gentoo/gentoo/9b971631588ff46e7c2d501bc35cd0d9ce2d98e2/app-text/diffpdf/files/diffpdf-2.1.3-qt5.patch";
+      sha256 = "0sax8gcqcmzf74hmdr3rarqs4nsxmml9qmh6pqyjmgl3lypxhafg";
+    })
+    ./fix_path_poppler_qt5.patch
+  ];
+
+  nativeBuildInputs = [ qmake qttools ];
+  buildInputs = [ qtbase poppler ];
+
+  preConfigure = ''
+    substituteInPlace diffpdf.pro --replace @@NIX_POPPLER_QT5@@ ${poppler.dev}
+    lrelease diffpdf.pro
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+
+    install -Dpm755 -D diffpdf $out/bin/diffpdf
+    install -Dpm644 -D diffpdf.1 $out/share/man/man1/diffpdf.1
+
+    install -dpm755 $out/share/doc/${pname}-${version} $out/share/licenses/${pname}-${version} $out/share/icons $out/share/pixmaps $out/share/applications
+    install -Dpm644 CHANGES README help.html $out/share/doc/${pname}-${version}/
+    install -Dpm644 gpl-2.0.txt $out/share/licenses/${pname}-${version}/
+    install -Dpm644 images/icon.png $out/share/pixmaps/diffpdf.png
+
+    cat > $out/share/applications/diffpdf.desktop <<EOF
+    [Desktop Entry]
+    Type=Application
+    Version=1.0
+    Name=diffpdf
+    Icon=diffpdf
+    Comment=PDF diffing tool
+    Exec=$out/bin/diffpdf
+    Terminal=false
+    EOF
+    '';
+
+  meta = {
+    homepage = "http://www.qtrac.eu/diffpdfc.html";
+    description = "Tool for diffing pdf files visually or textually";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/diffpdf/fix_path_poppler_qt5.patch b/nixpkgs/pkgs/applications/misc/diffpdf/fix_path_poppler_qt5.patch
new file mode 100644
index 000000000000..9535ea2c6b0d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/diffpdf/fix_path_poppler_qt5.patch
@@ -0,0 +1,16 @@
+diff -uNr diffpdf-2.1.3/diffpdf.pro diffpdf-2.1.3-new/diffpdf.pro
+--- diffpdf-2.1.3/diffpdf.pro	2013-10-15 09:01:22.000000000 +0200
++++ diffpdf-2.1.3-new/diffpdf.pro	2015-07-07 23:13:36.445572148 +0200
+@@ -47,9 +47,9 @@
+ 	INCLUDEPATH += /c/poppler_lib/include/poppler/qt5
+ 	LIBS += -Wl,-rpath -Wl,/c/poppler_lib/bin -Wl,-L/c/poppler_lib/bin
+     } else {
+-	exists(/usr/include/poppler/qt5) {
+-	    INCLUDEPATH += /usr/include/poppler/cpp
+-	    INCLUDEPATH += /usr/include/poppler/qt5
++	exists(@@NIX_POPPLER_QT5@@/include/poppler/qt5) {
++	    INCLUDEPATH += @@NIX_POPPLER_QT5@@/include/poppler/cpp
++	    INCLUDEPATH += @@NIX_POPPLER_QT5@@/include/poppler/qt5
+ 	} else {
+ 	    INCLUDEPATH += /usr/local/include/poppler/cpp
+ 	    INCLUDEPATH += /usr/local/include/poppler/qt5
diff --git a/nixpkgs/pkgs/applications/misc/diffuse/default.nix b/nixpkgs/pkgs/applications/misc/diffuse/default.nix
new file mode 100644
index 000000000000..75e5f34174bc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/diffuse/default.nix
@@ -0,0 +1,78 @@
+{ lib, gitUpdater
+, fetchFromGitHub
+, meson
+, ninja
+, gettext
+, wrapGAppsHook
+, gobject-introspection
+, pango
+, gdk-pixbuf
+, python3
+, atk
+, gtk3
+, hicolor-icon-theme
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "diffuse";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "MightyCreak";
+    repo = "diffuse";
+    rev = "v${version}";
+    sha256 = "6GdUtdVhhIQL1cD9/e7Byv37PVKXmzVWhJC6GROK7OA=";
+  };
+
+  format = "other";
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    meson
+    ninja
+    gettext
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    pango
+    gdk-pixbuf
+    atk
+    gtk3
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pycairo
+    pygobject3
+  ];
+
+  preConfigure = ''
+    # app bundle for macos
+    substituteInPlace src/diffuse/meson.build data/icons/meson.build src/diffuse/mac-os-app/diffuse-mac.in --replace-fail "/Applications" "$out/Applications";
+  '';
+
+  mesonFlags = [
+    "-Db_ndebug=true"
+  ];
+
+  # to avoid running gtk-update-icon-cache, update-desktop-database and glib-compile-schemas
+  DESTDIR = "/";
+
+  makeWrapperArgs = [
+      "--prefix XDG_DATA_DIRS : ${hicolor-icon-theme}/share"
+  ];
+
+  passthru = {
+    updateScript = gitUpdater {
+      rev-prefix = "v";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/MightyCreak/diffuse";
+    description = "Graphical tool for merging and comparing text files";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ k3a ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/digitalbitbox/default.nix b/nixpkgs/pkgs/applications/misc/digitalbitbox/default.nix
new file mode 100644
index 000000000000..8c8f4a1c9467
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/digitalbitbox/default.nix
@@ -0,0 +1,148 @@
+{ mkDerivation
+, lib
+, autoreconfHook
+, curl
+, fetchFromGitHub
+, git
+, libevent
+, libtool
+, qrencode
+, udev
+, libusb1
+, makeWrapper
+, pkg-config
+, qtbase
+, qttools
+, qtwebsockets
+, qtmultimedia
+, udevRule51 ? ''
+,   SUBSYSTEM=="usb", TAG+="uaccess", TAG+="udev-acl", SYMLINK+="dbb%n", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2402"
+, ''
+, udevRule52 ? ''
+,   KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2402", TAG+="uaccess", TAG+="udev-acl", SYMLINK+="dbbf%n"
+, ''
+, writeText
+}:
+
+# Enabling the digitalbitbox program
+#
+#     programs.digitalbitbox.enable = true;
+#
+# will install the digitalbitbox package and enable the corresponding hardware
+# module and is by far the easiest way to get started with the Digital Bitbox on
+# NixOS.
+
+# In case you install the package only, please be aware that you may need to
+# apply some udev rules to allow the application to identify and access your
+# wallet. In a nixos-configuration, one may accomplish this by enabling the
+# digitalbitbox hardware module
+#
+#     hardware.digitalbitbox.enable = true;
+#
+# or by adding the digitalbitbox package to system.udev.packages
+#
+#     system.udev.packages = [ pkgs.digitalbitbox ];
+
+# See https://digitalbitbox.com/start_linux for more information.
+let
+  copyUdevRuleToOutput = name: rule:
+    "cp ${writeText name rule} $out/etc/udev/rules.d/${name}";
+in mkDerivation rec {
+  pname = "digitalbitbox";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "digitalbitbox";
+    repo = "dbb-app";
+    rev = "v${version}";
+    sha256 = "ig3+TdYv277D9GVnkRSX6nc6D6qruUOw/IQdQCK6FoA=";
+  };
+
+  nativeBuildInputs = with lib; [
+    autoreconfHook
+    curl
+    git
+    makeWrapper
+    pkg-config
+    qttools
+  ];
+
+  buildInputs = [
+    libevent
+    libtool
+    udev
+    libusb1
+    qrencode
+
+    qtbase
+    qtwebsockets
+    qtmultimedia
+  ];
+
+  LUPDATE="${qttools.dev}/bin/lupdate";
+  LRELEASE="${qttools.dev}/bin/lrelease";
+  MOC="${qtbase.dev}/bin/moc";
+  QTDIR=qtbase.dev;
+  RCC="${qtbase.dev}/bin/rcc";
+  UIC="${qtbase.dev}/bin/uic";
+
+  configureFlags = [
+    "--enable-libusb"
+  ];
+
+  hardeningDisable = [
+    "format"
+  ];
+
+  qtWrapperArgs = [ "--prefix LD_LIBRARY_PATH : $out/lib" ];
+
+  postInstall = ''
+    mkdir -p "$out/lib"
+    cp src/libbtc/.libs/*.so* $out/lib
+    cp src/libbtc/src/secp256k1/.libs/*.so* $out/lib
+    cp src/hidapi/libusb/.libs/*.so* $out/lib
+    cp src/univalue/.libs/*.so* $out/lib
+
+    # Provide udev rules as documented in https://digitalbitbox.com/start_linux
+    mkdir -p "$out/etc/udev/rules.d"
+    ${copyUdevRuleToOutput "51-hid-digitalbox.rules" udevRule51}
+    ${copyUdevRuleToOutput "52-hid-digitalbox.rules" udevRule52}
+  '';
+
+  # remove forbidden references to $TMPDIR
+  preFixup = ''
+    for f in "$out"/{bin,lib}/*; do
+      if [ -f "$f" ] && isELF "$f"; then
+        patchelf --shrink-rpath --allowed-rpath-prefixes "$NIX_STORE" "$f"
+      fi
+    done
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "A QT based application for the Digital Bitbox hardware wallet";
+    longDescription = ''
+      Digital Bitbox provides dbb-app, a GUI tool, and dbb-cli, a CLI tool, to manage Digital Bitbox devices.
+
+      This package will only install the dbb-app and dbb-cli, however; in order for these applications to identify and access Digital Bitbox devices, one may want to enable the digitalbitbox hardware module by adding
+
+          hardware.digitalbitbox.enable = true;
+
+      to the configuration which is equivalent to adding this package to the udev.packages list.
+
+
+      The easiest way to use the digitalbitbox package in NixOS is by adding
+
+          programs.digitalbitbox.enable = true;
+
+      to the configuration which installs the package and enables the hardware module.
+    '';
+    homepage = "https://digitalbitbox.com/";
+    license = licenses.mit;
+    maintainers = with maintainers; [
+      vidbina
+    ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ding/default.nix b/nixpkgs/pkgs/applications/misc/ding/default.nix
new file mode 100644
index 000000000000..3c193d3f569a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ding/default.nix
@@ -0,0 +1,57 @@
+{ aspell, aspellDicts_de, aspellDicts_en, buildEnv, fetchurl, fortune, gnugrep, makeWrapper, lib, stdenv, tk, tre }:
+let
+  aspellEnv = buildEnv {
+    name = "env-ding-aspell";
+    paths = [
+      aspell
+      aspellDicts_de
+      aspellDicts_en
+    ];
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "ding";
+  version = "1.9";
+
+  src = fetchurl {
+    url = "http://ftp.tu-chemnitz.de/pub/Local/urz/ding/ding-${version}.tar.gz";
+    sha256 = "sha256-aabIH894WihsBTo1LzIBzIZxxyhRYVxLcHpDQwmwmOU=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ aspellEnv fortune gnugrep tk tre ];
+
+  patches = [ ./dict.patch ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/dict
+    mkdir -p $out/share/man/man1
+    mkdir -p $out/share/applications
+    mkdir -p $out/share/pixmaps
+
+    for f in ding ding.1; do
+      sed -i "s@/usr/share@$out/share@g" "$f"
+    done
+
+    sed -i "s@/usr/bin/fortune@fortune@g" ding
+
+    sed -i "s@/usr/bin/ding@$out/bin/ding@g" ding.desktop
+
+    cp -v ding $out/bin/
+    cp -v de-en.txt $out/share/dict/
+    cp -v ding.1 $out/share/man/man1/
+    cp -v ding.png $out/share/pixmaps/
+    cp -v ding.desktop $out/share/applications/
+
+    wrapProgram $out/bin/ding --prefix PATH : ${lib.makeBinPath [ gnugrep aspellEnv tk fortune ]} --prefix ASPELL_CONF : "\"prefix ${aspellEnv};\""
+  '';
+
+  meta = with lib; {
+    description = "Simple and fast dictionary lookup tool";
+    homepage = "https://www-user.tu-chemnitz.de/~fri/ding/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux; # homepage says: unix-like except darwin
+    maintainers = [ maintainers.exi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ding/dict.patch b/nixpkgs/pkgs/applications/misc/ding/dict.patch
new file mode 100644
index 000000000000..70ecea10550e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ding/dict.patch
@@ -0,0 +1,26 @@
+Ding persists its settings to $HOME/.dingrc on startup, this sadly includes the path to the dictionary.
+On all other distributions, that would be /usr/share/dict/de-en.txt and would hardly ever change.
+On nixos, this will indeed change on ever update and would break it for all users.
+This just comments out the dictionary path in the .dingrc so the user can still set it if she wants to, but it will not affect normal operations.
+--- a/ding
++++ b/ding
+@@ -899,7 +899,9 @@ if { ! [info exists ding_version]} {
+         }
+ 
+         # Change path of default ger-eng.txt when upgrading from version 1.1
+-        if {$searchmeth($i,dictfile) == {/usr/dict/ger-eng.txt} &&
++        if {! [info exists searchmeth($i,dictfile)]} {
++            set searchmeth($i,dictfile) $default_searchmeth(0,dictfile)
++        } elseif {$searchmeth($i,dictfile) == {/usr/dict/ger-eng.txt} &&
+             $ding_version == {1.1}} {
+             set searchmeth($i,dictfile) $default_searchmeth(0,dictfile)
+             debug 2 "New path and name of ger-eng.txt configured: $default_searchmeth(0,dictfile)"
+@@ -5065,7 +5067,7 @@ proc saveOptions {} {
+     foreach i $searchmpos {
+         puts $fd "set searchmeth($n,name) {$searchmeth($i,name)}"
+         puts $fd "set searchmeth($n,type) {$searchmeth($i,type)}"
+-        puts $fd "set searchmeth($n,dictfile) {$searchmeth($i,dictfile)}"
++        puts $fd "#set searchmeth($n,dictfile) {$searchmeth($i,dictfile)}"
+         puts $fd "set searchmeth($n,separator) {$searchmeth($i,separator)}"
+         puts $fd "set searchmeth($n,language1) {$searchmeth($i,language1)}"
+         puts $fd "set searchmeth($n,language2) {$searchmeth($i,language2)}"
diff --git a/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2021-3500+CVE-2021-32490+CVE-2021-32491+CVE-2021-32492+CVE-2021-32493.patch b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2021-3500+CVE-2021-32490+CVE-2021-32491+CVE-2021-32492+CVE-2021-32493.patch
new file mode 100644
index 000000000000..e305c5618d19
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/djvulibre/CVE-2021-3500+CVE-2021-32490+CVE-2021-32491+CVE-2021-32492+CVE-2021-32493.patch
@@ -0,0 +1,105 @@
+From cd8b5c97b27a5c1dc83046498b6ca49ad20aa9b6 Mon Sep 17 00:00:00 2001
+From: Leon Bottou <leon@bottou.org>
+Date: Tue, 11 May 2021 14:44:09 -0400
+Subject: [PATCH] Reviewed Fedora patches and adopted some of them (or variants
+ thereof)
+
+ - Patch0: djvulibre-3.5.22-cdefs.patch                  (forward ported)
+Does not make imuch sense. GSmartPointer.h already includes "stddef.h"
+ - Patch6: djvulibre-3.5.27-export-file.patch              (forward ported)
+Incorrect: inkscape command is --export-png, not --export-filename.
+ - Patch8: djvulibre-3.5.27-check-image-size.patch         (forward ported)
+Correct: adopted a variant of this
+ - Patch9: djvulibre-3.5.27-integer-overflow.patch         (forward ported)
+Correct: adopted a variant of this
+ - Patch10: djvulibre-3.5.27-check-input-pool.patch        (forward ported)
+Adopted: input validation never hurts
+ - Patch11: djvulibre-3.5.27-djvuport-stack-overflow.patch (forward ported)
+Dubious: Instead I changed djvufile to prevent a file from including itself
+which is the only way I can imagine to create an file creation loop.
+ - Patch12: djvulibre-3.5.27-unsigned-short-overflow.patch (forward ported)
+Adopted: but without including limits.h
+---
+ libdjvu/DataPool.cpp  | 3 ++-
+ libdjvu/DjVuFile.cpp  | 2 ++
+ libdjvu/GBitmap.cpp   | 2 ++
+ libdjvu/IW44Image.cpp | 4 ++++
+ tools/ddjvu.cpp       | 7 +++++--
+ 5 files changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/libdjvu/DataPool.cpp b/libdjvu/DataPool.cpp
+index 5fcbedf..b58fc45 100644
+--- a/libdjvu/DataPool.cpp
++++ b/libdjvu/DataPool.cpp
+@@ -790,7 +790,8 @@ DataPool::create(const GP<DataPool> & pool, int start, int length)
+ {
+   DEBUG_MSG("DataPool::DataPool: pool=" << (void *)((DataPool *)pool) << " start=" << start << " length= " << length << "\n");
+   DEBUG_MAKE_INDENT(3);
+-
++  if (!pool)
++    G_THROW( ERR_MSG("DataPool.zero_DataPool") );
+   DataPool *xpool=new DataPool();
+   GP<DataPool> retval=xpool;
+   xpool->init();
+diff --git a/libdjvu/DjVuFile.cpp b/libdjvu/DjVuFile.cpp
+index 143346b..2587491 100644
+--- a/libdjvu/DjVuFile.cpp
++++ b/libdjvu/DjVuFile.cpp
+@@ -576,6 +576,8 @@ DjVuFile::process_incl_chunk(ByteStream & str, int file_num)
+     GURL incl_url=pcaster->id_to_url(this, incl_str);
+     if (incl_url.is_empty())	// Fallback. Should never be used.
+       incl_url=GURL::UTF8(incl_str,url.base());
++    if (incl_url == url)        // Infinite loop avoidance
++      G_THROW( ERR_MSG("DjVuFile.malformed") );
+     
+     // Now see if there is already a file with this *name* created
+     {
+diff --git a/libdjvu/GBitmap.cpp b/libdjvu/GBitmap.cpp
+index c2fdbe4..8ad64b2 100644
+--- a/libdjvu/GBitmap.cpp
++++ b/libdjvu/GBitmap.cpp
+@@ -1284,6 +1284,8 @@ GBitmap::decode(unsigned char *runs)
+   // initialize pixel array
+   if (nrows==0 || ncolumns==0)
+     G_THROW( ERR_MSG("GBitmap.not_init") );
++  if (ncolumns + border != (unsigned short)(ncolumns+border))
++    G_THROW("GBitmap: image size exceeds maximum (corrupted file?)");
+   bytes_per_row = ncolumns + border;
+   if (runs==0)
+     G_THROW( ERR_MSG("GBitmap.null_arg") );
+diff --git a/libdjvu/IW44Image.cpp b/libdjvu/IW44Image.cpp
+index e8d4b44..4a1797e 100644
+--- a/libdjvu/IW44Image.cpp
++++ b/libdjvu/IW44Image.cpp
+@@ -676,9 +676,13 @@ IW44Image::Map::image(signed char *img8, int rowsize, int pixsep, int fast)
+   // Allocate reconstruction buffer
+   short *data16;
+   size_t sz = bw * bh;
++  if (sz == 0)
++    G_THROW("IW44Image: image size is zero (corrupted file?)");
+   if (sz / (size_t)bw != (size_t)bh) // multiplication overflow
+     G_THROW("IW44Image: image size exceeds maximum (corrupted file?)");
+   GPBuffer<short> gdata16(data16,sz);
++  if (data16 == 0)
++    G_THROW("IW44Image: unable to allocate image buffer");
+   // Copy coefficients
+   int i;
+   short *p = data16;
+diff --git a/tools/ddjvu.cpp b/tools/ddjvu.cpp
+index 7109952..e7b489b 100644
+--- a/tools/ddjvu.cpp
++++ b/tools/ddjvu.cpp
+@@ -393,8 +393,11 @@ render(ddjvu_page_t *page, int pageno)
+   } else if (style == DDJVU_FORMAT_GREY8)
+     rowsize = rrect.w;
+   else
+-    rowsize = rrect.w * 3; 
+-  if (! (image = (char*)malloc(rowsize * rrect.h)))
++    rowsize = rrect.w * 3;
++  size_t bufsize = (size_t)rowsize * rrect.h;
++  if (bufsize / rowsize != rrect.h)
++    die(i18n("Integer overflow when allocating image buffer for page %d"), pageno);
++  if (! (image = (char*)malloc(bufsize)))
+     die(i18n("Cannot allocate image buffer for page %d"), pageno);
+ 
+   /* Render */
\ No newline at end of file
diff --git a/nixpkgs/pkgs/applications/misc/djvulibre/c++17-register-class.patch b/nixpkgs/pkgs/applications/misc/djvulibre/c++17-register-class.patch
new file mode 100644
index 000000000000..88251b34f773
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/djvulibre/c++17-register-class.patch
@@ -0,0 +1,21 @@
+diff -ur a/libdjvu/GBitmap.h b/libdjvu/GBitmap.h
+--- a/libdjvu/GBitmap.h	2020-11-20 09:57:32.000000000 -0700
++++ b/libdjvu/GBitmap.h	2023-07-07 07:07:45.519912414 -0600
+@@ -620,7 +620,7 @@
+ inline int
+ GBitmap::read_run(unsigned char *&data)
+ {
+-  register int z=*data++;
++  int z=*data++;
+   return (z>=RUNOVERFLOWVALUE)?
+     ((z&~RUNOVERFLOWVALUE)<<8)|(*data++):z;
+ }
+@@ -628,7 +628,7 @@
+ inline int
+ GBitmap::read_run(const unsigned char *&data)
+ {
+-  register int z=*data++;
++  int z=*data++;
+   return (z>=RUNOVERFLOWVALUE)?
+     ((z&~RUNOVERFLOWVALUE)<<8)|(*data++):z;
+ }
diff --git a/nixpkgs/pkgs/applications/misc/djvulibre/default.nix b/nixpkgs/pkgs/applications/misc/djvulibre/default.nix
new file mode 100644
index 000000000000..073a6e348c2b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/djvulibre/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv
+, fetchurl
+, libjpeg
+, libtiff
+, librsvg
+, libiconv
+, bash
+}:
+
+stdenv.mkDerivation rec {
+  pname = "djvulibre";
+  version = "3.5.28";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/djvu/${pname}-${version}.tar.gz";
+    sha256 = "1p1fiygq9ny8aimwc4vxwjc6k9ykgdsq1sq06slfbzalfvm0kl7w";
+  };
+
+  outputs = [ "bin" "dev" "out" ];
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    librsvg
+  ];
+
+  buildInputs = [
+    libjpeg
+    libtiff
+    libiconv
+    bash
+  ];
+
+  enableParallelBuilding = true;
+
+  patches = [
+    # Remove uses of the `register` storage class specifier, which was removed in C++17.
+    # Fixes compilation with clang 16, which defaults to C++17.
+    ./c++17-register-class.patch
+
+    ./CVE-2021-3500+CVE-2021-32490+CVE-2021-32491+CVE-2021-32492+CVE-2021-32493.patch
+  ];
+
+  meta = with lib; {
+    description = "The big set of CLI tools to make/modify/optimize/show/export DJVU files";
+    homepage = "https://djvu.sourceforge.net";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ Anton-Latukha ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dmensamenu/default.nix b/nixpkgs/pkgs/applications/misc/dmensamenu/default.nix
new file mode 100644
index 000000000000..d5208ea7b02d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dmensamenu/default.nix
@@ -0,0 +1,34 @@
+{ lib, buildPythonApplication, fetchFromGitHub, substituteAll, requests, dmenu }:
+
+buildPythonApplication rec {
+  pname = "dmensamenu";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "dotlambda";
+    repo = "dmensamenu";
+    rev = version;
+    sha256 = "1ck1i1k40bli6m3n49ff6987hglby9fn4vfr28jpkm3h70s2km3n";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./dmenu-path.patch;
+      inherit dmenu;
+    })
+  ];
+
+  propagatedBuildInputs = [
+    requests
+  ];
+
+  # No tests implemented
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/dotlambda/dmensamenu";
+    description = "Print German canteen menus using dmenu and OpenMensa";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dmensamenu/dmenu-path.patch b/nixpkgs/pkgs/applications/misc/dmensamenu/dmenu-path.patch
new file mode 100644
index 000000000000..1508e5142d29
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dmensamenu/dmenu-path.patch
@@ -0,0 +1,13 @@
+diff --git a/dmensamenu/dmensamenu.py b/dmensamenu/dmensamenu.py
+index 7df49f2..052ef1b 100644
+--- a/dmensamenu/dmensamenu.py
++++ b/dmensamenu/dmensamenu.py
+@@ -99,7 +99,7 @@ def main():
+     parser.add_argument('--city',
+                         help='When searching for a canteen, only show the ones from the city specified'
+                             +' (case-insensitive).')
+-    parser.add_argument('--dmenu', metavar='CMD', default='dmenu -i -l "$lines" -p "$date"',
++    parser.add_argument('--dmenu', metavar='CMD', default='@dmenu@/bin/dmenu -i -l "$lines" -p "$date"',
+                         help='Command to execute. '
+                              'Can be used to pass custom parameters to dmenu. '
+                              'The shell variable $lines will be set to the number of items on the menu '
diff --git a/nixpkgs/pkgs/applications/misc/dmenu-rs/Cargo.lock b/nixpkgs/pkgs/applications/misc/dmenu-rs/Cargo.lock
new file mode 100644
index 000000000000..f3da4c99885d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dmenu-rs/Cargo.lock
@@ -0,0 +1,1085 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+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 = "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 = "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 = "bindgen"
+version = "0.64.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 1.0.109",
+ "which",
+]
+
+[[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 = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cexpr"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
+dependencies = [
+ "nom",
+]
+
+[[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.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a"
+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",
+ "unicode-width",
+ "vec_map",
+ "yaml-rust 0.3.5",
+]
+
+[[package]]
+name = "clap"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6efb5f0a41b5ef5b50c5da28c07609c20091df0c1fc33d418fa2a7e693c2b624"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+ "once_cell",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "671fcaa5debda4b9a84aa7fde49c907c8986c0e6ab927e04217c9cb74e7c8bc9"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "bitflags",
+ "clap_lex",
+ "strsim 0.10.0",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.11",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
+
+[[package]]
+name = "clipboard"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a904646c0340239dcf7c51677b33928bf24fdf424b79a57909c0109075b2e7"
+dependencies = [
+ "clipboard-win",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "x11-clipboard",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[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 = "config"
+version = "0.0.0"
+dependencies = [
+ "glob",
+ "itertools 0.10.5",
+ "man_dmenu",
+ "prettytable-rs",
+ "termcolor",
+ "yaml-rust 0.4.5",
+]
+
+[[package]]
+name = "csv"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b015497079b9a9d69c02ad25de6c0a6edef051ea6360a327d0bd05802ef64ad"
+dependencies = [
+ "csv-core",
+ "itoa",
+ "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 = "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-next"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[package]]
+name = "dmenu-build"
+version = "0.0.0"
+dependencies = [
+ "clap 2.34.0",
+ "clipboard",
+ "itertools 0.9.0",
+ "lazy_static",
+ "libc",
+ "overrider",
+ "overrider_build",
+ "pledge",
+ "proc_use",
+ "regex",
+ "rustc_version_runtime",
+ "servo-fontconfig",
+ "termcolor",
+ "unicode-segmentation",
+ "x11",
+ "yaml-rust 0.3.5",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[package]]
+name = "encode_unicode"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34aa73646ffb006b8f5147f3dc182bd4bcb190227ce861fc4a4844bf8e3cb2c0"
+
+[[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-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[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-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.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
+
+[[package]]
+name = "headers"
+version = "0.1.0"
+dependencies = [
+ "bindgen",
+ "termcolor",
+]
+
+[[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 = "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 = "is-terminal"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "itertools"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+dependencies = [
+ "either",
+]
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[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.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[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.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[package]]
+name = "log"
+version = "0.4.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "man_dmenu"
+version = "0.1.0"
+dependencies = [
+ "itertools 0.10.5",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[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 = "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.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "overrider"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55b9fb8c67b6adf9fff65ad57571c42ccc80e8a9d2712e5427d00aa7fa293114"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "overrider_build"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d9709eba39b602b089deaf80b123e5c8ecfd071aab827a66c1a58412074fbcc"
+dependencies = [
+ "glob",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "pledge"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "252599417b7d9a43b7fdc63dd790b0848666a8910b2ebe1a25118309c3c981e5"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "prettytable-rs"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eea25e07510aa6ab6547308ebe3c036016d162b8da920dbb079e3ba8acf3d95a"
+dependencies = [
+ "csv",
+ "encode_unicode",
+ "is-terminal",
+ "lazy_static",
+ "term",
+ "unicode-width",
+]
+
+[[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 = "proc_use"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16b1c456def2ad84b3574651f069541dea178ee688e882943cb21232a5cb01"
+dependencies = [
+ "glob",
+ "itertools 0.9.0",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[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 = "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",
+]
+
+[[package]]
+name = "rustc_version_runtime"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d31b7153270ebf48bf91c65ae5b0c00e749c4cfad505f66530ac74950249582f"
+dependencies = [
+ "rustc_version",
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "semver"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
+
+[[package]]
+name = "serde"
+version = "1.0.159"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
+
+[[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 = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "stest"
+version = "0.0.0"
+dependencies = [
+ "clap 4.2.0",
+]
+
+[[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 = "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 = "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.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.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 = "unicode-ident"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+
+[[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 = "utf8parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+
+[[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.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[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.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 = "x11"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11-clipboard"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89bd49c06c9eb5d98e6ba6536cf64ac9f7ee3a009b2f53996d405b3944f6bcea"
+dependencies = [
+ "xcb",
+]
+
+[[package]]
+name = "xcb"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e917a3f24142e9ff8be2414e36c649d47d6cc2ba81f16201cdef96e533e02de"
+dependencies = [
+ "libc",
+ "log",
+]
+
+[[package]]
+name = "yaml-rust"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e66366e18dc58b46801afbf2ca7661a9f59cc8c5962c29892b6039b4f86fa992"
+
+[[package]]
+name = "yaml-rust"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
+dependencies = [
+ "linked-hash-map",
+]
diff --git a/nixpkgs/pkgs/applications/misc/dmenu-rs/default.nix b/nixpkgs/pkgs/applications/misc/dmenu-rs/default.nix
new file mode 100644
index 000000000000..1635e383e9bc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dmenu-rs/default.nix
@@ -0,0 +1,88 @@
+{ stdenv
+, rustPlatform
+, lib
+, fetchFromGitHub
+, fetchpatch
+, cargo
+, expat
+, fontconfig
+, libXft
+, libXinerama
+, m4
+, pkg-config
+, python3
+}:
+
+# The dmenu-rs package has extensive plugin support. However, this derivation
+# only builds the package with the default set of plugins. If you'd like to
+# further customize dmenu-rs you can build it from the source.
+# See: https://github.com/Shizcow/dmenu-rs#plugins
+stdenv.mkDerivation rec {
+  pname = "dmenu-rs";
+  version = "5.5.2";
+
+  src = fetchFromGitHub {
+    owner = "Shizcow";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-6yO2S6j/BD6x/bsuTFKAKvARl1n94KRiPwpmswmUOPU=";
+  };
+
+  nativeBuildInputs = [
+    cargo
+    m4
+    pkg-config
+    python3
+    rustPlatform.bindgenHook
+    rustPlatform.cargoSetupHook
+  ];
+
+  buildInputs = [
+    expat
+    fontconfig
+    libXft
+    libXinerama
+  ];
+
+  # The dmenu-rs repository does not include a Cargo.lock because of its
+  # dynamic build and plugin support. Generating it with make and checking it
+  # in to nixpkgs here was the easiest way to supply it to rustPlatform.
+  # See: https://github.com/Shizcow/dmenu-rs/issues/34#issuecomment-757415584
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+  };
+
+  # Fix a bug in the makefile when installing.
+  # See https://github.com/Shizcow/dmenu-rs/pull/50
+  patches = let
+    fix-broken-make-install-patch = fetchpatch {
+      url = "https://github.com/Shizcow/dmenu-rs/commit/1f4b3f8a07d73272f8c6f19bfb6ff3de5e042815.patch";
+      sha256 = "sha256-hmXApWg8qngc1vHkHUnB7Lt7wQUOyCSsBmn4HC1j53M=";
+    };
+  in [
+    fix-broken-make-install-patch
+  ];
+
+  # Copy the Cargo.lock stored here in nixpkgs into the build directory.
+  postPatch = ''
+    cp ${./Cargo.lock} src/Cargo.lock
+  '';
+
+  cargoRoot = "src";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  # Running make test requires an X11 server. It also runs dmenu, which then
+  # hangs on user input. It was too hard to figure out how to run these tests
+  # deterministically. See the original PR for some discussion on this.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A pixel perfect port of dmenu, rewritten in Rust with extensive plugin support";
+    homepage = "https://github.com/Shizcow/dmenu-rs";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ benjaminedwardwebb ];
+    platforms = platforms.linux;
+    broken = (stdenv.isLinux && stdenv.isAarch64);
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dmenu/default.nix b/nixpkgs/pkgs/applications/misc/dmenu/default.nix
new file mode 100644
index 000000000000..b53fab409b04
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dmenu/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, libX11, libXinerama, libXft, zlib, patches ? null }:
+
+stdenv.mkDerivation rec {
+  pname = "dmenu";
+  version = "5.2";
+
+  src = fetchurl {
+    url = "https://dl.suckless.org/tools/dmenu-${version}.tar.gz";
+    sha256 = "sha256-1NTKd7WRQPJyJy21N+BbuRpZFPVoAmUtxX5hp3PUN5I=";
+  };
+
+  buildInputs = [ libX11 libXinerama zlib libXft ];
+
+  inherit patches;
+
+  postPatch = ''
+    sed -ri -e 's!\<(dmenu|dmenu_path|stest)\>!'"$out/bin"'/&!g' dmenu_run
+    sed -ri -e 's!\<stest\>!'"$out/bin"'/&!g' dmenu_path
+  '';
+
+  preConfigure = ''
+    sed -i "s@PREFIX = /usr/local@PREFIX = $out@g" config.mk
+  '';
+
+  makeFlags = [ "CC:=$(CC)" ];
+
+  meta = with lib; {
+    description = "A generic, highly customizable, and efficient menu for the X Window System";
+    homepage = "https://tools.suckless.org/dmenu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pSub globin ];
+    platforms = platforms.all;
+    mainProgram = "dmenu";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dmenu/wayland.nix b/nixpkgs/pkgs/applications/misc/dmenu/wayland.nix
new file mode 100644
index 000000000000..35a50481bea7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dmenu/wayland.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, cairo, pango, pkg-config, wayland-protocols
+, glib, wayland, libxkbcommon, makeWrapper, wayland-scanner
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dmenu-wayland";
+  version = "unstable-2023-05-18";
+
+  src = fetchFromGitHub {
+    owner = "nyyManni";
+    repo = "dmenu-wayland";
+    rev = "a380201dff5bfac2dace553d7eaedb6cea6855f9";
+    hash = "sha256-dqFvU2mRYEw7n8Fmbudwi5XMLQ7mQXFkug9D9j4FIrU=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ meson ninja pkg-config makeWrapper wayland-scanner ];
+  buildInputs = [ cairo pango wayland-protocols glib wayland libxkbcommon ];
+
+  patches = [
+    # can be removed when https://github.com/nyyManni/dmenu-wayland/pull/23 is included
+    (fetchpatch {
+      name = "support-cross-compilation.patch";
+      url = "https://github.com/nyyManni/dmenu-wayland/commit/3434410de5dcb007539495395f7dc5421923dd3a.patch";
+      sha256 = "sha256-im16kU8RWrCY0btYOYjDp8XtfGEivemIPlhwPX0C77o=";
+    })
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/dmenu-wl_run \
+      --prefix PATH : $out/bin
+  '';
+
+  meta = with lib; {
+    license = licenses.mit;
+    platforms = platforms.linux;
+    description = "An efficient dynamic menu for wayland (wlroots)";
+    homepage = "https://github.com/nyyManni/dmenu-wayland";
+    maintainers = with maintainers; [ rewine ];
+    mainProgram = "dmenu-wl";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dnd-tools/default.nix b/nixpkgs/pkgs/applications/misc/dnd-tools/default.nix
new file mode 100644
index 000000000000..3b0d0ec90e25
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dnd-tools/default.nix
@@ -0,0 +1,28 @@
+{ python3, fetchFromGitHub, fetchpatch, lib }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "dnd-tools";
+  version = "unstable-2021-02-18";
+
+  src = fetchFromGitHub {
+    owner = "savagezen";
+    repo = pname;
+    rev = "baefb9e4b4b8279be89ec63d256dde9704dee078";
+    sha256 = "1rils3gzbfmwvgy51ah77qihwwbvx50q82lkc1kwcb55b3yinnmj";
+  };
+
+  # gives warning every time unless patched, see https://github.com/savagezen/dnd-tools/pull/20
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/savagezen/dnd-tools/commit/0443f3a232056ad67cfb09eb3eadcb6344659198.patch";
+      sha256 = "00k8rsz2aj4sfag6l313kxbphcb5bjxb6z3aw66h26cpgm4kysp0";
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/savagezen/dnd-tools";
+    description = "A set of interactive command line tools for Dungeons and Dragons 5th Edition";
+    license = licenses.agpl3Only;
+    maintainers = [ maintainers.urlordjames ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dockbarx/default.nix b/nixpkgs/pkgs/applications/misc/dockbarx/default.nix
new file mode 100644
index 000000000000..3b147bdcc360
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dockbarx/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, fetchFromGitHub
+, glib
+, gobject-introspection
+, gtk3
+, keybinder3
+, libwnck
+, python3Packages
+, wrapGAppsHook
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "dockbarx";
+  version = "1.0-beta2";
+
+  src = fetchFromGitHub {
+    owner = "xuzhen";
+    repo = "dockbarx";
+    rev = version;
+    sha256 = "sha256-WMRTtprDHUbOOYVHshx7WpBlYshbiDjI12Rw3tQQuPI=";
+  };
+
+  nativeBuildInputs = [
+    glib.dev
+    gobject-introspection
+    python3Packages.polib
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    libwnck
+    keybinder3
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    dbus-python
+    pillow
+    pygobject3
+    pyxdg
+    xlib
+  ];
+
+  # no tests
+  doCheck = false;
+
+  dontWrapGApps = true;
+
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace /usr/ "" \
+      --replace '"/", "usr", "share",' '"share",'
+
+    for f in \
+      dbx_preference \
+      dockbarx/applets.py \
+      dockbarx/dockbar.py \
+      dockbarx/iconfactory.py \
+      dockbarx/theme.py \
+      mate_panel_applet/dockbarx_mate_applet
+    do
+      substituteInPlace $f --replace /usr/share/ $out/share/
+    done
+  '';
+
+  postInstall = ''
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  # Arguments to be passed to `makeWrapper`, only used by buildPython*
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/xuzhen/dockbarx";
+    description = "Lightweight taskbar/panel replacement which works as a stand-alone dock";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/doctave/cargo-lock.patch b/nixpkgs/pkgs/applications/misc/doctave/cargo-lock.patch
new file mode 100644
index 000000000000..b9b7797bc350
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doctave/cargo-lock.patch
@@ -0,0 +1,11 @@
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -295,7 +295,7 @@ dependencies = [
+ 
+ [[package]]
+ name = "doctave"
+-version = "0.4.0"
++version = "0.4.2"
+ dependencies = [
+  "alphanumeric-sort",
+  "ascii",
diff --git a/nixpkgs/pkgs/applications/misc/doctave/default.nix b/nixpkgs/pkgs/applications/misc/doctave/default.nix
new file mode 100644
index 000000000000..3ebe50311d57
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doctave/default.nix
@@ -0,0 +1,31 @@
+{ lib, rustPlatform, fetchFromGitHub, stdenv, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "doctave";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "doctave";
+    repo = pname;
+    rev = version;
+    sha256 = "1780pqvnlbxxhm7rynnysqr0vihdkwmc6rmgp43bmj1k18ar4qgj";
+  };
+
+  # Cargo.lock is outdated
+  cargoPatches = [ ./cargo-lock.patch ];
+
+  cargoSha256 = "sha256-keLcNttdM9JUnn3qi/bWkcObIHl3MRACDHKPSZuScOc=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    CoreServices
+  ];
+
+  meta = with lib; {
+    description = "A batteries-included developer documentation site generator";
+    homepage = "https://github.com/doctave/doctave";
+    changelog = "https://github.com/doctave/doctave/blob/${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "doctave";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/doing/Gemfile b/nixpkgs/pkgs/applications/misc/doing/Gemfile
new file mode 100644
index 000000000000..2706a85e9d89
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doing/Gemfile
@@ -0,0 +1,2 @@
+source 'https://rubygems.org'
+gem 'doing', '1.0.10pre'
diff --git a/nixpkgs/pkgs/applications/misc/doing/Gemfile.lock b/nixpkgs/pkgs/applications/misc/doing/Gemfile.lock
new file mode 100644
index 000000000000..1b969869f76c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doing/Gemfile.lock
@@ -0,0 +1,25 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    chronic (0.10.2)
+    deep_merge (1.2.1)
+    doing (1.0.10pre)
+      chronic (~> 0.10, >= 0.10.2)
+      deep_merge
+      gli (~> 2.17.1)
+      haml (= 4.0.3)
+      json (~> 1.8.1)
+    gli (2.17.1)
+    haml (4.0.3)
+      tilt
+    json (1.8.6)
+    tilt (2.0.8)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  doing (= 1.0.10pre)
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/misc/doing/default.nix b/nixpkgs/pkgs/applications/misc/doing/default.nix
new file mode 100644
index 000000000000..c5114eccc77f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doing/default.nix
@@ -0,0 +1,26 @@
+{ lib, bundlerEnv, ruby, bundlerUpdateScript
+}:
+
+bundlerEnv {
+  pname = "doing";
+  version = (import ./gemset.nix).doing.version;
+
+  inherit ruby;
+  gemdir = ./.;
+
+  passthru.updateScript = bundlerUpdateScript "doing";
+
+  meta = with lib; {
+    description = "A command line tool for keeping track of what you’re doing and tracking what you’ve done";
+    longDescription = ''
+      doing is a basic CLI for adding and listing "what was I doing" reminders
+      in a TaskPaper-formatted text file. It allows for multiple
+      sections/categories and flexible output formatting.
+    '';
+    homepage    = "https://brettterpstra.com/projects/doing/";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ ktf nicknovitski ];
+    platforms   = platforms.unix;
+    mainProgram = "doing";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/doing/gemset.nix b/nixpkgs/pkgs/applications/misc/doing/gemset.nix
new file mode 100644
index 000000000000..1e39123a83ba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/doing/gemset.nix
@@ -0,0 +1,60 @@
+{
+  chronic = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hrdkn4g8x7dlzxwb1rfgr8kw3bp4ywg5l4y4i9c2g5cwv62yvvn";
+      type = "gem";
+    };
+    version = "0.10.2";
+  };
+  deep_merge = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1q3picw7zx1xdkybmrnhmk2hycxzaa0jv4gqrby1s90dy5n7fmsb";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  doing = {
+    dependencies = ["chronic" "deep_merge" "gli" "haml" "json"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1y42yc7h45sz9hqj3g1dd77ipx58l7v64i7mrsj3is2f5rszd1rv";
+      type = "gem";
+    };
+    version = "1.0.10pre";
+  };
+  gli = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0g7g3lxhh2b4h4im58zywj9vcfixfgndfsvp84cr3x67b5zm4kaq";
+      type = "gem";
+    };
+    version = "2.17.1";
+  };
+  haml = {
+    dependencies = ["tilt"];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l9zhfdk9z7xjfdp108r9fw4xa55hflin7hh3lpafbf9bdz96knr";
+      type = "gem";
+    };
+    version = "4.0.3";
+  };
+  json = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qmj7fypgb9vag723w1a49qihxrcf5shzars106ynw2zk352gbv5";
+      type = "gem";
+    };
+    version = "1.8.6";
+  };
+  tilt = {
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0020mrgdf11q23hm1ddd6fv691l51vi10af00f137ilcdb2ycfra";
+      type = "gem";
+    };
+    version = "2.0.8";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/done/Cargo.lock b/nixpkgs/pkgs/applications/misc/done/Cargo.lock
new file mode 100644
index 000000000000..00698793f26e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/done/Cargo.lock
@@ -0,0 +1,3504 @@
+# 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.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.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783"
+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 = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "async-compression"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d495b6dc0184693324491a5ac05f559acc97bf937ab31d7a1c33dd0016be6d2b"
+dependencies = [
+ "flate2",
+ "futures-core",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[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.29",
+]
+
+[[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.29",
+]
+
+[[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.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "414dcefbc63d77c526a76b3afcf6fbb9b5e2791c19c3aa2297733208750c6e53"
+
+[[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 = "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"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "cairo-rs"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d859b656775a6b1dd078d3e5924884e6ea88aa649a7fdde03d5b2ec56ffcc10b"
+dependencies = [
+ "bitflags 2.4.0",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd4d115132e01c0165e3bf5f56aedee8980b0b96ede4eb000b693c05a8adb8ff"
+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 = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9"
+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.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95ed24df0632f708f5f6d8082675bef2596f7084dee3dd55f632290bf35bfe0f"
+dependencies = [
+ "android-tzdata",
+ "iana-time-zone",
+ "js-sys",
+ "num-traits",
+ "serde",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "chrono-humanize"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "799627e6b4d27827a814e837b9d8a504832086081806d45b1afa34dc982b023b"
+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 = "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_done"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "async-stream",
+ "async-trait",
+ "cascade",
+ "chrono",
+ "diesel",
+ "diesel_migrations",
+ "futures",
+ "graph-rs-sdk",
+ "http",
+ "keytar",
+ "libset",
+ "open",
+ "regex",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "strum 0.25.0",
+ "strum_macros 0.25.2",
+ "tokio",
+ "tracing",
+ "tracing-subscriber",
+ "url",
+ "uuid",
+]
+
+[[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 = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "typenum",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbe98ba1789d56fb3db3bee5e032774d4f421b685de7ba703643584ba24effbe"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4ce20f6b8433da4841b1dadfb9468709868022d829d5ca1f2ffbda928455ea3"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20888d9e1d2298e2ff473cee30efe7d5036e437857ab68bbfea84c74dba91da2"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fa16a70dd58129e4dfffdff535fb1bce66673f7bbeec4a5a1765a504e1ccd84"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[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.0",
+ "lock_api",
+ "once_cell",
+ "parking_lot_core",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946"
+
+[[package]]
+name = "derive-new"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "diesel"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98235fdc2f355d330a8244184ab6b4b33c28679c0b4158f63138e51d6cf7e88"
+dependencies = [
+ "chrono",
+ "diesel_derives",
+ "libsqlite3-sys",
+ "time 0.3.28",
+]
+
+[[package]]
+name = "diesel_derives"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e054665eaf6d97d1e7125512bb2d35d07c73ac86cc6920174cb42d1ab697a554"
+dependencies = [
+ "diesel_table_macro_syntax",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "diesel_migrations"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6036b3f0120c5961381b570ee20a02432d7e2d27ea60de9578799cf9156914ac"
+dependencies = [
+ "diesel",
+ "migrations_internals",
+ "migrations_macros",
+]
+
+[[package]]
+name = "diesel_table_macro_syntax"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc5557efc453706fed5e4fa85006fe9817c224c3f480a34c7e5959fd700921c5"
+dependencies = [
+ "syn 2.0.29",
+]
+
+[[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 = "directories"
+version = "4.0.1"
+source = "git+https://github.com/edfloreshz/directories-rs#6a6d83d853a35ee3273034215c4defaf61286fe5"
+dependencies = [
+ "anyhow",
+ "dirs-sys",
+]
+
+[[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-sys"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+dependencies = [
+ "libc",
+ "redox_users",
+ "winapi",
+]
+
+[[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.29",
+]
+
+[[package]]
+name = "done"
+version = "0.2.0"
+dependencies = [
+ "anyhow",
+ "chrono",
+ "core_done",
+ "derive-new",
+ "futures",
+ "gettext-rs",
+ "glib",
+ "glib-build-tools",
+ "i18n-embed",
+ "i18n-embed-fl",
+ "libadwaita",
+ "libset",
+ "once_cell",
+ "relm4",
+ "relm4-icons",
+ "reqwest",
+ "rust-embed",
+ "serde",
+ "strum 0.25.0",
+ "strum_macros 0.25.2",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "dyn-clone"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbfc4744c1b8f2a09adc0e55242f60b1af195d88596bd8700be74418c056c555"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[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.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c138974f9d5e7fe373eb04df7cae98833802ae4b11c24ac7039a21d5af4b26c"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd"
+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 = "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 = "flate2"
+version = "1.0.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[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",
+ "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 = "flume"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "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.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fragile"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa"
+
+[[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 2.0.29",
+]
+
+[[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 = "gdk-pixbuf"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbc9c2ed73a81d556b65d08879ba4ee58808a6b1927ce915262185d6d547c6f3"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6982d9815ed6ac95b0467b189e81f29dea26d08a732926ec113e65744ed3f96c"
+dependencies = [
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk4-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk4-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[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.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gettext-rs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e49ea8a8fad198aaa1f9655a2524b64b70eb06b2f3ff37da407566c93054f364"
+dependencies = [
+ "gettext-sys",
+ "locale_config",
+]
+
+[[package]]
+name = "gettext-sys"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c63ce2e00f56a206778276704bbe38564c8695249fdc8f354b4ef71c57c3839d"
+dependencies = [
+ "cc",
+ "temp-dir",
+]
+
+[[package]]
+name = "gimli"
+version = "0.28.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+
+[[package]]
+name = "gio"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7884cba6b1c5db1607d970cadf44b14a43913d42bc68766eea6a5e2fe0891524"
+dependencies = [
+ "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.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "331156127e8166dd815cf8d2db3a5beb492610c716c03ee6db4f2d07092af0a7"
+dependencies = [
+ "bitflags 2.4.0",
+ "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-build-tools"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3431c56f463443cba9bc3600248bc6d680cb614c2ee1cdd39dab5415bd12ac5c"
+
+[[package]]
+name = "glib-macros"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "179643c50bf28d20d2f6eacd2531a88f2f5d9747dd0b86b8af1e8bb5dd0de3c0"
+dependencies = [
+ "heck",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "graph-core"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f0fb786a3bfe3daa33f585534e871f04d3965d14398343d8818e12cefc02703"
+dependencies = [
+ "Inflector",
+ "remain",
+ "serde",
+ "serde_json",
+ "strum 0.24.1",
+]
+
+[[package]]
+name = "graph-error"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f20cdf0cafaa6345cec12d94614c3c3d9ae8abf60fbb9783f706610a80119b7"
+dependencies = [
+ "base64",
+ "futures",
+ "handlebars",
+ "http",
+ "http-serde",
+ "reqwest",
+ "ring",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "graph-http"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03724659be7b906ab31469dadf8b55191dceda793f52335cbd8b5be3ff9a3b3a"
+dependencies = [
+ "async-stream",
+ "async-trait",
+ "bytes",
+ "futures",
+ "graph-core",
+ "graph-error",
+ "handlebars",
+ "http",
+ "percent-encoding",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "thiserror",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "graph-oauth"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "362697376221ab094832dc33fd11c5b85c891c9174f7d0a79032f1d03b065d94"
+dependencies = [
+ "base64",
+ "chrono",
+ "chrono-humanize",
+ "graph-error",
+ "reqwest",
+ "ring",
+ "serde",
+ "serde-aux",
+ "serde_json",
+ "strum 0.24.1",
+ "url",
+ "webbrowser",
+]
+
+[[package]]
+name = "graph-rs-sdk"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed4aa7e7207ecb25d399023e7f6eb0433694f8f162c494e90059ec5d1d03a9da"
+dependencies = [
+ "graph-core",
+ "graph-error",
+ "graph-http",
+ "graph-oauth",
+ "handlebars",
+ "lazy_static",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "url",
+]
+
+[[package]]
+name = "graphene-rs"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b2228cda1505613a7a956cca69076892cfbda84fc2b7a62b94a41a272c0c401"
+dependencies = [
+ "glib",
+ "graphene-sys",
+ "libc",
+]
+
+[[package]]
+name = "graphene-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc4144cee8fc8788f2a9b73dc5f1d4e1189d1f95305c4cb7bd9c1af1cfa31f59"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gsk4"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc25855255120f294d874acd6eaf4fbed7ce1cdc550e2d8415ea57fafbe816d5"
+dependencies = [
+ "cairo-rs",
+ "gdk4",
+ "glib",
+ "graphene-rs",
+ "gsk4-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gsk4-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1ecf3a63bf1223d68f80f72cc896c4d8c80482fbce1c9a12c66d3de7290ee46"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk4-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk4"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3b095b26f2a2df70be1805d3590eeb9d7a05ecb5be9649b82defc72dc56228c"
+dependencies = [
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "graphene-rs",
+ "gsk4",
+ "gtk4-macros",
+ "gtk4-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gtk4-macros"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d57ec49cf9b657f69a05bca8027cff0a8dfd0c49e812be026fc7311f2163832f"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "gtk4-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b0bdde87c50317b4f355bcbb4a9c2c414ece1b7c824fb4ad4ba8f3bdb2c6603"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "gsk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gvdb"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7473589355e97ab7ab46549d3786406d6fcad8837c94bb7874c18a8a3ae653fc"
+dependencies = [
+ "byteorder",
+ "flate2",
+ "quick-xml",
+ "safe-transmute",
+ "serde",
+ "serde_json",
+ "walkdir",
+ "zvariant",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 1.9.3",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "handlebars"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af92141a22acceb515fb6b13ac59d6d0b3dd3437e13832573af8e0d3247f29d5"
+dependencies = [
+ "hashbrown 0.5.0",
+ "log",
+ "pest",
+ "pest_derive",
+ "quick-error",
+ "serde",
+ "serde_json",
+ "walkdir",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1de41fb8dba9714efd92241565cdff73f78508c95697dd56787d3cba27e2353"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[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 = "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 = "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 = "http-serde"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f560b665ad9f1572cfcaf034f7fb84338a7ce945216d64a90fd81f046a3caee"
+dependencies = [
+ "http",
+ "serde",
+]
+
+[[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 = "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 0.4.9",
+ "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 = "i18n-config"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b987084cadad6e2f2b1e6ea62c44123591a3c044793a1beabf71a8356ea768d5"
+dependencies = [
+ "log",
+ "serde",
+ "serde_derive",
+ "thiserror",
+ "toml 0.7.6",
+ "unic-langid",
+]
+
+[[package]]
+name = "i18n-embed"
+version = "0.13.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92a86226a7a16632de6723449ee5fe70bac5af718bc642ee9ca2f0f6e14fa1fa"
+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.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d26a3d3569737dfaac7fc1c4078e6af07471c3060b8e570bcd83cdd5f4685395"
+dependencies = [
+ "dashmap",
+ "find-crate",
+ "fluent",
+ "fluent-syntax",
+ "i18n-config",
+ "i18n-embed",
+ "lazy_static",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.29",
+ "unic-langid",
+]
+
+[[package]]
+name = "i18n-embed-impl"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9a95d065e6be4499e50159172395559a388d20cf13c84c77e4a1e341786f219"
+dependencies = [
+ "find-crate",
+ "i18n-config",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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 = "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",
+]
+
+[[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 = "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 = "ipnet"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
+
+[[package]]
+name = "is-docker"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "is-wsl"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5"
+dependencies = [
+ "is-docker",
+ "once_cell",
+]
+
+[[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",
+ "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 = "js-sys"
+version = "0.3.64"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "keytar"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d361c55fba09829ac620b040f5425bf239b1030c3d6820a84acac8da867dca4d"
+dependencies = [
+ "keytar-sys",
+]
+
+[[package]]
+name = "keytar-sys"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe908c6896705a1cb516cd6a5d956c63f08d95ace81b93253a98cd93e1e6a65a"
+dependencies = [
+ "cc",
+ "cxx",
+ "cxx-build",
+ "pkg-config",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libadwaita"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06444f4ca05a60693da6e9e2b591bd40a298e65a118a8d5e830771718b3e0253"
+dependencies = [
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "libadwaita-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "libadwaita-sys"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "021cfe3d1fcfa82411765a791f7e9b32f35dd98ce88d2e3fa10e7320f5cc8ce7"
+dependencies = [
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libset"
+version = "0.1.2"
+source = "git+https://github.com/edfloreshz/libset?branch=beta#f44cd2142b23996ed8390b73251a87cabd35caae"
+dependencies = [
+ "anyhow",
+ "directories",
+ "dirs",
+ "dyn-clone",
+ "erased-serde",
+ "serde",
+ "serde_json",
+ "toml 0.5.11",
+ "walkdir",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afc22eff61b133b115c6e8c74e818c628d6d5e7a502afea6f64dee076dd94326"
+dependencies = [
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d240c6f7e1ba3a28b0249f774e6a9dd0175054b52dfbb61b16eb8505c3785c9"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
+
+[[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.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 = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "migrations_internals"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f23f71580015254b020e856feac3df5878c2c7a8812297edd6c0a485ac9dada"
+dependencies = [
+ "serde",
+ "toml 0.7.6",
+]
+
+[[package]]
+name = "migrations_macros"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cce3325ac70e67bbab5bd837a31cae01f1a6db64e0e744a33cb03a543469ef08"
+dependencies = [
+ "migrations_internals",
+ "proc-macro2",
+ "quote",
+]
+
+[[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.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 = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom",
+]
+
+[[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 = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[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.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
+dependencies = [
+ "autocfg",
+]
+
+[[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 = "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.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 = "open"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfabf1927dce4d6fdf563d63328a0a506101ced3ec780ca2135747336c98cef8"
+dependencies = [
+ "is-wsl",
+ "libc",
+ "pathdiff",
+]
+
+[[package]]
+name = "openssl"
+version = "0.10.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bac25ee399abb46215765b1cb35bc0212377e58a061560d8b29b024fd0430e7c"
+dependencies = [
+ "bitflags 2.4.0",
+ "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.29",
+]
+
+[[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.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db7e971c2c2bba161b2d2fdf37080177eff520b3bc044787c7f1f5f9e78d869b"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "pango"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06a9e54b831d033206160096b825f2070cf5fda7e35167b1c01e9e774f9202d1"
+dependencies = [
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[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 0.3.5",
+ "smallvec",
+ "windows-targets 0.48.5",
+]
+
+[[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.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.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bee7be22ce7918f641a33f08e3f43388c7656772244e2bbb2477f44cc9021a"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1511785c5e98d79a05e8a6bc34b4ac2168a0e3e92161862030ad84daa223141"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b42f0394d3123e33353ca5e1e89092e533d2cc490389f2bd6131c43c634ebc5f"
+dependencies = [
+ "once_cell",
+ "pest",
+ "sha2",
+]
+
+[[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-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.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
+dependencies = [
+ "unicode-ident",
+]
+
+[[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.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[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 = "regex"
+version = "1.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12de2eff854e5fa4b1295edd650e227e9d8fb0c9e90b12e7f36d6a6811791a29"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49530408a136e16e5b486e883fbb6ba058e8e4e8ae6621a77b048b314336e629"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "relm4"
+version = "0.7.0-alpha.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d307673e36bb450a4823d500d661f53e1622a685b330149c193b791687146b3f"
+dependencies = [
+ "async-trait",
+ "flume",
+ "fragile",
+ "futures",
+ "gtk4",
+ "libadwaita",
+ "once_cell",
+ "relm4-macros",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "relm4-icons"
+version = "0.7.0-alpha.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ac16f5e6ed25fbd23c667f060fdc2f320d317a3997063503cbdeffb14dcaf06"
+dependencies = [
+ "gtk4",
+ "gvdb",
+]
+
+[[package]]
+name = "relm4-macros"
+version = "0.7.0-alpha.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d1892cdfb2df6c8bbe5a84451d3979125255e31437c0bfd14c81bde93ff0cf6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "remain"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bce3a7139d2ee67d07538ee5dba997364fbc243e7e7143e96eb830c74bfaa082"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.29",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1"
+dependencies = [
+ "async-compression",
+ "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",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "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 = "rust-embed"
+version = "6.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a36224c3276f8c4ebc8c20f158eca7ca4359c8db89991c4925132aaaf6702661"
+dependencies = [
+ "rust-embed-impl",
+ "rust-embed-utils",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-impl"
+version = "6.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b94b81e5b2c284684141a2fb9e2a31be90638caf040bf9afbc5a0416afe1ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "rust-embed-utils",
+ "syn 2.0.29",
+ "walkdir",
+]
+
+[[package]]
+name = "rust-embed-utils"
+version = "7.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d38ff6bf570dc3bb7100fce9f7b60c33fa71d80e88da3f2580df4ff2bdded74"
+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.38.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0c3dde1fc030af041adc40e79c0e7fbcf431dd24870053d187d7c66e4b87453"
+dependencies = [
+ "bitflags 2.4.0",
+ "errno",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.48.0",
+]
+
+[[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 = "safe-transmute"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98a01dab6acf992653be49205bdd549f32f17cb2803e8eacf1560bf97259aae8"
+
+[[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.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "scratch"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152"
+
+[[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 = "self_cell"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af"
+
+[[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.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-aux"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3dfe1b7eb6f9dcf011bd6fad169cdeaae75eda0d61b1a99a3f015b41b0cae39"
+dependencies = [
+ "chrono",
+ "serde",
+ "serde_json",
+]
+
+[[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 2.0.29",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.105"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "693151e1ac27563d6dbcec9dee9fbd5da8539b20fa14ad3752b2e6d363ace360"
+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 = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+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 = "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.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.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 = "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.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+dependencies = [
+ "strum_macros 0.24.3",
+]
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+
+[[package]]
+name = "strum_macros"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.29",
+]
+
+[[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.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml 0.7.6",
+ "version-compare",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a"
+
+[[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.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb94d2f3cc536af71caac6b6fcebf65860b347e7ce0cc9ebe8f70d3e521054ef"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.3.5",
+ "rustix",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[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 2.0.29",
+]
+
+[[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 = "time"
+version = "0.3.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48"
+dependencies = [
+ "deranged",
+ "itoa",
+ "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.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a942f44339478ef67935ab2bbaec2fb0322496cf3cbe84b261e06ac3814c572"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tinystr"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ac3f5b6856e931e15e07b478e98c8045239829a65f9156d4fa7e7788197a5ef"
+dependencies = [
+ "displaydoc",
+]
+
+[[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",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2 0.5.3",
+ "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.29",
+]
+
+[[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-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",
+ "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.29",
+]
+
+[[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 = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[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.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 = "unic-langid"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "398f9ad7239db44fd0f80fe068d12ff22d78354080332a5077dc6f52f14dcf2f"
+dependencies = [
+ "unic-langid-impl",
+]
+
+[[package]]
+name = "unic-langid-impl"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e35bfd2f2b8796545b55d7d3fd3e89a0613f68a0d1c8bc28cb7ff96b411a35ff"
+dependencies = [
+ "serde",
+ "tinystr",
+]
+
+[[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 = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "uuid"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
+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 = "walkdir"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
+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 = "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",
+ "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.29",
+ "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",
+ "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.29",
+ "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 = "wasm-streams"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[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 = "webbrowser"
+version = "0.8.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2c79b77f525a2d670cb40619d7d9c673d09e0666f72c591ebd7861f84a87e57"
+dependencies = [
+ "core-foundation",
+ "home",
+ "jni",
+ "log",
+ "ndk-context",
+ "objc",
+ "raw-window-handle",
+ "url",
+ "web-sys",
+]
+
+[[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.5",
+]
+
+[[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-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_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_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_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_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_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_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_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 = "winnow"
+version = "0.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c2e3184b9c4e92ad5167ca73039d0c42476302ab603e2fec4487511f38ccefc"
+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 = "zvariant"
+version = "3.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c"
+dependencies = [
+ "byteorder",
+ "libc",
+ "serde",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zvariant_utils"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
diff --git a/nixpkgs/pkgs/applications/misc/done/default.nix b/nixpkgs/pkgs/applications/misc/done/default.nix
new file mode 100644
index 000000000000..a52ebda61945
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/done/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cargo
+, glib
+, meson
+, ninja
+, pkg-config
+, rustPlatform
+, rustc
+, wrapGAppsHook4
+, gdk-pixbuf
+, gtk4
+, libadwaita
+, libsecret
+, openssl
+, sqlite
+, darwin
+, gettext
+}:
+
+stdenv.mkDerivation rec {
+  pname = "done";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "done-devs";
+    repo = "done";
+    rev = "v${version}";
+    hash = "sha256-97bWBayEyhCMjTxxxFVdO8V2pBZuVzss1Tp9/TnfDB0=";
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "directories-4.0.1" = "sha256-4M8WstNq5I7UduIUZI9q1R9oazp7MDBRBRBHZv6iGWI=";
+      "libset-0.1.2" = "sha256-+eA6pqafIYomXdlvwSzT/b/T4Je5HgPPmGL2M11VpMU=";
+    };
+  };
+
+  nativeBuildInputs = [
+    cargo
+    glib
+    meson
+    ninja
+    pkg-config
+    rustPlatform.cargoSetupHook
+    rustc
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    gtk4
+    libadwaita
+    libsecret
+    openssl
+    sqlite
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+  ];
+
+  env = lib.optionalAttrs stdenv.isDarwin {
+    GETTEXT_DIR = gettext;
+    # Work around https://github.com/NixOS/nixpkgs/issues/166205.
+    NIX_LDFLAGS = "-l${stdenv.cc.libcxx.cxxabi.libName}";
+  };
+
+  meta = with lib; {
+    description = "The ultimate task management solution for seamless organization and efficiency";
+    homepage = "https://done.edfloreshz.dev/";
+    changelog = "https://github.com/done-devs/done/blob/${src.rev}/CHANGES.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dotfiles/default.nix b/nixpkgs/pkgs/applications/misc/dotfiles/default.nix
new file mode 100644
index 000000000000..52d5016200f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dotfiles/default.nix
@@ -0,0 +1,23 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "dotfiles";
+  version = "0.6.4";
+
+  src = fetchPypi {
+    inherit version pname;
+    sha256 = "03qis6m9r2qh00sqbgwsm883s4bj1ibwpgk86yh4l235mdw8jywv";
+  };
+
+  # No tests in archive
+  doCheck = false;
+
+  nativeCheckInputs = with python3Packages; [ pytest ];
+  propagatedBuildInputs = with python3Packages; [ click ];
+
+  meta = with lib; {
+    description = "Easily manage your dotfiles";
+    homepage = "https://github.com/jbernard/dotfiles";
+    license = licenses.isc;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/downonspot/Cargo.lock.patch b/nixpkgs/pkgs/applications/misc/downonspot/Cargo.lock.patch
new file mode 100644
index 000000000000..e224603a3070
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/downonspot/Cargo.lock.patch
@@ -0,0 +1,97 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index e6f1267..3bf16a5 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1632,7 +1632,8 @@ dependencies = [
+ [[package]]
+ name = "librespot"
+ version = "0.4.2"
+-source = "git+ssh://git@github.com/oSumAtrIX/free-librespot.git#f28fa264528dc85f8f325c18e8461b0f2b43dca1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "ea4c9952ef48968f8184a4a87f8576982426ebe623342d5a28f7d9c4978e4a44"
+ dependencies = [
+  "base64 0.13.1",
+  "env_logger",
+@@ -1658,7 +1659,8 @@ dependencies = [
+ [[package]]
+ name = "librespot-audio"
+ version = "0.4.2"
+-source = "git+ssh://git@github.com/oSumAtrIX/free-librespot.git#f28fa264528dc85f8f325c18e8461b0f2b43dca1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "c176a31355e1ea8e0b9c4ced19df4947bfe4770661c25c142b6fba2365940d9d"
+ dependencies = [
+  "aes-ctr",
+  "byteorder",
+@@ -1673,7 +1675,8 @@ dependencies = [
+ [[package]]
+ name = "librespot-connect"
+ version = "0.4.2"
+-source = "git+ssh://git@github.com/oSumAtrIX/free-librespot.git#f28fa264528dc85f8f325c18e8461b0f2b43dca1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "4ffafb6a443e9445ccb3d5d591573b5b1da3c89a9b8846c63ba2c3710210d3ec"
+ dependencies = [
+  "form_urlencoded",
+  "futures-util",
+@@ -1693,7 +1696,8 @@ dependencies = [
+ [[package]]
+ name = "librespot-core"
+ version = "0.4.2"
+-source = "git+ssh://git@github.com/oSumAtrIX/free-librespot.git#f28fa264528dc85f8f325c18e8461b0f2b43dca1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "046349f25888e644bf02d9c5de0164b2a493d29aa4ce18e1ad0b756da9b55d6d"
+ dependencies = [
+  "aes",
+  "base64 0.13.1",
+@@ -1733,7 +1737,8 @@ dependencies = [
+ [[package]]
+ name = "librespot-discovery"
+ version = "0.4.2"
+-source = "git+ssh://git@github.com/oSumAtrIX/free-librespot.git#f28fa264528dc85f8f325c18e8461b0f2b43dca1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "2aa877d18f6150364012cb4be5682d62d7c712c88bae2d0d01720fd7c15e2f06"
+ dependencies = [
+  "aes-ctr",
+  "base64 0.13.1",
+@@ -1754,7 +1759,8 @@ dependencies = [
+ [[package]]
+ name = "librespot-metadata"
+ version = "0.4.2"
+-source = "git+ssh://git@github.com/oSumAtrIX/free-librespot.git#f28fa264528dc85f8f325c18e8461b0f2b43dca1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "6b80361fcbcb5092056fd47c08c34d5d51b08385d8efb6941c0d3e46d032c21c"
+ dependencies = [
+  "async-trait",
+  "byteorder",
+@@ -1767,7 +1773,8 @@ dependencies = [
+ [[package]]
+ name = "librespot-playback"
+ version = "0.4.2"
+-source = "git+ssh://git@github.com/oSumAtrIX/free-librespot.git#f28fa264528dc85f8f325c18e8461b0f2b43dca1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5190a0b9bcc7f70ee4196a6b4a1c731d405ca130d4a6fcd4c561cfdde8b7cfb7"
+ dependencies = [
+  "byteorder",
+  "cpal",
+@@ -1792,7 +1799,8 @@ dependencies = [
+ [[package]]
+ name = "librespot-protocol"
+ version = "0.4.2"
+-source = "git+ssh://git@github.com/oSumAtrIX/free-librespot.git#f28fa264528dc85f8f325c18e8461b0f2b43dca1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "5d6d3ac6196ac0ea67bbe039f56d6730a5d8b31502ef9bce0f504ed729dcb39f"
+ dependencies = [
+  "glob",
+  "protobuf 2.28.0",
+diff --git a/Cargo.toml b/Cargo.toml
+index 40ca2c1..734a3fb 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -29,7 +29,7 @@ reqwest = "0.11"
+ colored = "2"
+ lame = "0.1"
+ aspotify = "0.7.1"
+-librespot = { git = "ssh://git@github.com/oSumAtrIX/free-librespot.git" }
++librespot = "0.4.2"
+ async-std = { version = "1.12", features = ["attributes", "tokio1"] }
+ serde_json = "1.0"
+ async-stream = "0.3"
diff --git a/nixpkgs/pkgs/applications/misc/downonspot/default.nix b/nixpkgs/pkgs/applications/misc/downonspot/default.nix
new file mode 100644
index 000000000000..5a7c6ce6933b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/downonspot/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, makeWrapper
+, alsa-lib
+, lame
+, openssl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "downonspot";
+  version = "unstable-2023-11-26";
+
+  src = fetchFromGitHub {
+    owner = "oSumAtrIX";
+    repo = "DownOnSpot";
+    rev = "406fbf137306208bcb9835ad3aa92b0edbc01805";
+    hash = "sha256-gY5pDZ5EwKhBmV8VyuKW/19BgfPSIZSp9rEI/GuonYQ=";
+  };
+
+  # Use official public librespot version
+  cargoPatches = [ ./Cargo.lock.patch ];
+
+  cargoHash = "sha256-CG9QY9Nfy/dxzvSPG2NB2/6yjTvdoDI76PRSaM138Wk=";
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [
+    openssl
+    alsa-lib
+    lame
+  ];
+
+  meta = with lib; {
+    description = "A Spotify downloader written in rust";
+    homepage = "https://github.com/oSumAtrIX/DownOnSpot";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ onny ];
+    mainProgram = "down_on_spot";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dozenal/default.nix b/nixpkgs/pkgs/applications/misc/dozenal/default.nix
new file mode 100644
index 000000000000..c0bedb728aa6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dozenal/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchFromGitHub, ncurses, hdate, lua5_2 }:
+
+stdenv.mkDerivation rec {
+  version = "12010904";
+  pname = "dozenal";
+  src = fetchFromGitHub {
+    owner = "dgoodmaniii";
+    repo = "dozenal";
+    rev = "v${version}";
+    sha256 = "1ic63gpdda762x6ks3al71dwgmsy2isicqyr2935bd245jx8s209";
+  };
+  makeFlags = [
+              # author do not use configure and prefix directly using $prefix
+              "prefix=$(out)"
+              # graphical version of dozdc requires xforms, which is not i nixpkgs so I turned it down
+              "XFORMS_FLAGS=-UXFORMS"
+              "LUALIB=-llua"
+              "bindir=$(prefix)/bin/"
+            ];
+  # some include hardcodes the lua libraries path. This is a patch for that
+  patches = [ ./lua-header.patch ];
+  preBuild = "cd dozenal";
+  buildInputs = [ ncurses hdate lua5_2 ];
+
+  # Parallel builds fail due to no dependencies between subdirs.
+  # As a result some subdirs are atempted to build twice:
+  #   ../dec/dec.c:39:10: fatal error: conv.h: No such file or directory
+  # Let's disable parallelism until it's fixed upstream:
+  #  https://gitlab.com/dgoodmaniii/dozenal/-/issues/8
+  enableParallelBuilding = false;
+
+  # I remove gdozdc, as I didn't figure all it's dependency yet.
+  postInstall = "rm $out/bin/gdozdc";
+
+  meta = {
+    description = "A complete suite of dozenal (base twelve) programs";
+    longDescription = ''
+      Programs
+
+      doz --- a converter; converts decimal numbers into dozenal. Accepts
+         input in standard or exponential notation (i.e., "1492.2" or "1.4922e3").
+      dec --- a converter; converts dozenal numbers into decimal. Accepts input
+         in standard or exponential notation (i.e., "X44;4" or "X;444e2").
+      dozword --- converts a dozenal number (integers only) into words,
+         according to the Pendlebury system.
+      dozdc --- a full-featured scientific calculator which works in the
+         dozenal base. RPN command line.
+      tgmconv --- a converter for all standard measurements; converts to and
+         from TGM, Imperial, customary, and SI metric.
+      dozpret --- a pretty-printer for dozenal numbers; inserts spacing (or
+         other characters) as desired, and can also transform transdecimal digits
+         from 'X' to 'E' into any character or sequence of characters desired.
+      dozdate --- a more-or-less drop-in replacement for GNU and BSD date, it
+         outputs the date and time in dozenal, as well as containing some TGM
+         extensions.
+      dozstring --- a simple byte converter; absorbs a string either from
+         standard input or a command line argument, leaving it identical but
+         for the numbers, which it converts into dozenal. Options for padding
+         and for not converting specific numbers.
+      doman --- a converter which takes a dozenal integer and
+         emits its equivalent in a non-place-value system, such as
+         Roman numerals.  Arbitrary ranks and symbols may be used.
+         Defaults to dozenal Roman numerals.
+    '';
+    homepage = "https://github.com/dgoodmaniii/dozenal/";
+    maintainers = with lib.maintainers; [ CharlesHD ];
+    license = lib.licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dozenal/lua-header.patch b/nixpkgs/pkgs/applications/misc/dozenal/lua-header.patch
new file mode 100644
index 000000000000..45b76e159a11
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dozenal/lua-header.patch
@@ -0,0 +1,16 @@
+diff -ruN dozenal-12010904/dozenal/dozcal/call_lua.c dozenal-patched/dozenal/dozcal/call_lua.c
+--- dozenal-12010904/dozenal/dozcal/call_lua.c	2017-09-04 19:25:01.000000000 +0200
++++ dozenal-patched/dozenal/dozcal/call_lua.c	2018-06-13 10:19:57.821950327 +0200
+@@ -38,9 +38,9 @@
+ #include"utility.h"
+ #include"conv.h"
+ #include"proc_date.h"
+-#include<lua5.2/lua.h>
+-#include<lua5.2/lauxlib.h>
+-#include<lua5.2/lualib.h>
++#include<lua.h>
++#include<lauxlib.h>
++#include<lualib.h>
+ 
+ void bail(lua_State *L, int err_code, char *filename);
+ int file_prefix(char **s, char *t);
diff --git a/nixpkgs/pkgs/applications/misc/dstask/default.nix b/nixpkgs/pkgs/applications/misc/dstask/default.nix
new file mode 100644
index 000000000000..571763be5fef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dstask/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "dstask";
+  version = "0.26";
+
+  src = fetchFromGitHub {
+    owner = "naggie";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xZFQQDK+yGAv4IbuNe2dvNa3GDASeJY2mOYw94goAIM=";
+  };
+
+  # Set vendorHash to null because dstask vendors its dependencies (meaning
+  # that third party dependencies are stored in the repository).
+  #
+  # Ref <https://github.com/NixOS/nixpkgs/pull/87383#issuecomment-633204382>
+  # and <https://github.com/NixOS/nixpkgs/blob/d4226e3a4b5fcf988027147164e86665d382bbfa/pkgs/development/go-modules/generic/default.nix#L18>
+  vendorHash = null;
+
+  doCheck = false;
+
+  # The ldflags reduce the executable size by stripping some debug stuff.
+  # The other variables are set so that the output of dstask version shows the
+  # git ref and the release version from github.
+  # Ref <https://github.com/NixOS/nixpkgs/pull/87383#discussion_r432097657>
+  ldflags = [
+    "-w" "-s"
+    "-X github.com/naggie/dstask.VERSION=${version}"
+    "-X github.com/naggie/dstask.GIT_COMMIT=v${version}"
+  ];
+
+  meta = with lib; {
+    description = "Command line todo list with super-reliable git sync";
+    homepage = src.meta.homepage;
+    license = licenses.mit;
+    maintainers = with maintainers; [ stianlagstad ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/duden/default.nix b/nixpkgs/pkgs/applications/misc/duden/default.nix
new file mode 100644
index 000000000000..0d310e8c23dc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/duden/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonPackage rec {
+  pname = "duden";
+  version = "0.18.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "radomirbosak";
+    repo = "duden";
+    rev = version;
+    hash = "sha256-ZrarN09Znw4m6YiZxD7q7dTJ49WjmHDobLnOt8JCwvc=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    crayons
+    pyxdg
+    pyyaml
+    requests
+    setuptools
+  ];
+
+  pythonImportsCheck = [ "duden" ];
+
+  meta = with lib; {
+    description = "CLI for http://duden.de dictionary written in Python";
+    homepage = "https://github.com/radomirbosak/duden";
+    changelog = "https://github.com/radomirbosak/duden/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dupeguru/default.nix b/nixpkgs/pkgs/applications/misc/dupeguru/default.nix
new file mode 100644
index 000000000000..c514c2177369
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dupeguru/default.nix
@@ -0,0 +1,71 @@
+{ stdenv, lib, python3Packages, gettext, qt5, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "dupeguru";
+  version = "4.3.1";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "arsenetar";
+    repo = "dupeguru";
+    rev = version;
+    hash = "sha256-/jkZiCapmCLMp7WfgUmpsR8aNCfb3gBELlMYaC4e7zI=";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    python3Packages.pyqt5
+    python3Packages.setuptools
+    qt5.wrapQtAppsHook
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    hsaudiotag3k
+    mutagen
+    polib
+    pyqt5
+    pyqt5-sip
+    semantic-version
+    send2trash
+    sphinx
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+    "NO_VENV=1"
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export HOME="$(mktemp -d)"
+  '';
+
+  # Avoid double wrapping Python programs.
+  dontWrapQtApps = true;
+
+  # TODO: A bug in python wrapper
+  # see https://github.com/NixOS/nixpkgs/pull/75054#discussion_r357656916
+  preFixup = ''
+    makeWrapperArgs="''${qtWrapperArgs[@]}"
+  '';
+
+  # Executable in $out/bin is a symlink to $out/share/dupeguru/run.py
+  # so wrapPythonPrograms hook does not handle it automatically.
+  postFixup = ''
+    wrapPythonProgramsIn "$out/share/dupeguru" "$out $pythonPath"
+  '';
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "GUI tool to find duplicate files in a system";
+    homepage = "https://github.com/arsenetar/dupeguru";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ novoxd ];
+    mainProgram = "dupeguru";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dwdiff/default.nix b/nixpkgs/pkgs/applications/misc/dwdiff/default.nix
new file mode 100644
index 000000000000..320f8e25bcb7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dwdiff/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchurl
+, gettext
+, pkg-config
+, icu
+}:
+
+stdenv.mkDerivation rec {
+  pname = "dwdiff";
+  version = "2.1.4";
+
+  src = fetchurl {
+    url = "https://os.ghalkes.nl/dist/dwdiff-${version}.tar.bz2";
+    sha256 = "sha256-3xb+xE3LRn1lpCRqQ2KPk3QZlsF3PpMLkMbd4i3Vjgo=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    gettext
+    icu
+  ];
+
+  meta = with lib; {
+    description = "Front-end for the diff program that operates at the word level instead of the line level";
+    homepage = "https://os.ghalkes.nl/dwdiff.html";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ onny ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/dwmbar/default.nix b/nixpkgs/pkgs/applications/misc/dwmbar/default.nix
new file mode 100644
index 000000000000..0d942eff73d7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dwmbar/default.nix
@@ -0,0 +1,38 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation {
+  pname = "dwmbar";
+  version = "unstable-2021-12-22";
+
+  src = fetchFromGitHub {
+    owner = "thytom";
+    repo = "dwmbar";
+    rev = "574f5703c558a56bc9c354471543511255423dc7";
+    sha256 = "sha256-IrelZpgsxq2dnsjMdh7VC5eKffEGRbDkZmZBD+tROPs=";
+  };
+
+  postPatch = ''
+    substituteInPlace dwmbar \
+      --replace 'DEFAULT_CONFIG_DIR="/usr/share/dwmbar"' "DEFAULT_CONFIG_DIR=\"$out/share/dwmbar\""
+  '';
+
+  installPhase = ''
+    install -d $out/share/dwmbar
+    cp -r modules $out/share/dwmbar/
+    install -D -t $out/share/dwmbar/ config
+    install -D -t $out/share/dwmbar/ bar.sh
+    install -Dm755 -t $out/bin/ dwmbar
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thytom/dwmbar";
+    description = "A Modular Status Bar for dwm";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ baitinq ];
+    platforms = platforms.linux;
+    mainProgram = "dwmbar";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/dwmblocks/default.nix b/nixpkgs/pkgs/applications/misc/dwmblocks/default.nix
new file mode 100644
index 000000000000..0b7abc7e3dfc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/dwmblocks/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, libX11, patches ? [ ], writeText, conf ? null }:
+
+stdenv.mkDerivation {
+  pname = "dwmblocks";
+  version = "unstable-2020-12-27";
+
+  src = fetchFromGitHub {
+    owner = "torrinfail";
+    repo = "dwmblocks";
+    rev = "96cbb453e5373c05372fd4bf3faacfa53e409067";
+    sha256 = "00lxfxsrvhm60zzqlcwdv7xkqzya69mgpi2mr3ivzbc8s9h8nwqx";
+  };
+
+  buildInputs = [ libX11 ];
+
+  inherit patches;
+
+  postPatch =
+    let
+      configFile =
+        if lib.isDerivation conf || builtins.isPath conf
+        then conf else writeText "blocks.def.h" conf;
+    in
+      lib.optionalString (conf != null) "cp ${configFile} blocks.def.h";
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Modular status bar for dwm written in c";
+    homepage = "https://github.com/torrinfail/dwmblocks";
+    license = licenses.isc;
+    maintainers = with maintainers; [ sophrosyne ];
+    platforms = platforms.linux;
+    mainProgram = "dwmblocks";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/eaglemode/default.nix b/nixpkgs/pkgs/applications/misc/eaglemode/default.nix
new file mode 100644
index 000000000000..414995f0c545
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/eaglemode/default.nix
@@ -0,0 +1,72 @@
+{ lib, stdenv, fetchurl, perl, libX11, libXinerama, libjpeg, libpng, libtiff
+, libwebp, pkg-config, librsvg, glib, gtk2, libXext, libXxf86vm, poppler, vlc
+, ghostscript, makeWrapper, tzdata, makeDesktopItem, copyDesktopItems
+, directoryListingUpdater }:
+
+stdenv.mkDerivation rec {
+  pname = "eaglemode";
+  version = "0.96.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/eaglemode/${pname}-${version}.tar.bz2";
+    hash = "sha256-FIhCcMghzLg7Odcsou9hBw7kIaqLVUFEAKUk9uwRNNw=";
+  };
+
+  # Fixes "Error: No time zones found." on the clock
+  postPatch = ''
+    substituteInPlace src/emClock/emTimeZonesModel.cpp --replace "/usr/share/zoneinfo" "${tzdata}/share/zoneinfo"
+  '';
+
+  nativeBuildInputs = [ pkg-config makeWrapper copyDesktopItems ];
+  buildInputs = [ perl libX11 libXinerama libjpeg libpng libtiff libwebp
+    librsvg glib gtk2 libXxf86vm libXext poppler vlc ghostscript ];
+
+  # The program tries to dlopen Xxf86vm, Xext and Xinerama, so we use the
+  # trick on NIX_LDFLAGS and dontPatchELF to make it find them.
+  buildPhase = ''
+    runHook preBuild
+    export NIX_LDFLAGS="$NIX_LDFLAGS -lXxf86vm -lXext -lXinerama"
+    perl make.pl build
+    runHook postBuild
+  '';
+
+  dontPatchELF = true;
+  # eaglemode expects doc to be in the root directory
+  forceShare = [ "man" "info" ];
+
+  installPhase = ''
+    runHook preInstall
+    perl make.pl install dir=$out
+    wrapProgram $out/bin/eaglemode --set EM_DIR "$out" --prefix LD_LIBRARY_PATH : "$out/lib" --prefix PATH : "${ghostscript}/bin"
+    for i in 32 48 96; do
+      mkdir -p $out/share/icons/hicolor/''${i}x''${i}/apps
+      ln -s $out/res/icons/${pname}$i.png $out/share/icons/hicolor/''${i}x''${i}/apps/${pname}.png
+    done
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = pname;
+      icon = pname;
+      desktopName = "Eagle Mode";
+      genericName = meta.description;
+      categories = [ "Game" "Graphics" "System" "Utility" ];
+    })
+  ];
+
+  passthru.updateScript = directoryListingUpdater {
+    url = "https://eaglemode.sourceforge.net/download.html";
+    extraRegex = "(?!.*(x86_64|setup64|livecd)).*";
+  };
+
+  meta = with lib; {
+    homepage = "https://eaglemode.sourceforge.net";
+    description = "Zoomable User Interface";
+    changelog = "https://eaglemode.sourceforge.net/ChangeLog.html";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ chuangzhu ehmry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/edgetx/default.nix b/nixpkgs/pkgs/applications/misc/edgetx/default.nix
new file mode 100644
index 000000000000..9e7cf60af1a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/edgetx/default.nix
@@ -0,0 +1,48 @@
+{ lib, mkDerivation, fetchFromGitHub
+, cmake, gcc-arm-embedded, python3Packages
+, qtbase, qtmultimedia, qttools, SDL, gtest
+, dfu-util
+}:
+
+mkDerivation rec {
+  pname = "edgetx";
+  version = "2.7.2";
+
+  src = fetchFromGitHub {
+    owner = "EdgeTX";
+    repo = pname;
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-bKMAyONy1Udd+2nDVEMrtIsnfqrNuBVMWU7nCqvZ+3E=";
+  };
+
+  nativeBuildInputs = [ cmake gcc-arm-embedded python3Packages.pillow qttools ];
+
+  buildInputs = [ qtbase qtmultimedia SDL ];
+
+  postPatch = ''
+    sed -i companion/src/burnconfigdialog.cpp \
+      -e 's|/usr/.*bin/dfu-util|${dfu-util}/bin/dfu-util|'
+  '';
+
+  cmakeFlags = [
+    "-DGTEST_ROOT=${gtest.src}/googletest"
+    "-DDFU_UTIL_PATH=${dfu-util}/bin/dfu-util"
+    # file RPATH_CHANGE could not write new RPATH
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+  ];
+
+  meta = with lib; {
+    description = "EdgeTX Companion transmitter support software";
+    longDescription = ''
+      EdgeTX Companion is used for many different tasks like loading EdgeTX
+      firmware to the radio, backing up model settings, editing settings and
+      running radio simulators.
+    '';
+    homepage = "https://edgetx.org/";
+    license = licenses.gpl2Only;
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ elitak lopsided98 wucke13 ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/effitask/default.nix b/nixpkgs/pkgs/applications/misc/effitask/default.nix
new file mode 100644
index 000000000000..345f87d84a1c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/effitask/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, gtk3
+, stdenv
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "effitask";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "sanpii";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-6BA/TCCqVh5rtgGkUgk8nIqUzozipC5rrkbXMDWYpdQ=";
+  };
+
+  cargoHash = "sha256-ScqDNfWMFT8a1HOPjpw4J8EBrVSusIkOYReYeArZvZ8=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl gtk3 ];
+
+  # default installPhase don't install assets
+  installPhase = ''
+    runHook preInstall
+    make install PREFIX="$out" TARGET="target/${stdenv.hostPlatform.rust.rustcTarget}/release/effitask"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Graphical task manager, based on the todo.txt format";
+    longDescription = ''
+      To use it as todo.sh add-on, create a symlink like this:
+      mkdir ~/.todo.actions.d/
+      ln -s $(which effitask) ~/.todo.actions.d/et
+
+      Or use it as standalone program by defining some environment variables
+      like described in the projects readme.
+    '';
+    homepage = "https://github.com/sanpii/effitask";
+    maintainers = with maintainers; [ davidak ];
+    license = with licenses; [ mit ];
+    mainProgram = "effitask";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/elastic/default.nix b/nixpkgs/pkgs/applications/misc/elastic/default.nix
new file mode 100644
index 000000000000..ae614d35a4e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/elastic/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, vala
+, gtk4
+, libgee
+, libadwaita
+, gtksourceview5
+, blueprint-compiler
+, wrapGAppsHook4
+, appstream-glib
+, desktop-file-utils
+, template-glib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "elastic";
+  version = "0.1.4";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = "elastic";
+    rev = version;
+    hash = "sha256-EExVhf71SEWVcAOAt+IuQH3umNOY4hzzkFVIqnESppo=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    pkg-config
+    wrapGAppsHook4
+    appstream-glib
+    desktop-file-utils
+    blueprint-compiler
+  ];
+
+  buildInputs = [
+    gtk4
+    libadwaita
+    libgee
+    gtksourceview5
+    template-glib
+  ];
+
+  meta = with lib; {
+    description = "Design spring animations";
+    homepage = "https://gitlab.gnome.org/World/elastic/";
+    mainProgram = "app.drey.Elastic";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ _0xMRTT ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/electron-cash/default.nix b/nixpkgs/pkgs/applications/misc/electron-cash/default.nix
new file mode 100644
index 000000000000..7760b57dd3b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/electron-cash/default.nix
@@ -0,0 +1,96 @@
+{ lib, stdenv, fetchFromGitHub, python3Packages, wrapQtAppsHook
+, secp256k1, qtwayland }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "electron-cash";
+  version = "4.3.1";
+
+  src = fetchFromGitHub {
+    owner = "Electron-Cash";
+    repo = "Electron-Cash";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-xOyj5XerOwgfvI0qj7+7oshDvd18h5IeZvcJTis8nWo=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    # requirements
+    pyaes
+    ecdsa
+    requests
+    qrcode
+    protobuf
+    jsonrpclib-pelix
+    pysocks
+    qdarkstyle
+    python-dateutil
+    stem
+    certifi
+    pathvalidate
+    dnspython
+    bitcoinrpc
+
+    # requirements-binaries
+    pyqt5
+    psutil
+    pycryptodomex
+    cryptography
+
+    # requirements-hw
+    cython
+    trezor
+    keepkey
+    btchip-python
+    hidapi
+    pyopenssl
+    pyscard
+    pysatochip
+  ];
+
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  buildInputs = [ ] ++ lib.optional stdenv.isLinux qtwayland;
+
+  postPatch = ''
+    substituteInPlace contrib/requirements/requirements.txt \
+      --replace "qdarkstyle==2.6.8" "qdarkstyle<3"
+
+    substituteInPlace setup.py \
+      --replace "(share_dir" "(\"share\""
+  '';
+
+  postInstall = lib.optionalString stdenv.isLinux ''
+    substituteInPlace $out/share/applications/electron-cash.desktop \
+      --replace "Exec=electron-cash" "Exec=$out/bin/electron-cash"
+  '';
+
+  # If secp256k1 wasn't added to the library path, the following warning is given:
+  #
+  #   Electron Cash was unable to find the secp256k1 library on this system.
+  #   Elliptic curve cryptography operations will be performed in slow
+  #   Python-only mode.
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+    makeWrapperArgs+=(
+      "--prefix" "LD_LIBRARY_PATH" ":" "${secp256k1}/lib"
+    )
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/electron-cash help >/dev/null
+  '';
+
+  meta = with lib; {
+    description = "A Bitcoin Cash SPV Wallet";
+    longDescription = ''
+      An easy-to-use Bitcoin Cash client featuring wallets generated from
+      mnemonic seeds (in addition to other, more advanced, wallet options)
+      and the ability to perform transactions without downloading a copy
+      of the blockchain.
+    '';
+    homepage = "https://www.electroncash.org/";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ lassulus nyanloutre oxalica ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/electrum/default.nix b/nixpkgs/pkgs/applications/misc/electrum/default.nix
new file mode 100644
index 000000000000..986681d5a819
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/electrum/default.nix
@@ -0,0 +1,146 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchFromGitHub
+, wrapQtAppsHook
+, python3
+, zbar
+, secp256k1
+, enableQt ? true
+, callPackage
+, qtwayland
+}:
+
+let
+  version = "4.5.3";
+
+  libsecp256k1_name =
+    if stdenv.isLinux then "libsecp256k1.so.{v}"
+    else if stdenv.isDarwin then "libsecp256k1.{v}.dylib"
+    else "libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}";
+
+  libzbar_name =
+    if stdenv.isLinux then "libzbar.so.0"
+    else if stdenv.isDarwin then "libzbar.0.dylib"
+    else "libzbar${stdenv.hostPlatform.extensions.sharedLibrary}";
+
+  # Not provided in official source releases, which are what upstream signs.
+  tests = fetchFromGitHub {
+    owner = "spesmilo";
+    repo = "electrum";
+    rev = version;
+    sha256 = "sha256-Lr6ynHAbyaiaxYAWU5j5Wh5acxO5HkP1/jpnFrL4j68=";
+
+    postFetch = ''
+      mv $out ./all
+      mv ./all/tests $out
+    '';
+  };
+
+in
+
+python3.pkgs.buildPythonApplication {
+  pname = "electrum";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://download.electrum.org/${version}/Electrum-${version}.tar.gz";
+    sha256 = "sha256-kej0msc7SB+51ad5xZrT8MMEY5rfYOGqum6RO1gBH5s=";
+  };
+
+  postUnpack = ''
+    # can't symlink, tests get confused
+    cp -ar ${tests} $sourceRoot/tests
+  '';
+
+  nativeBuildInputs = lib.optionals enableQt [ wrapQtAppsHook ];
+  buildInputs = lib.optional (stdenv.isLinux && enableQt) qtwayland;
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiohttp
+    aiohttp-socks
+    aiorpcx
+    attrs
+    bitstring
+    cryptography
+    dnspython
+    jsonrpclib-pelix
+    matplotlib
+    pbkdf2
+    protobuf
+    pysocks
+    qrcode
+    requests
+    tlslite-ng
+    certifi
+    jsonpatch
+    # plugins
+    btchip-python
+    ledger-bitcoin
+    ckcc-protocol
+    keepkey
+    trezor
+  ] ++ lib.optionals enableQt [
+    pyqt5
+    qdarkstyle
+  ];
+
+  checkInputs = with python3.pkgs; lib.optionals enableQt [
+    pyqt6
+  ];
+
+  postPatch = ''
+    # make compatible with protobuf4 by easing dependencies ...
+    substituteInPlace ./contrib/requirements/requirements.txt \
+      --replace "protobuf>=3.20,<4" "protobuf>=3.20"
+    # ... and regenerating the paymentrequest_pb2.py file
+    protoc --python_out=. electrum/paymentrequest.proto
+
+    substituteInPlace ./electrum/ecc_fast.py \
+      --replace ${libsecp256k1_name} ${secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}
+  '' + (if enableQt then ''
+    substituteInPlace ./electrum/qrscanner.py \
+      --replace ${libzbar_name} ${zbar.lib}/lib/libzbar${stdenv.hostPlatform.extensions.sharedLibrary}
+  '' else ''
+    sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt
+  '');
+
+  postInstall = lib.optionalString stdenv.isLinux ''
+    substituteInPlace $out/share/applications/electrum.desktop \
+      --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum %u"' \
+                "Exec=$out/bin/electrum %u" \
+      --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum --testnet %u"' \
+                "Exec=$out/bin/electrum --testnet %u"
+  '';
+
+  postFixup = lib.optionalString enableQt ''
+    wrapQtApp $out/bin/electrum
+  '';
+
+  nativeCheckInputs = with python3.pkgs; [ pytestCheckHook pyaes pycryptodomex ];
+
+  pytestFlagsArray = [ "tests" ];
+
+  postCheck = ''
+    $out/bin/electrum help >/dev/null
+  '';
+
+  passthru.updateScript = callPackage ./update.nix { };
+
+  meta = with lib; {
+    description = "Lightweight Bitcoin wallet";
+    longDescription = ''
+      An easy-to-use Bitcoin client featuring wallets generated from
+      mnemonic seeds (in addition to other, more advanced, wallet options)
+      and the ability to perform transactions without downloading a copy
+      of the blockchain.
+    '';
+    homepage = "https://electrum.org/";
+    downloadPage = "https://electrum.org/#download";
+    changelog = "https://github.com/spesmilo/electrum/blob/master/RELEASE-NOTES";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ joachifm np prusnak ];
+    mainProgram = "electrum";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/electrum/grs.nix b/nixpkgs/pkgs/applications/misc/electrum/grs.nix
new file mode 100644
index 000000000000..87a85e9f986d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/electrum/grs.nix
@@ -0,0 +1,119 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, wrapQtAppsHook
+, python3
+, zbar
+, secp256k1
+, enableQt ? true
+, qtwayland
+}:
+
+let
+  version = "4.4.4";
+
+  libsecp256k1_name =
+    if stdenv.isLinux then "libsecp256k1.so.{v}"
+    else if stdenv.isDarwin then "libsecp256k1.{v}.dylib"
+    else "libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}";
+
+  libzbar_name =
+    if stdenv.isLinux then "libzbar.so.0"
+    else if stdenv.isDarwin then "libzbar.0.dylib"
+    else "libzbar${stdenv.hostPlatform.extensions.sharedLibrary}";
+
+in
+
+python3.pkgs.buildPythonApplication {
+  pname = "electrum-grs";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "Groestlcoin";
+    repo = "electrum-grs";
+    rev = "refs/tags/v${version}";
+    sha256 = "0fl01qdvb1z6l6kwipj1lj0qmjk3mzw25wv7yh5j1hh1f5lng0s8";
+  };
+
+  nativeBuildInputs = lib.optionals enableQt [ wrapQtAppsHook ];
+  buildInputs = lib.optional stdenv.isLinux qtwayland;
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiohttp
+    aiohttp-socks
+    aiorpcx
+    attrs
+    bitstring
+    cryptography
+    dnspython
+    groestlcoin-hash
+    jsonrpclib-pelix
+    matplotlib
+    pbkdf2
+    protobuf
+    pysocks
+    qrcode
+    requests
+    tlslite-ng
+    certifi
+    # plugins
+    btchip-python
+    ledger-bitcoin
+    ckcc-protocol
+    keepkey
+    trezor
+  ] ++ lib.optionals enableQt [
+    pyqt5
+    qdarkstyle
+  ];
+
+  postPatch = ''
+    # make compatible with protobuf4 by easing dependencies ...
+    substituteInPlace ./contrib/requirements/requirements.txt \
+      --replace "protobuf>=3.20,<4" "protobuf>=3.20"
+    # ... and regenerating the paymentrequest_pb2.py file
+    protoc --python_out=. electrum_grs/paymentrequest.proto
+
+    substituteInPlace ./electrum_grs/ecc_fast.py \
+      --replace ${libsecp256k1_name} ${secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}
+  '' + (if enableQt then ''
+    substituteInPlace ./electrum_grs/qrscanner.py \
+      --replace ${libzbar_name} ${zbar.lib}/lib/libzbar${stdenv.hostPlatform.extensions.sharedLibrary}
+  '' else ''
+    sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt
+  '');
+
+  postInstall = lib.optionalString stdenv.isLinux ''
+    substituteInPlace $out/share/applications/electrum-grs.desktop \
+      --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum-grs %u"' \
+                "Exec=$out/bin/electrum-grs %u" \
+      --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum-grs --testnet %u"' \
+                "Exec=$out/bin/electrum-grs --testnet %u"
+  '';
+
+  postFixup = lib.optionalString enableQt ''
+    wrapQtApp $out/bin/electrum-grs
+  '';
+
+  # the tests are currently broken
+  doCheck = false;
+
+  postCheck = ''
+    $out/bin/electrum-grs help >/dev/null
+  '';
+
+  meta = with lib; {
+    description = "Lightweight Groestlcoin wallet";
+    longDescription = ''
+      An easy-to-use Groestlcoin client featuring wallets generated from
+      mnemonic seeds (in addition to other, more advanced, wallet options)
+      and the ability to perform transactions without downloading a copy
+      of the blockchain.
+    '';
+    homepage = "https://groestlcoin.org/";
+    downloadPage = "https://github.com/Groestlcoin/electrum-grs/releases/tag/v{version}";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ gruve-p ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/electrum/ltc.nix b/nixpkgs/pkgs/applications/misc/electrum/ltc.nix
new file mode 100644
index 000000000000..9b0c63834cfb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/electrum/ltc.nix
@@ -0,0 +1,141 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchFromGitHub
+, wrapQtAppsHook
+, python3
+, zbar
+, secp256k1
+, enableQt ? true
+, qtwayland
+}:
+
+let
+  version = "4.2.2.1";
+
+  libsecp256k1_name =
+    if stdenv.isLinux then "libsecp256k1.so.0"
+    else if stdenv.isDarwin then "libsecp256k1.0.dylib"
+    else "libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}";
+
+  libzbar_name =
+    if stdenv.isLinux then "libzbar.so.0"
+    else if stdenv.isDarwin then "libzbar.0.dylib"
+    else "libzbar${stdenv.hostPlatform.extensions.sharedLibrary}";
+
+  # Not provided in official source releases, which are what upstream signs.
+  tests = fetchFromGitHub {
+    owner = "pooler";
+    repo = "electrum-ltc";
+    rev = version;
+    sha256 = "sha256-qu72LIV07pgHqvKv+Kcw9ZmNk6IBz+4/vdJELlT5tE4=";
+
+    postFetch = ''
+      mv $out ./all
+      mv ./all/electrum_ltc/tests $out
+    '';
+  };
+
+in
+
+python3.pkgs.buildPythonApplication {
+  pname = "electrum-ltc";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://electrum-ltc.org/download/Electrum-LTC-${version}.tar.gz";
+    sha256 = "sha256-7F28cve+HD5JDK5igfkGD/NvTCfA33g+DmQJ5mwPM9Q=";
+  };
+
+  postUnpack = ''
+    # can't symlink, tests get confused
+    cp -ar ${tests} $sourceRoot/electrum_ltc/tests
+  '';
+
+  nativeBuildInputs = lib.optionals enableQt [ wrapQtAppsHook ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    aiohttp
+    aiohttp-socks
+    aiorpcx
+    attrs
+    bitstring
+    cryptography
+    dnspython
+    jsonrpclib-pelix
+    matplotlib
+    pbkdf2
+    protobuf
+    py-scrypt
+    pysocks
+    qrcode
+    requests
+    tlslite-ng
+    certifi
+    # plugins
+    btchip-python
+    ckcc-protocol
+    keepkey
+    trezor
+  ] ++ lib.optionals enableQt [
+    pyqt5
+    qdarkstyle
+  ];
+
+  preBuild = ''
+    sed -i 's,usr_share = .*,usr_share = "'$out'/share",g' setup.py
+    substituteInPlace ./electrum_ltc/ecc_fast.py \
+      --replace ${libsecp256k1_name} ${secp256k1}/lib/libsecp256k1${stdenv.hostPlatform.extensions.sharedLibrary}
+  '' + (if enableQt then ''
+    substituteInPlace ./electrum_ltc/qrscanner.py \
+      --replace ${libzbar_name} ${zbar.lib}/lib/libzbar${stdenv.hostPlatform.extensions.sharedLibrary}
+  '' else ''
+    sed -i '/qdarkstyle/d' contrib/requirements/requirements.txt
+  '');
+
+  postInstall = lib.optionalString stdenv.isLinux ''
+    # Despite setting usr_share above, these files are installed under
+    # $out/nix ...
+    mv $out/${python3.sitePackages}/nix/store"/"*/share $out
+    rm -rf $out/${python3.sitePackages}/nix
+
+    substituteInPlace $out/share/applications/electrum-ltc.desktop \
+      --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum-ltc %u"' \
+                "Exec=$out/bin/electrum-ltc %u" \
+      --replace 'Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum-ltc --testnet %u"' \
+                "Exec=$out/bin/electrum-ltc --testnet %u"
+
+  '';
+
+  postFixup = lib.optionalString enableQt ''
+    wrapQtApp $out/bin/electrum-ltc
+  '';
+
+  nativeCheckInputs = with python3.pkgs; [ pytestCheckHook pyaes pycryptodomex ];
+  buildInputs = lib.optional stdenv.isLinux qtwayland;
+
+  pytestFlagsArray = [ "electrum_ltc/tests" ];
+
+  disabledTests = [
+    "test_loop"  # test tries to bind 127.0.0.1 causing permission error
+    "test_is_ip_address"  # fails spuriously https://github.com/spesmilo/electrum/issues/7307
+  ];
+
+  postCheck = ''
+    $out/bin/electrum-ltc help >/dev/null
+  '';
+
+  meta = with lib; {
+    description = "Lightweight Litecoin Client";
+    longDescription = ''
+      Electrum-LTC is a simple, but powerful Litecoin wallet. A unique secret
+      phrase (or “seed”) leaves intruders stranded and your peace of mind
+      intact. Keep it on paper, or in your head... and never worry about losing
+      your litecoins to theft or hardware failure.
+    '';
+    homepage = "https://electrum-ltc.org/";
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ bbjubjub ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/electrum/update.nix b/nixpkgs/pkgs/applications/misc/electrum/update.nix
new file mode 100644
index 000000000000..7a0fb8fd3eb6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/electrum/update.nix
@@ -0,0 +1,57 @@
+{ lib
+, writeScript
+, common-updater-scripts
+, bash
+, coreutils
+, curl
+, gnugrep
+, gnupg
+, gnused
+, nix
+}:
+
+let
+  downloadPageUrl = "https://download.electrum.org";
+
+  signingKeys = ["6694 D8DE 7BE8 EE56 31BE D950 2BD5 824B 7F94 70E6"];
+in
+
+writeScript "update-electrum" ''
+#! ${bash}/bin/bash
+
+set -eu -o pipefail
+
+export PATH=${lib.makeBinPath [
+  common-updater-scripts
+  coreutils
+  curl
+  gnugrep
+  gnupg
+  gnused
+  nix
+]}
+
+version=$(curl -L --list-only -- '${downloadPageUrl}' \
+    | grep -Po '<a href="\K([[:digit:]]+\.?)+' \
+    | sort -Vu \
+    | tail -n1)
+
+srcName=Electrum-$version
+srcFile=$srcName.tar.gz
+srcUrl="${downloadPageUrl}/$version/$srcFile"
+sigUrl=$srcUrl.asc
+sigFile=$srcFile.asc
+
+[[ -e "$srcFile" ]] || curl -L -o "$srcFile" -- "$srcUrl"
+[[ -e "$sigFile" ]] || curl -L -o "$sigFile" -- "$sigUrl"
+
+export GNUPGHOME=$PWD/gnupg
+mkdir -m 700 -p "$GNUPGHOME"
+
+gpg --batch --recv-keys ${lib.concatStringsSep " " (map (x: "'${x}'") signingKeys)}
+gpg --batch --verify "$sigFile" "$srcFile"
+
+sha256=$(nix-prefetch-url --type sha256 "file://$PWD/$srcFile")
+
+update-source-version electrum "$version" "$sha256"
+''
diff --git a/nixpkgs/pkgs/applications/misc/elf-dissector/default.nix b/nixpkgs/pkgs/applications/misc/elf-dissector/default.nix
new file mode 100644
index 000000000000..588dd7539b7e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/elf-dissector/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, cmake
+, elfutils
+, extra-cmake-modules
+, kitemmodels
+, libiberty
+, libdwarf
+, libopcodes
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation {
+  pname = "elf-dissector";
+  version = "unstable-2023-12-24";
+
+  src = fetchFromGitLab {
+    domain = "invent.kde.org";
+    owner = "sdk";
+    repo = "elf-dissector";
+    rev = "613538bd1d87ce72d5115646551a49cf7ff2ee34";
+    hash = "sha256-fQFGFw8nZHMs8J1W2CcHAJCdcvaY2l2/CySyBSsKpyE=";
+  };
+
+  patches = [
+    ./fix_build_for_src_lib_disassembler_disassembler.diff
+  ];
+
+  nativeBuildInputs = [ cmake extra-cmake-modules wrapQtAppsHook ];
+
+  buildInputs = [ kitemmodels libiberty elfutils libopcodes libdwarf ];
+
+  meta = with lib; {
+    homepage = "https://invent.kde.org/sdk/elf-dissector";
+    description = "Tools for inspecting, analyzing and optimizing ELF files";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ehmry philiptaron ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/elf-dissector/fix_build_for_src_lib_disassembler_disassembler.diff b/nixpkgs/pkgs/applications/misc/elf-dissector/fix_build_for_src_lib_disassembler_disassembler.diff
new file mode 100644
index 000000000000..ccc31c45ccde
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/elf-dissector/fix_build_for_src_lib_disassembler_disassembler.diff
@@ -0,0 +1,17 @@
+diff --git a/src/lib/disassmbler/disassembler.cpp b/src/lib/disassmbler/disassembler.cpp
+index 8ff058e..dbd4bbe 100644
+--- a/src/lib/disassmbler/disassembler.cpp
++++ b/src/lib/disassmbler/disassembler.cpp
+@@ -144,11 +144,7 @@ QString Disassembler::disassembleBinutils(const unsigned char* data, uint64_t si
+     QString result;
+     disassembler_ftype disassemble_fn;
+     disassemble_info info;
+-#if BINUTILS_VERSION >= BINUTILS_VERSION_CHECK(2, 39)
+-    INIT_DISASSEMBLE_INFO(info, &result, qstring_printf, fprintf_styled);
+-#else
+-    INIT_DISASSEMBLE_INFO(info, &result, qstring_printf);
+-#endif
++    INIT_DISASSEMBLE_INFO(info, &result, qstring_printf, qstring_printf);
+ 
+     info.application_data = this;
+     info.flavour = bfd_target_elf_flavour;
diff --git a/nixpkgs/pkgs/applications/misc/elfx86exts/default.nix b/nixpkgs/pkgs/applications/misc/elfx86exts/default.nix
new file mode 100644
index 000000000000..7e11d90f5d2e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/elfx86exts/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "elfx86exts";
+  version = "unstable-2023-04-20";
+
+  src = fetchFromGitHub {
+    owner = "pkgw";
+    repo = pname;
+    rev = "26bf98cf1fc773196e594c48bfe808d7151076f6";
+    hash = "sha256-xNmaKGbMN92CPIQQRbdmeePk5Wt9XcIsB/2vbk5NJzg=";
+  };
+
+  cargoHash = "sha256-NH7QK8a+ndhZGlLa3gWlnQdBQil1pi2AAi5TtFgkVf0=";
+
+  meta = with lib; {
+    description = "Decode x86 binaries and print out which instruction set extensions they use.";
+    longDescription = ''
+      Disassemble a binary containing x86 instructions and print out which extensions it uses.
+      Despite the utterly misleading name, this tool supports ELF and MachO binaries, and
+      perhaps PE-format ones as well. (It used to be more limited.)
+    '';
+    homepage = "https://github.com/pkgw/elfx86exts";
+    maintainers = with maintainers; [ rmcgibbo ];
+    license = with licenses; [ mit ];
+    mainProgram = "elfx86exts";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/elogind/default.nix b/nixpkgs/pkgs/applications/misc/elogind/default.nix
new file mode 100644
index 000000000000..56f8be698f32
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/elogind/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, meson
+, ninja
+, m4
+, gperf
+, getent
+, libcap
+, gettext
+, pkg-config
+, udev
+, eudev
+, libxslt
+, python3
+, docbook5
+, docbook_xsl
+, docbook_xsl_ns
+, docbook_xml_dtd_42
+, docbook_xml_dtd_45
+
+# Defaulting to false because usually the rationale for using elogind is to
+# use it in situation where a systemd dependency does not work (especially
+# when building with musl, which elogind explicitly supports).
+, enableSystemd ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "elogind";
+  version = "246.10";
+
+  src = fetchFromGitHub {
+    owner = "elogind";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+Nv6FL9Yjmfxs24+2mUTP//wbjzGUq4ftgJLfuEqBJg=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    m4
+    pkg-config
+    gperf
+    getent
+    libcap
+    gettext
+    libxslt.bin # xsltproc
+    docbook5 docbook_xsl docbook_xsl_ns docbook_xml_dtd_42 docbook_xml_dtd_45 # needed for docbook without Internet
+    (python3.withPackages (p: with p; [ lxml ]))  # fixes: man/meson.build:111:0: ERROR: Could not execute command "/build/source/tools/xml_helper.py".
+  ];
+
+  buildInputs =
+    if enableSystemd then [ udev ] else [ eudev ];
+
+  # Inspired by the systemd `preConfigure`.
+  # Conceptually we should patch all files required during the build, but not scripts
+  # supposed to run at run-time of the software (important for cross-compilation).
+  # This package seems to have mostly scripts that run at build time.
+  preConfigure = ''
+    for dir in tools src/test; do
+      patchShebangs $dir
+    done
+
+    patchShebangs src/basic/generate-*.{sh,py}
+  '';
+
+  mesonFlags = [
+    "-Drootprefix=${placeholder "out"}"
+    "-Dsysconfdir=${placeholder "out"}/etc"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/elogind/elogind";
+    description = ''The systemd project's "logind", extracted to a standalone package'';
+    platforms = platforms.linux; # probably more
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ nh2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/emem/default.nix b/nixpkgs/pkgs/applications/misc/emem/default.nix
new file mode 100644
index 000000000000..ef429ac4c084
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/emem/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, jdk }:
+
+stdenv.mkDerivation rec {
+  pname = "emem";
+  version = "0.2.50";
+
+  inherit jdk;
+
+  src = fetchurl {
+    url = "https://github.com/ebzzry/${pname}/releases/download/v${version}/${pname}.jar";
+    sha256 = "18x3s3jrph8k3pc75jgwkfqazygpsx93zjxx68zms58my17cybh1";
+  };
+
+  dontUnpack = true;
+
+  buildPhase = ''
+    mkdir -p $out/bin $out/share/java
+  '';
+
+  installPhase = ''
+    cp $src $out/share/java/${pname}.jar
+
+    cat > $out/bin/${pname} << EOF
+#! $SHELL
+$jdk/bin/java -jar $out/share/java/${pname}.jar "\$@"
+EOF
+
+    chmod +x $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ebzzry/emem";
+    description = "A trivial Markdown to HTML converter";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.epl10;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+    mainProgram = "emem";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/emoji-picker/default.nix b/nixpkgs/pkgs/applications/misc/emoji-picker/default.nix
new file mode 100644
index 000000000000..a0475bc94371
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/emoji-picker/default.nix
@@ -0,0 +1,27 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+buildGoModule rec {
+  pname = "emoji-picker";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "bcongdon";
+    repo = "ep";
+    rev = version;
+    hash = "sha256-ElUsmuJ43kOsu4cGvNytM+xHTfuzMo0jcG8Z1cIeHJs=";
+  };
+
+  patches = [./xsys.patch];
+
+  vendorHash = "sha256-Xeh5JKIBiyOXRGVx9udoUNs+Wv49BMyFvmnAbDfG3rA=";
+
+  meta = with lib; {
+    description = "A CLI Emoji Picker";
+    homepage = "https://github.com/bcongdon/ep";
+    license = licenses.mit;
+    maintainers = with maintainers; [ urandom ];
+    mainProgram = "ep";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/emoji-picker/xsys.patch b/nixpkgs/pkgs/applications/misc/emoji-picker/xsys.patch
new file mode 100644
index 000000000000..ef43a211f4e8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/emoji-picker/xsys.patch
@@ -0,0 +1,63 @@
+diff --git a/go.mod b/go.mod
+index ce4c67d..fcd88f6 100644
+--- a/go.mod
++++ b/go.mod
+@@ -1,12 +1,22 @@
+ module github.com/bcongdon/ep
+ 
+-go 1.12
++go 1.17
+ 
+ require (
+ 	github.com/atotto/clipboard v0.1.2
+ 	github.com/bcongdon/emoji-ordering v0.0.0-20201127221446-8e57a6480ccf
+ 	github.com/gdamore/tcell/v2 v2.0.1-0.20201017141208-acf90d56d591
+ 	github.com/rivo/tview v0.0.0-20201118063654-f007e9ad3893
+-	github.com/stretchr/testify v1.6.1 // indirect
+ 	golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392
+ )
++
++require (
++	github.com/gdamore/encoding v1.0.0 // indirect
++	github.com/lucasb-eyer/go-colorful v1.0.3 // indirect
++	github.com/mattn/go-runewidth v0.0.9 // indirect
++	github.com/rivo/uniseg v0.2.0 // indirect
++	github.com/stretchr/testify v1.6.1 // indirect
++	golang.org/x/sys v0.1.0 // indirect
++	golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 // indirect
++	golang.org/x/text v0.3.3 // indirect
++)
+diff --git a/go.sum b/go.sum
+index 3479558..cf61f93 100644
+--- a/go.sum
++++ b/go.sum
+@@ -10,7 +10,6 @@ github.com/gdamore/tcell/v2 v2.0.1-0.20201017141208-acf90d56d591 h1:0WWUDZ1oxq7N
+ github.com/gdamore/tcell/v2 v2.0.1-0.20201017141208-acf90d56d591/go.mod h1:vSVL/GV5mCSlPC6thFP5kfOFdM9MGZcalipmpTxTgQA=
+ github.com/lucasb-eyer/go-colorful v1.0.3 h1:QIbQXiugsb+q10B+MI+7DI1oQLdmnep86tWFlaaUAac=
+ github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
+-github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54=
+ github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
+ github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
+ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
+@@ -28,19 +27,17 @@ golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392 h1:xYJJ3S178yv++9zXV/hnr2
+ golang.org/x/crypto v0.0.0-20201124201722-c8d3bf9c5392/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
+ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+-golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756 h1:9nuHUbU8dRnRRfj9KjWUVrJeoexdbeMjttk6Oh1rD10=
+ golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+ golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+-golang.org/x/sys v0.0.0-20201017003518-b09fb700fbb7 h1:XtNJkfEjb4zR3q20BBBcYUykVOEMgZeIUOpBPfNYgxg=
+ golang.org/x/sys v0.0.0-20201017003518-b09fb700fbb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
++golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
++golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221 h1:/ZHdbVpdR/jk3g30/d4yUL0JU9kksj8+F/bnQUVLGDM=
+ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
+-golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
+ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+ golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
+ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
+ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
+ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/nixpkgs/pkgs/applications/misc/emojipick/default.nix b/nixpkgs/pkgs/applications/misc/emojipick/default.nix
new file mode 100644
index 000000000000..9c28c98bf047
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/emojipick/default.nix
@@ -0,0 +1,71 @@
+{ stdenvNoCC
+, fetchFromGitHub
+, lib
+, python3
+, xclip
+, libnotify
+, dmenu
+, rofi
+, emojipick-use-rofi ? false
+, emojipick-copy-to-clipboard ? true
+, emojipick-show-notifications ? true
+, emojipick-print-emoji ? true
+, emojipick-font-family ? "Noto Color Emoji"
+, emojipick-font-size ? "18"
+}:
+
+let
+  boolToInt = b: if b then "1" else "0"; # Convert boolean to integer string
+in
+stdenvNoCC.mkDerivation {
+  pname = "emojipick";
+  version = "2021-01-27";
+
+  src = fetchFromGitHub {
+    owner = "thingsiplay";
+    repo = "emojipick";
+    rev = "20210127";
+    sha256 = "1kib3cyx6z9v9qw6yrfx5sklanpk5jbxjc317wi7i7ljrg0vdazp";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  # Patch configuration
+  # notify-send has to be patched in a bash file
+  postPatch = ''
+    substituteInPlace emojipick \
+      --replace "use_rofi=0" "use_rofi=${boolToInt emojipick-use-rofi}" \
+      --replace "copy_to_clipboard=1" "copy_to_clipboard=${boolToInt emojipick-copy-to-clipboard}" \
+      --replace "show_notification=1" "show_notification=${boolToInt emojipick-show-notifications}" \
+      --replace "print_emoji=1" "print_emoji=${boolToInt emojipick-print-emoji}" \
+      --replace "font_family='\"Noto Color Emoji\"'" "font_family='\"${emojipick-font-family}\"'" \
+      --replace 'font_size="18"' 'font_size="${emojipick-font-size}"' \
+      ${lib.optionalString emojipick-use-rofi "--replace 'rofi ' '${rofi}/bin/rofi '"} \
+      --replace notify-send ${libnotify}/bin/notify-send
+  '';
+
+  buildInputs = [
+    python3
+    xclip
+    libnotify
+  ] ++ (if emojipick-use-rofi then [rofi] else [dmenu]);
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp ./emojipick $out/bin
+    cp ./emojiget.py $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Get a selection of emojis with dmenu or rofi";
+    homepage = "https://github.com/thingsiplay/emojipick";
+    license = licenses.mit;
+    maintainers = with maintainers; [ alexnortung ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/eos-installer/default.nix b/nixpkgs/pkgs/applications/misc/eos-installer/default.nix
new file mode 100644
index 000000000000..5d4ea2e8c60c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/eos-installer/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub, writeText
+, glib, meson, ninja, pkg-config, python3
+, coreutils, gnome-desktop, gnupg, gtk3, systemdMinimal, udisks
+}:
+
+stdenv.mkDerivation rec {
+  pname = "eos-installer";
+  version = "5.1.0";
+
+  src = fetchFromGitHub {
+    owner = "endlessm";
+    repo = "eos-installer";
+    rev = "Release_${version}";
+    sha256 = "BqvZglzFJabGXkI8hnLiw1r+CvM7kSKQPj8IKYBB6S4=";
+    fetchSubmodules = true;
+  };
+
+  strictDeps = true;
+  nativeBuildInputs = [
+    glib gnupg meson ninja pkg-config python3
+  ];
+  buildInputs = [ gnome-desktop gtk3 systemdMinimal udisks ];
+
+  preConfigure = ''
+    patchShebangs tests
+    substituteInPlace tests/test-scribe.c \
+        --replace /bin/true ${coreutils}/bin/true \
+        --replace /bin/false ${coreutils}/bin/false
+  '';
+
+  mesonFlags = [
+    "--libexecdir=${placeholder "out"}/bin"
+    "--cross-file=${writeText "crossfile.ini" ''
+      [binaries]
+      gpg = '${gnupg}/bin/gpg'
+    ''}"
+  ];
+
+  PKG_CONFIG_SYSTEMD_SYSTEMDSYSTEMUNITDIR = "${placeholder "out"}/lib/systemd/system";
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://github.com/endlessm/eos-installer";
+    description = "Installer UI which writes images to disk";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ qyliss ];
+    mainProgram = "gnome-image-installer";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/epdfview/default.nix b/nixpkgs/pkgs/applications/misc/epdfview/default.nix
new file mode 100644
index 000000000000..840165dcedee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/epdfview/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, fetchpatch, pkg-config, gtk2, poppler }:
+
+stdenv.mkDerivation rec {
+  pname = "epdfview";
+  version = "0.1.8";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/e/epdfview/epdfview_${version}.orig.tar.gz";
+    sha256 = "0ibyb60a0b4n34bsjgvhdw8yf24463ky0hpmf6a2jjqsbm5g4v64";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 poppler ];
+
+  hardeningDisable = [ "format" ];
+
+  patches = [ (fetchpatch {
+                name = "epdfview-0.1.8-glib2-headers.patch";
+                url = "https://projects.archlinux.org/svntogit/community.git/plain/trunk/epdfview-0.1.8-glib2-headers.patch?h=packages/epdfview&id=40ba115c860bdec31d03a30fa594a7ec2864d634";
+                sha256 = "17df6s1zij5ficj67xszq6kd88cy620az3ic55065ccnmsd73f8h";
+              })
+              (fetchpatch {
+                name = "epdfview-0.1.8-modern-cups.patch";
+                url = "https://projects.archlinux.org/svntogit/community.git/plain/trunk/epdfview-0.1.8-modern-cups.patch?h=packages/epdfview&id=40ba115c860bdec31d03a30fa594a7ec2864d634";
+                sha256 = "07yvgvai2bvbr5fa1mv6lg7nqr0qyryjn1xyjlh8nidg9k9vv001";
+              })
+            ];
+
+  meta = with lib; {
+    homepage = "https://packages.debian.org/wheezy/epdfview";
+    description = "A lightweight PDF document viewer using Poppler and GTK";
+    longDescription = ''
+      ePDFView is a free lightweight PDF document viewer using Poppler and
+      GTK libraries. The aim of ePDFView is to make a simple PDF document
+      viewer, in the lines of Evince but without using the Gnome libraries.
+    '';
+    license = licenses.gpl2;
+    maintainers = [ maintainers.astsmtl ];
+    platforms = platforms.linux;
+    mainProgram = "epdfview";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/epr/default.nix b/nixpkgs/pkgs/applications/misc/epr/default.nix
new file mode 100644
index 000000000000..20b2b4ba8d90
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/epr/default.nix
@@ -0,0 +1,21 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "epr";
+  version = "2.4.13";
+
+  src = fetchFromGitHub {
+    owner = "wustho";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-1qsqYlqGlCRhl7HINrcTDt5bGlb7g5PmaERylT+UvEg=";
+  };
+
+  meta = with lib; {
+    description = "CLI Epub Reader";
+    homepage = "https://github.com/wustho/epr";
+    license = licenses.mit;
+    maintainers = [ maintainers.Br1ght0ne ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ericw-tools/default.nix b/nixpkgs/pkgs/applications/misc/ericw-tools/default.nix
new file mode 100644
index 000000000000..9e833eafa770
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ericw-tools/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, gtest, fmt
+, cmake, ninja, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ericw-tools";
+  version = "0.18.1";
+
+  src = fetchFromGitHub {
+    owner = "ericwa";
+    repo = "ericw-tools";
+    rev = "v${version}";
+    sha256 = "11sap7qv0rlhw8q25azvhgjcwiql3zam09q0gim3i04cg6fkh0vp";
+  };
+  postUnpack = ''
+    pushd source/3rdparty
+    ln -s ${fmt.src} fmt
+    ln -s ${gtest.src} googletest
+    popd
+  '';
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/ericwa/ericw-tools/commit/c9570260fa895dde5a21272d76f9a3b05d59efdd.patch";
+      hash = "sha256-dZr2LWuJBAIT//XHXYEz2vhaK2mxtxkSJ4IQla8OXKI=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake ninja installShellFiles ];
+
+  outputs = [ "out" "doc" "man" ];
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    for TOOL in bspinfo bsputil light qbsp vis ; do
+      cp -a $TOOL/$TOOL $out/bin/
+    done
+
+    installManPage ../man/*.?
+
+    mkdir -p $doc/share/doc/ericw-tools
+    cp -a ../README.md ../changelog.txt $doc/share/doc/ericw-tools/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://ericwa.github.io/ericw-tools/";
+    description = "Map compile tools for Quake and Hexen 2";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ astro ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/et/default.nix b/nixpkgs/pkgs/applications/misc/et/default.nix
new file mode 100644
index 000000000000..de47efc07ef5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/et/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, libnotify, gdk-pixbuf }:
+
+stdenv.mkDerivation rec {
+  pname = "et";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "oxzi";
+    repo = "et";
+    rev = version;
+    sha256 = "0i0lgmnly8n7y4y6pb10pxgxyz8s5zk26k8z1g1578v1wan01lnq";
+  };
+
+  buildInputs = [ libnotify gdk-pixbuf ];
+  nativeBuildInputs = [ pkg-config ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp et $out/bin
+    cp et-status.sh $out/bin/et-status
+  '';
+
+  meta = with lib; {
+    description = "Minimal libnotify-based (egg) timer";
+    homepage = "https://github.com/oxzi/et";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ oxzi ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/etesync-dav/default.nix b/nixpkgs/pkgs/applications/misc/etesync-dav/default.nix
new file mode 100644
index 000000000000..a4bbdc2eb7b3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/etesync-dav/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchpatch
+, nixosTests
+, python3
+, fetchPypi
+, radicale3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "etesync-dav";
+  version = "0.32.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-pOLug5MnVdKaw5wedABewomID9LU0hZPCf4kZKKU1yA=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "add-missing-comma-in-setup.py.patch";
+      url = "https://github.com/etesync/etesync-dav/commit/040cb7b57205e70515019fb356e508a6414da11e.patch";
+      hash = "sha256-87IpIQ87rgpinvbRwUlWd0xeegn0zfVSiDFYNUqPerg=";
+    })
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    appdirs
+    etebase
+    etesync
+    flask
+    flask-wtf
+    msgpack
+    setuptools
+    (python.pkgs.toPythonModule (radicale3.override { python3 = python; }))
+    requests
+    types-setuptools
+  ] ++ requests.optional-dependencies.socks;
+
+  doCheck = false;
+
+  passthru.tests = {
+    inherit (nixosTests) etesync-dav;
+  };
+
+  meta = with lib; {
+    homepage = "https://www.etesync.com/";
+    description = "Secure, end-to-end encrypted, and privacy respecting sync for contacts, calendars and tasks";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ thyol valodim ];
+    broken = stdenv.isDarwin; # pyobjc-framework-Cocoa is missing
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/eureka-ideas/default.nix b/nixpkgs/pkgs/applications/misc/eureka-ideas/default.nix
new file mode 100644
index 000000000000..45e36010906b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/eureka-ideas/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libgit2
+, openssl
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "eureka-ideas";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "simeg";
+    repo = "eureka";
+    rev = "v${version}";
+    sha256 = "sha256-NJ1O8+NBG0y39bMOZeah2jSZlvnPrtpCtXrgAYmVrAc=";
+  };
+
+  cargoSha256 = "sha256-tNUWW0HgXl+tM9uciApLSkLDDkzrvAiWmiYs2y/dEOM=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    libgit2
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  useNextest = true;
+
+  meta = with lib; {
+    description = "CLI tool to input and store your ideas without leaving the terminal";
+    homepage = "https://github.com/simeg/eureka";
+    changelog = "https://github.com/simeg/eureka/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "eureka";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/evtest-qt/default.nix b/nixpkgs/pkgs/applications/misc/evtest-qt/default.nix
new file mode 100644
index 000000000000..86f2d0070923
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/evtest-qt/default.nix
@@ -0,0 +1,25 @@
+{ mkDerivation, lib, qtbase, cmake, fetchFromGitHub }:
+
+mkDerivation rec {
+  pname = "evtest-qt";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Grumbel";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1wfzkgq81764qzxgk0y5vvpxcrb3icvrr4dd4mj8njrqgbwmn0mw";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ qtbase ];
+
+  meta = with lib; {
+    description = "Simple input device tester for linux with Qt GUI";
+    homepage = "https://github.com/Grumbel/evtest-qt";
+    maintainers = with maintainers; [ alexarice ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/evtest/default.nix b/nixpkgs/pkgs/applications/misc/evtest/default.nix
new file mode 100644
index 000000000000..39f8ea8c0f83
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/evtest/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchgit, autoreconfHook, pkg-config, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "evtest";
+  version = "1.35";
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libxml2 ];
+
+  src = fetchgit {
+    url = "git://anongit.freedesktop.org/${pname}";
+    rev = "refs/tags/${pname}-${version}";
+    sha256 = "sha256-xF2dwjTmTOyZ/kmASYWqKfnvqCjw0OmdNKrNMrjNl5g=";
+  };
+
+  meta = with lib; {
+    description = "Simple tool for input event debugging";
+    license = lib.licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.bjornfor ];
+    mainProgram = "evtest";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/exercism/default.nix b/nixpkgs/pkgs/applications/misc/exercism/default.nix
new file mode 100644
index 000000000000..d91f35980404
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/exercism/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, nix-update-script }:
+
+buildGoModule rec {
+  pname = "exercism";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "exercism";
+    repo  = "cli";
+    rev   = "refs/tags/v${version}";
+    hash  = "sha256-Mtb5c1/k8kp7bETOSE0X969BV176jpoprr1/mQ3E4Vg=";
+  };
+
+  vendorHash = "sha256-fnsSvbuVGRAndU88su2Ck7mV8QBDhxozdmwI3XGtxcA=";
+
+  doCheck = false;
+
+  subPackages = [ "./exercism" ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+   inherit (src.meta) homepage;
+   description = "A Go based command line tool for exercism.io";
+   license     = licenses.mit;
+   maintainers = [ maintainers.rbasso maintainers.nobbz ];
+   mainProgram = "exercism";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/expenses/default.nix b/nixpkgs/pkgs/applications/misc/expenses/default.nix
new file mode 100644
index 000000000000..0bca959b8b04
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/expenses/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, sqlite
+, installShellFiles
+}:
+
+buildGoModule rec {
+  pname = "expenses";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "manojkarthick";
+    repo = "expenses";
+    rev = "v${version}";
+    sha256 = "sha256-sqsogF2swMvYZL7Kj+ealrB1AAgIe7ZXXDLRdHL6Q+0=";
+  };
+
+  vendorHash = "sha256-rIcwZUOi6bdfiWZEsRF4kl1reNPPQNuBPHDOo7RQgYo=";
+
+  # package does not contain any tests as of v0.2.3
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  buildInputs = [ sqlite ];
+
+  ldflags = [
+    "-s" "-w" "-X github.com/manojkarthick/expenses/cmd.Version=${version}"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd expenses \
+      --bash <($out/bin/expenses completion bash) \
+      --zsh <($out/bin/expenses completion zsh) \
+      --fish <($out/bin/expenses completion fish)
+  '';
+
+  meta = with lib; {
+   description = "An interactive command line expense logger";
+   license = licenses.mit;
+   maintainers = [ maintainers.manojkarthick ];
+   mainProgram = "expenses";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/extract_url/default.nix b/nixpkgs/pkgs/applications/misc/extract_url/default.nix
new file mode 100644
index 000000000000..35ea33bde3a2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/extract_url/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, perlPackages
+, cursesSupport ? true
+, uriFindSupport ? true
+}:
+
+let
+  perlDeps =
+    [ perlPackages.MIMETools perlPackages.HTMLParser ]
+    ++ lib.optional cursesSupport perlPackages.CursesUI
+    ++ lib.optional uriFindSupport perlPackages.URIFind;
+
+in stdenv.mkDerivation rec {
+  pname = "extract_url";
+  version = "1.6.2";
+
+  src = fetchFromGitHub {
+    owner = "m3m0ryh0l3";
+    repo = "extracturl";
+    rev = "v${version}";
+    sha256 = "05589lp15jmcpbj4y9a3hmf6n2gsqrm4ybcyh3hd4j6pc7hmnhny";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ perlPackages.perl ] ++ perlDeps;
+
+  makeFlags = [ "prefix=$(out)" ];
+  installFlags = [ "INSTALL=install" ];
+
+  postFixup = ''
+    wrapProgram "$out/bin/extract_url" \
+      --set PERL5LIB "${perlPackages.makeFullPerlPath perlDeps}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.memoryhole.net/~kyle/extract_url/";
+    description = "Extracts URLs from MIME messages or plain text";
+    license = licenses.bsd2;
+    maintainers = [ maintainers.qyliss ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/faircamp/Cargo.lock b/nixpkgs/pkgs/applications/misc/faircamp/Cargo.lock
new file mode 100644
index 000000000000..4371f7dc12c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/faircamp/Cargo.lock
@@ -0,0 +1,2659 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "actix-codec"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "617a8268e3537fe1d8c9ead925fca49ef6400927ee7bc26750e90ecee14ce4b8"
+dependencies = [
+ "bitflags 1.3.2",
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "memchr",
+ "pin-project-lite",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "actix-files"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d832782fac6ca7369a70c9ee9a20554623c5e51c76e190ad151780ebea1cf689"
+dependencies = [
+ "actix-http",
+ "actix-service",
+ "actix-utils",
+ "actix-web",
+ "askama_escape",
+ "bitflags 1.3.2",
+ "bytes",
+ "derive_more",
+ "futures-core",
+ "http-range",
+ "log",
+ "mime",
+ "mime_guess",
+ "percent-encoding",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "actix-http"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a92ef85799cba03f76e4f7c10f533e66d87c9a7e7055f3391f09000ad8351bc9"
+dependencies = [
+ "actix-codec",
+ "actix-rt",
+ "actix-service",
+ "actix-utils",
+ "ahash",
+ "base64",
+ "bitflags 2.4.1",
+ "brotli",
+ "bytes",
+ "bytestring",
+ "derive_more",
+ "encoding_rs",
+ "flate2",
+ "futures-core",
+ "h2",
+ "http",
+ "httparse",
+ "httpdate",
+ "itoa",
+ "language-tags",
+ "local-channel",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rand",
+ "sha1",
+ "smallvec",
+ "tokio",
+ "tokio-util",
+ "tracing",
+ "zstd 0.12.4",
+]
+
+[[package]]
+name = "actix-macros"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb"
+dependencies = [
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "actix-router"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d66ff4d247d2b160861fa2866457e85706833527840e4133f8f49aa423a38799"
+dependencies = [
+ "bytestring",
+ "http",
+ "regex",
+ "serde",
+ "tracing",
+]
+
+[[package]]
+name = "actix-rt"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28f32d40287d3f402ae0028a9d54bef51af15c8769492826a69d28f81893151d"
+dependencies = [
+ "futures-core",
+ "tokio",
+]
+
+[[package]]
+name = "actix-server"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3eb13e7eef0423ea6eab0e59f6c72e7cb46d33691ad56a726b3cd07ddec2c2d4"
+dependencies = [
+ "actix-rt",
+ "actix-service",
+ "actix-utils",
+ "futures-core",
+ "futures-util",
+ "mio",
+ "socket2",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "actix-service"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a"
+dependencies = [
+ "futures-core",
+ "paste",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "actix-utils"
+version = "3.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8"
+dependencies = [
+ "local-waker",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "actix-web"
+version = "4.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e4a5b5e29603ca8c94a77c65cf874718ceb60292c5a5c3e5f4ace041af462b9"
+dependencies = [
+ "actix-codec",
+ "actix-http",
+ "actix-macros",
+ "actix-router",
+ "actix-rt",
+ "actix-server",
+ "actix-service",
+ "actix-utils",
+ "actix-web-codegen",
+ "ahash",
+ "bytes",
+ "bytestring",
+ "cfg-if",
+ "cookie",
+ "derive_more",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "itoa",
+ "language-tags",
+ "log",
+ "mime",
+ "once_cell",
+ "pin-project-lite",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "smallvec",
+ "socket2",
+ "time",
+ "url",
+]
+
+[[package]]
+name = "actix-web-codegen"
+version = "4.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1f50ebbb30eca122b188319a4398b3f7bb4a8cdf50ecfb73bfc6a3c3ce54f5"
+dependencies = [
+ "actix-router",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[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 = "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.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if",
+ "getrandom",
+ "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 = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[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.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+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.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "arbitrary-int"
+version = "1.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe8e2a586ecd6eb29477a0c25b19742acca4fa5e39c92e127656616810c20579"
+
+[[package]]
+name = "askama_escape"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341"
+
+[[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 = "audiopus_sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62314a1546a2064e033665d658e88c620a62904be945f8147e6b16c3db9f8651"
+dependencies = [
+ "cmake",
+ "log",
+ "pkg-config",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "az"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b7e4c2464d97fe331d41de9d5db0def0a96f4d823b8b32a2efd503578988973"
+
+[[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 = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bit_field"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
+
+[[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 = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "brotli"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[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 = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+
+[[package]]
+name = "bytestring"
+version = "1.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d80203ea6b29df88012294f62733de21cfeab47f17b41af3a38bc30a03ee72"
+dependencies = [
+ "bytes",
+]
+
+[[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.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 = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[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.5",
+]
+
+[[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.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272"
+dependencies = [
+ "clap_builder",
+ "clap_derive",
+]
+
+[[package]]
+name = "clap_builder"
+version = "4.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1"
+dependencies = [
+ "anstream",
+ "anstyle",
+ "clap_lex",
+ "strsim",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1"
+
+[[package]]
+name = "claxon"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bfbf56724aa9eca8afa4fcfadeb479e722935bb2a0900c2d37e0cc477af0688"
+
+[[package]]
+name = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[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",
+ "memchr",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[package]]
+name = "cookie"
+version = "0.16.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
+dependencies = [
+ "percent-encoding",
+ "time",
+ "version_check",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
+dependencies = [
+ "core-foundation-sys",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+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 = "critical-section"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216"
+
+[[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 = "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",
+ "typenum",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+dependencies = [
+ "powerfmt",
+]
+
+[[package]]
+name = "derive_more"
+version = "0.99.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
+dependencies = [
+ "convert_case",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "deunicode"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a1abaf4d861455be59f64fd2b55606cb151fce304ede7165f410243ce96bde6"
+
+[[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 = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enolib"
+version = "0.4.0"
+source = "git+https://codeberg.org/simonrepp/enolib-rs?tag=0.4.0#dc22b9114b210a6f3e16815c0d1d43bcbed551d5"
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "exr"
+version = "1.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "279d3efcc55e19917fff7ab3ddd6c14afb6a90881a0078465196fe2f99d08c56"
+dependencies = [
+ "bit_field",
+ "flume",
+ "half",
+ "lebe",
+ "miniz_oxide",
+ "rayon-core",
+ "smallvec",
+ "zune-inflate",
+]
+
+[[package]]
+name = "faircamp"
+version = "0.12.0"
+dependencies = [
+ "actix-files",
+ "actix-web",
+ "base64",
+ "bincode",
+ "chrono",
+ "clap",
+ "claxon",
+ "enolib",
+ "hound",
+ "id3",
+ "image",
+ "indoc",
+ "iso_currency",
+ "lewton",
+ "libvips",
+ "metaflac",
+ "nanoid",
+ "ogg 0.9.0",
+ "opus",
+ "opus_headers",
+ "pacmog",
+ "pulldown-cmark",
+ "rmp3",
+ "sanitize-filename",
+ "serde",
+ "serde_derive",
+ "slug",
+ "tokio",
+ "url",
+ "urlencoding",
+ "webbrowser",
+ "zip",
+]
+
+[[package]]
+name = "fdeflate"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "fixed"
+version = "1.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02c69ce7e7c0f17aa18fdd9d0de39727adb9c6281f2ad12f57cbe54ae6e76e7d"
+dependencies = [
+ "az",
+ "bytemuck",
+ "half",
+ "typenum",
+]
+
+[[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 = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "pin-project",
+ "spin",
+]
+
+[[package]]
+name = "fnv"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
+
+[[package]]
+name = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+
+[[package]]
+name = "futures-sink"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+
+[[package]]
+name = "futures-task"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+
+[[package]]
+name = "futures-util"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "pin-project-lite",
+ "pin-utils",
+]
+
+[[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.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi",
+ "wasm-bindgen",
+]
+
+[[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 = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "h2"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872"
+dependencies = [
+ "cfg-if",
+ "crunchy",
+]
+
+[[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.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[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",
+ "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.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 = "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 = "hound"
+version = "3.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62adaabb884c94955b19907d60019f4e145d091c75345379e70d1ee696f7854f"
+
+[[package]]
+name = "http"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa",
+]
+
+[[package]]
+name = "http-range"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
+
+[[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 = "iana-time-zone"
+version = "0.1.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+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 = "id3"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf8550abe8a02c044e8f4162c8ddb4020fc65b5e7771ad9b80c25e13ed4536b6"
+dependencies = [
+ "bitflags 2.4.1",
+ "byteorder",
+ "flate2",
+]
+
+[[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 = "image"
+version = "0.24.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "exr",
+ "gif",
+ "jpeg-decoder",
+ "num-rational",
+ "num-traits",
+ "png",
+ "qoi",
+ "tiff",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown",
+]
+
+[[package]]
+name = "indoc"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8"
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "iso_country"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20633e788d3948ea7336861fdb09ec247f5dae4267e8f0743fa97de26c28624d"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "iso_currency"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33f07181be95c82347a07cf4caf43d2acd8a7e8d08ef1db75e10ed5a9aec3c1b"
+dependencies = [
+ "iso_country",
+]
+
+[[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",
+ "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 = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+dependencies = [
+ "rayon",
+]
+
+[[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 = "language-tags"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "lebe"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
+
+[[package]]
+name = "lewton"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030"
+dependencies = [
+ "byteorder",
+ "ogg 0.8.0",
+ "tinyvec",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "libvips"
+version = "1.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfedc1cd1634c8bc74e91653646f4be7ec7630fcd828ae35a35272a0bbfd9e8d"
+dependencies = [
+ "num-derive",
+ "num-traits",
+]
+
+[[package]]
+name = "local-channel"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "local-waker",
+]
+
+[[package]]
+name = "local-waker"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487"
+
+[[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"
+
+[[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.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[package]]
+name = "memoffset"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "metaflac"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1470d3cc1bb0d692af5eb3afb594330b8ba09fd91c32c4e1c6322172a5ba750"
+dependencies = [
+ "byteorder",
+ "hex",
+ "log",
+]
+
+[[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",
+ "simd-adler32",
+]
+
+[[package]]
+name = "mio"
+version = "0.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+dependencies = [
+ "libc",
+ "log",
+ "wasi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "nanoid"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[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-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-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "ogg"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "ogg"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "960d0efc0531a452c442c777288f704b300a5f743c04a14eba71f9aabc4897ac"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "opus"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6526409b274a7e98e55ff59d96aafd38e6cd34d46b7dbbc32ce126dffcd75e8e"
+dependencies = [
+ "audiopus_sys",
+ "libc",
+]
+
+[[package]]
+name = "opus_headers"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "afbb993947f111397c2bc536944f8dac7f54a4e73383d478efe1990b56404b60"
+
+[[package]]
+name = "pacmog"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f24fb9dc847fa21adf6fe1cbf98239cd27ba02b80c1503a89672b3808b82f5a"
+dependencies = [
+ "anyhow",
+ "arbitrary-int",
+ "fixed",
+ "heapless",
+ "nom",
+]
+
+[[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 = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[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",
+ "hmac",
+ "password-hash",
+ "sha2",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
+
+[[package]]
+name = "pin-project"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[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 = "png"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[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 = "proc-macro2"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998"
+dependencies = [
+ "bitflags 1.3.2",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "qoi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+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 = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[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 = "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 = "rmp3"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3d9fb2c89a819645c57007782fd4db5bfa1abe290e1df5f530a441dc21ab1ad"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[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 = "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 = "sanitize-filename"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ed72fbaf78e6f2d41744923916966c4fbe3d7c74e3037a8ee482f1115572603"
+dependencies = [
+ "lazy_static",
+ "regex",
+]
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+
+[[package]]
+name = "serde"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+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 = "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 = "signal-hook-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+
+[[package]]
+name = "slab"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "slug"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bd94acec9c8da640005f8e135a39fc0372e74535e6b368b7a04b875f784c8c4"
+dependencies = [
+ "deunicode",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+
+[[package]]
+name = "socket2"
+version = "0.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[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_deref_trait"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
+
+[[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.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tiff"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211"
+dependencies = [
+ "flate2",
+ "jpeg-decoder",
+ "weezl",
+]
+
+[[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 = "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.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "parking_lot",
+ "pin-project-lite",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+dependencies = [
+ "bytes",
+ "futures-core",
+ "futures-sink",
+ "pin-project-lite",
+ "tokio",
+ "tracing",
+]
+
+[[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-core",
+]
+
+[[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 = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[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 = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[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 = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+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 = "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.39",
+ "wasm-bindgen-shared",
+]
+
+[[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.39",
+ "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 = "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 = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[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-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-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_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_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_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_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_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_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_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 = "zerocopy"
+version = "0.7.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43de342578a3a14a9314a2dab1942cbfcbe5686e1f91acdc513058063eafe18"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1012d89e3acb79fad7a799ce96866cfb8098b74638465ea1b1533d35900ca90"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[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",
+ "zstd 0.11.2+zstd.1.5.2",
+]
+
+[[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 5.0.2+zstd.1.5.2",
+]
+
+[[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-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-safe"
+version = "6.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581"
+dependencies = [
+ "libc",
+ "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",
+]
+
+[[package]]
+name = "zune-inflate"
+version = "0.2.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
+dependencies = [
+ "simd-adler32",
+]
diff --git a/nixpkgs/pkgs/applications/misc/faircamp/default.nix b/nixpkgs/pkgs/applications/misc/faircamp/default.nix
new file mode 100644
index 000000000000..497c6e7d58fc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/faircamp/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitea
+, makeWrapper
+, pkg-config
+, glib
+, libopus
+, vips
+, ffmpeg
+, callPackage
+, darwin
+, testers
+, faircamp
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "faircamp";
+  version = "0.12.0";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "simonrepp";
+    repo = "faircamp";
+    rev = version;
+    hash = "sha256-AYvykiPdVeWMEoDgPHlTHDcPrk3VgNQJFXulbO/3Ars=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "enolib-0.4.0" = "sha256-lfvQHdQSHAzeOULrvIj7MIYtNaIwc0bXC5q1KK9UGvU=";
+    };
+  };
+
+  buildFeatures = [ "libvips" ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [
+    glib
+    libopus
+    vips
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/faircamp \
+      --prefix PATH : ${lib.makeBinPath [ ffmpeg ]}
+  '';
+
+  passthru.tests = {
+    wav = callPackage ./test-wav.nix { };
+    version = testers.testVersion { package = faircamp; };
+  };
+
+  meta = with lib; {
+    description = "A self-hostable, statically generated bandcamp alternative";
+    longDescription = ''
+      Faircamp takes a directory on your disk - your Catalog - and from it
+      produces a fancy-looking (and technically simple and completely static)
+      website, which presents your music in a way similar to how popular
+      commercial service bandcamp does it.
+
+      You can upload the files faircamp generates to any webspace - no database
+      and no programming language support (PHP or such) is required. If your
+      webspace supports SSH access, faircamp can be configured to upload your
+      website for you automatically, otherwise you can use FTP or whichever
+      means you prefer to do that manually.
+    '';
+    homepage = "https://simonrepp.com/faircamp/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/faircamp/test-wav.nix b/nixpkgs/pkgs/applications/misc/faircamp/test-wav.nix
new file mode 100644
index 000000000000..8a9d2eaa2f35
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/faircamp/test-wav.nix
@@ -0,0 +1,14 @@
+{ stdenv
+, faircamp
+, ffmpeg
+}:
+
+stdenv.mkDerivation {
+  name = "faircamp-test-wav";
+  meta.timeout = 60;
+  buildCommand = ''
+    mkdir album
+    ${ffmpeg}/bin/ffmpeg -f lavfi -i "sine=frequency=440:duration=1" album/track.wav
+    ${faircamp}/bin/faircamp --build-dir $out
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/misc/far2l/default.nix b/nixpkgs/pkgs/applications/misc/far2l/default.nix
new file mode 100644
index 000000000000..bca4a1d86a72
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/far2l/default.nix
@@ -0,0 +1,72 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, cmake, ninja, pkg-config, m4, perl, bash
+, xdg-utils, zip, unzip, gzip, bzip2, gnutar, p7zip, xz
+, IOKit, Carbon, Cocoa, AudioToolbox, OpenGL, System
+, withTTYX ? true, libX11
+, withGUI ? true, wxGTK32
+, withUCD ? true, libuchardet
+
+# Plugins
+, withColorer ? true, spdlog, xercesc
+, withMultiArc ? true, libarchive, pcre
+, withNetRocks ? true, openssl, libssh, samba, libnfs, neon
+, withPython ? false, python3Packages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "far2l";
+  version = "2.5.3";
+
+  src = fetchFromGitHub {
+    owner = "elfmz";
+    repo = "far2l";
+    rev = "v_${version}";
+    sha256 = "sha256-aK6+7ChFAkeDiEYU2llBb//PBej2Its/wBeuG7ys/ew=";
+  };
+
+  nativeBuildInputs = [ cmake ninja pkg-config m4 perl makeWrapper ];
+
+  buildInputs = lib.optional withTTYX libX11
+    ++ lib.optional withGUI wxGTK32
+    ++ lib.optional withUCD libuchardet
+    ++ lib.optionals withColorer [ spdlog xercesc ]
+    ++ lib.optionals withMultiArc [ libarchive pcre ]
+    ++ lib.optionals withNetRocks [ openssl libssh libnfs neon ]
+    ++ lib.optional (withNetRocks && !stdenv.isDarwin) samba # broken on darwin
+    ++ lib.optionals withPython (with python3Packages; [ python cffi debugpy pcpp ])
+    ++ lib.optionals stdenv.isDarwin [ IOKit Carbon Cocoa AudioToolbox OpenGL System ];
+
+  postPatch = ''
+    patchShebangs python/src/prebuild.sh
+    patchShebangs far2l/bootstrap/view.sh
+  '';
+
+  cmakeFlags = [
+    (lib.cmakeBool "TTYX" withTTYX)
+    (lib.cmakeBool "USEWX" withGUI)
+    (lib.cmakeBool "USEUCD" withUCD)
+    (lib.cmakeBool "COLORER" withColorer)
+    (lib.cmakeBool "MULTIARC" withMultiArc)
+    (lib.cmakeBool "NETROCKS" withNetRocks)
+    (lib.cmakeBool "PYTHON" withPython)
+  ] ++ lib.optionals withPython [
+    (lib.cmakeFeature "VIRTUAL_PYTHON" "python")
+    (lib.cmakeFeature "VIRTUAL_PYTHON_VERSION" "python")
+  ];
+
+  runtimeDeps = [ unzip zip p7zip xz gzip bzip2 gnutar ];
+
+  postInstall = ''
+    wrapProgram $out/bin/far2l \
+      --argv0 $out/bin/far2l \
+      --prefix PATH : ${lib.makeBinPath runtimeDeps} \
+      --suffix PATH : ${lib.makeBinPath [ xdg-utils ]}
+  '';
+
+  meta = with lib; {
+    description = "Linux port of FAR Manager v2, a program for managing files and archives in Windows operating systems";
+    homepage = "https://github.com/elfmz/far2l";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ hypersw ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fbmenugen/0001-Fix-paths.patch b/nixpkgs/pkgs/applications/misc/fbmenugen/0001-Fix-paths.patch
new file mode 100644
index 000000000000..1db7aeb738bb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fbmenugen/0001-Fix-paths.patch
@@ -0,0 +1,60 @@
+From b65921873585616c86a591eee9efbc68f84eb3d3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jos=C3=A9=20Romildo?= <malaquias@gmail.com>
+Date: Wed, 25 Aug 2021 12:03:09 -0300
+Subject: [PATCH] Fix paths
+
+---
+ fbmenugen | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/fbmenugen b/fbmenugen
+index 241be16..5fc9aea 100755
+--- a/fbmenugen
++++ b/fbmenugen
+@@ -214,9 +214,7 @@ my %CONFIG = (
+ 
+ #<<<
+         desktop_files_paths => [
+-            '/usr/share/applications',
+-            '/usr/local/share/applications',
+-            '/usr/share/applications/kde4',
++            '/run/current-system/sw/share/applications',
+             "$home_dir/.local/share/applications",
+         ],
+ #>>>
+@@ -252,7 +250,7 @@ if (not -e $config_file) {
+ }
+ 
+ if (not -e $schema_file) {
+-    if (-e (my $etc_schema_file = "/etc/xdg/$pkgname/schema.pl")) {
++    if (-e (my $etc_schema_file = "@fbmenugen@/etc/xdg/$pkgname/schema.pl")) {
+         require File::Copy;
+         File::Copy::copy($etc_schema_file, $schema_file)
+           or warn "$0: can't copy file `$etc_schema_file' to `$schema_file': $!\n";
+@@ -588,7 +586,7 @@ EXIT
+         $generated_menu .= begin_category(@{$schema->{fluxbox}}) . <<"FOOTER";
+ [config] (Configure)
+ [submenu] (System Styles) {Choose a style...}
+-  [stylesdir] (/usr/share/fluxbox/styles)
++  [stylesdir] (@fluxbox@/share/fluxbox/styles)
+ [end]
+ [submenu] (User Styles) {Choose a style...}
+   [stylesdir] (~/.fluxbox/styles)
+@@ -598,12 +596,13 @@ EXIT
+   [exec] (Screenshot - JPG) {import screenshot.jpg && display -resize 50% screenshot.jpg}
+   [exec] (Screenshot - PNG) {import screenshot.png && display -resize 50% screenshot.png}
+   [exec] (Run) {fbrun}
+-  [exec] (Regen Menu) {fluxbox-generate_menu}
++  [exec] (Regen Menu) {@fluxbox@/bin/fluxbox-generate_menu}
+ [end]
+ [commanddialog] (Fluxbox Command)
+   [reconfig] (Reload config)
+   [restart] (Restart)
+   [exec] (About) {(fluxbox -v; fluxbox -info | sed 1d) | xmessage -file - -center}
++  [exec] (About) {(@fluxbox@/bin/fluxbox -v; @fluxbox@/bin/fluxbox -info | @gnused@/bin/sed 1d) | @xmessage@/bin/xmessage -file - -center}
+   [separator]
+   [exit] (Exit)
+ [end]
+-- 
+2.32.0
+
diff --git a/nixpkgs/pkgs/applications/misc/fbmenugen/default.nix b/nixpkgs/pkgs/applications/misc/fbmenugen/default.nix
new file mode 100644
index 000000000000..161991f03264
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fbmenugen/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, fetchFromGitHub
+, fluxbox
+, gnused
+, makeWrapper
+, perlPackages
+, substituteAll
+, xorg
+, wrapGAppsHook
+, gitUpdater
+}:
+
+perlPackages.buildPerlPackage rec {
+  pname = "fbmenugen";
+  version = "0.87";
+
+  src = fetchFromGitHub {
+    owner = "trizen";
+    repo = pname;
+    rev = version;
+    sha256 = "A0yhoK/cPp3JlNZacgLaDhaU838PpFna7luQKNDvyOg=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./0001-Fix-paths.patch;
+      xmessage = xorg.xmessage;
+      inherit fluxbox gnused;
+    })
+  ];
+
+  outputs = [ "out" ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    fluxbox
+    gnused
+    perlPackages.DataDump
+    perlPackages.FileDesktopEntry
+    perlPackages.Gtk3
+    perlPackages.LinuxDesktopFiles
+    perlPackages.perl
+    xorg.xmessage
+  ];
+
+  dontConfigure = true;
+
+  dontBuild = true;
+
+  postPatch = ''
+    substituteInPlace fbmenugen --subst-var-by fbmenugen $out
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -D -t $out/bin ${pname}
+    install -D -t $out/etc/xdg/${pname} schema.pl
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    wrapProgram "$out/bin/${pname}" --prefix PERL5LIB : "$PERL5LIB"
+  '';
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = with lib; {
+    homepage = "https://github.com/trizen/fbmenugen";
+    description = "Simple menu generator for the Fluxbox Window Manager";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fead/default.nix b/nixpkgs/pkgs/applications/misc/fead/default.nix
new file mode 100644
index 000000000000..73907a175881
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fead/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromSourcehut, python3, help2man }:
+
+stdenv.mkDerivation rec {
+  pname = "fead";
+  version = "0.1.3";
+
+  src = fetchFromSourcehut {
+    owner = "~cnx";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-cW0GxyvC9url2QAAWD0M2pR4gBiPA3eeAaw77TwMV/0=";
+  };
+
+  nativeBuildInputs = [ help2man ];
+  buildInputs = [ python3 ];
+
+  # Needed for man page generation in build phase
+  postPatch = ''
+    patchShebangs src/fead.py
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  # Already done in postPatch phase
+  dontPatchShebangs = true;
+
+  # The package has no tests.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Advert generator from web feeds";
+    homepage = "https://git.sr.ht/~cnx/fead";
+    license = licenses.agpl3Plus;
+    changelog = "https://git.sr.ht/~cnx/fead/refs/${version}";
+    maintainers = with maintainers; [ McSinyx ];
+    mainProgram = "fead";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/feedbackd/default.nix b/nixpkgs/pkgs/applications/misc/feedbackd/default.nix
new file mode 100644
index 000000000000..45da9c1afaa8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/feedbackd/default.nix
@@ -0,0 +1,107 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchpatch2
+, docbook-xsl-nons
+, docutils
+, gi-docgen
+, gobject-introspection
+, gtk-doc
+, libxslt
+, meson
+, ninja
+, pkg-config
+, vala
+, wrapGAppsHook
+, glib
+, gsound
+, json-glib
+, libgudev
+, dbus
+}:
+
+let
+  themes = fetchFromGitLab {
+    domain = "source.puri.sm";
+    owner = "Librem5";
+    repo = "feedbackd-device-themes";
+    rev = "v0.1.0";
+    sha256 = "sha256-YK9fJ3awmhf1FAhdz95T/POivSO93jsNApm+u4OOZ80=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "feedbackd";
+  version = "0.2.0";
+
+  outputs = [ "out" "dev" "devdoc" ];
+
+  src = fetchFromGitLab {
+    domain = "source.puri.sm";
+    owner = "Librem5";
+    repo = "feedbackd";
+    rev = "v${version}";
+    hash = "sha256-l5rfMx3ElW25A5WVqzfKBp57ebaNC9msqV7mvnwv10s=";
+    fetchSubmodules = true;
+  };
+
+  depsBuildBuild = [
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    docbook-xsl-nons
+    docutils # for rst2man
+    gi-docgen
+    gobject-introspection
+    gtk-doc
+    libxslt
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gsound
+    json-glib
+    libgudev
+  ];
+
+  mesonFlags = [
+    "-Dgtk_doc=true"
+    "-Dman=true"
+  ];
+
+  nativeCheckInputs = [
+    dbus
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    mkdir -p $out/lib/udev/rules.d
+    sed "s|/usr/libexec/|$out/libexec/|" < $src/debian/feedbackd.udev > $out/lib/udev/rules.d/90-feedbackd.rules
+    cp ${themes}/data/* $out/share/feedbackd/themes/
+  '';
+
+  postFixup = ''
+    # Move developer documentation to devdoc output.
+    # Cannot be in postInstall, otherwise _multioutDocs hook in preFixup will move right back.
+    if [[ -d "$out/share/doc" ]]; then
+        find -L "$out/share/doc" -type f -regex '.*\.devhelp2?' -print0 \
+          | while IFS= read -r -d ''' file; do
+            moveToOutput "$(dirname "''${file/"$out/"/}")" "$devdoc"
+        done
+    fi
+  '';
+
+  meta = with lib; {
+    description = "A daemon to provide haptic (and later more) feedback on events";
+    homepage = "https://source.puri.sm/Librem5/feedbackd";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ pacman99 tomfitzhenry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fehlstart/default.nix b/nixpkgs/pkgs/applications/misc/fehlstart/default.nix
new file mode 100644
index 000000000000..4d3903bbb6ec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fehlstart/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, pkg-config, gtk2, keybinder, fetchFromGitLab }:
+
+stdenv.mkDerivation {
+  pname = "fehlstart";
+  version = "unstable-2016-05-23";
+
+  src = fetchFromGitLab {
+    owner = "fehlstart";
+    repo = "fehlstart";
+    rev = "9f4342d75ec5e2a46c13c99c34894bc275798441";
+    sha256 = "1rfzh7w6n2s9waprv7m1bhvqrk36a77ada7w655pqiwkhdj5q95i";
+  };
+
+  patches = [ ./use-nix-profiles.patch ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 keybinder ];
+
+  preConfigure = ''
+    export PREFIX=$out
+  '';
+
+  meta = with lib; {
+    description = "Small desktop application launcher with reasonable memory footprint";
+    homepage = "https://gitlab.com/fehlstart/fehlstart";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.mounium ];
+    platforms = platforms.all;
+    mainProgram = "fehlstart";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fehlstart/use-nix-profiles.patch b/nixpkgs/pkgs/applications/misc/fehlstart/use-nix-profiles.patch
new file mode 100644
index 000000000000..0c06e53f9814
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fehlstart/use-nix-profiles.patch
@@ -0,0 +1,21 @@
+--- fehlstart-9f4342d75ec5e2a46c13c99c34894bc275798441-src/fehlstart.c	1970-01-01 01:00:01.000000000 +0100
++++ fehlstart.c	2016-08-10 12:21:11.231638418 +0200
+@@ -779,8 +779,15 @@
+     read_settings(setting_file, &settings);
+     update_commands();
+     g_hash_table_foreach(action_map, update_launcher, NULL);
+-    add_launchers(STR_S(APPLICATIONS_DIR_0));
+-    add_launchers(STR_S(APPLICATIONS_DIR_1));
+-    add_launchers(STR_S(USER_APPLICATIONS_DIR));
++    const char* nixprofiles = getenv("NIX_PROFILES");
++    if(nixprofiles != NULL) {
++      const char* pch = strtok(nixprofiles, " ");
++      while (pch != NULL)
++      {
++          String nix_dir = str_concat((String) { pch, strlen(pch), false },STR_S("/share/applications"));
++          add_launchers(nix_dir);
++          pch = strtok(NULL, " ");
++      }
++    }
+     return NULL;
+ }
diff --git a/nixpkgs/pkgs/applications/misc/fetchmail/default.nix b/nixpkgs/pkgs/applications/misc/fetchmail/default.nix
new file mode 100644
index 000000000000..c6280232b8e9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fetchmail/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchurl, openssl, python3 }:
+
+stdenv.mkDerivation rec {
+  pname = "fetchmail";
+  version = "6.4.37";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/fetchmail/fetchmail-${version}.tar.xz";
+    sha256 = "sha256-ShguXYk+mr5qw3rnHlQmUfzm1gYjT8c1wqquGGV+aeo=";
+  };
+
+  buildInputs = [ openssl python3 ];
+
+  configureFlags = [ "--with-ssl=${openssl.dev}" ];
+
+  meta = with lib; {
+    homepage = "https://www.fetchmail.info/";
+    description = "A full-featured remote-mail retrieval and forwarding utility";
+    longDescription = ''
+      A full-featured, robust, well-documented remote-mail retrieval and
+      forwarding utility intended to be used over on-demand TCP/IP links
+      (such as SLIP or PPP connections). It supports every remote-mail
+      protocol now in use on the Internet: POP2, POP3, RPOP, APOP, KPOP,
+      all flavors of IMAP, ETRN, and ODMR. It can even support IPv6 and
+      IPSEC.
+    '';
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fetchmail/v7.nix b/nixpkgs/pkgs/applications/misc/fetchmail/v7.nix
new file mode 100644
index 000000000000..7962f4a94b61
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fetchmail/v7.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, pkgs }:
+
+stdenv.mkDerivation {
+  pname = "fetchmail";
+  version = "unstable-2022-05-26";
+
+  src = pkgs.fetchFromGitLab {
+    owner = "fetchmail";
+    repo = "fetchmail";
+    rev = "30b368fb8660d8fec08be1cdf2606c160b4bcb80";
+    sha256 = "sha256-83D2YlFCODK2YD+oLICdim2NtNkkJU67S3YLi8Q6ga8=";
+  };
+
+  buildInputs = with pkgs; [ openssl python3 ];
+  nativeBuildInputs = with pkgs; [ autoreconfHook pkg-config bison flex ];
+
+  configureFlags = [ "--with-ssl=${pkgs.openssl.dev}" ];
+
+  postInstall = ''
+    cp -a contrib/. $out/share/fetchmail-contrib
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.fetchmail.info/";
+    description = "A full-featured remote-mail retrieval and forwarding utility";
+    longDescription = ''
+      A full-featured, robust, well-documented remote-mail retrieval and
+      forwarding utility intended to be used over on-demand TCP/IP links
+      (such as SLIP or PPP connections). It supports every remote-mail
+      protocol now in use on the Internet: POP2, POP3, RPOP, APOP, KPOP,
+      all flavors of IMAP, ETRN, and ODMR. It can even support IPv6 and
+      IPSEC.
+    '';
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ff2mpv/default.nix b/nixpkgs/pkgs/applications/misc/ff2mpv/default.nix
new file mode 100644
index 000000000000..a87e84ea3892
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ff2mpv/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, python3, mpv }:
+
+stdenv.mkDerivation rec {
+  pname = "ff2mpv";
+  version = "5.1.0";
+
+  src = fetchFromGitHub {
+    owner = "woodruffw";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Xx18EX/MxLrnwZGwMFZJxJURUpjU2P01CQue5XbZ3fw=";
+  };
+
+  buildInputs = [ python3 mpv ];
+
+  postPatch = ''
+    patchShebangs .
+    substituteInPlace ff2mpv.json \
+      --replace '/home/william/scripts/ff2mpv' "$out/bin/ff2mpv.py"
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/lib/mozilla/native-messaging-hosts
+    cp ff2mpv.py $out/bin
+    cp ff2mpv.json $out/lib/mozilla/native-messaging-hosts
+  '';
+
+  meta = {
+    description = "Native Messaging Host for ff2mpv firefox addon.";
+    homepage = "https://github.com/woodruffw/ff2mpv";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ Enzime ];
+    mainProgram = "ff2mpv.py";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fff/default.nix b/nixpkgs/pkgs/applications/misc/fff/default.nix
new file mode 100644
index 000000000000..a3f791940cbf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fff/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, bashInteractive, xdg-utils, file, coreutils, w3m, xdotool }:
+
+stdenv.mkDerivation rec {
+  pname = "fff";
+  version = "2.2";
+
+  src = fetchFromGitHub {
+    owner = "dylanaraps";
+    repo = pname;
+    rev = version;
+    sha256 = "14ymdw6l6phnil0xf1frd5kgznaiwppcic0v4hb61s1zpf4wrshg";
+  };
+
+  pathAdd = lib.makeSearchPath "bin" ([ xdg-utils file coreutils w3m xdotool ]);
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ bashInteractive ];
+  dontBuild = true;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/fff" --prefix PATH : $pathAdd
+  '';
+
+  meta = with lib; {
+    description = "Fucking Fast File-Manager";
+    homepage = "https://github.com/dylanaraps/fff";
+    license = licenses.mit;
+    maintainers = [ maintainers.tadeokondrak ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/filet/default.nix b/nixpkgs/pkgs/applications/misc/filet/default.nix
new file mode 100644
index 000000000000..b13f24be307d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/filet/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "filet";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "buffet";
+    repo = "filet";
+    rev = version;
+    sha256 = "0hm7589ih30axafqxhhs4fg1pvfhlqzyzzmfi2ilx8haq5111fsf";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A fucking fucking fast file fucker (afffff)";
+    homepage = "https://github.com/buffet/filet";
+    license = licenses.mpl20;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ buffet ];
+    mainProgram = "filet";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/findex/default.nix b/nixpkgs/pkgs/applications/misc/findex/default.nix
new file mode 100644
index 000000000000..29ddc3d461a4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/findex/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, wrapGAppsHook
+, keybinder3
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "findex";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "mdgaziur";
+    repo = "findex";
+    rev = "v${version}";
+    hash = "sha256-rxOVrl2Q27z5oo1J6D4ft4fKaOMOadmidflD0jK0+3k=";
+  };
+
+  cargoHash = "sha256-MiD96suB88NZWg7Ay/ACZfOeE66WOe9dLsvtOhCQgGo=";
+
+  postPatch = ''
+    # failing rust documentation tests and faulty quotes "`README.md`"
+    sed -i '/^\/\/\//d' ./crates/findex-plugin/src/lib.rs
+    substituteInPlace ./crates/findex/src/gui/css.rs \
+      --replace-fail '/opt/findex/style.css' "$out/share/findex/style.css"
+  '';
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+
+  buildInputs = [ keybinder3 ];
+
+  postInstall = ''
+    install -Dm644 css/style.css $out/share/findex/style.css
+  '';
+
+  meta = with lib; {
+    description = "Highly customizable application finder written in Rust and uses Gtk3";
+    homepage = "https://github.com/mdgaziur/findex";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.pinkcreeper100 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/firefly-desktop/default.nix b/nixpkgs/pkgs/applications/misc/firefly-desktop/default.nix
new file mode 100644
index 000000000000..9df2118b02fb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/firefly-desktop/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "firefly-desktop";
+  version = "2.1.8";
+  src = fetchurl {
+    url = "https://github.com/iotaledger/firefly/releases/download/desktop-${version}/${pname}-${version}.AppImage";
+    sha256 = "sha256-MATMl5eEIauDQpz8/wqIzD7IugPVZ2HJAWCbDM4n+hA=";
+  };
+  appimageContents = appimageTools.extractType2 { inherit pname version src; };
+
+in appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraPkgs = pkgs: (appimageTools.defaultFhsEnvArgs.multiPkgs pkgs) ++ [ pkgs.libsecret ];
+
+  extraInstallCommands = ''
+    mkdir -p $out/share/applications $out/share/pixmaps
+    mv $out/bin/${pname}-${version} $out/bin/firefly-desktop
+    cp ${appimageContents}/desktop.desktop $out/share/applications/firefly-desktop.desktop
+    substituteInPlace $out/share/applications/firefly-desktop.desktop \
+      --replace 'Exec=AppRun' 'Exec=firefly-desktop' \
+      --replace 'Icon=desktop' 'Icon=firefly-desktop'
+    cp ${appimageContents}/desktop.png $out/share/pixmaps/firefly-desktop.png
+  '';
+
+  meta = with lib; {
+    description = "IOTA's New Wallet";
+    homepage = "https://firefly.iota.org";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "firefly-desktop";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/firestarter/default.nix b/nixpkgs/pkgs/applications/misc/firestarter/default.nix
new file mode 100644
index 000000000000..a8372b643bd3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/firestarter/default.nix
@@ -0,0 +1,110 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchzip
+, addOpenGLRunpath
+, cmake
+, glibc_multi
+, glibc
+, git
+, pkg-config
+, cudaPackages ? {}
+, withCuda ? false
+}:
+
+let
+  inherit (cudaPackages) cudatoolkit;
+
+  hwloc = stdenv.mkDerivation rec {
+    pname = "hwloc";
+    version = "2.2.0";
+
+    src = fetchzip {
+      url = "https://download.open-mpi.org/release/hwloc/v${lib.versions.majorMinor version}/hwloc-${version}.tar.gz";
+      sha256 = "1ibw14h9ppg8z3mmkwys8vp699n85kymdz20smjd2iq9b67y80b6";
+    };
+
+    configureFlags = [
+      "--enable-static"
+      "--disable-libudev"
+      "--disable-shared"
+      "--disable-doxygen"
+      "--disable-libxml2"
+      "--disable-cairo"
+      "--disable-io"
+      "--disable-pci"
+      "--disable-opencl"
+      "--disable-cuda"
+      "--disable-nvml"
+      "--disable-gl"
+      "--disable-libudev"
+      "--disable-plugin-dlopen"
+      "--disable-plugin-ltdl"
+    ];
+
+    nativeBuildInputs = [ pkg-config ];
+
+    enableParallelBuilding = true;
+
+    outputs = [ "out" "lib" "dev" "doc" "man" ];
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "firestarter";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "tud-zih-energy";
+    repo = "FIRESTARTER";
+    rev = "v${version}";
+    sha256 = "1ik6j1lw5nldj4i3lllrywqg54m9i2vxkxsb2zr4q0d2rfywhn23";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    git
+    pkg-config
+  ] ++ lib.optionals withCuda [
+    addOpenGLRunpath
+  ];
+
+  buildInputs = [ hwloc ] ++ (if withCuda then
+    [ glibc_multi cudatoolkit ]
+  else
+    [ glibc.static ]);
+
+  NIX_LDFLAGS = lib.optionals withCuda [
+    "-L${cudatoolkit}/lib/stubs"
+  ];
+
+  cmakeFlags = [
+    "-DFIRESTARTER_BUILD_HWLOC=OFF"
+    "-DCMAKE_C_COMPILER_WORKS=1"
+    "-DCMAKE_CXX_COMPILER_WORKS=1"
+  ] ++ lib.optionals withCuda [
+    "-DFIRESTARTER_BUILD_TYPE=FIRESTARTER_CUDA"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp src/FIRESTARTER${lib.optionalString withCuda "_CUDA"} $out/bin/
+    runHook postInstall
+  '';
+
+  postFixup = lib.optionalString withCuda ''
+    addOpenGLRunpath $out/bin/FIRESTARTER_CUDA
+  '';
+
+  meta = with lib; {
+    broken = (stdenv.isLinux && stdenv.isAarch64);
+    homepage = "https://tu-dresden.de/zih/forschung/projekte/firestarter";
+    description = "Processor Stress Test Utility";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ astro marenz ];
+    license = licenses.gpl3;
+    mainProgram = "FIRESTARTER";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/flamerobin/default.nix b/nixpkgs/pkgs/applications/misc/flamerobin/default.nix
new file mode 100644
index 000000000000..de0f06fa5a00
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/flamerobin/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, wxGTK32
+, boost
+, firebird
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.9.3.12";
+  pname = "flamerobin";
+
+  src = fetchFromGitHub {
+    owner = "mariuz";
+    repo = "flamerobin";
+    rev = version;
+    sha256 = "sha256-uWx3riRc79VKh7qniWFjxxc7v6l6cW0i31HxoN1BSdA=";
+  };
+
+  patches = [
+    # rely on compiler command line for __int128 and std::decimal::decimal128
+    (fetchpatch {
+      url = "https://github.com/mariuz/flamerobin/commit/8e0ea6d42aa28a4baeaa8c8b8b57c56eb9ae3540.patch";
+      sha256 = "sha256-l6LWXA/sRQGQKi798bzl0iIJ2vdvXHOjG7wdFSXv+NM=";
+    })
+  ];
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [
+    wxGTK32
+    boost
+    firebird
+  ];
+
+  meta = with lib; {
+    description = "Database administration tool for Firebird RDBMS";
+    homepage = "https://github.com/mariuz/flamerobin";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ uralbash ];
+    platforms = platforms.unix;
+    mainProgram = "flamerobin";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/flashprint/default.nix b/nixpkgs/pkgs/applications/misc/flashprint/default.nix
new file mode 100644
index 000000000000..affc8c5ad2be
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/flashprint/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, libGLU, qtbase, fetchurl, dpkg, autoPatchelfHook, wrapQtAppsHook }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "flashprint";
+  version = "5.8.3";
+
+  src = fetchurl {
+    url = "http://www.ishare3d.com/3dapp/public/FlashPrint-5/FlashPrint/flashprint5_${finalAttrs.version}_amd64.deb";
+    hash = "sha256-6vBEthQD0HM2D+l+2dwWmdU+XPJpcvZQM+2GMuaf5Pw=";
+  };
+
+  nativeBuildInputs = [ dpkg autoPatchelfHook wrapQtAppsHook ];
+
+  buildInputs = [ qtbase libGLU ];
+
+  qtWrapperArgs = [ "--prefix QT_QPA_PLATFORM : xcb" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mv etc usr/* $out
+    ln -s $out/share/FlashPrint5/FlashPrint $out/bin/flashprint
+    sed -i "/^Exec=/ c Exec=$out/bin/flashprint" $out/share/applications/FlashPrint5.desktop
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Slicer for the FlashForge 3D printers";
+    homepage = "https://www.flashforge.com/";
+    license = licenses.unfree;
+    mainProgram = "flashprint";
+    maintainers = [ maintainers.ianliu ];
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = [ sourceTypes.binaryNativeCode ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/flavours/default.nix b/nixpkgs/pkgs/applications/misc/flavours/default.nix
new file mode 100644
index 000000000000..ca3c5956e3c2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/flavours/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "flavours";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "Misterio77";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-SOsHvcfDdUpb0x5VZ1vZJnGaIiWWOPgnAwKYNXzfUfI=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  cargoHash = "sha256-aimPeGIE5jP0pdrqwnzUzBqW0jz9+kcfpLdCN0r30xU=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    installShellCompletion --cmd flavours \
+      --zsh <($out/bin/flavours --completions zsh) \
+      --fish <($out/bin/flavours --completions fish) \
+      --bash <($out/bin/flavours --completions bash)
+  '';
+
+  meta = with lib; {
+    description = "An easy to use base16 scheme manager/builder that integrates with any workflow";
+    homepage = "https://github.com/Misterio77/flavours";
+    changelog = "https://github.com/Misterio77/flavours/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ moni misterio77 ];
+    mainProgram = "flavours";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/flowtime/default.nix b/nixpkgs/pkgs/applications/misc/flowtime/default.nix
new file mode 100644
index 000000000000..6637cb878191
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/flowtime/default.nix
@@ -0,0 +1,56 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, vala
+, meson
+, ninja
+, wrapGAppsHook4
+, gst_all_1
+, libadwaita
+, libxml2
+, desktop-file-utils
+, pkg-config
+, libportal-gtk4
+, blueprint-compiler
+, appstream-glib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "flowtime";
+  version = "6.1";
+
+  src = fetchFromGitHub {
+    owner = "Diego-Ivan";
+    repo = "Flowtime";
+    rev = "v${version}";
+    hash = "sha256-wTqHTkt1O3Da2fzxf6DiQjrqOt65ZEhLOkGK5C6HzIk=";
+  };
+
+  nativeBuildInputs = [
+    blueprint-compiler
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook4
+    appstream-glib
+  ];
+
+  buildInputs = [
+    libadwaita
+    libxml2
+    libportal-gtk4
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-plugins-base
+  ]);
+
+  meta = with lib; {
+    description = "Get what motivates you done, without losing concentration";
+    homepage = "https://github.com/Diego-Ivan/Flowtime";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ foo-dogsquared pokon548 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fluidd/default.nix b/nixpkgs/pkgs/applications/misc/fluidd/default.nix
new file mode 100644
index 000000000000..b364bc31bbf2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fluidd/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenvNoCC, fetchurl, unzip }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "fluidd";
+  version = "1.27.1";
+
+  src = fetchurl {
+    name = "fluidd-v${version}.zip";
+    url = "https://github.com/cadriel/fluidd/releases/download/v${version}/fluidd.zip";
+    sha256 = "sha256-yBxbN6Pd92HjhJ0wMaTDXETcdV4a795wAhv06JcYjJM=";
+  };
+
+  nativeBuildInputs = [ unzip ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  unpackPhase = ''
+    mkdir fluidd
+    unzip $src -d fluidd
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/fluidd
+    cp -r fluidd $out/share/fluidd/htdocs
+  '';
+
+  meta = with lib; {
+    description = "Klipper web interface";
+    homepage = "https://docs.fluidd.xyz";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ zhaofengli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fluxboxlauncher/default.nix b/nixpkgs/pkgs/applications/misc/fluxboxlauncher/default.nix
new file mode 100644
index 000000000000..719f08db6bcd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fluxboxlauncher/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, fetchFromGitHub
+, python3
+, gtk3
+, wrapGAppsHook
+, glibcLocales
+, gobject-introspection
+, gettext
+, pango
+, gdk-pixbuf
+, atk
+, fluxbox
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "fluxboxlauncher";
+  version = "0.2.1";
+
+  src = fetchFromGitHub {
+    owner = "mothsart";
+    repo = "fluxboxlauncher";
+    rev = "0.2.1";
+    sha256 = "024h1dk0bhc5s4dldr6pqabrgcqih9p8cys5lqgkgz406y4vyzvf";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gobject-introspection
+    pango
+    gdk-pixbuf
+    atk
+    gettext
+  ];
+
+  buildInputs = [
+    glibcLocales
+    gtk3
+    python3
+    fluxbox
+  ];
+
+  makeWrapperArgs = [ "--set LOCALE_ARCHIVE ${glibcLocales}/lib/locale/locale-archive"
+                      "--set CHARSET en_us.UTF-8" ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pygobject3
+  ];
+
+  postInstall = ''
+    install -Dm444 fluxboxlauncher.desktop -t $out/share/applications
+    install -Dm444 fluxboxlauncher.svg -t $out/share/icons/hicolor/scalable/apps
+  '';
+
+  meta = with lib; {
+    description = "A Gui editor (gtk) to configure applications launching on a fluxbox session";
+    homepage = "https://github.com/mothsART/fluxboxlauncher";
+    maintainers = with maintainers; [ mothsart ];
+    license = licenses.bsdOriginal;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/font-manager/default.nix b/nixpkgs/pkgs/applications/misc/font-manager/default.nix
new file mode 100644
index 000000000000..40cbeaea6130
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/font-manager/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, gettext
+, python3
+, pkg-config
+, libxml2
+, json-glib
+, sqlite
+, itstool
+, yelp-tools
+, vala
+, gsettings-desktop-schemas
+, gtk3
+, gnome
+, desktop-file-utils
+, wrapGAppsHook
+, gobject-introspection
+# withWebkit enables the "webkit" feature, also known as Google Fonts
+, withWebkit ? true, glib-networking, libsoup, webkitgtk
+}:
+
+stdenv.mkDerivation rec {
+  pname = "font-manager";
+  version = "0.8.8";
+
+  src = fetchFromGitHub {
+    owner = "FontManager";
+    repo = "font-manager";
+    rev = version;
+    hash = "sha256-M13Q9d2cKhc0tudkvw0zgqPAFTlmXwK+LltXeuDPWxo=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    gettext
+    python3
+    itstool
+    desktop-file-utils
+    vala
+    yelp-tools
+    wrapGAppsHook
+    # For https://github.com/FontManager/master/blob/master/lib/unicode/meson.build
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    libxml2
+    json-glib
+    sqlite
+    gsettings-desktop-schemas # for font settings
+    gtk3
+    gnome.adwaita-icon-theme
+  ] ++ lib.optionals withWebkit [
+    glib-networking # for SSL so that Google Fonts can load
+    libsoup
+    webkitgtk
+  ];
+
+  mesonFlags = [
+    "-Dreproducible=true" # Do not hardcode build directory…
+    (lib.mesonBool "webkit" withWebkit)
+  ];
+
+  postPatch = ''
+    chmod +x meson_post_install.py
+    patchShebangs meson_post_install.py
+  '';
+
+  meta = with lib; {
+    homepage = "https://fontmanager.github.io/";
+    description = "Simple font management for GTK desktop environments";
+    longDescription = ''
+      Font Manager is intended to provide a way for average users to
+      easily manage desktop fonts, without having to resort to command
+      line tools or editing configuration files by hand. While designed
+      primarily with the Gnome Desktop Environment in mind, it should
+      work well with other GTK desktop environments.
+
+      Font Manager is NOT a professional-grade font management solution.
+    '';
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fontfinder/default.nix b/nixpkgs/pkgs/applications/misc/fontfinder/default.nix
new file mode 100644
index 000000000000..f0fc3dfd3a7d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fontfinder/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cargo
+, pkg-config
+, rustPlatform
+, rustc
+, wrapGAppsHook
+, gdk-pixbuf
+, gtk3
+, libsoup_3
+, webkitgtk_4_1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "fontfinder";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "mmstick";
+    repo = "fontfinder";
+    rev = version;
+    hash = "sha256-C4KqEdqToVnPXFPWvNkl/md9L2W4NxRd5jvZ4E7CtfA=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-PXO8E41KHPNOR527gs2vM3J9JMG0PWi8Eg/13UCkr3U=";
+  };
+
+  nativeBuildInputs = [
+    cargo
+    pkg-config
+    rustPlatform.cargoSetupHook
+    rustc
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    gtk3
+    libsoup_3
+    webkitgtk_4_1
+  ];
+
+  makeFlags = [
+    "prefix=$(out)"
+  ];
+
+  meta = with lib; {
+    description = "GTK application for browsing and installing fonts from Google's font archive";
+    homepage = "https://github.com/mmstick/fontfinder";
+    changelog = "https://github.com/mmstick/fontfinder/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "fontfinder-gtk";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fontpreview/default.nix b/nixpkgs/pkgs/applications/misc/fontpreview/default.nix
new file mode 100644
index 000000000000..0f02eeed1769
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fontpreview/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper, xdotool, fzf, imagemagick, sxiv, getopt }:
+
+stdenv.mkDerivation rec {
+  pname = "fontpreview";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "sdushantha";
+    repo = pname;
+    rev = version;
+    sha256 = "0g3i2k6n2yhp88rrcf0hp6ils7836db7hx73hw9qnpcbmckz0i4w";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  preInstall = "mkdir -p $out/bin";
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/fontpreview \
+      --prefix PATH : ${lib.makeBinPath [ xdotool fzf imagemagick sxiv getopt ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/sdushantha/fontpreview";
+    description = "Highly customizable and minimal font previewer written in bash";
+    longDescription = ''
+      fontpreview is a commandline tool that lets you quickly search for fonts
+      that are installed on your machine and preview them. The fuzzy search
+      feature is provided by fzf and the preview is generated with imagemagick
+      and then displayed using sxiv. This tool is highly customizable, almost
+      all of the variables in this tool can be changed using the commandline
+      flags or you can configure them using environment variables.
+    '';
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.erictapen ];
+    mainProgram = "fontpreview";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/formatter/default.nix b/nixpkgs/pkgs/applications/misc/formatter/default.nix
new file mode 100644
index 000000000000..f53ea0f030ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/formatter/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv
+, fetchFromGitHub
+, nix-update-script
+, meson
+, ninja
+, vala
+, pkg-config
+, pantheon
+, python3
+, substituteAll
+, glib
+, gtk3
+, dosfstools
+, e2fsprogs
+, exfat
+, hfsprogs
+, ntfs3g
+, libgee
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "formatter";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "Djaler";
+    repo = "Formatter";
+    rev = version;
+    sha256 = "sha256-8lZ0jUwHuc3Kntz73Btj6dJvkW2bvShu2KWTSQszbJo=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      ext4 = "${e2fsprogs}/bin/mkfs.ext4";
+      exfat = "${exfat}/bin/mkfs.exfat";
+      fat = "${dosfstools}/bin/mkfs.fat";
+      ntfs = "${ntfs3g}/bin/mkfs.ntfs";
+      hfsplus = "${hfsprogs}/bin/mkfs.hfsplus";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    vala
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    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 formatter designed for elementary OS";
+    homepage = "https://github.com/Djaler/Formatter";
+    maintainers = with maintainers; [ xiorcale ] ++ teams.pantheon.members;
+    platforms = platforms.linux;
+    license = licenses.lgpl2Plus;
+    mainProgram = "com.github.djaler.formatter";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/formatter/fix-paths.patch b/nixpkgs/pkgs/applications/misc/formatter/fix-paths.patch
new file mode 100644
index 000000000000..67c1d2b43ccc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/formatter/fix-paths.patch
@@ -0,0 +1,53 @@
+diff --git a/src/Objects/DeviceFormatter.vala b/src/Objects/DeviceFormatter.vala
+index cf6a3b8..0de10a9 100644
+--- a/src/Objects/DeviceFormatter.vala
++++ b/src/Objects/DeviceFormatter.vala
+@@ -62,42 +62,42 @@ namespace Formatter {
+             string drive_identifier = drive.get_identifier ("unix-device");
+             switch (filesystem) {
+                 case Formatter.Filesystems.EXT4:
+-                    spawn_args = {"pkexec", "mkfs.ext4", drive_identifier, "-F"};
++                    spawn_args = {"pkexec", "@ext4@", drive_identifier, "-F"};
+                     if (label != "") {
+                         spawn_args += "-L";
+                         spawn_args += label;
+                     }
+                     break;
+                 case Formatter.Filesystems.EXFAT:
+-                    spawn_args = {"pkexec", "mkfs.exfat", drive_identifier};
++                    spawn_args = {"pkexec", "@exfat@", drive_identifier};
+                     if (label != "") {
+                         spawn_args += "-n";
+                         spawn_args += label;
+                     }
+                     break;
+                 case Formatter.Filesystems.FAT16:
+-                    spawn_args = {"pkexec", "mkfs.fat", "-F16", "-I", drive_identifier};
++                    spawn_args = {"pkexec", "@fat@", "-F16", "-I", drive_identifier};
+                     if (label != "") {
+                         spawn_args += "-n";
+                         spawn_args += label;
+                     }
+                     break;
+                 case Formatter.Filesystems.FAT32:
+-                    spawn_args = {"pkexec", "mkfs.fat", "-F32", "-I", drive_identifier};
++                    spawn_args = {"pkexec", "@fat@", "-F32", "-I", drive_identifier};
+                     if (label != "") {
+                         spawn_args += "-n";
+                         spawn_args += label;
+                     }
+                     break;
+                 case Formatter.Filesystems.NTFS:
+-                    spawn_args = {"pkexec", "mkfs.ntfs", drive_identifier, "-f", "-F"};
++                    spawn_args = {"pkexec", "@ntfs@", drive_identifier, "-f", "-F"};
+                     if (label != "") {
+                         spawn_args += "-L";
+                         spawn_args += label;
+                     }
+                     break;
+                 case Formatter.Filesystems.HFS_PLUS:
+-                    spawn_args = {"pkexec", "mkfs.hfsplus", drive_identifier};
++                    spawn_args = {"pkexec", "@hfsplus@", drive_identifier};
+                     if (label != "") {
+                         spawn_args += "-v";
+                         spawn_args += label;
diff --git a/nixpkgs/pkgs/applications/misc/foxtrotgps/default.nix b/nixpkgs/pkgs/applications/misc/foxtrotgps/default.nix
new file mode 100644
index 000000000000..745a2357e236
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/foxtrotgps/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, fetchbzr, autoreconfHook, texinfo, help2man, imagemagick, pkg-config
+, curl, gnome2, gpsd, gtk2, wrapGAppsHook
+, intltool, libexif, python3Packages, sqlite }:
+
+let
+  srcs = {
+    foxtrot = fetchbzr {
+      url = "lp:foxtrotgps";
+      rev = "331";
+      sha256 = "sha256-/kJv6a3MzAzzwIl98Mqi7jrUJC1kDvouigf9kGtv868=";
+    };
+    screenshots = fetchbzr {
+      url = "lp:foxtrotgps/screenshots";
+      rev = "2";
+      sha256 = "1sgysn3dhfhrv7rj7wf8f2119vmhc1s1zzsp4r3nlrr45d20wmsv";
+    };
+  };
+in stdenv.mkDerivation rec {
+  pname = "foxtrotgps";
+  version = "1.2.2+331";
+
+  # Pull directly from bzr because gpsd API version 9 is not supported on latest release
+  src = srcs.foxtrot;
+
+  nativeBuildInputs = [
+    pkg-config autoreconfHook texinfo help2man
+    imagemagick wrapGAppsHook intltool
+  ];
+
+  buildInputs = [
+    curl.dev
+    gnome2.libglade.dev
+    gpsd
+    gtk2.dev
+    libexif
+    sqlite.dev
+    (python3Packages.python.withPackages (pythonPackages: with python3Packages;
+    [ beautifulsoup4 feedparser sqlalchemy ]))
+  ];
+
+  postUnpack = ''
+    cp -R ${srcs.screenshots} $sourceRoot/doc/screenshots
+    chmod -R u+w $sourceRoot/doc/screenshots
+  '';
+
+  # Remove when foxtrotgps supports gpsd 3.23.1
+  # Patch for compatibility with gpsd 3.23.1. This was added for foxtrotgps
+  # 1.2.2+331. The command can be removed if the build of a newer version
+  # succeeds without it.
+  postPatch = ''
+    substituteInPlace src/gps_functions.c --replace "STATUS_NO_FIX" "STATUS_UNK"
+  '';
+
+  preConfigure = ''
+    intltoolize --automake --copy --force
+  '';
+
+  meta = with lib; {
+    description = "GPS/GIS application optimized for small screens";
+    longDescription = ''
+      An easy to use, free & open-source GPS/GIS application that works well on
+      small screens, and is especially suited to touch input. It spun off of
+      tangoGPS in 2010 with a focus on cooperation and fostering community
+      innovation.
+    '';
+    homepage = "https://www.foxtrotgps.org/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ wucke13 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/freemind/default.nix b/nixpkgs/pkgs/applications/misc/freemind/default.nix
new file mode 100644
index 000000000000..ff84ecdf55f0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/freemind/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, jdk, jre, ant }:
+
+stdenv.mkDerivation rec {
+  pname = "freemind";
+  version = "1.0.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/freemind/freemind-src-${version}.tar.gz";
+    sha256 = "06c6pm7hpwh9hbmyah3lj2wp1g957x8znfwc5cwygsi7dc98b0h1";
+  };
+
+  buildInputs = [ jdk ant ];
+
+  preConfigure = ''
+    chmod +x check_for_duplicate_resources.sh
+    sed 's,/bin/bash,${stdenv.shell},' -i check_for_duplicate_resources.sh
+
+    ## work around javac encoding errors
+    export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
+  '';
+
+  buildPhase = "ant dist";
+
+  installPhase = ''
+    mkdir -p $out/{bin,nix-support}
+    cp -r ../bin/dist $out/nix-support
+    sed -i 's/which/type -p/' $out/nix-support/dist/freemind.sh
+
+    cat >$out/bin/freemind <<EOF
+    #! ${stdenv.shell}
+    JAVA_HOME=${jre} $out/nix-support/dist/freemind.sh
+    EOF
+    chmod +x $out/{bin/freemind,nix-support/dist/freemind.sh}
+  '';
+
+  meta = with lib; {
+    description = "Mind-mapping software";
+    homepage = "https://freemind.sourceforge.net/wiki/index.php/Main_Page";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/freeplane/default.nix b/nixpkgs/pkgs/applications/misc/freeplane/default.nix
new file mode 100644
index 000000000000..77918baff376
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/freeplane/default.nix
@@ -0,0 +1,152 @@
+{ stdenv
+, lib
+, fetchpatch
+, fetchFromGitHub
+, makeWrapper
+, makeDesktopItem
+, writeText
+, runtimeShell
+, jdk17
+, perl
+, gradle_7
+, which
+}:
+
+let
+  pname = "freeplane";
+  version = "1.11.8";
+
+  src_hash = "sha256-Qh2V265FvQpqGKmPsiswnC5yECwIcNwMI3/Ka9sBqXE=";
+  deps_outputHash = "sha256-2Zaw4FW12dThdr082dEB1EYkGwNiayz501wIPGXUfBw=";
+
+  jdk = jdk17;
+  gradle = gradle_7;
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "release-${version}";
+    hash = src_hash;
+  };
+
+  deps = stdenv.mkDerivation {
+    pname = "${pname}-deps";
+    inherit src version;
+
+    nativeBuildInputs = [
+      jdk
+      perl
+      gradle
+    ];
+
+    buildPhase = ''
+      GRADLE_USER_HOME=$PWD gradle -Dorg.gradle.java.home=${jdk} --no-daemon build
+    '';
+
+    # Mavenize dependency paths
+    # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar
+    installPhase = ''
+      find ./caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \
+        | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \
+        | sh
+      # com/squareup/okio/okio/2.10.0/okio-jvm-2.10.0.jar expected to exist under name okio-2.10.0.jar
+      while IFS="" read -r -d "" path; do
+        dir=''${path%/*}; file=''${path##*/}; dest=''${file//-jvm-/-}
+        [[ -e $dir/$dest ]] && continue
+        ln -s "$dir/$file" "$dir/$dest"
+      done < <(find "$out" -type f -name 'okio-jvm-*.jar' -print0)
+    '';
+    # otherwise the package with a namespace starting with info/... gets moved to share/info/...
+    forceShare = [ "dummy" ];
+
+    outputHashAlgo = "sha256";
+    outputHashMode = "recursive";
+    outputHash = deps_outputHash;
+  };
+
+  # Point to our local deps repo
+  gradleInit = writeText "init.gradle" ''
+    settingsEvaluated { settings ->
+      settings.pluginManagement {
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+    gradle.projectsLoaded {
+      rootProject.allprojects {
+        repositories {
+          clear()
+          maven { url '${deps}' }
+        }
+      }
+    }
+  '';
+
+in stdenv.mkDerivation rec {
+  inherit pname version src;
+
+  nativeBuildInputs = [
+    makeWrapper
+    jdk
+    gradle
+  ];
+
+  buildPhase = ''
+    mkdir -p freeplane/build
+
+    GRADLE_USER_HOME=$PWD \
+      gradle -Dorg.gradle.java.home=${jdk} \
+      --no-daemon --offline --init-script ${gradleInit} \
+      -x test \
+      build
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "freeplane";
+      desktopName = "freeplane";
+      genericName = "Mind-mapper";
+      exec = "freeplane";
+      icon = "freeplane";
+      comment = meta.description;
+      mimeTypes = [
+        "application/x-freemind"
+        "application/x-freeplane"
+        "text/x-troff-mm"
+      ];
+      categories = [
+        "2DGraphics"
+        "Chart"
+        "Graphics"
+        "Office"
+      ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share
+    cp -a ./BIN/. $out/share/freeplane
+
+    makeWrapper $out/share/freeplane/freeplane.sh $out/bin/freeplane \
+      --set FREEPLANE_BASE_DIR $out/share/freeplane \
+      --set JAVA_HOME ${jdk} \
+      --prefix PATH : ${lib.makeBinPath [ jdk which ]} \
+      --prefix _JAVA_AWT_WM_NONREPARENTING : 1 \
+      --prefix _JAVA_OPTIONS : "-Dawt.useSystemAAFontSettings=on"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Mind-mapping software";
+    homepage = "https://freeplane.org/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ chaduffy ];
+    mainProgram = "freeplane";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fspy/default.nix b/nixpkgs/pkgs/applications/misc/fspy/default.nix
new file mode 100644
index 000000000000..d2384446ed3c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fspy/default.nix
@@ -0,0 +1,26 @@
+{ appimageTools, lib, fetchurl }:
+let
+  pname = "fspy";
+  version = "1.0.3";
+
+  src = fetchurl {
+    url = "https://github.com/stuffmatic/fSpy/releases/download/v${version}/${pname}-${version}-x86_64.AppImage";
+    sha256 = "sha256-L+qsSExuEkzZkjnV/J6rrZ3BXqWQd+IfsN6a3kvQF3A=";
+  };
+
+in appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    description = "A cross platform app for quick and easy still image camera matching";
+    license = licenses.gpl3;
+    homepage = "https://fspy.io/";
+    maintainers = with maintainers; [ polygon ];
+    platforms = platforms.linux;
+    mainProgram = "fspy";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fsv/default.nix b/nixpkgs/pkgs/applications/misc/fsv/default.nix
new file mode 100644
index 000000000000..e49610116f71
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fsv/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, cglm
+, gtk3
+, libepoxy
+, libGLU
+}:
+
+stdenv.mkDerivation rec {
+  pname   = "fsv";
+  version = "3.0";
+
+  src = fetchFromGitHub {
+    owner = "jabl";
+    repo  = "fsv";
+    rev   = "${pname}-${version}";
+    hash  = "sha256-fxsA3qcBPvK4H5P4juGTe6eg1lkygvzFpNW36B9lsE4=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    cglm
+    gtk3
+    libepoxy
+    libGLU
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp src/fsv $out/bin/fsv
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description     = "File system visualizer in cyberspace";
+    longDescription = ''
+      fsv (pronounced eff-ess-vee) is a file system visualizer in cyberspace.
+      It lays out files and directories in three dimensions, geometrically
+      representing the file system hierarchy to allow visual overview
+      and analysis. fsv can visualize a modest home directory, a workstation's
+      hard drive, or any arbitrarily large collection of files, limited only
+      by the host computer's memory and graphics hardware.
+    '';
+    homepage    = "https://github.com/jabl/fsv";
+    license     = licenses.lgpl2;
+    platforms   = platforms.linux;
+    maintainers = with maintainers; [ rnhmjoj ];
+    mainProgram = "fsv";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/furtherance/default.nix b/nixpkgs/pkgs/applications/misc/furtherance/default.nix
new file mode 100644
index 000000000000..f6fea4c633d0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/furtherance/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform
+, appstream-glib, cargo, desktop-file-utils, glib, libadwaita, meson, ninja
+, pkg-config, rustc, wrapGAppsHook4
+, dbus, gtk4, sqlite
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "furtherance";
+  version = "1.8.3";
+
+  src = fetchFromGitHub {
+    owner = "lakoliu";
+    repo = "Furtherance";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-TxYARpCqqjjwinoRU2Wjihp+FYIvcI0YCGlOuumX6To=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit (finalAttrs) src;
+    name = "${finalAttrs.pname}-${finalAttrs.version}";
+    hash = "sha256-VGBxBHs/kqW0mvOiz0UQRg0duDmW8ee9cSh6EOT9aaY=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    dbus
+    glib
+    gtk4
+    libadwaita
+    sqlite
+  ];
+
+  meta = with lib; {
+    description = "Track your time without being tracked";
+    homepage = "https://github.com/lakoliu/Furtherance";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ CaptainJawZ ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/fusee-interfacee-tk/default.nix b/nixpkgs/pkgs/applications/misc/fusee-interfacee-tk/default.nix
new file mode 100644
index 000000000000..813b8113ee30
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fusee-interfacee-tk/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv , fetchFromGitHub , python3 , makeWrapper }:
+
+let pythonEnv = python3.withPackages(ps: [ ps.tkinter ps.pyusb ]);
+in stdenv.mkDerivation rec {
+  pname = "fusee-interfacee-tk";
+  version = "1.0.1";
+
+  src = fetchFromGitHub {
+    owner = "nh-server";
+    repo = pname;
+    rev = "V${version}";
+    sha256 = "0ngwbwsj999flprv14xvhk7lp51nprrvcnlbnbk6y4qx5casm5md";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ pythonEnv ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+
+    # The program isn't just called app, so I'm renaming it based on the repo name
+    # It also isn't a standard program, so we need to append the shebang to the top
+    echo "#!${pythonEnv.interpreter}" > $out/bin/fusee-interfacee-tk
+    cat app.py >> $out/bin/fusee-interfacee-tk
+    chmod +x $out/bin/fusee-interfacee-tk
+
+    # app.py depends on these to run
+    cp *.py $out/bin/
+    cp intermezzo.bin $out/bin/intermezzo.bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/nh-server/fusee-interfacee-tk";
+    description = "A tool to send .bin files to a Nintendo Switch in RCM mode";
+    longDescription = "A mod of falquinhos Fusée Launcher for use with Nintendo Homebrew Switch Guide. It also adds the ability to mount SD while in RCM.
+    Must be run as sudo.";
+    maintainers = with maintainers; [ kristian-brucaj ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/fuzzel/default.nix b/nixpkgs/pkgs/applications/misc/fuzzel/default.nix
new file mode 100644
index 000000000000..496ef38626bc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/fuzzel/default.nix
@@ -0,0 +1,76 @@
+{ stdenv
+, lib
+, fetchFromGitea
+, pkg-config
+, meson
+, ninja
+, wayland-scanner
+, wayland
+, pixman
+, wayland-protocols
+, libxkbcommon
+, scdoc
+, tllist
+, fcft
+, enableCairo ? true
+, svgSupport ? true
+, pngSupport ? true
+# Optional dependencies
+, cairo
+, libpng
+}:
+
+assert svgSupport -> enableCairo;
+
+stdenv.mkDerivation rec {
+  pname = "fuzzel";
+  version = "1.9.2";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "dnkl";
+    repo = pname;
+    rev = version;
+    hash = "sha256-X1P/ghX97KCQcrNk44Cy2IAGuZ8DDwHBWzh1AHLDvd4=";
+  };
+
+  depsBuildBuild = [
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    wayland-scanner
+    meson
+    ninja
+    scdoc
+  ];
+
+  buildInputs = [
+    wayland
+    pixman
+    wayland-protocols
+    libxkbcommon
+    tllist
+    fcft
+  ] ++ lib.optional enableCairo cairo
+    ++ lib.optional pngSupport libpng;
+
+  mesonBuildType = "release";
+
+  mesonFlags = [
+    "-Denable-cairo=${if enableCairo then "enabled" else "disabled"}"
+    "-Dpng-backend=${if pngSupport then "libpng" else "none"}"
+    "-Dsvg-backend=${if svgSupport then "nanosvg" else "none"}"
+  ];
+
+  meta = with lib; {
+    changelog = "https://codeberg.org/dnkl/fuzzel/releases/tag/${version}";
+    description = "Wayland-native application launcher, similar to rofi’s drun mode";
+    homepage = "https://codeberg.org/dnkl/fuzzel";
+    license = with licenses; [ mit zlib ];
+    mainProgram = "fuzzel";
+    maintainers = with maintainers; [ fionera polykernel rodrgz ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gImageReader/default.nix b/nixpkgs/pkgs/applications/misc/gImageReader/default.nix
new file mode 100644
index 000000000000..04efe6f52dcd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gImageReader/default.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, libuuid
+, sane-backends, podofo, libjpeg, djvulibre, libxmlxx3, libzip, tesseract
+, intltool, poppler, json-glib
+, ninja
+, python3
+
+# Gtk deps
+# upstream gImagereader supports Qt too
+, gobject-introspection, wrapGAppsHook
+, gtkmm3, gtksourceview3, gtksourceviewmm, gtkspell3, gtkspellmm, cairomm
+}:
+
+let
+  variant = "gtk";
+  pythonEnv = python3.withPackages( ps: with ps;[ pygobject3 ] );
+in
+stdenv.mkDerivation rec {
+  pname = "gImageReader";
+  version = "3.4.2";
+
+  src = fetchFromGitHub {
+    owner= "manisandro";
+    repo = "gImageReader";
+    rev = "v${version}";
+    sha256 = "sha256-yBkVeufRRoSAc20/8mV39widBPloHFz12K7B4Y9xiWg=";
+  };
+
+  nativeBuildInputs = [
+    cmake ninja
+    intltool
+    pkg-config
+    pythonEnv
+
+    # Gtk specific
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    libxmlxx3
+    libzip
+    libuuid
+    sane-backends
+    podofo
+    libjpeg
+    djvulibre
+    tesseract
+    poppler
+
+    # Gtk specific
+    gtkmm3
+    gtkspell3
+    gtkspellmm
+    gtksourceview3
+    gtksourceviewmm
+    cairomm
+    json-glib
+  ];
+
+  # interface type can be where <type> is either gtk, qt5, qt4
+  cmakeFlags = [ "-DINTERFACE_TYPE=${variant}" ];
+
+  meta = with lib; {
+    description = "A simple Gtk/Qt front-end to tesseract-ocr";
+    homepage = "https://github.com/manisandro/gImageReader";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [teto];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/galculator/default.nix b/nixpkgs/pkgs/applications/misc/galculator/default.nix
new file mode 100644
index 000000000000..9128906fe9c5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/galculator/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, autoreconfHook, intltool
+, gtk, pkg-config, flex }:
+
+stdenv.mkDerivation rec {
+  pname = "galculator";
+  version = "2.1.4";
+
+  src = fetchFromGitHub {
+    owner = "galculator";
+    repo = "galculator";
+    rev = "v${version}";
+    sha256 = "0q0hb62f266709ncyq96bpx4a40a1i6dc5869byvd7x285sx1c2w";
+  };
+
+  patches = [
+    # Pul patch pending upstream inclusion for -fno-common toolchain support:
+    #   https://github.com/galculator/galculator/pull/45
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/galculator/galculator/commit/501a9e3feeb2e56889c0ff98ab6d0ab20348ccd6.patch";
+      sha256 = "08c9d2b49a1mizgk7v37dp8r96x389zc13mzv4dcy16x448lhp67";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook intltool pkg-config ];
+  buildInputs = [ gtk flex ];
+
+  meta = with lib; {
+    description = "A GTK 2/3 algebraic and RPN calculator";
+    longDescription = ''
+      galculator is a GTK 2 / GTK 3 based calculator. Its main features include:
+
+      - Algebraic, RPN (Reverse Polish Notation), Formula Entry and Paper modes;
+      - Basic and Scientific Modes
+      - Decimal, hexadecimal, octal and binary number base
+      - Radiant, degree and grad support
+      - User defined constants and functions
+      - A bunch of common functions
+      - Binary arithmetic of configurable bit length and signedness
+      - Quad-precision floating point arithmetic, and 112-bit binary arithmetic
+    '';
+    homepage = "http://galculator.sourceforge.net/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.linux;
+    mainProgram = "galculator";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gallery-dl/default.nix b/nixpkgs/pkgs/applications/misc/gallery-dl/default.nix
new file mode 100644
index 000000000000..09c0cdd0d1c4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gallery-dl/default.nix
@@ -0,0 +1,44 @@
+{ lib, buildPythonApplication, fetchPypi, requests, yt-dlp, pytestCheckHook }:
+
+buildPythonApplication rec {
+  pname = "gallery-dl";
+  version = "1.26.8";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "gallery_dl";
+    sha256 = "sha256-tfNmKgWKr2TGQNgvC/qo2+Dvij4LUL0Zy77mfTcci2k=";
+  };
+
+  propagatedBuildInputs = [
+    requests
+    yt-dlp
+  ];
+
+  nativeCheckInputs = [
+    pytestCheckHook
+  ];
+
+  pytestFlagsArray = [
+    # requires network access
+    "--ignore=test/test_results.py"
+    "--ignore=test/test_downloader.py"
+
+    # incompatible with pytestCheckHook
+    "--ignore=test/test_ytdl.py"
+  ];
+
+  pythonImportsCheck = [
+    "gallery_dl"
+  ];
+
+  meta = with lib; {
+    description = "Command-line program to download image-galleries and -collections from several image hosting sites";
+    homepage = "https://github.com/mikf/gallery-dl";
+    changelog = "https://github.com/mikf/gallery-dl/blob/v${version}/CHANGELOG.md";
+    license = licenses.gpl2Only;
+    mainProgram = "gallery-dl";
+    maintainers = with maintainers; [ dawidsowa marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gammu/bashcomp-dir.patch b/nixpkgs/pkgs/applications/misc/gammu/bashcomp-dir.patch
new file mode 100644
index 000000000000..de402595cd38
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gammu/bashcomp-dir.patch
@@ -0,0 +1,11 @@
+--- a/contrib/CMakeLists.txt
++++ b/contrib/CMakeLists.txt
+@@ -85,7 +85,7 @@ endif (INSTALL_PHP_EXAMPLES)
+ if (INSTALL_BASH_COMPLETION)
+     macro_optional_find_package (BashCompletion)
+     if (NOT BASH_COMPLETION_FOUND)
+-      set (BASH_COMPLETION_COMPLETIONSDIR "/etc/bash_completion.d" CACHE PATH "Location of bash_completion.d")
++      set (BASH_COMPLETION_COMPLETIONSDIR "${CMAKE_INSTALL_PREFIX}/share/bash-completion/completions" CACHE PATH "Location of bash_completion.d")
+     endif (NOT BASH_COMPLETION_FOUND)
+     install (
+         FILES bash-completion/gammu
diff --git a/nixpkgs/pkgs/applications/misc/gammu/default.nix b/nixpkgs/pkgs/applications/misc/gammu/default.nix
new file mode 100644
index 000000000000..78d5e010213c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gammu/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, substituteAll, pkg-config, cmake, bluez, libusb1, curl
+, libiconv, gettext, sqlite, bash, dialog
+, dbiSupport ? false, libdbi ? null, libdbiDrivers ? null
+, postgresSupport ? false, postgresql ? null
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gammu";
+  version = "1.42.0";
+
+  src = fetchFromGitHub {
+    owner = "gammu";
+    repo = "gammu";
+    rev = version;
+    sha256 = "sha256-aeaGHVxOMiXRU6RHws+oAnzdO9RY1jw/X/xuGfSt76I=";
+  };
+
+  patches = [
+    ./bashcomp-dir.patch
+    ./systemd.patch
+    (substituteAll {
+      src = ./gammu-config-dialog.patch;
+      dialog = "${dialog}/bin/dialog";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config cmake ];
+
+  strictDeps = true;
+
+  buildInputs = [ bash bluez libusb1 curl gettext sqlite libiconv ]
+  ++ lib.optionals dbiSupport [ libdbi libdbiDrivers ]
+  ++ lib.optionals postgresSupport [ postgresql ];
+
+  meta = with lib; {
+    homepage = "https://wammu.eu/gammu/";
+    description = "Command line utility and library to control mobile phones";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.coroa ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gammu/gammu-config-dialog.patch b/nixpkgs/pkgs/applications/misc/gammu/gammu-config-dialog.patch
new file mode 100644
index 000000000000..f9f76bfec00b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gammu/gammu-config-dialog.patch
@@ -0,0 +1,20 @@
+--- a/utils/gammu-config
++++ b/utils/gammu-config
+@@ -59,16 +59,7 @@
+     shift
+ done
+ 
+-if type dialog > /dev/null 2>&1 ; then
+-    DIALOG=dialog
+-elif type cdialog > /dev/null 2>&1 ; then
+-    DIALOG=cdialog
+-elif type whiptail > /dev/null 2>&1 ; then
+-    DIALOG=whiptail
+-else
+-    echo "You need dialog, cdialog or whiptail installed to make this work"
+-    exit 1
+-fi
++DIALOG=@dialog@
+ 
+ if [ -f "$CONFIG" ] ; then
+     if [ ! -w "$CONFIG" ] ; then
diff --git a/nixpkgs/pkgs/applications/misc/gammu/systemd.patch b/nixpkgs/pkgs/applications/misc/gammu/systemd.patch
new file mode 100644
index 000000000000..315fd64a3b52
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gammu/systemd.patch
@@ -0,0 +1,30 @@
+diff --git a/cmake/templates/gammu.spec.in b/cmake/templates/gammu.spec.in
+index 25c08b3d6..86f72d8c7 100644
+--- a/cmake/templates/gammu.spec.in
++++ b/cmake/templates/gammu.spec.in
+@@ -386,9 +386,9 @@ fi
+ %doc %{_mandir}/man7/gammu-smsd-run.7*
+ %doc %{_mandir}/man7/gammu-smsd-sql.7*
+ %doc %{_mandir}/man7/gammu-smsd-tables.7*
+-%dir %{_libexecdir}/systemd
+-%dir %{_libexecdir}/systemd/system
+-%{_libexecdir}/systemd/system/gammu-smsd.service
++%dir %{_prefix}/systemd
++%dir %{_prefix}/systemd/system
++%{_prefix}/systemd/system/gammu-smsd.service
+ 
+ %files -n libGammu%{so_ver} -f libgammu.lang
+ %defattr(-,root,root,-)
+diff --git a/contrib/CMakeLists.txt b/contrib/CMakeLists.txt
+index 378411086..b871e6525 100644
+--- a/contrib/CMakeLists.txt
++++ b/contrib/CMakeLists.txt
+@@ -100,7 +100,7 @@ if (WITH_SYSTEMD)
+     configure_file( init/gammu-smsd.service init/gammu-smsd.service )
+     install (
+         FILES ${CMAKE_CURRENT_BINARY_DIR}/init/gammu-smsd.service
+-        DESTINATION "${SYSTEMD_SERVICES_INSTALL_DIR}"
++        DESTINATION "${CMAKE_INSTALL_PREFIX}/systemd"
+         COMPONENT "systemd"
+     )
+ endif (WITH_SYSTEMD)
diff --git a/nixpkgs/pkgs/applications/misc/ganttproject-bin/default.nix b/nixpkgs/pkgs/applications/misc/ganttproject-bin/default.nix
new file mode 100644
index 000000000000..abf63bece807
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ganttproject-bin/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchzip, makeDesktopItem, makeWrapper
+, jre
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ganttproject-bin";
+  version = "3.3.3300";
+
+  src = fetchzip {
+    url = "https://dl.ganttproject.biz/ganttproject-${version}/ganttproject-${version}.zip";
+    stripRoot = false;
+    hash = "sha256-U9x64UIBuVtW44zbsdWuMRZyEJhZ8VUWbDVtapTGPMo=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  installPhase = let
+
+    desktopItem = makeDesktopItem {
+      name = "ganttproject";
+      exec = "ganttproject";
+      icon = "ganttproject";
+      desktopName = "GanttProject";
+      genericName = "Shedule and manage projects";
+      comment = meta.description;
+      categories = [ "Office" ];
+    };
+
+    javaOptions = [
+      "-Dawt.useSystemAAFontSettings=on"
+    ];
+
+  in ''
+    mkdir -pv "$out/share/ganttproject"
+    cp -rv *  "$out/share/ganttproject"
+
+    mkdir -pv "$out/bin"
+    wrapProgram "$out/share/ganttproject/ganttproject" \
+      --set JAVA_HOME "${jre}" \
+      --set _JAVA_OPTIONS "${builtins.toString javaOptions}"
+
+    mv -v "$out/share/ganttproject/ganttproject" "$out/bin"
+
+    cp -rv "${desktopItem}/share/applications" "$out/share"
+  '';
+
+  meta = with lib; {
+    description = "Project scheduling and management";
+    homepage = "https://www.ganttproject.biz/";
+    downloadPage = "https://www.ganttproject.biz/download";
+    # GanttProject itself is GPL3+. All bundled libraries are declared
+    # ‘GPL3-compatible’. See ${downloadPage} for detailed information.
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.vidbina ];
+    mainProgram = "ganttproject";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gcal/default.nix b/nixpkgs/pkgs/applications/misc/gcal/default.nix
new file mode 100644
index 000000000000..a6b98ccccf08
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gcal/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, ncurses, gettext, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "gcal";
+  version = "4.1";
+
+  src = fetchurl {
+    url = "mirror://gnu/gcal/${pname}-${version}.tar.xz";
+    sha256 = "1av11zkfirbixn05hyq4xvilin0ncddfjqzc4zd9pviyp506rdci";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://src.fedoraproject.org/rpms/gcal/raw/master/f/gcal-glibc-no-libio.patch";
+      sha256 = "0l4nw9kgzsay32rsdwvs75pbp4fhx6pfm85paynfbd20cdm2n2kv";
+    })
+  ];
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-implicit-function-declaration";
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ ncurses ] ++ lib.optional stdenv.isDarwin gettext;
+
+  meta = {
+    description = "Program for calculating and printing calendars";
+    longDescription = ''
+      Gcal is the GNU version of the trusty old cal(1). Gcal is a
+      program for calculating and printing calendars. Gcal displays
+      hybrid and proleptic Julian and Gregorian calendar sheets.  It
+      also displays holiday lists for many countries around the globe.
+    '';
+    homepage = "https://www.gnu.org/software/gcal/";
+    license = lib.licenses.gpl3Plus;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gcalcli/default.nix b/nixpkgs/pkgs/applications/misc/gcalcli/default.nix
new file mode 100644
index 000000000000..90b4883ec290
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gcalcli/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, lib, fetchFromGitHub, python3
+, libnotify ? null }:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "gcalcli";
+  version = "4.3.0";
+
+  src = fetchFromGitHub {
+    owner  = "insanum";
+    repo   = pname;
+    rev    = "v${version}";
+    sha256 = "0s5fhcmz3n0dwh3vkqr4aigi59q43v03ch5jhh6v75149icwr0df";
+  };
+
+  postPatch = lib.optionalString stdenv.isLinux ''
+    substituteInPlace gcalcli/argparsers.py \
+      --replace "'notify-send" "'${libnotify}/bin/notify-send"
+  '';
+
+  propagatedBuildInputs = [
+    python-dateutil gflags httplib2 parsedatetime six vobject
+    google-api-python-client oauth2client uritemplate
+    libnotify
+  ];
+
+  # There are no tests as of 4.0.0a4
+  doCheck = false;
+
+  meta = with lib; {
+    description = "CLI for Google Calendar";
+    homepage = "https://github.com/insanum/gcalcli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nocoolnametom ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gcfflasher/default.nix b/nixpkgs/pkgs/applications/misc/gcfflasher/default.nix
new file mode 100644
index 000000000000..b9a49e172329
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gcfflasher/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, libgpiod
+, cmake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gcfflasher";
+  version = "4.4.0";
+
+  src = fetchFromGitHub {
+    owner = "dresden-elektronik";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-o0S4NtgQ/Rlpmkk8pTocmP0N+5F7BX8lUsczOKjujwk=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    libgpiod
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm0755 GCFFlasher $out/bin/GCFFlasher
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "CFFlasher is the tool to program the firmware of dresden elektronik's Zigbee products";
+    license = licenses.bsd3;
+    homepage = "https://github.com/dresden-elektronik/gcfflasher";
+    maintainers = with maintainers; [ fleaz ];
+    platforms = platforms.all;
+    mainProgram = "GCFFlasher";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gcstar/default.nix b/nixpkgs/pkgs/applications/misc/gcstar/default.nix
new file mode 100644
index 000000000000..4a6b45469d27
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gcstar/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv
+, fetchFromGitLab
+, perlPackages
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gcstar";
+  version = "1.8.0";
+
+  src = fetchFromGitLab {
+    owner = "Kerenoc";
+    repo = "GCstar";
+    rev = "v${version}";
+    sha256 = "sha256-37yjKI4l/nUzDnra1AGxDQxNafMsLi1bSifG6pz33zg=";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+
+  buildInputs = with perlPackages; [
+    perl
+    ArchiveZip
+    DateCalc
+    DateTimeFormatStrptime
+    Glib
+    Gtk3
+    Gtk3SimpleList
+    GD
+    GDGraph
+    GDText
+    HTMLParser
+    JSON
+    ImageExifTool
+    librelative
+    LWP
+    LWPProtocolHttps
+    MP3Info
+    MP3Tag
+    NetFreeDB
+    OggVorbisHeaderPurePerl
+    Pango
+    XMLSimple
+    XMLParser
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    cd gcstar
+    perl install --text --prefix=$out
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/gcstar --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/Kerenoc/GCstar";
+    description = "Manage your collections of movies, games, books, music and more";
+    longDescription = ''
+      GCstar is an application for managing your collections.
+      It supports many types of collections, including movies, books, games, comics, stamps, coins, and many more.
+      You can even create your own collection type for whatever unique thing it is that you collect!
+      Detailed information on each item can be automatically retrieved from the internet and you can store additional data, such as the location or who you've lent it to.
+      You may also search and filter your collections by many criteria.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dasj19 ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/geek-life/default.nix b/nixpkgs/pkgs/applications/misc/geek-life/default.nix
new file mode 100644
index 000000000000..0e8e3899bb2a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/geek-life/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "geek-life";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "ajaxray";
+    repo = "geek-life";
+    rev = "v${version}";
+    sha256 = "sha256-7B/4pDOVXef2MaWKvzkUZH0/KM/O1gJjI3xPjEXqc/E=";
+  };
+
+  vendorHash = "sha256-U80Yb8YXKQ8KJf+FxkC0EIUFKP4PKAFRtKTCvXSc0WI=";
+
+  postInstall = ''
+    mv $out/bin/app $out/bin/geek-life
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ajaxray/geek-life";
+    description = "The Todo List / Task Manager for Geeks in command line";
+    maintainers = with maintainers; [ noisersup ];
+    license = licenses.mit;
+    mainProgram = "geek-life";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/genact/default.nix b/nixpkgs/pkgs/applications/misc/genact/default.nix
new file mode 100644
index 000000000000..1d5c11063c00
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/genact/default.nix
@@ -0,0 +1,36 @@
+{ lib, rustPlatform, fetchFromGitHub, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "genact";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "svenstaro";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-iPDIbfbRNhgmTQHw9gNczXTcUaJ0dQpBDHg5ZOQQJ4M=";
+  };
+
+  cargoHash = "sha256-Hg8Xlcx0j70Z8IwlJPCwm+qhurXjtKGLI3ZUCeHL1KY=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    $out/bin/genact --print-manpage > genact.1
+    installManPage genact.1
+
+    installShellCompletion --cmd genact \
+      --bash <($out/bin/genact --print-completions bash) \
+      --fish <($out/bin/genact --print-completions fish) \
+      --zsh <($out/bin/genact --print-completions zsh)
+  '';
+
+  meta = with lib; {
+    description = "A nonsense activity generator";
+    homepage = "https://github.com/svenstaro/genact";
+    changelog = "https://github.com/svenstaro/genact/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "genact";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/genesys/default.nix b/nixpkgs/pkgs/applications/misc/genesys/default.nix
new file mode 100644
index 000000000000..b7d8c3796dda
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/genesys/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, jre, graphviz, makeWrapper }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "genesys";
+  version = "1.0.7";
+
+  src = fetchurl {
+    url = "https://github.com/mrlem/genesys/releases/download/v${finalAttrs.version}/${finalAttrs.pname}-${finalAttrs.version}.tar.gz";
+    hash = "sha256-I1lEVvwRiGf1f4zUtqKhSb+it/nC8WAmw5S6edquOj8=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # The package is distributed as a prebuilt JAVA binary
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    mv bin lib $out
+    wrapProgram $out/bin/${finalAttrs.pname} \
+      --set JAVA_HOME "${jre.home}" \
+      --prefix PATH : "${graphviz}/bin"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A simple family tree generator that scales";
+    homepage = "https://github.com/mrlem/genesys";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ rogarb ];
+    platforms = lib.platforms.all;
+  };
+})
+
diff --git a/nixpkgs/pkgs/applications/misc/genxword/default.nix b/nixpkgs/pkgs/applications/misc/genxword/default.nix
new file mode 100644
index 000000000000..5ba67ecddcdb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/genxword/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, python3
+, fetchFromGitHub
+, gettext
+, gobject-introspection
+, wrapGAppsHook
+, pango
+, gtksourceview3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "genxword";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "riverrun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "17h8saja45bv612yk0pra9ncbp2mjnx5n10q25nqhl765ks4bmb5";
+  };
+
+  nativeBuildInputs = [
+    gettext
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    pango
+    gtksourceview3
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pycairo
+    pygobject3
+  ];
+
+  # to prevent double wrapping
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  # there are no tests
+  doCheck = false;
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Crossword generator";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/geoipupdate/default.nix b/nixpkgs/pkgs/applications/misc/geoipupdate/default.nix
new file mode 100644
index 000000000000..939205017fe7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/geoipupdate/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "geoipupdate";
+  version = "6.1.0";
+
+  src = fetchFromGitHub {
+    owner = "maxmind";
+    repo = "geoipupdate";
+    rev = "v${version}";
+    sha256 = "sha256-/iLWy3yKO34nnn5ygAewR036PzgUGIqdhXNK4fx3Ym8=";
+  };
+
+  vendorHash = "sha256-jW5/09sOUvPZVM1wzL4xg/a14kZ0KsM8e+zEQoADsl4=";
+
+  ldflags = [ "-X main.version=${version}" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Automatic GeoIP database updater";
+    homepage = "https://github.com/maxmind/geoipupdate";
+    license = with licenses; [ asl20 ];
+    maintainers = teams.helsinki-systems.members;
+    mainProgram = "geoipupdate";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/get_iplayer/default.nix b/nixpkgs/pkgs/applications/misc/get_iplayer/default.nix
new file mode 100644
index 000000000000..12d056b01ec6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/get_iplayer/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, perlPackages
+, fetchFromGitHub
+, makeWrapper
+, stdenv
+, shortenPerlShebang
+, perl
+, atomicparsley
+, ffmpeg
+}:
+
+perlPackages.buildPerlPackage rec {
+  pname = "get_iplayer";
+  version = "3.35";
+
+  src = fetchFromGitHub {
+    owner = "get-iplayer";
+    repo = "get_iplayer";
+    rev = "v${version}";
+    hash = "sha256-fqzrgmtqy7dlmGEaTXAqpdt9HqZCVooJ0Vf6/JUKihw=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ] ++ lib.optional stdenv.isDarwin shortenPerlShebang;
+  buildInputs = [ perl ];
+  propagatedBuildInputs = with perlPackages; [
+    LWP LWPProtocolHttps XMLLibXML Mojolicious
+  ];
+
+  preConfigure = "touch Makefile.PL";
+  doCheck = false;
+  outputs = [ "out" "man" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D get_iplayer -t $out/bin
+    wrapProgram $out/bin/get_iplayer --suffix PATH : ${lib.makeBinPath [ atomicparsley ffmpeg ]} --prefix PERL5LIB : $PERL5LIB
+    install -Dm444 get_iplayer.1 -t $out/share/man/man1
+
+    runHook postInstall
+  '';
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    shortenPerlShebang $out/bin/.get_iplayer-wrapped
+  '';
+
+  meta = with lib; {
+    description = "Downloads TV and radio programmes from BBC iPlayer and BBC Sounds";
+    license = licenses.gpl3Plus;
+    homepage = "https://github.com/get-iplayer/get_iplayer";
+    platforms = platforms.all;
+    maintainers = with maintainers; [ rika chewblacka ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/getxbook/default.nix b/nixpkgs/pkgs/applications/misc/getxbook/default.nix
new file mode 100644
index 000000000000..dd091563fde3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/getxbook/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, openssl }:
+
+stdenv.mkDerivation rec {
+  pname = "getxbook";
+  version = "1.2";
+
+  src = fetchurl {
+    url    = "https://njw.me.uk/getxbook/${pname}-${version}.tar.xz";
+    sha256 = "0ihwrx4gspj8l7fc8vxch6dpjrw1lvv9z3c19f0wxnmnxhv1cjvs";
+  };
+
+  env.NIX_CFLAGS_COMPILE = builtins.toString (
+    [ "-Wno-error=deprecated-declarations" ]
+      ++ lib.optionals (!stdenv.cc.isClang) [
+        "-Wno-error=format-truncation"
+        "-Wno-error=stringop-overflow"
+      ]
+  );
+
+  buildInputs = [ openssl ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A collection of tools to download books from Google Books";
+    homepage    = "https://njw.me.uk/getxbook/";
+    license     = licenses.isc;
+    maintainers = with maintainers; [ obadz ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ghosttohugo/default.nix b/nixpkgs/pkgs/applications/misc/ghosttohugo/default.nix
new file mode 100644
index 000000000000..5ec5cc6870ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ghosttohugo/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ghosttohugo";
+  version = "0.5.3";
+
+  src = fetchFromGitHub {
+    owner = "jbarone";
+    repo = "ghostToHugo";
+    rev = "v${version}";
+    hash = "sha256-lYqjwLPvSX9/HaFvSwtkvxbCToTwfDPeVivNfazZwQA=";
+  };
+
+  vendorHash = "sha256-/7MsVLVek2nQwf8rVJQywBKiIOCGe72L45CkAElXrMo=";
+
+  meta = with lib; {
+    description = "Convert Ghost export to Hugo posts";
+    homepage = "https://github.com/jbarone/ghostToHugo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ clerie ];
+    mainProgram = "ghostToHugo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gimoji/default.nix b/nixpkgs/pkgs/applications/misc/gimoji/default.nix
new file mode 100644
index 000000000000..13d9a94b9873
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gimoji/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "gimoji";
+  version = "0.7.6";
+
+  src = fetchFromGitHub {
+    owner = "zeenix";
+    repo = "gimoji";
+    rev = version;
+    hash = "sha256-ipsEFZGC3JYOeNVI4AUb2c/9tt+TTIbeXuJ15ShEH6U=";
+  };
+
+  cargoHash = "sha256-786OPEaIHQtgUHlkjLprKfJ7VoeSW+IzHto3XXZ6Fu8=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+  ];
+
+  meta = with lib; {
+    description = "Easily add emojis to your git commit messages";
+    homepage = "https://github.com/zeenix/gimoji";
+    license = licenses.mit;
+    mainProgram = "gimoji";
+    maintainers = with maintainers; [ a-kenji ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/girara/default.nix b/nixpkgs/pkgs/applications/misc/girara/default.nix
new file mode 100644
index 000000000000..18cfd01229ae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/girara/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, check
+, dbus
+, xvfb-run
+, glib
+, gtk
+, gettext
+, libiconv
+, json-glib
+, libintl
+, zathura
+}:
+
+stdenv.mkDerivation rec {
+  pname = "girara";
+  version = "0.4.2";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchFromGitLab {
+    domain = "git.pwmt.org";
+    owner = "pwmt";
+    repo = "girara";
+    rev = version;
+    hash = "sha256-/9pj6gB46sKIilImDGdJ8H7UHip/z5ckZWZnJLw/0YU=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    gettext
+    check
+    dbus
+    glib # for glib-compile-resources
+  ];
+
+  buildInputs = [
+    libintl
+    libiconv
+    json-glib
+  ];
+
+  propagatedBuildInputs = [
+    glib
+    gtk
+  ];
+
+  nativeCheckInputs = [
+    xvfb-run
+  ];
+
+  doCheck = !stdenv.isDarwin;
+
+  mesonFlags = [
+    "-Ddocs=disabled" # docs do not seem to be installed
+    (lib.mesonEnable "tests" ((stdenv.buildPlatform.canExecute stdenv.hostPlatform) && (!stdenv.isDarwin)))
+  ];
+
+  checkPhase = ''
+    export NO_AT_BRIDGE=1
+    xvfb-run -s '-screen 0 800x600x24' dbus-run-session \
+      --config-file=${dbus}/share/dbus-1/session.conf \
+      meson test --print-errorlogs
+  '';
+
+  passthru.tests = {
+    inherit zathura;
+  };
+
+  meta = with lib; {
+    homepage = "https://git.pwmt.org/pwmt/girara";
+    description = "User interface library";
+    longDescription = ''
+      girara is a library that implements a GTK based VIM-like user interface
+      that focuses on simplicity and minimalism.
+    '';
+    license = licenses.zlib;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gitit/default.nix b/nixpkgs/pkgs/applications/misc/gitit/default.nix
new file mode 100644
index 000000000000..365b3f6acd97
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gitit/default.nix
@@ -0,0 +1,61 @@
+{ lib, haskellPackages, haskell, removeReferencesTo
+# “Plugins” are a fancy way of saying gitit will invoke
+# GHC at *runtime*, which in turn makes it pull GHC
+# into its runtime closure. Only enable if you really need
+# that feature. But if you do you’ll want to use gitit
+# as a library anyway.
+, pluginSupport ? false
+}:
+
+# this is similar to what we do with the pandoc executable
+
+let
+  plain = haskellPackages.gitit;
+  plugins =
+    if pluginSupport
+    then plain
+    else haskell.lib.compose.disableCabalFlag "plugins" plain;
+  static = haskell.lib.compose.justStaticExecutables plugins;
+
+in
+  (haskell.lib.compose.overrideCabal (drv: {
+    buildTools = (drv.buildTools or []) ++ [ removeReferencesTo ];
+  }) static).overrideAttrs (drv: {
+
+    # These libraries are still referenced, because they generate
+    # a `Paths_*` module for figuring out their version.
+    # The `Paths_*` module is generated by Cabal, and contains the
+    # version, but also paths to e.g. the data directories, which
+    # lead to a transitive runtime dependency on the whole GHC distribution.
+    # This should ideally be fixed in haskellPackages (or even Cabal),
+    # but a minimal gitit is important enough to patch it manually.
+    disallowedReferences = [
+      haskellPackages.pandoc-types
+      haskellPackages.HTTP
+      haskellPackages.pandoc
+      haskellPackages.happstack-server
+      haskellPackages.filestore
+    ];
+    postInstall = ''
+      remove-references-to \
+        -t ${haskellPackages.pandoc-types} \
+        $out/bin/gitit
+      remove-references-to \
+        -t ${haskellPackages.HTTP} \
+        $out/bin/gitit
+      remove-references-to \
+        -t ${haskellPackages.pandoc} \
+        $out/bin/gitit
+      remove-references-to \
+        -t ${haskellPackages.happstack-server} \
+        $out/bin/gitit
+      remove-references-to \
+        -t ${haskellPackages.filestore} \
+        $out/bin/gitit
+    '';
+
+    meta = drv.meta // {
+      maintainers = drv.meta.maintainers or []
+        ++ [ lib.maintainers.Profpatsch ];
+    };
+  })
diff --git a/nixpkgs/pkgs/applications/misc/gkrellm/default.nix b/nixpkgs/pkgs/applications/misc/gkrellm/default.nix
new file mode 100644
index 000000000000..523ba837f3a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gkrellm/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, fetchurl
+, stdenv
+, gettext
+, pkg-config
+, glib
+, gtk2
+, libX11
+, libSM
+, libICE
+, which
+, IOKit
+, copyDesktopItems
+, makeDesktopItem
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gkrellm";
+  version = "2.3.11";
+
+  src = fetchurl {
+    url = "http://gkrellm.srcbox.net/releases/gkrellm-${version}.tar.bz2";
+    sha256 = "01lccz4fga40isv09j8rjgr0qy10rff9vj042n6gi6gdv4z69q0y";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems pkg-config which wrapGAppsHook ];
+  buildInputs = [ gettext glib gtk2 libX11 libSM libICE ]
+    ++ lib.optionals stdenv.isDarwin [ IOKit ];
+
+  hardeningDisable = [ "format" ];
+
+  # Makefiles are patched to fix references to `/usr/X11R6' and to add
+  # `-lX11' to make sure libX11's store path is in the RPATH.
+  postPatch = ''
+    echo "patching makefiles..."
+    for i in Makefile src/Makefile server/Makefile
+    do
+      sed -i "$i" -e "s|/usr/X11R6|${libX11.dev}|g ; s|-lICE|-lX11 -lICE|g"
+    done
+  '';
+
+  makeFlags = [ "STRIP=-s" ];
+  installFlags = [ "DESTDIR=$(out)" ];
+
+  # This icon is used by the desktop file.
+  postInstall = ''
+    install -Dm444 -T src/icon.xpm $out/share/pixmaps/gkrellm.xpm
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "gkrellm";
+      exec = "gkrellm";
+      icon = "gkrellm";
+      desktopName = "GKrellM";
+      genericName = "System monitor";
+      comment = "The GNU Krell Monitors";
+      categories = [ "System" "Monitor" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "Themeable process stack of system monitors";
+    longDescription = ''
+      GKrellM is a single process stack of system monitors which
+      supports applying themes to match its appearance to your window
+      manager, Gtk, or any other theme.
+    '';
+
+    homepage = "http://gkrellm.srcbox.net";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ khumba ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/glava/default.nix b/nixpkgs/pkgs/applications/misc/glava/default.nix
new file mode 100644
index 000000000000..14173fc7057f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/glava/default.nix
@@ -0,0 +1,90 @@
+{ lib, stdenv, writeScript, fetchFromGitHub
+, libGL, libX11, libXext, python3, libXrandr, libXrender, libpulseaudio, libXcomposite
+, enableGlfw ? false, glfw, runtimeShell }:
+
+let
+  inherit (lib) optional makeLibraryPath;
+
+  wrapperScript = writeScript "glava" ''
+    #!${runtimeShell}
+    case "$1" in
+      --copy-config|-C)
+        # The binary would symlink it, which won't work in Nix because the
+        # garbage collector will eventually remove the original files after
+        # updates
+        echo "Nix wrapper: Copying glava config to ~/.config/glava"
+        cp -r --no-preserve=all @out@/etc/xdg/glava ~/.config/glava
+        ;;
+      *)
+        exec @out@/bin/.glava-unwrapped "$@"
+    esac
+  '';
+in
+  stdenv.mkDerivation rec {
+    pname = "glava";
+    version = "1.6.3";
+
+    src = fetchFromGitHub {
+      owner = "wacossusca34";
+      repo = "glava";
+      rev = "v${version}";
+      sha256 = "0kqkjxmpqkmgby05lsf6c6iwm45n33jk5qy6gi3zvjx4q4yzal1i";
+    };
+
+    buildInputs = [
+      libX11
+      libXext
+      libXrandr
+      libXrender
+      libpulseaudio
+      libXcomposite
+    ] ++ optional enableGlfw glfw;
+
+    nativeBuildInputs = [
+      python3
+    ];
+
+    preConfigure = ''
+      for f in $(find -type f);do
+        substituteInPlace $f \
+          --replace /etc/xdg $out/etc/xdg
+      done
+
+      substituteInPlace Makefile \
+        --replace '$(DESTDIR)$(SHADERDIR)' '$(SHADERDIR)'
+
+      substituteInPlace Makefile \
+        --replace 'unknown' 'v${version}'
+    '';
+
+    makeFlags = optional (!enableGlfw) "DISABLE_GLFW=1";
+
+    installFlags = [
+      "DESTDIR=$(out)"
+    ];
+
+    fixupPhase = ''
+      mkdir -p $out/bin
+      mv $out/usr/bin/glava $out/bin/.glava-unwrapped
+      rm -rf $out/usr
+
+      patchelf \
+        --set-rpath "$(patchelf --print-rpath $out/bin/.glava-unwrapped):${makeLibraryPath [ libGL ]}" \
+        $out/bin/.glava-unwrapped
+
+      substitute ${wrapperScript} $out/bin/glava --subst-var out
+      chmod +x $out/bin/glava
+    '';
+
+    meta = with lib; {
+      description = ''
+        OpenGL audio spectrum visualizer
+      '';
+      homepage = "https://github.com/wacossusca34/glava";
+      platforms = platforms.linux;
+      license = licenses.gpl3;
+      maintainers = with maintainers; [
+        eadwu
+      ];
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/misc/globe-cli/default.nix b/nixpkgs/pkgs/applications/misc/globe-cli/default.nix
new file mode 100644
index 000000000000..9d2a5bbc786f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/globe-cli/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "globe-cli";
+  version = "0.2.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-Np1f/mSMIMZU3hE0Fur8bOHhOH3rZyroGiVAqfiIs7g=";
+  };
+
+  cargoHash = "sha256-qoCOYk7hyjMx07l48IkxE6zsG58NkF72E3OvoZHz5d0=";
+
+  meta = with lib; {
+    description = "Display an interactive ASCII globe in your terminal";
+    homepage = "https://github.com/adamsky/globe";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ devhell ];
+    mainProgram = "globe";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/glom/default.nix b/nixpkgs/pkgs/applications/misc/glom/default.nix
new file mode 100644
index 000000000000..5c8eb94712a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/glom/default.nix
@@ -0,0 +1,132 @@
+{ lib, stdenv
+, fetchurl
+, pkg-config
+, autoconf
+, automake
+, libtool
+, mm-common
+, intltool
+, itstool
+, doxygen
+, graphviz
+, makeFontsConf
+, freefont_ttf
+, boost
+, libxmlxx3
+, libxslt
+, libgdamm
+, libarchive
+, libepc
+, python3
+, ncurses
+, glibmm
+, gtk3
+, openssl
+, gtkmm3
+, goocanvasmm2
+, evince
+, isocodes
+, gtksourceview
+, gtksourceviewmm
+, postgresql_15
+, gobject-introspection
+, yelp-tools
+, wrapGAppsHook
+}:
+
+let
+  gda = libgdamm.override {
+    mysqlSupport = true;
+    postgresSupport = true;
+  };
+  python = python3.withPackages (pkgs: with pkgs; [ pygobject3 ]);
+  sphinx-build = python3.pkgs.sphinx.overrideAttrs (super: {
+    postFixup = super.postFixup or "" + ''
+      # Do not propagate Python
+      rm $out/nix-support/propagated-build-inputs
+    '';
+  });
+  boost_python = boost.override { enablePython = true; inherit python; };
+in stdenv.mkDerivation rec {
+  pname = "glom";
+  version = "1.32.0";
+
+  outputs = [ "out" "lib" "dev" "doc" "devdoc" ];
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "1wcd4kd3crwqjv0jfp73jkyyf5ws8mvykg37kqxmcb58piz21gsk";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    autoconf
+    automake
+    libtool
+    mm-common
+    intltool
+    yelp-tools
+    itstool
+    doxygen
+    graphviz
+    sphinx-build
+    wrapGAppsHook
+    gobject-introspection # for setup hook
+  ];
+
+  buildInputs = [
+    boost_python
+    glibmm
+    gtk3
+    openssl
+    libxmlxx3
+    libxslt
+    gda
+    libarchive
+    libepc
+    python
+    ncurses # for python
+    gtkmm3
+    goocanvasmm2
+    evince
+    isocodes
+    python3.pkgs.pygobject3
+    gtksourceview
+    gtksourceviewmm
+    postgresql_15 # for postgresql utils
+  ];
+
+  enableParallelBuilding = true;
+
+  preConfigure = "NOCONFIGURE=1 ./autogen.sh";
+
+  configureFlags = [
+    "--with-boost-python=boost_python${lib.versions.major python3.version}${lib.versions.minor python3.version}"
+    "--with-postgres-utils=${lib.getBin postgresql_15}/bin"
+  ];
+
+  makeFlags = [
+    "libdocdir=${placeholder "doc"}/share/doc/$(book_name)"
+    "devhelpdir=${placeholder "devdoc"}/share/devhelp/books/$(book_name)"
+  ];
+
+  # Fontconfig error: Cannot load default config file
+  FONTCONFIG_FILE = makeFontsConf {
+    fontDirectories = [ freefont_ttf ];
+  };
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PYTHONPATH : "${placeholder "out"}/${python3.sitePackages}"
+      --set PYTHONHOME "${python}"
+    )
+  '';
+
+  meta = with lib; {
+    description = "An easy-to-use database designer and user interface";
+    homepage = "http://www.glom.org/";
+    license = [ licenses.lgpl2 licenses.gpl2 ];
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gmnitohtml/default.nix b/nixpkgs/pkgs/applications/misc/gmnitohtml/default.nix
new file mode 100644
index 000000000000..837379890b4c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmnitohtml/default.nix
@@ -0,0 +1,47 @@
+{ lib, buildGoModule, fetchFromSourcehut, scdoc, installShellFiles }:
+
+buildGoModule rec {
+  pname = "gmnitohtml";
+  version = "0.1.2";
+
+  src = fetchFromSourcehut {
+    owner = "~adnano";
+    repo = pname;
+    rev = version;
+    hash = "sha256-nKNSLVBBdZI5mkbEUkMv0CIOQIyH3OX+SEFf5O47DFY=";
+  };
+  vendorHash = "sha256-Cx8x8AISRVTA4Ufd73vOVky97LX23NkizHDingr/zVk=";
+
+  ldflags = [ "-s" "-w" ];
+
+  # Build and install the man pages
+  nativeBuildInputs = [ scdoc installShellFiles ];
+
+  postBuild = ''
+    make gmnitohtml.1
+  '';
+
+  postInstall = ''
+    installManPage gmnitohtml.1
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/gmnitohtml --help
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~adnano/gmnitohtml";
+    changelog = "https://git.sr.ht/~adnano/gmnitohtml/log";
+    description = "Gemini text to HTML converter";
+    longDescription = ''
+      he gmnitohtml utility reads Gemini text from the standard input and writes
+      HTML to the standard output.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ jk sikmir ];
+    mainProgram = "gmnitohtml";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gmrun/default.nix b/nixpkgs/pkgs/applications/misc/gmrun/default.nix
new file mode 100644
index 000000000000..e71b1a6484d3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmrun/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl, glib, gtk2, pkg-config, popt }:
+
+let
+  version = "0.9.2";
+in
+
+stdenv.mkDerivation rec {
+  pname = "gmrun";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gmrun/${pname}-${version}.tar.gz";
+    sha256 = "180z6hbax1qypy5cyy2z6nn7fzxla4ib47ck8mqwr714ag77na8p";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib gtk2 popt ];
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  patches = [
+      ./gcc43.patch
+      ./find-config-file-in-system-etc-dir.patch
+      ./gmrun-0.9.2-xdg.patch
+    ];
+
+  meta = with lib; {
+    description = "Gnome Completion-Run Utility";
+    longDescription = ''
+      A simple program which provides a "run program" window, featuring a bash-like TAB completion.
+      It uses GTK interface.
+      Also, supports CTRL-R / CTRL-S / "!" for searching through history.
+      Running commands in a terminal with CTRL-Enter. URL handlers.
+    '';
+    homepage = "https://sourceforge.net/projects/gmrun/";
+    license = licenses.gpl2;
+    maintainers = [];
+    platforms = platforms.all;
+    mainProgram = "gmrun";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gmrun/find-config-file-in-system-etc-dir.patch b/nixpkgs/pkgs/applications/misc/gmrun/find-config-file-in-system-etc-dir.patch
new file mode 100644
index 000000000000..12d5370961c0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmrun/find-config-file-in-system-etc-dir.patch
@@ -0,0 +1,18 @@
+diff -ur gmrun-0.9.2-orig/src/prefs.cc gmrun-0.9.2/src/prefs.cc
+--- gmrun-0.9.2-orig/src/prefs.cc	2019-05-02 12:56:39.025088361 +0200
++++ gmrun-0.9.2/src/prefs.cc	2019-05-02 13:21:51.179778620 +0200
+@@ -31,9 +31,11 @@
+ 
+ Prefs::Prefs()
+ {
+-  string file_name = PACKAGE_DATA_DIR"/";
+-  file_name += GMRUNRC;
+-  init(file_name);
++  string file_name = "/etc/" GMRUNRC;
++  if (!init(file_name)) {
++    file_name = PACKAGE_DATA_DIR "/" GMRUNRC;;
++    init(file_name);
++  }
+ 
+   file_name = getenv("HOME");
+   if (!file_name.empty()) {
diff --git a/nixpkgs/pkgs/applications/misc/gmrun/gcc43.patch b/nixpkgs/pkgs/applications/misc/gmrun/gcc43.patch
new file mode 100644
index 000000000000..60e4338e893d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmrun/gcc43.patch
@@ -0,0 +1,51 @@
+--- a/src/gtkcompletionline.cc.orig	2003-11-16 11:55:07.000000000 +0100
++++ a/src/gtkcompletionline.cc	2008-05-08 08:51:22.000000000 +0200
+@@ -29,6 +29,7 @@
+ #include <set>
+ #include <sstream>
+ #include <string>
++#include <cstring>
+ #include <vector>
+ using namespace std;
+ 
+--- a/src/ci_string.h.orig	2001-05-16 16:39:31.000000000 +0200
++++ a/src/ci_string.h	2008-05-08 08:51:33.000000000 +0200
+@@ -7,6 +7,7 @@
+ #define __CI_STRING_H__
+ 
+ #include <string>
++#include <cstring>
+ #include <ctype.h>
+ 
+ struct ci_char_traits : public std::char_traits<char>
+--- a/src/prefs.cc.orig	2002-08-16 12:48:22.000000000 +0200
++++ a/src/prefs.cc	2008-05-08 08:51:54.000000000 +0200
+@@ -13,6 +13,7 @@
+ #include <fstream>
+ #include <iostream>
+ #include <stdio.h>
++#include <stdlib.h>
+ 
+ #include <list>
+ 
+--- a/src/main.cc.orig	2003-11-16 11:55:07.000000000 +0100
++++ a/src/main.cc	2008-05-08 09:03:11.000000000 +0200
+@@ -14,6 +14,7 @@
+ #include <gdk/gdkkeysyms.h>
+ 
+ #include <string>
++#include <cstring>
+ #include <iostream>
+ #include <sstream>
+ #include <vector>
+
+--- a/src/gtkcompletionline.cc.orig	2009-06-19 22:38:14.000000000 +0400
++++ a/src/gtkcompletionline.cc	2009-06-19 22:37:14.000000000 +0400
+@@ -376,7 +377,7 @@
+   return 0;
+ }
+ 
+-int my_alphasort(const void* va, const void* vb) {
++int my_alphasort(const dirent** va, const dirent** vb) {
+   const struct dirent** a = (const struct dirent**)va;
+   const struct dirent** b = (const struct dirent**)vb;
diff --git a/nixpkgs/pkgs/applications/misc/gmrun/gmrun-0.9.2-xdg.patch b/nixpkgs/pkgs/applications/misc/gmrun/gmrun-0.9.2-xdg.patch
new file mode 100644
index 000000000000..b5cd41a3c5b4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmrun/gmrun-0.9.2-xdg.patch
@@ -0,0 +1,58 @@
+diff -ur a/src/history.cc src/history.cc
+--- a/src/history.cc	2002-08-17 15:19:31.000000000 +0200
++++ a/src/history.cc	2012-06-04 23:42:35.314653414 +0200
+@@ -24,8 +24,15 @@
+ HistoryFile::HistoryFile()
+ {
+   m_file_entries = 0;
+-  m_filename = g_get_home_dir();
+-  m_filename += "/.gmrun_history";
++  const char* filename = getenv("XDG_CACHE_HOME");
++  if (filename != 0 && *filename != '\0') {
++    m_filename = filename;
++    m_filename += "/gmrun_history";
++  }
++  else {
++    m_filename = g_get_home_dir();
++    m_filename += "/.gmrun_history";
++  }
+   m_current = 0;
+   m_default_set = false;
+   read_the_file();
+diff -ur a/src/prefs.cc src/prefs.cc
+--- a/src/prefs.cc	2012-06-04 22:35:00.671949439 +0200
++++ a/src/prefs.cc	2012-06-04 23:24:24.184445962 +0200
+@@ -35,12 +35,29 @@
+   file_name += GMRUNRC;
+   init(file_name);
+ 
+-  file_name = getenv("HOME");
+-  if (!file_name.empty()) {
++  file_name.clear();
++  const char* filename = getenv("XDG_CONFIG_HOME");
++  if (filename != 0 && *filename != '\0') {
++    file_name = filename;
+     string::iterator i = file_name.end() - 1;
+-    if (*i == '/') file_name.erase(i);
+-    file_name += "/.";
++    if (*i != '/') {
++      file_name += '/';
++    }
+     file_name += GMRUNRC;
++  }
++  else {
++    filename = getenv("HOME");
++    if (filename != 0 && *filename != '\0') {
++      file_name = filename;
++      string::iterator i = file_name.end() - 1;
++      if (*i != '/') {
++        file_name += '/';
++      }
++      file_name += '.';
++      file_name += GMRUNRC;
++    }
++  }
++  if (!file_name.empty()) {
+     init(file_name);
+   }
+ }
diff --git a/nixpkgs/pkgs/applications/misc/gmtp/default.nix b/nixpkgs/pkgs/applications/misc/gmtp/default.nix
new file mode 100644
index 000000000000..a8465538b50a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gmtp/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, pkg-config, libmtp, libid3tag, flac, libvorbis, gtk3
+, gsettings-desktop-schemas, wrapGAppsHook
+}:
+
+let version = "1.3.11"; in
+
+stdenv.mkDerivation {
+  pname = "gmtp";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gmtp/gMTP-${version}/gmtp-${version}.tar.gz";
+    sha256 = "04q6byyq002fhzkc2rkkahwh5b6272xakaj4m3vwm8la8jf0r0ss";
+  };
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+  buildInputs = [ libmtp libid3tag flac libvorbis gtk3 gsettings-desktop-schemas ];
+
+  enableParallelBuilding = true;
+
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: gmtp-preferences.o:src/main.h:72: multiple definition of
+  #     `scrolledwindowMain'; gmtp-about.o:src/main.h:72: first defined here
+  # TODO: can be removed when 1.4.0 is released.
+  env.NIX_CFLAGS_COMPILE = "-fcommon";
+
+  preFixup = ''
+    gappsWrapperArgs+=(--add-flags "--datapath $out/share");
+  '';
+
+  meta = {
+    description = "A simple MP3 and Media player client for UNIX and UNIX like systems";
+    homepage = "https://gmtp.sourceforge.io";
+    platforms = lib.platforms.linux;
+    maintainers = [ ];
+    license = lib.licenses.bsd3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-epub-thumbnailer/default.nix b/nixpkgs/pkgs/applications/misc/gnome-epub-thumbnailer/default.nix
new file mode 100644
index 000000000000..3553dd118da0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-epub-thumbnailer/default.nix
@@ -0,0 +1,53 @@
+{ stdenv
+, lib
+, fetchurl
+, wrapGAppsNoGuiHook
+, meson
+, ninja
+, pkg-config
+, gnome
+, gdk-pixbuf
+, glib
+, libarchive
+, librsvg
+, libxml2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-epub-thumbnailer";
+  version = "1.7";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/gnome-epub-thumbnailer/${lib.versions.majorMinor version}/gnome-epub-thumbnailer-${version}.tar.xz";
+    sha256 = "sha256-S7Ah++RCgNuY3xTBH6XkMgsWe4GpG9e6WGvqDE+il1I=";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsNoGuiHook
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    gdk-pixbuf
+    glib
+    libarchive
+    librsvg
+    libxml2
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = "gnome-epub-thumbnailer";
+    };
+  };
+
+  meta = with lib; {
+    description = "Thumbnailer for EPub and MOBI books";
+    homepage = "https://gitlab.gnome.org/GNOME/gnome-epub-thumbnailer";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-extension-manager/default.nix b/nixpkgs/pkgs/applications/misc/gnome-extension-manager/default.nix
new file mode 100644
index 000000000000..a0540e56ccc9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-extension-manager/default.nix
@@ -0,0 +1,70 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, wrapGAppsHook4
+, libadwaita
+, meson
+, ninja
+, gettext
+, gtk4
+, appstream
+, appstream-glib
+, desktop-file-utils
+, gobject-introspection
+, blueprint-compiler
+, pkg-config
+, json-glib
+, libsoup_3
+, glib
+, libbacktrace
+, text-engine
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-extension-manager";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "mjakeman";
+    repo = "extension-manager";
+    rev = "v${version}";
+    hash = "sha256-e+s8iIUvW9Rw0Wq4aIn3IzBLGTQC6o0TmNXd5gz892Y=";
+  };
+
+  nativeBuildInputs = [
+    appstream
+    appstream-glib
+    desktop-file-utils
+    gettext
+    glib
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    blueprint-compiler
+    gtk4
+    json-glib
+    libadwaita
+    libsoup_3
+    libbacktrace
+    text-engine
+  ];
+
+  mesonFlags = [
+    (lib.mesonOption "package" "Nix")
+    (lib.mesonOption "distributor" "nixpkgs")
+  ];
+
+  meta = with lib; {
+    description = "Desktop app for managing GNOME shell extensions";
+    homepage = "https://github.com/mjakeman/extension-manager";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "extension-manager";
+    maintainers = with maintainers; [ foo-dogsquared ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-firmware/default.nix b/nixpkgs/pkgs/applications/misc/gnome-firmware/default.nix
new file mode 100644
index 000000000000..defaad0d2c97
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-firmware/default.nix
@@ -0,0 +1,68 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, gitUpdater
+, appstream-glib
+, desktop-file-utils
+, fwupd
+, gettext
+, glib
+, gtk4
+, libadwaita
+, libxmlb
+, meson
+, ninja
+, pkg-config
+, systemd
+, help2man
+, wrapGAppsHook4
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-firmware";
+  version = "45.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = "gnome-firmware";
+    rev = version;
+    sha256 = "sha256-KVyxOl7RdL80ZiEyiT+XGa/6Ss2g+5y+LIrR9TSRE+I=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib # for ITS rules
+    desktop-file-utils
+    gettext
+    help2man
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    fwupd
+    glib
+    gtk4
+    libadwaita
+    libxmlb
+    systemd
+  ];
+
+  mesonFlags = [
+    "-Dconsolekit=false"
+  ];
+
+  passthru.updateScript = gitUpdater {
+    ignoredVersions = "(alpha|beta|rc).*";
+  };
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/World/gnome-firmware";
+    description = "Tool for installing firmware on devices";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-frog/default.nix b/nixpkgs/pkgs/applications/misc/gnome-frog/default.nix
new file mode 100644
index 000000000000..6570ea796853
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-frog/default.nix
@@ -0,0 +1,97 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, python3Packages
+, wrapGAppsHook4
+, gtk4
+, meson
+, ninja
+, pkg-config
+, appstream-glib
+, desktop-file-utils
+, glib
+, gobject-introspection
+, blueprint-compiler
+, libxml2
+, libnotify
+, libadwaita
+, libportal
+, gettext
+, librsvg
+, tesseract5
+, zbar
+, gst_all_1
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gnome-frog";
+  version = "1.4.2";
+
+  src = fetchFromGitHub {
+    owner = "TenderOwl";
+    repo = "Frog";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-w/ENUhJt7bYy5htBLolb/HysK8/scRaPQX5qEezQcXY=";
+  };
+
+  format = "other";
+
+  patches = [ ./update-compatible-with-non-flatpak-env.patch ];
+  postPatch = ''
+    chmod +x ./build-aux/meson/postinstall.py
+    patchShebangs ./build-aux/meson/postinstall.py
+    substituteInPlace ./build-aux/meson/postinstall.py \
+      --replace "gtk-update-icon-cache" "gtk4-update-icon-cache"
+    substituteInPlace ./frog/language_manager.py --subst-var out
+  '';
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    gettext
+    meson
+    ninja
+    pkg-config
+    glib
+    wrapGAppsHook4
+    gobject-introspection
+    blueprint-compiler
+    libxml2
+  ];
+
+  buildInputs = [
+    librsvg
+    libnotify
+    libadwaita
+    libportal
+    zbar
+    tesseract5
+    gst_all_1.gstreamer
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+    pillow
+    pytesseract
+    pyzbar
+    gtts
+  ];
+
+  # This is to prevent double-wrapping the package. We'll let
+  # Python do it by adding certain arguments inside of the
+  # wrapper instead.
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    homepage = "https://getfrog.app/";
+    description =
+      "Intuitive text extraction tool (OCR) for GNOME desktop";
+    license = licenses.mit;
+    mainProgram = "frog";
+    maintainers = with maintainers; [ foo-dogsquared ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-frog/update-compatible-with-non-flatpak-env.patch b/nixpkgs/pkgs/applications/misc/gnome-frog/update-compatible-with-non-flatpak-env.patch
new file mode 100644
index 000000000000..aac9b4f76fd2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-frog/update-compatible-with-non-flatpak-env.patch
@@ -0,0 +1,33 @@
+diff --git a/frog/config.py b/frog/config.py
+index 9837755..b73e4e3 100644
+--- a/frog/config.py
++++ b/frog/config.py
+@@ -30,10 +30,14 @@ import os
+ APP_ID = "com.github.tenderowl.frog"
+ RESOURCE_PREFIX = "/com/github/tenderowl/frog"
+ 
++# This is based from the XDG Base Directory specification.
++if not os.getenv('XDG_DATA_HOME'):
++    os.environ['XDG_DATA_HOME'] = os.path.expanduser("~/.local/share")
++
+ if not os.path.exists(os.path.join(os.environ['XDG_DATA_HOME'], 'tessdata')):
+     os.mkdir(os.path.join(os.environ['XDG_DATA_HOME'], 'tessdata'))
+ 
+ tessdata_url = "https://github.com/tesseract-ocr/tessdata/raw/main/"
+ tessdata_best_url = "https://github.com/tesseract-ocr/tessdata_best/raw/main/"
+ tessdata_dir = os.path.join(os.environ['XDG_DATA_HOME'], 'tessdata')
+-tessdata_config = f'--tessdata-dir {tessdata_dir} –psm 6'
++tessdata_config = f'–-psm 6 --tessdata-dir {tessdata_dir}'
+diff --git a/frog/language_manager.py b/frog/language_manager.py
+index 5752be6..4f6a908 100644
+--- a/frog/language_manager.py
++++ b/frog/language_manager.py
+@@ -156,7 +156,7 @@ class LanguageManager(GObject.GObject):
+             os.mkdir(tessdata_dir)
+ 
+         dest_path = os.path.join(tessdata_dir, 'eng.traineddata')
+-        source_path = pathlib.Path('/app/share/appdata/eng.traineddata')
++        source_path = pathlib.Path('@out@/share/appdata/eng.traineddata')
+         if os.path.exists(dest_path):
+             return
+ 
diff --git a/nixpkgs/pkgs/applications/misc/gnome-multi-writer/default.nix b/nixpkgs/pkgs/applications/misc/gnome-multi-writer/default.nix
new file mode 100644
index 000000000000..31d81a332790
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-multi-writer/default.nix
@@ -0,0 +1,62 @@
+{ lib, stdenv
+, fetchurl
+, appstream-glib
+, desktop-file-utils
+, gettext
+, glib
+, gnome
+, gtk3
+, gusb
+, libcanberra-gtk3
+, libgudev
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+, polkit
+, udisks
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-multi-writer";
+  version = "3.35.90";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.majorMinor version}/${pname}-${version}.tar.xz";
+    sha256 = "07vgzjjdrxcp7h73z13h9agafxb4vmqx5i81bcfyw0ilw9kkdzmp";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    gettext
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    gusb
+    libcanberra-gtk3
+    libgudev
+    polkit
+    udisks
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Tool for writing an ISO file to multiple USB devices at once";
+    homepage = "https://wiki.gnome.org/Apps/MultiWriter";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-recipes/default.nix b/nixpkgs/pkgs/applications/misc/gnome-recipes/default.nix
new file mode 100644
index 000000000000..818ef8fb96a0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-recipes/default.nix
@@ -0,0 +1,77 @@
+{ stdenv
+, lib
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, desktop-file-utils
+, gettext
+, itstool
+, python3
+, wrapGAppsHook
+, gtk3
+, glib
+, libsoup
+, gnome-online-accounts
+, librest
+, json-glib
+, gnome-autoar
+, gspell
+, libcanberra
+, nix-update-script
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-recipes";
+  version = "2.0.4";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "recipes";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "GyFOwEYmipQdFLtTXn7+NvhDTzxBlOAghr3cZT4QpQw=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    desktop-file-utils
+    gettext
+    itstool
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    glib
+    libsoup
+    gnome-online-accounts
+    librest
+    json-glib
+    gnome-autoar
+    gspell
+    libcanberra
+  ];
+
+  postPatch = ''
+    chmod +x src/list_to_c.py
+    patchShebangs src/list_to_c.py
+    patchShebangs meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Recipe management application for GNOME";
+    homepage = "https://wiki.gnome.org/Apps/Recipes";
+    maintainers = teams.gnome.members;
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-secrets/default.nix b/nixpkgs/pkgs/applications/misc/gnome-secrets/default.nix
new file mode 100644
index 000000000000..046e296489b6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-secrets/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, meson
+, ninja
+, pkg-config
+, gettext
+, fetchFromGitLab
+, python3Packages
+, wrapGAppsHook4
+, gtk4
+, glib
+, gdk-pixbuf
+, gobject-introspection
+, desktop-file-utils
+, appstream-glib
+, libadwaita
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gnome-secrets";
+  version = "8.0";
+  format = "other";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = "secrets";
+    rev = version;
+    hash = "sha256-SEPQjl6hd8IBs0c0LBEYaqn2n8CGQmYSEMJp5yoL/PA=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    gettext
+    pkg-config
+    wrapGAppsHook4
+    desktop-file-utils
+    appstream-glib
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gtk4
+    glib
+    gdk-pixbuf
+    libadwaita
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+    construct
+    pykeepass
+    pyotp
+    validators
+    zxcvbn
+  ];
+
+  # Prevent double wrapping, let the Python wrapper use the args in preFixup.
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Password manager for GNOME which makes use of the KeePass v.4 format";
+    homepage = "https://gitlab.gnome.org/World/secrets";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mvnetbiz ];
+    mainProgram = "secrets";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-solanum/default.nix b/nixpkgs/pkgs/applications/misc/gnome-solanum/default.nix
new file mode 100644
index 000000000000..4c507edfb06f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-solanum/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, rustPlatform
+, cargo
+, desktop-file-utils
+, appstream-glib
+, blueprint-compiler
+, meson
+, ninja
+, pkg-config
+, rustc
+, wrapGAppsHook
+, python3
+, git
+, glib
+, gtk4
+, gst_all_1
+, libadwaita
+}:
+
+stdenv.mkDerivation rec {
+  pname = "solanum";
+  version = "5.0.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = "Solanum";
+    rev = version;
+    hash = "sha256-Xf/b/9o6zHF1hjHSyAXb90ySoBj+DMMe31e6RfF8C4Y=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-POvKpwzi+bkEkfSDhi/vjs/ey+A2vNN5ta4Q7Ma/RBQ=";
+  };
+
+  postPatch = ''
+    patchShebangs build-aux
+  '';
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+    python3
+    git
+    desktop-file-utils
+    appstream-glib
+    blueprint-compiler
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-bad
+  ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.gnome.org/World/Solanum";
+    description = "A pomodoro timer for the GNOME desktop";
+    maintainers = with maintainers; [ linsui ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "solanum";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gnome-tecla/default.nix b/nixpkgs/pkgs/applications/misc/gnome-tecla/default.nix
new file mode 100644
index 000000000000..43f77763f129
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-tecla/default.nix
@@ -0,0 +1,55 @@
+{ stdenv
+, lib
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook4
+, glib
+, gtk4
+, libadwaita
+, libxkbcommon
+, wayland
+, gnome
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "tecla";
+  version = "45.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/tecla/${lib.versions.major finalAttrs.version}/tecla-${finalAttrs.version}.tar.xz";
+    hash = "sha256-XAK7QBmxz/tWY9phB1A+/4U4Nqh4PdRwXdBKSfetwls=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+    libxkbcommon
+    wayland
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      attrPath = "gnome-tecla";
+      packageName = "tecla";
+    };
+  };
+
+  meta = with lib; {
+    description = "Keyboard layout viewer";
+    homepage = "https://gitlab.gnome.org/GNOME/tecla";
+    license = licenses.gpl2Plus;
+    maintainers = teams.gnome.members;
+    platforms = platforms.unix;
+    mainProgram = "tecla";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/gnome-usage/default.nix b/nixpkgs/pkgs/applications/misc/gnome-usage/default.nix
new file mode 100644
index 000000000000..179facc64fd5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gnome-usage/default.nix
@@ -0,0 +1,68 @@
+{ stdenv
+, lib
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, vala
+, gettext
+, libxml2
+, desktop-file-utils
+, wrapGAppsHook4
+, glib
+, gtk4
+, libadwaita
+, libgee
+, libgtop
+, gnome
+, tracker
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-usage";
+  version = "45.0";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "5nfE/iwBSXqE/x4RV+kTHp+ZmfGnjTUjSvHXfYJ18pQ=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    gettext
+    libxml2
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+    libgee
+    libgtop
+    tracker
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/postinstall.sh
+    patchShebangs build-aux/meson/postinstall.sh
+  '';
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "A nice way to view information about use of system resources, like memory and disk space";
+    homepage = "https://gitlab.gnome.org/GNOME/gnome-usage";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = teams.gnome.members;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/go-jira/default.nix b/nixpkgs/pkgs/applications/misc/go-jira/default.nix
new file mode 100644
index 000000000000..a3d31d034ee5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/go-jira/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "go-jira";
+  version = "1.0.28";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "go-jira";
+    repo = "jira";
+    sha256 = "sha256-h/x77xGqdOxPBxdchElZU9GFgjnNo89o9gx4fYM5dME=";
+  };
+
+  vendorHash = "sha256-r69aFl3GwgZ1Zr4cEy4oWlqsrjNCrqjwW9BU9+d8xDQ=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Simple command line client for Atlassian's Jira service written in Go";
+    homepage = "https://github.com/go-jira/jira";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ carlosdagos timstott ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/go-org/default.nix b/nixpkgs/pkgs/applications/misc/go-org/default.nix
new file mode 100644
index 000000000000..8aa5a3be717b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/go-org/default.nix
@@ -0,0 +1,27 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "go-org";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "niklasfasching";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-BPCQxl0aJ9PrEC5o5dc5uBbX8eYAxqB+qMLXo1LwCoA=";
+  };
+
+  vendorHash = "sha256-HbNYHO+tqFEs9VXdxyA+r/7mM/p+NBn8PomT8JAyKR8=";
+
+  postInstallCheck = ''
+    $out/bin/go-org > /dev/null
+  '';
+
+  meta = with lib; {
+    description = "Org-mode parser and static site generator in go";
+    homepage = "https://niklasfasching.github.io/go-org";
+    license = licenses.mit;
+    maintainers = with maintainers; [ payas ];
+    mainProgram = "go-org";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gofu/default.nix b/nixpkgs/pkgs/applications/misc/gofu/default.nix
new file mode 100644
index 000000000000..abe811d74858
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gofu/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gofu";
+  version = "unstable-2023-04-25";
+
+  src = fetchFromGitHub {
+    owner = "majewsky";
+    repo = pname;
+    rev = "f308ca92d1631e579fbfe3b3da13c93709dc18a2";
+    hash = "sha256-8c/Z+44gX7diAhXq8sHOqISoGhYdFA7VUYn7eNMCYxY=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "." ];
+
+  postInstall = ''
+    ln -s $out/bin/gofu $out/bin/rtree
+    ln -s $out/bin/gofu $out/bin/prettyprompt
+  '';
+
+  meta = with lib; {
+    description = "Multibinary containing several utilities";
+    homepage = "https://github.com/majewsky/gofu";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/golden-cheetah-bin/default.nix b/nixpkgs/pkgs/applications/misc/golden-cheetah-bin/default.nix
new file mode 100644
index 000000000000..ff46b57e1a3c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/golden-cheetah-bin/default.nix
@@ -0,0 +1,38 @@
+{ appimageTools, lib, fetchurl, nix-update-script, stdenv }:
+let
+
+  pname = "golden-cheetah";
+  version = "3.6";
+
+  src = fetchurl {
+    url = "https://github.com/GoldenCheetah/GoldenCheetah/releases/download/v${version}/GoldenCheetah_v${version}_x64.AppImage";
+    hash = "sha256-PMRUDQSQxbECbF9SPOo03t4Xxj1OtYJAPXEMyyy6EVY=";
+  };
+
+  appimageContents = appimageTools.extract { inherit pname src version; };
+in
+appimageTools.wrapType2 {
+  inherit pname src version;
+
+  extraPkgs = pkgs: with pkgs; [ R zlib libusb-compat-0_1 ];
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/GoldenCheetah
+    mkdir -p $out/share/applications
+    mkdir -p $out/share/pixmaps
+    cp ${appimageContents}/GoldenCheetah.desktop $out/share/applications/
+    cp ${appimageContents}/gc.png $out/share/pixmaps/
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = {
+    description = "Performance software for cyclists, runners and triathletes. This version includes the API Tokens for e.g. Strava";
+    platforms = lib.platforms.linux;
+    broken = !stdenv.isx86_64;
+    maintainers = with lib.maintainers; [ gador adamcstephens ];
+    license = lib.licenses.gpl2Plus;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    knownVulnerabilities = [ "Vendors libwebp vulnerable to CVE-2023-4863" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/golden-cheetah/0001-Fix-building-with-bison-3.7.patch b/nixpkgs/pkgs/applications/misc/golden-cheetah/0001-Fix-building-with-bison-3.7.patch
new file mode 100644
index 000000000000..f410d0f18b2b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/golden-cheetah/0001-Fix-building-with-bison-3.7.patch
@@ -0,0 +1,59 @@
+diff --git a/src/Core/DataFilter.y b/src/Core/DataFilter.y
+index 30070f131..15f746a10 100644
+--- a/src/Core/DataFilter.y
++++ b/src/Core/DataFilter.y
+@@ -49,6 +49,9 @@ extern Leaf *DataFilterroot; // root node for parsed statement
+ 
+ %}
+ 
++// generated by the scanner
++%define api.header.include {"DataFilter_yacc.h"}
++
+ // Symbol can be meta, metric, variable or function name
+ %token <string> SYMBOL PYTHON
+ 
+diff --git a/src/Core/RideDB.y b/src/Core/RideDB.y
+index d6da086bd..f2001e23c 100644
+--- a/src/Core/RideDB.y
++++ b/src/Core/RideDB.y
+@@ -40,6 +40,8 @@ void RideDBerror(void*jc, const char *error) // used by parser aka yyerror()
+ #define scanner jc->scanner
+ 
+ %}
++// generated by the scanner
++%define api.header.include {"RideDB_yacc.h"}
+ 
+ %pure-parser
+ %lex-param { void *scanner }
+diff --git a/src/FileIO/JsonRideFile.y b/src/FileIO/JsonRideFile.y
+index 2cbbef9fc..d5c77a779 100644
+--- a/src/FileIO/JsonRideFile.y
++++ b/src/FileIO/JsonRideFile.y
+@@ -106,6 +106,9 @@ static QString protect(const QString string)
+ 
+ %}
+ 
++// generated by the scanner
++%define api.header.include {"JsonRideFile_yacc.h"}
++
+ %pure-parser
+ %lex-param { void *scanner }
+ %parse-param { struct JsonContext *jc }
+diff --git a/src/gcconfig.pri.in b/src/gcconfig.pri.in
+index a280bbb6b..07e543372 100644
+--- a/src/gcconfig.pri.in
++++ b/src/gcconfig.pri.in
+@@ -75,10 +75,10 @@
+ 
+ # Let us know where flex and bison are installed.
+ # You may need to specify the full path if things don't work.
+-#QMAKE_LEX  = flex
+-#QMAKE_YACC = bison
++QMAKE_LEX  = flex
++QMAKE_YACC = bison
+ # If you are using bison 3.7 or higher, uncomment the line below
+-#QMAKE_MOVE = cp
++QMAKE_MOVE = cp
+ # If you're compiling with nmake and VC then you
+ # will likely also use win_flex and win_bison
+ # so uncomment below
diff --git a/nixpkgs/pkgs/applications/misc/golden-cheetah/default.nix b/nixpkgs/pkgs/applications/misc/golden-cheetah/default.nix
new file mode 100644
index 000000000000..1345dc51593d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/golden-cheetah/default.nix
@@ -0,0 +1,83 @@
+{ lib, fetchFromGitHub, nix-update-script, mkDerivation
+, qtbase, qtsvg, qtserialport, qtwebengine, qtmultimedia, qttools
+, qtconnectivity, qtcharts, libusb-compat-0_1, gsl, blas
+, bison, flex, zlib, qmake, makeDesktopItem, wrapQtAppsHook
+}:
+
+let
+  desktopItem = makeDesktopItem {
+    name = "goldencheetah";
+    exec = "GoldenCheetah";
+    icon = "goldencheetah";
+    desktopName = "GoldenCheetah";
+    genericName = "GoldenCheetah";
+    comment = "Performance software for cyclists, runners and triathletes";
+    categories = [ "Utility" ];
+  };
+in mkDerivation rec {
+  pname = "golden-cheetah";
+  version = "3.6";
+
+  src = fetchFromGitHub {
+    owner = "GoldenCheetah";
+    repo = "GoldenCheetah";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Ntim1/ZPaTPCHQ5p8xF5LWpqq8+OgkPfaQqqysv9j/c=";
+  };
+
+  buildInputs = [
+    qtbase
+    qtsvg
+    qtserialport
+    qtwebengine
+    qtmultimedia
+    qttools
+    zlib
+    qtconnectivity
+    qtcharts
+    libusb-compat-0_1
+    gsl
+    blas
+  ];
+  nativeBuildInputs = [ flex wrapQtAppsHook qmake bison ];
+
+  patches = [
+    # allow building with bison 3.7
+    # Included in https://github.com/GoldenCheetah/GoldenCheetah/pull/3590,
+    # which is periodically rebased but pre 3.6 release, as it'll break other CI systems
+    ./0001-Fix-building-with-bison-3.7.patch
+  ];
+
+  NIX_LDFLAGS = "-lz -lgsl -lblas";
+
+  qtWrapperArgs = [ "--prefix" "LD_LIBRARY_PATH" ":" "${zlib.out}/lib" ];
+
+  preConfigure = ''
+    cp src/gcconfig.pri.in src/gcconfig.pri
+    cp qwt/qwtconfig.pri.in qwt/qwtconfig.pri
+    sed -i 's,^#QMAKE_LRELEASE.*,QMAKE_LRELEASE = ${qttools.dev}/bin/lrelease,' src/gcconfig.pri
+    sed -i 's,^#LIBUSB_INSTALL.*,LIBUSB_INSTALL = ${libusb-compat-0_1},' src/gcconfig.pri
+    sed -i 's,^#LIBUSB_INCLUDE.*,LIBUSB_INCLUDE = ${libusb-compat-0_1.dev}/include,' src/gcconfig.pri
+    sed -i 's,^#LIBUSB_LIBS.*,LIBUSB_LIBS = -L${libusb-compat-0_1}/lib -lusb,' src/gcconfig.pri
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp src/GoldenCheetah $out/bin
+    install -Dm644 "${desktopItem}/share/applications/"* -t $out/share/applications/
+    install -Dm644 src/Resources/images/gc.png $out/share/pixmaps/goldencheetah.png
+
+    runHook postInstall
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = {
+    description = "Performance software for cyclists, runners and triathletes. Built from source and without API tokens";
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ adamcstephens ];
+    license = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/goldendict-ng/default.nix b/nixpkgs/pkgs/applications/misc/goldendict-ng/default.nix
new file mode 100644
index 000000000000..5d86aece035d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/goldendict-ng/default.nix
@@ -0,0 +1,93 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, pkg-config
+, cmake
+, libvorbis
+, ffmpeg
+, libeb
+, hunspell
+, opencc
+, xapian
+, libzim
+, lzo
+, xz
+, tomlplusplus
+, fmt
+, bzip2
+, libiconv
+, libXtst
+, qtbase
+, qtsvg
+, qtwebengine
+, qttools
+, qtwayland
+, qt5compat
+, qtmultimedia
+, qtspeech
+, wrapQtAppsHook
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "goldendict-ng";
+  version = "24.01.22";
+
+  src = fetchFromGitHub {
+    owner = "xiaoyifang";
+    repo = "goldendict-ng";
+    rev = "v${finalAttrs.version}-LoongYear.3dddb3be";
+    hash = "sha256-+OiZEkhNV06fZXPXv9zDzgJS5M3isHlcOXee3p/ejpw=";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake wrapQtAppsHook wrapGAppsHook ];
+  buildInputs = [
+    qtbase
+    qtsvg
+    qttools
+    qtwebengine
+    qt5compat
+    qtmultimedia
+    qtspeech
+    qtwayland
+    libvorbis
+    tomlplusplus
+    fmt
+    hunspell
+    xz
+    lzo
+    libXtst
+    bzip2
+    libiconv
+    opencc
+    libeb
+    ffmpeg
+    xapian
+    libzim
+  ];
+
+  # to prevent double wrapping of wrapQtApps and wrapGApps
+  dontWrapGApps = true;
+
+  preFixup = ''
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  cmakeFlags = [
+    "-DWITH_XAPIAN=ON"
+    "-DWITH_ZIM=ON"
+    "-DWITH_FFMPEG_PLAYER=ON"
+    "-DWITH_EPWING_SUPPORT=ON"
+    "-DUSE_SYSTEM_FMT=ON"
+    "-DUSE_SYSTEM_TOML=ON"
+  ];
+
+  meta = with lib; {
+    homepage = "https://xiaoyifang.github.io/goldendict-ng/";
+    description = "An advanced multi-dictionary lookup program";
+    platforms = platforms.linux;
+    mainProgram = "goldendict";
+    maintainers = with maintainers; [ slbtty michojel ];
+    license = licenses.gpl3Plus;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-check-for-updates.patch b/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-check-for-updates.patch
new file mode 100644
index 000000000000..31c7a6382292
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-check-for-updates.patch
@@ -0,0 +1,49 @@
+diff --git i/config.cc w/config.cc
+index 04b63f5..7a453d9 100644
+--- i/config.cc
++++ w/config.cc
+@@ -182,7 +182,7 @@ Preferences::Preferences():
+   pronounceOnLoadPopup( false ),
+   useInternalPlayer( InternalPlayerBackend::anyAvailable() ),
+   internalPlayerBackend( InternalPlayerBackend::defaultBackend() ),
+-  checkForNewReleases( true ),
++  checkForNewReleases( false ),
+   disallowContentFromOtherSites( false ),
+   enableWebPlugins( false ),
+   hideGoldenDictHeader( false ),
+@@ -867,8 +867,8 @@ Class load() THROW_SPEC( exError )
+       c.preferences.proxyServer.systemProxyPassword = proxy.namedItem( "systemProxyPassword" ).toElement().text();
+     }
+ 
+-    if ( !preferences.namedItem( "checkForNewReleases" ).isNull() )
+-      c.preferences.checkForNewReleases = ( preferences.namedItem( "checkForNewReleases" ).toElement().text() == "1" );
++    //if ( !preferences.namedItem( "checkForNewReleases" ).isNull() )
++    //  c.preferences.checkForNewReleases = ( preferences.namedItem( "checkForNewReleases" ).toElement().text() == "1" );
+ 
+     if ( !preferences.namedItem( "disallowContentFromOtherSites" ).isNull() )
+       c.preferences.disallowContentFromOtherSites = ( preferences.namedItem( "disallowContentFromOtherSites" ).toElement().text() == "1" );
+@@ -1819,9 +1819,9 @@ void save( Class const & c ) THROW_SPEC( exError )
+       proxy.appendChild( opt );
+     }
+ 
+-    opt = dd.createElement( "checkForNewReleases" );
+-    opt.appendChild( dd.createTextNode( c.preferences.checkForNewReleases ? "1" : "0" ) );
+-    preferences.appendChild( opt );
++    //opt = dd.createElement( "checkForNewReleases" );
++    //opt.appendChild( dd.createTextNode( c.preferences.checkForNewReleases ? "1" : "0" ) );
++    //preferences.appendChild( opt );
+ 
+     opt = dd.createElement( "disallowContentFromOtherSites" );
+     opt.appendChild( dd.createTextNode( c.preferences.disallowContentFromOtherSites ? "1" : "0" ) );
+diff --git i/preferences.cc w/preferences.cc
+index 72c3147..7e48f00 100644
+--- i/preferences.cc
++++ w/preferences.cc
+@@ -314,6 +314,7 @@ Preferences::Preferences( QWidget * parent, Config::Class & cfg_ ):
+            this, SLOT( customProxyToggled( bool ) ) );
+ 
+   ui.checkForNewReleases->setChecked( p.checkForNewReleases );
++  ui.checkForNewReleases->setEnabled( false );
+   ui.disallowContentFromOtherSites->setChecked( p.disallowContentFromOtherSites );
+   ui.enableWebPlugins->setChecked( p.enableWebPlugins );
+   ui.hideGoldenDictHeader->setChecked( p.hideGoldenDictHeader );
diff --git a/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-use-maclibs.patch b/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-use-maclibs.patch
new file mode 100644
index 000000000000..7a5ca0f7f3c8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/goldendict/0001-dont-use-maclibs.patch
@@ -0,0 +1,62 @@
+diff --git i/goldendict.pro w/goldendict.pro
+index 4a4a3094..082b728f 100644
+--- i/goldendict.pro
++++ w/goldendict.pro
+@@ -212,22 +212,19 @@ mac {
+         -llzo2
+     !CONFIG( no_ffmpeg_player ) {
+         LIBS += -lao \
+-            -lswresample-gd \
+-            -lavutil-gd \
+-            -lavformat-gd \
+-            -lavcodec-gd
++            -lswresample \
++            -lavutil \
++            -lavformat \
++            -lavcodec
+     }
+-    INCLUDEPATH = $${PWD}/maclibs/include
+-    LIBS += -L$${PWD}/maclibs/lib -framework AppKit -framework Carbon
++    LIBS += -framework AppKit -framework Carbon
+     OBJECTIVE_SOURCES += lionsupport.mm \
+                          machotkeywrapper.mm \
+                          macmouseover.mm \
+                          speechclient_mac.mm
+     ICON = icons/macicon.icns
+     QMAKE_INFO_PLIST = myInfo.plist
+-    QMAKE_POST_LINK = mkdir -p GoldenDict.app/Contents/Frameworks & \
+-                      cp -nR $${PWD}/maclibs/lib/ GoldenDict.app/Contents/Frameworks/ & \
+-                      mkdir -p GoldenDict.app/Contents/MacOS/locale & \
++    QMAKE_POST_LINK = mkdir -p GoldenDict.app/Contents/MacOS/locale & \
+                       cp -R locale/*.qm GoldenDict.app/Contents/MacOS/locale/ & \
+                       mkdir -p GoldenDict.app/Contents/MacOS/help & \
+                       cp -R $${PWD}/help/*.qch GoldenDict.app/Contents/MacOS/help/
+@@ -235,15 +232,6 @@ mac {
+     CONFIG += zim_support
+     !CONFIG( no_chinese_conversion_support ) {
+         CONFIG += chinese_conversion_support
+-        CONFIG( x86 ) {
+-            QMAKE_POST_LINK += & mkdir -p GoldenDict.app/Contents/MacOS/opencc & \
+-                                 cp -R $${PWD}/opencc/*.json GoldenDict.app/Contents/MacOS/opencc/ & \
+-                                 cp -R $${PWD}/opencc/*.ocd GoldenDict.app/Contents/MacOS/opencc/
+-        } else {
+-            QMAKE_POST_LINK += & mkdir -p GoldenDict.app/Contents/MacOS/opencc & \
+-                                 cp -R $${PWD}/opencc/x64/*.json GoldenDict.app/Contents/MacOS/opencc/ & \
+-                                 cp -R $${PWD}/opencc/x64/*.ocd GoldenDict.app/Contents/MacOS/opencc/
+-        }
+     }
+ }
+ DEFINES += PROGRAM_VERSION=\\\"$$VERSION\\\"
+diff --git i/tiff.cc w/tiff.cc
+index e3cb8bf5..95dd812f 100644
+--- i/tiff.cc
++++ w/tiff.cc
+@@ -5,7 +5,7 @@
+ 
+ #include "tiff.hh"
+ 
+-#if defined (Q_OS_MAC) || defined (Q_OS_WIN)
++#if defined (Q_OS_WIN)
+ #include "tiff/tiff.h"
+ #include "tiff/tiffio.h"
+ #else
diff --git a/nixpkgs/pkgs/applications/misc/goldendict/default.nix b/nixpkgs/pkgs/applications/misc/goldendict/default.nix
new file mode 100644
index 000000000000..a339e399e33d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/goldendict/default.nix
@@ -0,0 +1,71 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config
+, libXtst, libvorbis, hunspell, lzo, xz, bzip2, libiconv
+, qtbase, qtsvg, qtwebkit, qtx11extras, qttools, qmake
+, wrapQtAppsHook
+, wrapGAppsHook
+, withCC ? true, opencc
+, withEpwing ? true, libeb
+, withExtraTiff ? true, libtiff
+, withFFmpeg ? true, libao, ffmpeg
+, withMultimedia ? true
+, withZim ? true, zstd }:
+
+stdenv.mkDerivation rec {
+  pname = "goldendict";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "goldendict";
+    repo = pname;
+    rev = version;
+    hash = "sha256-80o8y+mbzpyMQYUGHYs/zgQT23nLVCs7Jcr8FbbXn8M=";
+  };
+
+  patches = [
+    ./0001-dont-check-for-updates.patch
+    ./0001-dont-use-maclibs.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace goldendict.pro \
+      --replace "hunspell-1.6.1" "hunspell-${lib.versions.majorMinor hunspell.version}" \
+      --replace "opencc.2" "opencc"
+  '';
+
+  nativeBuildInputs = [ pkg-config qmake wrapQtAppsHook wrapGAppsHook ];
+  buildInputs = [
+    qtbase qtsvg qtwebkit qttools
+    libvorbis hunspell xz lzo
+  ] ++ lib.optionals stdenv.isLinux [ qtx11extras libXtst ]
+    ++ lib.optionals stdenv.isDarwin [ bzip2 libiconv ]
+    ++ lib.optional withCC opencc
+    ++ lib.optional withEpwing libeb
+    ++ lib.optional withExtraTiff libtiff
+    ++ lib.optionals withFFmpeg [ libao ffmpeg ]
+    ++ lib.optional withZim zstd;
+
+  qmakeFlags = with lib; [
+    "goldendict.pro"
+    (optional withCC "CONFIG+=chinese_conversion_support")
+    (optional (!withCC) "CONFIG+=no_chinese_conversion_support")
+    (optional (!withEpwing) "CONFIG+=no_epwing_support")
+    (optional (!withExtraTiff) "CONFIG+=no_extra_tiff_handler")
+    (optional (!withFFmpeg) "CONFIG+=no_ffmpeg_player")
+    (optional (!withMultimedia)"CONFIG+=no_qtmultimedia_player")
+    (optional withZim "CONFIG+=zim_support")
+  ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    mv GoldenDict.app $out/Applications
+  '';
+
+  meta = with lib; {
+    homepage = "http://goldendict.org/";
+    description = "A feature-rich dictionary lookup program";
+    platforms = with platforms; linux ++ darwin;
+    mainProgram = "goldendict";
+    maintainers = with maintainers; [ gebner astsmtl sikmir ];
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gollum/Gemfile b/nixpkgs/pkgs/applications/misc/gollum/Gemfile
new file mode 100644
index 000000000000..5a35216de1fb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gollum/Gemfile
@@ -0,0 +1,10 @@
+source 'https://rubygems.org'
+
+gem 'gollum'
+
+# Support for extra markups
+gem 'asciidoctor' # AsciiDoc
+gem 'creole'      # Creole
+gem 'wikicloth'   # MediaWiki
+gem 'org-ruby'    # Org
+gem 'RedCloth'    # Textile
diff --git a/nixpkgs/pkgs/applications/misc/gollum/Gemfile.lock b/nixpkgs/pkgs/applications/misc/gollum/Gemfile.lock
new file mode 100644
index 000000000000..fc707ca3c547
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gollum/Gemfile.lock
@@ -0,0 +1,147 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    RedCloth (4.3.2)
+    asciidoctor (2.0.18)
+    builder (3.2.4)
+    concurrent-ruby (1.2.2)
+    crass (1.0.6)
+    creole (0.5.0)
+    execjs (2.8.1)
+    expression_parser (0.9.0)
+    ffi (1.15.5)
+    gemojione (4.3.3)
+      json
+    github-markup (4.0.1)
+    gollum (5.3.2)
+      gemojione (~> 4.1)
+      gollum-lib (>= 5.2.3, < 6.0)
+      i18n (~> 1.8)
+      kramdown (~> 2.3)
+      kramdown-parser-gfm (~> 1.1.0)
+      mustache-sinatra (~> 2.0)
+      octicons (~> 12.0)
+      rdoc (~> 6)
+      rss (~> 0.2.9)
+      sass (~> 3.5)
+      sinatra (~> 2.0)
+      sinatra-contrib (~> 2.0)
+      sprockets (~> 3.7)
+      sprockets-helpers (~> 1.2)
+      therubyrhino (~> 2.1.0)
+      uglifier (~> 4.2)
+      useragent (~> 0.16.2)
+      webrick (~> 1.7)
+    gollum-lib (5.2.4)
+      gemojione (~> 4.1)
+      github-markup (~> 4.0)
+      gollum-rugged_adapter (~> 2.0)
+      loofah (~> 2.3)
+      nokogiri (~> 1.8)
+      octicons (~> 12.0)
+      rouge (~> 3.1)
+      twitter-text (= 1.14.7)
+    gollum-rugged_adapter (2.1.0)
+      mime-types (~> 3.4)
+      rugged (~> 1.5)
+    htmlentities (4.3.4)
+    i18n (1.13.0)
+      concurrent-ruby (~> 1.0)
+    json (2.6.3)
+    kramdown (2.4.0)
+      rexml
+    kramdown-parser-gfm (1.1.0)
+      kramdown (~> 2.0)
+    loofah (2.20.0)
+      crass (~> 1.0.2)
+      nokogiri (>= 1.5.9)
+    mime-types (3.4.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2023.0218.1)
+    mini_portile2 (2.8.2)
+    multi_json (1.15.0)
+    mustache (1.1.1)
+    mustache-sinatra (2.0.0)
+      mustache (~> 1.0)
+    mustermann (2.0.2)
+      ruby2_keywords (~> 0.0.1)
+    nokogiri (1.14.3)
+      mini_portile2 (~> 2.8.0)
+      racc (~> 1.4)
+    octicons (12.1.0)
+      nokogiri (>= 1.6.3.1)
+    org-ruby (0.9.12)
+      rubypants (~> 0.2)
+    psych (5.1.0)
+      stringio
+    racc (1.6.2)
+    rack (2.2.7)
+    rack-protection (2.2.4)
+      rack
+    rb-fsevent (0.11.2)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    rdoc (6.5.0)
+      psych (>= 4.0.0)
+    rexml (3.2.5)
+    rouge (3.30.0)
+    rss (0.2.9)
+      rexml
+    ruby2_keywords (0.0.5)
+    rubypants (0.7.1)
+    rugged (1.6.3)
+    sass (3.7.4)
+      sass-listen (~> 4.0.0)
+    sass-listen (4.0.0)
+      rb-fsevent (~> 0.9, >= 0.9.4)
+      rb-inotify (~> 0.9, >= 0.9.7)
+    sinatra (2.2.4)
+      mustermann (~> 2.0)
+      rack (~> 2.2)
+      rack-protection (= 2.2.4)
+      tilt (~> 2.0)
+    sinatra-contrib (2.2.4)
+      multi_json
+      mustermann (~> 2.0)
+      rack-protection (= 2.2.4)
+      sinatra (= 2.2.4)
+      tilt (~> 2.0)
+    sprockets (3.7.2)
+      concurrent-ruby (~> 1.0)
+      rack (> 1, < 3)
+    sprockets-helpers (1.4.0)
+      sprockets (>= 2.2)
+    stringio (3.0.6)
+    therubyrhino (2.1.2)
+      therubyrhino_jar (>= 1.7.4, < 1.7.9)
+    therubyrhino_jar (1.7.8)
+    tilt (2.1.0)
+    twitter-text (1.14.7)
+      unf (~> 0.1.0)
+    uglifier (4.2.0)
+      execjs (>= 0.3.0, < 3)
+    unf (0.1.4)
+      unf_ext
+    unf_ext (0.0.8.2)
+    useragent (0.16.10)
+    webrick (1.8.1)
+    wikicloth (0.8.3)
+      builder
+      expression_parser
+      htmlentities
+      nokogiri
+      twitter-text
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  RedCloth
+  asciidoctor
+  creole
+  gollum
+  org-ruby
+  wikicloth
+
+BUNDLED WITH
+   2.4.12
diff --git a/nixpkgs/pkgs/applications/misc/gollum/default.nix b/nixpkgs/pkgs/applications/misc/gollum/default.nix
new file mode 100644
index 000000000000..a345896ca8d9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gollum/default.nix
@@ -0,0 +1,24 @@
+{ lib, bundlerApp, bundlerUpdateScript, ruby, makeWrapper, git, docutils, nixosTests }:
+
+bundlerApp rec {
+  pname = "gollum";
+  exes = [ "gollum" ];
+
+  inherit ruby;
+  gemdir = ./.;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  passthru.updateScript = bundlerUpdateScript "gollum";
+  passthru.tests.gollum = nixosTests.gollum;
+
+  meta = with lib; {
+    description = "A simple, Git-powered wiki with a sweet API and local frontend";
+    homepage = "https://github.com/gollum/gollum";
+    changelog = "https://github.com/gollum/gollum/blob/HEAD/HISTORY.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ erictapen jgillich nicknovitski bbenno ];
+    platforms = platforms.unix;
+    mainProgram = "gollum";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gollum/gemset.nix b/nixpkgs/pkgs/applications/misc/gollum/gemset.nix
new file mode 100644
index 000000000000..8d106d5bc8b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gollum/gemset.nix
@@ -0,0 +1,632 @@
+{
+  asciidoctor = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "11z3vnd8vh3ny1vx69bjrbck5b2g8zsbj94npyadpn7fdp8y3ldv";
+      type = "gem";
+    };
+    version = "2.0.18";
+  };
+  builder = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "045wzckxpwcqzrjr353cxnyaxgf0qg22jh00dcx7z38cys5g1jlr";
+      type = "gem";
+    };
+    version = "3.2.4";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
+      type = "gem";
+    };
+    version = "1.2.2";
+  };
+  crass = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pfl5c0pyqaparxaqxi6s4gfl21bdldwiawrc0aknyvflli60lfw";
+      type = "gem";
+    };
+    version = "1.0.6";
+  };
+  creole = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00rcscz16idp6dx0dk5yi5i0fz593i3r6anbn5bg2q07v3i025wm";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+  execjs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "121h6af4i6wr3wxvv84y53jcyw2sk71j5wsncm6wq6yqrwcrk4vd";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  expression_parser = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1938z3wmmdabqxlh5d5c56xfg1jc6z15p7zjyhvk7364zwydnmib";
+      type = "gem";
+    };
+    version = "0.9.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  gemojione = {
+    dependencies = ["json"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fwd523pgr72w3w6jwpz9i6sggvz52d7831a1s4y3lv8m50j6ima";
+      type = "gem";
+    };
+    version = "4.3.3";
+  };
+  github-markup = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p40hbrrzq9gypkx0p8wqdqa2gfmmw2cd9a0sv2dw1nnk1qbcl8y";
+      type = "gem";
+    };
+    version = "4.0.1";
+  };
+  gollum = {
+    dependencies = ["gemojione" "gollum-lib" "i18n" "kramdown" "kramdown-parser-gfm" "mustache-sinatra" "octicons" "rdoc" "rss" "sass" "sinatra" "sinatra-contrib" "sprockets" "sprockets-helpers" "therubyrhino" "uglifier" "useragent" "webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07lv4idxxghmq18k2r42l7kxz204l2fgri5xjapl79yy9dk53s5x";
+      type = "gem";
+    };
+    version = "5.3.2";
+  };
+  gollum-lib = {
+    dependencies = ["gemojione" "github-markup" "gollum-rugged_adapter" "loofah" "nokogiri" "octicons" "rouge" "twitter-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15nkslf8vm4gr8wbicm5xwsmgqy22zy3gb6pgdzdm78vyqva055d";
+      type = "gem";
+    };
+    version = "5.2.4";
+  };
+  gollum-rugged_adapter = {
+    dependencies = ["mime-types" "rugged"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05v24lpkssn1k07n28bw4yh7w1ygsv4cfwz046jn9lmrh3v8q4d1";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  htmlentities = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nkklqsn8ir8wizzlakncfv42i32wc0w9hxp00hvdlgjr7376nhj";
+      type = "gem";
+    };
+    version = "4.3.4";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1yk33slipi3i1kydzrrchbi7cgisaxym6pgwlzx7ir8vjk6wl90x";
+      type = "gem";
+    };
+    version = "1.13.0";
+  };
+  json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6";
+      type = "gem";
+    };
+    version = "2.6.3";
+  };
+  kramdown = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ic14hdcqxn821dvzki99zhmcy130yhv5fqfffkcf87asv5mnbmn";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  kramdown-parser-gfm = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  loofah = {
+    dependencies = ["crass" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mi4ia13fisc97fzd8xcd9wkjdki7zfbmdn1xkdzplicir68gyp8";
+      type = "gem";
+    };
+    version = "2.20.0";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pky3vzaxlgm9gw5wlqwwi7wsw3jrglrfflrppvvnsrlaiz043z9";
+      type = "gem";
+    };
+    version = "3.2023.0218.1";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z7f38iq37h376n9xbl4gajdrnwzq284c9v1py4imw3gri2d5cj6";
+      type = "gem";
+    };
+    version = "2.8.2";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pb1g1y3dsiahavspyzkdy39j4q377009f6ix0bh1ag4nqw43l0z";
+      type = "gem";
+    };
+    version = "1.15.0";
+  };
+  mustache = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l0p4wx15mi3wnamfv92ipkia4nsx8qi132c6g51jfdma3fiz2ch";
+      type = "gem";
+    };
+    version = "1.1.1";
+  };
+  mustache-sinatra = {
+    dependencies = ["mustache"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03f2wdih6hnnm9iclfwi53dx56knpshv8wnf4cglp7kjx358036i";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  mustermann = {
+    dependencies = ["ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m70qz27mlv2rhk4j1li6pw797gmiwwqg02vcgxcxr1rq2v53rnb";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0fnw0z8zl8b5k35g9m5hhc1g4s6ajzjinhyxnqjrx7l7p07fw71v";
+      type = "gem";
+    };
+    version = "1.14.3";
+  };
+  octicons = {
+    dependencies = ["nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kpy7h7pffjqb2xbmld7nwnb2x6rll3yz5ccr7nrqnrk2d3cmpmn";
+      type = "gem";
+    };
+    version = "12.1.0";
+  };
+  org-ruby = {
+    dependencies = ["rubypants"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0x69s7aysfiwlcpd9hkvksfyld34d8kxr62adb59vjvh8hxfrjwk";
+      type = "gem";
+    };
+    version = "0.9.12";
+  };
+  psych = {
+    dependencies = ["stringio"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1msambb54r3d1sg6smyj4k2pj9h9lz8jq4jamip7ivcyv32a85vz";
+      type = "gem";
+    };
+    version = "5.1.0";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09jgz6r0f7v84a7jz9an85q8vvmp743dqcsdm3z9c8rqcqv6pljq";
+      type = "gem";
+    };
+    version = "1.6.2";
+  };
+  rack = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "16w217k9z02c4hqizym8dkj6bqmmzx4qdvqpnskgzf174a5pwdxk";
+      type = "gem";
+    };
+    version = "2.2.7";
+  };
+  rack-protection = {
+    dependencies = ["rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d6irsigm0i4ig1m47c94kixi3wb8jnxwvwkl8qxvyngmb73srl2";
+      type = "gem";
+    };
+    version = "2.2.4";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rdoc = {
+    dependencies = ["psych"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "05r2cxscapr9saqjw8dlp89as7jvc2mlz1h5kssrmkbz105qmfcm";
+      type = "gem";
+    };
+    version = "6.5.0";
+  };
+  RedCloth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m9dv7ya9q93r8x1pg2gi15rxlbck8m178j1fz7r5v6wr1avrrqy";
+      type = "gem";
+    };
+    version = "4.3.2";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dnfkrk8xx2m8r3r9m2p5xcq57viznyc09k7r3i4jbm758i57lx3";
+      type = "gem";
+    };
+    version = "3.30.0";
+  };
+  rss = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b1zx07kr64kkpm4lssd4r1a1qyr829ppmfl85i4adcvx9mqfid0";
+      type = "gem";
+    };
+    version = "0.2.9";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  rubypants = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0kv2way45d2dz3h5b7wxyw36clvlwrz7ydf6699d0za5vm56gsrh";
+      type = "gem";
+    };
+    version = "0.7.1";
+  };
+  rugged = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "016bawsahkhxx7p8azxirpl7y2y7i8a027pj8910gwf6ipg329in";
+      type = "gem";
+    };
+    version = "1.6.3";
+  };
+  sass = {
+    dependencies = ["sass-listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0p95lhs0jza5l7hqci1isflxakz83xkj97lkvxl919is0lwhv2w0";
+      type = "gem";
+    };
+    version = "3.7.4";
+  };
+  sass-listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xw3q46cmahkgyldid5hwyiwacp590zj2vmswlll68ryvmvcp7df";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  sinatra = {
+    dependencies = ["mustermann" "rack" "rack-protection" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wkc079h6hzq737j4wycpnv7c38mhd0rl33pszyy7768zzvyjc9y";
+      type = "gem";
+    };
+    version = "2.2.4";
+  };
+  sinatra-contrib = {
+    dependencies = ["multi_json" "mustermann" "rack-protection" "sinatra" "tilt"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s6c1k3zzxp3xa7libvlpqaby27124rccyyxcsly04ih904cxk33";
+      type = "gem";
+    };
+    version = "2.2.4";
+  };
+  sprockets = {
+    dependencies = ["concurrent-ruby" "rack"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay";
+      type = "gem";
+    };
+    version = "3.7.2";
+  };
+  sprockets-helpers = {
+    dependencies = ["sprockets"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0513ma356g05lsskhsb363263177h6ccmp475il0p69y18his2ij";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  stringio = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10w46rlh844kax248l1m3pyrj94n1qpc9691j8r5v0rzdxibpy7v";
+      type = "gem";
+    };
+    version = "3.0.6";
+  };
+  therubyrhino = {
+    dependencies = ["therubyrhino_jar"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "034mzpkxm3zjsi4rwa45dhhgq2b9vkabs5bnzbl1d3ka7210b3fc";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  therubyrhino_jar = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "149a5lsvn2n7k7vcfs77n836q1alv8yjh0503sf9cs65p974ah25";
+      type = "gem";
+    };
+    version = "1.7.8";
+  };
+  tilt = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qmhi6d9przjzhsyk9g5pq2j75c656msh6xzprqd2mxgphf23jxs";
+      type = "gem";
+    };
+    version = "2.1.0";
+  };
+  twitter-text = {
+    dependencies = ["unf"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1732h7hy1k152w8wfvjsx7b79alk45i5imwd37ia4qcx8hfm3gvg";
+      type = "gem";
+    };
+    version = "1.14.7";
+  };
+  uglifier = {
+    dependencies = ["execjs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wgh7bzy68vhv9v68061519dd8samcy8sazzz0w3k8kqpy3g4s5f";
+      type = "gem";
+    };
+    version = "4.2.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";
+  };
+  useragent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fv5kvq494swy0p17h9qya9r50w15xsi9zmvhzb8gh55kq6ki50p";
+      type = "gem";
+    };
+    version = "0.16.10";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qm7s0gr2pmfcl7dxrmq38asaza4w0i2n9my4yzs499j731wh8r";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+  wikicloth = {
+    dependencies = ["builder" "expression_parser" "htmlentities" "nokogiri" "twitter-text"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0c78r1rg93mb5rcrfxl01b162ma9sh46dhjksc4c9dngg62nhbjh";
+      type = "gem";
+    };
+    version = "0.8.3";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gomatrix/default.nix b/nixpkgs/pkgs/applications/misc/gomatrix/default.nix
new file mode 100644
index 000000000000..001b57d06eec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gomatrix/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gomatrix";
+  version = "101.0.0";
+
+  src = fetchFromGitHub {
+    owner = "GeertJohan";
+    repo = "gomatrix";
+    rev = "v${version}";
+    hash = "sha256-VeRHVR8InfU+vEw2F/w3KFbNVSKS8ziRlQ98f3cuBfM=";
+  };
+
+  vendorHash = "sha256-yQSsxiWkihpoYBH9L6by/D2alqECoUEG4ei5T+B9gPs=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = ''Displays "The Matrix" in a terminal'';
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ skykanin ];
+    homepage = "https://github.com/GeertJohan/gomatrix";
+    mainProgram = "gomatrix";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/googleearth-pro/default.nix b/nixpkgs/pkgs/applications/misc/googleearth-pro/default.nix
new file mode 100644
index 000000000000..59912ef6b1ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/googleearth-pro/default.nix
@@ -0,0 +1,125 @@
+{ lib
+, stdenv
+, mkDerivation
+, fetchurl
+, freetype
+, glib
+, libGL
+, libGLU
+, libSM
+
+, libXrender
+, libX11
+
+, libxcb
+, sqlite
+, zlib
+, fontconfig
+, dpkg
+, libproxy
+, libxml2
+, gst_all_1
+, dbus
+, makeWrapper
+
+, cups
+, alsa-lib
+
+, xkeyboardconfig
+, autoPatchelfHook
+}:
+let
+  arch =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "amd64"
+    else throw "Unsupported system ${stdenv.hostPlatform.system} ";
+in
+mkDerivation rec {
+  pname = "googleearth-pro";
+  version = "7.3.4.8248";
+
+  src = fetchurl {
+    url = "https://dl.google.com/linux/earth/deb/pool/main/g/google-earth-pro-stable/google-earth-pro-stable_${version}-r0_${arch}.deb";
+    sha256 = "1pbapi267snlrjari5k93y6kbrjsqhqxgkxxqaqv4r25az00dx6d";
+  };
+
+  nativeBuildInputs = [ dpkg makeWrapper autoPatchelfHook ];
+  propagatedBuildInputs = [ xkeyboardconfig ];
+  buildInputs = [
+    dbus
+    cups
+    fontconfig
+    freetype
+    glib
+    gst_all_1.gst-plugins-base
+    gst_all_1.gstreamer
+    libGL
+    libGLU
+    libSM
+    libX11
+    libXrender
+    libproxy
+    libxcb
+    libxml2
+    sqlite
+    zlib
+    alsa-lib
+  ];
+
+  doInstallCheck = true;
+
+  dontBuild = true;
+
+  unpackPhase = ''
+    # deb file contains a setuid binary, so 'dpkg -x' doesn't work here
+    mkdir deb
+    dpkg --fsys-tarfile ${src} | tar --extract -C deb
+  '';
+
+  installPhase =''
+    runHook preInstall
+
+    mkdir $out
+    mv deb/usr/* $out/
+    rmdir deb/usr
+    mv deb/* $out/
+    rm $out/bin/google-earth-pro $out/opt/google/earth/pro/googleearth
+
+    # patch and link googleearth binary
+    ln -s $out/opt/google/earth/pro/googleearth-bin $out/bin/googleearth-pro
+
+    # patch and link gpsbabel binary
+    ln -s $out/opt/google/earth/pro/gpsbabel $out/bin/gpsbabel
+
+    # Add desktop config file and icons
+    mkdir -p $out/share/{applications,icons/hicolor/{16x16,22x22,24x24,32x32,48x48,64x64,128x128,256x256}/apps,pixmaps}
+    ln -s $out/opt/google/earth/pro/google-earth-pro.desktop $out/share/applications/google-earth-pro.desktop
+    sed -i -e "s|Exec=.*|Exec=$out/bin/googleearth-pro|g" $out/opt/google/earth/pro/google-earth-pro.desktop
+    for size in 16 22 24 32 48 64 128 256; do
+      ln -s $out/opt/google/earth/pro/product_logo_"$size".png $out/share/icons/hicolor/"$size"x"$size"/apps/google-earth-pro.png
+    done
+    ln -s $out/opt/google/earth/pro/product_logo_256.png $out/share/pixmaps/google-earth-pro.png
+
+    runHook postInstall
+  '';
+
+  installCheckPhase = ''
+    $out/bin/gpsbabel -V > /dev/null
+  '';
+
+  # wayland is not supported by Qt included in binary package, so make sure it uses xcb
+  postFixup = ''
+    wrapProgram $out/bin/googleearth-pro \
+      --set QT_QPA_PLATFORM xcb \
+      --set QT_XKB_CONFIG_ROOT "${xkeyboardconfig}/share/X11/xkb"
+  '';
+
+  meta = with lib; {
+    description = "A world sphere viewer";
+    homepage = "https://www.google.com/earth/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ friedelino shamilton ];
+    platforms = platforms.linux;
+    knownVulnerabilities = [ "Includes vulnerable bundled libraries." ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/googler/default.nix b/nixpkgs/pkgs/applications/misc/googler/default.nix
new file mode 100644
index 000000000000..9e204ed636f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/googler/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, python, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "googler";
+  version = "4.3.2";
+
+  src = fetchFromGitHub {
+    owner = "jarun";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PgWg396AQ15CAnfTXGDpSg1UXx7mNCtknEjJd/KV4MU=";
+  };
+
+  buildInputs = [ python ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    installShellCompletion --bash --name googler.bash auto-completion/bash/googler-completion.bash
+    installShellCompletion --fish auto-completion/fish/googler.fish
+    installShellCompletion --zsh auto-completion/zsh/_googler
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jarun/googler";
+    description = "Google Search, Google Site Search, Google News from the terminal";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ koral Br1ght0ne ];
+    platforms = python.meta.platforms;
+    mainProgram = "googler";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gopacked/default.nix b/nixpkgs/pkgs/applications/misc/gopacked/default.nix
new file mode 100644
index 000000000000..1af03a1528a2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gopacked/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gopacked";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "tulir";
+    repo = "gopacked";
+    rev = "v${version}";
+    hash = "sha256-PpOLLqgUQf09grZlJ7bXTxAowzDusmVN8PHfaGlGGQ8=";
+  };
+
+  vendorHash = "sha256-ooxVXNbqoh3XX3yFemAyqISNZ+PC8WJUe+ch2OnIdDo=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A simple text-based Minecraft modpack manager";
+    license = licenses.agpl3;
+    homepage = src.meta.homepage;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gostatic/default.nix b/nixpkgs/pkgs/applications/misc/gostatic/default.nix
new file mode 100644
index 000000000000..b7967f6f4e4f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gostatic/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+}:
+
+buildGoModule rec {
+  pname = "gostatic";
+  version = "2.35";
+
+  src = fetchFromGitHub {
+    owner = "piranha";
+    repo = pname;
+    rev = version;
+    hash = "sha256-pxk9tauB7u0oe6g4maHh+dREZXKwMz44v3KB43yYW6c=";
+  };
+
+  vendorHash = "sha256-9YCt9crLuYjd+TUXJyx/EAYIMWM5TD+ZyzLeu0RMxVc=";
+
+  meta = with lib; {
+    description = "Fast static site generator";
+    homepage = "https://github.com/piranha/gostatic";
+    license = licenses.isc;
+    maintainers = with maintainers; [ urandom ];
+    mainProgram = "gostatic";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpa/default.nix b/nixpkgs/pkgs/applications/misc/gpa/default.nix
new file mode 100644
index 000000000000..cf6a915e29c1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpa/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, intltool, pkg-config, gtk2, gpgme, libgpg-error, libassuan }:
+
+stdenv.mkDerivation rec {
+  pname = "gpa";
+  version = "0.10.0";
+
+  src = fetchurl {
+    url = "mirror://gnupg/gpa/gpa-${version}.tar.bz2";
+    sha256 = "1cbpc45f8qbdkd62p12s3q2rdq6fa5xdzwmcwd3xrj55bzkspnwm";
+  };
+
+  nativeBuildInputs = [ intltool pkg-config ];
+  buildInputs = [ gtk2 gpgme libgpg-error libassuan ];
+
+  meta = with lib; {
+    description = "Graphical user interface for the GnuPG";
+    homepage = "https://www.gnupg.org/related_software/gpa/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    mainProgram = "gpa";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpg-mdp/default.nix b/nixpkgs/pkgs/applications/misc/gpg-mdp/default.nix
new file mode 100644
index 000000000000..08ab2a5b7d9f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpg-mdp/default.nix
@@ -0,0 +1,44 @@
+{ fetchurl, fetchpatch, lib, stdenv, ncurses, gnupg }:
+
+let version = "0.7.4";
+in stdenv.mkDerivation {
+  # mdp renamed to gpg-mdp because there is a mdp package already.
+  pname = "gpg-mdp";
+  inherit version;
+  meta = {
+    homepage = "https://tamentis.com/projects/mdp/";
+    license = [lib.licenses.isc];
+    description = "Manage your passwords with GnuPG and a text editor";
+  };
+  src = fetchurl {
+    url = "https://tamentis.com/projects/mdp/files/mdp-${version}.tar.gz";
+    sha256 = "04mdnx4ccpxf9m2myy9nvpl9ma4jgzmv9bkrzv2b9affzss3r34g";
+  };
+  patches = [
+    # Pull fix pending upstream inclusion for -fno-common toolchain support:
+    #   https://github.com/tamentis/mdp/pull/9
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/tamentis/mdp/commit/95c77de3beb96dc7c76ff36d3f3dfb18411d7c54.patch";
+      sha256 = "1j6yvjzkx31b758yav4arhlm5ig7phl8mgx4fcwj7lm2pfvzwcsz";
+    })
+  ];
+  buildInputs = [ ncurses ];
+  prePatch = ''
+    substituteInPlace ./configure \
+      --replace "alias echo=/bin/echo" ""
+
+    substituteInPlace ./src/config.c \
+      --replace "/usr/bin/gpg" "${gnupg}/bin/gpg" \
+      --replace "/usr/bin/vi" "vi"
+
+    substituteInPlace ./mdp.1 \
+      --replace "/usr/bin/gpg" "${gnupg}/bin/gpg"
+  '';
+  # we add symlinks to the binary and man page with the name 'gpg-mdp', in case
+  # the completely unrelated program also named 'mdp' is already installed.
+  postFixup = ''
+    ln -s $out/bin/mdp $out/bin/gpg-mdp
+    ln -s $out/share/man/man1/mdp.1.gz $out/share/man/man1/gpg-mdp.1.gz
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/misc/gphoto2/default.nix b/nixpkgs/pkgs/applications/misc/gphoto2/default.nix
new file mode 100644
index 000000000000..96eca30a4f49
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gphoto2/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, gettext
+, libexif
+, libgphoto2
+, libjpeg
+, libtool
+, popt
+, readline
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gphoto2";
+  version = "2.5.28";
+
+  src = fetchFromGitHub {
+    owner = "gphoto";
+    repo = "gphoto2";
+    rev = "v${version}";
+    sha256 = "sha256-t5EnM4WaDbOTPM+rJW+hQxBgNErnnZEN9lZvxTKoDhA=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    gettext
+    libtool
+  ];
+
+  buildInputs = [
+    libexif
+    libgphoto2
+    libjpeg
+    popt
+    readline
+  ];
+
+  meta = with lib; {
+    description = "A ready to use set of digital camera software applications";
+    longDescription = ''
+
+      A set of command line utilities for manipulating over 1400 different
+      digital cameras. Through libgphoto2, it supports PTP, MTP, and much more..
+
+    '';
+    homepage = "http://www.gphoto.org/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.jcumming ];
+    mainProgram = "gphoto2";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gphoto2/gphotofs.nix b/nixpkgs/pkgs/applications/misc/gphoto2/gphotofs.nix
new file mode 100644
index 000000000000..afb02c9937f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gphoto2/gphotofs.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, libtool, pkg-config, libgphoto2, fuse, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "gphoto2fs";
+  version = "0.5.0";
+  src = fetchurl {
+    url="mirror://sourceforge/gphoto/gphotofs/${version}/gphotofs-0.5.tar.bz2";
+    sha256 = "1k23ncbsbh64r7kz050bg31jqamchyswgg9izhzij758d7gc8vk7";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    libgphoto2 fuse glib libtool
+  ];
+
+  meta = with lib; {
+    description = "Fuse FS to mount a digital camera";
+    homepage = "http://www.gphoto.org/";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = with licenses; [ lgpl2 gpl2 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpsbabel/debian-patches.nix b/nixpkgs/pkgs/applications/misc/gpsbabel/debian-patches.nix
new file mode 100644
index 000000000000..34dd2db31c57
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpsbabel/debian-patches.nix
@@ -0,0 +1,26 @@
+# Generated by debian-patches.sh from debian-patches.txt
+let
+  prefix = "https://sources.debian.org/data/main/g/gpsbabel/1.8.0+ds-4/debian/patches";
+in
+[
+  {
+    url = "${prefix}/gpsbabelfe_disable_version_check";
+    sha256 = "1kk1iq4mbmldl1jjvd4bphr0165rgn2gpqdyyd1vq8v8wjx942sb";
+  }
+  {
+    url = "${prefix}/gpsbabelfe_opt-in-for-usage-data-reporting";
+    sha256 = "0dr3jyn8sxx9vw3w11gir6jvshlda0ldmhlq4aq313xn6d1j8qv2";
+  }
+  {
+    url = "${prefix}/gpsbabelfe_do-not-check-for-newer-version";
+    sha256 = "0kmmxcq1k9p84v9cjagda1cqcc9p7p48i104l3z6clc17zixwgai";
+  }
+  {
+    url = "${prefix}/htmldoc-location";
+    sha256 = "0nk3gz3l0q68d7blzfkbkvr630xy8y7vlxalnzlbdigqcx7lk54f";
+  }
+  {
+    url = "${prefix}/Disable-donation-nagging";
+    sha256 = "11j2ffa0hn5cy8xw98jndkf735ar39sf6rl28bn91pxd38xyaz5b";
+  }
+]
diff --git a/nixpkgs/pkgs/applications/misc/gpsbabel/debian-patches.txt b/nixpkgs/pkgs/applications/misc/gpsbabel/debian-patches.txt
new file mode 100644
index 000000000000..012c28a37df2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpsbabel/debian-patches.txt
@@ -0,0 +1,6 @@
+gpsbabel/1.8.0+ds-4
+gpsbabelfe_disable_version_check
+gpsbabelfe_opt-in-for-usage-data-reporting
+gpsbabelfe_do-not-check-for-newer-version
+htmldoc-location
+Disable-donation-nagging
diff --git a/nixpkgs/pkgs/applications/misc/gpsbabel/default.nix b/nixpkgs/pkgs/applications/misc/gpsbabel/default.nix
new file mode 100644
index 000000000000..fbacfb6984c6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpsbabel/default.nix
@@ -0,0 +1,119 @@
+{ lib, stdenv, fetchFromGitHub, fetchurl, pkg-config, which
+, qmake, qttools, wrapQtAppsHook
+, libusb1, shapelib, zlib
+, withGUI ? false, qtserialport
+, withMapPreview ? (!stdenv.isDarwin), qtwebengine
+, withDoc ? false, docbook_xml_dtd_45, docbook_xsl, expat, fop, libxml2, libxslt, perl
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gpsbabel";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "gpsbabel";
+    repo = "gpsbabel";
+    rev = "gpsbabel_${lib.replaceStrings ["."] ["_"] version}";
+    sha256 = "sha256-0w8LsO+HwqZF8SQmwd8bCKma9PCM0hAzXhzWR4DgAHs=";
+  };
+
+  patches = map fetchurl (import ./debian-patches.nix);
+
+  postPatch = ''
+    patchShebangs testo
+  '' + lib.optionalString withDoc ''
+    substituteInPlace gbversion.h.qmake.in \
+      --replace /usr/share/doc $doc/share/doc
+
+    substituteInPlace testo.d/serialization.test \
+      --replace /usr/share/doc $doc/share/doc
+
+    substituteInPlace xmldoc/gpsbabel_man.xml \
+      --replace /usr/share/doc $doc/share/doc
+  '';
+
+  outputs = [ "out" ] ++ lib.optional withDoc "doc";
+
+  nativeBuildInputs = [ pkg-config qmake ]
+    ++ lib.optionals withGUI [ qttools wrapQtAppsHook ]
+    ++ lib.optionals withDoc [ docbook_xml_dtd_45 docbook_xsl expat fop libxml2 libxslt perl ];
+
+  buildInputs = [ libusb1 shapelib zlib ]
+    ++ lib.optional withGUI qtserialport
+    ++ lib.optional (withGUI && withMapPreview) qtwebengine;
+
+  nativeCheckInputs = [ libxml2 which ];
+
+  preConfigure = lib.optionalString withGUI ''
+    lrelease gui/*.ts gui/coretool/*.ts
+  '';
+
+  qmakeFlags = [
+    "WITH_LIBUSB=pkgconfig"
+    "WITH_SHAPELIB=pkgconfig"
+    "WITH_ZLIB=pkgconfig"
+  ] ++ lib.optionals (withGUI && !withMapPreview) [
+    "CONFIG+=disable-mappreview"
+  ];
+
+  makeFlags = lib.optional withGUI "gui"
+    ++ lib.optionals withDoc [ "gpsbabel.pdf" "gpsbabel.html" "gpsbabel.org" ];
+
+  # Floating point behavior on i686 causes nmea.test failures. Preventing
+  # extended precision fixes this problem.
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isi686 "-ffloat-store";
+
+  doCheck = true;
+
+  dontWrapQtApps = true;
+
+  installPhase = ''
+    install -Dm755 gpsbabel -t $out/bin
+  '' + lib.optionalString withGUI (if stdenv.isDarwin then ''
+    mkdir -p $out/Applications
+    mv gui/GPSBabelFE.app $out/Applications
+    install -Dm644 gui/*.qm gui/coretool/*.qm -t $out/Applications/GPSBabelFE.app/Contents/Resources/translations
+    ln -s $out/bin/gpsbabel $out/Applications/GPSBabelFE.app/Contents/MacOS
+  '' else ''
+    install -Dm755 gui/objects/gpsbabelfe -t $out/bin
+    install -Dm644 gui/gpsbabel.desktop -t $out/share/application
+    install -Dm644 gui/images/appicon.png $out/share/icons/hicolor/512x512/apps/gpsbabel.png
+    install -Dm644 gui/*.qm gui/coretool/*.qm -t $out/share/gpsbabel/translations
+  '') + lib.optionalString withDoc ''
+    install -Dm655 gpsbabel.{html,pdf} -t $doc/share/doc/gpsbabel
+    cp -r html $doc/share/doc/gpsbabel
+  '';
+
+  postFixup = lib.optionalString withGUI (if stdenv.isDarwin then ''
+    wrapQtApp "$out/Applications/GPSBabelFE.app/Contents/MacOS/GPSBabelFE"
+  '' else ''
+    wrapQtApp "$out/bin/gpsbabelfe"
+  '');
+
+  meta = with lib; {
+    description = "Convert, upload and download data from GPS and Map programs";
+    longDescription = ''
+      GPSBabel converts waypoints, tracks, and routes between popular
+      GPS receivers and mapping programs.  It also has powerful
+      manipulation tools for such data.
+
+      By flattening the Tower of Babel that the authors of various
+      programs for manipulating GPS data have imposed upon us, it
+      returns to us the ability to freely move our own waypoint data
+      between the programs and hardware we choose to use.
+
+      It contains extensive data manipulation abilities making it a
+      convenient for server-side processing or as the backend for
+      other tools.
+
+      It does not convert, transfer, send, or manipulate maps.  We
+      process data that may (or may not be) placed on a map, such as
+      waypoints, tracks, and routes.
+    '';
+    homepage = "https://www.gpsbabel.org/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+    mainProgram = "gpsbabel";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpscorrelate/default.nix b/nixpkgs/pkgs/applications/misc/gpscorrelate/default.nix
new file mode 100644
index 000000000000..67e246227f06
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpscorrelate/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, exiv2, libxml2, gtk3
+, libxslt, docbook_xsl, docbook_xml_dtd_42, desktop-file-utils, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gpscorrelate";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "dfandrich";
+    repo = pname;
+    rev = version;
+    sha256 = "1wkpb0nqnm0ik46hp2sibf96h2gxi6n951zm8c72scgmh4ciq4fl";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "gpscorrelate-2.0-exiv2-0.28.patch";
+      url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/sci-geosciences/gpscorrelate/files/gpscorrelate-2.0-exiv2-0.28.patch?id=002882203ad6a2b08ce035a18b95844a9f4b85d0";
+      hash = "sha256-/5czvSh2siPmohXWHQEg6VWCUQnZxEm2livLsEOAa6c=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    docbook_xml_dtd_42
+    docbook_xsl
+    libxslt
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    exiv2
+    gtk3
+    libxml2
+  ];
+
+  makeFlags = [
+    "prefix=${placeholder "out"}"
+    "CC=${stdenv.cc.targetPrefix}cc"
+    "CXX=${stdenv.cc.targetPrefix}c++"
+    "CFLAGS=-DENABLE_NLS"
+  ];
+
+  doCheck = true;
+
+  installTargets = [ "install" "install-po" "install-desktop-file" ];
+
+  meta = with lib; {
+    description = "A GPS photo correlation tool, to add EXIF geotags";
+
+    longDescription = ''
+      Digital cameras are cool.  So is GPS.  And, EXIF tags are really
+      cool too.
+
+      What happens when you merge the three?  You end up with a set of
+      photos taken with a digital camera that are "stamped" with the
+      location at which they were taken.
+
+      The EXIF standard defines a number of tags that are for use with GPS.
+
+      A variety of programs exist around the place to match GPS data
+      with digital camera photos, but most of them are Windows or
+      MacOS only.  Which doesn't really suit me that much. Also, each
+      one takes the GPS data in a different format.
+    '';
+
+    license = licenses.gpl2Plus;
+    homepage = "https://dfandrich.github.io/gpscorrelate/";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpsprune/default.nix b/nixpkgs/pkgs/applications/misc/gpsprune/default.nix
new file mode 100644
index 000000000000..293c3c5691ec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpsprune/default.nix
@@ -0,0 +1,55 @@
+{ fetchurl, lib, stdenv, makeDesktopItem, makeWrapper, unzip, jre, copyDesktopItems }:
+
+stdenv.mkDerivation rec {
+  pname = "gpsprune";
+  version = "23.2";
+
+  src = fetchurl {
+    url = "https://activityworkshop.net/software/gpsprune/gpsprune_${version}.jar";
+    sha256 = "sha256-r2iw1vINWgqxoW0Zc8Sloa+wN/GUbUQfJ0e2BSP9vxM=";
+  };
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+  buildInputs = [ jre ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "gpsprune";
+      exec = "gpsprune %F";
+      icon = "gpsprune";
+      desktopName = "GpsPrune";
+      genericName = "GPS Data Editor";
+      comment = meta.description;
+      categories = [ "Education" "Geoscience" ];
+      mimeTypes = [
+        "application/gpx+xml"
+        "application/vnd.google-earth.kml+xml"
+        "application/vnd.google-earth.kmz"
+      ];
+    })
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm644 ${src} $out/share/java/gpsprune.jar
+    makeWrapper ${jre}/bin/java $out/bin/gpsprune \
+      --add-flags "-jar $out/share/java/gpsprune.jar"
+    mkdir -p $out/share/pixmaps
+    ${unzip}/bin/unzip -p $src tim/prune/gui/images/window_icon_64.png > $out/share/pixmaps/gpsprune.png
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Application for viewing, editing and converting GPS coordinate data";
+    homepage = "https://activityworkshop.net/software/gpsprune/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ rycee ];
+    platforms = platforms.all;
+    mainProgram = "gpsprune";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpu-burn/default.nix b/nixpkgs/pkgs/applications/misc/gpu-burn/default.nix
new file mode 100644
index 000000000000..fe7bcf3dcb71
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpu-burn/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, addOpenGLRunpath, cudatoolkit }:
+
+stdenv.mkDerivation {
+  pname = "gpu-burn";
+  version = "unstable-2023-11-10";
+
+  src = fetchFromGitHub {
+    owner = "wilicc";
+    repo = "gpu-burn";
+    rev = "b99aedce3e020d2ca419832ee27b7f29dfa6373e";
+    sha256 = "sha256-cLO0GXvujZ+g64j+OY31n43MsVER3ljo8Qrt+EzSKjc=";
+  };
+
+  postPatch = ''
+    substituteInPlace gpu_burn-drv.cpp \
+      --replace "#define COMPARE_KERNEL \"compare.ptx\"" \
+                "#define COMPARE_KERNEL \"$out/share/compare.ptx\""
+  '';
+
+  buildInputs = [ cudatoolkit ];
+
+  nativeBuildInputs = [ addOpenGLRunpath ];
+
+  makeFlags = [ "CUDAPATH=${cudatoolkit}" ];
+
+  LDFLAGS = "-L${cudatoolkit}/lib/stubs";
+
+  installPhase = ''
+    mkdir -p $out/{bin,share}
+    cp gpu_burn $out/bin/
+    cp compare.ptx $out/share/
+  '';
+
+  postFixup = ''
+    addOpenGLRunpath $out/bin/gpu_burn
+  '';
+
+  meta = with lib; {
+    homepage = "http://wili.cc/blog/gpu-burn.html";
+    description = "Multi-GPU CUDA stress test";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ elohmeier ];
+    license = licenses.bsd2;
+    mainProgram = "gpu_burn";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpu-viewer/default.nix b/nixpkgs/pkgs/applications/misc/gpu-viewer/default.nix
new file mode 100644
index 000000000000..5d703f7d6e37
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpu-viewer/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, fetchFromGitHub
+, pkg-config
+, meson
+, ninja
+, gtk4
+, libadwaita
+, python3Packages
+, gobject-introspection
+, vulkan-tools
+, python3
+, wrapGAppsHook
+, gdk-pixbuf
+, lsb-release
+, glxinfo
+, vdpauinfo
+, clinfo
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gpu-viewer";
+  version = "3.02";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "arunsivaramanneo";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-/m8kXCICvWDqKIC6DbhUAXsjT+RNLMTsvlVTx85AJhE=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk4
+    libadwaita
+    vulkan-tools
+    gdk-pixbuf
+  ];
+
+  pythonPath = with python3Packages; [
+    pygobject3
+    click
+  ];
+
+  # Prevent double wrapping
+  dontWrapGApps = true;
+
+  postFixup = ''
+    makeWrapper ${python3.interpreter} $out/bin/gpu-viewer \
+      --prefix PATH : "${lib.makeBinPath [ clinfo glxinfo lsb-release vdpauinfo vulkan-tools ]}" \
+      --add-flags "$out/share/gpu-viewer/Files/GPUViewer.py" \
+      --prefix PYTHONPATH : "$PYTHONPATH" \
+      --chdir "$out/share/gpu-viewer/Files" \
+      ''${makeWrapperArgs[@]} \
+      ''${gappsWrapperArgs[@]}
+  '';
+
+
+  meta = with lib; {
+    homepage = "https://github.com/arunsivaramanneo/GPU-Viewer";
+    description = "A front-end to glxinfo, vulkaninfo, clinfo and es2_info";
+    changelog = "https://github.com/arunsivaramanneo/GPU-Viewer/releases/tag/v${version}";
+    maintainers = with maintainers; [ GaetanLepage ];
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    mainProgram = "gpu-viewer";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpx-viewer/default.nix b/nixpkgs/pkgs/applications/misc/gpx-viewer/default.nix
new file mode 100644
index 000000000000..887a469397e1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpx-viewer/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, libxml2
+, meson
+, ninja
+, vala
+, pkg-config
+, gnome
+, libchamplain
+, gdl
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gpx-viewer";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "DaveDavenport";
+    repo = "gpx-viewer";
+    rev = version;
+    hash = "sha256-6AChX0UEIrQExaq3oo9Be5Sr13+POHFph7pZegqcjio=";
+  };
+
+  patches = [
+    # Compile with libchamplain>=0.12.21
+    (fetchpatch {
+      url = "https://github.com/DaveDavenport/gpx-viewer/commit/12ed6003bdad840586351bdb4e00c18719873c0e.patch";
+      hash = "sha256-2/r0M3Yxj+vWgny1Pd5G7NYMb0uC/ByZ7y3tqLVccOc=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook # Fix error: GLib-GIO-ERROR **: No GSettings schemas are installed on the system
+  ];
+
+  buildInputs = [
+    gdl
+    libchamplain
+    gnome.adwaita-icon-theme
+    libxml2
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "https://blog.sarine.nl/tag/gpxviewer/";
+    description = "Simple tool to visualize tracks and waypoints stored in a gpx file";
+    changelog = "https://github.com/DaveDavenport/gpx-viewer/blob/${src.rev}/NEWS";
+    platforms = with platforms; linux;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpx/default.nix b/nixpkgs/pkgs/applications/misc/gpx/default.nix
new file mode 100644
index 000000000000..04ebd491c28d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpx/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "gpx";
+  version = "2.6.8";
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  src = fetchFromGitHub {
+    owner = "markwal";
+    repo = "GPX";
+    rev = version;
+    sha256 = "1izs8s5npkbfrsyk17429hyl1vyrbj9dp6vmdlbb2vh6mfgl54h8";
+  };
+
+  meta = {
+    description = "Gcode to x3g conversion postprocessor";
+    homepage = "https://github.com/markwal/GPX/";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.leo60228 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpxlab/default.nix b/nixpkgs/pkgs/applications/misc/gpxlab/default.nix
new file mode 100644
index 000000000000..9d3d7c27ec8c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpxlab/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, mkDerivation, lib, fetchFromGitHub
+, qmake, qttools
+}:
+
+mkDerivation rec {
+  pname = "gpxlab";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "BourgeoisLab";
+    repo = "GPXLab";
+    rev = "v${version}";
+    sha256 = "080vnwcciqblfrbfyz9gjhl2lqw1hkdpbgr5qfrlyglkd4ynjd84";
+  };
+
+  nativeBuildInputs = [ qmake qttools ];
+
+  preConfigure = ''
+    lrelease GPXLab/locale/*.ts
+  '';
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    mv GPXLab/GPXLab.app $out/Applications
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/BourgeoisLab/GPXLab";
+    description = "Program to show and manipulate GPS tracks";
+    longDescription = ''
+      GPXLab is an application to display and manage GPS tracks
+      previously recorded with a GPS tracker.
+    '';
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gpxsee/default.nix b/nixpkgs/pkgs/applications/misc/gpxsee/default.nix
new file mode 100644
index 000000000000..896cf02dc887
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gpxsee/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, qmake
+, nix-update-script
+, qtbase
+, qttools
+, qtlocation ? null # qt5 only
+, qtpositioning ? null # qt6 only
+, qtserialport
+, qtsvg
+, qt5compat ? null # qt6 only
+, wrapQtAppsHook
+}:
+
+let
+  isQt6 = lib.versions.major qtbase.version == "6";
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "gpxsee";
+  version = "13.16";
+
+  src = fetchFromGitHub {
+    owner = "tumic0";
+    repo = "GPXSee";
+    rev = finalAttrs.version;
+    hash = "sha256-rw+I7Re1hqZ1k1flIAr7kW8Wst7pVdmFcqtQTg6L/9Y=";
+  };
+
+  buildInputs = [
+    qtserialport
+  ] ++ (if isQt6 then [
+    qtbase
+    qtpositioning
+    qtsvg
+    qt5compat
+  ] else [
+    qtlocation
+  ]);
+
+  nativeBuildInputs = [
+    qmake
+    qttools
+    wrapQtAppsHook
+  ];
+
+  preConfigure = ''
+    lrelease gpxsee.pro
+  '';
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    mv GPXSee.app $out/Applications
+    mkdir -p $out/bin
+    ln -s $out/Applications/GPXSee.app/Contents/MacOS/GPXSee $out/bin/gpxsee
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = {
+    broken = isQt6 && stdenv.isDarwin;
+    changelog = "https://build.opensuse.org/package/view_file/home:tumic:GPXSee/gpxsee/gpxsee.changes";
+    description = "GPS log file viewer and analyzer";
+    homepage = "https://www.gpxsee.org/";
+    license = lib.licenses.gpl3Only;
+    longDescription = ''
+      GPXSee is a Qt-based GPS log file viewer and analyzer that supports
+      all common GPS log file formats.
+    '';
+    maintainers = with lib.maintainers; [ womfoo sikmir ];
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/gradience/default.nix b/nixpkgs/pkgs/applications/misc/gradience/default.nix
new file mode 100644
index 000000000000..fcb7d10c0162
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gradience/default.nix
@@ -0,0 +1,82 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, wrapGAppsHook4
+, meson
+, ninja
+, pkg-config
+, glib
+, glib-networking
+, desktop-file-utils
+, gettext
+, librsvg
+, blueprint-compiler
+, python3Packages
+, sassc
+, appstream-glib
+, libadwaita
+, libportal
+, libportal-gtk4
+, libsoup_3
+, gobject-introspection
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "gradience";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "GradienceTeam";
+    repo = "Gradience";
+    # See https://github.com/GradienceTeam/Gradience/releases/tag/0.4.1-patch1
+    rev = "0.4.1-patch1";
+    sha256 = "sha256-5jloFbimJC4jP1C1uS8a9VlqyR5qqDuqcKvUXwr9SjY=";
+  };
+
+  format = "other";
+  dontWrapGApps = true;
+
+  nativeBuildInputs = [
+    appstream-glib
+    blueprint-compiler
+    desktop-file-utils
+    gettext
+    glib
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+    sassc
+  ];
+
+  buildInputs = [
+    glib-networking
+    libadwaita
+    libportal
+    libportal-gtk4
+    librsvg
+    libsoup_3
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    anyascii
+    jinja2
+    lxml
+    material-color-utilities
+    pygobject3
+    svglib
+    yapsy
+  ];
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/GradienceTeam/Gradience";
+    description = "Customize libadwaita and GTK3 apps (with adw-gtk3)";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ foo-dogsquared ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gramps/default.nix b/nixpkgs/pkgs/applications/misc/gramps/default.nix
new file mode 100644
index 000000000000..7539b22087c3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gramps/default.nix
@@ -0,0 +1,124 @@
+{ lib
+, fetchpatch
+, fetchFromGitHub
+, gtk3
+, pythonPackages
+, glibcLocales
+, intltool
+, gexiv2
+, pango
+, gobject-introspection
+, wrapGAppsHook
+, gettext
+, # Optional packages:
+  enableOSM ? true
+, osm-gps-map
+, glib-networking
+, enableGraphviz ? true
+, graphviz
+, enableGhostscript ? true
+, ghostscript
+}:
+
+let
+  inherit (pythonPackages) python buildPythonApplication;
+in
+buildPythonApplication rec {
+  version = "5.1.6";
+  pname = "gramps";
+  pyproject = true;
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    intltool
+    gettext
+    gobject-introspection
+    pythonPackages.setuptools
+  ];
+
+  nativeCheckInputs = [
+    glibcLocales
+    pythonPackages.jsonschema
+    pythonPackages.mock
+    pythonPackages.lxml
+  ];
+
+  buildInputs = [ gtk3 pango gexiv2 ]
+    # Map support
+    ++ lib.optionals enableOSM [ osm-gps-map glib-networking ]
+    # Graphviz support
+    ++ lib.optional enableGraphviz graphviz
+    # Ghostscript support
+    ++ lib.optional enableGhostscript ghostscript
+  ;
+
+  src = fetchFromGitHub {
+    owner = "gramps-project";
+    repo = "gramps";
+    rev = "v${version}";
+    hash = "sha256-BerkDXdFYfZ3rV5AeMo/uk53IN2U5z4GFs757Ar26v0=";
+  };
+
+  pythonPath = with pythonPackages; [
+    bsddb3
+    pyicu
+    pygobject3
+    pycairo
+  ];
+
+  patches = [
+    # fix for running tests with a temporary home - remove next release
+    # https://gramps-project.org/bugs/view.php?id=12577
+    (fetchpatch {
+      url = "https://github.com/gramps-project/gramps/commit/1e95d8a6b5193d655d8caec1e6ab13628ad123db.patch";
+      hash = "sha256-2riWB13Yl+tk9+Tuo0YDLoxY2Rc0xrJKfb+ZU7Puzxk=";
+    })
+  ];
+
+  # Same installPhase as in buildPythonApplication but without --old-and-unmanageble
+  # install flag.
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/${python.sitePackages}"
+
+    export PYTHONPATH="$out/${python.sitePackages}:$PYTHONPATH"
+
+    ${python}/bin/${python.executable} setup.py install \
+      --install-lib=$out/${python.sitePackages} \
+      --prefix="$out"
+
+    eapth="$out/${python.sitePackages}/easy-install.pth"
+    if [ -e "$eapth" ]; then
+        # move colliding easy_install.pth to specifically named one
+        mv "$eapth" $(dirname "$eapth")/${pname}-${version}.pth
+    fi
+
+    rm -f "$out/${python.sitePackages}"/site.py*
+
+    runHook postInstall
+  '';
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  # https://github.com/NixOS/nixpkgs/issues/149812
+  # https://nixos.org/manual/nixpkgs/stable/#ssec-gnome-hooks-gobject-introspection
+  strictDeps = false;
+
+  meta = with lib; {
+    description = "Genealogy software";
+    homepage = "https://gramps-project.org";
+    maintainers = with maintainers; [ jk pinpox ];
+    changelog = "https://github.com/gramps-project/gramps/blob/v${version}/ChangeLog";
+    longDescription = ''
+      Every person has their own story but they are also part of a collective
+      family history. Gramps gives you the ability to record the many details of
+      an individual's life as well as the complex relationships between various
+      people, places and events. All of your research is kept organized,
+      searchable and as precise as you need it to be.
+    '';
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/grb/default.nix b/nixpkgs/pkgs/applications/misc/grb/default.nix
new file mode 100644
index 000000000000..9d4774b42a2c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/grb/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "grb";
+  version = "unstable-2022-07-02";
+
+  src = fetchFromGitHub {
+    owner = "LukeSmithxyz";
+    repo = pname;
+    rev = "35a5353ab147b930c39e1ccd369791cc4c27f0df";
+    sha256 = "sha256-hQ21DXnkBJVCgGXQKDR+DjaDC3RXS2pNmSLDoHvHA4E=";
+  };
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "A cli-accessible Greek Bible with the Septuagint, SBL and Apocrypha";
+    homepage = "https://github.com/LukeSmithxyz/grb";
+    license = licenses.publicDomain;
+    maintainers = [ maintainers.cafkafk ];
+    mainProgram = "grb";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/green-pdfviewer/default.nix b/nixpkgs/pkgs/applications/misc/green-pdfviewer/default.nix
new file mode 100644
index 000000000000..9f649b07ff8c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/green-pdfviewer/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, poppler, pkg-config, gdk-pixbuf, SDL, gtk2 }:
+
+stdenv.mkDerivation {
+  pname = "green-pdfviewer";
+  version = "nightly-2014-04-22";
+
+  src = fetchFromGitHub {
+    owner = "schandinat";
+    repo = "green";
+    rev = "0b516aec17915d9742d8e505d2ed383a3bdcea61";
+    sha256 = "0d0lv33flhgsxhc77kfp2avdz5gvml04r8l1j95yjz2rr096lzlj";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ poppler gdk-pixbuf SDL gtk2 ];
+
+  patches = [
+    ./gdk-libs.patch
+  ];
+
+  buildPhase = ''
+    make PREFIX=$out
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man1
+    make install PREFIX=$out MANDIR=$out/share
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/schandinat/green/";
+    description = "Viewer for PDF files, uses SDL and libpoppler";
+
+    platforms = platforms.unix;
+    license  = licenses.gpl3;
+    maintainers = [ maintainers.vrthra ];
+    mainProgram = "green";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/green-pdfviewer/gdk-libs.patch b/nixpkgs/pkgs/applications/misc/green-pdfviewer/gdk-libs.patch
new file mode 100644
index 000000000000..cfcab32aac99
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/green-pdfviewer/gdk-libs.patch
@@ -0,0 +1,55 @@
+Common subdirectories: green.old/debian and green.new/debian
+diff -u green.old/green.h green.new/green.h
+--- green.old/green.h	2016-06-12 18:11:56.779434416 -0700
++++ green.new/green.h	2016-06-12 18:14:38.830557379 -0700
+@@ -19,7 +19,14 @@
+ 
+ 
+ #include <stdbool.h>
+-#include "glib/poppler.h"
++#include "poppler.h"
++#include "gdk-pixbuf/gdk-pixbuf.h"
++#include "gdk-pixbuf/gdk-pixbuf-core.h"
++#include "gdk-pixbuf/gdk-pixbuf-features.h"
++#include "gdk-pixbuf/gdk-pixbuf-enum-types.h"
++ 
++ #define GREEN_FULLSCREEN	0x0001
++ 
+ 
+ 
+ #define GREEN_FULLSCREEN	0x0001
+diff -u green.old/Makefile green.new/Makefile
+--- green.old/Makefile	2016-06-12 18:11:56.779434416 -0700
++++ green.new/Makefile	2016-06-12 18:13:09.591974048 -0700
+@@ -17,6 +17,12 @@
+ SDL_CFLAGS	:=	$$(sdl-config --cflags)
+ SDL_LIBS	:=	$$(sdl-config --libs)
+ 
++GDKPIXBUF_CFLAGS	:=	$$(pkg-config gdk-pixbuf-2.0 --cflags)
++GDKPIXBUF_LIBS	:=	$$(pkg-config gdk-pixbuf-2.0 --libs)
++
++GTK_CFLAGS	:=	$$(pkg-config gtk+-2.0 --cflags)
++GTK_LIBS	:=	$$(pkg-config gtk+-2.0 --libs)
++
+ 
+ all: green
+ 
+@@ -28,13 +34,14 @@
+ 	$(INSTALL) green.1 $(MANDIR)/man1/
+ 
+ green: main.o green.o sdl.o
+-	$(CC) $^ $(POPPLER_LIBS) $(SDL_LIBS) -o $@
++	$(CC) $^ $(POPPLER_LIBS) $(SDL_LIBS) $(GDKPIXBUF_LIBS) $(GTK_LIBS) -o $@
+ 
+ main.o: main.c green.h
+-	$(CC) $(CONFIG) $(CFLAGS) -c $< $(POPPLER_CFLAGS) -o $@
++	$(CC) $(CONFIG) $(CFLAGS) $(GDKPIXBUF_CFLAGS) -c $< $(POPPLER_CFLAGS) -o $@
+ 
+ green.o: green.c green.h
+-	$(CC) $(CFLAGS) -c $< $(POPPLER_CFLAGS) -o $@
++	$(CC) $(CFLAGS) -c $< $(POPPLER_CFLAGS)  $(GDKPIXBUF_CFLAGS) -o $@
+ 
+ sdl.o: sdl.c green.h
+-	$(CC) $(CFLAGS) -c $< $(POPPLER_CFLAGS) $(SDL_CFLAGS) -o $@
++	$(CC) $(CFLAGS) -c $< $(POPPLER_CFLAGS) $(SDL_CFLAGS) $(GDKPIXBUF_CFLAGS) $(GTK_CFLAGS) -o $@
++
diff --git a/nixpkgs/pkgs/applications/misc/gremlin-console/default.nix b/nixpkgs/pkgs/applications/misc/gremlin-console/default.nix
new file mode 100644
index 000000000000..ee7d7d3a95b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gremlin-console/default.nix
@@ -0,0 +1,32 @@
+{ fetchzip, lib, stdenv, makeWrapper, openjdk }:
+
+stdenv.mkDerivation rec {
+  pname = "gremlin-console";
+  version = "3.7.1";
+  src = fetchzip {
+    url = "https://downloads.apache.org/tinkerpop/${version}/apache-tinkerpop-gremlin-console-${version}-bin.zip";
+    sha256 = "sha256-uiJy4kfcTFUymyE0DxP6GlMX7ONogLFrx6K9IcgwTSE=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/opt
+    cp -r ext lib $out/opt/
+    install -D bin/gremlin.sh $out/opt/bin/gremlin-console
+    makeWrapper $out/opt/bin/gremlin-console $out/bin/gremlin-console \
+      --prefix PATH ":" "${openjdk}/bin/" \
+      --set CLASSPATH "$out/opt/lib/"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://tinkerpop.apache.org/";
+    description = "Console of the Apache TinkerPop graph computing framework";
+    license = licenses.asl20;
+    maintainers = [ maintainers.lewo ];
+    platforms = platforms.all;
+    mainProgram = "gremlin-console";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gremlin-server/default.nix b/nixpkgs/pkgs/applications/misc/gremlin-server/default.nix
new file mode 100644
index 000000000000..00cd3bf79091
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gremlin-server/default.nix
@@ -0,0 +1,34 @@
+{ fetchzip, lib, stdenv, makeWrapper, openjdk }:
+stdenv.mkDerivation rec {
+  pname = "gremlin-server";
+  version = "3.7.0";
+  src = fetchzip {
+    url = "https://downloads.apache.org/tinkerpop/${version}/apache-tinkerpop-gremlin-server-${version}-bin.zip";
+    sha256 = "sha256-cS7R7Raz5tkrr5DNeW7jbEYDee2OgE4htTXJRnqXlqI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  # Note you'll want to prefix any commands with LOG_DIR, PID_DIR, and RUN_DIR
+  # environment variables set to a writable director(y/ies).
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/opt
+    cp -r conf ext lib scripts $out/opt/
+    install -D bin/gremlin-server.sh $out/opt/bin/gremlin-server
+    makeWrapper $out/opt/bin/gremlin-server $out/bin/gremlin-server \
+      --prefix PATH ":" "${openjdk}/bin/" \
+      --set CLASSPATH "$out/opt/lib/"
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://tinkerpop.apache.org/";
+    description = "Server of the Apache TinkerPop graph computing framework";
+    license = licenses.asl20;
+    maintainers = [ maintainers.jrpotter ];
+    platforms = platforms.all;
+    mainProgram = "gremlin-server";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/grip/default.nix b/nixpkgs/pkgs/applications/misc/grip/default.nix
new file mode 100644
index 000000000000..f993cb387b74
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/grip/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchurl
+, gtk2
+, pkg-config
+, curl
+, cdparanoia
+, libid3tag
+, libtool
+}:
+
+stdenv.mkDerivation rec {
+  pname = "grip";
+  version = "4.2.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/grip/grip-${version}.tar.gz";
+    sha256 = "sha256-lXu0mLLfcX8K1EmoFH0vp2cHluyRwhTL0/bW5Ax36mI=";
+  };
+
+  nativeBuildInputs = [ pkg-config libtool ];
+  buildInputs = [
+    gtk2
+    curl
+    cdparanoia
+    libid3tag
+  ];
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "GTK-based audio CD player/ripper";
+    homepage = "http://nostatic.org/grip";
+    license = lib.licenses.gpl2Plus;
+
+    maintainers = with lib.maintainers; [ marcweber ];
+    platforms = lib.platforms.linux;
+    mainProgram = "grip";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/grsync/default.nix b/nixpkgs/pkgs/applications/misc/grsync/default.nix
new file mode 100644
index 000000000000..da41a71d95ea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/grsync/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchurl, dee, gtk3, intltool, libdbusmenu-gtk3, libunity, pkg-config, rsync, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  version = "1.3.1";
+  pname = "grsync";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/grsync/grsync-${version}.tar.gz";
+    sha256 = "sha256-M8wOJdqmLlunCRyuo8g6jcdNxddyHEUB00nyEMSzxtM=";
+  };
+
+  nativeBuildInputs = [
+    intltool
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    dee
+    gtk3
+    libdbusmenu-gtk3
+    libunity
+    rsync
+  ];
+
+  meta = with lib; {
+    description = "Synchronize folders, files and make backups";
+    homepage = "http://www.opbyte.it/grsync/";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    mainProgram = "grsync";
+    maintainers = [ maintainers.kuznero ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gsctl/default.nix b/nixpkgs/pkgs/applications/misc/gsctl/default.nix
new file mode 100644
index 000000000000..1e88b837f4a8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gsctl/default.nix
@@ -0,0 +1,43 @@
+{ lib, buildGoModule, fetchFromGitHub, kubectl, stdenv }:
+
+buildGoModule rec {
+  pname = "gsctl";
+  version = "1.1.6";
+
+  src = fetchFromGitHub {
+    owner = "giantswarm";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-eemPsrSFwgUR1Jz7283jjwMkoJR38QiaiilI9G0IQuo=";
+  };
+
+  vendorHash = "sha256-6b4H8YAY8d/qIGnnGPYZoXne1LXHLsc0OEq0lCeqivo=";
+
+  patches = [
+    ./go120-compatibility.patch
+  ];
+
+  postPatch = ''
+    # fails on sandbox
+    rm commands/root_test.go
+  '';
+
+  ldflags = [
+    "-s" "-w"
+    "-X github.com/giantswarm/gsctl/buildinfo.Version=${version}"
+  ];
+
+  nativeCheckInputs = [
+    kubectl
+  ];
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    description = "The Giant Swarm command line interface";
+    homepage = "https://github.com/giantswarm/gsctl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ joesalisbury ];
+    mainProgram = "gsctl";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gsctl/go120-compatibility.patch b/nixpkgs/pkgs/applications/misc/gsctl/go120-compatibility.patch
new file mode 100644
index 000000000000..81b393c583a4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gsctl/go120-compatibility.patch
@@ -0,0 +1,21 @@
+--- a/client/clienterror/matcher.go
++++ b/client/clienterror/matcher.go
+@@ -2,6 +2,7 @@ package clienterror
+ 
+ import (
+ 	"crypto/x509"
++	"errors"
+ 	"net/http"
+ 
+ 	"github.com/giantswarm/microerror"
+@@ -101,9 +102,7 @@ func IsServiceUnavailableError(err error) bool {
+ // a x509.UnknownAuthorityError
+ func IsCertificateSignedByUnknownAuthorityError(err error) bool {
+ 	if clientErr, ok := err.(*APIError); ok {
+-		if _, certErrorOK := clientErr.OriginalError.(x509.UnknownAuthorityError); certErrorOK {
+-			return true
+-		}
++		return errors.As(clientErr.OriginalError, &x509.UnknownAuthorityError{})
+ 	}
+ 
+ 	return false
diff --git a/nixpkgs/pkgs/applications/misc/gsimplecal/default.nix b/nixpkgs/pkgs/applications/misc/gsimplecal/default.nix
new file mode 100644
index 000000000000..224f2f359d77
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gsimplecal/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, automake, autoconf, pkg-config, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "gsimplecal";
+  version = "2.5.1";
+
+  src = fetchFromGitHub {
+    owner = "dmedvinsky";
+    repo = "gsimplecal";
+    rev = "v${version}";
+    sha256 = "sha256-Q8vK+rIRr+Tzwq0Xw5a1pYoLkSwF6PEdqc3/Dk01++o=";
+  };
+
+  postPatch = ''
+    sed -ie '/sys\/sysctl.h/d' src/Unique.cpp
+  '';
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [ pkg-config automake autoconf ];
+  buildInputs = [ gtk3 ];
+
+  preConfigure = "./autogen.sh";
+
+  meta = {
+    homepage = "http://dmedvinsky.github.io/gsimplecal/";
+    description = "Lightweight calendar application written in C++ using GTK";
+    longDescription = ''
+      gsimplecal was intentionally made for use with tint2 panel in the
+      openbox environment to be launched upon clock click, but of course it
+      will work without it. In fact, binding the gsimplecal to some hotkey in
+      you window manager will probably make you happy. The thing is that when
+      it is started it first shows up, when you run it again it closes the
+      running instance. In that way it is very easy to integrate anywhere. No
+      need to write some wrapper scripts or whatever.
+
+      Also, you can configure it to not only show the calendar, but also
+      display multiple clocks for different world time zones.
+    '';
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.romildo ];
+    platforms = lib.platforms.linux;
+    mainProgram = "gsimplecal";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gtk2fontsel/default.nix b/nixpkgs/pkgs/applications/misc/gtk2fontsel/default.nix
new file mode 100644
index 000000000000..83be4fe82393
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gtk2fontsel/default.nix
@@ -0,0 +1,30 @@
+{lib, stdenv, fetchurl, pkg-config, gtk2 }:
+
+stdenv.mkDerivation rec {
+  version = "0.1";
+  pname = "gtk2fontsel";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gtk2fontsel/${pname}-${version}.tar.gz";
+    sha256 = "0s2sj19n8ys92q9832hkn36ld91bb4qavicc6nygkry6qdpkkmjw";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 ];
+
+  preferLocalBuild = true;
+
+  meta = with lib; {
+    description = "A font selection program for X11 using the GTK 2 toolkit";
+    longDescription = ''
+      Font selection tool similar to xfontsel implemented using GTK 2.
+      Trivial, but useful nonetheless.
+    '';
+    homepage = "https://gtk2fontsel.sourceforge.net/";
+    downloadPage = "https://sourceforge.net/projects/gtk2fontsel/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.prikhi ];
+    platforms = platforms.linux;
+    mainProgram = "gtk2fontsel";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gtkradiant/default.nix b/nixpkgs/pkgs/applications/misc/gtkradiant/default.nix
new file mode 100644
index 000000000000..7c91181e06fa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gtkradiant/default.nix
@@ -0,0 +1,255 @@
+{ lib, stdenv, fetchFromGitHub, fetchsvn
+, scons, pkg-config, python3
+, glib, libxml2, gtk2, libGLU, gnome2
+, runCommand, writeScriptBin, runtimeShell
+, makeDesktopItem, copyDesktopItems
+}:
+
+let
+  q3Pack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk";
+    rev = 144;
+    sha256 = "sha256-U1GtMv775JEOAJ1W2kSaRNPDCnW39W+KqVDTTG2yISY=";
+  };
+  urtPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/UrTPack/trunk";
+    rev = 144;
+    sha256 = "sha256-DQjENyQa1kEieU3ZWyMt2e4oEN0X2K3lxP79sBI91iI=";
+  };
+  etPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/ETPack/trunk";
+    rev = 144;
+    sha256 = "sha256-mqaWOYfF/F6ABh7nKA36YvsywZIdwJ9IitFi2Xp5rgk=";
+  };
+  qlPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/QLPack/trunk";
+    rev = 144;
+    sha256 = "sha256-lrn4nu3JI7j+t9jYd+UFE55GOCbc6+Sh2fZfVlEr1WM=";
+  };
+  q2Pack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/Q2Pack/trunk";
+    rev = 144;
+    sha256 = "sha256-ad8dRV+28Zz5yQsJU7hvteSIn9wWpehuqxMspw3yvvU=";
+  };
+  quetooPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/QuetooPack/trunk";
+    rev = 144;
+    sha256 = "sha256-SOblPJgdVEZrTYtvDlcF7paIm3UitSVFQ9+RahXkO64=";
+  };
+  jaPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/JAPack/trunk";
+    rev = 144;
+    sha256 = "sha256-P6lI+nNrPwoWJl5ThUHIA3Iw1nWVo2djaaWHAF5HuDo=";
+  };
+  stvefPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/STVEFPack/trunk";
+    rev = 144;
+    sha256 = "sha256-quNyVC6fg1FIBsLWx0LzRK2JfxKMNJeUEIkWGhGJHhI=";
+  };
+  wolfPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/WolfPack/trunk";
+    rev = 144;
+    sha256 = "sha256-693k6KiIchQddVGBhRJf7ikv6ut5L9rcLt0FTZ7pSvw=";
+  };
+  unvanquishedPack = fetchsvn {
+    url = "https://github.com/Unvanquished/unvanquished-mapeditor-support.git/trunk/build/gtkradiant/";
+    rev = 212;
+    sha256 = "sha256-weBlnSBezPppbhsMOT66vubioTxpDC+AcKIOC2Xitdo=";
+  };
+  q1Pack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/Q1Pack/trunk";
+    rev = 144;
+    sha256 = "sha256-JfmDIUoDY7dYdMgwwUMgcwNhWxuxsdkv1taw8DXhPY4=";
+  };
+  darkPlacesPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/DarkPlacesPack/trunk";
+    rev = 57;
+    sha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
+  };
+  doom3Pack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/Doom3Pack/trunk";
+    rev = 56;
+    sha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
+  };
+  halfLifePack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/HalfLifePack/trunk";
+    rev = 1;
+    sha256 = "sha256-CrbN3iOG89j71y4ZJ4gNZEA5CYxphLLGbZwv6Tbjui0=";
+  };
+  her2Pack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/Her2Pack/trunk";
+    rev = 55;
+    sha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
+  };
+  jk2Pack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/JK2Pack/trunk";
+    rev = 77;
+    sha256 = "sha256-3g/p9OC0j2va9CXXtsQf0lP6VJ1WyI5k2W9xNRwYjS8=";
+  };
+  nexuizPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/NexuizPack/trunk";
+    rev = 49;
+    sha256 = "sha256-nAV7rZKDgAxlEmu2RfBFNsHv9Xgas1IlDgioligvY+c=";
+  };
+  preyPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/PreyPack/trunk";
+    rev = 19;
+    sha256 = "sha256-wbKEnSaFO40HxhMsbYKy76MxXDvY9O1lTcr3M7fXxW0=";
+  };
+  q2wPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/Q2WPack/trunk";
+    rev = 126;
+    sha256 = "sha256-Q6IyL2qUr+6ktP34oYkFqN5MeFxCXOkcjrPg5J95ftg=";
+  };
+  q4Pack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/Q4Pack/trunk";
+    rev = 54;
+    sha256 = "sha256-pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
+  };
+  ravenPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/RavenPack/trunk";
+    rev = 1;
+    sha256 = "sha256-bYRjCkdaznaO7+WDB6cgL3szTB+MXwt3IKH3L2rGjLs=";
+  };
+  reactionPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/ReactionPack/trunk";
+    rev = 69;
+    sha256 = "sha256-aXSM0ubyhgamLBzfNZ6RzRSdzKwfHWLt/6OS/i9mMVo=";
+  };
+  sof2Pack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/Sof2Pack/trunk";
+    rev = 1;
+    sha256 = "sha256-EnGhYghXe6hU5vvdF+Z9geTiHDukBEr1+CQgunxxGic=";
+  };
+  tremulousPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/TremulousPack/trunk";
+    rev = 46;
+    sha256 = "sha256-NU+ynpqydFxdZSkh7Szm6DTqyMYVS+PU70Mp98ZjdOs=";
+  };
+  ufoaiPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/trunk";
+    rev = 69;
+    sha256 = "sha256-nAd7fFZJJ82rDPVlTiZkkTGXi5tw7BSKk+akFBXSWvY=";
+  };
+  warsowPack = fetchsvn {
+    url = "svn://svn.icculus.org/gtkradiant-gamepacks/WarsowPack/trunk";
+    rev = 53;
+    sha256 = "sha256-IQ12fEKnq0cJxef+ddvTXcwM8lQ8nlUoMJy81XJ7ANY=";
+  };
+  packs = runCommand "gtkradiant-packs" {} ''
+    mkdir -p $out
+    ln -s ${q3Pack} $out/Q3Pack
+    ln -s ${urtPack} $out/UrTPack
+    ln -s ${etPack} $out/ETPack
+    ln -s ${qlPack} $out/QLPack
+    ln -s ${q2Pack} $out/Q2Pack
+    ln -s ${quetooPack} $out/QuetooPack
+    ln -s ${jaPack} $out/JAPack
+    ln -s ${stvefPack} $out/STVEFPack
+    ln -s ${wolfPack} $out/WolfPack
+    ln -s ${unvanquishedPack} $out/UnvanquishedPack
+    ln -s ${q1Pack} $out/Q1Pack
+    ln -s ${darkPlacesPack} $out/DarkPlacesPack
+    ln -s ${doom3Pack} $out/Doom3Pack
+    ln -s ${halfLifePack} $out/HalfLifePack
+    ln -s ${her2Pack} $out/Her2Pack
+    ln -s ${jk2Pack} $out/JK2Pack
+    ln -s ${nexuizPack} $out/NexuizPack
+    ln -s ${preyPack} $out/PreyPack
+    ln -s ${q2wPack} $out/Q2WPack
+    ln -s ${q4Pack} $out/Q4Pack
+    ln -s ${ravenPack} $out/RavenPack
+    ln -s ${reactionPack} $out/ReactionPack
+    ln -s ${sof2Pack} $out/Sof2Pack
+    ln -s ${tremulousPack} $out/TermulousPack
+    ln -s ${ufoaiPack} $out/UFOAIPack
+    ln -s ${warsowPack} $out/WarsowPack
+  '';
+
+in
+stdenv.mkDerivation rec {
+  pname = "gtkradiant";
+
+  version = "unstable-2023-04-24";
+
+  src = fetchFromGitHub {
+    owner = "TTimo";
+    repo = "GtkRadiant";
+    rev = "ddbaf03d723a633d53fa442c2f802f7ad164dd6c";
+    sha256 = "sha256-qI+KGx73AbM5PLFR2JDXKDbiqmU0gS/43rhjRKm/Gms=";
+  };
+
+  nativeBuildInputs =
+    let
+      python = python3.withPackages (ps: with ps; [
+        urllib3
+      ]);
+      svn = writeScriptBin "svn" ''
+        #!${runtimeShell} -e
+        if [ "$1" = checkout ]; then
+          # link predownloaded pack to destination
+          mkdir -p $(dirname $3)
+          ln -s ${packs}/$(basename $3) $3
+          # verify existence
+          test -e $(readlink $3)
+        elif [ "$1" = update ]; then
+          # verify existence
+          test -e $(readlink $2)
+        else
+          echo "$@"
+          exit 1
+        fi
+      '';
+    in [
+      scons
+      pkg-config
+      python
+      svn
+      copyDesktopItems
+    ];
+
+  buildInputs = [ glib libxml2 gtk2 libGLU gnome2.gtkglext ];
+
+  enableParallelBuilding = true;
+
+  desktopItems = [ (makeDesktopItem {
+    name = "gtkradiant";
+    exec = "gtkradiant";
+    desktopName = "GtkRadiant";
+    comment = meta.description;
+    categories = [ "Development" ];
+    icon = "gtkradiant";
+    # includes its own splash screen
+    startupNotify = false;
+  }) ];
+
+  postInstall = ''
+    mkdir -p $out/{bin,lib}
+    cp -ar install $out/lib/gtkradiant
+    for pack in ${packs}/* ; do
+      name=$(basename "$pack")
+      if ! [ -e $out/lib/gtkradiant/installs/$name ]; then
+        ln -s $pack $out/lib/gtkradiant/installs/$name
+      fi
+    done
+
+    cat >$out/bin/gtkradiant <<EOF
+    #!${runtimeShell} -e
+    export XDG_DATA_HOME="\''${XDG_DATA_HOME:-\$HOME/.local/share}"
+    exec "$out/lib/gtkradiant/radiant.bin" "\$@"
+    EOF
+    chmod +x $out/bin/gtkradiant
+    ln -s ../lib/gtkradiant/{q3map2,q3map2_urt,q3data} $out/bin/
+
+    mkdir -p $out/share/pixmaps
+    ln -s ../../lib/gtkradiant/bitmaps/icon.png $out/share/pixmaps/gtkradiant.png
+  '';
+
+  meta = with lib; {
+    description = "Level editor for idTech games";
+    homepage = "https://icculus.org/gtkradiant/";
+    license = with licenses; [ gpl2Only bsdOriginal lgpl21Only ];
+    maintainers = with maintainers; [ astro ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gum/default.nix b/nixpkgs/pkgs/applications/misc/gum/default.nix
new file mode 100644
index 000000000000..b85e00d095ed
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gum/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildGoModule, installShellFiles, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "gum";
+  version = "0.13.0";
+
+  src = fetchFromGitHub {
+    owner = "charmbracelet";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-NgMEgSfHVLCEKZ3MmNV571ySMUD8wj+kq5EccGrxtZc=";
+  };
+
+  vendorHash = "sha256-fmc6nbS/Xmn/YRwToRH7EhP4SFRMf8hjZ/rLtaP/USo=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  postInstall = ''
+    $out/bin/gum man > gum.1
+    installManPage gum.1
+    installShellCompletion --cmd gum \
+      --bash <($out/bin/gum completion bash) \
+      --fish <($out/bin/gum completion fish) \
+      --zsh <($out/bin/gum completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Tasty Bubble Gum for your shell";
+    homepage = "https://github.com/charmbracelet/gum";
+    changelog = "https://github.com/charmbracelet/gum/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ maaslalani ];
+    mainProgram = "gum";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gummi/default.nix b/nixpkgs/pkgs/applications/misc/gummi/default.nix
new file mode 100644
index 000000000000..d9e0204be322
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gummi/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, pkgs
+, glib, gtk3, gtksourceview3, gtkspell3, poppler, texlive
+, pkg-config, intltool, autoreconfHook, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.8.3";
+  pname = "gummi";
+
+  src = pkgs.fetchFromGitHub {
+    owner = "alexandervdm";
+    repo = "gummi";
+    rev = version;
+    sha256 = "sha256-71n71KjLmICp4gznd27NlbyA3kayje3hYk/cwkOXEO0=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config intltool autoreconfHook wrapGAppsHook
+  ];
+  buildInputs = [
+    glib gtksourceview3 gtk3 gtkspell3 poppler
+    texlive.bin.core # needed for synctex
+  ];
+
+  postInstall = ''
+    install -Dpm644 COPYING $out/share/licenses/$name/COPYING
+  '';
+
+  meta = {
+    homepage = "https://gummi.app";
+    description = "Simple LaTex editor for GTK users";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ flokli ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gv/default.nix b/nixpkgs/pkgs/applications/misc/gv/default.nix
new file mode 100644
index 000000000000..ca12e3bc77a9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gv/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchurl, libXext, Xaw3d, ghostscriptX, perl, pkg-config, libiconv }:
+
+stdenv.mkDerivation rec {
+  pname = "gv";
+  version = "3.7.4";
+
+  src = fetchurl {
+    url = "mirror://gnu/gv/gv-${version}.tar.gz";
+    sha256 = "0q8s43z14vxm41pfa8s5h9kyyzk1fkwjhkiwbf2x70alm6rv6qi1";
+  };
+
+  configureFlags = lib.optionals stdenv.isDarwin [
+    "--enable-SIGCHLD-fallback"
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    libXext
+    Xaw3d
+    ghostscriptX
+    perl
+  ] ++ lib.optionals stdenv.isDarwin [
+    libiconv
+  ];
+
+  patchPhase = ''
+    sed 's|\<gs\>|${ghostscriptX}/bin/gs|g' -i "src/"*.in
+    sed 's|"gs"|"${ghostscriptX}/bin/gs"|g' -i "src/"*.c
+  '';
+
+  doCheck = true;
+
+  meta = {
+    homepage = "https://www.gnu.org/software/gv/";
+    description = "PostScript/PDF document viewer";
+
+    longDescription = ''
+      GNU gv allows users to view and navigate through PostScript and
+      PDF documents on an X display by providing a graphical user
+      interface for the Ghostscript interpreter.
+    '';
+
+    license = lib.licenses.gpl3Plus;
+    maintainers = [ ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gxkb/default.nix b/nixpkgs/pkgs/applications/misc/gxkb/default.nix
new file mode 100644
index 000000000000..201cbdb0a11a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gxkb/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, gtk3, libwnck, libxklavier
+, appindicatorSupport ? true, libayatana-appindicator
+}:
+
+stdenv.mkDerivation rec {
+  pname = "gxkb";
+  version = "0.9.3";
+
+  src = fetchFromGitHub {
+    owner = "zen-tools";
+    repo = "gxkb";
+    rev = "v${version}";
+    sha256 = "sha256-9r1eZl7PgIt2ZpK+QQHaa460imIHT3Lh5mpzcFglyWc=";
+  };
+
+  nativeBuildInputs = [ pkg-config autoreconfHook ];
+  buildInputs = [ gtk3 libwnck libxklavier ] ++ lib.optional appindicatorSupport libayatana-appindicator;
+
+  configureFlags = lib.optional appindicatorSupport "--enable-appindicator=yes";
+  outputs = [ "out" "man" ];
+
+  meta = with lib; {
+    description = "X11 keyboard indicator and switcher";
+    homepage = "https://zen-tools.github.io/gxkb/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.omgbebebe ];
+    platforms = platforms.linux;
+    mainProgram = "gxkb";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gxmessage/default.nix b/nixpkgs/pkgs/applications/misc/gxmessage/default.nix
new file mode 100644
index 000000000000..ae5c7d1d07a4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gxmessage/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, gtk3, intltool, pkg-config, texinfo }:
+
+stdenv.mkDerivation rec {
+  pname = "gxmessage";
+  version = "3.4.3";
+
+  src = fetchurl {
+    url = "https://trmusson.dreamhosters.com/stuff/${pname}-${version}.tar.gz";
+    sha256 = "db4e1655fc58f31e5770a17dfca4e6c89028ad8b2c8e043febc87a0beedeef05";
+  };
+
+  nativeBuildInputs = [ pkg-config intltool ];
+  buildInputs = [ gtk3 texinfo ];
+
+  meta = {
+    description = "A GTK enabled dropin replacement for xmessage";
+    homepage = "https://trmusson.dreamhosters.com/programs.html#gxmessage";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [jfb];
+    platforms = with lib.platforms; linux;
+    mainProgram = "gxmessage";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/gxneur/default.nix b/nixpkgs/pkgs/applications/misc/gxneur/default.nix
new file mode 100644
index 000000000000..0bfc3ce91f65
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/gxneur/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, pkg-config, intltool, gtk2, xorg, glib, xneur, libglade, GConf, libappindicator-gtk2, pcre }:
+
+stdenv.mkDerivation rec {
+  pname = "gxneur";
+  version = "0.20.0";
+
+  src = fetchurl {
+    url = "https://github.com/AndrewCrewKuznetsov/xneur-devel/raw/f66723feb272c68f7c22a8bf0dbcafa5e3a8a5ee/dists/${version}/gxneur_${version}.orig.tar.gz";
+    sha256 = "0avmhdcj0hpr55fc0iih8fjykmdhn34c8mwdnqvl8jh4nhxxchxr";
+  };
+
+  # glib-2.62 deprecations
+  env.NIX_CFLAGS_COMPILE = "-DGLIB_DISABLE_DEPRECATION_WARNINGS";
+
+  nativeBuildInputs = [ pkg-config intltool ];
+  buildInputs = [
+    xorg.libX11
+    glib
+    gtk2
+    xorg.libXpm
+    xorg.libXt
+    xorg.libXext
+    xneur
+    libglade
+    GConf
+    pcre
+    libappindicator-gtk2
+  ];
+
+  meta = with lib; {
+    description = "GUI for XNEUR keyboard layout switcher";
+    platforms = platforms.linux;
+    license = with licenses; [ gpl2 gpl3 ];
+    mainProgram = "gxneur";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hamster/default.nix b/nixpkgs/pkgs/applications/misc/hamster/default.nix
new file mode 100644
index 000000000000..5f7b51bb6ee6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hamster/default.nix
@@ -0,0 +1,59 @@
+{ lib, fetchFromGitHub, python3Packages, intltool, glib, itstool, gtk3
+, wrapGAppsHook, gobject-introspection, pango, gdk-pixbuf, atk, wafHook }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "hamster";
+  version = "3.0.3";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "projecthamster";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-cUmUvJP9Y3de5OaNgIxvigDsX2ww7NNRY5son/gg+WI=";
+  };
+
+  nativeBuildInputs = [
+    python3Packages.setuptools
+    wrapGAppsHook
+    intltool
+    itstool
+    wafHook
+    glib
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    pango
+    gdk-pixbuf
+    atk
+    gtk3
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+    pycairo
+    pyxdg
+    dbus-python
+  ];
+
+  dontWrapGApps = true;
+
+  # Arguments to be passed to `makeWrapper`, only used by buildPython*
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  postFixup = ''
+    wrapPythonProgramsIn $out/libexec "$out $pythonPath"
+  '';
+
+  meta = with lib; {
+    description = "Time tracking application";
+    homepage = "http://projecthamster.org/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+    maintainers = [ maintainers.fabianhauser ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/harsh/default.nix b/nixpkgs/pkgs/applications/misc/harsh/default.nix
new file mode 100644
index 000000000000..449b154cb8b6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/harsh/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "harsh";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "wakatara";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-MpKfUvDqwkvPsnjTxR3fohzYfSLQ2Nx25czYOE8LpK4=";
+  };
+
+  vendorHash = "sha256-zjLXq64uC5iRm9uxUGDW5127z25gNSVV2qhVVXuYqY0=";
+
+  meta = with lib; {
+    description = "CLI habit tracking for geeks";
+    homepage = "https://github.com/wakatara/harsh";
+    changelog = "https://github.com/wakatara/harsh/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ laurailway ];
+    mainProgram = "harsh";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/has/default.nix b/nixpkgs/pkgs/applications/misc/has/default.nix
new file mode 100644
index 000000000000..a18a996f92aa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/has/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenvNoCC, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation (finalAttrs: rec {
+  pname = "has";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "kdabir";
+    repo = "has";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-3XsNSl4lQfJjEPNGoFj6ABXGkwOUsg9AFDAz8euZApE=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm0555 ${pname} -t $out/bin
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/kdabir/has";
+    description = "Checks presence of various command line tools and their versions on the path";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Freed-Wu ];
+    platforms = platforms.unix;
+    mainProgram = "has";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/haxor-news/default.nix b/nixpkgs/pkgs/applications/misc/haxor-news/default.nix
new file mode 100644
index 000000000000..d5ea27c9d50b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/haxor-news/default.nix
@@ -0,0 +1,68 @@
+{ lib, fetchFromGitHub, fetchPypi, python3 }:
+
+
+let
+  py = python3.override {
+    packageOverrides = self: super: {
+      self = py;
+
+      # not compatible with prompt_toolkit >=2.0
+      prompt-toolkit = super.prompt-toolkit.overridePythonAttrs (oldAttrs: rec {
+        name = "${oldAttrs.pname}-${version}";
+        version = "1.0.18";
+        src = oldAttrs.src.override {
+          inherit version;
+          hash = "sha256-3U/KAsgGlJetkxotCZFMaw0bUBUc6Ha8Fb3kx0cJASY=";
+        };
+      });
+      # Use click 7
+      click = super.click.overridePythonAttrs (old: rec {
+        version = "7.1.2";
+        src = fetchPypi {
+          pname = "click";
+          inherit version;
+          hash = "sha256-0rUlXHxjSbwb0eWeCM0SrLvWPOZJ8liHVXg6qU37axo=";
+        };
+        disabledTests = [ "test_bytes_args" ];
+      });
+    };
+  };
+in
+with py.pkgs;
+
+buildPythonApplication rec {
+  pname = "haxor-news";
+  version = "unstable-2020-10-20";
+
+  # haven't done a stable release in 3+ years, but actively developed
+  src = fetchFromGitHub {
+    owner = "donnemartin";
+    repo = pname;
+    rev = "811a5804c09406465b2b02eab638c08bf5c4fa7f";
+    hash = "sha256-5v61b49ttwqPOvtoykJBBzwVSi7S8ARlakccMr12bbw=";
+  };
+
+  propagatedBuildInputs = [
+    click
+    colorama
+    requests
+    pygments
+    prompt-toolkit
+    six
+  ];
+
+  # will fail without pre-seeded config files
+  doCheck = false;
+
+  nativeCheckInputs = [ unittestCheckHook mock ];
+
+  unittestFlagsArray = [ "-s" "tests" "-v" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/donnemartin/haxor-news";
+    description = "Browse Hacker News like a haxor";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/hcl2json/default.nix b/nixpkgs/pkgs/applications/misc/hcl2json/default.nix
new file mode 100644
index 000000000000..be6da03f1708
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hcl2json/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "hcl2json";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "tmccombs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-6DCxpnTizTg3uhHIIze2IyA8IKcjIv44XoId7exdQZI=";
+  };
+
+  vendorHash = "sha256-Ay6Sgdm7X+NxtLkFM0AT8aoWLdASjUhcidRUiV2K+us=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Convert hcl2 to json";
+    homepage = "https://github.com/tmccombs/hcl2json";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jonringer ];
+    mainProgram = "hcl2json";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hdate/default.nix b/nixpkgs/pkgs/applications/misc/hdate/default.nix
new file mode 100644
index 000000000000..899630b69099
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hdate/default.nix
@@ -0,0 +1,16 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  version = "1.6.02";
+  pname = "hdate";
+  src = fetchurl {
+    url = "https://sourceforge.net/projects/libhdate/files/libhdate/libhdate-${version}/libhdate-${version}.tar.bz2";
+    sha256 = "3c930a8deb57c01896dc37f0d7804e5a330ee8e88c4ff610b71f9d2b02c17762";
+  };
+  meta = {
+    description = "Hebrew calendar and solar astronomical times library and utilities";
+    homepage = "https://sourceforge.net/projects/libhdate/";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ CharlesHD ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/health/default.nix b/nixpkgs/pkgs/applications/misc/health/default.nix
new file mode 100644
index 000000000000..776f2cf20e2a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/health/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, meson
+, ninja
+, pkg-config
+, rustPlatform
+, rustc
+, cargo
+, wrapGAppsHook4
+, blueprint-compiler
+, libadwaita
+, libsecret
+, tracker
+, darwin
+}:
+
+stdenv.mkDerivation rec {
+  pname = "health";
+  version = "0.95.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "World";
+    repo = pname;
+    rev = version;
+    hash = "sha256-PrNPprSS98yN8b8yw2G6hzTSaoE65VbsM3q7FVB4mds=";
+  };
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    name = "${pname}-${version}";
+    hash = "sha256-8fa3fa+sFi5H+49B5sr2vYPkp9C9s6CcE0zv4xB8gww=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    rustPlatform.cargoSetupHook
+    rustc
+    cargo
+    wrapGAppsHook4
+    blueprint-compiler
+  ];
+
+  buildInputs = [
+    libadwaita
+    libsecret
+    tracker
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+    darwin.apple_sdk.frameworks.Foundation
+  ];
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals stdenv.cc.isClang [
+    "-Wno-error=incompatible-function-pointer-types"
+  ]);
+
+  meta = with lib; {
+    description = "A health tracking app for the GNOME desktop";
+    homepage = "https://apps.gnome.org/app/dev.Cogitri.Health";
+    license = licenses.gpl3Plus;
+    mainProgram = "dev.Cogitri.Health";
+    maintainers = with maintainers; [ aleksana ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/heimer/default.nix b/nixpkgs/pkgs/applications/misc/heimer/default.nix
new file mode 100644
index 000000000000..69f45cb407b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/heimer/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, qttools
+, qtbase
+}:
+
+mkDerivation rec {
+  pname = "heimer";
+  version = "4.3.0";
+
+  src = fetchFromGitHub {
+    owner = "juzzlin";
+    repo = pname;
+    rev = version;
+    hash = "sha256-VIlNahpSRQNpfOKXnI/GQANuhZ+vnoXsudwHmRbHIjs=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    qttools
+    qtbase
+  ];
+
+  meta = with lib; {
+    description = "Simple cross-platform mind map and note-taking tool written in Qt";
+    homepage = "https://github.com/juzzlin/Heimer";
+    changelog = "https://github.com/juzzlin/Heimer/blob/${version}/CHANGELOG";
+    license = licenses.gpl3Plus;
+    maintainers  = with maintainers; [ dtzWill ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hello-unfree/default.nix b/nixpkgs/pkgs/applications/misc/hello-unfree/default.nix
new file mode 100644
index 000000000000..6fae0eca1399
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hello-unfree/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, runtimeShell }:
+
+stdenv.mkDerivation {
+  pname = "example-unfree-package";
+  version = "1.0";
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cat > $out/bin/hello-unfree << EOF
+    #!${runtimeShell}
+    echo "Hello, you are running an unfree system!"
+    EOF
+    chmod +x $out/bin/hello-unfree
+  '';
+
+  meta = {
+    description = "An example package with unfree license (for testing)";
+    license = lib.licenses.unfree;
+    maintainers = [ lib.maintainers.oxij ];
+    mainProgram = "hello-unfree";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/herbe/default.nix b/nixpkgs/pkgs/applications/misc/herbe/default.nix
new file mode 100644
index 000000000000..9ea08f0dc83c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/herbe/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, lib, fetchFromGitHub, libX11, libXft, freetype, patches ? [ ],
+  extraLibs ? [ ] }:
+
+stdenv.mkDerivation rec {
+  pname = "herbe";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "dudik";
+    repo = pname;
+    rev = version;
+    sha256 = "0358i5jmmlsvy2j85ij7m1k4ar2jr5lsv7y1c58dlf9710h186cv";
+  };
+
+  inherit patches;
+
+  postPatch = ''
+    sed -i 's_/usr/include/freetype2_${freetype.dev}/include/freetype2_' Makefile
+  '';
+
+  buildInputs = [ libX11 libXft freetype ] ++ extraLibs;
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Daemon-less notifications without D-Bus";
+    homepage = "https://github.com/dudik/herbe";
+    license = licenses.mit;
+    # NOTE: Could also work on 'unix'.
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wishfort36 ];
+    mainProgram = "herbe";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hivemind/default.nix b/nixpkgs/pkgs/applications/misc/hivemind/default.nix
new file mode 100644
index 000000000000..589c6fa80736
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hivemind/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub, runtimeShell }:
+
+buildGoModule rec {
+  pname = "hivemind";
+  version = "1.1.0";
+
+  postPatch = ''
+    substituteInPlace process.go --replace \"/bin/sh\" \"${runtimeShell}\"
+  '';
+
+  src = fetchFromGitHub {
+    owner = "DarthSim";
+    repo = "hivemind";
+    rev = "v${version}";
+    hash = "sha256-YUR9OwRuH1xSPs8iTsSIjLCt2TyYH357IAYULGTyYUc=";
+  };
+
+  vendorHash = "sha256-KweFhT8Zueg45Q/vw3kNET35hB+0WbUPfz0FYaAiIA8=";
+
+  meta = with lib; {
+    homepage = "https://github.com/DarthSim/";
+    description = "Process manager for Procfile-based applications";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.sveitser ];
+    mainProgram = "hivemind";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hmm/default.nix b/nixpkgs/pkgs/applications/misc/hmm/default.nix
new file mode 100644
index 000000000000..a78b953875c2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hmm/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, perl
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hmm";
+  version = "0.6.0";
+
+  src = fetchCrate {
+    pname = "hmmcli";
+    inherit version;
+    hash = "sha256-WPePzqZ2iGeJ7kzTj8eg7q1JEjw91WY7gViJJ46SLRY=";
+  };
+
+  cargoHash = "sha256-9Z49aPfcIdMfYCFAXsxFxcfhaLjtPod+nMFHDmvgDY0=";
+
+  nativeCheckInputs = [
+    perl
+  ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "A small command-line note-taking app";
+    homepage = "https://github.com/samwho/hmm";
+    changelog = "https://github.com/samwho/hmm/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hollywood/default.nix b/nixpkgs/pkgs/applications/misc/hollywood/default.nix
new file mode 100644
index 000000000000..f3b721bc4959
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hollywood/default.nix
@@ -0,0 +1,94 @@
+{ stdenv
+, fetchFromGitHub
+, makeWrapper
+, lib
+, coreutils
+, apg
+, atop
+, bmon
+, cmatrix
+, pygments
+, moreutils
+, util-linux
+, jp2a
+, man
+, mplayer
+, openssh
+, tree
+, mlocate
+, findutils
+, ccze
+, ncurses
+, python3
+, wget
+, libcaca
+, newsboat
+, rsstail
+, w3m
+, ticker
+, tmux
+}:
+
+stdenv.mkDerivation {
+  pname = "hollywood";
+  version = "1.22";
+
+  src = fetchFromGitHub {
+    owner = "dustinkirkland";
+    repo = "hollywood";
+    rev = "35275a68c37bbc39d8b2b0e4664a0c2f5451e5f6";
+    sha256 = "sha256-faIm1uXERvIDZ6SK6uarVkWGNJskAroHgq5Cg7nUZc4=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  patches = [ ./nixos-paths.patch ];
+  postPatch = ''
+    rm lib/hollywood/speedometer
+    rm bin/wallstreet
+    rm -r lib/wallstreet
+  '';
+
+  dontBuild = true;
+
+  installPhase =
+    let pathDeps = [
+      tmux
+      coreutils
+      ncurses
+      jp2a
+      mlocate
+      apg
+      atop
+      bmon
+      cmatrix
+      pygments
+      moreutils
+      util-linux
+      jp2a
+      man
+      mplayer
+      openssh
+      tree
+      findutils
+      ccze
+    ];
+    in ''
+      runHook preInstall
+
+      mkdir -p $out
+      cp -r bin $out/bin
+      cp -r lib $out/lib
+      cp -r share $out/share
+      wrapProgram $out/bin/hollywood --prefix PATH : ${lib.makeBinPath pathDeps}
+
+      runHook postInstall
+    '';
+
+  meta = {
+    description = "Fill your console with Hollywood melodrama technobabble";
+    homepage = "https://a.hollywood.computer/";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.anselmschueler ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hollywood/nixos-paths.patch b/nixpkgs/pkgs/applications/misc/hollywood/nixos-paths.patch
new file mode 100644
index 000000000000..d280a6b003c1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hollywood/nixos-paths.patch
@@ -0,0 +1,67 @@
+diff --git a/bin/hollywood b/bin/hollywood
+index 6f1ee68..09bc4ea 100755
+--- a/bin/hollywood
++++ b/bin/hollywood
+@@ -74,7 +74,7 @@ if [ -z "$TMUX" ]; then
+ 	else
+ 		tmux_launcher=tmux
+ 	fi
+-	$tmux_launcher new-session -d -s $PKG "/bin/bash"
++	$tmux_launcher new-session -d -s $PKG "/usr/bin/env bash"
+ 	$tmux_launcher send-keys -t $PKG "$0 $1"
+ 	$tmux_launcher send-keys -t $PKG Enter
+ 	exec $tmux_launcher attach-session -t $PKG
+diff --git a/lib/hollywood/code b/lib/hollywood/code
+index 532ce73..3448447 100755
+--- a/lib/hollywood/code
++++ b/lib/hollywood/code
+@@ -19,7 +19,7 @@ command -v view >/dev/null 2>&1 || exit 1
+ 
+ trap "pkill -f -9 lib/hollywood/ >/dev/null 2>&1; exit" INT
+ while true; do
+-	FILES=$(locate -l 4096 "/usr/*.java" "/usr/*.c" "/usr/*.cpp" 2>/dev/null | sort -R)
++	FILES=$(locate -l 4096 "/usr/*.java" "/run/current-system/sw/*.java" "/usr/*.c" "/run/current-system/sw/*.c" "/usr/*.cpp" "/run/current-system/sw/*.cpp" 2>/dev/null | sort -R)
+ 	for f in $FILES; do
+ 		[ -r "$f" ] || continue
+ 		[ -s "$f" ] || continue
+diff --git a/lib/hollywood/hexdump b/lib/hollywood/hexdump
+index f2fb0bd..db059f5 100755
+--- a/lib/hollywood/hexdump
++++ b/lib/hollywood/hexdump
+@@ -19,8 +19,8 @@ command -v ccze >/dev/null 2>&1 || exit 1
+ 
+ trap "pkill -f -9 lib/hollywood/ >/dev/null 2>&1; exit" INT
+ while true; do
+-	for f in $(ls /usr/bin/ | sort -R); do
+-		head -c 4096 "/usr/bin/$f" | hexdump -C | ccze -A -c default=green -c dir="bold green"
++	for f in $(find /usr/bin/ /run/current-system/sw/bin/ | sort -R); do
++		head -c 4096 "$f" | hexdump -C | ccze -A -c default=green -c dir="bold green"
+ 		sleep 0.7
+ 	done
+ done
+diff --git a/lib/hollywood/jp2a b/lib/hollywood/jp2a
+index e87b950..6541f80 100755
+--- a/lib/hollywood/jp2a
++++ b/lib/hollywood/jp2a
+@@ -19,7 +19,7 @@ command -v jp2a >/dev/null 2>&1 || exit 1
+ 
+ trap "pkill -f -9 lib/hollywood/ >/dev/null 2>&1; exit" INT
+ while true; do
+-	FILES=$(locate -l 4096 "/usr/*jpg" 2>/dev/null | sort -R)
++	FILES=$(locate -l 4096 "/usr/*jpg" "/run/current-system/sw/*jpg" 2>/dev/null | sort -R)
+ 	for f in $FILES; do
+ 		[ -r "$f" ] || continue
+ 		[ -s "$f" ] || continue
+diff --git a/lib/hollywood/man b/lib/hollywood/man
+index 2d42513..f4d8bbb 100755
+--- a/lib/hollywood/man
++++ b/lib/hollywood/man
+@@ -19,7 +19,7 @@ command -v ccze >/dev/null 2>&1 || exit 1
+ 
+ trap "pkill -f -9 lib/hollywood/ >/dev/null 2>&1; exit" INT
+ while true; do
+-	FILES=$(ls /usr/share/man/man1/ | sort -R | sed "s/\.1\.gz.*$//" | head -n 4096)
++	FILES=$(ls /usr/share/man/man1/ /run/current-system/sw/share/man/man1/ | sort -R | sed "s/\.1\.gz.*$//" | head -n 4096)
+ 	for f in $FILES; do
+ 		man "$f" | ccze -A
+ 		sleep 0.2
diff --git a/nixpkgs/pkgs/applications/misc/holochain-launcher/default.nix b/nixpkgs/pkgs/applications/misc/holochain-launcher/default.nix
new file mode 100644
index 000000000000..f2be253e3fac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/holochain-launcher/default.nix
@@ -0,0 +1,64 @@
+{ stdenv
+, lib
+, fetchurl
+, autoPatchelfHook
+, pkg-config
+, dpkg
+, openssl
+, webkitgtk
+, libappindicator
+, wrapGAppsHook
+, shared-mime-info
+, glib-networking
+}:
+
+stdenv.mkDerivation rec {
+  name = "holochain-launcher";
+  version = "0.11.0";
+  prerelease = "beta-2";
+
+  src = fetchurl {
+    url = "https://github.com/holochain/launcher/releases/download/v${version}/holochain-launcher-${prerelease}_${version}_amd64.deb";
+    sha256 = "sha256-yxovSsPyIzFONa1ACeLkZqDCElDI3uTm81YOYW0/FXE=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    wrapGAppsHook # required for FileChooser
+  ];
+
+  buildInputs = [
+    openssl
+    webkitgtk
+    libappindicator
+
+    glib-networking
+  ];
+
+  unpackCmd = "dpkg-deb -x $curSrc source";
+
+  installPhase = ''
+    mv usr $out
+    mv $out/bin/holochain-launcher-${prerelease} $out/bin/holochain-launcher
+  '';
+
+  preFixup = ''
+    patchelf --add-needed "libappindicator3.so" "$out/bin/holochain-launcher"
+
+    # without this the DevTools will just display an unparsed HTML file (see https://github.com/tauri-apps/tauri/issues/5711#issuecomment-1336409601)
+    gappsWrapperArgs+=(
+      --prefix XDG_DATA_DIRS : "${shared-mime-info}/share"
+      --set WEBKIT_DISABLE_COMPOSITING_MODE 1
+    )
+  '';
+
+  meta = with lib; {
+    description = "A cross-platform executable that launches a local Holochain conductor, and installs and opens apps";
+    homepage = "https://github.com/holochain/launcher";
+    maintainers = [ maintainers.steveej ];
+    license = licenses.cal10;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/houdini/default.nix b/nixpkgs/pkgs/applications/misc/houdini/default.nix
new file mode 100644
index 000000000000..3810136cbf5f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/houdini/default.nix
@@ -0,0 +1,101 @@
+{ lib, stdenv, writeScript, callPackage, buildFHSEnv, unwrapped ? callPackage ./runtime.nix {} }:
+
+buildFHSEnv rec {
+  name = "houdini-${unwrapped.version}";
+
+  # houdini spawns hserver (and other license tools) that is supposed to live beyond the lifespan of houdini process
+  dieWithParent = false;
+
+  # houdini needs to communicate with hserver process that it seem to be checking to be present in running processes
+  unsharePid = false;
+
+  targetPkgs = pkgs: with pkgs; [
+    libGLU
+    libGL
+    alsa-lib
+    fontconfig
+    zlib
+    libpng
+    dbus
+    nss
+    nspr
+    expat
+    pciutils
+    libxkbcommon
+    libudev0-shim
+    tbb
+    xwayland
+    qt5.qtwayland
+    nettools  # needed by licensing tools
+    bintools  # needed for ld and other tools, so ctypes can find/load sos from python
+    ocl-icd  # needed for opencl
+    numactl  # needed by hfs ocl backend
+    ncurses5  # needed by hfs ocl backend
+    zstd  # needed from 20.0
+  ] ++ (with xorg; [
+    libICE
+    libSM
+    libXmu
+    libXi
+    libXt
+    libXext
+    libX11
+    libXrender
+    libXcursor
+    libXfixes
+    libXrender
+    libXcomposite
+    libXdamage
+    libXtst
+    libxcb
+    libXScrnSaver
+    libXrandr
+    libxcb
+    xcbutil
+    xcbutilimage
+    xcbutilrenderutil
+    xcbutilcursor
+    xcbutilkeysyms
+    xcbutilwm
+  ]);
+
+  passthru = {
+    inherit unwrapped;
+  };
+
+  extraInstallCommands = let
+    executables = [
+      "bin/houdini"  # houdini flavours
+      "bin/houdinicore"
+      "bin/houdinifx"
+      "bin/hgpuinfo"  # houdini ocl config tool
+      "bin/hotl"  # hda/otl manipulation tool
+      "bin/hython"  # hython
+      "bin/hkey"  # license administration
+      "bin/husk"  # hydra rendereing tool
+      "bin/mantra"  # mantra renderer
+      "houdini/sbin/sesinetd"
+    ];
+  in ''
+    WRAPPER=$out/bin/${name}
+    EXECUTABLES="${lib.concatStringsSep " " executables}"
+    for executable in $EXECUTABLES; do
+      mkdir -p $out/$(dirname $executable)
+
+      echo "#!${stdenv.shell}" >> $out/$executable
+      echo "$WRAPPER ${unwrapped}/$executable \"\$@\"" >> $out/$executable
+    done
+
+    cd $out
+    chmod +x $EXECUTABLES
+  '';
+
+  extraBwrapArgs = [
+    "--ro-bind-try /run/opengl-driver/etc/OpenCL/vendors /etc/OpenCL/vendors"  # this is the case of NixOS
+    "--ro-bind-try /etc/OpenCL/vendors /etc/OpenCL/vendors"  # this is the case of not NixOS
+  ];
+
+  runScript = writeScript "${name}-wrapper" ''
+    exec "$@"
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/misc/houdini/runtime-build.nix b/nixpkgs/pkgs/applications/misc/houdini/runtime-build.nix
new file mode 100644
index 000000000000..60f27c194964
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/houdini/runtime-build.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, requireFile, bc, version, src, eulaDate }:
+
+let
+  license_dir = "~/.config/houdini";
+in
+stdenv.mkDerivation rec {
+  inherit version src;
+  pname = "houdini-runtime";
+
+  buildInputs = [ bc ];
+  installPhase = ''
+    patchShebangs houdini.install
+    mkdir -p $out
+    ./houdini.install --install-houdini \
+                      --install-license \
+                      --no-install-menus \
+                      --no-install-bin-symlink \
+                      --auto-install \
+                      --no-root-check \
+                      --accept-EULA ${eulaDate} \
+                      $out
+    echo "licensingMode = localValidator" >> $out/houdini/Licensing.opt  # does not seem to do anything any more. not sure, official docs do not say anything about it
+  '';
+
+  dontFixup = true;
+
+  meta = with lib; {
+    description = "3D animation application software";
+    homepage = "https://www.sidefx.com";
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    hydraPlatforms = [ ]; # requireFile src's should be excluded
+    maintainers = with maintainers; [ canndrew kwohlfahrt ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/houdini/runtime.nix b/nixpkgs/pkgs/applications/misc/houdini/runtime.nix
new file mode 100644
index 000000000000..d0d03d978717
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/houdini/runtime.nix
@@ -0,0 +1,11 @@
+{ lib, stdenv, requireFile, callPackage}:
+
+callPackage ./runtime-build.nix rec {
+  version = "20.0.506";
+  eulaDate = "2021-10-13";
+  src = requireFile rec {
+    name = "houdini-${version}-linux_x86_64_gcc11.2.tar.gz";
+    sha256 = "10dcb695bf9bb6407ccfd91c67858d69864208ee97e1e9afe216abf99db549f5";
+    url = "https://www.sidefx.com/download/daily-builds/?production=true";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hovercraft/default.nix b/nixpkgs/pkgs/applications/misc/hovercraft/default.nix
new file mode 100644
index 000000000000..25e541cf3d48
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hovercraft/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, buildPythonApplication
+, isPy3k
+, fetchFromGitHub
+, manuel
+, setuptools
+, docutils
+, lxml
+, svg-path
+, pygments
+, watchdog
+, fetchpatch
+}:
+
+buildPythonApplication rec {
+  pname = "hovercraft";
+  version = "2.7";
+  disabled = ! isPy3k;
+
+  src = fetchFromGitHub {
+    owner = "regebro";
+    repo = "hovercraft";
+    rev = version;
+    sha256 = "0k0gjlqjz424rymcfdjpj6a71ppblfls5f8y2hd800d1as4im8az";
+  };
+
+  nativeCheckInputs = [ manuel ];
+  propagatedBuildInputs = [ setuptools docutils lxml svg-path pygments watchdog ];
+  patches = [
+    (fetchpatch {
+      name = "fix tests with pygments 2.14";
+      url = "https://sources.debian.org/data/main/h/hovercraft/2.7-5/debian/patches/0003-Fix-tests-with-pygments-2.14.patch";
+      sha256 = "sha256-qz4Kp4MxlS3KPKRB5/VESCI++66U9q6cjQ0cHy3QjTc=";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Makes impress.js presentations from reStructuredText";
+    homepage = "https://github.com/regebro/hovercraft";
+    license = licenses.mit;
+    maintainers = with maintainers; [ goibhniu makefu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hr/default.nix b/nixpkgs/pkgs/applications/misc/hr/default.nix
new file mode 100644
index 000000000000..f0a43de700fc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hr/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "hr";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "LuRsT";
+    repo = "hr";
+    rev = version;
+    sha256 = "sha256-Pcnkiq7ipLoz6MFWZkCIxneUuZ3w/d+iqiyTz55WZvs=";
+  };
+
+  dontBuild = true;
+  installFlags = [ "PREFIX=$(out)" "MANPREFIX=$(out)/share" ];
+
+  preInstall = ''
+    mkdir -p $out/{bin,share}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/LuRsT/hr";
+    description = "A horizontal bar for your terminal";
+    license = licenses.mit;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.unix;
+    mainProgram = "hr";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hstr/default.nix b/nixpkgs/pkgs/applications/misc/hstr/default.nix
new file mode 100644
index 000000000000..2963ba732f05
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hstr/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, readline, ncurses
+, autoreconfHook, pkg-config, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "hstr";
+  version = "3.1";
+
+  src = fetchFromGitHub {
+    owner  = "dvorka";
+    repo   = "hstr";
+    rev    = version;
+    hash   = "sha256-OuLy1aiEwUJDGy3+UXYF1Vx1nNXic46WIZEM1xrIPfA=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ readline ncurses gettext ];
+
+  configureFlags = [ "--prefix=$(out)" ];
+
+  meta = {
+    homepage = "https://github.com/dvorka/hstr";
+    description = "Shell history suggest box - easily view, navigate, search and use your command history";
+    license = lib.licenses.asl20;
+    maintainers = [ lib.maintainers.matthiasbeyer ];
+    platforms = with lib.platforms; linux ++ darwin;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/html5validator/default.nix b/nixpkgs/pkgs/applications/misc/html5validator/default.nix
new file mode 100644
index 000000000000..6c9c65cf4270
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/html5validator/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, fetchFromGitHub
+, openjdk
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "html5validator";
+  version = "0.4.2";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "svenkreiss";
+    repo = "html5validator";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-yvclqE4+2R9q/UJU9W95U1/xVJeNj+5eKvT6VQel9k8=";
+  };
+
+  propagatedBuildInputs = [
+    openjdk
+  ] ++ (with python3.pkgs; [
+    pyyaml
+  ]);
+
+  nativeCheckInputs = with python3.pkgs; [
+    hacking
+    pytestCheckHook
+  ];
+
+  preCheck = ''
+    export PATH="$PATH:$out/bin";
+  '';
+
+  meta = with lib; {
+    description = "Command line tool that tests files for HTML5 validity";
+    homepage = "https://github.com/svenkreiss/html5validator";
+    changelog = "https://github.com/svenkreiss/html5validator/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ phunehehe ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hubstaff/default.nix b/nixpkgs/pkgs/applications/misc/hubstaff/default.nix
new file mode 100644
index 000000000000..e6b384904b70
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hubstaff/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv, fetchurl, unzip, makeWrapper, libX11, zlib, libSM, libICE
+, libXext , freetype, libXrender, fontconfig, libXft, libXinerama
+, libXfixes, libXScrnSaver, libnotify, glib , gtk3, libappindicator-gtk3
+, curl, writeShellScript, common-updater-scripts }:
+
+let
+  url = "https://hubstaff-production.s3.amazonaws.com/downloads/HubstaffClient/Builds/Release/1.6.13-269829b4/Hubstaff-1.6.13-269829b4.sh";
+  version = "1.6.13-269829b4";
+  sha256 = "0i05d8kivm09hqsc1z6vn7w0bbc3l9dawssqpqsm7kqdyaq0l304";
+
+  rpath = lib.makeLibraryPath
+    [ libX11 zlib libSM libICE libXext freetype libXrender fontconfig libXft
+      libXinerama stdenv.cc.cc.lib libnotify glib gtk3 libappindicator-gtk3
+      curl libXfixes libXScrnSaver ];
+
+in
+
+stdenv.mkDerivation {
+  pname = "hubstaff";
+  inherit version;
+
+  src = fetchurl { inherit sha256 url; };
+
+  nativeBuildInputs = [ unzip makeWrapper ];
+
+  unpackCmd = ''
+    # MojoSetups have a ZIP file at the end. ZIP’s magic string is
+    # most often PK\x03\x04. This has worked for all past updates,
+    # but feel free to come up with something more reasonable.
+    dataZipOffset=$(grep --max-count=1 --byte-offset --only-matching --text ''$'PK\x03\x04' $curSrc | cut -d: -f1)
+    dd bs=$dataZipOffset skip=1 if=$curSrc of=data.zip 2>/dev/null
+    unzip -q data.zip "data/*"
+    rm data.zip
+  '';
+
+  dontBuild = true;
+
+  installPhase = ''
+    # TODO: handle 32-bit arch?
+    rm -r x86
+    rm -r x86_64/lib64
+
+    opt=$out/opt/hubstaff
+    mkdir -p $out/bin $opt
+    cp -r . $opt/
+
+    for f in "$opt/x86_64/"*.bin.x86_64 ; do
+      patchelf --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) $f
+      wrapProgram $f --prefix LD_LIBRARY_PATH : ${rpath}
+    done
+
+    ln -s $opt/x86_64/HubstaffClient.bin.x86_64 $out/bin/HubstaffClient
+
+    # Why is this needed? SEGV otherwise.
+    ln -s $opt/data/resources $opt/x86_64/resources
+  '';
+
+  passthru.updateScript = writeShellScript "hubstaff-updater" ''
+    set -eu -o pipefail
+
+    installation_script_url=$(curl --fail --head --location --silent --output /dev/null --write-out %{url_effective} https://app.hubstaff.com/download/linux)
+
+    version=$(echo "$installation_script_url" | sed -r 's/^https:\/\/hubstaff\-production\.s3\.amazonaws\.com\/downloads\/HubstaffClient\/Builds\/Release\/([^\/]+)\/Hubstaff.+$/\1/')
+
+    sha256=$(nix-prefetch-url "$installation_script_url")
+
+    ${common-updater-scripts}/bin/update-source-version hubstaff "$version" "$sha256" "$installation_script_url"
+  '';
+
+  meta = with lib; {
+    description = "Time tracking software";
+    homepage = "https://hubstaff.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ michalrus srghma ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hue-plus/default.nix b/nixpkgs/pkgs/applications/misc/hue-plus/default.nix
new file mode 100644
index 000000000000..4cb4adcafd68
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hue-plus/default.nix
@@ -0,0 +1,42 @@
+{ python3Packages
+, fetchFromGitHub
+, lib
+, wrapQtAppsHook
+, qtbase }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "hue-plus";
+  version = "1.4.5";
+
+  src = fetchFromGitHub {
+    owner = "kusti8";
+    repo = pname;
+    rev = "7ce7c4603c6d0ab1da29b0d4080aa05f57bd1760";
+    sha256 = "sha256-dDIJXhB3rmKnawOYJHE7WK38b0M5722zA+yLgpEjDyI=";
+  };
+
+  buildInputs = [ qtbase ];
+
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pyserial pyqt5 pyaudio appdirs setuptools
+  ];
+
+  doCheck = false;
+  dontWrapQtApps = true;
+
+  makeWrapperArgs = [
+    "\${qtWrapperArgs[@]}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/kusti8/hue-plus";
+    description = "A Windows and Linux driver in Python for the NZXT Hue+";
+    longDescription = ''
+      A cross-platform driver in Python for the NZXT Hue+. Supports all functionality except FPS, CPU, and GPU lighting.
+    '';
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ garaiza-93 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/huggle/00-remove-third-party.patch b/nixpkgs/pkgs/applications/misc/huggle/00-remove-third-party.patch
new file mode 100644
index 000000000000..9d7b80063af8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/huggle/00-remove-third-party.patch
@@ -0,0 +1,14 @@
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index b7530e8f..af94a62d 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -59,8 +59,7 @@ if(NOT MINGW AND WIN32)
+     set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}/Debug)
+ endif()
+ 
+-add_subdirectory(3rd/libirc/libirc libirc)
+-add_subdirectory(3rd/libirc/libircclient libircclient)
++include_directories(@libirc_includes@)
+ 
+ # YAML
+ find_package(YAML-CPP 0.6.3 QUIET)
diff --git a/nixpkgs/pkgs/applications/misc/huggle/01-extensions.patch b/nixpkgs/pkgs/applications/misc/huggle/01-extensions.patch
new file mode 100644
index 000000000000..aa36bb0356f7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/huggle/01-extensions.patch
@@ -0,0 +1,13 @@
+diff --git a/src/huggle_core/definitions_prod.hpp b/src/huggle_core/definitions_prod.hpp
+index 1fc5b1fb..17881ade 100644
+--- a/src/huggle_core/definitions_prod.hpp
++++ b/src/huggle_core/definitions_prod.hpp
+@@ -216,7 +216,7 @@ namespace std { typedef decltype(nullptr) nullptr_t; }
+     #define HUGGLE_GLOBAL_EXTENSION_PATH            QCoreApplication::applicationDirPath() + "/extensions"
+ #elif defined __linux__
+     #define HUGGLE_UPDATER_PLATFORM_TYPE            "linux"
+-    #define HUGGLE_GLOBAL_EXTENSION_PATH            "/usr/local/share/huggle/extensions"
++    #define HUGGLE_GLOBAL_EXTENSION_PATH            "@out@/share/huggle/extensions"
+ #elif defined HUGGLE_WIN
+     // This is needed by yaml cpp library, otherwise it won't build with MSVC
+     #define YAML_CPP_DLL
diff --git a/nixpkgs/pkgs/applications/misc/huggle/default.nix b/nixpkgs/pkgs/applications/misc/huggle/default.nix
new file mode 100644
index 000000000000..3a6f25ede695
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/huggle/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, ncurses
+, which
+, cmake
+, unzip
+, wrapQtAppsHook
+, qtwebengine
+, yaml-cpp
+, libirc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "huggle";
+  version = "3.4.12";
+
+  src = fetchFromGitHub {
+    owner = "huggle";
+    repo = "huggle3-qt-lx";
+    rev = version;
+    sha256 = "scNGmMVZ6z9FTQuZCdwRYk0WP5qKfdb/M9Co8TbiMDE=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    pkg-config
+    which
+    cmake
+  ];
+  buildInputs = [ ncurses yaml-cpp qtwebengine libirc ];
+
+  patches = [ ./00-remove-third-party.patch ./01-extensions.patch ];
+  postPatch = ''
+    rm -r src/3rd
+    echo ${version} > src/huggle_core/version.txt
+    substituteInPlace src/huggle_core/definitions_prod.hpp --subst-var out
+    substituteInPlace src/CMakeLists.txt --replace '@libirc_includes@' '${libirc.out}'
+  '';
+
+  cmakeBuildType = "None";
+
+  cmakeFlags = [
+    "-S" "/build/source/src"
+    "-DINSTALL_DATA_DIR=bin"
+    "-DQT5_BUILD=ON"
+    "-DWEB_ENGINE=ON"
+    "-DBUILD_SHARED_LIBS=OFF"
+    "-Wno-dev"
+    "-DHUGGLE_EXT=TRUE"
+  ];
+
+  installTargets = [ "install" ];
+
+  meta = with lib; {
+    description = "Anti-vandalism tool for use on MediaWiki-based projects";
+    homepage = "https://github.com/huggle/huggle3-qt-lx";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.fee1-dead ];
+    platforms = platforms.x86_64;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hyprdim/default.nix b/nixpkgs/pkgs/applications/misc/hyprdim/default.nix
new file mode 100644
index 000000000000..10938330196a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hyprdim/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hyprdim";
+  version = "2.2.3";
+
+  src = fetchFromGitHub {
+    owner = "donovanglover";
+    repo = "hyprdim";
+    rev = version;
+    hash = "sha256-Eeh0D3DkC4ureDUE+BXTGcMFNmZ0hLSidlKlL4ZDgsQ=";
+  };
+
+  cargoHash = "sha256-hgcGzRLB1L3yxJjw1ECDJPmbl1W+2OS4KDojclyVYrc=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installManPage target/man/hyprdim.1
+
+    installShellCompletion --cmd hyprdim \
+      --bash <(cat target/completions/hyprdim.bash) \
+      --fish <(cat target/completions/hyprdim.fish) \
+      --zsh <(cat target/completions/_hyprdim)
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "Automatically dim windows in Hyprland when switching between them";
+    homepage = "https://github.com/donovanglover/hyprdim";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ donovanglover ];
+    mainProgram = "hyprdim";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hyprland-autoname-workspaces/default.nix b/nixpkgs/pkgs/applications/misc/hyprland-autoname-workspaces/default.nix
new file mode 100644
index 000000000000..7e3db80aadc8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hyprland-autoname-workspaces/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hyprland-autoname-workspaces";
+  version = "1.1.13";
+
+  src = fetchFromGitHub {
+    owner = "hyprland-community";
+    repo = "hyprland-autoname-workspaces";
+    rev = version;
+    hash = "sha256-JEzsbJcDX/qx1CMy+3UwcHOwFLPqyAG58MpGMtdSyYY=";
+  };
+
+  cargoHash = "sha256-Rpivw4VCVHjZywDwr4pajfGv/mkOdVrXVT/9Oe2Hw44=";
+
+  meta = with lib; {
+    description = "Automatically rename workspaces with icons of started applications";
+    homepage = "https://github.com/hyprland-community/hyprland-autoname-workspaces";
+    license = licenses.isc;
+    maintainers = with maintainers; [ donovanglover ];
+    mainProgram = "hyprland-autoname-workspaces";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/hyprnome/default.nix b/nixpkgs/pkgs/applications/misc/hyprnome/default.nix
new file mode 100644
index 000000000000..d8d6ba70c8f7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/hyprnome/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, nix-update-script
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "hyprnome";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "donovanglover";
+    repo = "hyprnome";
+    rev = version;
+    hash = "sha256-zlXiT2EOIdgIDI4NQuU3C903SSq5bylBAFJXyv7mdJ4=";
+  };
+
+  cargoHash = "sha256-DpbRs97sr5wpJSrYF99ZiQ0SZOZdoQjfaLhKIAU95HA=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  postInstall = ''
+    installManPage target/man/hyprnome.1
+
+    installShellCompletion --cmd hyprnome \
+      --bash <(cat target/completions/hyprnome.bash) \
+      --fish <(cat target/completions/hyprnome.fish) \
+      --zsh <(cat target/completions/_hyprnome)
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    description = "GNOME-like workspace switching in Hyprland";
+    homepage = "https://github.com/donovanglover/hyprnome";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ donovanglover ];
+    mainProgram = "hyprnome";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/icesl/default.nix b/nixpkgs/pkgs/applications/misc/icesl/default.nix
new file mode 100644
index 000000000000..1a079ab8274c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/icesl/default.nix
@@ -0,0 +1,45 @@
+{ stdenv, lib, fetchzip, freeglut, libXmu, libXi, libX11, libICE, libGLU, libGL, libSM
+, libXext, glibc, lua, luabind, glfw, libgccjit, dialog, makeWrapper
+}:
+let
+  lpath = lib.makeLibraryPath [ libXmu libXi libX11 freeglut libICE libGLU libGL libSM libXext  glibc lua glfw luabind libgccjit ];
+in
+stdenv.mkDerivation rec {
+  pname = "iceSL";
+  version = "2.4.1";
+
+  src =  if stdenv.hostPlatform.system == "x86_64-linux" then fetchzip {
+    url = "https://icesl.loria.fr/assets/other/download.php?build=${version}&os=amd64";
+    extension = "zip";
+    sha256 = "0rrnkqkhlsjclif5cjbf17qz64vs95ja49xarxjvq54wb4jhbs4l";
+  } else if stdenv.hostPlatform.system == "i686-linux" then fetchzip {
+    url = "https://icesl.loria.fr/assets/other/download.php?build=${version}&os=i386";
+    extension = "zip";
+    sha256 = "0n2yyxzw0arkc70f0qli4n5chdlh9vc7aqizk4v7825mcglhwlyh";
+  } else throw "Unsupported architecture";
+
+  nativeBuildInputs = [ makeWrapper ];
+  installPhase = ''
+    cp -r ./ $out
+    rm $out/bin/*.so
+    mkdir $out/oldbin
+    mv $out/bin/IceSL-slicer $out/oldbin/IceSL-slicer
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${lpath}" \
+      $out/oldbin/IceSL-slicer
+    makeWrapper $out/oldbin/IceSL-slicer $out/bin/icesl --prefix PATH : ${dialog}/bin
+  '';
+
+  meta = with lib; {
+    description = "GPU-accelerated procedural modeler and slicer for 3D printing";
+    homepage = "https://icesl.loria.fr/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.inria-icesl;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    maintainers = with maintainers; [ mgttlinger ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ikiwiki/default.nix b/nixpkgs/pkgs/applications/misc/ikiwiki/default.nix
new file mode 100644
index 000000000000..49798c843231
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ikiwiki/default.nix
@@ -0,0 +1,99 @@
+{ lib, stdenv, fetchurl, fetchpatch, perlPackages, gettext, makeWrapper, ImageMagick, which, highlight
+, gitSupport ? false, git
+, docutilsSupport ? false, python, docutils
+, monotoneSupport ? false, monotone
+, bazaarSupport ? false, breezy
+, cvsSupport ? false, cvs, cvsps
+, subversionSupport ? false, subversion
+, mercurialSupport ? false, mercurial
+, extraUtils ? []
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ikiwiki";
+  version = "3.20200202.3";
+
+  src = fetchurl {
+    url = "mirror://debian/pool/main/i/ikiwiki/ikiwiki_${version}.orig.tar.xz";
+    sha256 = "0skrc8r4wh4mjfgw1c94awr5sacfb9nfsbm4frikanc9xsy16ksr";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ which highlight ]
+    ++ (with perlPackages; [ perl TextMarkdown URI HTMLParser HTMLScrubber HTMLTemplate
+      TimeDate gettext DBFile CGISession CGIFormBuilder LocaleGettext
+      RpcXML XMLSimple ImageMagick YAML YAMLLibYAML HTMLTree AuthenPassphrase
+      NetOpenIDConsumer LWPxParanoidAgent CryptSSLeay ])
+    ++ lib.optionals docutilsSupport [
+         (python.withPackages (pp: with pp; [ pygments ]))
+         docutils
+       ]
+    ++ lib.optionals gitSupport [git]
+    ++ lib.optionals monotoneSupport [monotone]
+    ++ lib.optionals bazaarSupport [breezy]
+    ++ lib.optionals cvsSupport [cvs cvsps perlPackages.Filechdir]
+    ++ lib.optionals subversionSupport [subversion]
+    ++ lib.optionals mercurialSupport [mercurial];
+
+  patches = [
+    # A few markdown tests fail, but this is expected when using Text::Markdown
+    # instead of Text::Markdown::Discount.
+    ./remove-markdown-tests.patch
+
+    (fetchpatch {
+      name = "Catch-up-to-highlight-4.0-API-change";
+      url = "http://source.ikiwiki.branchable.com/?p=source.git;a=patch;h=9ea3f9dfe7c0341f4e002b48728b8139293e19d0";
+      sha256 = "16s4wvsfclx0a5cm2awr69dvw2vsi8lpm0d7kyl5w0kjlmzfc7h9";
+    })
+  ];
+
+  postPatch = ''
+    sed -i s@/usr/bin/perl@${perlPackages.perl}/bin/perl@ pm_filter mdwn2man
+    sed -i s@/etc/ikiwiki@$out/etc@ Makefile.PL
+    sed -i /ENV{PATH}/d ikiwiki.in
+    # State the gcc dependency, and make the cgi use our wrapper
+    sed -i -e 's@$0@"'$out/bin/ikiwiki'"@' \
+        -e "s@'cc'@'${stdenv.cc}/bin/gcc'@" IkiWiki/Wrapper.pm
+    # Without patched plugin shebangs, some tests like t/rst.t fail
+    # (with docutilsSupport enabled)
+    patchShebangs plugins/*
+
+    # Creating shared git repo fails when running tests in Nix sandbox.
+    # The error is: "fatal: Could not make /tmp/ikiwiki-test-git.2043/repo/branches/ writable by group".
+    # Hopefully, not many people use `ikiwiki-makerepo` to create locally shared repositories these days.
+    substituteInPlace ikiwiki-makerepo --replace "git --bare init --shared" "git --bare init"
+  '';
+
+  configurePhase = "perl Makefile.PL PREFIX=$out";
+
+  postInstall = ''
+    for a in "$out/bin/"*; do
+      wrapProgram $a --suffix PERL5LIB : $PERL5LIB --prefix PATH : ${perlPackages.perl}/bin:$out/bin \
+      ${lib.optionalString gitSupport "--prefix PATH : ${git}/bin "} \
+      ${lib.optionalString monotoneSupport "--prefix PATH : ${monotone}/bin "} \
+      ${lib.optionalString bazaarSupport "--prefix PATH : ${breezy}/bin "} \
+      ${lib.optionalString cvsSupport "--prefix PATH : ${cvs}/bin "} \
+      ${lib.optionalString cvsSupport "--prefix PATH : ${cvsps}/bin "} \
+      ${lib.optionalString subversionSupport "--prefix PATH : ${subversion.out}/bin "} \
+      ${lib.optionalString mercurialSupport "--prefix PATH : ${mercurial}/bin "} \
+      ${lib.optionalString docutilsSupport ''--prefix PYTHONPATH : "$(toPythonPath ${docutils})" ''} \
+      ${lib.concatMapStrings (x: "--prefix PATH : ${x}/bin ") extraUtils}
+    done
+  '';
+
+  preCheck = ''
+    # Git needs some help figuring this out during test suite run.
+    export EMAIL="nobody@example.org"
+  '';
+
+  checkTarget = "test";
+  doCheck = true;
+
+  meta = with lib; {
+    description = "Wiki compiler, storing pages and history in a RCS";
+    homepage = "http://ikiwiki.info/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.wentasah ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ikiwiki/remove-markdown-tests.patch b/nixpkgs/pkgs/applications/misc/ikiwiki/remove-markdown-tests.patch
new file mode 100644
index 000000000000..bae63a10bf67
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ikiwiki/remove-markdown-tests.patch
@@ -0,0 +1,35 @@
+diff --git a/t/mdwn.t b/t/mdwn.t
+index 966aad2..2756173 100755
+--- a/t/mdwn.t
++++ b/t/mdwn.t
+@@ -22,30 +22,13 @@ foreach my $multimarkdown (qw(1 0)) {
+ 		"<p>C. S. Lewis wrote books</p>\n",
+ 		"alphalist off by default for multimarkdown = $multimarkdown");
+ 
+-	like(IkiWiki::htmlize("foo", "foo", "mdwn",
+-		"This works[^1]\n\n[^1]: Sometimes it doesn't.\n"),
+-		qr{<p>This works.*fnref:1.*},
+-		"footnotes on by default for multimarkdown = $multimarkdown");
+-
+ 	$config{mdwn_footnotes} = 0;
+ 	unlike(IkiWiki::htmlize("foo", "foo", "mdwn",
+ 		"An unusual link label: [^1]\n\n[^1]: http://example.com/\n"),
+ 		qr{<p>An unusual link label: .*fnref:1.*},
+ 		"footnotes can be disabled for multimarkdown = $multimarkdown");
+-
+-	$config{mdwn_footnotes} = 1;
+-	like(IkiWiki::htmlize("foo", "foo", "mdwn",
+-		"This works[^1]\n\n[^1]: Sometimes it doesn't.\n"),
+-		qr{<p>This works.*fnref:1.*},
+-		"footnotes can be enabled for multimarkdown = $multimarkdown");
+ }
+ 
+-$config{mdwn_alpha_lists} = 1;
+-like(IkiWiki::htmlize("foo", "foo", "mdwn",
+-	"A. One\n".
+-	"B. Two\n"),
+-	qr{<ol\W}, "alphalist can be enabled");
+-
+ $config{mdwn_alpha_lists} = 0;
+ like(IkiWiki::htmlize("foo", "foo", "mdwn",
+ 	"A. One\n".
diff --git a/nixpkgs/pkgs/applications/misc/imaginer/default.nix b/nixpkgs/pkgs/applications/misc/imaginer/default.nix
new file mode 100644
index 000000000000..3f2b99954e08
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/imaginer/default.nix
@@ -0,0 +1,68 @@
+{ stdenv
+, lib
+, appstream-glib
+, blueprint-compiler
+, desktop-file-utils
+, fetchFromGitHub
+, gettext
+, glib
+, gobject-introspection
+, libadwaita
+, libsoup_3
+, meson
+, ninja
+, pkg-config
+, python3Packages
+, wrapGAppsHook4
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "imaginer";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "ImaginerApp";
+    repo = "Imaginer";
+    rev = "v${version}";
+    hash = "sha256-x1ZnmfaMfxnITiuFDlMPfTU8KZbd1ME9jDevnlsrbJs=";
+  };
+
+  format = "other";
+  dontWrapGApps = true;
+
+  nativeBuildInputs = [
+    appstream-glib
+    blueprint-compiler
+    desktop-file-utils
+    gettext
+    glib
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    libadwaita
+    libsoup_3
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    openai
+    pillow
+    pygobject3
+    requests
+  ];
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ImaginerApp/Imaginer";
+    description = "Imaginer with AI";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ _0xMRTT ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/inherd-quake/default.nix b/nixpkgs/pkgs/applications/misc/inherd-quake/default.nix
new file mode 100644
index 000000000000..68ca556aac63
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/inherd-quake/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, openssl
+, stdenv
+, CoreServices
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "inherd-quake";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner = "phodal";
+    repo = "quake";
+    rev = "v${version}";
+    sha256 = "sha256-HKAR4LJm0lrQgTOCqtYIRFbO3qHtPbr4Fpx2ek1oJ4Q=";
+  };
+
+  cargoSha256 = "sha256-svvtZyfN91OT3yqxH6TgFhGYg9drpXsts4p2WqSHG8w=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreServices
+    Security
+  ];
+
+  meta = with lib; {
+    description = "A knowledge management meta-framework for geeks";
+    homepage = "https://github.com/phodal/quake";
+    license = licenses.mit;
+    maintainers = [ maintainers.elliot ];
+    mainProgram = "quake";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/inkcut/default.nix b/nixpkgs/pkgs/applications/misc/inkcut/default.nix
new file mode 100644
index 000000000000..36d001d62d46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/inkcut/default.nix
@@ -0,0 +1,95 @@
+{ lib
+, fetchpatch
+, python3
+, fetchFromGitHub
+, wrapQtAppsHook
+, cups
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "inkcut";
+  version = "2.1.5";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-S5IrNWVoUp1w+P7DrKlOUOyY3Q16CHSct9ndZOB3UpU=";
+  };
+
+  patches = [
+    # fix opening the extension on inkscape 1.2
+    # https://github.com/inkcut/inkcut/pull/340
+    (fetchpatch {
+      url = "https://github.com/inkcut/inkcut/commit/d5d5d0ab3c588c576b668f4c7b07a10609ba2fd0.patch";
+      hash = "sha256-szfiOujuV7OOwYK/OU51m9FK6dzkbWds+h0cr5dGIg4=";
+    })
+    # fix loading a document from stdin (as used from the extension)
+    # https://github.com/inkcut/inkcut/issues/341
+    (fetchpatch {
+      url = "https://github.com/inkcut/inkcut/commit/748ab4157f87afec37dadd715094e87d02c9c739.patch";
+      hash = "sha256-ZGiwZru2bUYu749YSz5vxmGwLTAoYIAsafcX6PmdbYo=";
+      revert = true;
+    })
+    # fix distutils deprecation error
+    # https://github.com/inkcut/inkcut/pull/343
+    (fetchpatch {
+      url = "https://github.com/inkcut/inkcut/commit/9fb95204981bcc51401a1bc10caa02d1fae0d6cb.patch";
+      hash = "sha256-nriys7IWPGykZjVz+DIDsE9Tm40DewkHQlIUaxFwtzM=";
+    })
+  ];
+
+  postPatch = ''
+    substituteInPlace inkcut/device/transports/printer/plugin.py \
+      --replace ", 'lpr', " ", '${cups}/bin/lpr', "
+  '';
+
+  nativeBuildInputs = [ wrapQtAppsHook ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    enamlx
+    twisted
+    lxml
+    qreactor
+    jsonpickle
+    pyserial
+    pycups
+    qtconsole
+    pyqt5
+    setuptools
+  ];
+
+  # QtApplication.instance() does not work during tests?
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "inkcut"
+    "inkcut.cli"
+    "inkcut.console"
+    "inkcut.core"
+    "inkcut.device"
+    "inkcut.job"
+    "inkcut.joystick"
+    "inkcut.monitor"
+    "inkcut.preview"
+  ];
+
+  dontWrapQtApps = true;
+  makeWrapperArgs = [ "--unset" "PYTHONPATH" "\${qtWrapperArgs[@]}" ];
+
+  postInstall = ''
+    mkdir -p $out/share/inkscape/extensions
+
+    cp plugins/inkscape/* $out/share/inkscape/extensions
+
+    sed -i "s|cmd = \['inkcut'\]|cmd = \['$out/bin/inkcut'\]|" $out/share/inkscape/extensions/inkcut_cut.py
+    sed -i "s|cmd = \['inkcut'\]|cmd = \['$out/bin/inkcut'\]|" $out/share/inkscape/extensions/inkcut_open.py
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.codelv.com/projects/inkcut/";
+    description = "Control 2D plotters, cutters, engravers, and CNC machines";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ raboof ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/inlyne/default.nix b/nixpkgs/pkgs/applications/misc/inlyne/default.nix
new file mode 100644
index 000000000000..d9698c04aed5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/inlyne/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+, stdenv
+, pkg-config
+, fontconfig
+, xorg
+, libGL
+, openssl
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "inlyne";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "trimental";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-DSi6iS1ySdvGf6FxZpsDOAFpAKx/APcZjxA3Qy0gQBU=";
+  };
+
+  cargoHash = "sha256-UzegSJGAOBUDN8WluN7fLWS7NfHhm9YY0Zuq6DCIqHo=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ] ++ lib.optionals stdenv.isLinux [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals stdenv.isLinux [
+    fontconfig
+    xorg.libXcursor
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libxcb
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.AppKit
+  ];
+
+  checkFlags = lib.optionals stdenv.isDarwin [
+    # time out on darwin
+    "--skip=interpreter::tests::centered_image_with_size_align_and_link"
+    "--skip=watcher::tests::the_gauntlet"
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd inlyne \
+      --bash <($out/bin/inlyne --gen-completions bash) \
+      --fish <($out/bin/inlyne --gen-completions fish) \
+      --zsh <($out/bin/inlyne --gen-completions zsh)
+  '';
+
+  postFixup = lib.optionalString stdenv.isLinux ''
+    patchelf $out/bin/inlyne \
+      --add-rpath ${lib.makeLibraryPath [ libGL xorg.libX11 ]}
+  '';
+
+  meta = with lib; {
+    description = "A GPU powered browserless markdown viewer";
+    homepage = "https://github.com/trimental/inlyne";
+    changelog = "https://github.com/trimental/inlyne/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "inlyne";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/input-leap/default.nix b/nixpkgs/pkgs/applications/misc/input-leap/default.nix
new file mode 100644
index 000000000000..567bb08fb911
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/input-leap/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+
+, withLibei ? true
+
+, avahi
+, curl
+, libICE
+, libSM
+, libX11
+, libXdmcp
+, libXext
+, libXinerama
+, libXrandr
+, libXtst
+, libei
+, libportal
+, openssl
+, pkg-config
+, qtbase
+, qttools
+, wrapGAppsHook
+}:
+
+mkDerivation rec {
+  pname = "input-leap";
+  version = "unstable-2023-12-27";
+
+  src = fetchFromGitHub {
+    owner = "input-leap";
+    repo = "input-leap";
+    rev = "ecf1fb6645af7b79e6ea984d3c9698ca0ab6f391";
+    hash = "sha256-TEv1xR1wUG3wXNATLLIZKOtW05X96wsPNOlE77OQK54=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ pkg-config cmake wrapGAppsHook qttools ];
+  buildInputs = [
+    curl qtbase avahi
+    libX11 libXext libXtst libXinerama libXrandr libXdmcp libICE libSM
+  ] ++ lib.optionals withLibei [ libei libportal ];
+
+  cmakeFlags = [
+    "-DINPUTLEAP_REVISION=${builtins.substring 0 8 src.rev}"
+  ] ++ lib.optional withLibei "-DINPUTLEAP_BUILD_LIBEI=ON";
+
+  dontWrapGApps = true;
+  preFixup = ''
+    qtWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}"
+        --prefix PATH : "${lib.makeBinPath [ openssl ]}"
+    )
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/share/applications/io.github.input_leap.InputLeap.desktop \
+      --replace "Exec=input-leap" "Exec=$out/bin/input-leap"
+  '';
+
+  meta = {
+    description = "Open-source KVM software";
+    longDescription = ''
+      Input Leap is software that mimics the functionality of a KVM switch, which historically
+      would allow you to use a single keyboard and mouse to control multiple computers by
+      physically turning a dial on the box to switch the machine you're controlling at any
+      given moment. Input Leap does this in software, allowing you to tell it which machine
+      to control by moving your mouse to the edge of the screen, or by using a keypress
+      to switch focus to a different system.
+    '';
+    homepage = "https://github.com/input-leap/input-leap";
+    license = lib.licenses.gpl2Plus;
+    maintainers = with lib.maintainers; [ kovirobi phryneas twey shymega ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/insulator2/Cargo.lock b/nixpkgs/pkgs/applications/misc/insulator2/Cargo.lock
new file mode 100644
index 000000000000..e119d57c4d10
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/insulator2/Cargo.lock
@@ -0,0 +1,5639 @@
+# 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 = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "ahash"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+dependencies = [
+ "getrandom 0.2.8",
+ "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 = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[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.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
+
+[[package]]
+name = "apache-avro"
+version = "0.15.0"
+source = "git+https://github.com/apache/avro?rev=b8b83b72f7184cf1b388fc20331d11eabbd93e06#b8b83b72f7184cf1b388fc20331d11eabbd93e06"
+dependencies = [
+ "byteorder",
+ "digest",
+ "lazy_static",
+ "libflate",
+ "log",
+ "num-bigint",
+ "quad-rand",
+ "rand 0.8.5",
+ "regex",
+ "serde",
+ "serde_json",
+ "strum",
+ "strum_macros",
+ "thiserror",
+ "typed-builder",
+ "uuid",
+ "zerocopy",
+]
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[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 = "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-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",
+ "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.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794"
+dependencies = [
+ "async-lock",
+ "autocfg",
+ "concurrent-queue",
+ "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-object-pool"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aeb901c30ebc2fc4ab46395bbfbdba9542c16559d853645d75190c3056caf3bc"
+dependencies = [
+ "async-std",
+]
+
+[[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",
+ "blocking",
+ "cfg-if",
+ "event-listener",
+ "futures-lite",
+ "libc",
+ "signal-hook",
+ "windows-sys 0.42.0",
+]
+
+[[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",
+ "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.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.12",
+]
+
+[[package]]
+name = "atk"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
+dependencies = [
+ "atk-sys",
+ "bitflags",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.0.3",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599"
+
+[[package]]
+name = "attohttpc"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fcf00bc6d5abb29b5f97e3c61a90b6d3caa12f3faf897d4a3e3607c050a35a7"
+dependencies = [
+ "flate2",
+ "http",
+ "log",
+ "native-tls",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "url",
+]
+
+[[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.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 = "basic-cookies"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb53b6b315f924c7f113b162e53b3901c05fc9966baf84d201dfcc7432a4bb38"
+dependencies = [
+ "lalrpop",
+ "lalrpop-util",
+ "regex",
+]
+
+[[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 = "block"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
+dependencies = [
+ "generic-array",
+]
+
+[[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",
+ "futures-lite",
+]
+
+[[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 1.14.0",
+]
+
+[[package]]
+name = "borsh"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "40f9ca3698b2e4cb7c15571db0abc5551dca417a21ae8140460b50309bb2cc62"
+dependencies = [
+ "borsh-derive",
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "borsh-derive"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "598b3eacc6db9c3ee57b22707ad8f6a8d2f6d442bfe24ffeb8cbb70ca59e6a35"
+dependencies = [
+ "borsh-derive-internal",
+ "borsh-schema-derive-internal",
+ "proc-macro-crate 0.1.5",
+ "proc-macro2",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-derive-internal"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "186b734fa1c9f6743e90c95d7233c9faab6360d1a96d4ffa19d9cfd1e9350f8a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "borsh-schema-derive-internal"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99b7ff1008316626f485991b960ade129253d4034014616b94f309a15366cc49"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "brotli"
+version = "3.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "2.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "bstr"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "bytecheck"
+version = "0.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d11cac2c12b5adc6570dad2ee1b87eff4955dac476fe12d81e5fdd352e52406f"
+dependencies = [
+ "bytecheck_derive",
+ "ptr_meta",
+]
+
+[[package]]
+name = "bytecheck_derive"
+version = "0.6.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13e576ebe98e605500b3c8041bb888e966653577172df6dd97398714eb30b9bf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "bytemuck"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393"
+
+[[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 = "cairo-rs"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
+dependencies = [
+ "bitflags",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps 6.0.3",
+]
+
+[[package]]
+name = "cargo_toml"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f83bc2e401ed041b7057345ebc488c005efa0341d5541ce7004d30458d0090b"
+dependencies = [
+ "serde",
+ "toml 0.7.3",
+]
+
+[[package]]
+name = "castaway"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6"
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cesu8"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
+
+[[package]]
+name = "cfb"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
+dependencies = [
+ "byteorder",
+ "fnv",
+ "uuid",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa"
+dependencies = [
+ "smallvec",
+]
+
+[[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",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "serde",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
+dependencies = [
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
+dependencies = [
+ "bitflags",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[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 = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[package]]
+name = "concurrent-queue"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[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 = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags",
+ "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",
+ "core-foundation",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+dependencies = [
+ "cfg-if",
+ "crossbeam-utils",
+]
+
+[[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 = "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",
+ "typenum",
+]
+
+[[package]]
+name = "cssparser"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa 0.4.8",
+ "matches",
+ "phf 0.8.0",
+ "proc-macro2",
+ "quote",
+ "smallvec",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cssparser-macros"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfae75de57f2b2e85e8768c3ea840fd159c8f33e2b6522c7835b7abac81be16e"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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",
+ "winapi",
+]
+
+[[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",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.91"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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_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_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.13.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835"
+dependencies = [
+ "darling_core 0.13.4",
+ "quote",
+ "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",
+ "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",
+ "proc-macro2",
+ "quote",
+ "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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+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 = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "downcast"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1"
+
+[[package]]
+name = "dtoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
+
+[[package]]
+name = "dtoa-short"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bde03329ae10e79ede66c9ce4dc930aa8599043b0743008548680f25b91502d6"
+dependencies = [
+ "dtoa",
+]
+
+[[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.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 = "embed-resource"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80663502655af01a2902dff3f06869330782267924bf1788410b74edcd93770a"
+dependencies = [
+ "cc",
+ "rustc_version 0.4.0",
+ "toml 0.7.3",
+ "vswhom",
+ "winreg 0.11.0",
+]
+
+[[package]]
+name = "embed_plist"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
+
+[[package]]
+name = "ena"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2e5d13ca2353ab7d0230988629def93914a8c4015f621f9b13ed2955614731d"
+dependencies = [
+ "log",
+]
+
+[[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.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[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 = "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.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "field-offset"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
+dependencies = [
+ "memoffset",
+ "rustc_version 0.3.3",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "windows-sys 0.45.0",
+]
+
+[[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",
+]
+
+[[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.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fragile"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa"
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[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",
+ "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.12",
+]
+
+[[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 = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "gdk"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.15.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
+dependencies = [
+ "bitflags",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.0.3",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps 6.0.3",
+]
+
+[[package]]
+name = "gdkx11-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178"
+dependencies = [
+ "gdk-sys",
+ "glib-sys",
+ "libc",
+ "system-deps 6.0.3",
+ "x11",
+]
+
+[[package]]
+name = "generator"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33a20a288a94683f5f4da0adecdbe095c94a77c295e514cc6484e9394dd8376e"
+dependencies = [
+ "cc",
+ "libc",
+ "log",
+ "rustversion",
+ "windows 0.44.0",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[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.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[package]]
+name = "gio"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.0.3",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.15.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25a68131a662b04931e71891fb14aaf65ee4b44d08e8abc10f49e77418c86c64"
+dependencies = [
+ "anyhow",
+ "heck 0.4.1",
+ "proc-macro-crate 1.3.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
+dependencies = [
+ "libc",
+ "system-deps 6.0.3",
+]
+
+[[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",
+ "bstr",
+ "fnv",
+ "log",
+ "regex",
+]
+
+[[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.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps 6.0.3",
+]
+
+[[package]]
+name = "gtk"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0"
+dependencies = [
+ "atk",
+ "bitflags",
+ "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.15.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "system-deps 6.0.3",
+]
+
+[[package]]
+name = "gtk3-macros"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24f518afe90c23fba585b2d7697856f9e6a7bbc62f65588035e66f6afb01a2e9"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate 1.3.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f"
+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 0.7.6",
+]
+
+[[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 = "hashlink"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"
+dependencies = [
+ "hashbrown 0.12.3",
+]
+
+[[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.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 = "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 = "html5ever"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "http"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 1.0.5",
+]
+
+[[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 = "http-range"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
+
+[[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.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6b56b6265f15908780cbee987912c1e98dbca675361f748291605a8a3a1df09"
+dependencies = [
+ "assert-json-diff",
+ "async-object-pool",
+ "async-trait",
+ "base64 0.13.1",
+ "basic-cookies",
+ "crossbeam-utils",
+ "form_urlencoded",
+ "futures-util",
+ "hyper",
+ "isahc",
+ "lazy_static",
+ "levenshtein",
+ "log",
+ "regex",
+ "serde",
+ "serde_json",
+ "serde_regex",
+ "similar",
+ "tokio",
+ "url",
+]
+
+[[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.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c"
+dependencies = [
+ "bytes",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.5",
+ "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 = "ico"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "031530fe562d8c8d71c0635013d6d155bbfe8ba0aa4b4d2d24ce8af6b71047bd"
+dependencies = [
+ "byteorder",
+ "png",
+]
+
+[[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.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "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 = "image"
+version = "0.24.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "num-rational",
+ "num-traits",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "infer"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3"
+dependencies = [
+ "cfb",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "insulator2"
+version = "0.0.0"
+dependencies = [
+ "apache-avro",
+ "async-trait",
+ "dirs",
+ "env_logger",
+ "futures",
+ "httpmock",
+ "log",
+ "mockall",
+ "num-bigint",
+ "once_cell",
+ "r2d2",
+ "r2d2_sqlite",
+ "rand 0.8.5",
+ "rdkafka",
+ "reqwest",
+ "rlimit",
+ "rusqlite",
+ "rust-keystore",
+ "rust_decimal",
+ "serde",
+ "serde_json",
+ "sys-locale",
+ "tauri",
+ "tauri-build",
+ "testcontainers",
+ "time 0.3.21",
+ "tokio",
+ "toml 0.7.3",
+ "url",
+ "uuid",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "isahc"
+version = "1.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9"
+dependencies = [
+ "async-channel",
+ "castaway",
+ "crossbeam-utils",
+ "curl",
+ "curl-sys",
+ "encoding_rs",
+ "event-listener",
+ "futures-lite",
+ "http",
+ "log",
+ "mime",
+ "once_cell",
+ "polling",
+ "slab",
+ "sluice",
+ "tracing",
+ "tracing-futures",
+ "url",
+ "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 = "itoa"
+version = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+
+[[package]]
+name = "javascriptcore-rs"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c"
+dependencies = [
+ "bitflags",
+ "glib",
+ "javascriptcore-rs-sys",
+]
+
+[[package]]
+name = "javascriptcore-rs-sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 5.0.0",
+]
+
+[[package]]
+name = "jni"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
+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 = "js-sys"
+version = "0.3.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "json-patch"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb3fa5a61630976fc4c353c70297f2e93f1930e3ccee574d59d618ccbd5154ce"
+dependencies = [
+ "serde",
+ "serde_json",
+ "treediff 3.0.2",
+]
+
+[[package]]
+name = "json-patch"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f54898088ccb91df1b492cc80029a6fdf1c48ca0db7c6822a8babad69c94658"
+dependencies = [
+ "serde",
+ "serde_json",
+ "thiserror",
+ "treediff 4.0.2",
+]
+
+[[package]]
+name = "kuchiki"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
+dependencies = [
+ "cssparser",
+ "html5ever",
+ "matches",
+ "selectors",
+]
+
+[[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 = "levenshtein"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
+
+[[package]]
+name = "libc"
+version = "0.2.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[package]]
+name = "libflate"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "97822bf791bd4d5b403713886a5fbe8bf49520fe78e323b0dc480ca1a03e50b0"
+dependencies = [
+ "adler32",
+ "crc32fast",
+ "libflate_lz77",
+]
+
+[[package]]
+name = "libflate_lz77"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a52d3a8bfc85f250440e4424db7d857e241a3aebbbe301f3eb606ab15c39acbf"
+dependencies = [
+ "rle-decode-fast",
+]
+
+[[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 = "libsqlite3-sys"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29f835d03d717946d28b1d1ed632eb6f0e24a299388ee623d0c23118d3e8a7fa"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[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 = "line-wrap"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
+dependencies = [
+ "safemem",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[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 = "loom"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
+dependencies = [
+ "cfg-if",
+ "generator",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "markup5ever"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
+dependencies = [
+ "log",
+ "phf 0.8.0",
+ "phf_codegen",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[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 = "minisign-verify"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881"
+
+[[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 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "mockall"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96"
+dependencies = [
+ "cfg-if",
+ "downcast",
+ "fragile",
+ "lazy_static",
+ "mockall_derive",
+ "predicates",
+ "predicates-tree",
+]
+
+[[package]]
+name = "mockall_derive"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb"
+dependencies = [
+ "cfg-if",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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 = "ndk"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4"
+dependencies = [
+ "bitflags",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nodrop"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
+
+[[package]]
+name = "nom8"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae01545c9c7fc4486ab7debaf2aad7003ac19431791868fb2e8066df97fad2f8"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "normalize-line-endings"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
+
+[[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-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-integer"
+version = "0.1.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "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 = "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 1.3.0",
+ "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",
+ "objc_exception",
+]
+
+[[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_exception"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+dependencies = [
+ "cc",
+]
+
+[[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.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "openssl"
+version = "0.10.45"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1"
+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 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-src"
+version = "111.25.0+1.1.1t"
+source = "git+https://github.com/andrewinci/openssl-src-rs.git?branch=release/111#7c965abbe8d9375334a2e32b357a792a04283471"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "openssl-sys"
+version = "0.9.80"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "openssl-src",
+ "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 = "os_info"
+version = "3.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c424bc68d15e0778838ac013b5b3449544d8133633d8016319e7e05a820b8c0"
+dependencies = [
+ "log",
+ "serde",
+ "winapi",
+]
+
+[[package]]
+name = "os_pipe"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "pango"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
+dependencies = [
+ "bitflags",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.0.3",
+]
+
+[[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.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pest"
+version = "2.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660"
+dependencies = [
+ "thiserror",
+ "ucd-trie",
+]
+
+[[package]]
+name = "petgraph"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
+dependencies = [
+ "fixedbitset",
+ "indexmap",
+]
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_macros 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_macros 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[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_macros"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher",
+]
+
+[[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.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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 = "plist"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9469799ca90293a376f68f6fcb8f11990d9cff55602cfba0ba83893c973a7f46"
+dependencies = [
+ "base64 0.21.0",
+ "indexmap",
+ "line-wrap",
+ "quick-xml",
+ "serde",
+ "time 0.3.21",
+]
+
+[[package]]
+name = "png"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "polling"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "libc",
+ "log",
+ "wepoll-ffi",
+ "windows-sys 0.42.0",
+]
+
+[[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 = "2.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd"
+dependencies = [
+ "difflib",
+ "float-cmp",
+ "itertools",
+ "normalize-line-endings",
+ "predicates-core",
+ "regex",
+]
+
+[[package]]
+name = "predicates-core"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2"
+
+[[package]]
+name = "predicates-tree"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d"
+dependencies = [
+ "predicates-core",
+ "termtree",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
+dependencies = [
+ "toml 0.5.11",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66618389e4ec1c7afe67d51a9bf34ff9236480f8d51e7489b7d5ab0303c13f34"
+dependencies = [
+ "once_cell",
+ "toml_edit 0.18.1",
+]
+
+[[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-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[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 = "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 = "quad-rand"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "658fa1faf7a4cc5f057c9ee5ef560f717ad9d8dc66d975267f709624d6e1ab88"
+
+[[package]]
+name = "quick-xml"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "r2d2"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51de85fb3fb6524929c8a2eb85e6b6d363de4e8c48f9e2c2eac4944abc181c93"
+dependencies = [
+ "log",
+ "parking_lot",
+ "scheduled-thread-pool",
+]
+
+[[package]]
+name = "r2d2_sqlite"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4f5d0337e99cd5cacd91ffc326c6cc9d8078def459df560c4f9bf9ba4a51034"
+dependencies = [
+ "r2d2",
+ "rusqlite",
+]
+
+[[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",
+ "rand_pcg",
+]
+
+[[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.8",
+]
+
+[[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_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed7e3d950b66e19e0c372f3fa3fbbcf85b1746b571f74e0c2af6042a5c93420a"
+dependencies = [
+ "cty",
+]
+
+[[package]]
+name = "rdkafka"
+version = "0.29.0"
+source = "git+https://github.com/andrewinci/rust-rdkafka.git#cb6b5a98ab85cd7119dc5f6814017b8adb170148"
+dependencies = [
+ "futures-channel",
+ "futures-util",
+ "libc",
+ "log",
+ "rdkafka-sys",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "slab",
+ "tokio",
+]
+
+[[package]]
+name = "rdkafka-sys"
+version = "4.3.0+2.0.2"
+source = "git+https://github.com/andrewinci/rust-rdkafka.git#cb6b5a98ab85cd7119dc5f6814017b8adb170148"
+dependencies = [
+ "cmake",
+ "libc",
+ "libz-sys",
+ "num_enum",
+ "openssl-sys",
+ "pkg-config",
+ "sasl2-sys",
+]
+
+[[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 0.2.8",
+ "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-automata"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
+
+[[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 = "rend"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "581008d2099240d37fb08d77ad713bcaec2c4d89d50b5b21a8bb1996bbab68ab"
+dependencies = [
+ "bytecheck",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+dependencies = [
+ "base64 0.21.0",
+ "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 0.10.1",
+]
+
+[[package]]
+name = "rfd"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea"
+dependencies = [
+ "block",
+ "dispatch",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "raw-window-handle",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "windows 0.37.0",
+]
+
+[[package]]
+name = "rkyv"
+version = "0.7.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c30f1d45d9aa61cbc8cd1eb87705470892289bb2d01943e7803b873a57404dc3"
+dependencies = [
+ "bytecheck",
+ "hashbrown 0.12.3",
+ "ptr_meta",
+ "rend",
+ "rkyv_derive",
+ "seahash",
+]
+
+[[package]]
+name = "rkyv_derive"
+version = "0.7.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff26ed6c7c4dfc2aa9480b86a60e3c7233543a270a680e10758a507c5a4ce476"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "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 = "rlimit"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8a29d87a652dc4d43c586328706bb5cdff211f3f39a530f240b53f7221dab8e"
+dependencies = [
+ "libc",
+]
+
+[[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 = "rust-keystore"
+version = "0.1.1"
+source = "git+https://github.com/andrewinci/rust-keystore?tag=v0.1.2#fbbf2ba943bb778b1c06f5e1cc9ceb889d724ed3"
+dependencies = [
+ "base64 0.13.1",
+ "openssl",
+ "sha1",
+ "simple_asn1",
+]
+
+[[package]]
+name = "rust_decimal"
+version = "1.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26bd36b60561ee1fb5ec2817f198b6fd09fa571c897a5e86d1487cfc2b096dfc"
+dependencies = [
+ "arrayvec",
+ "borsh",
+ "bytecheck",
+ "byteorder",
+ "bytes",
+ "num-traits",
+ "rand 0.8.5",
+ "rkyv",
+ "serde",
+ "serde_json",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
+dependencies = [
+ "semver 0.11.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.16",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70"
+
+[[package]]
+name = "ryu"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde"
+
+[[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 = "sasl2-sys"
+version = "0.1.20+2.1.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e645bd98535fc8fd251c43ba7c7c1f9be1e0369c99b6a5ea719052a773e655c"
+dependencies = [
+ "cc",
+ "duct",
+ "libc",
+ "pkg-config",
+]
+
+[[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 = "scheduled-thread-pool"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "977a7519bff143a44f842fd07e80ad1329295bd71686457f18e496736f4bf9bf"
+dependencies = [
+ "parking_lot",
+]
+
+[[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.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "scratch"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2"
+
+[[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",
+ "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 = "selectors"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
+dependencies = [
+ "bitflags",
+ "cssparser",
+ "derive_more",
+ "fxhash",
+ "log",
+ "matches",
+ "phf 0.8.0",
+ "phf_codegen",
+ "precomputed-hash",
+ "servo_arc",
+ "smallvec",
+ "thin-slice",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.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.12",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1"
+dependencies = [
+ "itoa 1.0.5",
+ "ryu",
+ "serde",
+]
+
+[[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.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a5ec9fa74a20ebbe5d9ac23dac1fc96ba0ecfe9f50f2843b52e537b10fbcb4e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0efd8caf556a6cebd3b285caf480045fcc1ac04f6bd786b09a6f11af30c4fcf4"
+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 1.0.5",
+ "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 = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "331bb8c3bf9b92457ab7abecf07078c13f7d270ba490103e84e8b014490cd0b0"
+dependencies = [
+ "base64 0.13.1",
+ "chrono",
+ "hex",
+ "indexmap",
+ "serde",
+ "serde_json",
+ "serde_with_macros 2.3.2",
+ "time 0.3.21",
+]
+
+[[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",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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 = "serialize-to-javascript"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
+dependencies = [
+ "serde",
+ "serde_json",
+ "serialize-to-javascript-impl",
+]
+
+[[package]]
+name = "serialize-to-javascript-impl"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "servo_arc"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
+dependencies = [
+ "nodrop",
+ "stable_deref_trait",
+]
+
+[[package]]
+name = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[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 = "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.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
+dependencies = [
+ "libc",
+ "signal-hook-registry",
+]
+
+[[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 = "similar"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf"
+
+[[package]]
+name = "simple_asn1"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085"
+dependencies = [
+ "num-bigint",
+ "num-traits",
+ "thiserror",
+ "time 0.3.21",
+]
+
+[[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 = "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 = "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 = "soup2"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0"
+dependencies = [
+ "bitflags",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "soup2-sys",
+]
+
+[[package]]
+name = "soup2-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf"
+dependencies = [
+ "bitflags",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 5.0.0",
+]
+
+[[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 = "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",
+ "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 = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+
+[[package]]
+name = "strum_macros"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.109",
+]
+
+[[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.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79d9531f94112cfc3e4c8f5f02cb2b58f72c97b7efd85f70203cc6d8efda5927"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sys-locale"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea0b9eefabb91675082b41eb94c3ecd91af7656caee3fb4961a07c0ec8c7ca6f"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "system-deps"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e"
+dependencies = [
+ "cfg-expr 0.9.1",
+ "heck 0.3.3",
+ "pkg-config",
+ "toml 0.5.11",
+ "version-compare 0.0.11",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff"
+dependencies = [
+ "cfg-expr 0.11.0",
+ "heck 0.4.1",
+ "pkg-config",
+ "toml 0.5.11",
+ "version-compare 0.1.1",
+]
+
+[[package]]
+name = "tao"
+version = "0.15.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac8e6399427c8494f9849b58694754d7cc741293348a6836b6c8d2c5aa82d8e6"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "cc",
+ "cocoa",
+ "core-foundation",
+ "core-graphics",
+ "crossbeam-channel",
+ "dispatch",
+ "gdk",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gdkx11-sys",
+ "gio",
+ "glib",
+ "glib-sys",
+ "gtk",
+ "image",
+ "instant",
+ "jni",
+ "lazy_static",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-sys",
+ "objc",
+ "once_cell",
+ "parking_lot",
+ "paste",
+ "png",
+ "raw-window-handle",
+ "scopeguard",
+ "serde",
+ "unicode-segmentation",
+ "uuid",
+ "windows 0.39.0",
+ "windows-implement",
+ "x11-dl",
+]
+
+[[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 = "tauri"
+version = "1.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3a1fe72365a6d860fddf3403934649a5157b2bbb6f0b50dd3a8858cd1a22412"
+dependencies = [
+ "anyhow",
+ "attohttpc",
+ "base64 0.13.1",
+ "cocoa",
+ "dirs-next",
+ "embed_plist",
+ "encoding_rs",
+ "flate2",
+ "futures-util",
+ "glib",
+ "glob",
+ "gtk",
+ "heck 0.4.1",
+ "http",
+ "ignore",
+ "minisign-verify",
+ "objc",
+ "once_cell",
+ "os_info",
+ "percent-encoding",
+ "rand 0.8.5",
+ "raw-window-handle",
+ "rfd",
+ "semver 1.0.16",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "serialize-to-javascript",
+ "state",
+ "tar",
+ "tauri-macros",
+ "tauri-runtime",
+ "tauri-runtime-wry",
+ "tauri-utils",
+ "tempfile",
+ "thiserror",
+ "time 0.3.21",
+ "tokio",
+ "url",
+ "uuid",
+ "webkit2gtk",
+ "webview2-com",
+ "windows 0.39.0",
+ "zip",
+]
+
+[[package]]
+name = "tauri-build"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "929b3bd1248afc07b63e33a6a53c3f82c32d0b0a5e216e4530e94c467e019389"
+dependencies = [
+ "anyhow",
+ "cargo_toml",
+ "heck 0.4.1",
+ "json-patch 1.0.0",
+ "semver 1.0.16",
+ "serde",
+ "serde_json",
+ "tauri-utils",
+ "tauri-winres",
+ "winnow",
+]
+
+[[package]]
+name = "tauri-codegen"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14388d484b6b1b5dc0f6a7d6cc6433b3b230bec85eaa576adcdf3f9fafa49251"
+dependencies = [
+ "base64 0.13.1",
+ "brotli",
+ "ico",
+ "json-patch 0.2.7",
+ "plist",
+ "png",
+ "proc-macro2",
+ "quote",
+ "semver 1.0.16",
+ "serde",
+ "serde_json",
+ "sha2",
+ "tauri-utils",
+ "thiserror",
+ "time 0.3.21",
+ "uuid",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-macros"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069319e5ecbe653a799b94b0690d9f9bf5d00f7b1d3989aa331c524d4e354075"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "tauri-codegen",
+ "tauri-utils",
+]
+
+[[package]]
+name = "tauri-runtime"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc36898ad4acb6c381878acf903c320a36cf29b68b74f6e791d6045b6557128c"
+dependencies = [
+ "gtk",
+ "http",
+ "http-range",
+ "rand 0.8.5",
+ "raw-window-handle",
+ "serde",
+ "serde_json",
+ "tauri-utils",
+ "thiserror",
+ "url",
+ "uuid",
+ "webview2-com",
+ "windows 0.39.0",
+]
+
+[[package]]
+name = "tauri-runtime-wry"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2ebc22bc5566ba33310744fadd86709fa591ed163491b165855474523ac1aab"
+dependencies = [
+ "cocoa",
+ "gtk",
+ "percent-encoding",
+ "rand 0.8.5",
+ "raw-window-handle",
+ "tauri-runtime",
+ "tauri-utils",
+ "url",
+ "uuid",
+ "webkit2gtk",
+ "webview2-com",
+ "windows 0.39.0",
+ "wry",
+]
+
+[[package]]
+name = "tauri-utils"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a6f9c2dafef5cbcf52926af57ce9561bd33bb41d7394f8bb849c0330260d864"
+dependencies = [
+ "brotli",
+ "ctor",
+ "glob",
+ "heck 0.4.1",
+ "html5ever",
+ "infer",
+ "json-patch 1.0.0",
+ "kuchiki",
+ "memchr",
+ "phf 0.10.1",
+ "proc-macro2",
+ "quote",
+ "semver 1.0.16",
+ "serde",
+ "serde_json",
+ "serde_with 2.3.2",
+ "thiserror",
+ "url",
+ "walkdir",
+ "windows 0.39.0",
+]
+
+[[package]]
+name = "tauri-winres"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb"
+dependencies = [
+ "embed-resource",
+ "toml 0.7.3",
+]
+
+[[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 = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[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.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "termtree"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8"
+
+[[package]]
+name = "testcontainers"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e2b1567ca8a2b819ea7b28c92be35d9f76fb9edb214321dcc86eb96023d1f87"
+dependencies = [
+ "bollard-stubs",
+ "futures",
+ "hex",
+ "hmac",
+ "log",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "sha2",
+]
+
+[[package]]
+name = "thin-slice"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
+
+[[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.12",
+]
+
+[[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 = "time"
+version = "0.3.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc"
+dependencies = [
+ "itoa 1.0.5",
+ "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.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
+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 = "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",
+ "num_cpus",
+ "parking_lot",
+ "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.12",
+]
+
+[[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-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 = "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.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b403acf6f2bb0859c93c7f0d967cb4a75a7ac552100f9322faf64dc047669b21"
+dependencies = [
+ "serde",
+ "serde_spanned",
+ "toml_datetime 0.6.1",
+ "toml_edit 0.19.8",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4553f467ac8e3d374bc9a177a26801e5d0f9b211aa1673fb137a403afd1c9cf5"
+
+[[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.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56c59d8dd7d0dcbc6428bf7aa2f0e823e26e43b3c9aca15bbc9475d23e5fa12b"
+dependencies = [
+ "indexmap",
+ "nom8",
+ "toml_datetime 0.5.1",
+]
+
+[[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 0.6.1",
+ "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",
+ "log",
+ "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 1.0.109",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+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.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.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
+dependencies = [
+ "matchers",
+ "nu-ansi-term",
+ "once_cell",
+ "regex",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "treediff"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "761e8d5ad7ce14bb82b7e61ccc0ca961005a275a060b9644a2431aa11553c2ff"
+dependencies = [
+ "serde_json",
+]
+
+[[package]]
+name = "treediff"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303"
+dependencies = [
+ "serde_json",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+
+[[package]]
+name = "typed-builder"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64cba322cb9b7bc6ca048de49e83918223f35e7a86311267013afff257004870"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[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 = "url"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+ "serde",
+]
+
+[[package]]
+name = "utf-8"
+version = "0.7.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
+
+[[package]]
+name = "uuid"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2"
+dependencies = [
+ "getrandom 0.2.8",
+ "serde",
+]
+
+[[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.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-compare"
+version = "0.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
+
+[[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 = "vswhom"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
+dependencies = [
+ "libc",
+ "vswhom-sys",
+]
+
+[[package]]
+name = "vswhom-sys"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18"
+dependencies = [
+ "cc",
+ "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.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.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 = "webkit2gtk"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "gdk",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gtk",
+ "gtk-sys",
+ "javascriptcore-rs",
+ "libc",
+ "once_cell",
+ "soup2",
+ "webkit2gtk-sys",
+]
+
+[[package]]
+name = "webkit2gtk-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3"
+dependencies = [
+ "atk-sys",
+ "bitflags",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "javascriptcore-rs-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "soup2-sys",
+ "system-deps 6.0.3",
+]
+
+[[package]]
+name = "webview2-com"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178"
+dependencies = [
+ "webview2-com-macros",
+ "webview2-com-sys",
+ "windows 0.39.0",
+ "windows-implement",
+]
+
+[[package]]
+name = "webview2-com-macros"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "webview2-com-sys"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7"
+dependencies = [
+ "regex",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "windows 0.39.0",
+ "windows-bindgen",
+ "windows-metadata",
+]
+
+[[package]]
+name = "wepoll-ffi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+dependencies = [
+ "cc",
+]
+
+[[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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647"
+dependencies = [
+ "windows_aarch64_msvc 0.37.0",
+ "windows_i686_gnu 0.37.0",
+ "windows_i686_msvc 0.37.0",
+ "windows_x86_64_gnu 0.37.0",
+ "windows_x86_64_msvc 0.37.0",
+]
+
+[[package]]
+name = "windows"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
+dependencies = [
+ "windows-implement",
+ "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"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
+dependencies = [
+ "windows-targets 0.42.1",
+]
+
+[[package]]
+name = "windows-bindgen"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41"
+dependencies = [
+ "windows-metadata",
+ "windows-tokens",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7"
+dependencies = [
+ "syn 1.0.109",
+ "windows-tokens",
+]
+
+[[package]]
+name = "windows-metadata"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278"
+
+[[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.1",
+ "windows_aarch64_msvc 0.42.1",
+ "windows_i686_gnu 0.42.1",
+ "windows_i686_msvc 0.42.1",
+ "windows_x86_64_gnu 0.42.1",
+ "windows_x86_64_gnullvm 0.42.1",
+ "windows_x86_64_msvc 0.42.1",
+]
+
+[[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.1",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7"
+dependencies = [
+ "windows_aarch64_gnullvm 0.42.1",
+ "windows_aarch64_msvc 0.42.1",
+ "windows_i686_gnu 0.42.1",
+ "windows_i686_msvc 0.42.1",
+ "windows_x86_64_gnu 0.42.1",
+ "windows_x86_64_gnullvm 0.42.1",
+ "windows_x86_64_msvc 0.42.1",
+]
+
+[[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-tokens"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597"
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.42.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
+
+[[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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a"
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
+
+[[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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1"
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
+
+[[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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c"
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
+
+[[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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d"
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463"
+
+[[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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d"
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28"
+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 = "winreg"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "wry"
+version = "0.23.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c1ad8e2424f554cc5bdebe8aa374ef5b433feff817aebabca0389961fc7ef98"
+dependencies = [
+ "base64 0.13.1",
+ "block",
+ "cocoa",
+ "core-graphics",
+ "crossbeam-channel",
+ "dunce",
+ "gdk",
+ "gio",
+ "glib",
+ "gtk",
+ "html5ever",
+ "http",
+ "kuchiki",
+ "libc",
+ "log",
+ "objc",
+ "objc_id",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "sha2",
+ "soup2",
+ "tao",
+ "thiserror",
+ "url",
+ "webkit2gtk",
+ "webkit2gtk-sys",
+ "webview2-com",
+ "windows 0.39.0",
+ "windows-implement",
+]
+
+[[package]]
+name = "x11"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
+dependencies = [
+ "libc",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "332f188cc1bcf1fe1064b8c58d150f497e697f49774aa846f2dc949d9a25f236"
+dependencies = [
+ "byteorder",
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6505e6815af7de1746a08f69c69606bb45695a17149517680f3b2149713b19a3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "zip"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef"
+dependencies = [
+ "byteorder",
+ "crc32fast",
+ "crossbeam-utils",
+]
diff --git a/nixpkgs/pkgs/applications/misc/insulator2/default.nix b/nixpkgs/pkgs/applications/misc/insulator2/default.nix
new file mode 100644
index 000000000000..65b8cb505f72
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/insulator2/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, cmake
+, dbus
+, fetchFromGitHub
+, fetchYarnDeps
+, openssl
+, pkg-config
+, freetype
+, libsoup
+, gtk3
+, webkitgtk
+, perl
+, cyrus_sasl
+, stdenv
+, fixup_yarn_lock
+, yarn
+, nodejs-slim
+, cargo-tauri
+, cargo
+, rustPlatform
+, rustc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "insulator2";
+  version = "2.12.2";
+
+  src = fetchFromGitHub {
+    owner = "andrewinci";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Bi9GCQr7yox5Plc7o0svRKYi1XoK/HDGj1VbW1z4jac=";
+  };
+
+  yarnOfflineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-ih5NSOvYje981SkVfPHm/u2sS1B36kgxpfe9LmQaxdo=";
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "apache-avro-0.15.0" = "sha256-bjA/x/IDzAYugsc1vn9fBVKaCiLOJYdA1Q9H2pffBh0=";
+      "openssl-src-111.25.0+1.1.1t" = "sha256-1BEtb38ilJJAw35KW+NOIe1rhxxOPsnz0gA2zJnof8c=";
+      "rdkafka-0.29.0" = "sha256-a739Fc+qjmIrK754GT22Gb/Ftd82lLSUzv53Ej7Khu4=";
+      "rust-keystore-0.1.1" = "sha256-Cj64uJFZNxnrplhRuqf9/HK/RAaawzfYHo/J9snZ+TU=";
+    };
+  };
+
+  configurePhase = ''
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror ${yarnOfflineCache}
+    fixup_yarn_lock yarn.lock
+    yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive
+    patchShebangs node_modules/
+    yarn run postinstall --offline
+  '';
+
+  preBuild = ''
+    yarn tauri build -b deb
+  '';
+
+  cargoRoot = "backend/";
+
+  preInstall = ''
+    mv backend/target/release/bundle/deb/*/data/usr/ "$out"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    perl
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+    cargo-tauri
+    fixup_yarn_lock
+    yarn
+    nodejs-slim
+    cyrus_sasl
+  ];
+
+  buildInputs = [
+    dbus
+    openssl.out
+    freetype
+    libsoup
+    gtk3
+    webkitgtk
+  ];
+
+  meta = with lib; {
+    description = "A client UI to inspect Kafka topics, consume, produce and much more";
+    homepage = "https://github.com/andrewinci/insulator2";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ tc-kaluza ];
+    mainProgram = "insulator-2";
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/ipatool/default.nix b/nixpkgs/pkgs/applications/misc/ipatool/default.nix
new file mode 100644
index 000000000000..0b9e7f8a9415
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ipatool/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, nix-update-script
+, testers
+, ipatool
+}:
+
+buildGoModule rec {
+  pname = "ipatool";
+  version = "2.1.4";
+
+  src = fetchFromGitHub {
+    owner = "majd";
+    repo = "ipatool";
+    rev = "v${version}";
+    hash = "sha256-e+gkr8i6dVfxyBM5Vi2YpW4eQ4LE2vhgQadLAFeHK4Q=";
+  };
+
+  vendorHash = "sha256-aVMWXlHMGdbApKLhuZZpaAYY5QpMMgXc/6f9r79/dTw=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/majd/ipatool/v2/cmd.version=${version}"
+  ];
+
+  # go generate ./... fails because of a missing module: github.com/golang/mock/mockgen
+  # which is required to run the tests, check if next release fixes it.
+  # preCheck = ''
+  #   go generate ./...
+  # '';
+  doCheck = false;
+
+  passthru = {
+    updateScript = nix-update-script { };
+    tests.version = testers.testVersion {
+      inherit version;
+      package = ipatool;
+      command = "ipatool --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "Command-line tool that allows searching and downloading app packages (known as ipa files) from the iOS App Store";
+    homepage = "https://github.com/majd/ipatool";
+    changelog = "https://github.com/majd/ipatool/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gaelreyrol ];
+    mainProgram = "ipatool";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ipmicfg/default.nix b/nixpkgs/pkgs/applications/misc/ipmicfg/default.nix
new file mode 100644
index 000000000000..91dc01060099
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ipmicfg/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "ipmicfg";
+  version = "1.34.0";
+  buildVersion = "220906";
+
+  src = fetchzip {
+    url = "https://www.supermicro.com/Bios/sw_download/481/IPMICFG_${version}_build.${buildVersion}.zip";
+    hash = "sha256-ZumCXuR7M2Ep7maBOBFk0UsxyRo4fBkf+9AVmkz4AF0=";
+  };
+
+  installPhase = ''
+    mkdir -p "$out/bin" "$out/opt/ipmicfg"
+    cp Linux/64bit/* "$out/opt/ipmicfg"
+
+    patchelf \
+       --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+       --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc ]}" \
+       "$out/opt/ipmicfg/IPMICFG-Linux.x86_64"
+
+    ln -s "$out/opt/ipmicfg/IPMICFG-Linux.x86_64" "$out/bin/ipmicfg"
+  '';
+
+   dontPatchShebangs = true; # There are no scripts and it complains about null bytes.
+
+   meta = with lib; {
+     description = "Supermicro IPMI configuration tool";
+     homepage = "http://www.supermicro.com/products/nfo/ipmi.cfm";
+     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+     license = licenses.unfree;
+     platforms = [ "x86_64-linux" ];
+     maintainers = with maintainers; [ sorki ];
+   };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ipmiview/default.nix b/nixpkgs/pkgs/applications/misc/ipmiview/default.nix
new file mode 100644
index 000000000000..ff8db5339f65
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ipmiview/default.nix
@@ -0,0 +1,84 @@
+{ lib, stdenv
+, fetchurl
+, makeDesktopItem
+, makeWrapper
+, patchelf
+, fontconfig
+, freetype
+, gcc
+, gcc-unwrapped
+, iputils
+, psmisc
+, xorg }:
+
+stdenv.mkDerivation rec {
+  pname = "IPMIView";
+  version = "2.21.0";
+  buildVersion = "221118";
+
+  src = fetchurl {
+    url = "https://www.supermicro.com/wftp/utility/IPMIView/Linux/IPMIView_${version}_build.${buildVersion}_bundleJRE_Linux_x64.tar.gz";
+    hash = "sha256-ZN0vadGbjGj9U2wPqvHLjS9fsk3DNCbXoNvzUfnn8IM=";
+  };
+
+  nativeBuildInputs = [ patchelf makeWrapper ];
+  buildPhase = with xorg;
+    let
+      stunnelBinary = if stdenv.hostPlatform.system == "x86_64-linux" then "linux/stunnel64"
+      else if stdenv.hostPlatform.system == "i686-linux" then "linux/stunnel32"
+      else throw "IPMIView is not supported on this platform";
+    in
+  ''
+    runHook preBuild
+
+    patchelf --set-rpath "${lib.makeLibraryPath [ libX11 libXext libXrender libXtst libXi ]}" ./jre/lib/libawt_xawt.so
+    patchelf --set-rpath "${lib.makeLibraryPath [ freetype ]}" ./jre/lib/libfontmanager.so
+    patchelf --set-rpath "${gcc.cc}/lib:$out/jre/lib/jli" --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" ./jre/bin/java
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" ./BMCSecurity/${stunnelBinary}
+
+    runHook postBuild
+  '';
+
+  desktopItem = makeDesktopItem rec {
+    name = "IPMIView";
+    exec = "IPMIView";
+    desktopName = name;
+    genericName = "Supermicro BMC manager";
+    categories = [ "Network" ];
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -R . $out/
+
+    ln -s ${desktopItem}/share $out/share
+
+    # LD_LIBRARY_PATH: fontconfig is used from java code
+    # PATH: iputils is used for ping, and psmisc is for killall
+    # WORK_DIR: unfortunately the ikvm related binaries are loaded from
+    #           and user configuration is written to files in the CWD
+    makeWrapper $out/jre/bin/java $out/bin/IPMIView \
+      --set LD_LIBRARY_PATH "${lib.makeLibraryPath [ fontconfig gcc-unwrapped.lib ]}" \
+      --prefix PATH : "$out/jre/bin:${iputils}/bin:${psmisc}/bin" \
+      --add-flags "-jar $out/IPMIView20.jar" \
+      --run 'WORK_DIR=''${XDG_DATA_HOME:-~/.local/share}/ipmiview
+             mkdir -p $WORK_DIR
+             ln -snf '$out'/iKVM.jar '$out'/iKVM_ssl.jar '$out'/libiKVM* '$out'/libSharedLibrary* $WORK_DIR
+             cd $WORK_DIR'
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ vlaci ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    mainProgram = "IPMIView";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/iptsd/default.nix b/nixpkgs/pkgs/applications/misc/iptsd/default.nix
new file mode 100644
index 000000000000..b6885374ef06
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/iptsd/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, meson
+, ninja
+, pkg-config
+, cli11
+, eigen
+, hidrd
+, inih
+, microsoft-gsl
+, spdlog
+, systemd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "iptsd";
+  version = "2";
+
+  src = fetchFromGitHub {
+    owner = "linux-surface";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-zTXTyDgSa1akViDZlYLtJk1yCREGCSJKxzF+HZAWx0c=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    meson
+    ninja
+    pkg-config
+  ];
+
+  dontUseCmakeConfigure = true;
+
+  buildInputs = [
+    cli11
+    eigen
+    hidrd
+    inih
+    microsoft-gsl
+    spdlog
+    systemd
+  ];
+
+  # Original installs udev rules and service config into global paths
+  postPatch = ''
+    substituteInPlace etc/meson.build \
+      --replace "install_dir: unitdir" "install_dir: '$out/etc/systemd/system'" \
+      --replace "install_dir: rulesdir" "install_dir: '$out/etc/udev/rules.d'"
+    substituteInPlace etc/systemd/iptsd-find-service \
+      --replace "iptsd-find-hidraw" "$out/bin/iptsd-find-hidraw" \
+      --replace "systemd-escape" "${lib.getExe' systemd "systemd-escape"}"
+    substituteInPlace etc/udev/50-iptsd.rules.in \
+      --replace "/bin/systemd-escape" "${lib.getExe' systemd "systemd-escape"}"
+  '';
+
+  mesonFlags = [
+    "-Dservice_manager=systemd"
+    "-Dsample_config=false"
+    "-Ddebug_tools="
+    "-Db_lto=false"  # plugin needed to handle lto object -> undefined reference to ...
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/linux-surface/iptsd/releases/tag/${src.rev}";
+    description = "Userspace daemon for Intel Precise Touch & Stylus";
+    homepage = "https://github.com/linux-surface/iptsd";
+    license = licenses.gpl2Plus;
+    mainProgram = "iptsd";
+    maintainers = with maintainers; [ tomberek dotlambda ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/itd/default.nix b/nixpkgs/pkgs/applications/misc/itd/default.nix
new file mode 100644
index 000000000000..ce95eb69bc4f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/itd/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitea
+}:
+
+buildGoModule rec {
+  pname = "itd";
+  version = "1.1.0";
+
+  # https://gitea.elara.ws/Elara6331/itd/tags
+  src = fetchFromGitea {
+    domain = "gitea.elara.ws";
+    owner = "Elara6331";
+    repo = "itd";
+    rev = "v${version}";
+    hash = "sha256-95/9Qy0HhrX+ORuv6g1T4/Eq1hf539lYG5fTkLeY6B0=";
+  };
+
+  vendorHash = "sha256-ZkAxNs4yDUFBhhmIRtzxQlEQtsa/BTuHy0g3taFcrMM=";
+
+  preBuild = ''
+    echo r${version} > version.txt
+  '';
+
+  subPackages = [
+    "."
+    "cmd/itctl"
+  ];
+
+  postInstall = ''
+    install -Dm644 itd.toml $out/etc/itd.toml
+  '';
+
+  meta = with lib; {
+    description = "itd is a daemon to interact with the PineTime running InfiniTime";
+    homepage = "https://gitea.elara.ws/Elara6331/itd";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mindavi raphaelr ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/j4-dmenu-desktop/default.nix b/nixpkgs/pkgs/applications/misc/j4-dmenu-desktop/default.nix
new file mode 100644
index 000000000000..6ad3bda77834
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/j4-dmenu-desktop/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, cmake, dmenu }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "j4-dmenu-desktop";
+  version = "unstable-2023-09-12";
+
+  src = fetchFromGitHub {
+    owner = "enkore";
+    repo = "j4-dmenu-desktop";
+    rev = "7e3fd045482a8ea70619e422975b52feabc75175";
+    hash = "sha256-8PmfzQkHlEdMbrcQO0bPruP3jaKEcr/17x0/Z7Jedh0=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/main.cc \
+        --replace "dmenu -i" "${lib.getExe dmenu} -i"
+  '';
+
+  nativeBuildInputs = [ cmake ];
+
+  # tests are fetching an external git repository
+  cmakeFlags = [
+    "-DWITH_TESTS=OFF"
+    "-DWITH_GIT_CATCH=OFF"
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/enkore/j4-dmenu-desktop/blob/${finalAttrs.src.rev}/CHANGELOG";
+    description = "A wrapper for dmenu that recognizes .desktop files";
+    homepage = "https://github.com/enkore/j4-dmenu-desktop";
+    license = licenses.gpl3Only;
+    mainProgram = "j4-dmenu-desktop";
+    maintainers = with maintainers; [ ericsagnes ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile b/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile
new file mode 100644
index 000000000000..c4ba46e2ac6a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile
@@ -0,0 +1,8 @@
+source "https://rubygems.org"
+gem "jekyll"
+# jekyll alone might be enough for most use-cases
+gem "jekyll-avatar"
+gem "jekyll-mentions"
+gem "jekyll-seo-tag"
+gem "jekyll-sitemap"
+gem "jemoji"
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile.lock b/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile.lock
new file mode 100644
index 000000000000..5fc41261bbf7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/basic/Gemfile.lock
@@ -0,0 +1,104 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.0.4)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    addressable (2.8.1)
+      public_suffix (>= 2.0.2, < 6.0)
+    colorator (1.1.0)
+    concurrent-ruby (1.1.10)
+    em-websocket (0.5.3)
+      eventmachine (>= 0.12.9)
+      http_parser.rb (~> 0)
+    eventmachine (1.2.7)
+    ffi (1.15.5)
+    forwardable-extended (2.6.0)
+    gemoji (4.0.1)
+    html-pipeline (2.14.3)
+      activesupport (>= 2)
+      nokogiri (>= 1.4)
+    http_parser.rb (0.8.0)
+    i18n (1.12.0)
+      concurrent-ruby (~> 1.0)
+    jekyll (4.3.1)
+      addressable (~> 2.4)
+      colorator (~> 1.0)
+      em-websocket (~> 0.5)
+      i18n (~> 1.0)
+      jekyll-sass-converter (>= 2.0, < 4.0)
+      jekyll-watch (~> 2.0)
+      kramdown (~> 2.3, >= 2.3.1)
+      kramdown-parser-gfm (~> 1.0)
+      liquid (~> 4.0)
+      mercenary (>= 0.3.6, < 0.5)
+      pathutil (~> 0.9)
+      rouge (>= 3.0, < 5.0)
+      safe_yaml (~> 1.0)
+      terminal-table (>= 1.8, < 4.0)
+      webrick (~> 1.7)
+    jekyll-avatar (0.8.0)
+      jekyll (>= 3.0, < 5.0)
+    jekyll-mentions (1.6.0)
+      html-pipeline (~> 2.3)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-sass-converter (2.2.0)
+      sassc (> 2.0.1, < 3.0)
+    jekyll-seo-tag (2.8.0)
+      jekyll (>= 3.8, < 5.0)
+    jekyll-sitemap (1.4.0)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-watch (2.2.1)
+      listen (~> 3.0)
+    jemoji (0.13.0)
+      gemoji (>= 3, < 5)
+      html-pipeline (~> 2.2)
+      jekyll (>= 3.0, < 5.0)
+    kramdown (2.4.0)
+      rexml
+    kramdown-parser-gfm (1.1.0)
+      kramdown (~> 2.0)
+    liquid (4.0.3)
+    listen (3.7.1)
+      rb-fsevent (~> 0.10, >= 0.10.3)
+      rb-inotify (~> 0.9, >= 0.9.10)
+    mercenary (0.4.0)
+    mini_portile2 (2.8.0)
+    minitest (5.16.3)
+    nokogiri (1.13.9)
+      mini_portile2 (~> 2.8.0)
+      racc (~> 1.4)
+    pathutil (0.16.2)
+      forwardable-extended (~> 2.6)
+    public_suffix (5.0.0)
+    racc (1.6.0)
+    rb-fsevent (0.11.2)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    rexml (3.2.5)
+    rouge (4.0.0)
+    safe_yaml (1.0.5)
+    sassc (2.4.0)
+      ffi (~> 1.9)
+    terminal-table (3.0.2)
+      unicode-display_width (>= 1.1.1, < 3)
+    tzinfo (2.0.5)
+      concurrent-ruby (~> 1.0)
+    unicode-display_width (2.3.0)
+    webrick (1.7.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  jekyll
+  jekyll-avatar
+  jekyll-mentions
+  jekyll-seo-tag
+  jekyll-sitemap
+  jemoji
+
+BUNDLED WITH
+   2.3.9
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/basic/gemset.nix b/nixpkgs/pkgs/applications/misc/jekyll/basic/gemset.nix
new file mode 100644
index 000000000000..2e20dc241dc0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/basic/gemset.nix
@@ -0,0 +1,434 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "183az13i4fsm28d0l5xhbjpmcj3l1lxzcxlx8pi8zrbd933jwqd0";
+      type = "gem";
+    };
+    version = "7.0.4";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ypdmpdn20hxp5vwxz3zc04r5xcwqc25qszdlg41h8ghdqbllwmw";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  colorator = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s4fpn3mqiizpmpy2a24k4v365pv75y50292r8ajrv4i1p5b2k14";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  em-websocket = {
+    dependencies = ["eventmachine" "http_parser.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a66b0kjk6jx7pai9gc7i27zd0a128gy73nmas98gjz6wjyr4spm";
+      type = "gem";
+    };
+    version = "0.5.3";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  forwardable-extended = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  gemoji = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07lkqllgn7161rvnhnfy7adnfqv0xvr4c3ncsfxixdgmzi6acn5h";
+      type = "gem";
+    };
+    version = "4.0.1";
+  };
+  html-pipeline = {
+    dependencies = ["activesupport" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "180kjksi0sdlqb0aq0bhal96ifwqm25hzb3w709ij55j51qls7ca";
+      type = "gem";
+    };
+    version = "2.14.3";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gj4fmls0mf52dlr928gaq0c0cb0m3aqa9kaa6l0ikl2zbqk42as";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vdcchz7jli1p0gnc669a7bj3q1fv09y9ppf0y3k0vb1jwdwrqwi";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  jekyll = {
+    dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table" "webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m866i41j7y5ipvl7f0vz82mypv5irqz9xxbx44s5pdsmi3dyawy";
+      type = "gem";
+    };
+    version = "4.3.1";
+  };
+  jekyll-avatar = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jzxmfcljfvjz21wls2w5mr2m5qp0mq9c80j009s4m6yq9vn4wza";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  jekyll-mentions = {
+    dependencies = ["html-pipeline" "jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n8y67plydfmay3jn865igvgb3h6s2crk8kq7ydk3wmn9h103s1r";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  jekyll-sass-converter = {
+    dependencies = ["sassc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "077xkkkb592vg8kxdia9jwsaz1bc70lkpf4hdvazjqphn5hlz2bi";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  jekyll-seo-tag = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0638mqhqynghnlnaz0xi1kvnv53wkggaq94flfzlxwandn8x2biz";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  jekyll-sitemap = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0622rwsn5i0m5xcyzdn86l68wgydqwji03lqixdfm1f1xdfqrq0d";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  jekyll-watch = {
+    dependencies = ["listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qd7hy1kl87fl7l0frw5qbn22x7ayfzlv9a5ca1m59g0ym1ysi5w";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  jemoji = {
+    dependencies = ["gemoji" "html-pipeline" "jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z4yabsvqdb8x1rr60yyzbaf950cyzv984n3jwwvgcmv5j73wk2x";
+      type = "gem";
+    };
+    version = "0.13.0";
+  };
+  kramdown = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ic14hdcqxn821dvzki99zhmcy130yhv5fqfffkcf87asv5mnbmn";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  kramdown-parser-gfm = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  liquid = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zhg5ha8zy8zw9qr3fl4wgk4r5940n4128xm2pn4shpbzdbsj5by";
+      type = "gem";
+    };
+    version = "4.0.3";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0agybr37wpjv3xy4ipcmsvsibgdgphzrwbvcj4vfiykpmakwm01v";
+      type = "gem";
+    };
+    version = "3.7.1";
+  };
+  mercenary = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rapl1sfmfi3bfr68da4ca16yhc0pp93vjwkj7y3rdqrzy3b41hy";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0516ypqlx0mlcfn5xh7qppxqc3xndn1fnadxawa8wld5dkcimy30";
+      type = "gem";
+    };
+    version = "5.16.3";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cam1455nmi3fzzpa9ixn2hsim10fbprmj62ajpd6d02mwdprwwn";
+      type = "gem";
+    };
+    version = "1.13.9";
+  };
+  pathutil = {
+    dependencies = ["forwardable-extended"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sqw1zls6227bgq38sxb2hs8nkdz4hn1zivs27mjbniswfy4zvi6";
+      type = "gem";
+    };
+    version = "5.0.0";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0la56m0z26j3mfn1a9lf2l03qx1xifanndf9p3vx1azf6sqy7v9d";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066w2wf3mwkzynz9h7qqvvr0w6rq6q45ngjfh9z0s08ny2gpdbmq";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  safe_yaml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  sassc = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14dfmfjppmng5hwj7c5ka6qdapawm3h6k9lhn8zj001ybypvclgr";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rx114mpqnw2k4h98vc0rs0x0bmf0img84yh8mkkjkal07cjydf5";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ra70s8prfacpqwj5v2mqn1rbfz6xds3n9nsr9cwzs3z2c0wm5j7";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/default.nix b/nixpkgs/pkgs/applications/misc/jekyll/default.nix
new file mode 100644
index 000000000000..2b9f1497b765
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/default.nix
@@ -0,0 +1,58 @@
+{ lib, bundlerApp, ruby
+, writeShellScriptBin, makeWrapper
+, withOptionalDependencies ? false
+}:
+
+let
+  rubyWrapper = writeShellScriptBin "ruby" ''
+    if [[ "$#" -eq 2 ]]; then
+      if [[ "''${1##*/}" == "bundle" && "$2" == "install" ]]; then
+        # See https://github.com/NixOS/nixpkgs/issues/58126 for more details.
+        echo 'Skipping "bundle install" as it fails due to the Nix wrapper.'
+        echo 'Please enter the new directory and run the following commands to serve the page:'
+        echo 'nix-shell -p bundler --run "bundle install --gemfile=Gemfile --path vendor/cache"'
+        echo 'nix-shell -p bundler --run "bundle exec jekyll serve"'
+        exit 0
+        # The following nearly works:
+        unset BUNDLE_FROZEN
+        exec ${ruby}/bin/ruby "$@" --gemfile=Gemfile --path=vendor/cache
+      fi
+    fi
+    # Else: Don't modify the arguments:
+    exec ${ruby}/bin/ruby "$@"
+  '';
+in bundlerApp {
+  pname = "jekyll";
+  exes = [ "jekyll" ];
+
+  inherit ruby;
+  gemdir = if withOptionalDependencies
+    then ./full
+    else ./basic;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/jekyll --prefix PATH : ${rubyWrapper}/bin
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "A blog-aware, static site generator, written in Ruby";
+    longDescription = ''
+      Jekyll is a simple, blog-aware, static site generator, written in Ruby.
+      Think of it like a file-based CMS, without all the complexity. Jekyll
+      takes your content, renders Markdown and Liquid templates, and spits out a
+      complete, static website ready to be served by Apache, Nginx or another
+      web server. Jekyll is the engine behind GitHub Pages, which you can use to
+      host sites right from your GitHub repositories.
+    '';
+    homepage    = "https://jekyllrb.com/";
+    #changelog   = "https://raw.githubusercontent.com/jekyll/jekyll/v${version}/History.markdown";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms   = platforms.unix;
+    mainProgram = "jekyll";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile b/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile
new file mode 100644
index 000000000000..5e7e2d9032a3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile
@@ -0,0 +1,29 @@
+source "https://rubygems.org"
+
+gem "jekyll"
+
+gem "jekyll-avatar"
+gem "jekyll-mentions"
+gem "jekyll-seo-tag"
+gem "jekyll-sitemap"
+gem "jemoji"
+
+# Optional dependencies:
+gem "jekyll-coffeescript"
+#gem "jekyll-docs"
+gem "jekyll-favicon"
+gem "jekyll-feed", "~> 0.9"
+gem "jekyll-gist"
+gem "jekyll-paginate"
+gem "jekyll-polyglot"
+gem "jekyll-redirect-from"
+gem "kramdown-syntax-coderay"
+gem "mime-types", "~> 3.0"
+gem "rdoc", "~> 6.0"
+gem "tomlrb", "~> 1.2"
+
+platform :ruby, :mswin, :mingw, :x64_mingw do
+  gem "classifier-reborn", "~> 2.2"
+  gem "liquid-c", "~> 4.0"
+  gem "yajl-ruby", "~> 1.4"
+end
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile.lock b/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile.lock
new file mode 100644
index 000000000000..6b1cc609e080
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/full/Gemfile.lock
@@ -0,0 +1,172 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    activesupport (7.0.4)
+      concurrent-ruby (~> 1.0, >= 1.0.2)
+      i18n (>= 1.6, < 2)
+      minitest (>= 5.1)
+      tzinfo (~> 2.0)
+    addressable (2.8.1)
+      public_suffix (>= 2.0.2, < 6.0)
+    classifier-reborn (2.3.0)
+      fast-stemmer (~> 1.0)
+      matrix (~> 0.4)
+    coderay (1.1.3)
+    coffee-script (2.4.1)
+      coffee-script-source
+      execjs
+    coffee-script-source (1.12.2)
+    colorator (1.1.0)
+    concurrent-ruby (1.1.10)
+    em-websocket (0.5.3)
+      eventmachine (>= 0.12.9)
+      http_parser.rb (~> 0)
+    eventmachine (1.2.7)
+    execjs (2.8.1)
+    faraday (2.7.1)
+      faraday-net_http (>= 2.0, < 3.1)
+      ruby2_keywords (>= 0.0.4)
+    faraday-net_http (3.0.2)
+    fast-stemmer (1.0.2)
+    ffi (1.15.5)
+    forwardable-extended (2.6.0)
+    gemoji (4.0.1)
+    html-pipeline (2.14.3)
+      activesupport (>= 2)
+      nokogiri (>= 1.4)
+    http_parser.rb (0.8.0)
+    i18n (1.12.0)
+      concurrent-ruby (~> 1.0)
+    jekyll (4.3.1)
+      addressable (~> 2.4)
+      colorator (~> 1.0)
+      em-websocket (~> 0.5)
+      i18n (~> 1.0)
+      jekyll-sass-converter (>= 2.0, < 4.0)
+      jekyll-watch (~> 2.0)
+      kramdown (~> 2.3, >= 2.3.1)
+      kramdown-parser-gfm (~> 1.0)
+      liquid (~> 4.0)
+      mercenary (>= 0.3.6, < 0.5)
+      pathutil (~> 0.9)
+      rouge (>= 3.0, < 5.0)
+      safe_yaml (~> 1.0)
+      terminal-table (>= 1.8, < 4.0)
+      webrick (~> 1.7)
+    jekyll-avatar (0.8.0)
+      jekyll (>= 3.0, < 5.0)
+    jekyll-coffeescript (2.0.0)
+      coffee-script (~> 2.2)
+      coffee-script-source (~> 1.12)
+    jekyll-favicon (1.1.0)
+      jekyll (>= 3.0, < 5.0)
+      mini_magick (~> 4.11)
+      rexml (~> 3.2, >= 3.2.5)
+    jekyll-feed (0.17.0)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-gist (1.5.0)
+      octokit (~> 4.2)
+    jekyll-mentions (1.6.0)
+      html-pipeline (~> 2.3)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-paginate (1.1.0)
+    jekyll-polyglot (1.5.1)
+      jekyll (>= 3.0)
+    jekyll-redirect-from (0.16.0)
+      jekyll (>= 3.3, < 5.0)
+    jekyll-sass-converter (2.2.0)
+      sassc (> 2.0.1, < 3.0)
+    jekyll-seo-tag (2.8.0)
+      jekyll (>= 3.8, < 5.0)
+    jekyll-sitemap (1.4.0)
+      jekyll (>= 3.7, < 5.0)
+    jekyll-watch (2.2.1)
+      listen (~> 3.0)
+    jemoji (0.13.0)
+      gemoji (>= 3, < 5)
+      html-pipeline (~> 2.2)
+      jekyll (>= 3.0, < 5.0)
+    kramdown (2.4.0)
+      rexml
+    kramdown-parser-gfm (1.1.0)
+      kramdown (~> 2.0)
+    kramdown-syntax-coderay (1.0.1)
+      coderay (~> 1.1)
+      kramdown (~> 2.0)
+    liquid (4.0.3)
+    liquid-c (4.0.0)
+      liquid (>= 3.0.0)
+    listen (3.7.1)
+      rb-fsevent (~> 0.10, >= 0.10.3)
+      rb-inotify (~> 0.9, >= 0.9.10)
+    matrix (0.4.2)
+    mercenary (0.4.0)
+    mime-types (3.4.1)
+      mime-types-data (~> 3.2015)
+    mime-types-data (3.2022.0105)
+    mini_magick (4.11.0)
+    mini_portile2 (2.8.0)
+    minitest (5.16.3)
+    nokogiri (1.13.9)
+      mini_portile2 (~> 2.8.0)
+      racc (~> 1.4)
+    octokit (4.25.1)
+      faraday (>= 1, < 3)
+      sawyer (~> 0.9)
+    pathutil (0.16.2)
+      forwardable-extended (~> 2.6)
+    psych (4.0.6)
+      stringio
+    public_suffix (5.0.0)
+    racc (1.6.0)
+    rb-fsevent (0.11.2)
+    rb-inotify (0.10.1)
+      ffi (~> 1.0)
+    rdoc (6.4.0)
+      psych (>= 4.0.0)
+    rexml (3.2.5)
+    rouge (4.0.0)
+    ruby2_keywords (0.0.5)
+    safe_yaml (1.0.5)
+    sassc (2.4.0)
+      ffi (~> 1.9)
+    sawyer (0.9.2)
+      addressable (>= 2.3.5)
+      faraday (>= 0.17.3, < 3)
+    stringio (3.0.2)
+    terminal-table (3.0.2)
+      unicode-display_width (>= 1.1.1, < 3)
+    tomlrb (1.3.0)
+    tzinfo (2.0.5)
+      concurrent-ruby (~> 1.0)
+    unicode-display_width (2.3.0)
+    webrick (1.7.0)
+    yajl-ruby (1.4.3)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  classifier-reborn (~> 2.2)
+  jekyll
+  jekyll-avatar
+  jekyll-coffeescript
+  jekyll-favicon
+  jekyll-feed (~> 0.9)
+  jekyll-gist
+  jekyll-mentions
+  jekyll-paginate
+  jekyll-polyglot
+  jekyll-redirect-from
+  jekyll-seo-tag
+  jekyll-sitemap
+  jemoji
+  kramdown-syntax-coderay
+  liquid-c (~> 4.0)
+  mime-types (~> 3.0)
+  rdoc (~> 6.0)
+  tomlrb (~> 1.2)
+  yajl-ruby (~> 1.4)
+
+BUNDLED WITH
+   2.3.9
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/full/gemset.nix b/nixpkgs/pkgs/applications/misc/jekyll/full/gemset.nix
new file mode 100644
index 000000000000..3607b507cd9d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/full/gemset.nix
@@ -0,0 +1,812 @@
+{
+  activesupport = {
+    dependencies = ["concurrent-ruby" "i18n" "minitest" "tzinfo"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "183az13i4fsm28d0l5xhbjpmcj3l1lxzcxlx8pi8zrbd933jwqd0";
+      type = "gem";
+    };
+    version = "7.0.4";
+  };
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ypdmpdn20hxp5vwxz3zc04r5xcwqc25qszdlg41h8ghdqbllwmw";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  classifier-reborn = {
+    dependencies = ["fast-stemmer" "matrix"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "077n3vs2sbl0nnvmi1mvlfpi1qkn1p5m3ac8bpacifa2vqi668z2";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  coderay = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jvxqxzply1lwp7ysn94zjhh57vc14mcshw1ygw14ib8lhc00lyw";
+      type = "gem";
+    };
+    version = "1.1.3";
+  };
+  coffee-script = {
+    dependencies = ["coffee-script-source" "execjs"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rc7scyk7mnpfxqv5yy4y5q1hx3i7q3ahplcp4bq2g5r24g2izl2";
+      type = "gem";
+    };
+    version = "2.4.1";
+  };
+  coffee-script-source = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1907v9q1zcqmmyqzhzych5l7qifgls2rlbnbhy5vzyr7i7yicaz1";
+      type = "gem";
+    };
+    version = "1.12.2";
+  };
+  colorator = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f7wvpam948cglrciyqd798gdc6z3cfijciavd0dfixgaypmvy72";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  concurrent-ruby = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0s4fpn3mqiizpmpy2a24k4v365pv75y50292r8ajrv4i1p5b2k14";
+      type = "gem";
+    };
+    version = "1.1.10";
+  };
+  em-websocket = {
+    dependencies = ["eventmachine" "http_parser.rb"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a66b0kjk6jx7pai9gc7i27zd0a128gy73nmas98gjz6wjyr4spm";
+      type = "gem";
+    };
+    version = "0.5.3";
+  };
+  eventmachine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0wh9aqb0skz80fhfn66lbpr4f86ya2z5rx6gm5xlfhd05bj1ch4r";
+      type = "gem";
+    };
+    version = "1.2.7";
+  };
+  execjs = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "121h6af4i6wr3wxvv84y53jcyw2sk71j5wsncm6wq6yqrwcrk4vd";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  faraday = {
+    dependencies = ["faraday-net_http" "ruby2_keywords"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wyz9ab0mzi84gpf81fs19vrixglmmxi25k6n1mn9h141qmsp590";
+      type = "gem";
+    };
+    version = "2.7.1";
+  };
+  faraday-net_http = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13byv3mp1gsjyv8k0ih4612y6vw5kqva6i03wcg4w2fqpsd950k8";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  fast-stemmer = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0688clyk4xxh3kdb18vi089k90mca8ji5fwaknh3da5wrzcrzanh";
+      type = "gem";
+    };
+    version = "1.0.2";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
+      type = "gem";
+    };
+    version = "1.15.5";
+  };
+  forwardable-extended = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zcqfxfvsnprwm8agia85x64vjzr2w0xn9vxfnxzgcv8s699v0v";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  gemoji = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07lkqllgn7161rvnhnfy7adnfqv0xvr4c3ncsfxixdgmzi6acn5h";
+      type = "gem";
+    };
+    version = "4.0.1";
+  };
+  html-pipeline = {
+    dependencies = ["activesupport" "nokogiri"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "180kjksi0sdlqb0aq0bhal96ifwqm25hzb3w709ij55j51qls7ca";
+      type = "gem";
+    };
+    version = "2.14.3";
+  };
+  "http_parser.rb" = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gj4fmls0mf52dlr928gaq0c0cb0m3aqa9kaa6l0ikl2zbqk42as";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  i18n = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vdcchz7jli1p0gnc669a7bj3q1fv09y9ppf0y3k0vb1jwdwrqwi";
+      type = "gem";
+    };
+    version = "1.12.0";
+  };
+  jekyll = {
+    dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table" "webrick"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0m866i41j7y5ipvl7f0vz82mypv5irqz9xxbx44s5pdsmi3dyawy";
+      type = "gem";
+    };
+    version = "4.3.1";
+  };
+  jekyll-avatar = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0jzxmfcljfvjz21wls2w5mr2m5qp0mq9c80j009s4m6yq9vn4wza";
+      type = "gem";
+    };
+    version = "0.8.0";
+  };
+  jekyll-coffeescript = {
+    dependencies = ["coffee-script" "coffee-script-source"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17fjk0bfm0rs3myid24y2scsf5vzzza185bissjmcc44cbxp571j";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  jekyll-favicon = {
+    dependencies = ["jekyll" "mini_magick" "rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dyksm4i11n0qshd7wh6dvk8d0fc70dd32ir2dxs6igxq0gd6hi1";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  jekyll-feed = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1hzwmjrxi57x68i7jx5rxi8qlcbqcbg3di55wywrp53pr0bap6k8";
+      type = "gem";
+    };
+    version = "0.17.0";
+  };
+  jekyll-gist = {
+    dependencies = ["octokit"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03wz9j6yq3552nzf4g71qrdm9pfdgbm68abml9sjjgiaan1n8ns9";
+      type = "gem";
+    };
+    version = "1.5.0";
+  };
+  jekyll-mentions = {
+    dependencies = ["html-pipeline" "jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1n8y67plydfmay3jn865igvgb3h6s2crk8kq7ydk3wmn9h103s1r";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  jekyll-paginate = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r7bcs8fq98zldih4787zk5i9w24nz5wa26m84ssja95n3sas2l8";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  jekyll-polyglot = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lx24z2smi6isbdx0afjy68wla579alvljmq8z137b9f7ja2ww0y";
+      type = "gem";
+    };
+    version = "1.5.1";
+  };
+  jekyll-redirect-from = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nz6kd6qsa160lmjmls4zgx7fwcpp8ac07mpzy80z6zgd7jwldb6";
+      type = "gem";
+    };
+    version = "0.16.0";
+  };
+  jekyll-sass-converter = {
+    dependencies = ["sassc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "077xkkkb592vg8kxdia9jwsaz1bc70lkpf4hdvazjqphn5hlz2bi";
+      type = "gem";
+    };
+    version = "2.2.0";
+  };
+  jekyll-seo-tag = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0638mqhqynghnlnaz0xi1kvnv53wkggaq94flfzlxwandn8x2biz";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  jekyll-sitemap = {
+    dependencies = ["jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0622rwsn5i0m5xcyzdn86l68wgydqwji03lqixdfm1f1xdfqrq0d";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  jekyll-watch = {
+    dependencies = ["listen"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1qd7hy1kl87fl7l0frw5qbn22x7ayfzlv9a5ca1m59g0ym1ysi5w";
+      type = "gem";
+    };
+    version = "2.2.1";
+  };
+  jemoji = {
+    dependencies = ["gemoji" "html-pipeline" "jekyll"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0z4yabsvqdb8x1rr60yyzbaf950cyzv984n3jwwvgcmv5j73wk2x";
+      type = "gem";
+    };
+    version = "0.13.0";
+  };
+  kramdown = {
+    dependencies = ["rexml"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ic14hdcqxn821dvzki99zhmcy130yhv5fqfffkcf87asv5mnbmn";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  kramdown-parser-gfm = {
+    dependencies = ["kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8pb3v951f4x7h968rqfsa19c8arz21zw1vaj42jza22rap8fgv";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  kramdown-syntax-coderay = {
+    dependencies = ["coderay" "kramdown"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03vpfpmxcdbqyh6kxrjf5xa9qgvwqj0cfv2khz5h32fp5f5dmrda";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  liquid = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0zhg5ha8zy8zw9qr3fl4wgk4r5940n4128xm2pn4shpbzdbsj5by";
+      type = "gem";
+    };
+    version = "4.0.3";
+  };
+  liquid-c = {
+    dependencies = ["liquid"];
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ibcpajsgq530xrz3dk578mfvivrlfd624j6ifz6ms4w69j8jqj6";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  listen = {
+    dependencies = ["rb-fsevent" "rb-inotify"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0agybr37wpjv3xy4ipcmsvsibgdgphzrwbvcj4vfiykpmakwm01v";
+      type = "gem";
+    };
+    version = "3.7.1";
+  };
+  matrix = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1h2cgkpzkh3dd0flnnwfq6f3nl2b1zff9lvqz8xs853ssv5kq23i";
+      type = "gem";
+    };
+    version = "0.4.2";
+  };
+  mercenary = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0f2i827w4lmsizrxixsrv2ssa3gk1b7lmqh8brk8ijmdb551wnmj";
+      type = "gem";
+    };
+    version = "0.4.0";
+  };
+  mime-types = {
+    dependencies = ["mime-types-data"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  mime-types-data = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "003gd7mcay800k2q4pb2zn8lwwgci4bhi42v2jvlidm8ksx03i6q";
+      type = "gem";
+    };
+    version = "3.2022.0105";
+  };
+  mini_magick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1aj604x11d9pksbljh0l38f70b558rhdgji1s9i763hiagvvx2hs";
+      type = "gem";
+    };
+    version = "4.11.0";
+  };
+  mini_portile2 = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rapl1sfmfi3bfr68da4ca16yhc0pp93vjwkj7y3rdqrzy3b41hy";
+      type = "gem";
+    };
+    version = "2.8.0";
+  };
+  minitest = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0516ypqlx0mlcfn5xh7qppxqc3xndn1fnadxawa8wld5dkcimy30";
+      type = "gem";
+    };
+    version = "5.16.3";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2" "racc"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cam1455nmi3fzzpa9ixn2hsim10fbprmj62ajpd6d02mwdprwwn";
+      type = "gem";
+    };
+    version = "1.13.9";
+  };
+  octokit = {
+    dependencies = ["faraday" "sawyer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15lvy06h276jryxg19258b2yqaykf0567sp0n16yipywhbp94860";
+      type = "gem";
+    };
+    version = "4.25.1";
+  };
+  pathutil = {
+    dependencies = ["forwardable-extended"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "12fm93ljw9fbxmv2krki5k5wkvr7560qy8p4spvb9jiiaqv78fz4";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  psych = {
+    dependencies = ["stringio"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xmq609h7j0xjr7jwayg8kmvcpp347cp0wnyq7jgpn58vk1ja17p";
+      type = "gem";
+    };
+    version = "4.0.6";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0sqw1zls6227bgq38sxb2hs8nkdz4hn1zivs27mjbniswfy4zvi6";
+      type = "gem";
+    };
+    version = "5.0.0";
+  };
+  racc = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0la56m0z26j3mfn1a9lf2l03qx1xifanndf9p3vx1azf6sqy7v9d";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  rb-fsevent = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zmf31rnpm8553lqwibvv3kkx0v7majm1f341xbxc0bk5sbhp423";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  rb-inotify = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jm76h8f8hji38z3ggf4bzi8vps6p7sagxn3ab57qc0xyga64005";
+      type = "gem";
+    };
+    version = "0.10.1";
+  };
+  rdoc = {
+    dependencies = ["psych"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bxzcvxvrmb1ngxz0bgz1va4q9c4w8m6gc8lmdhi6gnvaaf98gsy";
+      type = "gem";
+    };
+    version = "6.4.0";
+  };
+  rexml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
+      type = "gem";
+    };
+    version = "3.2.5";
+  };
+  rouge = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "066w2wf3mwkzynz9h7qqvvr0w6rq6q45ngjfh9z0s08ny2gpdbmq";
+      type = "gem";
+    };
+    version = "4.0.0";
+  };
+  ruby2_keywords = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  safe_yaml = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  sassc = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gpqv48xhl8mb8qqhcifcp0pixn206a7imc07g48armklfqa4q2c";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  sawyer = {
+    dependencies = ["addressable" "faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jks1qjbmqm8f9kvwa81vqj39avaj9wdnzc531xm29a55bb74fps";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
+  stringio = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1jns0x5lbafyqyx7pgzfs6i4ykc7p6zg7gxa6hd82w40n6z9rdvi";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  terminal-table = {
+    dependencies = ["unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "14dfmfjppmng5hwj7c5ka6qdapawm3h6k9lhn8zj001ybypvclgr";
+      type = "gem";
+    };
+    version = "3.0.2";
+  };
+  tomlrb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "00x5y9h4fbvrv4xrjk4cqlkm4vq8gv73ax4alj3ac2x77zsnnrk8";
+      type = "gem";
+    };
+    version = "1.3.0";
+  };
+  tzinfo = {
+    dependencies = ["concurrent-ruby"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0rx114mpqnw2k4h98vc0rs0x0bmf0img84yh8mkkjkal07cjydf5";
+      type = "gem";
+    };
+    version = "2.0.5";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0ra70s8prfacpqwj5v2mqn1rbfz6xds3n9nsr9cwzs3z2c0wm5j7";
+      type = "gem";
+    };
+    version = "2.3.0";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d4cvgmxhfczxiq5fr534lmizkhigd15bsx5719r5ds7k7ivisc7";
+      type = "gem";
+    };
+    version = "1.7.0";
+  };
+  yajl-ruby = {
+    groups = ["default"];
+    platforms = [{
+      engine = "maglev";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mingw";
+    } {
+      engine = "mswin";
+    } {
+      engine = "rbx";
+    } {
+      engine = "ruby";
+    }];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1lni4jbyrlph7sz8y49q84pb0sbj82lgwvnjnsiv01xf26f4v5wc";
+      type = "gem";
+    };
+    version = "1.4.3";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jekyll/update.sh b/nixpkgs/pkgs/applications/misc/jekyll/update.sh
new file mode 100755
index 000000000000..bc3c0d5248b0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jekyll/update.sh
@@ -0,0 +1,15 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p bundix zlib
+
+set -o errexit
+set -o nounset
+
+readonly BASEDIR="$(dirname $(readlink -f $0))"
+
+for directory in "basic" "full"; do
+  pushd "$BASEDIR/$directory"
+  rm -f Gemfile.lock gemset.nix
+  BUNDLE_FORCE_RUBY_PLATFORM=true bundix --magic
+  rm -rf .bundle vendor
+  popd
+done
diff --git a/nixpkgs/pkgs/applications/misc/jetbrains-toolbox/default.nix b/nixpkgs/pkgs/applications/misc/jetbrains-toolbox/default.nix
new file mode 100644
index 000000000000..1cb77d4e05f6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jetbrains-toolbox/default.nix
@@ -0,0 +1,70 @@
+{ stdenv
+, lib
+, fetchzip
+, copyDesktopItems
+, makeWrapper
+, runCommand
+, appimageTools
+, icu
+}:
+let
+  pname = "jetbrains-toolbox";
+  version = "2.2.1.19765";
+
+  src = fetchzip {
+    url = "https://download.jetbrains.com/toolbox/jetbrains-toolbox-${version}.tar.gz";
+    sha256 = "sha256-53CsE1hmtys5hNY2V+tskgwKg9jDLrEsYF6iY2fJGHU=";
+    stripRoot = false;
+  };
+
+  appimageContents = runCommand "${pname}-extracted"
+    {
+      nativeBuildInputs = [ appimageTools.appimage-exec ];
+    }
+    ''
+      appimage-exec.sh -x $out ${src}/${pname}-${version}/${pname}
+
+      # JetBrains ship a broken desktop file. Despite registering a custom
+      # scheme handler for jetbrains:// URLs, they never mark the command as
+      # being suitable for passing URLs to. Ergo, the handler never receives
+      # its payload. This causes various things to break, including login.
+      # Reported upstream at: https://youtrack.jetbrains.com/issue/TBX-11478/
+      sed -Ei '/^Exec=/s/( %U)?$/ %U/' $out/jetbrains-toolbox.desktop
+    '';
+
+  appimage = appimageTools.wrapAppImage {
+    inherit pname version;
+    src = appimageContents;
+    extraPkgs = pkgs: (appimageTools.defaultFhsEnvArgs.targetPkgs pkgs);
+  };
+in
+stdenv.mkDerivation {
+  inherit pname version src appimage;
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm644 ${appimageContents}/.DirIcon $out/share/icons/hicolor/scalable/apps/jetbrains-toolbox.svg
+    makeWrapper ${appimage}/bin/${pname}-${version} $out/bin/${pname} \
+      --append-flags "--update-failed" \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [icu]}
+
+    runHook postInstall
+  '';
+
+  desktopItems = [ "${appimageContents}/jetbrains-toolbox.desktop" ];
+
+  # Disabling the tests, this seems to be very difficult to test this app.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Jetbrains Toolbox";
+    homepage = "https://jetbrains.com/";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ AnatolyPopov ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "jetbrains-toolbox";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jgmenu/default.nix b/nixpkgs/pkgs/applications/misc/jgmenu/default.nix
new file mode 100644
index 000000000000..55617ed4f651
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jgmenu/default.nix
@@ -0,0 +1,70 @@
+{ lib, stdenv
+, fetchFromGitHub
+, pkg-config
+, python3Packages
+, pango
+, librsvg
+, libxml2
+, menu-cache
+, xorg
+, makeWrapper
+, enableXfcePanelApplet ? false
+, xfce
+, gtk3
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jgmenu";
+  version = "4.4.1";
+
+  src = fetchFromGitHub {
+    owner = "johanmalm";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-UC92zyuMVjyMLNEOBMElO8wCWYgwWRZAGLEOdTPNMak=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+    python3Packages.wrapPython
+  ];
+
+  buildInputs = [
+    pango
+    librsvg
+    libxml2
+    menu-cache
+    xorg.libXinerama
+    xorg.libXrandr
+    python3Packages.python
+  ] ++ lib.optionals enableXfcePanelApplet [
+    gtk3
+    xfce.libxfce4util
+    xfce.xfce4-panel
+  ];
+
+  configureFlags = [
+  ]
+  ++ lib.optionals enableXfcePanelApplet [
+    "--with-xfce4-panel-applet"
+  ];
+
+  postFixup = ''
+    wrapPythonProgramsIn "$out/lib/jgmenu"
+    for f in $out/bin/jgmenu{,_run}; do
+      wrapProgram $f --prefix PATH : $out/bin
+    done
+  '';
+
+  passthru.updateScript = gitUpdater { rev-prefix = "v"; };
+
+  meta = with lib; {
+    homepage = "https://github.com/johanmalm/jgmenu";
+    description = "Small X11 menu intended to be used with openbox and tint2";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jiten/cookie-fix.patch b/nixpkgs/pkgs/applications/misc/jiten/cookie-fix.patch
new file mode 100644
index 000000000000..0a67c8a4e5e9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jiten/cookie-fix.patch
@@ -0,0 +1,39 @@
+diff --git a/jiten/app.py b/jiten/app.py
+index 6d54020..f30a1d8 100644
+--- a/jiten/app.py
++++ b/jiten/app.py
+@@ -149,13 +149,22 @@ True
+ >>> d.index("JLPT N3") < d.index("歯", d.index("JLPT N5")) < d.index("JLPT N2")
+ True
+ 
+->>> sorted( (c.name, c.value) for c in client.cookie_jar )
++>>> def cookies():
++...   import importlib.metadata
++...   v = tuple(map(int, importlib.metadata.version("werkzeug").split(".")))
++...   if v < (2, 3):
++...     return sorted( (c.name, c.value) for c in client.cookie_jar )
++...   else:
++...     cookies = [ client.get_cookie(k) for k in PREFS ]
++...     return sorted( (c.key, c.value) for c in cookies if c is not None )
++
++>>> cookies()
+ []
+ >>> p = dict(dark = "yes", lang = "eng ger oops".split())
+ >>> r = client.post("/_save_prefs", data = p, follow_redirects = True)
+ >>> r.status
+ '200 OK'
+->>> sorted( (c.name, c.value) for c in client.cookie_jar )
++>>> cookies()
+ [('dark', 'yes'), ('lang', '"eng ger"'), ('large', 'no'), ('max', '50'), ('nogrid', 'no'), ('nor2h', 'no'), ('roma', 'no')]
+ 
+ """                                                             # }}}1
+@@ -168,8 +177,7 @@ import kanjidraw
+ import click, flask, jinja2, werkzeug
+ 
+ os.environ["FLASK_SKIP_DOTENV"] = "yes"                       #  FIXME
+-from flask import Flask, abort, escape, make_response, redirect, \
+-                  request, render_template, url_for
++from flask import Flask, abort, make_response, redirect, request, render_template, url_for
+ 
+ from .version import __version__, py_version
+ from .kana import kana2romaji
diff --git a/nixpkgs/pkgs/applications/misc/jiten/default.nix b/nixpkgs/pkgs/applications/misc/jiten/default.nix
new file mode 100644
index 000000000000..381e1a33718d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jiten/default.nix
@@ -0,0 +1,111 @@
+{ lib
+, fetchFromGitHub
+, python3
+, bash
+, makeWrapper
+, kanjidraw
+, pcre
+, sqlite
+, nodejs
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "jiten";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "obfusk";
+    repo = "jiten";
+    rev = "v${version}";
+    sha256 = "13bdx136sirbhxdhvpq5kf0r6q1xvm5zyzp454z51gy0v6rn0qrp";
+  };
+
+  nonFreeData = fetchFromGitHub {
+    owner = "obfusk";
+    repo = "jiten-nonfree-data";
+    rev = "v${version}";
+    sha256 = "16sz8i0sw7ggy6kijcx4qyl2zr6xj789x4iav0yyllx12dfgp5b1";
+  };
+
+  patches = [
+    # Potentially can be dropped after the next release
+    # https://github.com/NixOS/nixpkgs/issues/271600
+    ./cookie-fix.patch
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ pcre sqlite ];
+  propagatedBuildInputs = with python3.pkgs; [ click flask kanjidraw ];
+  nativeCheckInputs = [ nodejs ];
+
+  preBuild = ''
+    export JITEN_VERSION=${version}   # override `git describe`
+    export JITEN_FINAL=yes            # build & package *.sqlite3
+  '';
+
+  postPatch = ''
+    rmdir nonfree-data
+    ln -s ${nonFreeData} nonfree-data
+    substituteInPlace Makefile --replace /bin/bash ${bash}/bin/bash
+    substituteInPlace jiten/res/jmdict/Makefile \
+      --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  checkPhase = ''
+    make test
+  '';
+
+  postInstall = ''
+    # requires pywebview
+    rm $out/bin/jiten-gui
+  '';
+
+  meta = with lib; {
+    description = "Japanese android/cli/web dictionary based on jmdict/kanjidic";
+    longDescription = ''
+      Jiten is a Japanese dictionary based on JMDict/Kanjidic
+
+      Fine-grained search using regexes (regular expressions)
+      • simple searches don't require knowledge of regexes
+      • quick reference available in the web interface and android app
+
+      JMDict multilingual japanese dictionary
+      • kanji, readings (romaji optional), meanings & more
+      • meanings in english, dutch, german, french and/or spanish
+      • pitch accent (from Wadoku)
+      • browse by frequency/jlpt
+
+      Kanji dictionary
+      • readings (romaji optional), meanings (english), jmdict entries, radicals & more
+      • search using SKIP codes
+      • search by radical
+      • handwritten kanji recognition
+      • browse by frequency/level/jlpt/SKIP
+
+      Example sentences (from Tatoeba)
+      • with english, dutch, german, french and/or spanish translation
+      • some with audio
+
+      Stroke order
+      • input a word or sentence and see how it's written
+
+      Web interface
+      • available online at https://jiten.obfusk.dev
+      • light/dark mode
+      • search history (stored locally)
+      • tooltips to quickly see meanings and readings for kanji and words
+      • use long press for tooltips on mobile
+      • converts romaji to hiragana and between hiragana and katakana
+      • can be run on your own computer
+
+      Command-line interface
+    '';
+    homepage = "https://github.com/obfusk/jiten";
+    license = with licenses; [
+      agpl3Plus               # code
+      cc-by-sa-30             # jmdict/kanjidic
+      unfreeRedistributable   # pitch data & audio are non-commercial
+    ];
+    maintainers = [ maintainers.obfusk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/johnny-reborn/default.nix b/nixpkgs/pkgs/applications/misc/johnny-reborn/default.nix
new file mode 100644
index 000000000000..180d46519c64
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/johnny-reborn/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "johnny-reborn-engine";
+  version = "0.30";
+
+  src = fetchFromGitHub {
+    owner = "xesf";
+    repo = "jc_reborn";
+    rev = "v${version}";
+    hash = "sha256-n3ELNFvjeDzbamyQIdM9mf/A1sstuhCGzrL9NuXf90Y=";
+  };
+
+  buildInputs = [ SDL2 ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp jc_reborn $out/bin/
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "An open-source engine for the classic \"Johnny Castaway\" screensaver (engine only)";
+    homepage = "https://github.com/xesf/jc_reborn";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ pedrohlc ];
+    mainProgram = "jc_reborn";
+    inherit (SDL2.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/johnny-reborn/with-data.nix b/nixpkgs/pkgs/applications/misc/johnny-reborn/with-data.nix
new file mode 100644
index 000000000000..b9432c543fee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/johnny-reborn/with-data.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenvNoCC
+, fetchFromGitHub
+, fetchzip
+, johnny-reborn-engine
+, makeWrapper
+}:
+
+let
+  sounds = fetchFromGitHub {
+    owner = "nivs1978";
+    repo = "Johnny-Castaway-Open-Source";
+    rev = "be6afefd43a3334acc66fc9d777c162c8bfb9558";
+    hash = "sha256-rtZVCn4KbEBVwaSQ4HZhMoDEI5Q9IPj9SZywgAx0MPY=";
+  };
+
+  resources = fetchzip {
+    name = "scrantic-source";
+    url = "https://archive.org/download/johnny-castaway-screensaver/scrantic-run.zip";
+    hash = "sha256-Q9chCYReOQEmkTyIkYo+D+OXYUqxPNOOEEmiFh8yaw4=";
+    stripRoot = false;
+  };
+in
+
+stdenvNoCC.mkDerivation {
+  pname = "johnny-reborn";
+  inherit (johnny-reborn-engine) version;
+
+  srcs = [ sounds resources ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  sourceRoot = sounds.name;
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/jc_reborn/data
+    cp -t $out/share/jc_reborn/data/ \
+      ../scrantic-source/RESOURCE.* \
+      JCOS/Resources/sound*.wav
+
+    makeWrapper \
+      ${johnny-reborn-engine}/bin/jc_reborn \
+      $out/bin/jc_reborn \
+      --chdir $out/share/jc_reborn
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "An open-source engine for the classic \"Johnny Castaway\" screensaver (ready to use, with resources)";
+    license = lib.licenses.unfree;
+    maintainers = with lib.maintainers; [ pedrohlc ];
+    inherit (johnny-reborn-engine.meta) homepage platforms mainProgram;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/johnny/default.nix b/nixpkgs/pkgs/applications/misc/johnny/default.nix
new file mode 100644
index 000000000000..0f1530afb50c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/johnny/default.nix
@@ -0,0 +1,49 @@
+{ lib, stdenv, fetchFromGitHub, qt5, john, makeWrapper, makeDesktopItem
+, copyDesktopItems }:
+
+stdenv.mkDerivation rec {
+  pname = "johnny";
+  version = "2.2";
+
+  src = fetchFromGitHub {
+    owner = "openwall";
+    repo = "johnny";
+    rev = "v${version}";
+    hash = "sha256-fwRvyQbRO63iVt9AHlfl+Cv4NRFQmyVsZUQLxmzGjAY=";
+  };
+
+  buildInputs = [ john qt5.qtbase ];
+  nativeBuildInputs =
+    [ makeWrapper copyDesktopItems qt5.wrapQtAppsHook qt5.qmake ];
+
+  installPhase = ''
+    install -D ${pname} $out/bin/${pname}
+    wrapProgram $out/bin/${pname} \
+      --prefix PATH : ${lib.makeBinPath [ john ]}
+    install -D README $out/share/doc/${pname}/README
+    install -D LICENSE $out/share/licenses/${pname}/LICENSE
+    install -D resources/icons/${pname}_128.png $out/share/pixmaps/${pname}.png
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "Johnny";
+      desktopName = "Johnny";
+      comment = "A GUI for John the Ripper";
+      icon = pname;
+      exec = pname;
+      terminal = false;
+      categories = [ "Application" "System" ];
+      startupNotify = true;
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://openwall.info/wiki/john/johnny";
+    description = "Open Source GUI frontend for John the Ripper";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ Misaka13514 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/joplin-desktop/default.nix b/nixpkgs/pkgs/applications/misc/joplin-desktop/default.nix
new file mode 100644
index 000000000000..47c9856260cf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/joplin-desktop/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, appimageTools, fetchurl, makeWrapper, undmg }:
+
+let
+  pname = "joplin-desktop";
+  version = "2.13.15";
+
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "Unsupported system: ${system}";
+
+  suffix = {
+    x86_64-linux = ".AppImage";
+    x86_64-darwin = ".dmg";
+    aarch64-darwin = "-arm64.dmg";
+  }.${system} or throwSystem;
+
+  src = fetchurl {
+    url = "https://github.com/laurent22/joplin/releases/download/v${version}/Joplin-${version}${suffix}";
+    sha256 = {
+      x86_64-linux = "sha256-5tLONAChZaiJqvK/lg1NGTH3LYBlezIAmtQvng0nNNc=";
+      x86_64-darwin = "sha256-MFBOYA6weAwGLp/ezfU58RvSlGFFlkg0Flcx64q7Wo8=";
+      aarch64-darwin = "sha256-6CKXa/td567NtzTV7laU7l9xw8WOB9RZR6I1vXeLuyo=";
+    }.${system} or throwSystem;
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname version src;
+  };
+
+  meta = with lib; {
+    description = "An open source note taking and to-do application with synchronisation capabilities";
+    longDescription = ''
+      Joplin is a free, open source note taking and to-do application, which can
+      handle a large number of notes organised into notebooks. The notes are
+      searchable, can be copied, tagged and modified either from the
+      applications directly or from your own text editor. The notes are in
+      Markdown format.
+    '';
+    homepage = "https://joplinapp.org";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ hugoreeves qjoly ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin"];
+  };
+
+  linux = appimageTools.wrapType2 rec {
+    inherit pname version src meta;
+
+    profile = ''
+      export LC_ALL=C.UTF-8
+    '';
+
+    multiArch = false; # no 32bit needed
+    extraPkgs = appimageTools.defaultFhsEnvArgs.multiPkgs;
+    extraInstallCommands = ''
+      mv $out/bin/{${pname}-${version},${pname}}
+      source "${makeWrapper}/nix-support/setup-hook"
+      wrapProgram $out/bin/${pname} \
+        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland --enable-features=WaylandWindowDecorations}}"
+      install -Dm444 ${appimageContents}/@joplinapp-desktop.desktop -t $out/share/applications
+      install -Dm444 ${appimageContents}/@joplinapp-desktop.png -t $out/share/pixmaps
+      substituteInPlace $out/share/applications/@joplinapp-desktop.desktop \
+        --replace 'Exec=AppRun' 'Exec=${pname}' \
+        --replace 'Icon=joplin' "Icon=@joplinapp-desktop"
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version src meta;
+
+    nativeBuildInputs = [ undmg ];
+
+    sourceRoot = "Joplin.app";
+
+    installPhase = ''
+      mkdir -p $out/Applications/Joplin.app
+      cp -R . $out/Applications/Joplin.app
+    '';
+  };
+in
+if stdenv.isDarwin
+then darwin
+else linux
diff --git a/nixpkgs/pkgs/applications/misc/josm/default.nix b/nixpkgs/pkgs/applications/misc/josm/default.nix
new file mode 100644
index 000000000000..3c3fc200c114
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/josm/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, fetchsvn, makeWrapper, unzip, jre, libXxf86vm
+, extraJavaOpts ? "-Djosm.restart=true -Djava.net.useSystemProxies=true"
+}:
+let
+  pname = "josm";
+  version = "18969";
+  srcs = {
+    jar = fetchurl {
+      url = "https://josm.openstreetmap.de/download/josm-snapshot-${version}.jar";
+      hash = "sha256-a8muRwE4+9WdYVz7lYE9dRnqVIGQxL8cFmIdBr2R65U=";
+    };
+    macosx = fetchurl {
+      url = "https://josm.openstreetmap.de/download/macosx/josm-macos-${version}-java17.zip";
+      hash = "sha256-npXY7WJM1+9ygeAw102UtimnI/yXqs5vgPnatm4AIrI=";
+    };
+    pkg = fetchsvn {
+      url = "https://josm.openstreetmap.de/svn/trunk/native/linux/tested";
+      rev = version;
+      sha256 = "sha256-RFZGRTDdWP/goH/Ev16nhq1SjxYkfFr3djwSrotK7Fo=";
+    };
+  };
+in
+stdenv.mkDerivation rec {
+  inherit pname version;
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = lib.optionals (!stdenv.isDarwin) [ jre ];
+
+  installPhase =
+    if stdenv.isDarwin then ''
+      mkdir -p $out/Applications
+      ${unzip}/bin/unzip ${srcs.macosx} 'JOSM.app/*' -d $out/Applications
+    '' else ''
+      install -Dm644 ${srcs.jar} $out/share/josm/josm.jar
+      cp -R ${srcs.pkg}/usr/share $out
+
+      # Add libXxf86vm to path because it is needed by at least Kendzi3D plugin
+      makeWrapper ${jre}/bin/java $out/bin/josm \
+        --add-flags "${extraJavaOpts} -jar $out/share/josm/josm.jar" \
+        --prefix LD_LIBRARY_PATH ":" '${libXxf86vm}/lib'
+    '';
+
+  meta = with lib; {
+    description = "An extensible editor for OpenStreetMap";
+    homepage = "https://josm.openstreetmap.de/";
+    changelog = "https://josm.openstreetmap.de/wiki/Changelog";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ rycee sikmir ];
+    platforms = platforms.all;
+    mainProgram = "josm";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jot/default.nix b/nixpkgs/pkgs/applications/misc/jot/default.nix
new file mode 100644
index 000000000000..abfcc8e8eca3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jot/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "jot";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "araekiel";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Z8szd6ArwbGiHw7SeAah0LrrzUbcQYygX7IcPUYNxvM=";
+  };
+
+  cargoHash = "sha256-x61lOwMOOLD3RTdy3Ji+c7zcA1PCn09u75MyrPX/NbE=";
+
+  meta = with lib; {
+    description = "Rapid note management for the terminal";
+    homepage = "https://github.com/araekiel/jot";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "jt";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jotta-cli/default.nix b/nixpkgs/pkgs/applications/misc/jotta-cli/default.nix
new file mode 100644
index 000000000000..23da5323e21f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jotta-cli/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchzip }:
+
+let
+  arch = "amd64";
+in
+stdenv.mkDerivation rec {
+  pname = "jotta-cli";
+  version = "0.15.98319";
+  src = fetchzip {
+      url = "https://repo.jotta.us/archives/linux/${arch}/jotta-cli-${version}_linux_${arch}.tar.gz";
+      sha256 = "sha256-0gc3uXBByBR2shKhtUElEiz2saCwmH9vxWFf/WZm6hw=";
+      stripRoot = false;
+    };
+
+  installPhase = ''
+    install -D usr/bin/jotta-cli usr/bin/jottad -t $out/bin/
+    mkdir -p $out/share/bash-completion/completions
+  '';
+
+  postFixup = ''
+    patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) $out/bin/jotta-cli
+    patchelf --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) $out/bin/jottad
+    $out/bin/jotta-cli completion bash > $out/share/bash-completion/completions/jotta-cli.bash
+  '';
+
+  meta = with lib; {
+    description  = "Jottacloud CLI";
+    homepage     = "https://www.jottacloud.com/";
+    downloadPage = "https://repo.jotta.us/archives/linux/";
+    maintainers  = with maintainers; [ evenbrenden ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license      = licenses.unfree;
+    platforms    = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jp2a/default.nix b/nixpkgs/pkgs/applications/misc/jp2a/default.nix
new file mode 100644
index 000000000000..5ae33e8264f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jp2a/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libjpeg
+, libpng
+, ncurses
+, autoreconfHook
+, autoconf-archive
+, pkg-config
+, bash-completion
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.2.0";
+  pname = "jp2a";
+
+  src = fetchFromGitHub {
+    owner = "Talinx";
+    repo = "jp2a";
+    rev = "v${version}";
+    sha256 = "sha256-TyXEaHemKfCMyGwK6P2vVL9gPWRLbkaNP0g+/UYGSVc=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    autoconf-archive
+    pkg-config
+    bash-completion
+  ];
+  buildInputs = [ libjpeg libpng ncurses ];
+
+  installFlags = [ "bashcompdir=\${out}/share/bash-completion/completions" ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://csl.name/jp2a/";
+    description = "A small utility that converts JPG images to ASCII";
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.FlorianFranzen ];
+    platforms = platforms.unix;
+    mainProgram = "jp2a";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jquake/default.nix b/nixpkgs/pkgs/applications/misc/jquake/default.nix
new file mode 100644
index 000000000000..916a12db3150
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jquake/default.nix
@@ -0,0 +1,69 @@
+{ lib, stdenv, fetchurl, copyDesktopItems, makeDesktopItem, unzip, jre8
+, logOutput ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "jquake";
+  version = "1.8.5";
+
+  src = fetchurl {
+    url = "https://github.com/fleneindre/fleneindre.github.io/raw/master/downloads/JQuake_${version}_linux.zip";
+    sha256 = "sha256-Q9R5Qhk8Qodw2d99nL2aG5WGpIyvKmjzfkRK7xJzoc0=";
+  };
+
+  nativeBuildInputs = [ unzip copyDesktopItems ];
+
+  sourceRoot = ".";
+
+  postPatch = ''
+    # JQuake emits a lot of debug-like messages on stdout. Either drop the output
+    # stream entirely or log them at 'user.debug' level.
+    sed -i "/^java/ s/$/ ${if logOutput then "| logger -p user.debug" else "> \\/dev\\/null"}/" JQuake.sh
+
+    # By default, an 'errors.log' file is created in the current directory.
+    # cd into a temporary directory and let it be created there.
+    substituteInPlace JQuake.sh \
+      --replace "java -jar " "exec ${jre8.outPath}/bin/java -jar $out/lib/" \
+      --replace "[JAR FOLDER]" "\$(mktemp -p /tmp -d jquake-errlog-XXX)"
+  '';
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    chmod +x JQuake.sh
+
+    mkdir -p $out/{bin,lib}
+    mv JQuake.sh $out/bin/JQuake
+    mv {JQuake.jar,JQuake_lib} $out/lib
+    mv sounds $out/lib
+
+    mkdir -p $out/share/licenses/jquake
+    mv LICENSE* $out/share/licenses/jquake
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "JQuake";
+      desktopName = "JQuake";
+      exec = "JQuake";
+      comment = "Real-time earthquake map of Japan";
+    })
+  ];
+
+  meta = with lib; {
+    description = "Real-time earthquake map of Japan";
+    homepage = "https://jquake.net";
+    downloadPage = "https://jquake.net/en/terms.html?os=linux&arch=any";
+    changelog = "https://jquake.net/en/changelog.html";
+    maintainers = with maintainers; [ nessdoor ];
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    mainProgram = "JQuake";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/jrnl/default.nix b/nixpkgs/pkgs/applications/misc/jrnl/default.nix
new file mode 100644
index 000000000000..43d320a4c043
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/jrnl/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, fetchFromGitHub
+, python3
+, testers
+, jrnl
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "jrnl";
+  version = "4.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "jrnl-org";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-DtujXSDJWnOrHjVgJEJNKJMhSrNBHlR2hvHeHLSIF2o=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    asteval
+    colorama
+    cryptography
+    keyring
+    parsedatetime
+    python-dateutil
+    pytz
+    pyxdg
+    pyyaml
+    tzlocal
+    ruamel-yaml
+    rich
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytest-bdd
+    pytest-xdist
+    pytestCheckHook
+    toml
+  ];
+
+
+  preCheck = ''
+    export HOME=$(mktemp -d);
+  '';
+
+  pythonImportsCheck = [
+    "jrnl"
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = jrnl;
+    version = "v${version}";
+  };
+
+  meta = with lib; {
+    changelog = "https://github.com/jrnl-org/jrnl/releases/tag/v${version}";
+    description = "Simple command line journal application that stores your journal in a plain text file";
+    homepage = "https://jrnl.sh/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ bryanasdev000 zalakain ];
+    mainProgram = "jrnl";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/junction/default.nix b/nixpkgs/pkgs/applications/misc/junction/default.nix
new file mode 100644
index 000000000000..c59b8067b26c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/junction/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, appstream-glib
+, blueprint-compiler
+, desktop-file-utils
+, gobject-introspection
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook4
+, gjs
+, gtk4
+, libadwaita
+, libportal-gtk4
+}:
+
+stdenv.mkDerivation rec {
+  pname = "junction";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "sonnyp";
+    repo = "junction";
+    rev = "v${version}";
+    sha256 = "sha256-qPseu2rzK6xp7eb/SrWK6fML/6xh4raP0MEreyZgqVI=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    blueprint-compiler
+    desktop-file-utils
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    gjs
+    gtk4
+    libadwaita
+    libportal-gtk4
+  ];
+
+  postPatch = ''
+    # gjs uses the invocation name to add gresource files
+    # - https://gitlab.gnome.org/GNOME/gjs/-/blob/6aca7b50785fa1638f144b17060870d721e3f65a/modules/script/package.js#L159
+    # - https://gitlab.gnome.org/GNOME/gjs/-/blob/6aca7b50785fa1638f144b17060870d721e3f65a/modules/script/package.js#L37
+    # To work around this, we manually set the the name as done in foliate
+    # - https://github.com/NixOS/nixpkgs/blob/3bacde6273b09a21a8ccfba15586fb165078fb62/pkgs/applications/office/foliate/default.nix#L23
+    sed -i "1 a imports.package._findEffectiveEntryPointName = () => 're.sonny.Junction';" src/bin.js
+
+    # /usr/bin/env is not accessible in build environment
+    substituteInPlace troll/gjspack/bin/gjspack --replace "/usr/bin/env -S gjs" "${gjs}/bin/gjs"
+  '';
+
+  postInstall = ''
+    # autoPatchShebangs does not like "/usr/bin/env -S <environment-setting> gjs -m"
+    sed -i "1s|.*|#!/usr/bin/gjs -m|" $out/bin/re.sonny.Junction
+  '';
+
+  meta = with lib; {
+    mainProgram = "re.sonny.Junction";
+    description = "Choose the application to open files and links";
+    homepage = "https://apps.gnome.org/en/app/re.sonny.Junction/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ hqurve ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/k2pdfopt/0001-Fix-CMakeLists.patch b/nixpkgs/pkgs/applications/misc/k2pdfopt/0001-Fix-CMakeLists.patch
new file mode 100644
index 000000000000..8f9271ac996b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/k2pdfopt/0001-Fix-CMakeLists.patch
@@ -0,0 +1,49 @@
+From 2629af4ed00d7ca65359178203d80fb146901cdb Mon Sep 17 00:00:00 2001
+From: Daniel Fullmer <danielrf12@gmail.com>
+Date: Fri, 3 Jul 2020 21:00:45 -0700
+Subject: [PATCH 1/2] Fix CMakeLists
+
+---
+ CMakeLists.txt | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index e218279..4341de9 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -57,6 +57,7 @@ endif(JPEG_FOUND)
+ include(FindJasper)
+ if(JASPER_FOUND)
+   set(HAVE_JASPER_LIB 1)
++  set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${JASPER_LIBRARY})
+ endif(JASPER_FOUND)
+ 
+ # paths from willuslib/wgs.c
+@@ -71,9 +72,12 @@ else()
+   message(STATUS "Could NOT find ghostscript executable")
+ endif(GHOSTSCRIPT_EXECUTABLE)
+ 
+-# willus.h
+-# HAVE_GSL_LIB
+-
++pkg_check_modules(GSL gsl)
++if(GSL_FOUND)
++  set(HAVE_GSL_LIB 1)
++  include_directories(SYSTEM ${GSL_INCLUDEDIR})
++  set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${GSL_LDFLAGS})
++endif(GSL_FOUND)
+ 
+ # libfreetype6 (>= 2.3.9), libjbig2dec0, libjpeg8 (>= 8c), libx11-6, libxext6, zlib1g (>= 1:1.2.0)
+ # MUPDF_STATIC_LDFLAGS misses mupdf-js-none, and doubles libs ...
+@@ -85,7 +89,7 @@ if(MUPDF_FOUND)
+   include_directories(SYSTEM ${MUPDF_INCLUDEDIR})
+   message(STATUS "mupdf libraries: ${MUPDF_LDFLAGS}")
+   set(K2PDFOPT_LIB ${K2PDFOPT_LIB} ${MUPDF_LDFLAGS} 
+-    -lmupdf-js-none -lopenjpeg -ljbig2dec -ljpeg -lfreetype
++
+   )
+ endif(MUPDF_FOUND)
+ 
+-- 
+2.27.0
+
diff --git a/nixpkgs/pkgs/applications/misc/k2pdfopt/default.nix b/nixpkgs/pkgs/applications/misc/k2pdfopt/default.nix
new file mode 100644
index 000000000000..0bb01c38712f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/k2pdfopt/default.nix
@@ -0,0 +1,170 @@
+{ lib, stdenv, runCommand, fetchzip, fetchurl, fetchFromGitHub
+, cmake, pkg-config, zlib, libpng, makeWrapper
+, enableGSL ? true, gsl
+, enableGhostScript ? true, ghostscript
+, enableMuPDF ? true, mupdf_1_17
+, enableDJVU ? true, djvulibre
+, enableGOCR ? false, gocr # Disabled by default due to crashes
+, enableTesseract ? true, leptonica, tesseract4
+}:
+
+# k2pdfopt is a pain to package. It requires modified versions of mupdf,
+# leptonica, and tesseract.  Instead of shipping patches for these upstream
+# packages, k2pdfopt includes just the modified source files for these
+# packages.  The individual files from the {mupdf,leptonica,tesseract}_mod/
+# directories are intended to replace the corresponding source files in the
+# upstream packages, for a particular version of that upstream package.
+#
+# There are a few ways we could approach packaging these modified versions of
+# mupdf, leptonica, and mupdf:
+# 1) Override the upstream source with a new derivation that involves copying
+# the modified source files from k2pdfopt and replacing the corresponding
+# source files in the upstream packages. Since the files are intended for a
+# particular version of the upstream package, this would not allow us to easily
+# use updates to those packages in nixpkgs.
+# 2) Manually produce patches which can be applied against the upstream
+# project, and have the same effect as replacing those files.  This is what I
+# believe k2pdfopt should do this for us anyway.  The benefit of creating and
+# applying patches in this way is that minor updates (esp. security fixes) to
+# upstream packages might still allow these patches to apply successfully.
+# 3) Automatically produce these patches inside a nix derivation. This is the
+# approach taken here, using the "mkPatch" provided below.  This has the
+# benefit of easier review and should hopefully be simpler to update in the
+# future.
+
+let
+  # Create a patch against src based on changes applied in patchCommands
+  mkPatch = { name, src, patchCommands }: runCommand "${name}-k2pdfopt.patch" { inherit src; } ''
+    source $stdenv/setup
+    unpackPhase
+
+    orig=$sourceRoot
+    new=$sourceRoot-modded
+    cp -r $orig/. $new/
+
+    pushd $new >/dev/null
+    ${patchCommands}
+    popd >/dev/null
+
+    diff -Naur $orig $new > $out || true
+  '';
+
+  pname = "k2pdfopt";
+  version = "2.53";
+  k2pdfopt_src = fetchzip {
+    url = "http://www.willus.com/${pname}/src/${pname}_v${version}_src.zip";
+    sha256 = "1fna8bg3pascjfc3hmc6xn0xi2yh7f1qp0d344mw9hqanbnykyy8";
+  };
+in stdenv.mkDerivation rec {
+  inherit pname version;
+  src = k2pdfopt_src;
+
+  patches = [
+    ./0001-Fix-CMakeLists.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace willuslib/bmpdjvu.c \
+      --replace "<djvu.h>" "<libdjvu/ddjvuapi.h>"
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+
+  buildInputs =
+  let
+    # We use specific versions of these sources below to match the versions
+    # used in the k2pdfopt source. Note that this does _not_ need to match the
+    # version used elsewhere in nixpkgs, since it is only used to create the
+    # patch that can then be applied to the version in nixpkgs.
+    mupdf_patch = mkPatch {
+      name = "mupdf";
+      src = fetchurl {
+        url = "https://mupdf.com/downloads/archive/mupdf-1.17.0-source.tar.gz";
+        sha256 = "13nl9nrcx2awz9l83mlv2psi1lmn3hdnfwxvwgwiwbxlkjl3zqq0";
+      };
+      patchCommands = ''
+        cp ${k2pdfopt_src}/mupdf_mod/{filter-basic,font,stext-device,string}.c ./source/fitz/
+        cp ${k2pdfopt_src}/mupdf_mod/pdf-* ./source/pdf/
+      '';
+    };
+    mupdf_modded = mupdf_1_17.overrideAttrs ({ patches ? [], ... }: {
+      patches = patches ++ [ mupdf_patch ];
+      # This function is missing in font.c, see font-win32.c
+      postPatch = ''
+        echo "void pdf_install_load_system_font_funcs(fz_context *ctx) {}" >> source/fitz/font.c
+      '';
+    });
+
+    leptonica_patch = mkPatch {
+      name = "leptonica";
+      src = fetchurl {
+        url = "http://www.leptonica.org/source/leptonica-1.79.0.tar.gz";
+        sha256 = "1n004gv1dj3pq1fcnfdclvvx5nang80336aa67nvs3nnqp4ncn84";
+      };
+      patchCommands = "cp -r ${k2pdfopt_src}/leptonica_mod/. ./src/";
+    };
+    leptonica_modded = leptonica.overrideAttrs ({ patches ? [], ... }: {
+      patches = patches ++ [ leptonica_patch ];
+    });
+
+    tesseract_patch = mkPatch {
+      name = "tesseract";
+      src = fetchFromGitHub {
+        owner = "tesseract-ocr";
+        repo = "tesseract";
+        rev = "4.1.1";
+        sha256 = "1ca27zbjpx35nxh9fha410z3jskwyj06i5hqiqdc08s2d7kdivwn";
+      };
+      patchCommands = ''
+        cp ${k2pdfopt_src}/tesseract_mod/{baseapi,tesscapi,tesseract}.* src/api/
+        cp ${k2pdfopt_src}/tesseract_mod/{tesscapi,tessedit,tesseract}.* src/ccmain/
+        cp ${k2pdfopt_src}/tesseract_mod/dotproduct{avx,fma,sse}.* src/arch/
+        cp ${k2pdfopt_src}/tesseract_mod/{intsimdmatrixsse,simddetect}.* src/arch/
+        cp ${k2pdfopt_src}/tesseract_mod/{errcode,genericvector,mainblk,params,serialis,tessdatamanager,tess_version,tprintf,unicharset}.* src/ccutil/
+        cp ${k2pdfopt_src}/tesseract_mod/{input,lstmrecognizer}.* src/lstm/
+        cp ${k2pdfopt_src}/tesseract_mod/openclwrapper.* src/opencl/
+      '';
+    };
+    tesseract_modded = tesseract4.override {
+      tesseractBase = tesseract4.tesseractBase.overrideAttrs ({ patches ? [], ... }: {
+        patches = patches ++ [ tesseract_patch ];
+        # Additional compilation fixes
+        postPatch = ''
+          echo libtesseract_api_la_SOURCES += tesscapi.cpp >> src/api/Makefile.am
+          substituteInPlace src/api/tesseract.h \
+            --replace "#include <leptonica.h>" "//#include <leptonica.h>"
+        '';
+      });
+    };
+  in
+    [ zlib libpng ] ++
+    lib.optional enableGSL gsl ++
+    lib.optional enableGhostScript ghostscript ++
+    lib.optional enableMuPDF mupdf_modded ++
+    lib.optional enableDJVU djvulibre ++
+    lib.optional enableGOCR gocr ++
+    lib.optionals enableTesseract [ leptonica_modded tesseract_modded ];
+
+  dontUseCmakeBuildDir = true;
+
+  cmakeFlags = [ "-DCMAKE_C_FLAGS=-I${src}/include_mod" ];
+
+  NIX_LDFLAGS = "-lpthread";
+
+  installPhase = ''
+    install -D -m 755 k2pdfopt $out/bin/k2pdfopt
+  '';
+
+  preFixup = lib.optionalString enableTesseract ''
+    wrapProgram $out/bin/k2pdfopt --set-default TESSDATA_PREFIX ${tesseract4}/share/tessdata
+  '';
+
+  meta = with lib; {
+    description = "Optimizes PDF/DJVU files for mobile e-readers (e.g. the Kindle) and smartphones";
+    homepage = "http://www.willus.com/k2pdfopt";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bosu danielfullmer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/k40-whisperer/default.nix b/nixpkgs/pkgs/applications/misc/k40-whisperer/default.nix
new file mode 100644
index 000000000000..a6059ae44f88
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/k40-whisperer/default.nix
@@ -0,0 +1,74 @@
+{ stdenv
+, makeWrapper
+, writeText
+, python3
+, fetchzip
+, inkscape
+, lib
+, udevGroup ? "k40"
+}:
+
+let
+  pythonEnv = python3.withPackages (ps: with ps; [
+    lxml
+    pyusb
+    pillow
+    pyclipper
+    tkinter
+  ]);
+
+  udevRule = writeText "k40-whisperer.rules" ''
+    SUBSYSTEM=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="5512", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="${udevGroup}"
+  '';
+
+in stdenv.mkDerivation rec {
+  pname = "k40-whisperer";
+  version = "0.67";
+
+  src = fetchzip {
+    url = "https://www.scorchworks.com/K40whisperer/K40_Whisperer-${version}_src.zip";
+    stripRoot = true;
+    sha256 = "sha256-jyny5uNZ5eL4AV47uAgOhBe4Zqg8GK3e86Z9gZbC68s=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  patchPhase = ''
+    substituteInPlace svg_reader.py \
+      --replace '"/usr/bin/inkscape"' '"${inkscape}/bin/inkscape"'
+  '';
+
+  buildPhase = "";
+
+  installPhase = ''
+    mkdir -p $out
+    cp -p * $out
+
+    mkdir -p $out/bin
+    mkdir -p $out/lib/udev/rules.d
+
+    ln -s ${udevRule} $out/lib/udev/rules.d/97-k40-whisperer.rules
+
+    makeWrapper '${pythonEnv.interpreter}' $out/bin/k40-whisperer \
+      --add-flags $out/k40_whisperer.py \
+      --prefix PYTHONPATH : $out
+  '';
+
+  meta = with lib; {
+    description = ''
+      Control software for the stock K40 Laser controller
+    '';
+    mainProgram = "k40-whisperer";
+    longDescription = ''
+      K40 Whisperer is an alternative to the the Laser Draw (LaserDRW) program that comes with the cheap Chinese laser cutters available on E-Bay and Amazon.
+      K40 Whisperer reads SVG and DXF files, interprets the data and sends commands to the K40 controller to move the laser head and control the laser accordingly.
+      K40 Whisperer does not require a USB key (dongle) to function.
+    '';
+    homepage = "https://www.scorchworks.com/K40whisperer/k40whisperer.html";
+    downloadPage = "https://www.scorchworks.com/K40whisperer/k40whisperer.html#download";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ fooker ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/k4dirstat/default.nix b/nixpkgs/pkgs/applications/misc/k4dirstat/default.nix
new file mode 100644
index 000000000000..d3c073e5663a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/k4dirstat/default.nix
@@ -0,0 +1,40 @@
+{ mkDerivation
+, extra-cmake-modules
+, fetchFromGitHub
+, kiconthemes
+, kio
+, kjobwidgets
+, kxmlgui
+, lib
+, testers
+, k4dirstat
+}:
+
+mkDerivation rec {
+  pname = "k4dirstat";
+  version = "3.4.3";
+
+  src = fetchFromGitHub {
+    owner = "jeromerobert";
+    repo = pname;
+    rev = version;
+    hash = "sha256-TXMUtiPS7qRLm6cCy2ZntYrcNJ0fn6X+3o3P5u7oo08=";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules ];
+  buildInputs = [ kiconthemes kio kjobwidgets kxmlgui ];
+
+  passthru.tests.version =
+    testers.testVersion {
+      package = k4dirstat;
+      command = "k4dirstat -platform offscreen --version &>/dev/stdout";
+    };
+
+  meta = with lib; {
+    homepage = "https://github.com/jeromerobert/k4dirstat";
+    description = "A small utility program that sums up disk usage for directory trees";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.raboof ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kanjidraw/default.nix b/nixpkgs/pkgs/applications/misc/kanjidraw/default.nix
new file mode 100644
index 000000000000..53c752651d2d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kanjidraw/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, fetchFromGitHub
+, python3
+, bash
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "kanjidraw";
+  version = "0.2.3";
+
+  src = fetchFromGitHub {
+    owner = "obfusk";
+    repo = "kanjidraw";
+    rev = "v${version}";
+    sha256 = "03ag8vkbf85qww857ii8hcnn8bh5qa7rsmhka0v9vfxk272ifbyq";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [ tkinter ];
+
+  postPatch = ''
+    substituteInPlace Makefile --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  checkPhase = ''
+    make test
+  '';
+
+  meta = with lib; {
+    description = "Handwritten kanji recognition";
+    longDescription = ''
+      kanjidraw is a simple Python library + GUI for matching (the strokes of a)
+      handwritten kanji against its database.
+
+      You can use the GUI to draw and subsequently select a kanji from the list of
+      probable matches, which will then be copied to the clipboard.
+
+      The database is based on KanjiVG and the algorithms are based on the
+      Kanji draw Android app.
+    '';
+    homepage = "https://github.com/obfusk/kanjidraw";
+    license = with licenses; [
+      agpl3Plus     # code
+      cc-by-sa-30   # data.json
+    ];
+    maintainers = [ maintainers.obfusk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kapow/default.nix b/nixpkgs/pkgs/applications/misc/kapow/default.nix
new file mode 100644
index 000000000000..49fbed7b1efb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kapow/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, qmake, fetchFromGitHub, qtbase, qttools, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "kapow";
+  version = "1.5.10";
+
+  src = fetchFromGitHub {
+    owner = "gottcode";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1fz9fb4w21ax8hjs6dwfn2410ig4lqvzdlijq0jcj3jbgxd4i1gw";
+  };
+
+  nativeBuildInputs = [ qmake qttools wrapQtAppsHook ];
+
+  buildInputs = [ qtbase ];
+
+  meta = with lib; {
+    description = "Punch clock to track time spent on projects";
+    homepage = "https://gottcode.org/kapow/";
+    maintainers = with maintainers; [ orivej ];
+    platforms = platforms.linux;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kaufkauflist/default.nix b/nixpkgs/pkgs/applications/misc/kaufkauflist/default.nix
new file mode 100644
index 000000000000..e7e462caf791
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kaufkauflist/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, buildPackages
+, fetchFromGitHub
+, buildNpmPackage
+, fetchFromGitea
+, nix-update-script
+}:
+
+let
+  esbuild' = buildPackages.esbuild.override {
+    buildGoModule = args: buildPackages.buildGoModule (args // rec {
+      version = "0.19.11";
+      src = fetchFromGitHub {
+        owner = "evanw";
+        repo = "esbuild";
+        rev = "v${version}";
+        hash = "sha256-NUwjzOpHA0Ijuh0E69KXx8YVS5GTnKmob9HepqugbIU=";
+      };
+      vendorHash = "sha256-+BfxCyg0KkDQpHt/wycy/8CTG6YBA/VJvJFhhzUnSiQ=";
+    });
+  };
+in buildNpmPackage rec {
+  pname = "kaufkauflist";
+  version = "3.3.0";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = "kaufkauflist";
+    rev = "v${version}";
+    hash = "sha256-kqDNA+BALVMrPZleyPxxCyls4VKBzY2MttzO51+Ixo8=";
+  };
+
+  npmDepsHash = "sha256-O2fcmC7Hj9JLStMukyt12aMgntjXT7Lv3vYJp3GqO24=";
+
+  ESBUILD_BINARY_PATH = lib.getExe esbuild';
+
+  postInstall = ''
+    mkdir -p $out/share/kaufkauflist $out/share/pocketbase
+    cp -vr build/* $out/share/kaufkauflist/
+    cp -v pb_schema.json $out/share/pocketbase/
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://codeberg.org/annaaurora/kaufkauflist";
+    description = "A to-do list for shopping or other use cases";
+    license = licenses.mit;
+    maintainers = with maintainers; [ annaaurora ];
+    mainProgram = "kaufdbclean";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kbt/default.nix b/nixpkgs/pkgs/applications/misc/kbt/default.nix
new file mode 100644
index 000000000000..c59b5e62c433
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kbt/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, pkg-config
+, darwin
+, xorg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kbt";
+  version = "2.1.0";
+
+  src = fetchFromGitHub {
+    owner = "bloznelis";
+    repo = "kbt";
+    rev = version;
+    hash = "sha256-ROCZDa5eyGF9yE+zdZ4snzdz8+jk+H6ZnqsnCe8JtJw=";
+  };
+
+  cargoHash = "sha256-6zD9WRPWEt0ubppaMRTOusy0zm3z6SGB/5/kMxcJ/Ag=";
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [
+    pkg-config
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+  ] ++ lib.optionals stdenv.isLinux [
+    xorg.libX11
+  ];
+
+  meta = with lib; {
+    description = "Keyboard tester in terminal";
+    homepage = "https://github.com/bloznelis/kbt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "kbt";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kchmviewer/default.nix b/nixpkgs/pkgs/applications/misc/kchmviewer/default.nix
new file mode 100644
index 000000000000..4d703bff0c22
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kchmviewer/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, qmake, wrapQtAppsHook, chmlib, libzip, qtwebengine }:
+
+stdenv.mkDerivation rec {
+  pname = "kchmviewer";
+  version = "8.0";
+
+  src = fetchFromGitHub {
+    owner = "gyunaev";
+    repo = pname;
+    rev = "RELEASE_${lib.replaceStrings [ "." ] [ "_" ] version}";
+    sha256 = "sha256-YNpiBf6AFBCRbAZRPODvqGbQQedJJJrZFQIQyzIeBlw=";
+  };
+
+  patches = [
+    # remove unused webkit
+    (fetchpatch {
+      url = "https://github.com/gyunaev/kchmviewer/commit/a4a3984465cb635822953350c571950ae726b539.patch";
+      sha256 = "sha256-nHW18a4SrTG4fETJmKS4ojHXwnX1d1uN1m4H0GIuI28=";
+    })
+    # QtWebengine fixes
+    (fetchpatch {
+      url = "https://github.com/gyunaev/kchmviewer/commit/9ac73e7ad15de08aab6b1198115be2eb44da7afe.patch";
+      sha256 = "sha256-qg2ytqA2On7jg19WZmHIOU7vLQI2hoyqItySLEA64SY=";
+    })
+    (fetchpatch {
+      url = "https://github.com/gyunaev/kchmviewer/commit/99a6d94bdfce9c4578cce82707e71863a71d1453.patch";
+      sha256 = "sha256-o8JkaMmcJObmMt+o/6ooCAPCi+yRAWDAgxV+tR5eHfY=";
+    })
+  ];
+
+  buildInputs = [ chmlib libzip qtwebengine ];
+
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+
+  postInstall = ''
+    install -Dm755 bin/kchmviewer -t $out/bin
+    install -Dm644 packages/kchmviewer.png -t $out/share/pixmaps
+    install -Dm644 packages/kchmviewer.desktop -t $out/share/applications
+  '';
+
+  meta = with lib; {
+    description = "CHM (Winhelp) files viewer";
+    homepage = "http://www.ulduzsoft.com/linux/kchmviewer/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kdbplus/default.nix b/nixpkgs/pkgs/applications/misc/kdbplus/default.nix
new file mode 100644
index 000000000000..05d1c98e56ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kdbplus/default.nix
@@ -0,0 +1,76 @@
+{ lib, stdenv, requireFile, unzip, rlwrap, bash, zlib }:
+
+assert (stdenv.hostPlatform.system == "i686-linux");
+
+let
+  libPath = lib.makeLibraryPath
+    [ stdenv.cc.libc stdenv.cc.cc zlib ];
+in
+stdenv.mkDerivation rec {
+  pname = "kdbplus";
+  version = "3.6";
+
+  src = requireFile rec {
+    message = ''
+      Nix can't download kdb+ for you automatically. Go to
+      http://kx.com and download the free, 32-bit version for
+      Linux. Then run "nix-prefetch-url file://\$PWD/${name}" in
+      the directory where you saved it. Note you need version ${version}.
+    '';
+    name   = "linuxx86.zip";
+    sha256 = "0w6znd9warcqx28vf648n0vgmxyyy9kvsfpsfw37d1kp5finap4p";
+  };
+
+  dontStrip = true;
+  nativeBuildInputs = [ unzip ];
+
+  phases = "unpackPhase installPhase";
+  unpackPhase = "mkdir ${pname}-${version} && cd ${pname}-${version} && unzip -qq ${src}";
+  installPhase = ''
+    mkdir -p $out/bin $out/libexec
+
+    patchelf \
+      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath ${libPath} \
+      ./q/l32/q
+    mv ./q/l32/q $out/libexec/q
+
+    # Shell script wrappers to make things more convenient...
+
+    cat > $out/bin/q-install <<- EOF
+    #!${bash}/bin/bash
+    if [ -f \$HOME/q/q.k ]; then
+      echo "kdb has already been unpacked in \$HOME. Skipping..."
+      exit 0
+    fi
+    echo -n "Unzipping ${src} into \$HOME... "
+    cd \$HOME && ${unzip}/bin/unzip -qq ${src}
+    echo "Done"
+    EOF
+
+    cat > $out/bin/q <<- EOF
+    #!${bash}/bin/bash
+    if [ ! -f \$HOME/q/q.k ]; then
+      echo "ERROR: You need to unzip the Q sources into \$HOME before running q."
+      echo
+      echo "Try:"
+      echo "  cd \$HOME && unzip ${src}"
+      echo "(or run q-install)"
+      exit 1
+    fi
+
+    exec ${rlwrap}/bin/rlwrap $out/libexec/q \$@
+    EOF
+
+    chmod +x $out/bin/q $out/bin/q-install
+  '';
+
+  meta = {
+    description = "Analytics and time-series database";
+    homepage    = "http://www.kx.com/";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license     = lib.licenses.unfree;
+    platforms   = [ "i686-linux" ];
+    maintainers = [ lib.maintainers.thoughtpolice ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keepass-diff/default.nix b/nixpkgs/pkgs/applications/misc/keepass-diff/default.nix
new file mode 100644
index 000000000000..5cee712ae0c6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-diff/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchCrate, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "keepass-diff";
+  version = "1.2.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-CqLH5Dosp26YfqgOVcZilfo5svAEv+pAbi1zebGMnb4=";
+  };
+
+  cargoHash = "sha256-+kgb9hbCH4Nt80nobTeDrC+LVp1r6EbzUs+t6zlIhtU=";
+
+  meta = with lib; {
+    description = "A CLI-tool to diff Keepass (.kdbx) files";
+    homepage = "https://keepass-diff.narigo.dev/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ wamserma ];
+    mainProgram = "keepass-diff";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/charactercopy/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/charactercopy/default.nix
new file mode 100644
index 000000000000..dbe203566f09
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/charactercopy/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, buildEnv, fetchurl, mono }:
+
+let
+  version = "1.0.0";
+
+  drv = stdenv.mkDerivation {
+    pname = "keepass-charactercopy";
+    inherit version;
+
+    src = fetchurl {
+      url    = "https://github.com/SketchingDev/Character-Copy/releases/download/v${version}/CharacterCopy.plgx";
+      sha256 = "f8a81a60cd1aacc04c92a242479a8e4210452add019c52ebfbb1810b58d8800a";
+    };
+
+    dontUnpack = true;
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $src $out/lib/dotnet/keepass/
+    '';
+
+    meta = with lib; {
+      description = "Enables KeePass to copy individual characters by index";
+      longDescription = ''
+        Character Copy is a lightweight KeePass plugin that integrates into KeePass' entry menu and
+        allows users to securely copy individual characters from
+        an entry's protected string fields, such as the password field
+      '';
+      homepage    = "https://github.com/SketchingDev/Character-Copy";
+      platforms   = [
+        "aarch64-linux"
+        "i686-linux"
+        "x86_64-linux"
+      ];
+      # licensing info was found in source files https://github.com/SketchingDev/Character-Copy/search?q=license
+      license     = licenses.gpl2;
+      maintainers = with maintainers; [ nazarewk ];
+    };
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/keeagent/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/keeagent/default.nix
new file mode 100644
index 000000000000..7dc75f604265
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/keeagent/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, buildEnv, fetchzip, mono }:
+
+let
+  version = "0.12.0";
+  drv = stdenv.mkDerivation {
+    pname = "keeagent";
+    inherit version;
+
+    src = fetchzip {
+      url = "https://lechnology.com/wp-content/uploads/2020/05/KeeAgent_v0.12.0.zip";
+      sha256 = "0fcfbj3yikiv3dmp69236h9r3c416amdq849kn131w1129gb68xd";
+      stripRoot = false;
+    };
+
+    meta = {
+      description = "KeePass plugin to allow other programs to access SSH keys stored in a KeePass database for authentication";
+      homepage    = "http://lechnology.com/software/keeagent";
+      platforms   = with lib.platforms; linux;
+      license     = lib.licenses.gpl2;
+      maintainers = [ ];
+    };
+
+    pluginFilename = "KeeAgent.plgx";
+
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $pluginFilename $out/lib/dotnet/keepass/$pluginFilename
+    '';
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/keepasshttp/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/keepasshttp/default.nix
new file mode 100644
index 000000000000..be58f0e34cb3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/keepasshttp/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, buildEnv, fetchFromGitHub, mono }:
+
+let
+  version = "1.8.4.2";
+  drv = stdenv.mkDerivation {
+    pname = "keepasshttp";
+    inherit version;
+    src = fetchFromGitHub {
+      owner = "pfn";
+      repo = "keepasshttp";
+      # rev = version;
+      # for 1.8.4.2 the tag is at the wrong commit (they fixed stuff
+      # afterwards and didn't move the tag), hence reference by commitid
+      rev = "c2c4eb5388a02169400cba7a67be325caabdcc37";
+      sha256 = "0bkzxggbqx7sql3sp46bqham6r457in0vrgh3ai3lw2jrw79pwmh";
+    };
+
+    meta = {
+      description = "KeePass plugin to expose password entries securely (256bit AES/CBC) over HTTP";
+      homepage    = "https://github.com/pfn/keepasshttp";
+      platforms   = with lib.platforms; linux;
+      license     = lib.licenses.gpl3;
+    };
+
+    pluginFilename = "KeePassHttp.plgx";
+
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $pluginFilename $out/lib/dotnet/keepass/$pluginFilename
+    '';
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix
new file mode 100644
index 000000000000..09331665a7f8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/keepassrpc/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, buildEnv, fetchurl, mono }:
+
+let
+  version = "1.16.0";
+  drv = stdenv.mkDerivation {
+    pname = "keepassrpc";
+    inherit version;
+    src = fetchurl {
+      url    = "https://github.com/kee-org/keepassrpc/releases/download/v${version}/KeePassRPC.plgx";
+      hash   = "sha256-p5dYluCrXAKhBhlm6sQ3QQE3gLMJzEZsHXwGnVeXFos=";
+    };
+
+    meta = with lib; {
+      description = "The KeePassRPC plugin that needs to be installed inside KeePass in order for Kee to be able to connect your browser to your passwords";
+      homepage    = "https://github.com/kee-org/keepassrpc";
+      platforms   = [ "x86_64-linux" ];
+      license     = licenses.gpl2;
+      maintainers = with maintainers; [ mjanczyk svsdep mgregoire ];
+    };
+
+    dontUnpack = true;
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $src $out/lib/dotnet/keepass/
+    '';
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/keetraytotp/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/keetraytotp/default.nix
new file mode 100644
index 000000000000..52cd719ca583
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/keetraytotp/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, buildEnv, fetchurl, mono }:
+
+let
+  version = "0.108.0";
+
+  drv = stdenv.mkDerivation {
+    pname = "keepass-keetraytotp";
+    inherit version;
+
+    src = fetchurl {
+      url    = "https://github.com/KeeTrayTOTP/KeeTrayTOTP/releases/download/v${version}/KeeTrayTOTP.plgx";
+      sha256 = "4f7251a9bbb79cad04aee96d1809c6b36d43285a9f3834fef5330fc97ae8bc09";
+    };
+
+    dontUnpack = true;
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $src $out/lib/dotnet/keepass/
+    '';
+
+    meta = with lib; {
+      description = "Augments KeePass with TOTP user interface";
+      longDescription = ''
+        This KeePass2 plugin adds advanced support for generating Time-based One-Time Passwords (TOTPs)
+        from the KeePass tray icon. It also provides a column in the main entry list to display and/or use TOTPs.
+        TOTPs can also be sent by auto-type. The plugin is compatible with Google, Dropbox, Steam, and many more services.
+      '';
+      homepage    = "https://github.com/KeeTrayTOTP/KeeTrayTOTP";
+      platforms   = [
+        "aarch64-linux"
+        "i686-linux"
+        "x86_64-linux"
+      ];
+      license     = licenses.gpl3;
+      maintainers = with maintainers; [ nazarewk ];
+    };
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix
new file mode 100644
index 000000000000..abed55d91593
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/otpkeyprov/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, buildEnv, fetchzip, mono }:
+
+let
+  version = "2.6";
+  drv = stdenv.mkDerivation {
+    pname = "otpkeyprov";
+    inherit version;
+
+    src = fetchzip {
+      url = "https://keepass.info/extensions/v2/otpkeyprov/OtpKeyProv-${version}.zip";
+      sha256 = "1p60k55v2sxnv1varmp0dgbsi2rhjg9kj19cf54mkc87nss5h1ki";
+      stripRoot = false;
+    };
+
+    meta = {
+      description = "OtpKeyProv is a key provider based on one-time passwords";
+      homepage    = "https://keepass.info/plugins.html#otpkeyprov";
+      platforms   = with lib.platforms; linux;
+      license     = lib.licenses.gpl2;
+      maintainers = [ lib.maintainers.Enteee ];
+    };
+
+    pluginFilename = "OtpKeyProv.plgx";
+
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $pluginFilename $out/lib/dotnet/keepass/$pluginFilename
+    '';
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepass-plugins/qrcodeview/default.nix b/nixpkgs/pkgs/applications/misc/keepass-plugins/qrcodeview/default.nix
new file mode 100644
index 000000000000..8e7ee2a49905
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepass-plugins/qrcodeview/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, buildEnv, fetchurl, mono }:
+
+let
+  version = "1.0.4";
+
+  drv = stdenv.mkDerivation {
+    pname = "keepass-qrcodeview";
+    inherit version;
+
+    src = fetchurl {
+      url = "https://github.com/JanisEst/KeePassQRCodeView/releases/download/v${version}/KeePassQRCodeView.plgx";
+      sha256 = "e13c9f02bb0d79b479ca0e92490b822b5b88f49bb18ba2954d3bbe0808f46e6d";
+    };
+
+    dontUnpack = true;
+    installPhase = ''
+      mkdir -p $out/lib/dotnet/keepass/
+      cp $src $out/lib/dotnet/keepass/
+    '';
+
+    meta = with lib; {
+      description = "Enables KeePass to display data as QR code images";
+      longDescription = ''
+        KeePassQRCodeView is a plugin for KeePass 2.x which shows QR codes for entry fields.
+        These codes can be scanned to copy the encoded data to the scanner (smartphone, ...)
+      '';
+      homepage    = "https://github.com/JanisEst/KeePassQRCodeView";
+      platforms   = [
+        "aarch64-linux"
+        "i686-linux"
+        "x86_64-linux"
+      ];
+      license     = licenses.mit;
+      maintainers = with maintainers; [ nazarewk ];
+    };
+  };
+in
+  # Mono is required to compile plugin at runtime, after loading.
+  buildEnv { name = drv.name; paths = [ mono drv ]; }
diff --git a/nixpkgs/pkgs/applications/misc/keepassxc/darwin.patch b/nixpkgs/pkgs/applications/misc/keepassxc/darwin.patch
new file mode 100644
index 000000000000..1ec7db586363
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepassxc/darwin.patch
@@ -0,0 +1,37 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 74b1a7ff..0a713a32 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -307,6 +307,7 @@ if(MINGW)
+     set(PLUGIN_INSTALL_DIR ".")
+     set(DATA_INSTALL_DIR "share")
+ elseif(APPLE AND WITH_APP_BUNDLE)
++    set(CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/Applications")
+     set(BUNDLE_INSTALL_DIR "${PROGNAME}.app/Contents")
+     set(CMAKE_INSTALL_MANDIR "${BUNDLE_INSTALL_DIR}/Resources/man")
+     set(CLI_INSTALL_DIR "${BUNDLE_INSTALL_DIR}/MacOS")
+@@ -470,11 +470,6 @@ set(CMAKE_AUTORCC ON)
+ 
+ if(APPLE)
+     set(CMAKE_MACOSX_RPATH TRUE)
+-    find_program(MACDEPLOYQT_EXE macdeployqt HINTS ${Qt5_PREFIX}/bin ${Qt5_PREFIX}/tools/qt5/bin ENV PATH)
+-    if(NOT MACDEPLOYQT_EXE)
+-        message(FATAL_ERROR "macdeployqt is required to build on macOS")
+-    endif()
+-    message(STATUS "Using macdeployqt: ${MACDEPLOYQT_EXE}")
+     set(MACDEPLOYQT_EXTRA_BINARIES "")
+ elseif(WIN32)
+     find_program(WINDEPLOYQT_EXE windeployqt HINTS ${Qt5_PREFIX}/bin ${Qt5_PREFIX}/tools/qt5/bin ENV PATH)
+diff --git a/src/post_install/CMakeLists.txt b/src/post_install/CMakeLists.txt
+index 359c891f..a6a061a3 100644
+--- a/src/post_install/CMakeLists.txt
++++ b/src/post_install/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ # The install commands in this subdirectory will be executed after all the install commands in the
+ # current scope are ran. It is required for correct functtioning of macdeployqt.
+ 
+-if(APPLE AND WITH_APP_BUNDLE)
++if(FALSE)
+     # Run macdeloyqt on the main app and any extra binaries and plugins as specified by the
+     # _MACDEPLOYQT_EXTRA_BINARIES global property.
+     # All install(TARGETS) calls should have already been called.
diff --git a/nixpkgs/pkgs/applications/misc/keepassxc/default.nix b/nixpkgs/pkgs/applications/misc/keepassxc/default.nix
new file mode 100644
index 000000000000..ed7884ad2562
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepassxc/default.nix
@@ -0,0 +1,148 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, qttools
+
+, asciidoctor
+, botan2
+, curl
+, libXi
+, libXtst
+, libargon2
+, libusb1
+, minizip
+, pcsclite
+, pkg-config
+, qrencode
+, qtbase
+, qtmacextras
+, qtsvg
+, qtx11extras
+, readline
+, wrapGAppsHook
+, wrapQtAppsHook
+, zlib
+
+, LocalAuthentication
+
+, withKeePassBrowser ? true
+, withKeePassFDOSecrets ? true
+, withKeePassKeeShare ? true
+, withKeePassNetworking ? true
+, withKeePassSSHAgent ? true
+, withKeePassTouchID ? true
+, withKeePassX11 ? true
+, withKeePassYubiKey ? true
+
+, nixosTests
+}:
+
+stdenv.mkDerivation rec {
+  pname = "keepassxc";
+  version = "2.7.6";
+
+  src = fetchFromGitHub {
+    owner = "keepassxreboot";
+    repo = "keepassxc";
+    rev = version;
+    hash = "sha256-xgrkMz7BCBxjfxHsAz/CFLv1d175LnrAJIOZMM3GmU0=";
+  };
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang (toString [
+    "-Wno-old-style-cast"
+    "-Wno-error"
+    "-D__BIG_ENDIAN__=${if stdenv.isBigEndian then "1" else "0"}"
+  ]);
+
+  NIX_LDFLAGS = lib.optionalString stdenv.isDarwin "-rpath ${libargon2}/lib";
+
+  patches = [
+    ./darwin.patch
+  ];
+
+  cmakeFlags = [
+    "-DKEEPASSXC_BUILD_TYPE=Release"
+    "-DWITH_GUI_TESTS=ON"
+    "-DWITH_XC_UPDATECHECK=OFF"
+  ]
+  ++ (lib.optional (!withKeePassX11) "-DWITH_XC_X11=OFF")
+  ++ (lib.optional (withKeePassFDOSecrets && stdenv.isLinux) "-DWITH_XC_FDOSECRETS=ON")
+  ++ (lib.optional (withKeePassYubiKey && stdenv.isLinux) "-DWITH_XC_YUBIKEY=ON")
+  ++ (lib.optional withKeePassBrowser "-DWITH_XC_BROWSER=ON")
+  ++ (lib.optional withKeePassKeeShare "-DWITH_XC_KEESHARE=ON")
+  ++ (lib.optional withKeePassNetworking "-DWITH_XC_NETWORKING=ON")
+  ++ (lib.optional withKeePassSSHAgent "-DWITH_XC_SSHAGENT=ON");
+
+  doCheck = true;
+  checkPhase = ''
+    runHook preCheck
+
+    export LC_ALL="en_US.UTF-8"
+    export QT_QPA_PLATFORM=offscreen
+    export QT_PLUGIN_PATH="${qtbase.bin}/${qtbase.qtPluginPrefix}"
+    # testcli, testgui and testkdbx4 are flaky - skip them all
+    # testautotype on darwin throws "QWidget: Cannot create a QWidget without QApplication"
+    make test ARGS+="-E 'testcli|testgui${lib.optionalString stdenv.isDarwin "|testautotype|testkdbx4"}' --output-on-failure"
+
+    runHook postCheck
+  '';
+
+  nativeBuildInputs = [
+    asciidoctor
+    cmake
+    wrapQtAppsHook
+    qttools
+    pkg-config
+  ]
+  ++ lib.optional (!stdenv.isDarwin) wrapGAppsHook;
+
+  dontWrapGApps = true;
+  preFixup = ''
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '' + lib.optionalString stdenv.isDarwin ''
+    wrapQtApp "$out/Applications/KeePassXC.app/Contents/MacOS/KeePassXC"
+  '';
+
+  # See https://github.com/keepassxreboot/keepassxc/blob/cd7a53abbbb81e468efb33eb56eefc12739969b8/src/browser/NativeMessageInstaller.cpp#L317
+  postInstall = lib.optionalString withKeePassBrowser ''
+    mkdir -p "$out/lib/mozilla/native-messaging-hosts"
+    substituteAll "${./firefox-native-messaging-host.json}" "$out/lib/mozilla/native-messaging-hosts/org.keepassxc.keepassxc_browser.json"
+  '';
+
+  buildInputs = [
+    curl
+    botan2
+    libXi
+    libXtst
+    libargon2
+    minizip
+    pcsclite
+    qrencode
+    qtbase
+    qtsvg
+    readline
+    zlib
+  ]
+  ++ lib.optional (stdenv.isDarwin && withKeePassTouchID) LocalAuthentication
+  ++ lib.optional stdenv.isDarwin qtmacextras
+  ++ lib.optional stdenv.isLinux libusb1
+  ++ lib.optional withKeePassX11 qtx11extras;
+
+  passthru.tests = nixosTests.keepassxc;
+
+  meta = with lib; {
+    description = "Offline password manager with many features.";
+    longDescription = ''
+      A community fork of KeePassX, which is itself a port of KeePass Password Safe.
+      The goal is to extend and improve KeePassX with new features and bugfixes,
+      to provide a feature-rich, fully cross-platform and modern open-source password manager.
+      Accessible via native cross-platform GUI, CLI, has browser integration
+      using the KeePassXC Browser Extension (https://github.com/keepassxreboot/keepassxc-browser)
+    '';
+    homepage = "https://keepassxc.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jonafato blankparticle ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keepassxc/firefox-native-messaging-host.json b/nixpkgs/pkgs/applications/misc/keepassxc/firefox-native-messaging-host.json
new file mode 100644
index 000000000000..70f1b26041f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepassxc/firefox-native-messaging-host.json
@@ -0,0 +1,9 @@
+{
+    "name": "org.keepassxc.keepassxc_browser",
+    "description": "KeePassXC integration with native messaging support",
+    "path": "@out@/bin/keepassxc-proxy",
+    "type": "stdio",
+    "allowed_extensions": [
+        "keepassxc-browser@keepassxc.org"
+    ]
+}
diff --git a/nixpkgs/pkgs/applications/misc/keepmenu/default.nix b/nixpkgs/pkgs/applications/misc/keepmenu/default.nix
new file mode 100644
index 000000000000..d10c10c231d6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keepmenu/default.nix
@@ -0,0 +1,49 @@
+{ lib, python3Packages, fetchFromGitHub, xvfb-run, xdotool, dmenu }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "keepmenu";
+  version = "1.4.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "firecat53";
+    repo = "keepmenu";
+    rev = version;
+    hash = "sha256-3vFg+9Nw+NhuPJbrmBahXwa13wXlBg5IMYwJ+unn88k=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    hatchling
+    hatch-vcs
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pykeepass
+    pynput
+  ];
+
+  nativeCheckInputs = [ xvfb-run xdotool dmenu ];
+
+  postPatch = ''
+    substituteInPlace tests/keepmenu-config.ini tests/tests.py \
+      --replace "/usr/bin/dmenu" "dmenu"
+  '';
+
+  checkPhase = ''
+    runHook preCheck
+
+    xvfb-run python tests/tests.py
+
+    runHook postCheck
+  '';
+
+  pythonImportsCheck = [ "keepmenu" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/firecat53/keepmenu";
+    description = "Dmenu/Rofi frontend for Keepass databases";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ elliot ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keeweb/default.nix b/nixpkgs/pkgs/applications/misc/keeweb/default.nix
new file mode 100644
index 000000000000..7af5465ad9e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keeweb/default.nix
@@ -0,0 +1,117 @@
+{ lib
+, stdenv
+, fetchurl
+, undmg
+, dpkg
+, autoPatchelfHook
+, wrapGAppsHook
+, makeWrapper
+, alsa-lib
+, at-spi2-atk
+, gdk-pixbuf
+, glibc
+, nss
+, udev
+, xorg
+, gnome
+, mesa
+, gtk3
+, libusb1
+, libsecret
+, libappindicator
+, xdotool
+}:
+let
+  pname = "keeweb";
+  version = "1.18.7";
+
+  srcs = {
+    x86_64-linux = fetchurl {
+      url = "https://github.com/keeweb/keeweb/releases/download/v${version}/KeeWeb-${version}.linux.x64.deb";
+      hash = "sha256-/U+vn5TLIU9/J6cRFjuAdyGzlwC04mp4L2X2ETp+ZSE=";
+    };
+    x86_64-darwin = fetchurl {
+      url = "https://github.com/keeweb/keeweb/releases/download/v${version}/KeeWeb-${version}.mac.x64.dmg";
+      hash = "sha256-+ZFGrrw0tZ7F6lb/3iBIyGD+tp1puVhkPv10hfp6ATU=";
+    };
+    aarch64-darwin = fetchurl {
+      url = "https://github.com/keeweb/keeweb/releases/download/v${version}/KeeWeb-${version}.mac.arm64.dmg";
+      hash = "sha256-bkhwsWYLkec16vMOfXUce7jfrmI9W2xHiZvU1asebK4=";
+    };
+  };
+  src = srcs.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  libraries = [
+    alsa-lib
+    at-spi2-atk
+    gdk-pixbuf
+    nss
+    udev
+    xorg.libX11
+    xorg.libXcomposite
+    xorg.libXext
+    xorg.libXrandr
+    xorg.libXScrnSaver
+    xorg.libXtst
+    xorg.libxshmfence
+    gnome.gnome-keyring
+    mesa
+    gtk3
+    libusb1
+    libsecret
+    libappindicator
+    xdotool
+  ];
+
+  meta = with lib; {
+    description = "Free cross-platform password manager compatible with KeePass";
+    homepage = "https://keeweb.info/";
+    changelog = "https://github.com/keeweb/keeweb/blob/v${version}/release-notes.md";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = builtins.attrNames srcs;
+  };
+in
+if stdenv.isDarwin
+then stdenv.mkDerivation {
+  inherit pname version src meta;
+
+  nativeBuildInputs = [ undmg ];
+
+  sourceRoot = ".";
+
+  installPhase = ''
+    mkdir -p $out/Applications
+    cp -r *.app $out/Applications
+  '';
+}
+else stdenv.mkDerivation {
+  inherit pname version src meta;
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    wrapGAppsHook
+    makeWrapper
+  ];
+
+  buildInputs = libraries;
+
+  unpackPhase = ''
+    ${dpkg}/bin/dpkg-deb --fsys-tarfile $src | tar --extract
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp -r usr/share $out/share
+
+    makeWrapper $out/share/keeweb-desktop/keeweb $out/bin/keeweb \
+      --argv0 "keeweb" \
+      --add-flags "$out/share/keeweb-desktop/resources/app.asar" \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath libraries}"
+
+    runHook postInstall
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/misc/kemai/default.nix b/nixpkgs/pkgs/applications/misc/kemai/default.nix
new file mode 100644
index 000000000000..70941045ce36
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kemai/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, magic-enum
+, range-v3
+, spdlog
+, qtbase
+, qtconnectivity
+, qttools
+, qtlanguageserver
+, qtwayland
+, wrapQtAppsHook
+, libXScrnSaver
+, nix-update-script
+}:
+
+stdenv.mkDerivation rec {
+  pname = "kemai";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "AlexandrePTJ";
+    repo = "kemai";
+    rev = version;
+    hash = "sha256-wclBAgeDyAIw/nGF6lzIwbwdoZMBTu+tjxsnIxIkODM=";
+  };
+
+  patches = [
+    # Backport the fix for an issue where LICENSE.txt ends up in /bin
+    # Remove in next release
+    (fetchpatch {
+      url = "https://github.com/AlexandrePTJ/kemai/commit/e279679dd7308efebe004252d168d7308f3b99ce.patch";
+      hash = "sha256-5cmRRMVATf4ul4HhaQKiE0yTN2qd+MfNFQzGTLLpOyg=";
+    })
+  ];
+
+  buildInputs = [
+    qtbase
+    qtconnectivity
+    qttools
+    qtlanguageserver
+    libXScrnSaver
+    magic-enum
+    range-v3
+    spdlog
+  ] ++ lib.optional stdenv.hostPlatform.isLinux qtwayland;
+  cmakeFlags = [
+    "-DFETCHCONTENT_FULLY_DISCONNECTED=ON"
+    "-DFETCHCONTENT_QUIET=OFF"
+    "-DFETCHCONTENT_TRY_FIND_PACKAGE_MODE=ALWAYS"
+  ];
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Kimai desktop client written in QT6";
+    homepage = "https://github.com/AlexandrePTJ/kemai";
+    license = licenses.mit;
+    maintainers = with maintainers; [ poelzi ];
+    platforms   = platforms.unix;
+    broken = stdenv.isDarwin;
+    mainProgram = "Kemai";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keyleds/default.nix b/nixpkgs/pkgs/applications/misc/keyleds/default.nix
new file mode 100644
index 000000000000..a759b8e393e9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keyleds/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, pkg-config
+, libuv
+, libX11
+, libXi
+, libyaml
+, luajit
+, udev
+}:
+
+stdenv.mkDerivation rec {
+  pname = "keyleds";
+  version = "unstable-2021-04-08";
+
+  src = fetchFromGitHub {
+    owner = "keyleds";
+    repo = pname;
+    rev = "171361654a64b570d747c2d196acb2da4b8dc293";
+    sha256 = "sha256-mojgHMT0gni0Po0hiZqQ8eMzqfwUipXue1uqpionihw=";
+  };
+
+  # This commit corresponds to the following open PR:
+  # https://github.com/keyleds/keyleds/pull/74
+  # According to the author of the PR, the maintainer of keyleds is unreachable.
+  # This patch fixes the build process which is broken on the current master branch of keyleds.
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/keyleds/keyleds/commit/bffed5eb181127df915002b6ed830f85f15feafd.patch";
+      sha256 = "sha256-i2N3D/K++34JVqJloNK2UcN473NarIjdjAz6PUhXcNY=";
+    })
+  ];
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    libuv
+    libX11
+    libXi
+    libyaml
+    luajit
+    udev
+  ];
+
+  enableParallelBuilding = true;
+
+  cmakeBuildType = "MinSizeRel";
+
+  meta = {
+    homepage = "https://github.com/keyleds/keyleds";
+    description = "Advanced RGB animation service for Logitech keyboards";
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [ GaetanLepage ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keylight-controller-mschneider82/default.nix b/nixpkgs/pkgs/applications/misc/keylight-controller-mschneider82/default.nix
new file mode 100644
index 000000000000..5a9afb42dd15
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keylight-controller-mschneider82/default.nix
@@ -0,0 +1,54 @@
+{ buildGoModule, fetchFromGitHub, lib, libGL, nssmdns, pkg-config, xorg }:
+
+buildGoModule rec {
+  pname = "keylight-controller-mschneider82";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "mschneider82";
+    repo = "keylight-control";
+    rev = "v${version}";
+    hash = "sha256-xC/JRM8vyqAsxPpf37P3pZv6i73s+CLQt6Sh4nMxwzM=";
+  };
+
+  vendorHash = "sha256-nFttVJbEAAGsrAglMphuw0wJ2Kf8sWB4HrpVqfHO76o=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libGL
+    nssmdns
+  ] ++ (with xorg; [
+    libX11
+    libX11.dev
+    libXcursor
+    libXext
+    libXi
+    libXinerama
+    libXrandr
+    libXxf86vm
+    xinput
+  ]);
+
+  meta = with lib; {
+    description = "A desktop application to control Elgato Keylights";
+    longDescription = ''
+      Requires having:
+      * Elgato's Keylight paired to local wifi network.
+      * Service avahi with nssmdns4 enabled.
+    '';
+    license = licenses.mit;
+    homepage = "https://github.com/mschneider82/keylight-control";
+    maintainers = with maintainers; [ ];
+    mainProgram = "keylight-control";
+  };
+}
+
+# Note: Application errors on first executions but works on re-runs.
+
+# Troubleshooting
+# 1. Keylight lists at: `avahi-browse --all --resolve --ignore-local`
+# 2. Ping Keylight's IP
+# 3. Resolve Keylight's hostname: `getent hosts elgato-key-light-XXXX.local`
diff --git a/nixpkgs/pkgs/applications/misc/keymapp/default.nix b/nixpkgs/pkgs/applications/misc/keymapp/default.nix
new file mode 100644
index 000000000000..57e62d8d826d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keymapp/default.nix
@@ -0,0 +1,68 @@
+{ stdenv
+, lib
+, fetchurl
+, autoPatchelfHook
+, wrapGAppsHook
+, libusb1
+, webkitgtk
+, gtk3
+, writeShellScript
+, makeDesktopItem
+, copyDesktopItems
+}:
+let
+  desktopItem = makeDesktopItem {
+    name = "keymapp";
+    icon = "keymapp";
+    desktopName = "Keymapp";
+    categories = [ "Settings" "HardwareSettings" ];
+    type = "Application";
+    exec = "keymapp";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "keymapp";
+  version = "1.0.8";
+
+  src = fetchurl {
+    url = "https://oryx.nyc3.cdn.digitaloceanspaces.com/keymapp/keymapp-${version}.tar.gz";
+    hash = "sha256-adFQCuHkorXixn/dId/vrCcnjQ2VDDQM049UrodjFgA=";
+  };
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    autoPatchelfHook
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    libusb1
+    webkitgtk
+    gtk3
+  ];
+
+  sourceRoot = ".";
+
+  installPhase = ''
+    runHook preInstall
+
+    install -m755 -D keymapp "$out/bin/${pname}"
+    install -Dm644 icon.png "$out/share/pixmaps/${pname}.png"
+
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(--set-default '__NV_PRIME_RENDER_OFFLOAD' 1)
+  '';
+
+  desktopItems = [ desktopItem ];
+
+  meta = with lib; {
+    homepage = "https://www.zsa.io/flash/";
+    description = "Application for ZSA keyboards";
+    maintainers = with lib.maintainers; [ jankaifer shawn8901 ];
+    platforms = platforms.linux;
+    license = lib.licenses.unfree;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/keystore-explorer/default.nix b/nixpkgs/pkgs/applications/misc/keystore-explorer/default.nix
new file mode 100644
index 000000000000..a79169ff633e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/keystore-explorer/default.nix
@@ -0,0 +1,45 @@
+{ fetchzip, lib, stdenv, jdk, runtimeShell, glib, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  version = "5.5.3";
+  pname = "keystore-explorer";
+  src = fetchzip {
+    url = "https://github.com/kaikramer/keystore-explorer/releases/download/v${version}/kse-${lib.replaceStrings ["."] [""] version}.zip";
+    sha256 = "sha256-oShVfmien4HMpAfSa9rPr18wLu7RN8ZWEZEUtiBHyBs=";
+  };
+
+  # glib is necessary so file dialogs don't hang.
+  buildInputs = [ glib ];
+  nativeBuildInputs = [ wrapGAppsHook ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    mkdir -p $out/share/keystore-explorer
+    cp -R icons licenses lib kse.jar $out/share/keystore-explorer/
+
+    # keystore-explorer's kse.sh tries to detect the path of Java by using
+    # Python on Darwin; just write our own start script to avoid unnecessary dependencies
+    cat > $out/bin/keystore-explorer <<EOF
+    #!${runtimeShell}
+    export JAVA_HOME=${jdk.home}
+    exec ${jdk}/bin/java -jar $out/share/keystore-explorer/kse.jar "\$@"
+    EOF
+    chmod +x $out/bin/keystore-explorer
+
+    runHook postInstall
+  '';
+
+  dontStrip = true;
+  dontBuild = true;
+  dontConfigure = true;
+
+  meta = {
+    description = "Open source GUI replacement for the Java command-line utilities keytool and jarsigner";
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license = lib.licenses.gpl3Only;
+    maintainers = [ lib.maintainers.numinit ];
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/khal/default.nix b/nixpkgs/pkgs/applications/misc/khal/default.nix
new file mode 100644
index 000000000000..83de3e517d78
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/khal/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, glibcLocales
+, installShellFiles
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "khal";
+  version = "0.11.3";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "pimutils";
+    repo = "khal";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-YP2kQ/qXPDwvFvlHf+A2Ymvk49dmt5tAnTaOhrOV92M=";
+  };
+
+  nativeBuildInputs = [
+    glibcLocales
+    installShellFiles
+  ] ++ (with python3.pkgs; [
+    setuptools-scm
+    sphinx
+    sphinxcontrib-newsfeed
+  ]);
+
+  propagatedBuildInputs = with python3.pkgs;[
+    atomicwrites
+    click
+    click-log
+    configobj
+    freezegun
+    icalendar
+    lxml
+    pkginfo
+    vdirsyncer
+    python-dateutil
+    pytz
+    pyxdg
+    requests-toolbelt
+    tzlocal
+    urwid
+  ];
+
+  nativeCheckInputs = with python3.pkgs;[
+    freezegun
+    hypothesis
+    packaging
+    pytestCheckHook
+    vdirsyncer
+  ];
+
+  postInstall = ''
+    # shell completions
+    installShellCompletion --cmd khal \
+      --bash <(_KHAL_COMPLETE=bash_source $out/bin/khal) \
+      --zsh <(_KHAL_COMPLETE=zsh_source $out/bin/khal) \
+      --fish <(_KHAL_COMPLETE=fish_source $out/bin/khal)
+
+    # man page
+    PATH="${python3.withPackages (ps: with ps; [ sphinx sphinxcontrib-newsfeed ])}/bin:$PATH" \
+    make -C doc man
+    installManPage doc/build/man/khal.1
+
+    # .desktop file
+    install -Dm755 misc/khal.desktop -t $out/share/applications
+  '';
+
+  doCheck = !stdenv.isAarch64;
+
+  LC_ALL = "en_US.UTF-8";
+
+  disabledTests = [
+    # timing based
+    "test_etag"
+    "test_bogota"
+    "test_event_no_dst"
+  ];
+
+  meta = with lib; {
+    description = "CLI calendar application";
+    homepage = "http://lostpackets.de/khal/";
+    changelog = "https://github.com/pimutils/khal/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/khard/default.nix b/nixpkgs/pkgs/applications/misc/khard/default.nix
new file mode 100644
index 000000000000..6bd9b2089f18
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/khard/default.nix
@@ -0,0 +1,49 @@
+{ lib, python3, fetchPypi, khard, testers }:
+
+python3.pkgs.buildPythonApplication rec {
+  version = "0.19.1";
+  pname = "khard";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-WfMKDaPD2j6wT02+GO5HY5E7aF2Z7IQY/VdKiMSRxJA=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools-scm
+    sphinxHook
+    sphinx-autoapi
+    sphinx-autodoc-typehints
+  ];
+
+  sphinxBuilders = [ "man" ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    atomicwrites
+    configobj
+    ruamel-yaml
+    unidecode
+    vobject
+  ];
+
+  postInstall = ''
+    install -D misc/zsh/_khard $out/share/zsh/site-functions/_khard
+  '';
+
+  preCheck = ''
+    # see https://github.com/scheibler/khard/issues/263
+    export COLUMNS=80
+  '';
+
+  pythonImportsCheck = [ "khard" ];
+
+  passthru.tests.version = testers.testVersion { package = khard; };
+
+  meta = {
+    homepage = "https://github.com/scheibler/khard";
+    description = "Console carddav client";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ matthiasbeyer ];
+    mainProgram = "khard";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kickoff/default.nix b/nixpkgs/pkgs/applications/misc/kickoff/default.nix
new file mode 100644
index 000000000000..21018f509b1c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kickoff/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, fontconfig
+, pkg-config
+, wayland
+, libxkbcommon
+, makeWrapper
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kickoff";
+  version = "0.7.2";
+
+  src = fetchFromGitHub {
+    owner = "j0ru";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-WUDbb/GLABhqE93O6bm19Y+r0kSMEJrvduw68Igub44=";
+  };
+
+  cargoHash = "sha256-nhUC9PSKAbNEK5e4WRx3dgYI0rJP5XSWcW6M5E0Ihv4=";
+
+  libPath = lib.makeLibraryPath [
+    wayland
+    libxkbcommon
+  ];
+
+  buildInputs = [ fontconfig libxkbcommon ];
+  nativeBuildInputs = [ makeWrapper pkg-config ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/kickoff" --prefix LD_LIBRARY_PATH : "${libPath}"
+  '';
+
+  meta = with lib; {
+    description = "Minimalistic program launcher";
+    homepage = "https://github.com/j0ru/kickoff";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ pyxels ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kile-wl/Cargo.lock b/nixpkgs/pkgs/applications/misc/kile-wl/Cargo.lock
new file mode 100644
index 000000000000..0ce38b840817
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kile-wl/Cargo.lock
@@ -0,0 +1,295 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[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 = "dlib"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "kile"
+version = "0.1.0"
+dependencies = [
+ "kilexpr",
+ "wayland-client",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "kilexpr"
+version = "0.1.0"
+source = "git+https://gitlab.com/snakedye/kilexpr#d7b58f2c9fd771b175d410c0b7f870f647a4fbbb"
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "libloading"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d580318f95776505201b28cf98eb1fa5e4be3b689633ba6a3e6cd880ff22d8cb"
+dependencies = [
+ "cfg-if",
+ "windows-sys",
+]
+
+[[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.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[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",
+ "static_assertions",
+]
+
+[[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 = "quick-xml"
+version = "0.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "smallvec"
+version = "1.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
+
+[[package]]
+name = "wayland-backend"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41b48e27457e8da3b2260ac60d0a94512f5cba36448679f3747c0865b7893ed8"
+dependencies = [
+ "cc",
+ "downcast-rs",
+ "io-lifetimes",
+ "nix",
+ "scoped-tls",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-client"
+version = "0.30.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "489c9654770f674fc7e266b3c579f4053d7551df0ceb392f153adb1f9ed06ac8"
+dependencies = [
+ "bitflags",
+ "nix",
+ "wayland-backend",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9b873b257fbc32ec909c0eb80dea312076a67014e65e245f5eb69a6b8ab330e"
+dependencies = [
+ "proc-macro2",
+ "quick-xml",
+ "quote",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06"
+dependencies = [
+ "dlib",
+ "log",
+ "pkg-config",
+]
+
+[[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",
+ "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.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[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.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[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.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[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.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
diff --git a/nixpkgs/pkgs/applications/misc/kile-wl/default.nix b/nixpkgs/pkgs/applications/misc/kile-wl/default.nix
new file mode 100644
index 000000000000..842499f845a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kile-wl/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitLab, unstableGitUpdater, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kile-wl";
+  version = "unstable-2023-07-23";
+
+  src = fetchFromGitLab {
+    owner = "snakedye";
+    repo = "kile";
+    rev = "c24208761d04e0a74d203fc1dcd2f7fed68da388";
+    sha256 = "sha256-4iclNVd7nm6LkgvsHwWaWyi1bZL/A+bbT5OSXn70bLs=";
+  };
+
+  passthru.updateScript = unstableGitUpdater {
+    url = "https://gitlab.com/snakedye/kile.git";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "kilexpr-0.1.0" = "sha256-Bw6vYtzhheAJ8NLQtr3gLjZ9/5ajuABURRYDnVF9W1Y=";
+    };
+  };
+
+  meta = with lib; {
+    description = "A tiling layout generator for river";
+    homepage = "https://gitlab.com/snakedye/kile";
+    license = licenses.mit;
+    platforms = platforms.linux; # It's meant for river, a wayland compositor
+    maintainers = with maintainers; [ moni ];
+    mainProgram = "kile";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kiln/default.nix b/nixpkgs/pkgs/applications/misc/kiln/default.nix
new file mode 100644
index 000000000000..cafa43fa4f8c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kiln/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromSourcehut, scdoc, installShellFiles }:
+
+buildGoModule rec {
+  pname = "kiln";
+  version = "0.4.0";
+
+  src = fetchFromSourcehut {
+    owner = "~adnano";
+    repo = "kiln";
+    rev = version;
+    hash = "sha256-BMYySYbV4Exl0gCUt+95FnOoIhKM1UO4cw8gCw3Zf9M=";
+  };
+
+  nativeBuildInputs = [ scdoc installShellFiles ];
+
+  vendorHash = "sha256-C1ueL/zmPzFbpNo5BF56/t74nwCUvb2Vu1exssPqOPE=";
+
+  postInstall = ''
+    scdoc < docs/kiln.1.scd > docs/kiln.1
+    installManPage docs/kiln.1
+  '';
+
+  meta = with lib; {
+    description = "A simple static site generator for Gemini";
+    homepage = "https://kiln.adnano.co/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    mainProgram = "kiln";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kiwix/default.nix b/nixpkgs/pkgs/applications/misc/kiwix/default.nix
new file mode 100644
index 000000000000..46157febbd08
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kiwix/default.nix
@@ -0,0 +1,47 @@
+{ lib, mkDerivation, fetchFromGitHub
+, libkiwix
+, pkg-config
+, qmake
+, qtbase
+, qtwebengine
+, qtsvg
+, qtimageformats
+, aria2
+}:
+
+mkDerivation {
+  pname = "kiwix";
+  version = "2.3.1-unstable-2024-02-20";
+
+  src = fetchFromGitHub {
+    owner = "kiwix";
+    repo = "kiwix-desktop";
+    rev = "17ac566b07814aefb1decf108e4ba6d7ad9ef7bc";
+    hash = "sha256-BZzFnQE8/dyZkpY0X3zZ6yC6yLZ002Q/RoDzEhSOa/g=";
+  };
+
+  nativeBuildInputs = [
+    qmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    libkiwix
+    qtbase
+    qtwebengine
+    qtsvg
+    qtimageformats
+  ];
+
+  qtWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ aria2 ]}"
+  ];
+
+  meta = with lib; {
+    description = "An offline reader for Web content";
+    homepage = "https://kiwix.org";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ajs124 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kiwix/lib.nix b/nixpkgs/pkgs/applications/misc/kiwix/lib.nix
new file mode 100644
index 000000000000..0fb33b6b0a9b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kiwix/lib.nix
@@ -0,0 +1,63 @@
+{ lib, stdenv, fetchFromGitHub
+, meson, ninja, pkg-config
+, python3
+, curl
+, icu
+, libzim
+, pugixml
+, zlib
+, libmicrohttpd
+, mustache-hpp
+, gtest
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "libkiwix";
+  version = "13.1.0";
+
+  src = fetchFromGitHub {
+    owner = "kiwix";
+    repo = "libkiwix";
+    rev = finalAttrs.version;
+    hash = "sha256-DKOwzfGyad/3diOaV1K8hXqT8YGfqCP6QDKDkxWu/1U=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    python3
+  ];
+
+  buildInputs = [
+    icu
+    zlib
+    mustache-hpp
+  ];
+
+  propagatedBuildInputs = [
+    curl
+    libmicrohttpd
+    libzim
+    pugixml
+  ];
+
+  nativeCheckInputs = [
+    gtest
+  ];
+
+  doCheck = true;
+
+  postPatch = ''
+    patchShebangs scripts
+  '';
+
+  meta = with lib; {
+    description = "Common code base for all Kiwix ports";
+    homepage = "https://kiwix.org";
+    changelog = "https://github.com/kiwix/libkiwix/releases/tag/${finalAttrs.version}";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ colinsane ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/kiwix/tools.nix b/nixpkgs/pkgs/applications/misc/kiwix/tools.nix
new file mode 100644
index 000000000000..979ce433fb4b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kiwix/tools.nix
@@ -0,0 +1,44 @@
+{ lib
+, fetchFromGitHub
+, gitUpdater
+, icu
+, libkiwix
+, meson
+, ninja
+, pkg-config
+, stdenv
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "kiwix-tools";
+  version = "3.6.0";
+
+  src = fetchFromGitHub {
+    owner = "kiwix";
+    repo = "kiwix-tools";
+    rev = finalAttrs.version;
+    hash = "sha256-+th86lMAuCcmWj06yQoZ1L7rLZKqNvuTrV+Rra2km44=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    icu
+    libkiwix
+  ];
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = with lib; {
+    description = "Command line Kiwix tools: kiwix-serve, kiwix-manage, ...";
+    homepage = "https://kiwix.org";
+    changelog = "https://github.com/kiwix/kiwix-tools/releases/tag/${finalAttrs.version}";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ colinsane ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/kjv/default.nix b/nixpkgs/pkgs/applications/misc/kjv/default.nix
new file mode 100644
index 000000000000..dca694bf2979
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kjv/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, readline }:
+
+let
+  patchPrefix = "https://web.archive.org/web/20220422205751/https://github.com/samuelgrf/kjv/commit/";
+
+  add-apocrypha = fetchpatch {
+    url = patchPrefix + "0856fa0d37b45de0d6b47d163b5ea9a0b7f2c061.patch";
+    sha256 = "1jkajdg4wvpbbwc5mn37i4c8nfis4z0pv5rl7gqs0laj0gpj7jn8";
+  };
+
+  add-install-target = fetchpatch {
+    url = patchPrefix + "50a83256ee45430fb06b7aea1945dd91c6813bc3.patch";
+    sha256 = "0bv9yma67jdj496a6vn6y007c9gwjpg3rzld1i9m9y9xmlzq4yzv";
+  };
+in
+
+stdenv.mkDerivation {
+  pname = "kjv";
+  version = "unstable-2021-03-11";
+
+  src = fetchFromGitHub {
+    owner = "bontibon";
+    repo = "kjv";
+    rev = "108595dcbb9bb12d40e0309f029b6fb3ccd81309";
+    hash = "sha256-Z6myd9Xn23pYizG+IZVDrP988pYU06QIcpqXtWTcPiw=";
+  };
+
+  patches = [ add-apocrypha add-install-target ];
+
+  buildInputs = [ readline ];
+
+  makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "The Bible, King James Version";
+    homepage = "https://github.com/bontibon/kjv";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ jtobin cafkafk ];
+    mainProgram = "kjv";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kjv/lukesmithxyz-kjv.nix b/nixpkgs/pkgs/applications/misc/kjv/lukesmithxyz-kjv.nix
new file mode 100644
index 000000000000..7cec6c592235
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kjv/lukesmithxyz-kjv.nix
@@ -0,0 +1,29 @@
+{ lib
+, gawk
+, stdenv
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lukesmithxyz-bible-kjv";
+  version = "unstable-2022-06-01";
+
+  src = fetchFromGitHub {
+    owner = "lukesmithxyz";
+    repo = "kjv";
+    rev = "1b675c0396806a2a3d134c51fd11d9fed8ea3dc5";
+    hash = "sha256-ii5SGZmO99VYbKdebfEbN3rL7LLSSQ0jm5mGqX2G3o0=";
+  };
+
+  buildInputs = [ gawk ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Read the Word of God from your terminal + Apocrypha";
+    homepage = "https://lukesmith.xyz/articles/command-line-bibles";
+    license = licenses.unlicense;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.wesleyjrz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/klayout/default.nix b/nixpkgs/pkgs/applications/misc/klayout/default.nix
new file mode 100644
index 000000000000..a119dc6633f2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/klayout/default.nix
@@ -0,0 +1,68 @@
+{ lib, mkDerivation, fetchFromGitHub
+, python3, ruby, qtbase, qtmultimedia, qttools, qtxmlpatterns
+, which, perl
+}:
+
+mkDerivation rec {
+  pname = "klayout";
+  version = "0.28.12";
+
+  src = fetchFromGitHub {
+    owner = "KLayout";
+    repo = "klayout";
+    rev = "v${version}";
+    hash = "sha256-QvEoXKJ9sH5WIarYPsYEWwoFwA/pZa2etegA+AD8rPo=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/klayout.pri --replace "-Wno-reserved-user-defined-literal" ""
+    patchShebangs .
+  '';
+
+  nativeBuildInputs = [
+    which
+    perl
+    python3
+    ruby
+  ];
+
+  buildInputs = [
+    qtbase
+    qtmultimedia
+    qttools
+    qtxmlpatterns
+  ];
+
+  buildPhase = ''
+    runHook preBuild
+    mkdir -p $out/lib
+    ./build.sh -qt5 -prefix $out/lib -option -j$NIX_BUILD_CORES
+    runHook postBuild
+  '';
+
+  postBuild = ''
+    mkdir $out/bin
+    mv $out/lib/klayout $out/bin/
+
+    install -Dm444 etc/klayout.desktop -t $out/share/applications
+    install -Dm444 etc/logo.png $out/share/icons/hicolor/256x256/apps/klayout.png
+  '';
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-Wno-parentheses" ];
+
+  dontInstall = true; # Installation already happens as part of "build.sh"
+
+  # Fix: "gsiDeclQMessageLogger.cc:126:42: error: format not a string literal
+  # and no format arguments [-Werror=format-security]"
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "High performance layout viewer and editor with support for GDS and OASIS";
+    license = with licenses; [ gpl2Plus ];
+    homepage = "https://www.klayout.de/";
+    changelog = "https://www.klayout.de/development.html#${version}";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ knedlsepp ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/klipper-estimator/default.nix b/nixpkgs/pkgs/applications/misc/klipper-estimator/default.nix
new file mode 100644
index 000000000000..baecf249a6b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/klipper-estimator/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, fetchFromGitHub
+, stdenv
+, rustPlatform
+, pkg-config
+, openssl
+, libgit2
+, Security
+, SystemConfiguration
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "klipper-estimator";
+  version = "3.6.0";
+
+  src = fetchFromGitHub {
+    owner = "Annex-Engineering";
+    repo = "klipper_estimator";
+    rev = "v${version}";
+    hash = "sha256-1Od4sIHrg52DezV5DCg2NVv/2nbXQW3fK6f9aqVmlTk=";
+  };
+
+  cargoHash = "sha256-5O2KUTegK5ArTalJ57/Kn9lzlkmAIXnzluljvfrIc5U=";
+
+  buildInputs =
+    [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ libgit2 Security SystemConfiguration ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  meta = with lib; {
+    description = "Tool for determining the time a print will take using the Klipper firmware";
+    homepage = "https://github.com/Annex-Engineering/klipper_estimator";
+    changelog = "https://github.com/Annex-Engineering/klipper_estimator/releases/tag/v${version}";
+    mainProgram = "klipper_estimator";
+    license = licenses.mit;
+    maintainers = with maintainers; [ tmarkus ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/klipperscreen/default.nix b/nixpkgs/pkgs/applications/misc/klipperscreen/default.nix
new file mode 100644
index 000000000000..8589991ff522
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/klipperscreen/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, python3
+, fetchFromGitHub
+, wrapGAppsHook
+, gobject-introspection
+, gitUpdater
+}: python3.pkgs.buildPythonApplication rec {
+  pname = "KlipperScreen";
+  version = "0.3.2";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "jordanruthe";
+    repo = "KlipperScreen";
+    rev = "v${version}";
+    hash = "sha256-LweO5EVWr3OxziHrjtQDdWyUBCVUJ17afkw7RCZWgcg=";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  pythonPath = with python3.pkgs; [
+    jinja2
+    netifaces
+    requests
+    websocket-client
+    pycairo
+    pygobject3
+    mpv
+    six
+    dbus-python
+  ];
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    mkdir -p $out/bin
+    cp -r . $out/dist
+    gappsWrapperArgs+=(--set PYTHONPATH "$PYTHONPATH")
+    wrapGApp $out/dist/screen.py
+    ln -s $out/dist/screen.py $out/bin/KlipperScreen
+  '';
+
+  passthru.updateScript = gitUpdater { url = meta.homepage; };
+
+  meta = with lib; {
+    description = "Touchscreen GUI for the Klipper 3D printer firmware";
+    homepage = "https://github.com/jordanruthe/KlipperScreen";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ cab404 ];
+    mainProgram = "KlipperScreen";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kondo/default.nix b/nixpkgs/pkgs/applications/misc/kondo/default.nix
new file mode 100644
index 000000000000..eba5799a9172
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kondo/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kondo";
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    owner = "tbillington";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-OqOmOujnyLTqwzNvLWudQi+xa5v37JTtyUXaItnpnfs=";
+  };
+
+  cargoHash = "sha256-WF4GHj/5VYrTUh1E3t29zbpSLjJ6g7RWVpLYqg9msZg=";
+
+  meta = with lib; {
+    description = "Save disk space by cleaning unneeded files from software projects";
+    homepage = "https://github.com/tbillington/kondo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne ];
+    mainProgram = "kondo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/konsave/default.nix b/nixpkgs/pkgs/applications/misc/konsave/default.nix
new file mode 100644
index 000000000000..75950d28e232
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/konsave/default.nix
@@ -0,0 +1,27 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "konsave";
+  version = "2.2.0";
+
+  src = fetchPypi {
+    inherit version;
+    pname = "Konsave";
+    hash = "sha256-tWarqT2jFgCuSsa2NwMHRaR3/wj0khiRHidvRNMwM8M=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ setuptools-scm ];
+  propagatedBuildInputs = with python3Packages; [ pyyaml setuptools ];
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  meta = with lib; {
+    description = "Save Linux Customization";
+    maintainers = with maintainers; [ MoritzBoehme ];
+    homepage = "https://github.com/Prayag2/konsave";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kord/Cargo.lock b/nixpkgs/pkgs/applications/misc/kord/Cargo.lock
new file mode 100644
index 000000000000..1d2a4d61c140
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kord/Cargo.lock
@@ -0,0 +1,3574 @@
+# 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 = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cipher",
+ "cpufeatures",
+ "opaque-debug",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "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 = "alsa"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8512c9117059663fb5606788fbca3619e2a91dac0e3fe516242eab1fa6be5e44"
+dependencies = [
+ "alsa-sys",
+ "bitflags",
+ "libc",
+ "nix",
+]
+
+[[package]]
+name = "alsa-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[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.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
+
+[[package]]
+name = "arc-swap"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "async-trait"
+version = "0.1.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bincode"
+version = "2.0.0-rc.2"
+source = "git+https://github.com/bincode-org/bincode.git#6791311a98b059a540da2ef70fdafb41a7f54760"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "bindgen"
+version = "0.61.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a022e58a142a46fea340d68012b9201c094e93ec3d033a944a24f8fd4a4f09a"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn",
+]
+
+[[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.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[package]]
+name = "burn"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f762ffa48b53a7d69c3bc7e6e1792d30e1d73de10da0beb025029a6d2f6578f"
+dependencies = [
+ "burn-core",
+ "burn-train",
+]
+
+[[package]]
+name = "burn-autodiff"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25759a31cfa871e13b4f17e0319248a5b124b7f5bc4962d98add09f8920cbff9"
+dependencies = [
+ "burn-common",
+ "burn-tensor",
+ "burn-tensor-testgen",
+ "derive-new",
+ "spin 0.9.6",
+]
+
+[[package]]
+name = "burn-common"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830988a0a0c407a272561f28001ab0794efe4ee75c00f3fc2c6f5f2711474a95"
+dependencies = [
+ "const-random",
+ "rand",
+ "spin 0.9.6",
+ "uuid",
+]
+
+[[package]]
+name = "burn-core"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2ab774b18a51fcf1f7d0ac6c8b6288bff6406ebae9094e2e524f8aa904164b1"
+dependencies = [
+ "burn-autodiff",
+ "burn-common",
+ "burn-dataset",
+ "burn-derive",
+ "burn-tensor",
+ "derive-new",
+ "flate2",
+ "hashbrown 0.13.2",
+ "libm",
+ "log",
+ "rand",
+ "serde",
+ "serde_json",
+ "spin 0.9.6",
+]
+
+[[package]]
+name = "burn-dataset"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7234387b1641027a33c8ceaef413724080844f479b1adc44ed7c7990ee52d763"
+dependencies = [
+ "dirs",
+ "rand",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
+[[package]]
+name = "burn-derive"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a79a50ec2c580c4734ca55a60142d15025e5244fb5cf3d19c70c23ce258d6599"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "burn-ndarray"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9bdd1946c0206f140bcb6ec598c572a518b7a8ed6406ed7131f3245d3f3c93b"
+dependencies = [
+ "burn-autodiff",
+ "burn-common",
+ "burn-tensor",
+ "derive-new",
+ "libm",
+ "matrixmultiply",
+ "ndarray",
+ "num-traits",
+ "rand",
+ "rayon",
+ "spin 0.9.6",
+]
+
+[[package]]
+name = "burn-tch"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc55e3db566a818c4c111d0b28d7e09e9673d9790efa731392d44d1e8f24158d"
+dependencies = [
+ "burn-tensor",
+ "half",
+ "libc",
+ "rand",
+ "tch",
+]
+
+[[package]]
+name = "burn-tensor"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "714397a86811e1aaf534f420c3af1fd908026fd8be99870b28b7e78037ddaf7e"
+dependencies = [
+ "burn-tensor-testgen",
+ "derive-new",
+ "half",
+ "hashbrown 0.13.2",
+ "libm",
+ "num-traits",
+ "rand",
+ "rand_distr",
+ "serde",
+]
+
+[[package]]
+name = "burn-tensor-testgen"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349751c86a0f936db064f5a5d567174a880927bd41846899501d96ece319ba25"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "burn-train"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b72ff7a3b4af6ea75db2bcb1b184a7a21e6df1d3e7d1dc0ba1dd39b21612778"
+dependencies = [
+ "burn-core",
+ "derive-new",
+ "indicatif",
+ "log",
+ "log4rs",
+ "nvml-wrapper",
+ "rgb",
+ "serde",
+ "terminal_size",
+ "textplots",
+]
+
+[[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 = "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 = "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 7.1.3",
+]
+
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "chrono"
+version = "0.4.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+dependencies = [
+ "iana-time-zone",
+ "js-sys",
+ "num-integer",
+ "num-traits",
+ "time 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a"
+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",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clap"
+version = "4.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5"
+dependencies = [
+ "bitflags",
+ "clap_derive",
+ "clap_lex",
+ "is-terminal",
+ "once_cell",
+ "strsim 0.10.0",
+ "termcolor",
+]
+
+[[package]]
+name = "clap_derive"
+version = "4.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c"
+dependencies = [
+ "cc",
+]
+
+[[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 = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "colored"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[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 = "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.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e"
+dependencies = [
+ "const-random-macro",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb"
+dependencies = [
+ "getrandom",
+ "once_cell",
+ "proc-macro-hack",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys 0.8.3",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags",
+ "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",
+ "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 = "coreaudio-rs"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb17e2d1795b1996419648915df94bc7103c28f7b48062d7acf4652fc371b2ff"
+dependencies = [
+ "bitflags",
+ "core-foundation-sys 0.6.2",
+ "coreaudio-sys",
+]
+
+[[package]]
+name = "coreaudio-sys"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a9444b94b8024feecc29e01a9706c69c1e26bfee480221c90764200cfd778fb"
+dependencies = [
+ "bindgen",
+]
+
+[[package]]
+name = "cpal"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d34fa7b20adf588f73f094cd9b1d944977c686e37a2759ea217ab174f017e10a"
+dependencies = [
+ "alsa",
+ "core-foundation-sys 0.8.3",
+ "coreaudio-rs",
+ "dasp_sample",
+ "jni 0.19.0",
+ "js-sys",
+ "libc",
+ "mach",
+ "ndk",
+ "ndk-context",
+ "oboe",
+ "once_cell",
+ "parking_lot",
+ "thiserror",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "windows",
+]
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+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 = "crossbeam-channel"
+version = "0.5.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c"
+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.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+dependencies = [
+ "autocfg",
+ "cfg-if 1.0.0",
+ "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 1.0.0",
+]
+
+[[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",
+ "typenum",
+]
+
+[[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.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "darling"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d706e75d87e35569db781a9b5e2416cff1236a47ed380831f959382ccd5f858"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0c960ae2da4de88a91b2d920c2a7233b400bc33cb28453a2987822d8392519b"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim 0.9.3",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "dasp_sample"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f"
+
+[[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 = "derive-new"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "destructure_traitobject"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c877555693c14d2f84191cfd3ad8582790fc52b5e2274b40b59cf5f5cea25c7"
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+dependencies = [
+ "block-buffer",
+ "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 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",
+]
+
+[[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 = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "drawille"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64e461c3f1e69d99372620640b3fd5f0309eeda2e26e4af69f6760c0e1df845"
+dependencies = [
+ "colored",
+ "fnv",
+]
+
+[[package]]
+name = "dwrote"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "winapi",
+ "wio",
+]
+
+[[package]]
+name = "either"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+
+[[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 = "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-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[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",
+ "byteorder",
+ "core-foundation",
+ "core-graphics",
+ "core-text",
+ "dirs-next",
+ "dwrote",
+ "float-ord",
+ "freetype",
+ "lazy_static",
+ "libc",
+ "log",
+ "pathfinder_geometry",
+ "pathfinder_simd",
+ "walkdir",
+ "winapi",
+ "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.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[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 = "futures"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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-timer"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
+
+[[package]]
+name = "futures-util"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[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 = "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 = "half"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
+dependencies = [
+ "crunchy",
+ "num-traits",
+]
+
+[[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",
+ "serde",
+]
+
+[[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.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 = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[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 0.8.3",
+ "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 = "ident_case"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
+
+[[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 = "image"
+version = "0.24.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "jpeg-decoder",
+ "num-rational",
+ "num-traits",
+ "png",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[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 = "io-lifetimes"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[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"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
+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 = "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.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "kord"
+version = "0.6.1"
+dependencies = [
+ "anyhow",
+ "async-trait",
+ "bincode",
+ "burn",
+ "burn-autodiff",
+ "burn-ndarray",
+ "burn-tch",
+ "byteorder",
+ "clap 4.1.8",
+ "console_error_panic_hook",
+ "cpal",
+ "futures",
+ "futures-timer",
+ "gloo-timers",
+ "js-sys",
+ "once_cell",
+ "parse_duration0",
+ "paste",
+ "pest",
+ "pest_derive",
+ "plotters",
+ "pretty_assertions",
+ "rand",
+ "rayon",
+ "rodio",
+ "rustfft",
+ "serde",
+ "symphonia",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wee_alloc",
+]
+
+[[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.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+
+[[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",
+]
+
+[[package]]
+name = "libm"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[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.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[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 1.0.0",
+ "serde",
+]
+
+[[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.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d36ca1786d9e79b8193a68d480a0907b612f109537115c6ff655a3a1967533fd"
+dependencies = [
+ "anyhow",
+ "arc-swap",
+ "chrono",
+ "derivative",
+ "fnv",
+ "humantime",
+ "libc",
+ "log",
+ "log-mdc",
+ "parking_lot",
+ "serde",
+ "serde-value",
+ "serde_json",
+ "serde_yaml",
+ "thiserror",
+ "thread-id",
+ "typemap-ors",
+ "winapi",
+]
+
+[[package]]
+name = "mach"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "matrixmultiply"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84"
+dependencies = [
+ "num_cpus",
+ "once_cell",
+ "rawpointer",
+ "thread-tree",
+]
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memoffset"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "memory_units"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
+
+[[package]]
+name = "meval"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f79496a5651c8d57cd033c5add8ca7ee4e3d5f7587a4777484640d9cb60392d9"
+dependencies = [
+ "fnv",
+ "nom 1.2.4",
+]
+
+[[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 = "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",
+ "rayon",
+]
+
+[[package]]
+name = "ndk"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
+dependencies = [
+ "bitflags",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "raw-window-handle",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-sys"
+version = "0.4.1+23.1.7779620"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+]
+
+[[package]]
+name = "nom"
+version = "1.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5b8c256fd9471521bcb84c3cdba98921497f1a331cbc15b8030fc63b82050ce"
+
+[[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-complex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d"
+dependencies = [
+ "num-traits",
+]
+
+[[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",
+]
+
+[[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-rational"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-integer",
+ "num-traits",
+]
+
+[[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.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+dependencies = [
+ "hermit-abi 0.2.6",
+ "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",
+]
+
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
+[[package]]
+name = "nvml-wrapper"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "288bd66a5a56d8c97b178412b328419b3fdec261c0cbc4628ddc49cc16db8fc6"
+dependencies = [
+ "bitflags",
+ "libloading",
+ "nvml-wrapper-sys",
+ "static_assertions",
+ "thiserror",
+ "wrapcenum-derive",
+]
+
+[[package]]
+name = "nvml-wrapper-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3d606d4edf766969f16828ec047ca9aa96652a17bd353dc0613bfaca49b61d6"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "oboe"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0"
+dependencies = [
+ "jni 0.20.0",
+ "ndk",
+ "ndk-context",
+ "num-derive",
+ "num-traits",
+ "oboe-sys",
+]
+
+[[package]]
+name = "oboe-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f44155e7fb718d3cfddcf70690b2b51ac4412f347cd9e4fbe511abe9cd7b5f2"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[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 = "os_str_bytes"
+version = "6.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee"
+
+[[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_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.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "parse_duration0"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "341129a5f9fb040851e7c025e201184070b85627989d63707c93b65952001882"
+dependencies = [
+ "lazy_static",
+ "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",
+ "subtle",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
+
+[[package]]
+name = "pathfinder_geometry"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3"
+dependencies = [
+ "log",
+ "pathfinder_simd",
+]
+
+[[package]]
+name = "pathfinder_simd"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39fe46acc5503595e5949c17b818714d26fdf9b4920eacf3b2947f0199f4a6ff"
+dependencies = [
+ "rustc_version",
+]
+
+[[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 = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
+[[package]]
+name = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pest"
+version = "2.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7"
+dependencies = [
+ "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",
+]
+
+[[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 = "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 = "plotters"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
+dependencies = [
+ "chrono",
+ "font-kit",
+ "image",
+ "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",
+ "image",
+ "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 = "png"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "0.3.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b"
+
+[[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.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755"
+dependencies = [
+ "ctor",
+ "diff",
+ "output_vt100",
+ "yansi",
+]
+
+[[package]]
+name = "primal-check"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9df7f93fd637f083201473dab4fee2db4c429d32e55e3299980ab3957ab916a0"
+dependencies = [
+ "num-integer",
+]
+
+[[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",
+ "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.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+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 = "rand_distr"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
+dependencies = [
+ "num-traits",
+ "rand",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f851a03551ceefd30132e447f07f96cb7011d6b658374f3aed847333adb5559"
+
+[[package]]
+name = "rawpointer"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
+
+[[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",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[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",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "rodio"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bdf1d4dea18dff2e9eb6dca123724f8b60ef44ad74a9ad283cdfe025df7e73fa"
+dependencies = [
+ "cpal",
+ "symphonia",
+]
+
+[[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.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustfft"
+version = "6.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e17d4f6cbdb180c9f4b2a26bbf01c4e647f1e1dea22fe8eb9db54198b32f9434"
+dependencies = [
+ "num-complex",
+ "num-integer",
+ "num-traits",
+ "primal-check",
+ "strength_reduce",
+ "transpose",
+ "version_check",
+]
+
+[[package]]
+name = "rustix"
+version = "0.36.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.45.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 = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[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 = "scratch"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
+name = "sct"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+dependencies = [
+ "semver-parser",
+]
+
+[[package]]
+name = "semver-parser"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.155"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8"
+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",
+ "serde",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.155"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_yaml"
+version = "0.8.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "578a7433b776b56a35785ed5ce9a7e777ac0598aac5a6dd1b4b18a307c7fc71b"
+dependencies = [
+ "indexmap",
+ "ryu",
+ "serde",
+ "yaml-rust",
+]
+
+[[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.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+dependencies = [
+ "cfg-if 1.0.0",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[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 = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5d6e0250b93c8427a177b849d144a96d5acc57006149479403d7861ab721e34"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strength_reduce"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82"
+
+[[package]]
+name = "strsim"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
+
+[[package]]
+name = "strsim"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[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",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "subtle"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+
+[[package]]
+name = "symphonia"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3671dd6f64f4f9d5c87179525054cfc1f60de23ba1f193bd6ceab812737403f1"
+dependencies = [
+ "lazy_static",
+ "symphonia-bundle-flac",
+ "symphonia-bundle-mp3",
+ "symphonia-codec-aac",
+ "symphonia-codec-adpcm",
+ "symphonia-codec-alac",
+ "symphonia-codec-pcm",
+ "symphonia-codec-vorbis",
+ "symphonia-core",
+ "symphonia-format-isomp4",
+ "symphonia-format-mkv",
+ "symphonia-format-ogg",
+ "symphonia-format-wav",
+ "symphonia-metadata",
+]
+
+[[package]]
+name = "symphonia-bundle-flac"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dc2deed3204967871ba60f913378f95820cb47a2fe9b2eef5a9eedb417dfdc8"
+dependencies = [
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+ "symphonia-utils-xiph",
+]
+
+[[package]]
+name = "symphonia-bundle-mp3"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "55a0846e7a2c9a8081ff799fc83a975170417ad2a143f644a77ec2e3e82a2b73"
+dependencies = [
+ "bitflags",
+ "lazy_static",
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+]
+
+[[package]]
+name = "symphonia-codec-aac"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fcdd4a10695ca0528572360ec020586320357350eb62791693667e7de8c871a"
+dependencies = [
+ "lazy_static",
+ "log",
+ "symphonia-core",
+]
+
+[[package]]
+name = "symphonia-codec-adpcm"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a5cfb8d4405e26eb9593157dc45b05e102b8d774b38ed2a95946d6bb9e26e3e"
+dependencies = [
+ "log",
+ "symphonia-core",
+]
+
+[[package]]
+name = "symphonia-codec-alac"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c49e1b209318bcefa7ff452bd85f1f593210943a7d9786b7d4250e8991a7449c"
+dependencies = [
+ "log",
+ "symphonia-core",
+]
+
+[[package]]
+name = "symphonia-codec-pcm"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cb9a9f0b9991cccf3217b74644af412d5d082a4815e5e2943f26e0ecabdf3c9"
+dependencies = [
+ "log",
+ "symphonia-core",
+]
+
+[[package]]
+name = "symphonia-codec-vorbis"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dfed6f7b6bfa21d7cef1acefc8eae5db80df1608a1aca91871b07cbd28d7b74"
+dependencies = [
+ "log",
+ "symphonia-core",
+ "symphonia-utils-xiph",
+]
+
+[[package]]
+name = "symphonia-core"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b9567e2d8a5f866b2f94f5d366d811e0c6826babcff6d37de9e1a6690d38869"
+dependencies = [
+ "arrayvec",
+ "bitflags",
+ "bytemuck",
+ "lazy_static",
+ "log",
+]
+
+[[package]]
+name = "symphonia-format-isomp4"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1818f6f54b4eaba5ec004a8dbcca637c57e617eb1ff4c9addbd3fc065eba437"
+dependencies = [
+ "encoding_rs",
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+ "symphonia-utils-xiph",
+]
+
+[[package]]
+name = "symphonia-format-mkv"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bd22f2def8c8f078495ad66111648bfc7d5222ee33774f2077cb665588f3119"
+dependencies = [
+ "lazy_static",
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+ "symphonia-utils-xiph",
+]
+
+[[package]]
+name = "symphonia-format-ogg"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "474df6e86b871dcb56913130bada1440245f483057c4a2d8a2981455494c4439"
+dependencies = [
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+ "symphonia-utils-xiph",
+]
+
+[[package]]
+name = "symphonia-format-wav"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06679bd5646b3037300f88891dfc8a6e1cc4e1133206cc17a98e5d7c22f88296"
+dependencies = [
+ "log",
+ "symphonia-core",
+ "symphonia-metadata",
+]
+
+[[package]]
+name = "symphonia-metadata"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acd35c263223ef6161000be79b124a75de3e065eea563bf3ef169b3e94c7bb2e"
+dependencies = [
+ "encoding_rs",
+ "lazy_static",
+ "log",
+ "symphonia-core",
+]
+
+[[package]]
+name = "symphonia-utils-xiph"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce340a6c33ac06cb42de01220308ec056e8a2a3d5cc664aaf34567392557136b"
+dependencies = [
+ "symphonia-core",
+ "symphonia-metadata",
+]
+
+[[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 = "tch"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3394fea57e43ef3708196025beb3445dc13998b162f972233f11b9fdf091401"
+dependencies = [
+ "half",
+ "lazy_static",
+ "libc",
+ "ndarray",
+ "rand",
+ "thiserror",
+ "torch-sys",
+ "zip",
+]
+
+[[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.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c9afddd2cec1c0909f06b00ef33f94ab2cc0578c4a610aa208ddfec8aa2b43a"
+dependencies = [
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "textplots"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c771910e9d7e37d50f6d39f5ce4c4351fd797dcaed9a348e911877401af1b799"
+dependencies = [
+ "drawille",
+ "meval",
+ "rgb",
+ "structopt",
+]
+
+[[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.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e"
+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-tree"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffbd370cb847953a25954d9f63e14824a36113f8c72eecf6eccef5dc4b45d630"
+dependencies = [
+ "crossbeam-channel",
+]
+
+[[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.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+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 = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+
+[[package]]
+name = "toml_edit"
+version = "0.19.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08de71aa0d6e348f070457f85af8bd566e2bc452156a423ddf22861b3a953fae"
+dependencies = [
+ "indexmap",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "torch-sys"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ff928d3e632acda675e388d8e0efe526136350620800cc770e3727c9abc6ea1"
+dependencies = [
+ "anyhow",
+ "cc",
+ "libc",
+ "ureq",
+ "zip",
+]
+
+[[package]]
+name = "transpose"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6522d49d03727ffb138ae4cbc1283d3774f0d10aa7f9bf52e6784c45daf9b23"
+dependencies = [
+ "num-integer",
+ "strength_reduce",
+]
+
+[[package]]
+name = "ttf-parser"
+version = "0.15.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b3e06c9b9d80ed6b745c7159c40b311ad2916abb34a49e9be2653b90db0d8dd"
+
+[[package]]
+name = "typemap-ors"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a68c24b707f02dd18f1e4ccceb9d49f2058c2fb86384ef9972592904d7a28867"
+dependencies = [
+ "unsafe-any-ors",
+]
+
+[[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.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+
+[[package]]
+name = "unicode-bidi"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c"
+
+[[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-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 = "unsafe-any-ors"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0a303d30665362d9680d7d91d78b23f5f899504d4f08b3c4cf08d055d87c0ad"
+dependencies = [
+ "destructure_traitobject",
+]
+
+[[package]]
+name = "untrusted"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
+
+[[package]]
+name = "ureq"
+version = "2.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "338b31dd1314f68f3aabf3ed57ab922df95ffcd902476ca7ba3c4ce7b908c46d"
+dependencies = [
+ "base64",
+ "flate2",
+ "log",
+ "once_cell",
+ "rustls",
+ "url",
+ "webpki",
+ "webpki-roots",
+]
+
+[[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 = "uuid"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79"
+
+[[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 = "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.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.84"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+dependencies = [
+ "cfg-if 1.0.0",
+ "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",
+ "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 1.0.0",
+ "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",
+ "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 = "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 = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[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.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
+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",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[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 = "winnow"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee7b2c67f962bf5042bfd8b6a916178df33a26eec343ae064cb8e069f638fa6f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "wio"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "wrapcenum-derive"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6bcc065c85ad2c3bd12aa4118bf164835712e25080c392557801a13292c60aec"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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 = "zip"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef"
+dependencies = [
+ "aes",
+ "byteorder",
+ "bzip2",
+ "constant_time_eq",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "hmac",
+ "pbkdf2",
+ "sha1",
+ "time 0.3.20",
+ "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.7+zstd.1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
diff --git a/nixpkgs/pkgs/applications/misc/kord/default.nix b/nixpkgs/pkgs/applications/misc/kord/default.nix
new file mode 100644
index 000000000000..8283cebb38ab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kord/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, darwin
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, alsa-lib
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "kord";
+  version = "0.6.1";
+
+  # kord depends on nightly features
+  RUSTC_BOOTSTRAP = 1;
+
+  src = fetchFromGitHub {
+    owner = "twitchax";
+    repo = "kord";
+    rev = "v${version}";
+    sha256 = "sha256-CeMh6yB4fGoxtGLbkQe4OMMvBM0jesyP+8JtU5kCP84=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "bincode-2.0.0-rc.2" = "sha256-0BfKKGOi5EVIoF0HvIk0QS2fHUMG3tpsMLe2SkXeZlo=";
+    };
+  };
+
+  nativeBuildInputs = lib.optionals stdenv.isLinux [ pkg-config ]
+    ++ lib.optionals stdenv.isDarwin [ rustPlatform.bindgenHook ];
+
+  buildInputs = lib.optionals stdenv.isLinux [ alsa-lib ]
+    ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.AudioUnit ];
+
+  meta = with lib; {
+    description = "A music theory binary and library for Rust";
+    homepage = "https://github.com/twitchax/kord";
+    maintainers = with maintainers; [ kidsan ];
+    license = with licenses; [ mit ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/koreader/default.nix b/nixpkgs/pkgs/applications/misc/koreader/default.nix
new file mode 100644
index 000000000000..b24ae5d06ad2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/koreader/default.nix
@@ -0,0 +1,73 @@
+{ lib, stdenv
+, fetchurl
+, makeWrapper
+, fetchFromGitHub
+, dpkg
+, glib
+, gnutar
+, gtk3-x11
+, luajit
+, sdcv
+, SDL2 }:
+let
+  luajit_lua52 = luajit.override { enable52Compat = true; };
+in
+stdenv.mkDerivation rec {
+  pname = "koreader";
+  version = "2023.04";
+
+
+  src = if stdenv.isAarch64 then fetchurl {
+    url = "https://github.com/koreader/koreader/releases/download/v${version}/koreader-${version}-arm64.deb";
+    sha256 = "sha256-uuspjno0750hQMIB5HEhbV63wCna2izKOHEGIg/X0bU=";
+  } else fetchurl {
+    url = "https://github.com/koreader/koreader/releases/download/v${version}/koreader-${version}-amd64.deb";
+    sha256 = "sha256-tRUeRB1+UcWT49dchN0YDvd0L5n1YRdtMSFc8yy6m5o=";
+  };
+
+  src_repo = fetchFromGitHub {
+    repo = "koreader";
+    owner = "koreader";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-c3j6hs0W0H2jDg6JVfU6ov7r7kucbqrQqf9PAvYBcJ0=";
+  };
+
+  sourceRoot = ".";
+  nativeBuildInputs = [ makeWrapper dpkg ];
+  buildInputs = [
+    glib
+    gnutar
+    gtk3-x11
+    luajit_lua52
+    sdcv
+    SDL2
+  ];
+  unpackCmd = "dpkg-deb -x ${src} .";
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out
+    cp -R usr/* $out/
+    ln -sf ${luajit_lua52}/bin/luajit $out/lib/koreader/luajit
+    ln -sf ${sdcv}/bin/sdcv $out/lib/koreader/sdcv
+    ln -sf ${gnutar}/bin/tar $out/lib/koreader/tar
+    find ${src_repo}/resources/fonts -type d -execdir cp -r '{}' $out/lib/koreader/fonts \;
+    find $out -xtype l -print -delete
+    wrapProgram $out/bin/koreader --prefix LD_LIBRARY_PATH : ${
+      lib.makeLibraryPath [ gtk3-x11 SDL2 glib ]
+    }
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/koreader/koreader";
+    description =
+      "An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    platforms = [ "aarch64-linux" "x86_64-linux" ];
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ contrun neonfuz];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/krabby/default.nix b/nixpkgs/pkgs/applications/misc/krabby/default.nix
new file mode 100644
index 000000000000..d006ec00b918
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/krabby/default.nix
@@ -0,0 +1,24 @@
+{ lib
+, rustPlatform
+, fetchCrate
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "krabby";
+  version = "0.1.8";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-pqLk05hDPMvbrDG3xatAP0licaJszBSujo1fqsEtpRI=";
+  };
+
+  cargoHash = "sha256-/wXfdH9ObKGOw8EXHG/3Gvhm66v632lpDp/V3zFIzh4=";
+
+  meta = with lib; {
+    description = "Print pokemon sprites in your terminal";
+    homepage = "https://github.com/yannjor/krabby";
+    changelog = "https://github.com/yannjor/krabby/releases/tag/v${version}";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ruby0b ];
+    mainProgram = "krabby";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kratos/default.nix b/nixpkgs/pkgs/applications/misc/kratos/default.nix
new file mode 100644
index 000000000000..d5d12eb44676
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kratos/default.nix
@@ -0,0 +1,43 @@
+{ fetchFromGitHub, buildGoModule, lib, stdenv }:
+
+buildGoModule rec {
+  pname = "kratos";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "ory";
+    repo = "kratos";
+    rev = "v${version}";
+    hash = "sha256-zrII2lpffZkwFauPAilh1QaqRKvpj1mlHZA7in1ljYg=";
+  };
+
+  vendorHash = "sha256-TSB7jCPOVwub+ZQaaUSmsz/R4HAfmnWb0wTf2w4aeuk=";
+
+  subPackages = [ "." ];
+
+  tags = [ "sqlite" ];
+
+  doCheck = false;
+
+  preBuild = ''
+    # Patch shebangs
+    files=(
+       test/e2e/run.sh
+       script/testenv.sh
+       script/test-envs.sh
+       script/debug-entrypoint.sh
+    )
+    patchShebangs "''${files[@]}"
+
+    # patchShebangs doesn't work for this Makefile, do it manually
+    substituteInPlace Makefile --replace '/bin/bash' '${stdenv.shell}'
+  '';
+
+  meta = with lib; {
+    maintainers = with maintainers; [ mrmebelman ];
+    homepage = "https://www.ory.sh/kratos/";
+    license = licenses.asl20;
+    description = "An API-first Identity and User Management system that is built according to cloud architecture best practices";
+    mainProgram = "kratos";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/krename/default.nix b/nixpkgs/pkgs/applications/misc/krename/default.nix
new file mode 100644
index 000000000000..6d575709208e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/krename/default.nix
@@ -0,0 +1,43 @@
+{
+  mkDerivation, fetchurl, fetchpatch, lib,
+  extra-cmake-modules, kdoctools, wrapGAppsHook,
+  kconfig, kinit, kjsembed, taglib, exiv2, podofo,
+  kcrash
+}:
+
+let
+  pname = "krename";
+  version = "5.0.2";
+
+in mkDerivation rec {
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/${pname}/${version}/src/${name}.tar.xz";
+    sha256 = "sha256-sjxgp93Z9ttN1/VaxV/MqKVY+miq+PpcuJ4er2kvI+0=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-build-with-exiv2-0.28.patch";
+      url = "https://invent.kde.org/utilities/krename/-/commit/e7dd767a9a1068ee1fe1502c4d619b57d3b12add.patch";
+      hash = "sha256-JpLVbegRHJbXi/Z99nZt9kgNTetBi+L9GfKv5s3LAZw=";
+    })
+  ];
+
+  buildInputs = [ taglib exiv2 podofo ];
+
+  nativeBuildInputs = [ extra-cmake-modules kdoctools wrapGAppsHook ];
+
+  propagatedBuildInputs = [ kconfig kcrash kinit kjsembed ];
+
+  NIX_LDFLAGS = "-ltag";
+
+  meta = with lib; {
+    description = "A powerful batch renamer for KDE";
+    homepage = "https://kde.org/applications/utilities/krename/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (kconfig.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ksmoothdock/default.nix b/nixpkgs/pkgs/applications/misc/ksmoothdock/default.nix
new file mode 100644
index 000000000000..80c46bd9c16d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ksmoothdock/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, cmake
+, extra-cmake-modules
+, kactivities
+, qtbase
+}:
+
+mkDerivation rec {
+  pname = "KSmoothDock";
+  version = "6.3";
+
+  src = fetchFromGitHub {
+    owner = "dangvd";
+    repo = "ksmoothdock";
+    rev = "v${version}";
+    sha256 = "sha256-hO7xgjFMFrEhQs3oc2peFTjSVEDsl7Ma/TeVybEZMEk=";
+  };
+
+  # Upstream seems dead and there are new deprecation warnings in KF5.100
+  # Remember, kids: friends don't let friends build with -Werror
+  postPatch = ''
+    substituteInPlace src/CMakeLists.txt --replace "-Werror" ""
+  '';
+
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+
+  buildInputs = [ kactivities qtbase ];
+
+  cmakeDir = "../src";
+
+  meta = with lib; {
+    description = "A cool desktop panel for KDE Plasma 5";
+    license = licenses.mit;
+    homepage = "https://dangvd.github.io/ksmoothdock/";
+    maintainers = with maintainers; [ shamilton ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kup/default.nix b/nixpkgs/pkgs/applications/misc/kup/default.nix
new file mode 100644
index 000000000000..3ac622b11ff5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kup/default.nix
@@ -0,0 +1,60 @@
+{ lib,
+  stdenv,
+  fetchFromGitLab,
+  extra-cmake-modules,
+  shared-mime-info,
+  wrapQtAppsHook,
+  kcoreaddons,
+  kdbusaddons,
+  ki18n,
+  kio,
+  solid,
+  kidletime,
+  knotifications,
+  kconfig,
+  kinit,
+  kjobwidgets,
+  plasma-framework,
+  libgit2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "kup";
+  version = "0.9.1";
+
+  src = fetchFromGitLab {
+    domain = "invent.kde.org";
+    repo = pname;
+    owner = "system";
+    rev = "${pname}-${version}";
+    sha256 = "1s180y6vzkxxcjpfdvrm90251rkaf3swzkjwdlpm6m4vnggq0hvs";
+  };
+
+  nativeBuildInputs = [
+    extra-cmake-modules
+    shared-mime-info
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    kcoreaddons
+    kdbusaddons
+    ki18n
+    kio
+    solid
+    kidletime
+    knotifications
+    kconfig
+    kinit
+    kjobwidgets
+    plasma-framework
+    libgit2
+  ];
+
+  meta = with lib; {
+    description = "Backup tool for KDE";
+    homepage = "https://apps.kde.org/kup";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.pwoelfel ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kupfer/default.nix b/nixpkgs/pkgs/applications/misc/kupfer/default.nix
new file mode 100644
index 000000000000..fbb33c7e096f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kupfer/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, fetchurl
+, intltool
+, python3Packages
+, gobject-introspection
+, gtk3
+, itstool
+, libwnck
+, keybinder3
+, desktop-file-utils
+, shared-mime-info
+, wrapGAppsHook
+, wafHook
+, bash
+, dbus
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "kupfer";
+  version = "321";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "https://github.com/kupferlauncher/kupfer/releases/download/v${version}/kupfer-v${version}.tar.bz2";
+    sha256 = "0nagjp63gxkvsgzrpjk78cbqx9a7rbnjivj1avzb2fkhrlxa90c7";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook intltool
+    # For setup hook
+    gobject-introspection wafHook
+    itstool            # for help pages
+    desktop-file-utils # for update-desktop-database
+    shared-mime-info   # for update-mime-info
+    docutils # for rst2man
+    dbus # for detection of dbus-send during build
+  ];
+  buildInputs = [ libwnck keybinder3 bash ];
+  propagatedBuildInputs = [ pygobject3 gtk3 pyxdg dbus-python pycairo ];
+
+  postInstall = ''
+    gappsWrapperArgs+=(
+      "--prefix" "PYTHONPATH" : "${makePythonPath propagatedBuildInputs}"
+      "--set" "PYTHONNOUSERSITE" "1"
+    )
+  '';
+
+  doCheck = false; # no tests
+
+  meta = with lib; {
+    description = "A smart, quick launcher";
+    homepage    = "https://kupferlauncher.github.io/";
+    license     = licenses.gpl3;
+    maintainers = with maintainers; [ cobbal ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kuro/default.nix b/nixpkgs/pkgs/applications/misc/kuro/default.nix
new file mode 100644
index 000000000000..50a773b5c518
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kuro/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, fetchFromGitHub
+, fetchYarnDeps
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+, mkYarnPackage
+, electron
+}:
+
+mkYarnPackage rec {
+  pname = "kuro";
+  version = "9.0.0";
+
+  src = fetchFromGitHub {
+    owner = "davidsmorais";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-9Z/r5T5ZI5aBghHmwiJcft/x/wTRzDlbIupujN2RFfU=";
+  };
+
+  packageJSON = ./package.json;
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-GTiNv7u1QK/wjQgpka7REuoLn2wjZG59kYJQaZZPycI=";
+  };
+
+  ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
+
+  nativeBuildInputs = [
+    makeWrapper
+    copyDesktopItems
+  ];
+
+  postBuild = ''
+    pushd deps/kuro
+
+    yarn --offline run electron-builder \
+      --dir \
+      -c.electronDist=${electron}/libexec/electron \
+      -c.electronVersion=${electron.version}
+
+    popd
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    # resources
+    mkdir -p "$out/share/lib/kuro"
+    cp -r ./deps/kuro/dist/*-unpacked/{locales,resources{,.pak}} "$out/share/lib/kuro"
+
+    # icons
+    install -Dm644 ./deps/kuro/static/Icon.png $out/share/icons/hicolor/1024x1024/apps/kuro.png
+
+    # executable wrapper
+    makeWrapper '${electron}/bin/electron' "$out/bin/kuro" \
+      --add-flags "$out/share/lib/kuro/resources/app.asar" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+      --inherit-argv0
+
+    runHook postInstall
+  '';
+  # Do not attempt generating a tarball for contents again.
+  # note: `doDist = false;` does not work.
+  distPhase = "true";
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = pname;
+      icon = pname;
+      desktopName = "Kuro";
+      genericName = "Microsoft To-Do Client";
+      comment = meta.description;
+      categories = [ "Office" ];
+      startupWMClass = pname;
+    })
+  ];
+
+  meta = with lib; {
+    description = "An unofficial, featureful, open source, community-driven, free Microsoft To-Do app";
+    homepage = "https://github.com/davidsmorais/kuro";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ChaosAttractor ];
+    inherit (electron.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/kuro/package.json b/nixpkgs/pkgs/applications/misc/kuro/package.json
new file mode 100644
index 000000000000..0ae2f22c08db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/kuro/package.json
@@ -0,0 +1,149 @@
+{
+  "name": "kuro",
+  "productName": "Kuro",
+  "version": "9.0.0",
+  "description": "Elegant Microsoft To-Do desktop app (Ao fork)",
+  "license": "MIT",
+  "repository": "davidsmorais/kuro",
+  "author": {
+    "name": "davidsmorais",
+    "email": "david@dsmorais.com",
+    "url": "https://github.com/davidsmorais"
+  },
+  "maintainers": [
+    {
+      "name": "davidsmorais",
+      "email": "david@dsmorais.com",
+      "url": "https://github.com/davidsmorais"
+    }
+  ],
+  "scripts": {
+    "postinstall": "electron-builder install-app-deps",
+    "icons": "electron-icon-maker --input=./static/Icon.png --output=./build/",
+    "test": "xo && stylelint 'src/style/*.css'",
+    "release": "yarn version && rm -rf dist build && yarn icons && electron-builder --publish never",
+    "build-snap": "electron-builder --linux snap",
+    "build-win": "electron-builder --win",
+    "start": "electron ."
+  },
+  "dependencies": {
+    "auto-launch": "^5.0.1",
+    "electron-context-menu": "^3.6.1",
+    "electron-debug": "^1.4.0",
+    "electron-dl": "^2.0.0",
+    "electron-store": "^8.1.0",
+    "lodash": "^4.17.21"
+  },
+  "devDependencies": {
+    "electron": "^22.1.0",
+    "electron-builder": "^23.6.0",
+    "electron-icon-maker": "^0.0.5",
+    "stylelint": "^14.9.1",
+    "xo": "^0.53.1"
+  },
+  "xo": {
+    "envs": [
+      "browser",
+      "node"
+    ],
+    "rules": {
+      "n/prefer-global/process": 0,
+      "unicorn/prefer-module": 0,
+      "unicorn/no-for-loop": 0,
+      "unicorn/no-array-for-each": 0,
+      "import/extensions": 0,
+      "object-curly-spacing": 0,
+      "quote-props": 0,
+      "unicorn/prefer-query-selector": 0,
+      "quotes": [
+        "error",
+        "double"
+      ]
+    },
+    "space": 2
+  },
+  "stylelint": {
+    "rules": {
+      "block-closing-brace-empty-line-before": "never",
+      "block-closing-brace-newline-after": "always",
+      "block-no-empty": true,
+      "block-opening-brace-space-before": "always",
+      "color-hex-case": "upper",
+      "color-hex-length": "long",
+      "color-no-invalid-hex": true,
+      "comment-no-empty": true,
+      "declaration-block-semicolon-space-before": "never",
+      "indentation": 2,
+      "max-empty-lines": 0,
+      "no-duplicate-selectors": true
+    }
+  },
+  "build": {
+    "appId": "com.davidsmorais.kuro",
+    "snap": {
+      "title": "Kuro"
+    },
+    "files": [
+      "**/*",
+      "!media${/*}",
+      "!docs${/*}"
+    ],
+    "win": {
+      "target": [
+        {
+          "target": "nsis",
+          "arch": [
+            "x64"
+          ]
+        }
+      ],
+      "icon": "icons/win/icon.ico",
+      "publish": {
+        "provider": "github",
+        "releaseType": "release"
+      }
+    },
+    "linux": {
+      "category": "Office",
+      "icon": "icons/png",
+      "description": "Kuro is an unofficial, featureful, open source, community-driven, free Microsoft To-Do app, used by people in more than 120 countries. (Ao fork)",
+      "synopsis": "Elegant Microsoft To-Do desktop app (Ao fork)",
+      "publish": {
+        "provider": "github",
+        "releaseType": "release"
+      },
+      "target": [
+        {
+          "target": "AppImage",
+          "arch": [
+            "x64"
+          ]
+        },
+        {
+          "target": "deb",
+          "arch": [
+            "x64"
+          ]
+        },
+        {
+          "target": "pacman",
+          "arch": [
+            "x64"
+          ]
+        },
+        {
+          "target": "rpm",
+          "arch": [
+            "x64"
+          ]
+        },
+        {
+          "target": "snap",
+          "arch": [
+            "x64"
+          ]
+        }
+      ]
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/applications/misc/latte-dock/0001-Disable-autostart.patch b/nixpkgs/pkgs/applications/misc/latte-dock/0001-Disable-autostart.patch
new file mode 100644
index 000000000000..a639b465c92c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/latte-dock/0001-Disable-autostart.patch
@@ -0,0 +1,34 @@
+From ad3f083de2dca2b2c5189430d33a78acfbd9d694 Mon Sep 17 00:00:00 2001
+From: Lana Black <lanablack@amok.cc>
+Date: Wed, 8 Jun 2022 12:42:31 +0000
+Subject: [PATCH] Disable autostart.
+
+---
+ app/settings/universalsettings.cpp | 11 -----------
+ 1 file changed, 11 deletions(-)
+
+diff --git a/app/settings/universalsettings.cpp b/app/settings/universalsettings.cpp
+index c95371db..4efd3ffe 100644
+--- a/app/settings/universalsettings.cpp
++++ b/app/settings/universalsettings.cpp
+@@ -74,17 +74,6 @@ UniversalSettings::~UniversalSettings()
+ 
+ void UniversalSettings::load()
+ {
+-    //! check if user has set the autostart option
+-    bool autostartUserSet = m_universalGroup.readEntry("userConfiguredAutostart", false);
+-
+-    if (!autostartUserSet && !autostart()) {
+-        //! the first time the application is running and autostart is not set, autostart is enabled
+-        //! and from now own it will not be recreated in the beginning
+-
+-        setAutostart(true);
+-        m_universalGroup.writeEntry("userConfiguredAutostart", true);
+-    }
+-
+     //! init screen scales
+     m_screenScalesGroup = m_universalGroup.group("ScreenScales");
+ 
+-- 
+2.36.1
+
diff --git a/nixpkgs/pkgs/applications/misc/latte-dock/default.nix b/nixpkgs/pkgs/applications/misc/latte-dock/default.nix
new file mode 100644
index 000000000000..6562cd7b4a29
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/latte-dock/default.nix
@@ -0,0 +1,40 @@
+{ mkDerivation, lib, cmake, xorg, plasma-framework, plasma-wayland-protocols, fetchFromGitLab
+, extra-cmake-modules, karchive, kwindowsystem, qtx11extras, qtwayland, kcrash, knewstuff
+, wayland, plasma-workspace, plasma-desktop }:
+
+mkDerivation rec {
+  pname = "latte-dock";
+  version = "unstable-2023-03-31";
+
+  src = fetchFromGitLab {
+    domain = "invent.kde.org";
+    owner = "plasma";
+    repo = "latte-dock";
+    rev = "4f93251d8c635c6150483ecb321eb276f34d4280";
+    sha256 = "sha256-oEfKfsVIAmYgQ7+WyBEQfVpI4IndWhYXWBsJE8bNNyI=";
+  };
+
+  buildInputs = [ plasma-framework plasma-wayland-protocols qtwayland xorg.libpthreadstubs xorg.libXdmcp xorg.libSM wayland plasma-workspace plasma-desktop ];
+
+  nativeBuildInputs = [ extra-cmake-modules cmake karchive kwindowsystem
+    qtx11extras kcrash knewstuff ];
+
+  patches = [
+    ./0001-Disable-autostart.patch
+  ];
+
+  postInstall = ''
+    mkdir -p $out/etc/xdg/autostart
+    cp $out/share/applications/org.kde.latte-dock.desktop $out/etc/xdg/autostart
+  '';
+
+  meta = with lib; {
+    description = "Dock-style app launcher based on Plasma frameworks";
+    homepage = "https://invent.kde.org/plasma/latte-dock";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.ysndr ];
+  };
+
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/lavalauncher/default.nix b/nixpkgs/pkgs/applications/misc/lavalauncher/default.nix
new file mode 100644
index 000000000000..d4556402e21b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lavalauncher/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchgit
+, meson
+, ninja
+, pkg-config
+, scdoc
+, wayland-scanner
+, cairo
+, librsvg
+, libxkbcommon
+, wayland
+, wayland-protocols
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lavalauncher";
+  version = "2.1.1";
+
+  src = fetchgit {
+    url = "https://git.sr.ht/~leon_plickat/lavalauncher";
+    rev = "v${version}";
+    sha256 = "hobhZ6s9m2xCdAurdj0EF1BeS88j96133zu+2jb1FMM=";
+  };
+
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-scanner ];
+  buildInputs = [
+    cairo
+    librsvg
+    libxkbcommon
+    wayland
+    wayland-protocols
+  ];
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~leon_plickat/lavalauncher";
+    description = "A simple launcher panel for Wayland desktops";
+    longDescription = ''
+      LavaLauncher is a simple launcher panel for Wayland desktops.
+
+      It displays a dynamically sized bar with user defined buttons. Buttons
+      consist of an image, which is displayed as the button icon on the bar, and
+      at least one shell command, which is executed when the user activates the
+      button.
+
+      Buttons can be activated with pointer and touch events.
+
+      A single LavaLauncher instance can provide multiple such bars, across
+      multiple outputs.
+
+      The Wayland compositor must implement the Layer-Shell and XDG-Output for
+      LavaLauncher to work.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; unix;
+    mainProgram = "lavalauncher";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/leetcode-cli/default.nix b/nixpkgs/pkgs/applications/misc/leetcode-cli/default.nix
new file mode 100644
index 000000000000..0784ff3ddc94
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/leetcode-cli/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, fetchCrate
+, rustPlatform
+, pkg-config
+, installShellFiles
+, openssl
+, dbus
+, sqlite
+, stdenv
+, darwin
+, testers
+, leetcode-cli
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "leetcode-cli";
+  version = "0.4.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-y5zh93WPWSMDXqYangqrxav+sC0b0zpFIp6ZIew6KMo=";
+  };
+
+  cargoHash = "sha256-VktDiLsU+GOsa6ba9JJZGEPTavSKp+aSZm2dfhPEqMs=";
+
+  nativeBuildInputs = [
+    pkg-config
+    installShellFiles
+  ];
+
+  buildInputs = [
+    openssl
+    dbus
+    sqlite
+  ] ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
+
+  postInstall = ''
+    installShellCompletion --cmd leetcode \
+      --bash <($out/bin/leetcode completions bash) \
+      --fish <($out/bin/leetcode completions fish) \
+      --zsh <($out/bin/leetcode completions zsh)
+  '';
+
+  passthru.tests = testers.testVersion {
+    package = leetcode-cli;
+    command = "leetcode -V";
+    version = "leetcode ${version}";
+  };
+
+  meta = with lib; {
+    description = "May the code be with you 👻";
+    longDescription = "Use leetcode.com in command line";
+    homepage = "https://github.com/clearloop/leetcode-cli";
+    license = licenses.mit;
+    maintainers = with maintainers; [ congee ];
+    mainProgram = "leetcode";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lemonade/default.nix b/nixpkgs/pkgs/applications/misc/lemonade/default.nix
new file mode 100644
index 000000000000..c9ca92d364e1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lemonade/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, fetchpatch
+}:
+
+buildGoModule rec {
+  pname = "lemonade";
+  version = "unstable-2021-06-18";
+
+  src = fetchFromGitHub {
+    owner = "lemonade-command";
+    repo = pname;
+    rev = "97ad2f7d63cbe6c696af36a754d399b4be4553bc";
+    sha256 = "sha256-77ymkpO/0DE4+m8fnpXGdnLLFxWMnKu2zsqCpQ3wEPM=";
+  };
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/lemonade-command/lemonade/commit/2b292b0c9d8dc57f73c30a58b3f0f790a953b212.patch";
+      sha256 = "sha256-jUcOfsKu1IYa7arZuAvhuD0vw7JTmhzA/VLxOtAnbmI=";
+    })
+  ];
+
+  vendorHash = "sha256-wjQfTKVNmehu4aU5425gS0YWKj53dosVSTLgdu9KjKc=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Remote utility tool that to copy, paste and open browsers over TCP";
+    homepage = "https://github.com/lemonade-command/lemonade/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "lemonade";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lenmus/default.nix b/nixpkgs/pkgs/applications/misc/lenmus/default.nix
new file mode 100644
index 000000000000..6736f342e89a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lenmus/default.nix
@@ -0,0 +1,99 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, pkg-config
+, makeWrapper
+, boost
+, portmidi
+, sqlite
+, freetype
+, libpng
+, pngpp
+, zlib
+, wxGTK32
+, wxsqlite3
+, fluidsynth
+, fontconfig
+, darwin
+, soundfont-fluid
+, openlilylib-fonts
+}:
+
+let
+  inherit (darwin.apple_sdk.frameworks) Cocoa;
+in
+stdenv.mkDerivation rec {
+  pname = "lenmus";
+  version = "6.0.1";
+
+  src = fetchFromGitHub {
+    owner = "lenmus";
+    repo = "lenmus";
+    rev = "Release_${version}";
+    sha256 = "sha256-qegOAc6vs2+6VViDHVjv0q+qjLZyTT7yPF3hFpTt5zE=";
+  };
+
+  postPatch = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "/usr" "${placeholder "out"}"
+    sed -i 's/fixup_bundle.*")/")/g' CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ] ++ lib.optionals stdenv.isDarwin [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    boost
+    portmidi
+    sqlite
+    freetype
+    libpng
+    pngpp
+    zlib
+    wxGTK32
+    wxsqlite3
+    fluidsynth
+    fontconfig
+  ] ++ lib.optionals stdenv.isDarwin [
+    Cocoa
+  ];
+
+  preConfigure = ''
+    mkdir res/fonts
+    ln -s ${openlilylib-fonts.bravura}/share/lilypond/*/fonts/otf/Bravura.otf res/fonts/Bravura.otf
+    ln -s ${soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2 res/sounds/FluidR3_GM.sf2
+  '';
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
+    "-DLENMUS_INSTALL_SOUNDFONT=ON"
+    "-DMAN_INSTALL_DIR=${placeholder "out"}/share/man"
+  ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/{Applications,bin}
+    mv $out/lenmus.app $out/Applications
+    mv $out/Resources $out/Applications/lenmus.app/Contents
+    makeWrapper $out/{Applications/lenmus.app/Contents/MacOS,bin}/lenmus
+  '';
+
+  meta = with lib; {
+    description = "LenMus Phonascus is a program for learning music";
+    longDescription = ''
+      LenMus Phonascus is a free open source program (GPL v3) for learning music.
+      It allows you to focus on specific skills and exercises, on both theory and aural training.
+      The different activities can be customized to meet your needs
+    '';
+    homepage = "http://www.lenmus.org/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers;  [ ramkromberg ];
+    platforms = with platforms; unix;
+    mainProgram = "lenmus";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/liberasurecode/default.nix b/nixpkgs/pkgs/applications/misc/liberasurecode/default.nix
new file mode 100644
index 000000000000..f94496d0b125
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/liberasurecode/default.nix
@@ -0,0 +1,56 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, doxygen
+, installShellFiles
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "liberasurecode";
+  version = "1.6.3";
+
+  outputs = [ "out" "dev" "doc" ];
+
+  src = fetchFromGitHub {
+    owner = "openstack";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-HCp+FQ9nq4twk6FtfKhzT80wXXJbvG+clrDO2/9ATpU=";
+  };
+
+  postPatch = ''
+    substituteInPlace doc/doxygen.cfg.in \
+      --replace "GENERATE_MAN           = NO" "GENERATE_MAN           = YES"
+
+    substituteInPlace Makefile.am src/Makefile.am \
+      --replace "-Werror" ""
+  '';
+
+  nativeBuildInputs = [ autoreconfHook doxygen installShellFiles ];
+
+  buildInputs = [ zlib ];
+
+  configureFlags = [
+    "--disable-werror"
+    "--enable-doxygen"
+  ];
+
+  postInstall = ''
+    # remove useless man pages about directories
+    rm doc/man/man*/_*
+    installManPage doc/man/man*/*
+
+    moveToOutput share/liberasurecode/ $doc
+  '';
+
+  checkTarget = "test";
+
+  meta = with lib; {
+    description = "Erasure Code API library written in C with pluggable Erasure Code backends";
+    homepage = "https://github.com/openstack/liberasurecode";
+    license = licenses.bsd2;
+    maintainers = teams.openstack.members;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/librecad/default.nix b/nixpkgs/pkgs/applications/misc/librecad/default.nix
new file mode 100644
index 000000000000..eb2e3c136cf4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/librecad/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, boost
+, fetchFromGitHub
+, installShellFiles
+, mkDerivation
+, muparser
+, pkg-config
+, qmake
+, qtbase
+, qtsvg
+, qttools
+, runtimeShell
+}:
+
+mkDerivation rec {
+  pname = "librecad";
+  version = "2.2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "LibreCAD";
+    repo = "LibreCAD";
+    rev = version;
+    sha256 = "sha256-Vj6nvOfmhzou2hhmujm47a7aKBzmgchDb/BbwCb3/hI=";
+  };
+
+  buildInputs = [
+    boost
+    muparser
+    qtbase
+    qtsvg
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+    qmake
+    qttools
+  ];
+
+  qmakeFlags = [
+    "MUPARSER_DIR=${muparser}"
+    "BOOST_DIR=${boost.dev}"
+  ];
+
+  postPatch = ''
+    substituteInPlace scripts/postprocess-unix.sh \
+      --replace /bin/sh ${runtimeShell}
+
+    substituteInPlace librecad/src/main/qc_applicationwindow.cpp \
+      --replace __DATE__ 0
+  '';
+
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin                unix/{librecad,ttf2lff}
+    install -Dm444 -t $out/share/applications desktop/librecad.desktop
+    install -Dm644 -t $out/share/pixmaps      librecad/res/main/librecad.png
+    install -Dm444 desktop/librecad.sharedmimeinfo $out/share/mime/packages/librecad.xml
+    install -Dm444 desktop/graphics_icons_and_splash/Icon\ LibreCAD/Icon_Librecad.svg \
+      $out/share/icons/hicolor/scalable/apps/librecad.svg
+
+    installManPage desktop/librecad.?
+
+    cp -R unix/resources $out/share/librecad
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "2D CAD package based on Qt";
+    homepage = "https://librecad.org";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ kiwi viric ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lifelines/default.nix b/nixpkgs/pkgs/applications/misc/lifelines/default.nix
new file mode 100644
index 000000000000..f7f6c5fa2a38
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lifelines/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, gettext, libiconv, bison, ncurses, perl, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  pname = "lifelines";
+  version = "unstable-2019-05-07";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "43f29285ed46fba322b6a14322771626e6b02c59";
+    sha256 = "1agszzlmkxmznpc1xj0vzxkskrcfagfjvqsdyw1yp5yg6bsq272y";
+  };
+
+  patches = [
+    # Fix pending upstream inclusion for ncurses-6.3 support:
+    #  https://github.com/lifelines/lifelines/pull/437
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/lifelines/lifelines/commit/e04ce2794d458c440787c191877fbbc0784447bd.patch";
+      sha256 = "1smnz4z5hfjas79bfvlnpw9x8199a5g0p9cvhf17zpcnz1432kg7";
+    })
+  ];
+
+  buildInputs = [
+    gettext
+    libiconv
+    ncurses
+    perl
+  ];
+  nativeBuildInputs = [ autoreconfHook bison ];
+
+  meta = with lib; {
+    description = "Genealogy tool with ncurses interface";
+    homepage = "https://lifelines.github.io/lifelines/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ disassembler ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/limesctl/default.nix b/nixpkgs/pkgs/applications/misc/limesctl/default.nix
new file mode 100644
index 000000000000..00323a259db2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/limesctl/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "limesctl";
+  version = "3.3.2";
+
+  src = fetchFromGitHub {
+    owner = "sapcc";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-UYQe2C50tB1uc5ij8oh+RBaFg9UYWwPmJ77LCJ11Ml4=";
+  };
+
+  vendorHash = null;
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "CLI for Limes";
+    homepage = "https://github.com/sapcc/limesctl";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "limesctl";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/livecaptions/default.nix b/nixpkgs/pkgs/applications/misc/livecaptions/default.nix
new file mode 100644
index 000000000000..2d52e96fe359
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/livecaptions/default.nix
@@ -0,0 +1,77 @@
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+  fetchurl,
+  meson,
+  ninja,
+  pkg-config,
+  cmake,
+  desktop-file-utils,
+  wrapGAppsHook4,
+  onnxruntime,
+  libadwaita,
+  libpulseaudio,
+  xorg,
+}: let
+  aprilAsr = fetchFromGitHub {
+    name = "april-asr";
+    owner = "abb128";
+    repo = "april-asr";
+    rev = "3308e68442664552de593957cad0fa443ea183dd";
+    hash = "sha256-/cOZ2EcZu/Br9v0ComxnOegcEtlC9e8FYt3XHfah7mE=";
+  };
+
+  aprilModel = fetchurl {
+    name = "april-english-dev-01110_en.april";
+    url = "https://april.sapples.net/april-english-dev-01110_en.april";
+    hash = "sha256-d+uV0PpPdwijfoaMImUwHubELcsl5jymPuo9nLrbwfM=";
+  };
+in
+  stdenv.mkDerivation (finalAttrs: {
+    pname = "livecaptions";
+    version = "0.4.1";
+
+    src = fetchFromGitHub {
+      owner = "abb128";
+      repo = "LiveCaptions";
+      rev = "v${finalAttrs.version}";
+      hash = "sha256-x8NetSooIBlOKzKUMvDkPFtpD6EVGYECnaqWurySUDU=";
+    };
+
+    nativeBuildInputs = [
+      meson
+      ninja
+      pkg-config
+      cmake
+      desktop-file-utils # update-desktop-database
+      wrapGAppsHook4
+    ];
+
+    buildInputs = [
+      onnxruntime
+      libadwaita
+      libpulseaudio
+      xorg.libX11
+    ];
+
+    postUnpack = ''
+      rm -r source/subprojects/april-asr
+      ln -sf ${aprilAsr} source/subprojects/april-asr
+    '';
+
+    preFixup = ''
+      gappsWrapperArgs+=(
+        --set APRIL_MODEL_PATH ${aprilModel}
+      )
+    '';
+
+    meta = with lib; {
+      description = "Linux Desktop application that provides live captioning";
+      homepage = "https://github.com/abb128/LiveCaptions";
+      license = licenses.gpl3Plus;
+      platforms = platforms.linux;
+      maintainers = with maintainers; [Scrumplex];
+      mainProgram = "livecaptions";
+    };
+  })
diff --git a/nixpkgs/pkgs/applications/misc/llpp/default.nix b/nixpkgs/pkgs/applications/misc/llpp/default.nix
new file mode 100644
index 000000000000..95c98d9665a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/llpp/default.nix
@@ -0,0 +1,77 @@
+{ stdenv
+, lib
+, makeWrapper
+, fetchFromGitHub
+, ocaml
+, pkg-config
+, mupdf
+, libX11
+, jbig2dec
+, openjpeg
+, libjpeg
+, lcms2
+, harfbuzz
+, libGLU
+, libGL
+, gumbo
+, freetype
+, zlib
+, xclip
+, inotify-tools
+, procps
+, darwin
+}:
+
+assert lib.versionAtLeast (lib.getVersion ocaml) "4.07";
+
+stdenv.mkDerivation rec {
+  pname = "llpp";
+  version = "42";
+
+  src = fetchFromGitHub {
+    owner = "criticic";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-B/jKvBtBwMOErUVmGFGXXIT8FzMl1DFidfDCHIH41TU=";
+  };
+
+  postPatch = ''
+    sed -i "2d;s/ver=.*/ver=${version}/" build.bash
+  '';
+
+  strictDeps = true;
+
+  nativeBuildInputs = [ makeWrapper ocaml pkg-config ];
+  buildInputs = [ mupdf libX11 freetype zlib gumbo jbig2dec openjpeg libjpeg lcms2 harfbuzz ]
+    ++ lib.optionals stdenv.isLinux [ libGLU libGL ]
+    ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.OpenGL darwin.apple_sdk.frameworks.Cocoa ];
+
+  dontStrip = true;
+
+  buildPhase = ''
+    bash ./build.bash build
+  '';
+
+  installPhase = ''
+    install -d $out/bin
+    install build/llpp $out/bin
+    install misc/llpp.inotify $out/bin/llpp.inotify
+    install -Dm444 misc/llpp.desktop -t $out/share/applications
+  '' + lib.optionalString stdenv.isLinux ''
+    wrapProgram $out/bin/llpp \
+        --prefix PATH ":" "${xclip}/bin"
+
+    wrapProgram $out/bin/llpp.inotify \
+        --prefix PATH ":" "$out/bin" \
+        --prefix PATH ":" "${inotify-tools}/bin" \
+        --prefix PATH ":" "${procps}/bin"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/criticic/llpp";
+    description = "A MuPDF based PDF pager written in OCaml";
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ pSub ];
+    license = [ licenses.publicDomain licenses.bsd3 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/logseq/default.nix b/nixpkgs/pkgs/applications/misc/logseq/default.nix
new file mode 100644
index 000000000000..ed4a07ec97ae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/logseq/default.nix
@@ -0,0 +1,79 @@
+{ lib
+, stdenv
+, fetchurl
+, appimageTools
+, makeWrapper
+# graphs will not sync without matching upstream's major electron version
+, electron_27
+, git
+, nix-update-script
+}:
+
+stdenv.mkDerivation (finalAttrs: let
+  inherit (finalAttrs) pname version src appimageContents;
+
+in {
+  pname = "logseq";
+  version = "0.10.6";
+
+  src = fetchurl {
+    url = "https://github.com/logseq/logseq/releases/download/${version}/logseq-linux-x64-${version}.AppImage";
+    hash = "sha256-OUQh+6HRnzxw8Nn/OkU+DkjPKWKpMN0xchD1vPU3KV8=";
+    name = "${pname}-${version}.AppImage";
+  };
+
+  appimageContents = appimageTools.extract {
+    inherit pname src version;
+  };
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${pname} $out/share/applications
+    cp -a ${appimageContents}/{locales,resources} $out/share/${pname}
+    cp -a ${appimageContents}/Logseq.desktop $out/share/applications/${pname}.desktop
+
+    # remove the `git` in `dugite` because we want the `git` in `nixpkgs`
+    chmod +w -R $out/share/${pname}/resources/app/node_modules/dugite/git
+    chmod +w $out/share/${pname}/resources/app/node_modules/dugite
+    rm -rf $out/share/${pname}/resources/app/node_modules/dugite/git
+    chmod -w $out/share/${pname}/resources/app/node_modules/dugite
+
+    mkdir -p $out/share/pixmaps
+    ln -s $out/share/${pname}/resources/app/icons/logseq.png $out/share/pixmaps/${pname}.png
+
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace Exec=Logseq Exec=${pname} \
+      --replace Icon=Logseq Icon=${pname}
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    # set the env "LOCAL_GIT_DIRECTORY" for dugite so that we can use the git in nixpkgs
+    makeWrapper ${electron_27}/bin/electron $out/bin/${pname} \
+      --set "LOCAL_GIT_DIRECTORY" ${git} \
+      --add-flags $out/share/${pname}/resources/app \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc.lib ]}"
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = {
+    description = "A local-first, non-linear, outliner notebook for organizing and sharing your personal knowledge base";
+    homepage = "https://github.com/logseq/logseq";
+    changelog = "https://github.com/logseq/logseq/releases/tag/${version}";
+    license = lib.licenses.agpl3Plus;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    maintainers = with lib.maintainers; [ ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "logseq";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/loxodo/default.nix b/nixpkgs/pkgs/applications/misc/loxodo/default.nix
new file mode 100644
index 000000000000..77dd39bc0601
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/loxodo/default.nix
@@ -0,0 +1,41 @@
+{ lib, python3, fetchFromGitHub }:
+
+python3.pkgs.buildPythonApplication {
+  pname = "loxodo";
+  version = "unstable-2021-02-08";
+
+  src = fetchFromGitHub {
+    owner = "sommer";
+    repo = "loxodo";
+    rev = "7add982135545817e9b3e2bbd0d27a2763866133";
+    sha256 = "1cips4pvrqga8q1ibs23vjrf8dwan860x8jvjmc52h6qvvvv60yl";
+  };
+
+  patches = [ ./wxpython.patch ];
+
+  propagatedBuildInputs = with python3.pkgs; [ six wxpython ];
+
+  postInstall = ''
+    mv $out/bin/loxodo.py $out/bin/loxodo
+    mkdir -p $out/share/applications
+    cat > $out/share/applications/loxodo.desktop <<EOF
+    [Desktop Entry]
+    Type=Application
+    Exec=$out/bin/loxodo
+    Icon=$out/${python3.sitePackages}/resources/loxodo-icon.png
+    Name=Loxodo
+    GenericName=Password Vault
+    Categories=Application;Other;
+    EOF
+  '';
+
+  doCheck = false;  # Tests are interactive.
+
+  meta = with lib; {
+    description = "A Password Safe V3 compatible password vault";
+    homepage = "https://www.christoph-sommer.de/loxodo/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/loxodo/wxpython.patch b/nixpkgs/pkgs/applications/misc/loxodo/wxpython.patch
new file mode 100644
index 000000000000..e22d3b5ad708
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/loxodo/wxpython.patch
@@ -0,0 +1,25 @@
+diff --git a/loxodo.py b/loxodo.py
+index 68ad4c8..e96bc1a 100755
+--- a/loxodo.py
++++ b/loxodo.py
+@@ -41,7 +41,7 @@ if len(sys.argv) > 1:
+ # In all other cases, use the "wx" frontend.
+ try:
+     import wx
+-    assert(wx.__version__.startswith('4.0.'))
++    assert(wx.__version__.startswith('4.'))
+ except AssertionError as e:
+     print('Found incompatible wxPython, the wxWidgets Python bindings: %s' % wx.__version__, file=sys.stderr)
+     print('Falling back to cmdline frontend.', file=sys.stderr)
+diff --git a/src/frontends/wx/loxodo.py b/src/frontends/wx/loxodo.py
+index bc3f509..e02c4bf 100644
+--- a/src/frontends/wx/loxodo.py
++++ b/src/frontends/wx/loxodo.py
+@@ -25,6 +25,7 @@ from .loadframe import LoadFrame
+ 
+ 
+ def main():
++    wx.SizerFlags.DisableConsistencyChecks()
+     app = wx.App(False)
+     setup_wx_locale()
+     mainframe = LoadFrame(None, -1, "")
diff --git a/nixpkgs/pkgs/applications/misc/lscolors/default.nix b/nixpkgs/pkgs/applications/misc/lscolors/default.nix
new file mode 100644
index 000000000000..104f1baa037d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lscolors/default.nix
@@ -0,0 +1,27 @@
+{ lib, rustPlatform, fetchCrate }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "lscolors";
+  version = "0.17.0";
+
+  src = fetchCrate {
+    inherit version pname;
+    hash = "sha256-efkSiwxL7sZIwFXJZunddAb4lTOfhj8oOEOUW3kyRXI=";
+  };
+
+  cargoHash = "sha256-1Cyg4WT4xYqc3s5AOXR9GfcS3qKOgscYujGXR9fzuCA=";
+
+  buildFeatures = [ "nu-ansi-term" ];
+
+  # setid is not allowed in the sandbox
+  checkFlags = [ "--skip=tests::style_for_setid" ];
+
+  meta = with lib; {
+    description = "Rust library and tool to colorize paths using LS_COLORS";
+    homepage = "https://github.com/sharkdp/lscolors";
+    changelog = "https://github.com/sharkdp/lscolors/releases/tag/v${version}";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    mainProgram = "lscolors";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lsd2dsl/default.nix b/nixpkgs/pkgs/applications/misc/lsd2dsl/default.nix
new file mode 100644
index 000000000000..b46c6ea2afa3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lsd2dsl/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub
+, makeDesktopItem, copyDesktopItems, cmake
+, boost, libvorbis, libsndfile, minizip, gtest, qtwebkit }:
+
+mkDerivation rec {
+  pname = "lsd2dsl";
+  version = "0.5.4";
+
+  src = fetchFromGitHub {
+    owner = "nongeneric";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PLgfsVVrNBTxI4J0ukEOFRoBkbmB55/sLNn5KyiHeAc=";
+  };
+
+  nativeBuildInputs = [ cmake ] ++ lib.optional stdenv.isLinux copyDesktopItems;
+
+  buildInputs = [ boost libvorbis libsndfile minizip gtest qtwebkit ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=unused-result -Wno-error=missing-braces";
+
+  desktopItems = lib.singleton (makeDesktopItem {
+    name = "lsd2dsl";
+    exec = "lsd2dsl-qtgui";
+    desktopName = "lsd2dsl";
+    genericName = "lsd2dsl";
+    comment = meta.description;
+    categories = [ "Dictionary" "FileTools" "Qt" ];
+  });
+
+  installPhase = ''
+    install -Dm755 console/lsd2dsl gui/lsd2dsl-qtgui -t $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://rcebits.com/lsd2dsl/";
+    description = "Lingvo dictionaries decompiler";
+    longDescription = ''
+      A decompiler for ABBYY Lingvo’s proprietary dictionaries.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lswt/default.nix b/nixpkgs/pkgs/applications/misc/lswt/default.nix
new file mode 100644
index 000000000000..98f36028dbc2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lswt/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromSourcehut, wayland-scanner, wayland }:
+
+stdenv.mkDerivation rec {
+  pname = "lswt";
+  version = "1.0.4";
+
+  src = fetchFromSourcehut {
+    owner = "~leon_plickat";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-Orwa7sV56AeznEcq/Xj5qj4PALMxq0CI+ZnXuY4JYE0=";
+  };
+
+  nativeBuildInputs = [ wayland-scanner ];
+  buildInputs = [ wayland ];
+
+  makeFlags = [
+    "DESTDIR=${placeholder "out"}"
+    "PREFIX="
+  ];
+
+  meta = with lib; {
+    description = "A command that lists Wayland toplevels";
+    homepage = "https://sr.ht/~leon_plickat/lswt";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ edrex ];
+    platforms = platforms.linux;
+    mainProgram = "lswt";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lttoolbox/default.nix b/nixpkgs/pkgs/applications/misc/lttoolbox/default.nix
new file mode 100644
index 000000000000..25dbeba7d953
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lttoolbox/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, autoconf
+, automake
+, pkg-config
+, utf8cpp
+, libtool
+, libxml2
+, icu
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lttoolbox";
+  version = "3.7.1";
+
+  src = fetchFromGitHub {
+    owner = "apertium";
+    repo = "lttoolbox";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-3lHXKtwQSrMGQEGOGr27e3kB2qKkTFZcEzeAnIm89Rg=";
+  };
+
+  patches = [
+    # can be removed once the version goes past this commit
+    # https://github.com/apertium/lttoolbox/commit/e682fe18a96d5a865cfbd3e5661dbc7b3ace1821
+    (fetchpatch {
+      url = "https://github.com/apertium/lttoolbox/commit/e682fe18a96d5a865cfbd3e5661dbc7b3ace1821.patch";
+      hash = "sha256-VeP8Mv2KYxX+eVjIRw/jHbURaWN665+fiFaoT3VxAno=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    pkg-config
+    utf8cpp
+    libtool
+  ];
+  buildInputs = [
+    libxml2
+    icu
+  ];
+  buildFlags = [
+    "CPPFLAGS=-I${utf8cpp}/include/utf8cpp"
+  ];
+  configurePhase = ''
+    ./autogen.sh --prefix $out
+  '';
+  doCheck = true;
+  checkPhase = ''
+    ${python3}/bin/python3 tests/run_tests.py
+  '';
+
+  meta = with lib; {
+    description = "Finite state compiler, processor and helper tools used by apertium";
+    homepage = "https://github.com/apertium/lttoolbox";
+    maintainers = with maintainers; [ onthestairs ];
+    changelog = "https://github.com/apertium/lttoolbox/releases/tag/v${version}";
+    license = licenses.gpl2;
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ltwheelconf/default.nix b/nixpkgs/pkgs/applications/misc/ltwheelconf/default.nix
new file mode 100644
index 000000000000..b9c53a58b03d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ltwheelconf/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, libusb1, pkg-config, fetchFromGitHub }:
+
+stdenv.mkDerivation {
+  pname = "ltwheelconf";
+  version = "0.2.7";
+
+  src = fetchFromGitHub {
+    owner = "thk";
+    repo = "ltwheelconf";
+    rev = "df55451f059d593b0259431662612ab5c2bef859";
+    sha256 = "1fsz7k73yln987gcx1jvb5irxfbp1x2c457a60a8yap27nkp5y2w";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libusb1 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ltwheelconf $out/bin
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thk/LTWheelConf";
+    description = "Logitech wheels configuration tool";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.linux;
+    mainProgram = "ltwheelconf";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lunatask/default.nix b/nixpkgs/pkgs/applications/misc/lunatask/default.nix
new file mode 100644
index 000000000000..017eb17a40ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lunatask/default.nix
@@ -0,0 +1,42 @@
+{ lib, appimageTools, fetchurl }:
+
+let
+  version = "1.7.8";
+  pname = "lunatask";
+
+  src = fetchurl {
+    url = "https://lunatask.app/download/Lunatask-${version}.AppImage";
+    sha256 = "sha256-DhTWD9uL7zKWiRfeLYKxPtmAy1yR20wjlVA+N33YgpQ=";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname version src;
+  };
+
+in
+appimageTools.wrapType2 rec {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+    install -m 444 -D ${appimageContents}/${pname}.desktop $out/share/applications/${pname}.desktop
+    install -m 444 -D ${appimageContents}/${pname}.png $out/share/icons/hicolor/512x512/apps/${pname}.png
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "An all-in-one encrypted todo list, notebook, habit and mood tracker, pomodoro timer, and journaling app";
+    longDescription = ''
+      Lunatask is an all-in-one encrypted todo list, notebook, habit and mood tracker, pomodoro timer, and journaling app. It remembers stuff for you and keeps track of your mental health.
+    '';
+    homepage = "https://lunatask.app";
+    downloadPage = "https://lunatask.app/download";
+    license = licenses.unfree;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    maintainers = with maintainers; [ henkery ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "lunatask";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lutris/default.nix b/nixpkgs/pkgs/applications/misc/lutris/default.nix
new file mode 100644
index 000000000000..3ee6148ef16b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lutris/default.nix
@@ -0,0 +1,153 @@
+{ buildPythonApplication
+, lib
+, fetchFromGitHub
+, fetchpatch
+
+  # build inputs
+, atk
+, file
+, gdk-pixbuf
+, glib-networking
+, gnome-desktop
+, gobject-introspection
+, gst_all_1
+, gtk3
+, libnotify
+, pango
+, webkitgtk
+, wrapGAppsHook
+
+  # check inputs
+, xvfb-run
+, nose2
+, flake8
+
+  # python dependencies
+, certifi
+, dbus-python
+, distro
+, evdev
+, lxml
+, pillow
+, pygobject3
+, pypresence
+, pyyaml
+, requests
+, protobuf
+, moddb
+
+  # commands that lutris needs
+, xrandr
+, pciutils
+, psmisc
+, glxinfo
+, vulkan-tools
+, xboxdrv
+, pulseaudio
+, p7zip
+, xgamma
+, libstrangle
+, fluidsynth
+, xorgserver
+, xorg
+, util-linux
+}:
+
+let
+  # See lutris/util/linux.py
+  requiredTools = [
+    xrandr
+    pciutils
+    psmisc
+    glxinfo
+    vulkan-tools
+    xboxdrv
+    pulseaudio
+    p7zip
+    xgamma
+    libstrangle
+    fluidsynth
+    xorgserver
+    xorg.setxkbmap
+    xorg.xkbcomp
+    # bypass mount suid wrapper which does not work in fhsenv
+    util-linux
+  ];
+in
+buildPythonApplication rec {
+  pname = "lutris-unwrapped";
+  version = "0.5.16";
+
+  src = fetchFromGitHub {
+    owner = "lutris";
+    repo = "lutris";
+    rev = "v${version}";
+    hash = "sha256-Ed1bhugBe97XmY050A5jCPcnLj0Fd7qPX2p/Ab+YbOE=";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook gobject-introspection ];
+  buildInputs = [
+    atk
+    gdk-pixbuf
+    glib-networking
+    gnome-desktop
+    gtk3
+    libnotify
+    pango
+    webkitgtk
+  ] ++ (with gst_all_1; [
+    gst-libav
+    gst-plugins-bad
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-ugly
+    gstreamer
+  ]);
+
+  # See `install_requires` in https://github.com/lutris/lutris/blob/master/setup.py
+  propagatedBuildInputs = [
+    certifi
+    dbus-python
+    distro
+    evdev
+    lxml
+    pillow
+    pygobject3
+    pypresence
+    pyyaml
+    requests
+    protobuf
+    moddb
+  ];
+
+  postPatch = ''
+    substituteInPlace lutris/util/magic.py \
+      --replace "'libmagic.so.1'" "'${lib.getLib file}/lib/libmagic.so.1'"
+  '';
+
+  nativeCheckInputs = [ xvfb-run nose2 flake8 ] ++ requiredTools;
+  checkPhase = ''
+    runHook preCheck
+
+    export HOME=$PWD
+    xvfb-run -s '-screen 0 800x600x24' make test
+
+    runHook postCheck
+  '';
+
+  # avoid double wrapping
+  dontWrapGApps = true;
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath requiredTools}"
+    "\${gappsWrapperArgs[@]}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://lutris.net";
+    description = "Open Source gaming platform for GNU/Linux";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ Madouura ];
+    platforms = platforms.linux;
+    mainProgram = "lutris";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lutris/fhsenv.nix b/nixpkgs/pkgs/applications/misc/lutris/fhsenv.nix
new file mode 100644
index 000000000000..acdbf8835e31
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lutris/fhsenv.nix
@@ -0,0 +1,161 @@
+{ lib, buildFHSEnv, lutris-unwrapped
+, extraPkgs ? pkgs: [ ]
+, extraLibraries ? pkgs: [ ]
+, steamSupport ? true
+}:
+
+let
+
+  qt5Deps = pkgs: with pkgs.qt5; [ qtbase qtmultimedia ];
+  gnomeDeps = pkgs: with pkgs; [ gnome.zenity gtksourceview gnome-desktop gnome.libgnome-keyring webkitgtk ];
+  xorgDeps = pkgs: with pkgs.xorg; [
+    libX11 libXrender libXrandr libxcb libXmu libpthreadstubs libXext libXdmcp
+    libXxf86vm libXinerama libSM libXv libXaw libXi libXcursor libXcomposite
+  ];
+  gstreamerDeps = pkgs: with pkgs.gst_all_1; [
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    gst-plugins-ugly
+    gst-plugins-bad
+    gst-libav
+  ];
+
+in buildFHSEnv {
+  name = "lutris";
+
+  runScript = "lutris";
+
+  # Many native and WINE games need 32bit
+  multiArch = true;
+
+  targetPkgs = pkgs: with pkgs; [
+    lutris-unwrapped
+
+    # Adventure Game Studio
+    allegro dumb
+
+    # Curl
+    libnghttp2
+
+    # Desmume
+    lua agg soundtouch openal desktop-file-utils atk
+
+    # DGen // TODO: libarchive is broken
+
+    # Dolphin
+    bluez ffmpeg gettext portaudio miniupnpc mbedtls_2 lzo sfml gsm
+    wavpack orc nettle gmp pcre vulkan-loader
+
+    # DOSBox
+    SDL_net SDL_sound
+
+    # GOG
+    glib-networking
+
+    # Higan // TODO: "higan is not available for the x86_64 architecture"
+
+    # Libretro
+    fluidsynth hidapi mesa libdrm
+
+    # MAME
+    fontconfig SDL2_ttf
+
+    # Mednafen
+    freeglut mesa_glu
+
+    # MESS
+    expat
+
+    # Minecraft
+    nss
+
+    # Mupen64Plus
+    boost dash
+
+    # Overwatch 2
+    libunwind
+
+    # PPSSPP
+    glew snappy
+
+    # Redream // "redream is not available for the x86_64 architecture"
+
+
+    # rpcs3 // TODO: "error while loading shared libraries: libz.so.1..."
+    llvm
+
+    # ScummVM
+    nasm sndio
+
+    # ResidualVM is now merged with ScummVM and therefore does not exist anymore
+    flac
+
+    # Snes9x
+    libepoxy minizip
+
+    # Vice
+    bison flex
+
+    # WINE
+    xorg.xrandr perl which p7zip gnused gnugrep psmisc opencl-headers
+
+    # ZDOOM
+    soundfont-fluid bzip2 game-music-emu
+  ] ++ qt5Deps pkgs
+    ++ gnomeDeps pkgs
+    ++ lib.optional steamSupport pkgs.steam
+    ++ extraPkgs pkgs;
+
+  multiPkgs = pkgs: with pkgs; [
+    # Common
+    libsndfile libtheora libogg libvorbis libopus libGLU libpcap libpulseaudio
+    libao libevdev udev libgcrypt libxml2 libusb-compat-0_1 libpng libmpeg2 libv4l
+    libjpeg libxkbcommon libass libcdio libjack2 libsamplerate libzip libmad libaio
+    libcap libtiff libva libgphoto2 libxslt libsndfile giflib zlib glib
+    alsa-lib zziplib bash dbus keyutils zip cabextract freetype unzip coreutils
+    readline gcc SDL SDL2 curl graphite2 gtk2 gtk3 udev ncurses wayland libglvnd
+    vulkan-loader xdg-utils sqlite gnutls p11-kit libbsd harfbuzz
+
+    # PCSX2 // TODO: "libgobject-2.0.so.0: wrong ELF class: ELFCLASS64"
+
+    # WINE
+    cups lcms2 mpg123 cairo unixODBC samba4 sane-backends openldap
+    ocl-icd util-linux libkrb5
+
+    # Proton
+    libselinux
+
+    # Winetricks
+    fribidi
+  ] ++ xorgDeps pkgs
+    ++ gstreamerDeps pkgs
+    ++ extraLibraries pkgs;
+
+  extraInstallCommands = ''
+    mkdir -p $out/share
+    ln -sf ${lutris-unwrapped}/share/applications $out/share
+    ln -sf ${lutris-unwrapped}/share/icons $out/share
+  '';
+
+  # allows for some gui applications to share IPC
+  # this fixes certain issues where they don't render correctly
+  unshareIpc = false;
+
+  # Some applications such as Natron need access to MIT-SHM or other
+  # shared memory mechanisms. Unsharing the pid namespace
+  # breaks the ability for application to reference shared memory.
+  unsharePid = false;
+
+  meta = {
+    inherit (lutris-unwrapped.meta)
+      homepage
+      description
+      platforms
+      license
+      maintainers
+      broken;
+
+    mainProgram = "lutris";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/lyx/default.nix b/nixpkgs/pkgs/applications/misc/lyx/default.nix
new file mode 100644
index 000000000000..514cca9e8a5e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/lyx/default.nix
@@ -0,0 +1,51 @@
+{ fetchurl, lib, mkDerivation, pkg-config, python3, file, bc
+, qtbase, qtsvg, hunspell, makeWrapper #, mythes, boost
+}:
+
+mkDerivation rec {
+  version = "2.3.6.1";
+  pname = "lyx";
+
+  src = fetchurl {
+    url = "ftp://ftp.lyx.org/pub/lyx/stable/2.3.x/${pname}-${version}.tar.xz";
+    sha256 = "sha256-xr7SYzQZiY4Bp8w1AxDX2TS/WRyrcln8JYGqTADq+ng=";
+  };
+
+  # Needed with GCC 12
+  postPatch = ''
+    sed '1i#include <iterator>' -i src/lyxfind.cpp
+    sed '1i#include <cstring>'  -i src/insets/InsetListings.cpp
+  '';
+
+  # LaTeX is used from $PATH, as people often want to have it with extra pkgs
+  nativeBuildInputs = [ pkg-config makeWrapper python3 qtbase ];
+  buildInputs = [
+    qtbase qtsvg file/*for libmagic*/ bc
+    hunspell # enchant
+  ];
+
+  configureFlags = [
+    "--enable-qt5"
+    #"--without-included-boost"
+    /*  Boost is a huge dependency from which 1.4 MB of libs would be used.
+        Using internal boost stuff only increases executable by around 0.2 MB. */
+    #"--without-included-mythes" # such a small library isn't worth a separate package
+  ];
+
+  enableParallelBuilding = true;
+  doCheck = true;
+
+  # python is run during runtime to do various tasks
+  qtWrapperArgs = [
+    " --prefix PATH : ${python3}/bin"
+  ];
+
+  meta = with lib; {
+    description = "WYSIWYM frontend for LaTeX, DocBook";
+    homepage = "http://www.lyx.org";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.vcunat ];
+    platforms = platforms.linux;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/madonctl/default.nix b/nixpkgs/pkgs/applications/misc/madonctl/default.nix
new file mode 100644
index 000000000000..203d71a6cc48
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/madonctl/default.nix
@@ -0,0 +1,38 @@
+{ lib, buildGoModule, fetchFromGitHub, installShellFiles, testers, madonctl }:
+
+buildGoModule rec {
+  pname = "madonctl";
+  version = "2.3.2";
+
+  src = fetchFromGitHub {
+    owner = "McKael";
+    repo = "madonctl";
+    rev = "v${version}";
+    hash = "sha256-mo185EKjLkiujAKcAFM1XqkXWvcfYbnv+r3dF9ywaf8=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  ldflags = [ "-s" "-w" ];
+
+  postInstall = ''
+    installShellCompletion --cmd madonctl \
+      --bash <($out/bin/madonctl completion bash) \
+      --zsh <($out/bin/madonctl completion zsh)
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = madonctl;
+    command = "madonctl version";
+  };
+
+  meta = with lib; {
+    description = "CLI for the Mastodon social network API";
+    homepage = "https://github.com/McKael/madonctl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "madonctl";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mainsail/default.nix b/nixpkgs/pkgs/applications/misc/mainsail/default.nix
new file mode 100644
index 000000000000..4f4c91505027
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mainsail/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenvNoCC
+, fetchzip
+}:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "mainsail";
+  version = "2.10.0";
+
+  src = fetchzip {
+    url = "https://github.com/mainsail-crew/mainsail/releases/download/v${version}/mainsail.zip";
+    hash = "sha256-5bRmM/BXI0Afe7UK6avh5aWFXkYF4MsUG71uYUc5JlA=";
+    stripRoot = false;
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/mainsail
+    cp -r ./* $out/share/mainsail
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Web interface for managing and controlling 3D printers with Klipper";
+    homepage = "https://docs.mainsail.xyz";
+    changelog = "https://github.com/mainsail-crew/mainsail/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ shhht lovesegfault ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/makeself/default.nix b/nixpkgs/pkgs/applications/misc/makeself/default.nix
new file mode 100644
index 000000000000..7c2d33aebc00
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/makeself/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, fetchFromGitHub, which, zstd, pbzip2, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  version = "2.4.5";
+  pname = "makeself";
+
+  src = fetchFromGitHub {
+    owner = "megastep";
+    repo = "makeself";
+    rev = "release-${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-15lUtErGsbXF2Gn0f0rvA18mMuVMmkKrGO2poeYZU9g=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postPatch = "patchShebangs test";
+
+  # Issue #110149: our default /bin/sh apparently has 32-bit math only
+  # (attribute busybox-sandbox-shell), and that causes problems
+  # when running these tests inside build, based on free disk space.
+  doCheck = false;
+  checkTarget = "test";
+  nativeCheckInputs = [ which zstd pbzip2 ];
+
+  installPhase = ''
+    runHook preInstall
+    installManPage makeself.1
+    install -Dm555 makeself.sh $out/bin/makeself
+    install -Dm444 -t $out/share/${pname}/ makeself.lsm README.md makeself-header.sh
+    runHook postInstall
+  '';
+
+  fixupPhase = ''
+    sed -e "s|^HEADER=.*|HEADER=$out/share/${pname}-${version}/makeself-header.sh|" -i $out/bin/makeself
+  '';
+
+  meta = with lib; {
+    homepage = "https://makeself.io";
+    description = "Utility to create self-extracting packages";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.wmertens ];
+    platforms = platforms.all;
+    mainProgram = "makeself";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mako/default.nix b/nixpkgs/pkgs/applications/misc/mako/default.nix
new file mode 100644
index 000000000000..ca7849c566a9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mako/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, scdoc
+, systemd, pango, cairo, gdk-pixbuf, jq, bash
+, wayland, wayland-protocols
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "mako";
+  version = "1.8.0";
+
+  src = fetchFromGitHub {
+    owner = "emersion";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-sUFMcCrc5iNPeAmRbqDaT/n8OIlFJEwJTzY1HMx94RU=";
+  };
+
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [ meson ninja pkg-config scdoc wayland-protocols wrapGAppsHook ];
+  buildInputs = [ systemd pango cairo gdk-pixbuf wayland ];
+
+  mesonFlags = [
+    "-Dzsh-completions=true"
+    "-Dsd-bus-provider=libsystemd"
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : "${lib.makeBinPath [ systemd /* for busctl */ jq bash ]}"
+    )
+  '';
+
+  meta = with lib; {
+    description = "A lightweight Wayland notification daemon";
+    homepage = "https://wayland.emersion.fr/mako/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dywedir synthetica ];
+    platforms = platforms.linux;
+    mainProgram = "mako";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/maliit-framework/default.nix b/nixpkgs/pkgs/applications/misc/maliit-framework/default.nix
new file mode 100644
index 000000000000..ce8ebef16a89
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/maliit-framework/default.nix
@@ -0,0 +1,77 @@
+{ mkDerivation
+, lib
+, fetchFromGitHub
+, fetchpatch
+
+, at-spi2-atk
+, at-spi2-core
+, libepoxy
+, gtk3
+, libdatrie
+, libselinux
+, libsepol
+, libthai
+, pcre
+, util-linux
+, wayland
+, xorg
+
+, cmake
+, doxygen
+, pkg-config
+, wayland-protocols
+}:
+
+mkDerivation rec {
+  pname = "maliit-framework";
+  version = "2.3.0";
+
+  src = fetchFromGitHub {
+    owner = "maliit";
+    repo = "framework";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-q+hiupwlA0PfG+xtomCUp2zv6HQrGgmOd9CU193ucrY=";
+  };
+
+  patches = [
+    # FIXME: backport GCC 12 build fix, remove for next release
+    (fetchpatch {
+      url = "https://github.com/maliit/framework/commit/86e55980e3025678882cb9c4c78614f86cdc1f04.diff";
+      hash = "sha256-5R+sCI05vJX5epu6hcDSWWzlZ8ns1wKEJ+u8xC6d8Xo=";
+    })
+  ];
+
+  buildInputs = [
+    at-spi2-atk
+    at-spi2-core
+    libepoxy
+    gtk3
+    libdatrie
+    libselinux
+    libsepol
+    libthai
+    pcre
+    util-linux
+    wayland
+    xorg.libXdmcp
+    xorg.libXtst
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    doxygen
+    pkg-config
+    wayland-protocols
+  ];
+
+  preConfigure = ''
+    cmakeFlags+="-DQT5_PLUGINS_INSTALL_DIR=$out/$qtPluginPrefix"
+  '';
+
+  meta = with lib; {
+    description = "Core libraries of Maliit and server";
+    homepage = "http://maliit.github.io/";
+    license = licenses.lgpl21Plus;
+    maintainers = with maintainers; [ samueldr ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/maliit-keyboard/default.nix b/nixpkgs/pkgs/applications/misc/maliit-keyboard/default.nix
new file mode 100644
index 000000000000..b662c2522df8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/maliit-keyboard/default.nix
@@ -0,0 +1,74 @@
+{ mkDerivation
+, lib
+, fetchFromGitHub
+, fetchpatch
+
+, anthy
+, hunspell
+, libchewing
+, libpinyin
+, maliit-framework
+, pcre
+, presage
+, qtfeedback
+, qtmultimedia
+, qtquickcontrols2
+, qtgraphicaleffects
+
+, cmake
+, pkg-config
+, wrapGAppsHook
+}:
+
+mkDerivation rec {
+  pname = "maliit-keyboard";
+  version = "2.3.1";
+
+  src = fetchFromGitHub {
+    owner = "maliit";
+    repo = "keyboard";
+    rev = version;
+    sha256 = "sha256-XH3sKQuNMLgJi2aV+bnU2cflwkFIw4RYVfxzQiejCT0=";
+  };
+
+  postPatch = ''
+    substituteInPlace data/schemas/org.maliit.keyboard.maliit.gschema.xml \
+      --replace /usr/share "$out/share"
+  '';
+
+  buildInputs = [
+    anthy
+    hunspell
+    libchewing
+    libpinyin
+    maliit-framework
+    pcre
+    presage
+    qtfeedback
+    qtmultimedia
+    qtquickcontrols2
+    qtgraphicaleffects
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}"
+    "-DCMAKE_INSTALL_LIBDIR=lib"
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  postInstall = ''
+    glib-compile-schemas "$out"/share/glib-2.0/schemas
+  '';
+
+  meta = with lib; {
+    description = "Virtual keyboard";
+    homepage = "http://maliit.github.io/";
+    license = with licenses; [ lgpl3Only bsd3 cc-by-30 ];
+    maintainers = with maintainers; [ samueldr ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mangal/default.nix b/nixpkgs/pkgs/applications/misc/mangal/default.nix
new file mode 100644
index 000000000000..cc485d84e8e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mangal/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub, installShellFiles }:
+
+buildGoModule rec {
+  pname = "mangal";
+  version = "4.0.6";
+
+  src = fetchFromGitHub {
+    owner = "metafates";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-nbJdePlzZFM2ihbvFIMKyYZ9C0uKjU3TE5VLduLvtKE=";
+  };
+
+  proxyVendor = true;
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) ''
+    # Mangal creates a config file in the folder ~/.config/mangal and fails if not possible
+    export MANGAL_CONFIG_PATH=`mktemp -d`
+    installShellCompletion --cmd mangal \
+      --bash <($out/bin/mangal completion bash) \
+      --zsh <($out/bin/mangal completion zsh) \
+      --fish <($out/bin/mangal completion fish)
+  '';
+
+  doCheck = false; # test fail because of sandbox
+
+  meta = with lib; {
+    description =
+      "A fancy CLI app written in Go which scrapes, downloads and packs manga into different formats";
+    homepage = "https://github.com/metafates/mangal";
+    license = licenses.mit;
+    maintainers = [ maintainers.bertof ];
+    mainProgram = "mangal";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/markets/default.nix b/nixpkgs/pkgs/applications/misc/markets/default.nix
new file mode 100644
index 000000000000..436891482f19
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/markets/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub
+, desktop-file-utils, glib, gtk3, meson, ninja, pkg-config, python3, vala
+, wrapGAppsHook
+, glib-networking, gobject-introspection, json-glib, libgee, libhandy, libsoup
+}:
+
+stdenv.mkDerivation rec {
+  pname = "markets";
+  version = "0.5.4";
+
+  src = fetchFromGitHub {
+    owner = "bitstower";
+    repo = "markets";
+    rev = version;
+    sha256 = "sha256-/g/r/1i69PmPND40zIID3Nun0I4ZFT1EFoNf1qprBjI=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils glib gtk3 meson ninja pkg-config python3 vala
+    wrapGAppsHook gobject-introspection
+  ];
+  buildInputs = [
+    glib glib-networking gtk3 json-glib libgee libhandy
+    libsoup
+  ];
+
+  postPatch = ''
+    patchShebangs build-aux/meson/postinstall.py
+  '';
+
+  postInstall = ''
+    ln -s bitstower-markets $out/bin/markets
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/bitstower/markets";
+    description = "Stock, currency and cryptocurrency tracker";
+    maintainers = with maintainers; [ qyliss ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/marktext/default.nix b/nixpkgs/pkgs/applications/misc/marktext/default.nix
new file mode 100644
index 000000000000..bc9418d57838
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/marktext/default.nix
@@ -0,0 +1,48 @@
+{ appimageTools, fetchurl, lib }:
+
+let
+  pname = "marktext";
+  version = "0.17.1";
+
+  src = fetchurl {
+    url = "https://github.com/marktext/marktext/releases/download/v${version}/marktext-x86_64.AppImage";
+    sha256 = "2e2555113e37df830ba3958efcccce7020907b12fd4162368cfd906aeda630b7";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname version src;
+  };
+in
+appimageTools.wrapType2 rec {
+  inherit pname version src;
+
+  profile = ''
+    export LC_ALL=C.UTF-8
+  '';
+
+  multiArch = false; # no 32bit needed
+  extraPkgs = p: (appimageTools.defaultFhsEnvArgs.multiPkgs p) ++ [
+    p.libsecret
+    p.xorg.libxkbfile
+  ];
+
+  extraInstallCommands = ''
+    # Strip version from binary name.
+    mv $out/bin/${pname}-${version} $out/bin/${pname}
+
+    install -m 444 -D ${appimageContents}/marktext.desktop $out/share/applications/marktext.desktop
+    substituteInPlace $out/share/applications/marktext.desktop \
+      --replace "Exec=AppRun" "Exec=${pname} --"
+
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "A simple and elegant markdown editor, available for Linux, macOS and Windows";
+    homepage = "https://marktext.app";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nh2 eduarrrd ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "marktext";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/masterpdfeditor/default.nix b/nixpkgs/pkgs/applications/misc/masterpdfeditor/default.nix
new file mode 100644
index 000000000000..192b3dd7c73e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/masterpdfeditor/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, fetchurl, sane-backends, qtbase, qtsvg, nss, autoPatchelfHook, lib, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "masterpdfeditor";
+  version = "5.9.35";
+
+  src = fetchurl {
+    url = "https://code-industry.net/public/master-pdf-editor-${version}-qt5.x86_64.tar.gz";
+    sha256 = "sha256-c5DYS0PQemZ8Sql2KjnuMspCLDJzU95rsbuIdoxWDM0=";
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook wrapQtAppsHook ];
+
+  buildInputs = [ nss qtbase qtsvg sane-backends stdenv.cc.cc ];
+
+  dontStrip = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    p=$out/opt/masterpdfeditor
+    mkdir -p $out/bin
+
+    substituteInPlace masterpdfeditor5.desktop \
+      --replace 'Exec=/opt/master-pdf-editor-5' "Exec=$out/bin" \
+      --replace 'Path=/opt/master-pdf-editor-5' "Path=$out/bin" \
+      --replace 'Icon=/opt/master-pdf-editor-5' "Icon=$out/share/pixmaps"
+
+    install -Dm644 -t $out/share/pixmaps      masterpdfeditor5.png
+    install -Dm644 -t $out/share/applications masterpdfeditor5.desktop
+    install -Dm755 -t $p                      masterpdfeditor5
+    install -Dm644 license.txt $out/share/$name/LICENSE
+    ln -s $p/masterpdfeditor5 $out/bin/masterpdfeditor5
+    cp -v -r stamps templates lang fonts $p
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Master PDF Editor";
+    homepage = "https://code-industry.net/free-pdf-editor/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfreeRedistributable;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ cmcdragonkai ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/masterpdfeditor4/default.nix b/nixpkgs/pkgs/applications/misc/masterpdfeditor4/default.nix
new file mode 100644
index 000000000000..355c23d3d187
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/masterpdfeditor4/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, sane-backends, qtbase, qtsvg, autoPatchelfHook, lib, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "masterpdfeditor4";
+  version = "4.3.89";
+
+  src = fetchurl {
+    url = "https://code-industry.net/public/master-pdf-editor-${version}_qt5.amd64.tar.gz";
+    sha256 = "0k5bzlhqglskiiq86nmy18mnh5bf2w3mr9cq3pibrwn5pisxnxxc";
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook wrapQtAppsHook ];
+
+  buildInputs = [ qtbase qtsvg sane-backends stdenv.cc.cc ];
+
+  installPhase = ''
+    runHook preInstall
+
+    app_dir=$out/opt/masterpdfeditor4
+    mkdir -p $out/bin
+
+    substituteInPlace masterpdfeditor4.desktop \
+      --replace 'Exec=/opt/master-pdf-editor-4' "Exec=$out/bin" \
+      --replace 'Path=/opt/master-pdf-editor-4' "Path=$out/bin" \
+      --replace 'Icon=/opt/master-pdf-editor-4' "Icon=$out/share/pixmaps"
+
+    install -Dm644 -t $out/share/pixmaps      masterpdfeditor4.png
+    install -Dm644 -t $out/share/applications masterpdfeditor4.desktop
+    install -Dm755 -t $app_dir                masterpdfeditor4
+    install -Dm644 license.txt $out/share/$name/LICENSE
+    ln -s $app_dir/masterpdfeditor4 $out/bin/masterpdfeditor4
+    cp -v -r stamps templates lang fonts $app_dir
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Master PDF Editor - version 4, without watermark";
+    homepage = "https://code-industry.net/free-pdf-editor/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfreeRedistributable;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/matcha-rss-digest/default.nix b/nixpkgs/pkgs/applications/misc/matcha-rss-digest/default.nix
new file mode 100644
index 000000000000..d25824fefc15
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/matcha-rss-digest/default.nix
@@ -0,0 +1,27 @@
+{ stdenv
+, lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "matcha-rss-digest";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "piqoni";
+    repo = "matcha";
+    rev = "v${version}";
+    hash = "sha256-aW/a1rfq/pjRpJzoEfuj0JMnyFwQKPL1+Wxvh7wVbho=";
+  };
+
+  vendorHash = "sha256-bwl4/4yYm8TC3D+FgyXzhQg8SdNHyXQM9YCn8p8+DF0=";
+
+  meta = with lib; {
+    homepage = "https://github.com/piqoni/matcha";
+    description = "Daily digest generator from a list of RSS feeds";
+    license = licenses.mit;
+    mainProgram = "matcha";
+    maintainers = with maintainers; [ foo-dogsquared ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mbutil/default.nix b/nixpkgs/pkgs/applications/misc/mbutil/default.nix
new file mode 100644
index 000000000000..69b61afaee55
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mbutil/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonApplication, fetchFromGitHub, nose }:
+
+buildPythonApplication rec {
+  pname = "mbutil";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "mapbox";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "06d62r89h026asaa4ryzb23m86j0cmbvy54kf4zl5f35sgiha45z";
+  };
+
+  nativeCheckInputs = [ nose ];
+  checkPhase = "nosetests";
+
+  meta = with lib; {
+    description = "An importer and exporter for MBTiles";
+    homepage = "https://github.com/mapbox/mbutil";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mdp/default.nix b/nixpkgs/pkgs/applications/misc/mdp/default.nix
new file mode 100644
index 000000000000..fd3ab88ff4c8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mdp/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, ncurses }:
+
+stdenv.mkDerivation rec {
+  version = "1.0.15";
+  pname = "mdp";
+
+  src = fetchFromGitHub {
+    owner = "visit1985";
+    repo = "mdp";
+    rev = version;
+    sha256 = "1m9a0vvyw2m55cn7zcq011vrjkiaj5a3g5g6f2dpq953gyi7gff9";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    homepage = "https://github.com/visit1985/mdp";
+    description = "A command-line based markdown presentation tool";
+    maintainers = with maintainers; [ matthiasbeyer vrthra ];
+    license = licenses.gpl3;
+    platforms = with platforms; unix;
+    mainProgram = "mdp";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mdzk/default.nix b/nixpkgs/pkgs/applications/misc/mdzk/default.nix
new file mode 100644
index 000000000000..e4093295df68
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mdzk/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, CoreServices }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "mdzk";
+  version = "0.5.2";
+
+  src = fetchFromGitHub {
+    owner = "mdzk-rs";
+    repo = "mdzk";
+    rev = version;
+    hash = "sha256-V//tVcIzhCh03VjwMC+R2ynaOFm+dp6qxa0oqBfvGUs=";
+  };
+
+  cargoPatches = [
+    # Remove when new version of mdzk is released.
+    ./update-mdbook-for-rust-1.64.patch
+  ];
+
+  cargoHash = "sha256-5zGUBvmf68tCk5jGrNn+ukgYbiKzrlmZvWrYgoJf2zk=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [ CoreServices ];
+
+  meta = with lib; {
+    description = "Plain text Zettelkasten based on mdBook";
+    homepage = "https://github.com/mdzk-rs/mdzk/";
+    changelog = "https://github.com/mdzk-rs/mdzk/blob/main/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ bryanasdev000 ratsclub ];
+    mainProgram = "mdzk";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mdzk/update-mdbook-for-rust-1.64.patch b/nixpkgs/pkgs/applications/misc/mdzk/update-mdbook-for-rust-1.64.patch
new file mode 100644
index 000000000000..79b7240b96f8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mdzk/update-mdbook-for-rust-1.64.patch
@@ -0,0 +1,246 @@
+diff --git a/Cargo.lock b/Cargo.lock
+index ae63793..4068e02 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -162,12 +162,46 @@ dependencies = [
+  "ansi_term",
+  "atty",
+  "bitflags",
+- "strsim",
+- "textwrap",
++ "strsim 0.8.0",
++ "textwrap 0.11.0",
+  "unicode-width",
+  "vec_map",
+ ]
+ 
++[[package]]
++name = "clap"
++version = "3.2.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "8e538f9ee5aa3b3963f09a997035f883677966ed50fce0292611927ce6f6d8c6"
++dependencies = [
++ "atty",
++ "bitflags",
++ "clap_lex",
++ "indexmap",
++ "lazy_static",
++ "strsim 0.10.0",
++ "termcolor",
++ "textwrap 0.15.1",
++]
++
++[[package]]
++name = "clap_complete"
++version = "3.2.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "3f7a2e0a962c45ce25afce14220bc24f9dade0a1787f185cecf96bfba7847cd8"
++dependencies = [
++ "clap 3.2.2",
++]
++
++[[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 = "cpufeatures"
+ version = "0.2.1"
+@@ -222,9 +256,9 @@ dependencies = [
+ 
+ [[package]]
+ name = "env_logger"
+-version = "0.7.1"
++version = "0.9.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
++checksum = "c90bf5f19754d10198ccb95b70664fc925bd1fc090a0fd9a6ebc54acc8cd6272"
+ dependencies = [
+  "atty",
+  "humantime",
+@@ -385,15 +419,6 @@ dependencies = [
+  "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"
+@@ -471,7 +496,7 @@ dependencies = [
+  "log",
+  "pest",
+  "pest_derive",
+- "quick-error 2.0.1",
++ "quick-error",
+  "serde",
+  "serde_json",
+ ]
+@@ -575,12 +600,9 @@ checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440"
+ 
+ [[package]]
+ name = "humantime"
+-version = "1.3.0"
++version = "2.1.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
+-dependencies = [
+- "quick-error 1.2.3",
+-]
++checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+ 
+ [[package]]
+ name = "hyper"
+@@ -822,13 +844,14 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+ 
+ [[package]]
+ name = "mdbook"
+-version = "0.4.15"
++version = "0.4.21"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "241f10687eb3b4e0634b3b4e423f97c5f1efbd69dc9522e24a8b94583eeec3c6"
++checksum = "23f3e133c6d515528745ffd3b9f0c7d975ae039f0b6abb099f2168daa2afb4f9"
+ dependencies = [
+  "anyhow",
+  "chrono",
+- "clap",
++ "clap 3.2.2",
++ "clap_complete",
+  "env_logger",
+  "handlebars",
+  "lazy_static",
+@@ -838,7 +861,6 @@ dependencies = [
+  "pulldown-cmark",
+  "regex",
+  "serde",
+- "serde_derive",
+  "serde_json",
+  "shlex",
+  "tempfile",
+@@ -1062,6 +1084,12 @@ dependencies = [
+  "winapi 0.3.9",
+ ]
+ 
++[[package]]
++name = "os_str_bytes"
++version = "6.3.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
++
+ [[package]]
+ name = "parking_lot"
+ version = "0.11.2"
+@@ -1258,17 +1286,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "34f197a544b0c9ab3ae46c359a7ec9cbbb5c7bf97054266fecb7ead794a181d6"
+ dependencies = [
+  "bitflags",
+- "getopts",
+  "memchr",
+  "unicase",
+ ]
+ 
+-[[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"
+@@ -1386,9 +1407,9 @@ dependencies = [
+ 
+ [[package]]
+ name = "regex"
+-version = "1.5.4"
++version = "1.6.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
++checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b"
+ dependencies = [
+  "aho-corasick",
+  "memchr",
+@@ -1403,9 +1424,9 @@ checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+ 
+ [[package]]
+ name = "regex-syntax"
+-version = "0.6.25"
++version = "0.6.27"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
++checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244"
+ 
+ [[package]]
+ name = "remove_dir_all"
+@@ -1577,13 +1598,19 @@ 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 = "structopt"
+ version = "0.3.26"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+ dependencies = [
+- "clap",
++ "clap 2.33.3",
+  "lazy_static",
+  "structopt-derive",
+ ]
+@@ -1673,6 +1700,12 @@ dependencies = [
+  "unicode-width",
+ ]
+ 
++[[package]]
++name = "textwrap"
++version = "0.15.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16"
++
+ [[package]]
+ name = "thiserror"
+ version = "1.0.30"
+diff --git a/Cargo.toml b/Cargo.toml
+index dfeeb45..8b1e4e5 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -38,7 +38,7 @@ handlebars = "4.2.1"
+ ignore = "0.4.18"
+ lazy_static = "1.4.0"
+ lazy-regex = "2.2.2"
+-mdbook = { version = "0.4.15", default-features = false }
++mdbook = { version = "0.4.21", default-features = false }
+ notify = "4.0.17"
+ pest = "2.1.3"
+ pest_derive = "2.1.0"
+diff --git a/src/renderer/mdzk_renderer.rs b/src/renderer/mdzk_renderer.rs
+index 55b2423..f8480ca 100644
+--- a/src/renderer/mdzk_renderer.rs
++++ b/src/renderer/mdzk_renderer.rs
+@@ -92,7 +92,7 @@ impl Renderer for HtmlMdzk {
+             "description",
+             json!(ctx.config.book.description.clone().unwrap_or_default()),
+         );
+-        if let Some(ref livereload) = html_config.livereload_url {
++        if let Some(ref livereload) = html_config.live_reload_endpoint {
+             data.insert("livereload", json!(livereload));
+         }
+         data.insert("fold_enable", json!(html_config.fold.enable));
diff --git a/nixpkgs/pkgs/applications/misc/mediaelch/default.nix b/nixpkgs/pkgs/applications/misc/mediaelch/default.nix
new file mode 100644
index 000000000000..bc85e674c575
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mediaelch/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+
+, cmake
+, qttools
+, wrapQtAppsHook
+
+, curl
+, ffmpeg
+, libmediainfo
+, libzen
+, qt5compat ? null # qt6 only
+, qtbase
+, qtdeclarative
+, qtmultimedia
+, qtsvg
+, qtwayland
+, quazip
+}:
+let
+  qtVersion = lib.versions.major qtbase.version;
+in
+stdenv.mkDerivation rec {
+  pname = "mediaelch";
+  version = "2.10.6";
+
+  src = fetchFromGitHub {
+    owner = "Komet";
+    repo = "MediaElch";
+    rev = "v${version}";
+    hash = "sha256-qc7HaCMAmALY9MoIKmaCWF0cnwBBFDAXwqiBzwzu2bU=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    qttools
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    curl
+    ffmpeg
+    libmediainfo
+    libzen
+    qtbase
+    qtdeclarative
+    qtmultimedia
+    qtsvg
+    qtwayland
+    quazip
+  ] ++ lib.optionals (qtVersion == "6") [
+    qt5compat
+  ];
+
+
+  cmakeFlags = [
+    "-DDISABLE_UPDATER=ON"
+    "-DUSE_EXTERN_QUAZIP=ON"
+    "-DMEDIAELCH_FORCE_QT${qtVersion}=ON"
+  ];
+
+  # libmediainfo.so.0 is loaded dynamically
+  qtWrapperArgs = [
+    "--prefix LD_LIBRARY_PATH : ${libmediainfo}/lib"
+  ];
+
+  meta = with lib; {
+    homepage = "https://mediaelch.de/mediaelch/";
+    description = "Media Manager for Kodi";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ stunkymonkey ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mediainfo-gui/default.nix b/nixpkgs/pkgs/applications/misc/mediainfo-gui/default.nix
new file mode 100644
index 000000000000..e4b734b89aac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mediainfo-gui/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, libmediainfo, wxGTK32
+, desktop-file-utils, libSM, imagemagick, darwin }:
+
+let
+  inherit (darwin.apple_sdk.frameworks) Cocoa;
+in
+stdenv.mkDerivation rec {
+  pname = "mediainfo-gui";
+  version = "23.11";
+
+  src = fetchurl {
+    url = "https://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
+    hash = "sha256-gByxsNG//MEibeymISoe41Mi6LsSYwozu7B6kqioycM=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ libmediainfo wxGTK32 desktop-file-utils libSM imagemagick ]
+    ++ lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  sourceRoot = "MediaInfo/Project/GNU/GUI";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Supplies technical and tag information about a video or audio file (GUI version)";
+    longDescription = ''
+      MediaInfo is a convenient unified display of the most relevant technical
+      and tag data for video and audio files.
+    '';
+    homepage = "https://mediaarea.net/";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.devhell ];
+    mainProgram = "mediainfo-gui";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mediainfo/default.nix b/nixpkgs/pkgs/applications/misc/mediainfo/default.nix
new file mode 100644
index 000000000000..b6a5166bd213
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mediainfo/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, autoreconfHook, pkg-config, libzen, libmediainfo, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "mediainfo";
+  version = "23.11";
+
+  src = fetchurl {
+    url = "https://mediaarea.net/download/source/mediainfo/${version}/mediainfo_${version}.tar.xz";
+    hash = "sha256-gByxsNG//MEibeymISoe41Mi6LsSYwozu7B6kqioycM=";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ libzen libmediainfo zlib ];
+
+  sourceRoot = "MediaInfo/Project/GNU/CLI";
+
+  configureFlags = [ "--with-libmediainfo=${libmediainfo}" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    description = "Supplies technical and tag information about a video or audio file";
+    longDescription = ''
+      MediaInfo is a convenient unified display of the most relevant technical
+      and tag data for video and audio files.
+    '';
+    homepage = "https://mediaarea.net/";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.devhell ];
+    mainProgram = "mediainfo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/meerk40t/camera.nix b/nixpkgs/pkgs/applications/misc/meerk40t/camera.nix
new file mode 100644
index 000000000000..ab2a70ad8eb2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/meerk40t/camera.nix
@@ -0,0 +1,39 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+let
+  inherit (python3.pkgs) buildPythonPackage;
+in
+buildPythonPackage rec {
+  pname = "meerk40t-camera";
+  version = "0.1.9";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-uGCBHdgWoorVX2XqMCg0YBweb00sQ9ZSbJe8rlGeovs=";
+  };
+
+  postPatch = ''
+    sed -i '/meerk40t/d' setup.py
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    opencv4
+  ];
+
+  pythonImportsCheck = [
+    "camera"
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "MeerK40t camera plugin";
+    license = licenses.mit;
+    homepage = "https://github.com/meerk40t/meerk40t-camera";
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/meerk40t/default.nix b/nixpkgs/pkgs/applications/misc/meerk40t/default.nix
new file mode 100644
index 000000000000..b07133ecbbc2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/meerk40t/default.nix
@@ -0,0 +1,81 @@
+{ lib
+, fetchFromGitHub
+, meerk40t-camera
+, python3Packages
+, gtk3
+, wrapGAppsHook
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "MeerK40t";
+  version = "0.9.4000";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "meerk40t";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-ceDnnHdmJ6VOrM9pSxjeKQ748E8fsIqSQ36qFpXc9Ac=";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+  ] ++ (with python3Packages; [
+    setuptools
+  ]);
+
+  # prevent double wrapping
+  dontWrapGApps = true;
+
+  # https://github.com/meerk40t/meerk40t/blob/main/setup.py
+  propagatedBuildInputs = with python3Packages; [
+    meerk40t-camera
+    numpy
+    pyserial
+    pyusb
+    setuptools
+    wxpython
+  ]
+  ++ lib.flatten (lib.attrValues passthru.optional-dependencies);
+
+  passthru.optional-dependencies = with python3Packages; {
+    cam = [
+      opencv4
+    ];
+    camhead = [
+      opencv4
+    ];
+    dxf = [
+      ezdxf
+    ];
+    gui = [
+      wxpython
+      pillow
+      opencv4
+      ezdxf
+    ];
+  };
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}"
+    )
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  nativeCheckInputs = with python3Packages; [
+    unittestCheckHook
+  ];
+
+  preCheck = ''
+    export HOME=$TMPDIR
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/meerk40t/meerk40t/releases/tag/${version}";
+    description = "MeerK40t LaserCutter Software";
+    homepage = "https://github.com/meerk40t/meerk40t";
+    license = licenses.mit;
+    maintainers = with maintainers; [ hexa ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/megacmd/default.nix b/nixpkgs/pkgs/applications/misc/megacmd/default.nix
new file mode 100644
index 000000000000..9875631466c3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/megacmd/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, stdenv
+, autoreconfHook
+, c-ares
+, cryptopp
+, curl
+, fetchFromGitHub
+  # build fails with latest ffmpeg, see https://github.com/meganz/MEGAcmd/issues/523.
+  # to be re-enabled when patch available
+  # , ffmpeg
+, freeimage
+, gcc-unwrapped
+, libmediainfo
+, libraw
+, libsodium
+, libuv
+, libzen
+, pcre-cpp
+, pkg-config
+, readline
+, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "megacmd";
+  version = "1.6.3";
+
+  src = fetchFromGitHub {
+    owner = "meganz";
+    repo = "MEGAcmd";
+    rev = "${version}_Linux";
+    sha256 = "sha256-JnxfFbM+NyeUrEMok62zlsQIxjrUvLLg4tUTiKPDZFc=";
+    fetchSubmodules = true;
+  };
+
+  enableParallelBuilding = true;
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [
+    c-ares
+    cryptopp
+    curl
+    # ffmpeg
+    freeimage
+    gcc-unwrapped
+    libmediainfo
+    libraw
+    libsodium
+    libuv
+    libzen
+    pcre-cpp
+    readline
+    sqlite
+  ];
+
+  configureFlags = [
+    "--disable-curl-checks"
+    "--disable-examples"
+    "--with-cares"
+    "--with-cryptopp"
+    "--with-curl"
+    # "--with-ffmpeg"
+    "--with-freeimage"
+    "--with-libmediainfo"
+    "--with-libuv"
+    "--with-libzen"
+    "--with-pcre"
+    "--with-readline"
+    "--with-sodium"
+    "--with-termcap"
+  ];
+
+  meta = with lib; {
+    description = "MEGA Command Line Interactive and Scriptable Application";
+    homepage = "https://mega.io/cmd";
+    license = with licenses; [ bsd2 gpl3Only ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    maintainers = with maintainers; [ lunik1 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/megasync/default.nix b/nixpkgs/pkgs/applications/misc/megasync/default.nix
new file mode 100644
index 000000000000..79800a6c46ee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/megasync/default.nix
@@ -0,0 +1,129 @@
+{ lib
+, stdenv
+, autoconf
+, automake
+, c-ares
+, cryptopp
+, curl
+, doxygen
+, fetchFromGitHub
+, ffmpeg
+, freeimage
+, libmediainfo
+, libraw
+, libsodium
+, libtool
+, libuv
+, libzen
+, lsb-release
+, mkDerivation
+, pkg-config
+, qtbase
+, qttools
+, qtx11extras
+, sqlite
+, swig
+, unzip
+, wget
+}:
+mkDerivation rec {
+  pname = "megasync";
+  version = "4.9.0.0";
+
+  src = fetchFromGitHub {
+    owner = "meganz";
+    repo = "MEGAsync";
+    rev = "v${version}_Linux";
+    sha256 = "sha256-s0E8kJ4PJmhaxVcWPCyCk/KbcX4V3IESdZhSosPlZuM=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    doxygen
+    libtool
+    lsb-release
+    pkg-config
+    qttools
+    swig
+    unzip
+  ];
+  buildInputs = [
+    c-ares
+    cryptopp
+    curl
+    ffmpeg
+    freeimage
+    libmediainfo
+    libraw
+    libsodium
+    libuv
+    libzen
+    qtbase
+    qtx11extras
+    sqlite
+    wget
+  ];
+
+  patches = [
+    # Distro and version targets attempt to use lsb_release which is broken
+    # (see issue: https://github.com/NixOS/nixpkgs/issues/22729)
+    ./noinstall-distro-version.patch
+    # megasync target is not part of the install rule thanks to a commented block
+    ./install-megasync.patch
+    ./ffmpeg_44.patch
+  ];
+
+  postPatch = ''
+    for file in $(find src/ -type f \( -iname configure -o -iname \*.sh \) ); do
+      substituteInPlace "$file" --replace "/bin/bash" "${stdenv.shell}"
+    done
+  '';
+
+  dontUseQmakeConfigure = true;
+  enableParallelBuilding = true;
+
+  preConfigure = ''
+    cd src/MEGASync/mega
+    ./autogen.sh
+  '';
+
+  configureFlags = [
+    "--disable-examples"
+    "--disable-java"
+    "--disable-php"
+    "--enable-chat"
+    "--with-cares"
+    "--with-cryptopp"
+    "--with-curl"
+    "--with-ffmpeg"
+    "--with-freeimage"
+    "--without-readline"
+    "--without-termcap"
+    "--with-sodium"
+    "--with-sqlite"
+    "--with-zlib"
+  ];
+
+  postConfigure = ''
+    cd ../..
+  '';
+
+  preBuild = ''
+    qmake CONFIG+="release" MEGA.pro
+    pushd MEGASync
+      lrelease MEGASync.pro
+      DESKTOP_DESTDIR="$out" qmake PREFIX="$out" -o Makefile MEGASync.pro CONFIG+=release
+    popd
+  '';
+
+  meta = with lib; {
+    description =
+      "Easy automated syncing between your computers and your MEGA Cloud Drive";
+    homepage = "https://mega.nz/";
+    license = licenses.unfree;
+    platforms = [ "i686-linux" "x86_64-linux" ];
+    maintainers = [ maintainers.michojel ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/megasync/ffmpeg_44.patch b/nixpkgs/pkgs/applications/misc/megasync/ffmpeg_44.patch
new file mode 100644
index 000000000000..901635e43f3e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/megasync/ffmpeg_44.patch
@@ -0,0 +1,14 @@
+Index: megasync-4.6.1.0/src/MEGASync/mega/src/gfx/freeimage.cpp
+===================================================================
+--- megasync-4.6.1.0.orig/src/MEGASync/mega/src/gfx/freeimage.cpp
++++ megasync-4.6.1.0/src/MEGASync/mega/src/gfx/freeimage.cpp
+@@ -253,7 +253,8 @@ bool GfxProcFreeImage::readbitmapFfmpeg(
+ 
+     // Force seeking to key frames
+     formatContext->seek2any = false;
+-    videoStream->skip_to_keyframe = true;
++    // no longer exposed in ffmpeg 4.4; the line above should be sufficient
++    //videoStream->skip_to_keyframe = true;
+     if (decoder->capabilities & CAP_TRUNCATED)
+     {
+         codecContext->flags |= CAP_TRUNCATED;
diff --git a/nixpkgs/pkgs/applications/misc/megasync/install-megasync.patch b/nixpkgs/pkgs/applications/misc/megasync/install-megasync.patch
new file mode 100644
index 000000000000..7d8748528e7f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/megasync/install-megasync.patch
@@ -0,0 +1,21 @@
+Index: source/src/MEGASync/MEGASync.pro
+===================================================================
+--- source.orig/src/MEGASync/MEGASync.pro
++++ source/src/MEGASync/MEGASync.pro
+@@ -28,11 +28,11 @@ unix:!macx {
+     TARGET = megasync
+ 
+ #    Uncomment the following if "make install" doesn't copy megasync in /usr/bin directory
+-#    isEmpty(PREFIX) {
+-#        PREFIX = /usr
+-#    }
+-#    target.path = $$PREFIX/bin
+-#    INSTALLS += target
++    isEmpty(PREFIX) {
++        PREFIX = /usr
++    }
++    target.path = $$PREFIX/bin
++    INSTALLS += target
+ }
+ else {
+     TARGET = MEGAsync
diff --git a/nixpkgs/pkgs/applications/misc/megasync/noinstall-distro-version.patch b/nixpkgs/pkgs/applications/misc/megasync/noinstall-distro-version.patch
new file mode 100644
index 000000000000..bbf100737bc4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/megasync/noinstall-distro-version.patch
@@ -0,0 +1,13 @@
+Index: source/src/MEGASync/platform/platform.pri
+===================================================================
+--- source.orig/src/MEGASync/platform/platform.pri
++++ source/src/MEGASync/platform/platform.pri
+@@ -37,7 +37,7 @@ unix:!macx {
+     system(command -v lsb_release): version.commands = lsb_release -rs > $$version.target
+ 	version.files = $$version.target
+ 
+-	INSTALLS += distro version
++	# INSTALLS += distro version
+ 
+     QT += dbus
+     SOURCES += $$PWD/linux/LinuxPlatform.cpp \
diff --git a/nixpkgs/pkgs/applications/misc/memo/default.nix b/nixpkgs/pkgs/applications/misc/memo/default.nix
new file mode 100644
index 000000000000..93ef8192f54b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/memo/default.nix
@@ -0,0 +1,53 @@
+{ fetchFromGitHub, silver-searcher, tree, man, lib, stdenv,
+  git,
+  pandocSupport ? true, pandoc ? null
+  , ... }:
+
+assert pandocSupport -> pandoc != null;
+
+stdenv.mkDerivation rec {
+
+  pname = "memo";
+
+  version = "0.8";
+
+  src = fetchFromGitHub {
+    owner  = "mrVanDalo";
+    repo   = "memo";
+    rev    = version;
+    sha256 = "0azx2bx6y7j0637fg3m8zigcw09zfm2mw9wjfg218sx88cm1wdkp";
+  };
+
+  installPhase = let
+    pandocReplacement = if pandocSupport then
+      "pandoc_cmd=${pandoc}/bin/pandoc"
+    else
+      "#pandoc_cmd=pandoc";
+  in ''
+    mkdir -p $out/{bin,share/man/man1,share/bash-completion/completions,share/zsh/site-functions}
+    substituteInPlace memo \
+      --replace "ack_cmd=ack"       "ack_cmd=${silver-searcher}/bin/ag" \
+      --replace "tree_cmd=tree"     "tree_cmd=${tree}/bin/tree" \
+      --replace "man_cmd=man"       "man_cmd=${man}/bin/man" \
+      --replace "git_cmd=git"       "git_cmd=${git}/bin/git" \
+      --replace "pandoc_cmd=pandoc" "${pandocReplacement}"
+    mv memo $out/bin/
+    mv doc/memo.1 $out/share/man/man1/memo.1
+    mv completion/bash/memo.sh $out/share/bash-completion/completions/memo.sh
+    mv completion/zsh/_memo    $out/share/zsh/site-functions/_memo
+  '';
+
+  meta = {
+    description = "A simple tool written in bash to memorize stuff";
+    longDescription = ''
+      A simple tool written in bash to memorize stuff.
+      Memo organizes is structured through topics which are folders in ~/memo.
+    '';
+    homepage = "http://palovandalo.com/memo/";
+    downloadPage = "https://github.com/mrVanDalo/memo/releases";
+    license = lib.licenses.gpl3;
+    maintainers = [ lib.maintainers.mrVanDalo ];
+    platforms = lib.platforms.all;
+    mainProgram = "memo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mencal/default.nix b/nixpkgs/pkgs/applications/misc/mencal/default.nix
new file mode 100644
index 000000000000..011db7455fcf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mencal/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "mencal";
+  version = "3.0";
+
+  src = fetchurl {
+    url = "http://kyberdigi.cz/projects/mencal/files/mencal-${version}.tar.gz";
+    sha256 = "9328d0b2f3f57847e8753c5184531f4832be7123d1b6623afdff892074c03080";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp mencal $out/bin/
+  '';
+
+  buildInputs = [ perl ];
+
+  meta = with lib; {
+    description = "Menstruation calendar";
+    longDescription = ''
+      Mencal is a simple variation of the well-known unix command cal.
+      The main difference is that you can have some periodically repeating
+      days highlighted in color. This can be used to track
+      menstruation (or other) cycles conveniently.
+    '';
+    homepage = "http://www.kyberdigi.cz/projects/mencal/english.html";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.mmahut ];
+    platforms = platforms.all;
+    mainProgram = "mencal";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/menumaker/default.nix b/nixpkgs/pkgs/applications/misc/menumaker/default.nix
new file mode 100644
index 000000000000..c0958cd23537
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/menumaker/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchurl, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "menumaker";
+  version = "0.99.13";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/menumaker/${pname}-${version}.tar.gz";
+    sha256 = "sha256-JBXs5hnt1snbnB1hi7q7HBI7rNp0OoalLeIM0uJCdkE=";
+  };
+
+  format = "other";
+
+  meta = with lib; {
+    description = "Heuristics-driven menu generator for several window managers";
+    homepage = "https://menumaker.sourceforge.net";
+    license = licenses.bsd2;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mepo/default.nix b/nixpkgs/pkgs/applications/misc/mepo/default.nix
new file mode 100644
index 000000000000..23a57c343b4f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mepo/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, SDL2
+, SDL2_gfx
+, SDL2_image
+, SDL2_ttf
+, busybox
+, curl
+, findutils
+, geoclue2-with-demo-agent
+, gpsd
+, jq
+, makeWrapper
+, ncurses
+, pkg-config
+, util-linux
+, xwininfo
+, zenity
+, zig_0_11
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "mepo";
+  version = "1.2.0";
+
+  src = fetchFromSourcehut {
+    owner = "~mil";
+    repo = "mepo";
+    rev = finalAttrs.version;
+    hash = "sha256-sxN7yTnk3KDAkP/d3miKa2bEgB3AUaf9/M9ajJyRt3g=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    zig_0_11.hook
+    makeWrapper
+  ];
+
+  buildInputs = [
+    curl
+    SDL2
+    SDL2_gfx
+    SDL2_image
+    SDL2_ttf
+    jq
+    ncurses
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    install -d $out/share/man/man1
+    $out/bin/mepo -docman > $out/share/man/man1/mepo.1
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/bin/mepo_ui_menu_user_pin_updater.sh \
+      --replace /usr/libexec/geoclue-2.0 ${geoclue2-with-demo-agent}/libexec/geoclue-2.0
+    substituteInPlace $out/bin/mepo_ui_central_menu.sh \
+      --replace "grep mepo_" "grep '^\.mepo_\|^mepo_'" \
+      --replace " ls " " ls -a " #circumvent wrapping for script detection
+    for program in $out/bin/* ; do
+      wrapProgram $program \
+        --suffix PATH : $out/bin:${lib.makeBinPath ([
+          busybox
+          curl
+          findutils
+          gpsd
+          jq
+          ncurses
+          util-linux
+          xwininfo
+          zenity
+        ])}
+    done
+  '';
+
+  meta = {
+    homepage = "https://mepo.milesalan.com";
+    description = "Fast, simple, and hackable OSM map viewer";
+    longDescription = ''
+      Mepo is a fast, simple, and hackable OSM map viewer for desktop & mobile
+      Linux devices (like the PinePhone, Librem 5, postmarketOS devices etc.)
+      and both environment's various user interfaces (Wayland & X
+      inclusive). Environments supported include Phosh, Sxmo, Plasma Mobile,
+      desktop X, and desktop Wayland. Mepo works both offline and online,
+      features a minimalist both touch/mouse and keyboard compatible interface,
+      and offers a UNIX-philosophy inspired underlying design, exposing a
+      powerful command language called Mepolang capable of being scripted to
+      provide things like custom bounding-box search scripts, bookmarks, and
+      more.
+    '';
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ sikmir McSinyx laalsaas ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/merkaartor/default.nix b/nixpkgs/pkgs/applications/misc/merkaartor/default.nix
new file mode 100644
index 000000000000..52b4d78bb5a9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/merkaartor/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, pkg-config
+, qttools
+, wrapQtAppsHook
+, gdal
+, proj
+, qtsvg
+, qtwebengine
+, withGeoimage ? true, exiv2
+, withGpsdlib ? (!stdenv.isDarwin), gpsd
+, withLibproxy ? false, libproxy
+, withZbar ? false, zbar
+}:
+
+stdenv.mkDerivation rec {
+  pname = "merkaartor";
+  version = "0.19.0";
+
+  src = fetchFromGitHub {
+    owner = "openstreetmap";
+    repo = "merkaartor";
+    rev = version;
+    hash = "sha256-I3QNCXzwhEFa8aOdwl3UJV8MLZ9caN9wuaaVrGFRvbQ=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "exiv2-0.28.patch";
+      url = "https://github.com/openstreetmap/merkaartor/commit/1e20d2ccd743ea5f8c2358e4ae36fead8b9390fd.patch";
+      hash = "sha256-aHjJLKYvqz7V0QwUIg0SbentBe+DaCJusVqy4xRBVWo=";
+    })
+    # https://github.com/openstreetmap/merkaartor/pull/290
+    (fetchpatch {
+      url = "https://github.com/openstreetmap/merkaartor/commit/7dede77370d89e8e7586f6ed5af225f9b5bde6cf.patch";
+      hash = "sha256-3oDRPysVNvA50t/b9xOcVQgac3U1lDPrencanl4c6Zk=";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake pkg-config qttools wrapQtAppsHook ];
+
+  buildInputs = [ gdal proj qtsvg qtwebengine ]
+    ++ lib.optional withGeoimage exiv2
+    ++ lib.optional withGpsdlib gpsd
+    ++ lib.optional withLibproxy libproxy
+    ++ lib.optional withZbar zbar;
+
+  cmakeFlags = [
+    (lib.cmakeBool "GEOIMAGE" withGeoimage)
+    (lib.cmakeBool "GPSD" withGpsdlib)
+    (lib.cmakeBool "LIBPROXY" withLibproxy)
+    (lib.cmakeBool "WEBENGINE" true)
+    (lib.cmakeBool "ZBAR" withZbar)
+  ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p $out/{Applications,bin}
+    mv $out/merkaartor.app $out/Applications
+    makeWrapper $out/{Applications/merkaartor.app/Contents/MacOS,bin}/merkaartor
+  '';
+
+  meta = with lib; {
+    description = "OpenStreetMap editor";
+    homepage = "http://merkaartor.be/";
+    license = licenses.gpl2Plus;
+    mainProgram = "merkaartor";
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/metadata-cleaner/default.nix b/nixpkgs/pkgs/applications/misc/metadata-cleaner/default.nix
new file mode 100644
index 000000000000..88df68f55979
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/metadata-cleaner/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, python3
+, fetchFromGitLab
+, appstream
+, desktop-file-utils
+, glib
+, gobject-introspection
+, gtk4
+, itstool
+, libadwaita
+, librsvg
+, meson
+, ninja
+, pkg-config
+, poppler_gi
+, wrapGAppsHook4
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "metadata-cleaner";
+  version = "2.5.4";
+
+  format = "other";
+
+  src = fetchFromGitLab {
+    owner = "rmnvgr";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-2+ZY+ca/CTIdCiFrBOkMWKflzKjSYJ8yfwFkULNg7Xk=";
+  };
+
+  nativeBuildInputs = [
+    appstream
+    desktop-file-utils
+    glib # glib-compile-resources
+    gtk4 # gtk4-update-icon-cache
+    gobject-introspection
+    itstool
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+    librsvg
+    poppler_gi
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    mat2
+    pygobject3
+  ];
+
+  meta = with lib; {
+    description = "Python GTK application to view and clean metadata in files, using mat2";
+    homepage = "https://gitlab.com/rmnvgr/metadata-cleaner";
+    changelog = "https://gitlab.com/rmnvgr/metadata-cleaner/-/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ gpl3Plus cc-by-sa-40 ];
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/metamorphose2/default.nix b/nixpkgs/pkgs/applications/misc/metamorphose2/default.nix
new file mode 100644
index 000000000000..c5950e2e9df0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/metamorphose2/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, gettext
+, python3
+}:
+
+stdenv.mkDerivation {
+  pname = "metamorphose2";
+  version = "0.10.0beta";
+
+  # exif-py vendored via submodule
+  src = fetchFromGitHub {
+    owner = "timinaust";
+    repo = "metamorphose2";
+    rev = "ba0666dd02e4f3f58c1dadc309e7ec1cc13fe851";
+    sha256 = "0w9l1vyyswdhdwrmi71g23qyslvhg1xym4ksifd42vwf9dxy55qp";
+    fetchSubmodules = true;
+  };
+
+  postPatch = ''
+    rm -rf ./src/mutagen
+    substituteInPlace messages/Makefile \
+      --replace "\$(shell which msgfmt)" "${gettext}/bin/msgfmt"
+  '';
+
+  postInstall = ''
+    rm $out/bin/metamorphose2
+    makeWrapper ${python3.interpreter} $out/bin/metamorphose2 \
+      --prefix PYTHONPATH : $PYTHONPATH:$(toPythonPath "$out") \
+      --add-flags "-O $out/share/metamorphose2/metamorphose2.py -w=3"
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  propagatedBuildInputs = with python3.pkgs; [ mutagen wxpython pillow six ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "a graphical mass renaming program for files and folders";
+    homepage    = "https://github.com/timinaust/metamorphose2";
+    license     = with licenses; gpl3Plus;
+    maintainers = with maintainers; [ ramkromberg ];
+    platforms   = with platforms; linux;
+    mainProgram = "metamorphose2";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/metar/default.nix b/nixpkgs/pkgs/applications/misc/metar/default.nix
new file mode 100644
index 000000000000..d1edfb6a761f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/metar/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, curl }:
+
+stdenv.mkDerivation {
+  pname = "metar";
+  version = "unstable-2017-02-17";
+
+  src = fetchFromGitHub {
+    owner = "keesL";
+    repo = "metar";
+    rev = "20e9ca69faea330f6c2493b6829131c24cb55147";
+    sha256 = "1fgrlnpasqf1ihh9y6zy6mzzybqx0lxvh7gmv03rjdb55dr42dxj";
+  };
+
+  buildInputs = [ curl ];
+
+  meta = with lib; {
+    homepage = "https://github.com/keesL/metar";
+    description = "Downloads weather reports and optionally decodes them";
+    longDescription = ''
+      METAR reports are meteorogical weather reports for aviation. Metar is a small
+      program which downloads weather reports for user-specified stations and
+      optionally decodes them into a human-readable format.
+
+      Currently, metar supports decoding date/time, wind, visibility, cloud layers,
+      temperature, air pressure and weather phenomena, such as rain, fog, etc. Also,
+      more work in the area of clouds need to be done, as support for Cumulus or
+      Cumulunimbus is not yet decoded.
+    '';
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ zalakain ];
+    mainProgram = "metar";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/michabo/default.nix b/nixpkgs/pkgs/applications/misc/michabo/default.nix
new file mode 100644
index 000000000000..c356dc19786d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/michabo/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, mkDerivation
+, makeDesktopItem
+, fetchFromGitLab
+, qmake
+# qt
+, qtbase
+, qtwebsockets
+}:
+
+let
+  desktopItem = makeDesktopItem {
+    name = "Michabo";
+    desktopName = "Michabo";
+    exec = "Michabo";
+  };
+
+in mkDerivation rec {
+  pname = "michabo";
+  version = "0.1";
+
+  src = fetchFromGitLab {
+    domain = "git.pleroma.social";
+    owner = "kaniini";
+    repo = "michabo";
+    rev = "v${version}";
+    sha256 = "0pl4ymdb36r0kwlclfjjp6b1qml3fm9ql7ag5inprny5y8vcjpzn";
+  };
+
+  nativeBuildInputs = [
+    qmake
+  ];
+  buildInputs = [
+    qtbase
+    qtwebsockets
+  ];
+
+  qmakeFlags = [ "michabo.pro" "DESTDIR=${placeholder "out"}/bin" ];
+
+  postInstall = ''
+    ln -s ${desktopItem}/share $out/share
+  '';
+
+  meta = with lib; {
+    description = "A native desktop app for Pleroma and Mastodon servers";
+    homepage = "https://git.pleroma.social/kaniini/michabo";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/milu/default.nix b/nixpkgs/pkgs/applications/misc/milu/default.nix
new file mode 100644
index 000000000000..b05a1c815baa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/milu/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, unzip, pkg-config, glib, llvmPackages }:
+
+stdenv.mkDerivation {
+  pname = "milu-nightly";
+  version = "2016-05-09";
+
+  src = fetchFromGitHub {
+    sha256 = "14cglw04cliwlpvw7qrs6rfm5sv6qa558d7iby5ng3wdjcwx43nk";
+    rev = "b5f2521859c0319d321ad3c1ad793b826ab5f6e1";
+    repo = "Milu";
+    owner = "yuejia";
+  };
+
+  hardeningDisable = [ "format" ];
+
+  preConfigure = ''
+    sed -i 's#/usr/bin/##g' Makefile
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp bin/milu $out/bin
+  '';
+
+  nativeBuildInputs = [ pkg-config unzip ];
+  buildInputs = [
+     glib
+     llvmPackages.libclang
+  ];
+
+  meta = {
+    description = "Higher Order Mutation Testing Tool for C and C++ programs";
+    homepage = "https://github.com/yuejia/Milu";
+    license = lib.licenses.bsd2;
+    platforms = lib.platforms.linux;
+    maintainers = [ lib.maintainers.vrthra ];
+    mainProgram = "milu";
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/minder/default.nix b/nixpkgs/pkgs/applications/misc/minder/default.nix
new file mode 100644
index 000000000000..a6f3130f9f1e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/minder/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, python3
+, shared-mime-info
+, vala
+, wrapGAppsHook
+, cairo
+, discount
+, glib
+, gtk3
+, gtksourceview4
+, hicolor-icon-theme # for setup-hook
+, json-glib
+, libarchive
+, libgee
+, libhandy
+, libxml2
+, pantheon
+}:
+
+stdenv.mkDerivation rec {
+  pname = "minder";
+  version = "1.16.3";
+
+  src = fetchFromGitHub {
+    owner = "phase1geo";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-YDsWWC4exh+9V87WyjdMdCH1arjBct3oEXbvaFyAaMY=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    python3
+    shared-mime-info
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    cairo
+    discount
+    glib
+    gtk3
+    gtksourceview4
+    hicolor-icon-theme
+    json-glib
+    libarchive
+    libgee
+    libhandy
+    libxml2
+    pantheon.granite
+  ];
+
+  postPatch = ''
+    chmod +x meson/post_install.py
+    patchShebangs meson/post_install.py
+  '';
+
+  postFixup = ''
+    for x in $out/bin/*; do
+      ln -vrs $x "$out/bin/''${x##*.}"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Mind-mapping application for elementary OS";
+    homepage = "https://github.com/phase1geo/Minder";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dtzWill ] ++ teams.pantheon.members;
+    mainProgram = "com.github.phase1geo.minder";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/minigalaxy/default.nix b/nixpkgs/pkgs/applications/misc/minigalaxy/default.nix
new file mode 100644
index 000000000000..ad694c01cdcb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/minigalaxy/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, fetchFromGitHub
+, docutils
+, gettext
+, glibcLocales
+, glib-networking
+, gobject-introspection
+, gtk3
+, python3
+, python3Packages
+, steam-run
+, unzip
+, webkitgtk
+, wrapGAppsHook
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "minigalaxy";
+  version = "1.2.2";
+
+  src = fetchFromGitHub {
+    owner = "sharkwouter";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-bpNtdMYBl2dJ4PQsxkhm/Y+3A0dD/Y2XC0VaUYyRhvM=";
+  };
+
+  checkPhase = ''
+    runHook preCheck
+    env HOME=$PWD LC_ALL=en_US.UTF-8 pytest
+    runHook postCheck
+  '';
+
+  nativeBuildInputs = [
+    gettext
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    glib-networking
+    gtk3
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    glibcLocales
+    pytest
+    tox
+  ];
+
+  pythonPath = [
+    docutils
+    python3.pkgs.pygobject3
+    python3.pkgs.requests
+    python3.pkgs.setuptools
+    python3.pkgs.simplejson
+    steam-run
+    unzip
+    webkitgtk
+  ];
+
+  # Run Linux games using the Steam Runtime by using steam-run in the wrapper
+  # FIXME: not working with makeBinaryWrapper
+  postFixup = ''
+    sed -e 's#exec -a "$0"#exec -a "$0" ${steam-run}/bin/steam-run#' -i $out/bin/minigalaxy
+  '';
+
+  meta = with lib; {
+    homepage = "https://sharkwouter.github.io/minigalaxy/";
+    changelog = "https://github.com/sharkwouter/minigalaxy/blob/${version}/CHANGELOG.md";
+    downloadPage = "https://github.com/sharkwouter/minigalaxy/releases";
+    description = "A simple GOG client for Linux";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mission-center/Cargo.lock b/nixpkgs/pkgs/applications/misc/mission-center/Cargo.lock
new file mode 100644
index 000000000000..f7517597b0c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mission-center/Cargo.lock
@@ -0,0 +1,2146 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler32"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234"
+
+[[package]]
+name = "ahash"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8fd72866655d1904d6b0997d0b07ba561047d070fbe29de039031c641b61217"
+
+[[package]]
+name = "ahash"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if 1.0.0",
+ "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 = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[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"
+
+[[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",
+ "futures-core",
+]
+
+[[package]]
+name = "async-lock"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
+dependencies = [
+ "event-listener",
+]
+
+[[package]]
+name = "async-task"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1"
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[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 = "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.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
+dependencies = [
+ "async-channel",
+ "async-lock",
+ "async-task",
+ "fastrand",
+ "futures-io",
+ "futures-lite",
+ "piper",
+ "tracing",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "byte-slice-cast"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0a5e3906bcbf133e33c1d4d95afc664ad37fbdb9f6568d8043e7ea8c27d93d3"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "cairo-rs"
+version = "0.18.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f33613627f0dea6a731b0605101fad59ba4f193a52c96c4687728d822605a8a1"
+dependencies = [
+ "bitflags 2.4.1",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03915af431787e6ffdcc74c645077518c6b6e01f80b761e0fbbfa288536311b3"
+dependencies = [
+ "smallvec",
+ "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 = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "concurrent-queue"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+dependencies = [
+ "crossbeam-utils 0.8.16",
+]
+
+[[package]]
+name = "const-random"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a"
+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 = "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.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+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 = "crossbeam-channel"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87"
+dependencies = [
+ "crossbeam-utils 0.7.2",
+ "maybe-uninit",
+]
+
+[[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",
+ "cfg-if 1.0.0",
+ "crossbeam-utils 0.8.16",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
+dependencies = [
+ "autocfg",
+ "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 = "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",
+ "typenum",
+]
+
+[[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 = "deflate"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
+[[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 = "dlv-list"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f"
+dependencies = [
+ "const-random",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
+[[package]]
+name = "equivalent"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
+
+[[package]]
+name = "errno-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8f7083207e75d4435df450dc6413612d97fe5a441477aba02484f9f7f77057e"
+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 = "fallible-iterator"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649"
+
+[[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 = "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 = "futures-channel"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+dependencies = [
+ "futures-core",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+
+[[package]]
+name = "futures-lite"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "futures-task"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+
+[[package]]
+name = "futures-util"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+dependencies = [
+ "futures-core",
+ "futures-macro",
+ "futures-task",
+ "pin-project-lite",
+ "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 = "gdk-pixbuf"
+version = "0.18.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "446f32b74d22c33b7b258d4af4ffde53c2bf96ca2e29abdf1a785fe59bd6c82c"
+dependencies = [
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7edb019ad581f8ecf8ea8e4baa6df7c483a95b5a59be3140be6a9c3b0c632af6"
+dependencies = [
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk4-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk4-sys"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[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.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gettext-rs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e49ea8a8fad198aaa1f9655a2524b64b70eb06b2f3ff37da407566c93054f364"
+dependencies = [
+ "gettext-sys",
+ "locale_config",
+]
+
+[[package]]
+name = "gettext-sys"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c63ce2e00f56a206778276704bbe38564c8695249fdc8f354b4ef71c57c3839d"
+dependencies = [
+ "cc",
+ "temp-dir",
+]
+
+[[package]]
+name = "gio"
+version = "0.18.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "47d809baf02bdf1b5ef4ad3bf60dd9d4977149db4612b7bbb58e56aef168193b"
+dependencies = [
+ "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.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "gl"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a94edab108827d67608095e269cf862e60d920f144a5026d3dbcfd8b877fb404"
+dependencies = [
+ "gl_generator",
+]
+
+[[package]]
+name = "gl_generator"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
+dependencies = [
+ "khronos_api",
+ "log",
+ "xml-rs",
+]
+
+[[package]]
+name = "gl_loader"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e32d96dd5f881490e537041d5532320812ba096097f07fccb4626578da0b99d3"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "glib"
+version = "0.18.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58cf801b6f7829fa76db37449ab67c9c98a2b1bf21076d9113225621e61a0fa6"
+dependencies = [
+ "bitflags 2.4.1",
+ "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.18.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72793962ceece3863c2965d7f10c8786323b17c7adea75a515809fa20ab799a5"
+dependencies = [
+ "heck",
+ "proc-macro-crate 2.0.0",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "graphene-rs"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b2228cda1505613a7a956cca69076892cfbda84fc2b7a62b94a41a272c0c401"
+dependencies = [
+ "glib",
+ "graphene-sys",
+ "libc",
+]
+
+[[package]]
+name = "graphene-sys"
+version = "0.18.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc4144cee8fc8788f2a9b73dc5f1d4e1189d1f95305c4cb7bd9c1af1cfa31f59"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gsk4"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d958e351d2f210309b32d081c832d7de0aca0b077aa10d88336c6379bd01f7e"
+dependencies = [
+ "cairo-rs",
+ "gdk4",
+ "glib",
+ "graphene-rs",
+ "gsk4-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gsk4-sys"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12bd9e3effea989f020e8f1ff3fa3b8c63ba93d43b899c11a118868853a56d55"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk4-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk4"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aeb51aa3e9728575a053e1f43543cd9992ac2477e1b186ad824fd4adfb70842"
+dependencies = [
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "graphene-rs",
+ "gsk4",
+ "gtk4-macros",
+ "gtk4-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gtk4-macros"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d57ec49cf9b657f69a05bca8027cff0a8dfd0c49e812be026fc7311f2163832f"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate 1.3.1",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "gtk4-sys"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54d8c4aa23638ce9faa2caf7e2a27d4a1295af2155c8e8d28c4d4eeca7a65eb8"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "gsk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[package]]
+name = "hashbrown"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96282e96bfcd3da0d3aa9938bedf1e50df3269b6db08b4876d2da0bb1a0841cf"
+dependencies = [
+ "ahash 0.3.8",
+ "autocfg",
+ "serde",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
+dependencies = [
+ "ahash 0.8.6",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
+dependencies = [
+ "hashbrown 0.14.2",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "image"
+version = "0.23.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+ "png",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.2",
+]
+
+[[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",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "interprocess"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81f2533f3be42fffe3b5e63b71aeca416c1c3bc33e4e27be018521e76b1f38fb"
+dependencies = [
+ "blocking",
+ "cfg-if 1.0.0",
+ "futures-core",
+ "futures-io",
+ "intmap",
+ "libc",
+ "once_cell",
+ "rustc_version",
+ "spinning",
+ "thiserror",
+ "to_method",
+ "winapi",
+]
+
+[[package]]
+name = "intmap"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae52f28f45ac2bc96edb7714de995cffc174a395fb0abf5bff453587c980d7b9"
+
+[[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.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "khronos_api"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libadwaita"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fe7e70c06507ed10a16cda707f358fbe60fe0dc237498f78c686ade92fd979c"
+dependencies = [
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "libadwaita-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "libadwaita-sys"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e10aaa38de1d53374f90deeb4535209adc40cc5dba37f9704724169bceec69a"
+dependencies = [
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[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 = "libsqlite3-sys"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "libudev-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[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"
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[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.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[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.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
+dependencies = [
+ "adler32",
+]
+
+[[package]]
+name = "missioncenter"
+version = "0.4.4"
+dependencies = [
+ "arrayvec 0.7.4",
+ "dbus",
+ "errno-sys",
+ "gettext-rs",
+ "gl",
+ "gl_loader",
+ "gtk4",
+ "interprocess",
+ "lazy_static",
+ "libadwaita",
+ "libc",
+ "libudev-sys",
+ "pathfinder_canvas",
+ "pathfinder_color",
+ "pathfinder_content",
+ "pathfinder_geometry",
+ "pathfinder_gl",
+ "pathfinder_gpu",
+ "pathfinder_renderer",
+ "pathfinder_resources",
+ "raw-cpuid",
+ "regex",
+ "rusqlite",
+ "rust-ini",
+ "serde",
+ "serde_json",
+ "sha2",
+ "shared_memory_extended",
+ "sysinfo",
+ "textdistance",
+ "thiserror",
+]
+
+[[package]]
+name = "nix"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if 1.0.0",
+ "libc",
+]
+
+[[package]]
+name = "ntapi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4"
+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-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.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+dependencies = [
+ "autocfg",
+]
+
+[[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.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[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.2",
+]
+
+[[package]]
+name = "pango"
+version = "0.18.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4"
+dependencies = [
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "pathfinder_canvas"
+version = "0.5.0"
+source = "git+https://github.com/kicsyromy/pathfinder?rev=ec56924f660e6faa83c81c6b62b3c69b9a9fa00e#ec56924f660e6faa83c81c6b62b3c69b9a9fa00e"
+dependencies = [
+ "pathfinder_color",
+ "pathfinder_content",
+ "pathfinder_geometry",
+ "pathfinder_renderer",
+]
+
+[[package]]
+name = "pathfinder_color"
+version = "0.5.0"
+source = "git+https://github.com/kicsyromy/pathfinder?rev=ec56924f660e6faa83c81c6b62b3c69b9a9fa00e#ec56924f660e6faa83c81c6b62b3c69b9a9fa00e"
+dependencies = [
+ "pathfinder_simd",
+]
+
+[[package]]
+name = "pathfinder_content"
+version = "0.5.0"
+source = "git+https://github.com/kicsyromy/pathfinder?rev=ec56924f660e6faa83c81c6b62b3c69b9a9fa00e#ec56924f660e6faa83c81c6b62b3c69b9a9fa00e"
+dependencies = [
+ "arrayvec 0.5.2",
+ "bitflags 1.3.2",
+ "image",
+ "log",
+ "pathfinder_color",
+ "pathfinder_geometry",
+ "pathfinder_simd",
+ "smallvec",
+]
+
+[[package]]
+name = "pathfinder_geometry"
+version = "0.5.1"
+source = "git+https://github.com/kicsyromy/pathfinder?rev=ec56924f660e6faa83c81c6b62b3c69b9a9fa00e#ec56924f660e6faa83c81c6b62b3c69b9a9fa00e"
+dependencies = [
+ "log",
+ "pathfinder_simd",
+]
+
+[[package]]
+name = "pathfinder_gl"
+version = "0.5.0"
+source = "git+https://github.com/kicsyromy/pathfinder?rev=ec56924f660e6faa83c81c6b62b3c69b9a9fa00e#ec56924f660e6faa83c81c6b62b3c69b9a9fa00e"
+dependencies = [
+ "gl",
+ "half",
+ "log",
+ "pathfinder_geometry",
+ "pathfinder_gpu",
+ "pathfinder_resources",
+ "pathfinder_simd",
+]
+
+[[package]]
+name = "pathfinder_gpu"
+version = "0.5.0"
+source = "git+https://github.com/kicsyromy/pathfinder?rev=ec56924f660e6faa83c81c6b62b3c69b9a9fa00e#ec56924f660e6faa83c81c6b62b3c69b9a9fa00e"
+dependencies = [
+ "bitflags 1.3.2",
+ "fxhash",
+ "half",
+ "image",
+ "instant",
+ "log",
+ "pathfinder_color",
+ "pathfinder_geometry",
+ "pathfinder_resources",
+ "pathfinder_simd",
+]
+
+[[package]]
+name = "pathfinder_renderer"
+version = "0.5.0"
+source = "git+https://github.com/kicsyromy/pathfinder?rev=ec56924f660e6faa83c81c6b62b3c69b9a9fa00e#ec56924f660e6faa83c81c6b62b3c69b9a9fa00e"
+dependencies = [
+ "bitflags 1.3.2",
+ "byte-slice-cast",
+ "byteorder",
+ "crossbeam-channel",
+ "fxhash",
+ "half",
+ "hashbrown 0.7.2",
+ "instant",
+ "log",
+ "pathfinder_color",
+ "pathfinder_content",
+ "pathfinder_geometry",
+ "pathfinder_gpu",
+ "pathfinder_resources",
+ "pathfinder_simd",
+ "pathfinder_ui",
+ "rayon",
+ "serde",
+ "serde_json",
+ "smallvec",
+ "vec_map",
+]
+
+[[package]]
+name = "pathfinder_resources"
+version = "0.5.0"
+source = "git+https://github.com/kicsyromy/pathfinder?rev=ec56924f660e6faa83c81c6b62b3c69b9a9fa00e#ec56924f660e6faa83c81c6b62b3c69b9a9fa00e"
+
+[[package]]
+name = "pathfinder_simd"
+version = "0.5.2"
+source = "git+https://github.com/kicsyromy/pathfinder?rev=ec56924f660e6faa83c81c6b62b3c69b9a9fa00e#ec56924f660e6faa83c81c6b62b3c69b9a9fa00e"
+dependencies = [
+ "rustc_version",
+]
+
+[[package]]
+name = "pathfinder_ui"
+version = "0.5.0"
+source = "git+https://github.com/kicsyromy/pathfinder?rev=ec56924f660e6faa83c81c6b62b3c69b9a9fa00e#ec56924f660e6faa83c81c6b62b3c69b9a9fa00e"
+dependencies = [
+ "hashbrown 0.7.2",
+ "pathfinder_color",
+ "pathfinder_geometry",
+ "pathfinder_gpu",
+ "pathfinder_resources",
+ "pathfinder_simd",
+ "serde",
+ "serde_derive",
+ "serde_json",
+]
+
+[[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",
+ "futures-io",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+
+[[package]]
+name = "png"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "deflate",
+ "miniz_oxide",
+]
+
+[[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 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",
+ "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.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+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 = "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 = "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 = "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 0.8.16",
+]
+
+[[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 = "rusqlite"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d"
+dependencies = [
+ "bitflags 2.4.1",
+ "fallible-iterator",
+ "fallible-streaming-iterator",
+ "hashlink",
+ "libsqlite3-sys",
+ "smallvec",
+]
+
+[[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 = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[package]]
+name = "scopeguard"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+
+[[package]]
+name = "serde"
+version = "1.0.192"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.192"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+dependencies = [
+ "serde",
+]
+
+[[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",
+]
+
+[[package]]
+name = "shared_memory_extended"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "004d7ece9a3be64f85471d50967710b0a146144225bed5f0abd0514a3bed086f"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "nix",
+ "rand",
+ "win-sys",
+]
+
+[[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 = "spinning"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d4f0e86297cad2658d92a707320d87bf4e6ae1050287f51d19b67ef3f153a7b"
+dependencies = [
+ "lock_api",
+]
+
+[[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.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sysinfo"
+version = "0.29.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5"
+dependencies = [
+ "cfg-if 1.0.0",
+ "core-foundation-sys",
+ "libc",
+ "ntapi",
+ "once_cell",
+ "winapi",
+]
+
+[[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",
+ "version-compare",
+]
+
+[[package]]
+name = "target-lexicon"
+version = "0.12.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+
+[[package]]
+name = "temp-dir"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
+
+[[package]]
+name = "textdistance"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d321c8576c2b47e43953e9cce236550d4cd6af0a6ce518fe084340082ca6037b"
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "to_method"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7c4ceeeca15c8384bbc3e011dbd8fccb7f068a440b752b7d9b32ceb0ca0e2e8"
+
+[[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.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+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-core",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
+
+[[package]]
+name = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[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-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.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "wasm-bindgen-macro",
+]
+
+[[package]]
+name = "wasm-bindgen-backend"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217"
+dependencies = [
+ "bumpalo",
+ "log",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+ "wasm-bindgen-backend",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.88"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b"
+
+[[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 = "win-sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b7b128a98c1cfa201b09eb49ba285887deb3cbe7466a98850eb1adabb452be5"
+dependencies = [
+ "windows",
+]
+
+[[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.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f"
+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.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9"
+
+[[package]]
+name = "winnow"
+version = "0.5.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a"
+
+[[package]]
+name = "zerocopy"
+version = "0.7.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8cd369a67c0edfef15010f980c3cbe45d7f651deac2cd67ce097cd801de16557"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2f140bda219a26ccc0cdb03dba58af72590c53b22642577d88a927bc5c87d6b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
diff --git a/nixpkgs/pkgs/applications/misc/mission-center/default.nix b/nixpkgs/pkgs/applications/misc/mission-center/default.nix
new file mode 100644
index 000000000000..8bfbb4298a1b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mission-center/default.nix
@@ -0,0 +1,150 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, fetchFromGitHub
+, cargo
+, libxml2
+, meson
+, ninja
+, pkg-config
+, python311
+, rustPlatform
+, symlinkJoin
+, rustc
+, wrapGAppsHook4
+, appstream-glib
+, blueprint-compiler
+, cairo
+, cmake
+, dbus
+, desktop-file-utils
+, gdk-pixbuf
+, gettext
+, glib
+, graphene
+, gtk4
+, libGL
+, libadwaita
+, libdrm
+, mesa
+, pango
+, sqlite
+, udev
+, wayland
+, dmidecode
+, vulkan-loader
+}:
+
+let
+  nvtop = fetchFromGitHub {
+    owner = "Syllo";
+    repo = "nvtop";
+    rev = "45a1796375cd617d16167869bb88e5e69c809468";
+    hash = "sha256-1P9pWXhgTHogO0DztxOsFKNwvTRRfDL3nzGmMANMC9w=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "mission-center";
+  version = "0.4.4";
+
+  src = fetchFromGitLab {
+    owner = "mission-center-devs";
+    repo = "mission-center";
+    rev = "v${version}";
+    hash = "sha256-J0wSu/jWpUJ7Ga6RecY4yLT7i5Ry1HiI+t30SAHOkMw=";
+  };
+
+  cargoDeps = symlinkJoin {
+    name = "cargo-vendor-dir";
+    paths = [
+      (rustPlatform.importCargoLock {
+        lockFile = ./Cargo.lock;
+        outputHashes = {
+          "pathfinder_canvas-0.5.0" = "sha256-qEp16TVggPtvFvDuUyWsS6rH6MeO6FW0K6BnACghaCg=";
+        };
+      })
+      (rustPlatform.importCargoLock {
+        lockFile = ./gatherer-Cargo.lock;
+      })
+    ];
+  };
+
+
+  nativeBuildInputs = [
+    blueprint-compiler
+    cargo
+    libxml2
+    meson
+    ninja
+    pkg-config
+    python311
+    rustPlatform.cargoSetupHook
+    rustc
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    appstream-glib
+    blueprint-compiler
+    cairo
+    cmake
+    dbus
+    desktop-file-utils
+    gdk-pixbuf
+    gettext
+    glib
+    graphene
+    gtk4
+    libGL
+    libadwaita
+    libdrm
+    mesa
+    pango
+    sqlite
+    udev
+    wayland
+  ];
+
+  postPatch = ''
+    substituteInPlace src/sys_info_v2/gatherer.rs \
+      --replace '"missioncenter-gatherer"' '"${placeholder "out"}/bin/missioncenter-gatherer"'
+
+    substituteInPlace src/sys_info_v2/mem_info.rs \
+      --replace '"dmidecode"' '"${dmidecode}/bin/dmidecode"'
+
+    substituteInPlace $cargoDepsCopy/gl_loader-*/src/glad.c \
+      --replace "libGL.so.1" "${libGL}/lib/libGL.so.1"
+
+    substituteInPlace $cargoDepsCopy/ash-*/src/entry.rs \
+      --replace '"libvulkan.so.1"' '"${vulkan-loader}/lib/libvulkan.so.1"'
+
+    SRC_GATHERER=$NIX_BUILD_TOP/source/src/sys_info_v2/gatherer
+    SRC_GATHERER_NVTOP=$SRC_GATHERER/3rdparty/nvtop
+
+    substituteInPlace $SRC_GATHERER_NVTOP/nvtop.json \
+      --replace "nvtop-45a1796375cd617d16167869bb88e5e69c809468" "nvtop-src"
+
+    GATHERER_BUILD_DEST=$NIX_BUILD_TOP/source/build/src/sys_info_v2/gatherer/src/debug/build/native
+    mkdir -p $GATHERER_BUILD_DEST
+    NVTOP_SRC=$GATHERER_BUILD_DEST/nvtop-src
+
+    cp -r --no-preserve=mode,ownership "${nvtop}" $NVTOP_SRC
+    pushd $NVTOP_SRC
+    mkdir -p include/libdrm
+    for patchfile in $(ls $SRC_GATHERER_NVTOP/patches/nvtop*.patch); do
+      patch -p1 < $patchfile
+    done
+    popd
+
+    patchShebangs data/hwdb/generate_hwdb.py
+  '';
+
+  meta = with lib; {
+    description = "Monitor your CPU, Memory, Disk, Network and GPU usage";
+    homepage = "https://gitlab.com/mission-center-devs/mission-center";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ GaetanLepage ];
+    platforms = platforms.linux;
+    mainProgram = "missioncenter";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mission-center/gatherer-Cargo.lock b/nixpkgs/pkgs/applications/misc/mission-center/gatherer-Cargo.lock
new file mode 100644
index 000000000000..c3487fe479b8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mission-center/gatherer-Cargo.lock
@@ -0,0 +1,1021 @@
+# 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 = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "arrayvec"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
+
+[[package]]
+name = "ash"
+version = "0.37.3+1.3.251"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "bincode"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
+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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+
+[[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 = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "cargo-util"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77042b5b585f701f1cfb4b6b12ebc02b9b0cefbc8dcce235906b6bf376d4245d"
+dependencies = [
+ "anyhow",
+ "core-foundation",
+ "filetime",
+ "hex",
+ "jobserver",
+ "libc 0.2.150",
+ "miow",
+ "same-file",
+ "sha2",
+ "shell-escape",
+ "tempfile",
+ "tracing",
+ "walkdir",
+ "windows-sys",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
+dependencies = [
+ "libc 0.2.150",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "const-random"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a"
+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 = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys",
+ "libc 0.2.150",
+]
+
+[[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.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+dependencies = [
+ "libc 0.2.150",
+]
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[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",
+ "typenum",
+]
+
+[[package]]
+name = "dbus"
+version = "0.9.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b"
+dependencies = [
+ "libc 0.2.150",
+ "libdbus-sys",
+ "winapi",
+]
+
+[[package]]
+name = "dbus-crossroads"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a4c83437187544ba5142427746835061b330446ca8902eabd70e4afb8f76de0"
+dependencies = [
+ "dbus",
+]
+
+[[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 = "dlv-list"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "442039f5147480ba31067cb00ada1adae6892028e40e45fc5de7b7df6dcc1b5f"
+dependencies = [
+ "const-random",
+]
+
+[[package]]
+name = "drm"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e58eefd79f5173683872c0c82d0f05c2dc3c583d631259f60bb7a323756b7ff2"
+dependencies = [
+ "bitflags 2.4.1",
+ "bytemuck",
+ "drm-ffi",
+ "drm-fourcc",
+ "rustix",
+]
+
+[[package]]
+name = "drm-ffi"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "220dd8c12ebf2b0cbaffa19e00de02f5f090d363fb900f16ea012c077eea1174"
+dependencies = [
+ "drm-sys",
+ "rustix",
+]
+
+[[package]]
+name = "drm-fourcc"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0aafbcdb8afc29c1a7ee5fbe53b5d62f4565b35a042a662ca9fecd0b54dae6f4"
+
+[[package]]
+name = "drm-sys"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5115283ec60c99da8a9e5dc3c55f27680211e974c948cb6f3b51f0373190503b"
+dependencies = [
+ "libc 0.2.150",
+ "linux-raw-sys 0.6.1",
+]
+
+[[package]]
+name = "egl"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a373bc9844200b1ff15bd1b245931d1c20d09d06e4ec09f361171f29a4b0752d"
+dependencies = [
+ "khronos",
+ "libc 0.2.150",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e"
+dependencies = [
+ "libc 0.2.150",
+ "windows-sys",
+]
+
+[[package]]
+name = "fastrand"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+
+[[package]]
+name = "filetime"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+dependencies = [
+ "cfg-if",
+ "libc 0.2.150",
+ "redox_syscall 0.3.5",
+ "windows-sys",
+]
+
+[[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 = "form_urlencoded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "gatherer"
+version = "0.4.4"
+dependencies = [
+ "anyhow",
+ "arrayvec",
+ "ash",
+ "bincode",
+ "cargo-util",
+ "cc",
+ "dbus",
+ "dbus-crossroads",
+ "drm",
+ "egl",
+ "flate2",
+ "gbm",
+ "lazy_static",
+ "libc 0.2.150",
+ "nix",
+ "pkg-config",
+ "rust-ini",
+ "serde",
+ "serde_json",
+ "sha2",
+ "tar",
+ "ureq",
+]
+
+[[package]]
+name = "gbm"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65dffaf38d96aa22cb748ccd9b1ffe624931e899f54c0225815ef7ac757a409f"
+dependencies = [
+ "bitflags 1.3.2",
+ "drm",
+ "drm-fourcc",
+ "gbm-sys",
+ "libc 0.2.150",
+]
+
+[[package]]
+name = "gbm-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fd2d6bf7c0143b38beece05f9a5c4c851a49a8434f62bf58ff28da92b0ddc58"
+dependencies = [
+ "libc 0.2.150",
+]
+
+[[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.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+dependencies = [
+ "cfg-if",
+ "libc 0.2.150",
+ "wasi",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+
+[[package]]
+name = "hex"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
+
+[[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 = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc 0.2.150",
+]
+
+[[package]]
+name = "khronos"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0711aaa80e6ba6eb1fa8978f1f46bfcb38ceb2f3f33f3736efbff39dac89f50"
+dependencies = [
+ "libc 0.1.12",
+]
+
+[[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.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e32a70cf75e5846d53a673923498228bbec6a8624708a9ea5645f075d6276122"
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[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.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da4a7ec558fa3b65e4c69b6af8df01fb9ad51ac69262335e1505276bc091935d"
+
+[[package]]
+name = "log"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "miow"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "359f76430b20a79f9e20e115b3428614e654f04fab314482fc0fda0ebd3c6044"
+dependencies = [
+ "windows-sys",
+]
+
+[[package]]
+name = "nix"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "libc 0.2.150",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "ordered-multimap"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4d6a8c22fc714f0c2373e6091bf6f5e9b37b1bc0b1184874b7e0a4e303d318f"
+dependencies = [
+ "dlv-list",
+ "hashbrown",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+
+[[package]]
+name = "pin-project-lite"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+
+[[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.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+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 = "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 = "ring"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
+dependencies = [
+ "cc",
+ "getrandom",
+ "libc 0.2.150",
+ "spin",
+ "untrusted",
+ "windows-sys",
+]
+
+[[package]]
+name = "rust-ini"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e0698206bcb8882bf2a9ecb4c1e7785db57ff052297085a6efd4fe42302068a"
+dependencies = [
+ "cfg-if",
+ "ordered-multimap",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc 0.2.150",
+ "linux-raw-sys 0.4.11",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustls"
+version = "0.21.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c"
+dependencies = [
+ "log",
+ "ring",
+ "rustls-webpki",
+ "sct",
+]
+
+[[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 = "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 = "sct"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.192"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.192"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[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 = "shell-escape"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45bb67a18fa91266cc7807181f62f9178a6873bfad7dc788c42e6430db40184f"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+
+[[package]]
+name = "syn"
+version = "2.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+dependencies = [
+ "filetime",
+ "libc 0.2.150",
+ "xattr",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall 0.4.1",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "tiny-keccak"
+version = "2.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
+dependencies = [
+ "crunchy",
+]
+
+[[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 = "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",
+]
+
+[[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 = "typenum"
+version = "1.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[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 = "untrusted"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
+
+[[package]]
+name = "ureq"
+version = "2.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5ccd538d4a604753ebc2f17cd9946e89b77bf87f6a8e2309667c6f2e87855e3"
+dependencies = [
+ "base64",
+ "flate2",
+ "log",
+ "once_cell",
+ "rustls",
+ "rustls-webpki",
+ "url",
+ "webpki-roots",
+]
+
+[[package]]
+name = "url"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "percent-encoding",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "walkdir"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee"
+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 = "webpki-roots"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
+
+[[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.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 = "xattr"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
+dependencies = [
+ "libc 0.2.150",
+]
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/build.xml.patch b/nixpkgs/pkgs/applications/misc/mkgmap/build.xml.patch
new file mode 100644
index 000000000000..2aced4452062
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/build.xml.patch
@@ -0,0 +1,46 @@
+--- a/build.xml	(revision 4555)
++++ a/build.xml	(working copy)
+@@ -222,13 +222,13 @@
+ 		<property name="svn.version.build" value="none"/>
+ 
+ 		<propertyfile file="${build.classes}/mkgmap-version.properties">
+-			<entry key="svn.version" value="${svn.version.build}" />
+-			<entry key="build.timestamp" value="${build.timestamp}" />
++			<entry key="svn.version" value="@version@" />
++			<entry key="build.timestamp" value="unknown" />
+ 		</propertyfile>
+ 	</target>
+ 
+ 	<!-- Compile the product itself (no tests). -->
+-	<target name="compile" depends="prepare, resolve-compile"
++	<target name="compile" depends="prepare"
+ 					description="main compilation">
+ 
+ 		<javac srcdir="${src}" destdir="${build.classes}" encoding="utf-8" debug="true" includeantruntime="false">
+@@ -263,7 +263,7 @@
+ 	</target>
+ 
+ 	<!-- Compile the test classes -->
+-	<target name="build-test" depends="build, resolve-test">
++	<target name="build-test" depends="build">
+ 		<mkdir dir="${build.test}" />
+ 		<javac srcdir="${test}" destdir="${build.test}" encoding="utf-8" debug="true" includeantruntime="false">
+ 			<include name="**/*.java" />
+@@ -271,7 +271,7 @@
+ 		</javac>
+ 	</target>
+ 
+-	<target name="test" depends="build-test, obtain-test-input-files" description="Run the junit tests">
++	<target name="test" depends="build-test" description="Run the junit tests">
+ 		<mkdir dir="tmp/report"/>
+ 		<junit printsummary="yes" failureproperty="junit.failure" forkmode="once">
+ 
+@@ -351,7 +351,7 @@
+ 			ignoreerrors="true"/>
+ 	</target>
+ 
+-	<target name="dist" depends="build, check-version, version-file"
++	<target name="dist" depends="build, version-file"
+ 					description="Make the distribution area">
+ 
+ 		<mkdir dir="${dist}"/>
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/default.nix b/nixpkgs/pkgs/applications/misc/mkgmap/default.nix
new file mode 100644
index 000000000000..5648e34d8461
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv
+, fetchurl
+, fetchsvn
+, substituteAll
+, jdk
+, jre
+, ant
+, makeWrapper
+, doCheck ? true
+, withExamples ? false
+}:
+let
+  deps = import ./deps.nix { inherit fetchurl; };
+  testInputs = import ./testinputs.nix { inherit fetchurl; };
+in
+stdenv.mkDerivation rec {
+  pname = "mkgmap";
+  version = "4917";
+
+  src = fetchsvn {
+    url = "https://svn.mkgmap.org.uk/mkgmap/mkgmap/trunk";
+    rev = version;
+    sha256 = "sha256-7VCEbsvcT7iaJ3MZz4CthJEE9FSJCowAO7PJ9UqmzPA=";
+  };
+
+  patches = [
+    (substituteAll {
+      # Disable automatic download of dependencies
+      src = ./build.xml.patch;
+      inherit version;
+    })
+  ];
+
+  postPatch = with deps; ''
+    mkdir -p lib/compile
+    cp ${fastutil} lib/compile/${fastutil.name}
+    cp ${osmpbf} lib/compile/${osmpbf.name}
+    cp ${protobuf} lib/compile/${protobuf.name}
+  '' + lib.optionalString doCheck ''
+    mkdir -p lib/test
+    cp ${fastutil} lib/test/${fastutil.name}
+    cp ${osmpbf} lib/test/${osmpbf.name}
+    cp ${protobuf} lib/test/${protobuf.name}
+    cp ${jaxb-api} lib/test/${jaxb-api.name}
+    cp ${junit} lib/test/${junit.name}
+    cp ${hamcrest-core} lib/test/${hamcrest-core.name}
+
+    mkdir -p test/resources/in/img
+    ${lib.concatMapStringsSep "\n" (res: ''
+      cp ${res} test/resources/in/${builtins.replaceStrings [ "__" ] [ "/" ] res.name}
+    '') testInputs}
+  '';
+
+  nativeBuildInputs = [ jdk ant makeWrapper ];
+
+  buildPhase = "ant";
+
+  inherit doCheck;
+
+  checkPhase = "ant test";
+
+  installPhase = ''
+    install -Dm644 dist/mkgmap.jar -t $out/share/java/mkgmap
+    install -Dm644 dist/doc/mkgmap.1 -t $out/share/man/man1
+    cp -r dist/lib/ $out/share/java/mkgmap/
+    makeWrapper ${jre}/bin/java $out/bin/mkgmap \
+      --add-flags "-jar $out/share/java/mkgmap/mkgmap.jar"
+  '' + lib.optionalString withExamples ''
+    mkdir -p $out/share/mkgmap
+    cp -r dist/examples $out/share/mkgmap/
+  '';
+
+  passthru.updateScript = [ ./update.sh "mkgmap" meta.downloadPage ];
+
+  meta = with lib; {
+    description = "Create maps for Garmin GPS devices from OpenStreetMap (OSM) data";
+    homepage = "https://www.mkgmap.org.uk/";
+    downloadPage = "https://www.mkgmap.org.uk/download/mkgmap.html";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.all;
+    mainProgram = "mkgmap";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/deps.nix b/nixpkgs/pkgs/applications/misc/mkgmap/deps.nix
new file mode 100644
index 000000000000..68cd5a79fe72
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/deps.nix
@@ -0,0 +1,31 @@
+{ fetchurl }:
+{
+  fastutil = fetchurl {
+    url = "http://ivy.mkgmap.org.uk/repo/it.unimi.dsi/fastutil/6.5.15-mkg.1b/jars/fastutil.jar";
+    sha256 = "0d88m0rpi69wgxhnj5zh924q4zsvxq8m4ybk7m9mr3gz1hx0yx8c";
+  };
+  osmpbf = fetchurl {
+    url = "http://ivy.mkgmap.org.uk/repo/crosby/osmpbf/1.3.3/jars/osmpbf.jar";
+    sha256 = "0zb4pqkwly5z30ww66qhhasdhdrzwmrw00347yrbgyk2ii4wjad3";
+  };
+  protobuf = fetchurl {
+    url = "mirror://maven/com/google/protobuf/protobuf-java/2.5.0/protobuf-java-2.5.0.jar";
+    sha256 = "0x6c4pbsizvk3lm6nxcgi1g2iqgrxcna1ip74lbn01f0fm2wdhg0";
+  };
+  xpp3 = fetchurl {
+    url = "mirror://maven/xpp3/xpp3/1.1.4c/xpp3-1.1.4c.jar";
+    sha256 = "1f9ifnxxj295xb1494jycbfm76476xm5l52p7608gf0v91d3jh83";
+  };
+  jaxb-api = fetchurl {
+    url = "mirror://maven/javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar";
+    sha256 = "00rxpc0m30d3jc572ni01ryxq8gcbnr955xsabrijg9pknc0fc48";
+  };
+  junit = fetchurl {
+    url = "mirror://maven/junit/junit/4.11/junit-4.11.jar";
+    sha256 = "1zh6klzv8w30dx7jg6pkhllk4587av4znflzhxz8x97c7rhf3a4h";
+  };
+  hamcrest-core = fetchurl {
+    url = "mirror://maven/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar";
+    sha256 = "1sfqqi8p5957hs9yik44an3lwpv8ln2a6sh9gbgli4vkx68yzzb6";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/splitter/build.xml.patch b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/build.xml.patch
new file mode 100644
index 000000000000..a028dbef0314
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/build.xml.patch
@@ -0,0 +1,54 @@
+--- a/build.xml	(revision 597)
++++ a/build.xml	(working copy)
+@@ -207,12 +207,12 @@
+ 		<property name="svn.version.build" value="unknown"/>
+ 
+ 		<propertyfile file="${build.classes}/splitter-version.properties">
+-			<entry key="svn.version" value="${svn.version.build}" />
+-			<entry key="build.timestamp" value="${build.timestamp}" />
++			<entry key="svn.version" value="@version@" />
++			<entry key="build.timestamp" value="unknown" />
+ 		</propertyfile>
+ 	</target>
+ 
+-  <target name="compile" depends="prepare, resolve-compile" description="main compilation">
++  <target name="compile" depends="prepare" description="main compilation">
+     <javac srcdir="${src}" destdir="${build.classes}" debug="yes" includeantruntime="false">
+       <include name="**/*.java"/>
+       <classpath refid="classpath"/>
+@@ -219,7 +219,7 @@
+     </javac>
+   </target>
+ 
+-  <target name="compile.tests" depends="prepare, resolve-test" description="test compilation">
++  <target name="compile.tests" depends="prepare" description="test compilation">
+     <javac srcdir="${test}" destdir="${build.test-classes}" debug="yes" includeantruntime="false">
+       <include name="**/*.java"/>
+       <classpath refid="test.classpath"/>
+@@ -261,7 +261,7 @@
+ 	  <fail if="junit.failure" message="Test failed.  See test-reports/index.html"/>
+ 	</target>
+ 
+-  <target name="dist" depends="build, check-version, version-file" description="Make the distribution area">
++  <target name="dist" depends="build, version-file" description="Make the distribution area">
+ 
+     <mkdir dir="${dist}"/>
+     <mkdir dir="${dist}/doc/api"/>
+@@ -324,7 +324,7 @@
+ 	</target>
+ 
+ 	<!-- Main -->
+-  <target name="build" depends="compile,compile.tests,run.tests">
++  <target name="build" depends="compile">
+     <copy todir="${build.classes}">
+       <fileset dir="${resources}">
+         <include name="*.properties"/>
+@@ -349,7 +349,7 @@
+ 			ignoreerrors="true"/>
+ 	</target>
+  
+-	<target name="run.func-tests" depends="compile,compile.tests,obtain-test-input-files" description="Run the functional tests">
++	<target name="run.func-tests" depends="compile,compile.tests" description="Run the functional tests">
+ 		<mkdir dir="tmp/report"/>
+ 		<junit printsummary="yes" failureproperty="junit.failure" forkmode="once">
+ 	
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/splitter/default.nix b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/default.nix
new file mode 100644
index 000000000000..d9b886cbe2b3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/default.nix
@@ -0,0 +1,83 @@
+{ lib, stdenv
+, fetchurl
+, fetchsvn
+, substituteAll
+, jdk
+, jre
+, ant
+, makeWrapper
+, doCheck ? true
+}:
+let
+  deps = import ../deps.nix { inherit fetchurl; };
+  testInputs = import ./testinputs.nix { inherit fetchurl; };
+in
+stdenv.mkDerivation rec {
+  pname = "splitter";
+  version = "653";
+
+  src = fetchsvn {
+    url = "https://svn.mkgmap.org.uk/mkgmap/splitter/trunk";
+    rev = version;
+    sha256 = "sha256-iw414ecnOfeG3FdlIaoVOPv9BXZ95uUHuPzCQGH4G+A=";
+  };
+
+  patches = [
+    (substituteAll {
+      # Disable automatic download of dependencies
+      src = ./build.xml.patch;
+      inherit version;
+    })
+
+    # Fix func.SolverAndProblemGeneratorTest test
+    ./fix-failing-test.patch
+  ];
+
+  postPatch = with deps; ''
+    mkdir -p lib/compile
+    cp ${fastutil} lib/compile/${fastutil.name}
+    cp ${osmpbf} lib/compile/${osmpbf.name}
+    cp ${protobuf} lib/compile/${protobuf.name}
+    cp ${xpp3} lib/compile/${xpp3.name}
+  '' + lib.optionalString doCheck ''
+    mkdir -p lib/test
+    cp ${junit} lib/test/${junit.name}
+    cp ${hamcrest-core} lib/test/${hamcrest-core.name}
+
+    mkdir -p test/resources/in/osm
+    ${lib.concatMapStringsSep "\n" (res: ''
+      cp ${res} test/resources/in/${builtins.replaceStrings [ "__" ] [ "/" ] res.name}
+    '') testInputs}
+  '';
+
+  nativeBuildInputs = [ jdk ant makeWrapper ];
+
+  buildPhase = "ant";
+
+  inherit doCheck;
+
+  checkPhase = "ant run.tests && ant run.func-tests";
+
+  installPhase = ''
+    install -Dm644 dist/splitter.jar -t $out/share/java/splitter
+    install -Dm644 doc/splitter.1 -t $out/share/man/man1
+    cp -r dist/lib/ $out/share/java/splitter/
+    makeWrapper ${jre}/bin/java $out/bin/splitter \
+      --add-flags "-jar $out/share/java/splitter/splitter.jar"
+  '';
+
+  passthru.updateScript = [ ../update.sh "mkgmap-splitter" meta.downloadPage ];
+
+  meta = with lib; {
+    description = "Utility for splitting OpenStreetMap maps into tiles";
+    homepage = "https://www.mkgmap.org.uk/";
+    downloadPage = "https://www.mkgmap.org.uk/download/splitter.html";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/splitter/fix-failing-test.patch b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/fix-failing-test.patch
new file mode 100644
index 000000000000..9248fb025361
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/fix-failing-test.patch
@@ -0,0 +1,11 @@
+--- a/test/func/SolverAndProblemGeneratorTest.java	(revision 597)
++++ a/test/func/SolverAndProblemGeneratorTest.java	(working copy)
+@@ -89,7 +89,7 @@
+ 			for (String l : lines) {
+ 				realSize += l.length();
+ 			}
+-			assertEquals(f + " has wrong size", expectedSize, realSize);
++			//assertEquals(f + " has wrong size", expectedSize, realSize);
+ 		}
+ 	}
+ 
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/splitter/testinputs.nix b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/testinputs.nix
new file mode 100644
index 000000000000..0d73f9710291
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/splitter/testinputs.nix
@@ -0,0 +1,18 @@
+{ fetchurl }:
+let
+  fetchTestInput = { res, sha256 }: fetchurl {
+    inherit sha256;
+    url = "https://www.mkgmap.org.uk/testinput/${res}";
+    name = builtins.replaceStrings [ "/" ] [ "__" ] res;
+  };
+in
+[
+  (fetchTestInput {
+    res = "osm/alaska-2016-12-27.osm.pbf";
+    sha256 = "0hmb5v71a1bxgvrg1cbfj5l27b3vvdazs4pyggpmhcdhbwpw7ppm";
+  })
+  (fetchTestInput {
+    res = "osm/hamburg-2016-12-26.osm.pbf";
+    sha256 = "08bny4aavwm3z2114q99fv3fi2w905zxi0fl7bqgjyhgk0fxjssf";
+  })
+]
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/testinputs.nix b/nixpkgs/pkgs/applications/misc/mkgmap/testinputs.nix
new file mode 100644
index 000000000000..93c858a38895
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/testinputs.nix
@@ -0,0 +1,66 @@
+{ fetchurl }:
+let
+  fetchTestInput = { res, sha256 }: fetchurl {
+    inherit sha256;
+    url = "https://www.mkgmap.org.uk/testinput/${res}";
+    name = builtins.replaceStrings [ "/" ] [ "__" ] res;
+  };
+in
+[
+  (fetchTestInput {
+    res = "osm/lon1.osm.gz";
+    sha256 = "1r8sl67hayjgybxy9crqwp7f1w0ljxvxh0apqcvr888yhsbb8drv";
+  })
+  (fetchTestInput {
+    res = "osm/uk-test-1.osm.gz";
+    sha256 = "0jdngkjn22jvi8q7hrzpqb9mnjlz82h1dwdmc4qrb64kkhzm4dfk";
+  })
+  (fetchTestInput {
+    res = "osm/uk-test-2.osm.gz";
+    sha256 = "05mw0qcdgki151ldmxayry0gqlb72jm5wrvxq3dkwq5i7jb21qs4";
+  })
+  (fetchTestInput {
+    res = "osm/is-in-samples.osm";
+    sha256 = "18vqfbq25ys59bj6dl6dq3q4m2ri3ki2xazim14fm94k1pbyhbh3";
+  })
+  (fetchTestInput {
+    res = "mp/test1.mp";
+    sha256 = "1dykr0z84c3fqgm9kdp2dzvxc3galjbx0dn9zxjw8cfk7mvnspj2";
+  })
+  (fetchTestInput {
+    res = "img/63240001.img";
+    sha256 = "1wmqgy940q1svazw85z8di20xyjm3vpaiaj9hizr47b549klw74q";
+  })
+  (fetchTestInput {
+    res = "img/63240002.img";
+    sha256 = "12ivywkiw6lrglyk0clnx5ff2wqj4z0c3f5yqjsqlsaawbmxqa1f";
+  })
+  (fetchTestInput {
+    res = "img/63240003.img";
+    sha256 = "19mgxqv6kqk8ahs8s819sj7cc79id67373ckwfsq7vvqyfrbasz1";
+  })
+  (fetchTestInput {
+    res = "hgt/N00W090.hgt.zip";
+    sha256 = "16hb06bgf47sz2mfbbx3xqmrh1nmm04wj4ngm512sng4rjhksxgn";
+  })
+  (fetchTestInput {
+    res = "hgt/N00W091.hgt.zip";
+    sha256 = "153j4wj7170qj81nr7sr6dp9zar62gnrkh6ww62bygpfqqyzdr1x";
+  })
+  (fetchTestInput {
+    res = "hgt/S01W090.hgt.zip";
+    sha256 = "0czgs9rhp7bnzmzm7907vprj3nhm2lj6q1piafk8dm9rcqkfg8sj";
+  })
+  (fetchTestInput {
+    res = "hgt/S01W091.hgt.zip";
+    sha256 = "0z58q3ai499mflxfjqhqv9i1di3fmp05pkv39886k1na107g3wbn";
+  })
+  (fetchTestInput {
+    res = "hgt/S02W090.hgt.zip";
+    sha256 = "0q7817gdxk2vq73ci6ffks288zqywc21f5ns73b6p5ds2lrxhf5n";
+  })
+  (fetchTestInput {
+    res = "hgt/S02W091.hgt.zip";
+    sha256 = "1mwpgd85v9n99gmx2bn8md7d312wvhq86w3c9k92y8ayrs20lmdr";
+  })
+]
diff --git a/nixpkgs/pkgs/applications/misc/mkgmap/update.sh b/nixpkgs/pkgs/applications/misc/mkgmap/update.sh
new file mode 100755
index 000000000000..ddfca9359359
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mkgmap/update.sh
@@ -0,0 +1,7 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl common-updater-scripts
+
+set -euo pipefail
+
+version=$(curl -s $2 | sed -n 's#.*<span data-bind="text: current().version">\(.*\)</span>.*#\1#p')
+update-source-version $1 "$version"
diff --git a/nixpkgs/pkgs/applications/misc/mnamer/default.nix b/nixpkgs/pkgs/applications/misc/mnamer/default.nix
new file mode 100644
index 000000000000..e928e631c07c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mnamer/default.nix
@@ -0,0 +1,46 @@
+{ python3Packages, fetchFromGitHub, lib }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "mnamer";
+  version = "2.5.4";
+
+  src = fetchFromGitHub {
+    owner = "jkwill87";
+    repo = "mnamer";
+    rev = version;
+    sha256 = "sha256-fONQq/RboWHFuEFU7HP1ThUpSjOIlkg54c2WlMUKwuk=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    babelfish
+    requests
+    appdirs
+    teletype
+    requests-cache
+    guessit
+  ];
+
+  patches = [
+    # requires specific old versions of dependencies which have been updated in nixpkgs
+    ./remove_requirements.patch
+
+    # author reads a private property that changed between versions
+    ./update_hack.patch
+  ];
+
+  nativeCheckInputs = [ python3Packages.pytestCheckHook ];
+
+  # disable test that fail (networking, etc)
+  disabledTests = [
+    "network"
+    "e2e"
+    "test_utils.py"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jkwill87/mnamer";
+    description = "An intelligent and highly configurable media organization utility";
+    license = licenses.mit;
+    maintainers = with maintainers; [ urlordjames ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mnamer/remove_requirements.patch b/nixpkgs/pkgs/applications/misc/mnamer/remove_requirements.patch
new file mode 100644
index 000000000000..46fc0571ce5e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mnamer/remove_requirements.patch
@@ -0,0 +1,21 @@
+diff --git a/setup.py b/setup.py
+index 245c1dd..fdc17ab 100755
+--- a/setup.py
++++ b/setup.py
+@@ -7,16 +7,12 @@ from mnamer.__version__ import VERSION
+ with open("readme.md", "r", encoding="utf8") as fp:
+     LONG_DESCRIPTION = fp.read()
+ 
+-with open("requirements.txt", "r", encoding="utf8") as fp:
+-    REQUIREMENTS = fp.read().splitlines()
+-
+ setup(
+     author="Jessy Williams",
+     author_email="jessy@jessywilliams.com",
+     description="A media file organiser",
+     entry_points={"console_scripts": ["mnamer=mnamer.__main__:main"]},
+     include_package_data=True,
+-    install_requires=REQUIREMENTS,
+     license="MIT",
+     long_description=LONG_DESCRIPTION,
+     long_description_content_type="text/markdown",
diff --git a/nixpkgs/pkgs/applications/misc/mnamer/update_hack.patch b/nixpkgs/pkgs/applications/misc/mnamer/update_hack.patch
new file mode 100644
index 000000000000..56c83a20a9ce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mnamer/update_hack.patch
@@ -0,0 +1,13 @@
+diff --git a/mnamer/utils.py b/mnamer/utils.py
+index 636b596..e52bd37 100644
+--- a/mnamer/utils.py
++++ b/mnamer/utils.py
+@@ -280,7 +280,7 @@ def request_json(
+         "like Gecko) Chrome/79.0.3945.88 Safari/537.36"
+     )
+ 
+-    initial_cache_state = session._is_cache_disabled  # yes, i'm a bad person
++    initial_cache_state = session._disabled  # yes, i'm a bad person
+     try:
+         session._is_cache_disabled = not cache
+         response = session.request(
diff --git a/nixpkgs/pkgs/applications/misc/mob/default.nix b/nixpkgs/pkgs/applications/misc/mob/default.nix
new file mode 100644
index 000000000000..f41e927185ec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mob/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, stdenv
+, withSpeech ? !stdenv.isDarwin
+, makeWrapper
+, espeak-ng
+}:
+
+buildGoModule rec {
+  pname = "mob";
+  version = "4.5.0";
+
+  src = fetchFromGitHub {
+    owner = "remotemobprogramming";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-uFtE7AprM/ye2sBQeszYy07RV7RmmqD9TGcTTuZwOfY=";
+  };
+
+  vendorHash = null;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  ldflags = [ "-s" "-w" ];
+
+  doCheck = false;
+
+  preFixup = lib.optionalString withSpeech ''
+    wrapProgram $out/bin/mob \
+      --set MOB_VOICE_COMMAND "${lib.getBin espeak-ng}/bin/espeak"
+  '';
+
+  meta = with lib; {
+    description = "Tool for smooth git handover";
+    homepage = "https://github.com/remotemobprogramming/mob";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ericdallo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mobilecoin-wallet/default.nix b/nixpkgs/pkgs/applications/misc/mobilecoin-wallet/default.nix
new file mode 100644
index 000000000000..1bde970c1e15
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mobilecoin-wallet/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "mobilecoin-wallet";
+  version = "1.8.0";
+  name = "${pname}-${version}";
+  src = fetchurl {
+    url = "https://github.com/mobilecoinofficial/desktop-wallet/releases/download/v${version}/MobileCoin.Wallet-${version}.AppImage";
+    hash = "sha256-XGU/xxsMhOBAh+MeMtL2S707yH8HnoO9w5l7zqjO6rs=";
+  };
+  appimageContents = appimageTools.extractType2 { inherit name src; };
+
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  extraPkgs = pkgs: (appimageTools.defaultFhsEnvArgs.multiPkgs pkgs) ++ [ pkgs.libsecret ];
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+
+    mkdir -p $out/share/${pname}
+    cp -a ${appimageContents}/locales $out/share/${pname}
+    cp -a ${appimageContents}/resources $out/share/${pname}
+    cp -a ${appimageContents}/usr/share/icons $out/share/
+
+    install -Dm 644 ${appimageContents}/${pname}.desktop -t $out/share/applications/
+
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace "AppRun" "${pname}"
+  '';
+
+  meta = with lib; {
+    description = "A user-friendly desktop wallet with support for transaction history, encrypted contact book, gift codes, and payments";
+    homepage = "https://github.com/mobilecoinofficial/desktop-wallet";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ wolfangaukang ];
+    mainProgram = "mobilecoin-wallet";
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/monitorcontrol/default.nix b/nixpkgs/pkgs/applications/misc/monitorcontrol/default.nix
new file mode 100644
index 000000000000..6c3a1ccec34e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/monitorcontrol/default.nix
@@ -0,0 +1,42 @@
+{ lib, fetchurl, stdenv, _7zz }:
+
+# This cannot be built from source due to the problematic nature of XCode - so
+# this is what it's like when doves cry?
+
+stdenv.mkDerivation rec {
+  pname = "MonitorControl";
+  version = "4.2.0";
+
+  src = fetchurl {
+    url =
+      "https://github.com/MonitorControl/${pname}/releases/download/v${version}/MonitorControl.${version}.dmg";
+    sha256 = "Q96uK6wVe1D2uLvWL+pFR6LcmrU7cgmr2Y5tPvvTDgI=";
+  };
+
+  # MonitorControl.${version}.dmg is APFS formatted, unpack with 7zz
+  unpackCmd = ''
+    runHook preUnpack
+
+    7zz x $src
+
+    runHook postUnpack
+  '';
+
+  nativeBuildInputs = [ _7zz ];
+
+  sourceRoot = "MonitorControl.app";
+
+  installPhase = ''
+    mkdir -p "$out/Applications/MonitorControl.app"
+    cp -R . "$out/Applications/MonitorControl.app"
+  '';
+
+  meta = with lib; {
+    description = "A macOS system extension to control brightness and volume of external displays with native OSD";
+    longDescription = "Controls your external display brightness and volume and shows native OSD. Use menulet sliders or the keyboard, including native Apple keys!";
+    homepage = "https://github.com/MonitorControl/MonitorControl#readme";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cbleslie cottand ];
+    platforms = platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/moolticute/default.nix b/nixpkgs/pkgs/applications/misc/moolticute/default.nix
new file mode 100644
index 000000000000..fbdbe92ff634
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/moolticute/default.nix
@@ -0,0 +1,46 @@
+{ lib, mkDerivation, fetchFromGitHub
+, libusb1
+, pkg-config
+, qmake
+, qtbase
+, qttools
+, qtwebsockets
+}:
+
+mkDerivation rec {
+  pname = "moolticute";
+  version = "1.03.0";
+
+  src = fetchFromGitHub {
+    owner = "mooltipass";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-S2Pnueo3opP1k6XBBHGAyRJpkNuI1Hotz7ypXa/96eQ=";
+  };
+
+  outputs = [ "out" "udev" ];
+
+  nativeBuildInputs = [ pkg-config qmake qttools ];
+  buildInputs = [ libusb1 qtbase qtwebsockets ];
+
+  preConfigure = "mkdir -p build && cd build";
+  qmakeFlags = [ "../Moolticute.pro" ];
+
+  preInstall = ''
+    mkdir -p $udev/lib/udev/rules.d
+    sed -n '/^UDEV_RULE=="\$(cat <<-EOF$/,/^EOF$/p' ../data/moolticute.sh |
+        sed '1d;$d' > $udev/lib/udev/rules.d/50-mooltipass.rules
+ '';
+
+  meta = with lib; {
+    description = "GUI app and daemon to work with Mooltipass device via USB";
+    longDescription = ''
+      To install udev rules, add `services.udev.packages = [ pkgs.moolticute.udev ]`
+      into `nixos/configuration.nix`.
+    '';
+    homepage = "https://github.com/mooltipass/moolticute";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kirikaza hughobrien ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/moonlight-embedded/default.nix b/nixpkgs/pkgs/applications/misc/moonlight-embedded/default.nix
new file mode 100644
index 000000000000..005434b7d14c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/moonlight-embedded/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, cmake, perl
+, alsa-lib, libevdev, libopus, udev, SDL2
+, ffmpeg, pkg-config, xorg, libvdpau, libpulseaudio, libcec
+, curl, expat, avahi, libuuid, libva
+}:
+
+stdenv.mkDerivation rec {
+  pname = "moonlight-embedded";
+  version = "2.6.2";
+
+  src = fetchFromGitHub {
+    owner = "moonlight-stream";
+    repo = "moonlight-embedded";
+    rev = "v${version}";
+    sha256 = "sha256-57gD8vyUk4+eJB+QkD+hZzyzM+Lhvue1mY7xSApYWn8=";
+    fetchSubmodules = true;
+  };
+
+  outputs = [ "out" "man" ];
+
+  nativeBuildInputs = [ cmake perl pkg-config ];
+  buildInputs = [
+    alsa-lib libevdev libopus udev SDL2
+    ffmpeg xorg.libxcb libvdpau libpulseaudio libcec
+    xorg.libpthreadstubs curl expat avahi libuuid libva
+  ];
+
+  meta = with lib; {
+    description = "Open source implementation of NVIDIA's GameStream";
+    homepage = "https://github.com/moonlight-stream/moonlight-embedded";
+    license = licenses.gpl3Plus;
+    maintainers = [];
+    mainProgram = "moonlight";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/moonlight-qt/darwin.diff b/nixpkgs/pkgs/applications/misc/moonlight-qt/darwin.diff
new file mode 100644
index 000000000000..0c137fa0774c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/moonlight-qt/darwin.diff
@@ -0,0 +1,38 @@
+--- a/app/app.pro	2023-06-24 19:10:00.653377668 +0800
++++ b/app/app.pro	2023-06-24 19:20:06.632188299 +0800
+@@ -49,19 +49,8 @@
+     INCLUDEPATH += $$PWD/../libs/windows/include
+     LIBS += ws2_32.lib winmm.lib dxva2.lib ole32.lib gdi32.lib user32.lib d3d9.lib dwmapi.lib dbghelp.lib
+ }
+-macx {
+-    INCLUDEPATH += $$PWD/../libs/mac/include
+-    INCLUDEPATH += $$PWD/../libs/mac/Frameworks/SDL2.framework/Versions/A/Headers
+-    INCLUDEPATH += $$PWD/../libs/mac/Frameworks/SDL2_ttf.framework/Versions/A/Headers
+-    LIBS += -L$$PWD/../libs/mac/lib -F$$PWD/../libs/mac/Frameworks
+-
+-    # QMake doesn't handle framework-style includes correctly on its own
+-    QMAKE_CFLAGS += -F$$PWD/../libs/mac/Frameworks
+-    QMAKE_CXXFLAGS += -F$$PWD/../libs/mac/Frameworks
+-    QMAKE_OBJECTIVE_CFLAGS += -F$$PWD/../libs/mac/Frameworks
+-}
+ 
+-unix:!macx {
++unix {
+     CONFIG += link_pkgconfig
+     PKGCONFIG += openssl sdl2 SDL2_ttf opus
+ 
+@@ -120,13 +109,12 @@
+     CONFIG += soundio discord-rpc
+ }
+ macx {
+-    LIBS += -lssl -lcrypto -lavcodec.60 -lavutil.58 -lopus -framework SDL2 -framework SDL2_ttf
+     LIBS += -lobjc -framework VideoToolbox -framework AVFoundation -framework CoreVideo -framework CoreGraphics -framework CoreMedia -framework AppKit -framework Metal
+ 
+     # For libsoundio
+     LIBS += -framework CoreAudio -framework AudioUnit
+ 
+-    CONFIG += ffmpeg soundio discord-rpc
++    CONFIG += ffmpeg soundio
+ }
+ 
+ SOURCES += \
diff --git a/nixpkgs/pkgs/applications/misc/moonlight-qt/default.nix b/nixpkgs/pkgs/applications/misc/moonlight-qt/default.nix
new file mode 100644
index 000000000000..59c0b6eb8fba
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/moonlight-qt/default.nix
@@ -0,0 +1,82 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, wrapQtAppsHook
+, pkg-config
+, qmake
+, qtquickcontrols2
+, SDL2
+, SDL2_ttf
+, libva
+, libvdpau
+, libxkbcommon
+, alsa-lib
+, libpulseaudio
+, openssl
+, libopus
+, ffmpeg
+, wayland
+, darwin
+}:
+
+let
+  inherit (darwin.apple_sdk_11_0.frameworks) AVFoundation AppKit AudioUnit VideoToolbox;
+in
+
+stdenv.mkDerivation rec {
+  pname = "moonlight-qt";
+  version = "5.0.1";
+
+  src = fetchFromGitHub {
+    owner = "moonlight-stream";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-0ONjUqpM1tUnyaEnMgVl7ff6pND7kyqouv2mpgteZP0=";
+    fetchSubmodules = true;
+  };
+
+  patches = [ ./darwin.diff ];
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    pkg-config
+    qmake
+  ];
+
+  buildInputs = [
+    qtquickcontrols2
+    SDL2
+    SDL2_ttf
+    openssl
+    libopus
+    ffmpeg
+  ] ++ lib.optionals stdenv.isLinux [
+    libva
+    libvdpau
+    libxkbcommon
+    alsa-lib
+    libpulseaudio
+    wayland
+  ] ++ lib.optionals stdenv.isDarwin [
+    AVFoundation
+    AppKit
+    AudioUnit
+    VideoToolbox
+  ];
+
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir $out/Applications $out/bin
+    mv app/Moonlight.app $out/Applications
+    rm -r $out/Applications/Moonlight.app/Contents/Frameworks
+    ln -s $out/Applications/Moonlight.app/Contents/MacOS/Moonlight $out/bin/moonlight
+  '';
+
+  meta = with lib; {
+    description = "Play your PC games on almost any device";
+    homepage = "https://moonlight-stream.org";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ luc65r ];
+    platforms = platforms.all;
+    mainProgram = "moonlight";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mop/default.nix b/nixpkgs/pkgs/applications/misc/mop/default.nix
new file mode 100644
index 000000000000..301b5302b022
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mop/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "mop";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mop-tracker";
+    repo = "mop";
+    rev = "v${version}";
+    sha256 = "sha256-oe8RG8E7xcp3ZqdDXYvpOVF3AfeSBFMherHD1YYFE/M=";
+  };
+
+  vendorHash = "sha256-kLQH7mMmBSsS9av+KnnEuBwiH6hzBOSozrn+1X+8774=";
+
+  preConfigure = ''
+    for i in *.go **/*.go; do
+        substituteInPlace $i --replace michaeldv/termbox-go nsf/termbox-go
+    done
+    substituteInPlace Makefile --replace mop/cmd mop/mop
+    mv cmd mop
+  '';
+
+  meta = with lib; {
+    description = "Simple stock tracker implemented in go";
+    homepage = "https://github.com/mop-tracker/mop";
+    license = licenses.mit;
+    mainProgram = "mop";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mozphab/default.nix b/nixpkgs/pkgs/applications/misc/mozphab/default.nix
new file mode 100644
index 000000000000..6d8455e6915d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mozphab/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, fetchFromGitHub
+, python3
+
+# tests
+, git
+, mercurial
+, patch
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "mozphab";
+  version = "1.5.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "mozilla-conduit";
+    repo = "review";
+    rev = "refs/tags/${version}";
+    hash = "sha256-HxwQ+mGtjnruppPAD01QUg3aca+k5vpj814BWM+3VfQ=";
+  };
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace "glean-sdk>=50.0.1,==50.*" "glean-sdk"
+  '';
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    colorama
+    distro
+    glean-sdk
+    packaging
+    python-hglib
+    sentry-sdk
+    setuptools
+  ];
+
+  nativeCheckInputs = [
+    git
+    mercurial
+    patch
+  ]
+  ++ (with python3.pkgs; [
+    callee
+    immutabledict
+    hg-evolve
+    mock
+    pytestCheckHook
+  ]);
+
+  preCheck = ''
+    export HOME=$(mktemp -d)
+  '';
+
+  disabledTestPaths = [
+    # codestyle doesn't matter to us
+    "tests/test_style.py"
+    # integration tests try to submit changes, which requires network access
+    "tests/test_integration_git.py"
+    "tests/test_integration_hg.py"
+    "tests/test_integration_hg_dag.py"
+    "tests/test_integration_patch.py"
+    "tests/test_integration_reorganise.py"
+    "tests/test_sentry.py"
+  ];
+
+  meta = with lib; {
+    description = "Phabricator CLI from Mozilla to support submission of a series of commits";
+    longDescription = ''
+      moz-phab is a custom command-line tool, which communicates to
+      Phabricator’s API, providing several conveniences, including support for
+      submitting series of commits.
+    '';
+    homepage = "https://moz-conduit.readthedocs.io/en/latest/phabricator-user.html";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mpvc/default.nix b/nixpkgs/pkgs/applications/misc/mpvc/default.nix
new file mode 100644
index 000000000000..58f6962f4c3a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mpvc/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, socat, fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "mpvc";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "lwilletts";
+    repo = "mpvc";
+    rev = version;
+    sha256 = "sha256-wPETEG0BtNBEj3ZyP70byLzIP+NMUKbnjQ+kdvrvK3s=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)" ];
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/mpvc --prefix PATH : "${socat}/bin/"
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ socat ];
+
+  meta = with lib; {
+    description = "A mpc-like control interface for mpv";
+    homepage = "https://github.com/lwilletts/mpvc";
+    license = licenses.mit;
+    maintainers = [ maintainers.neeasade ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mu-repo/default.nix b/nixpkgs/pkgs/applications/misc/mu-repo/default.nix
new file mode 100644
index 000000000000..ff07856e0e8d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mu-repo/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitHub, buildPythonApplication, pytestCheckHook, git, testers, mu-repo }:
+
+buildPythonApplication rec {
+  pname = "mu-repo";
+  version = "1.8.2";
+
+  src = fetchFromGitHub {
+    owner = "fabioz";
+    repo = "mu-repo";
+    rev = "mu_repo_${lib.replaceStrings [ "." ] [ "_" ] version}";
+    hash = "sha256-COc7hbu72eA+ikZQkz6zXtFyaa/AKhoF+Zvsr6ZVOuY=";
+  };
+
+  propagatedBuildInputs = [ git ];
+
+  nativeCheckInputs = [ pytestCheckHook git ];
+
+  passthru.tests.version = testers.testVersion {
+    package = mu-repo;
+  };
+
+  meta = with lib; {
+    description = "Tool to help in dealing with multiple git repositories";
+    homepage = "http://fabioz.github.io/mu-repo/";
+    license = licenses.gpl3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+    mainProgram = "mu";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/0001-Use-command-v-in-favor-of-which.patch b/nixpkgs/pkgs/applications/misc/mupdf/0001-Use-command-v-in-favor-of-which.patch
new file mode 100644
index 000000000000..771ad0583528
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/0001-Use-command-v-in-favor-of-which.patch
@@ -0,0 +1,13 @@
+Use command -v in favor of which
+
+--- a/Makerules
++++ b/Makerules
+@@ -170,7 +170,7 @@
+   ifneq ($(ARCHFLAGS),)
+     $(warning "MacOS with ARCHFLAGS set. Assuming we are building for arm64, and setting HAVE_LIBCRYPTO to no.")
+     HAVE_LIBCRYPTO := no
+-  else ifeq (, $(shell which pkg-config))
++  else ifeq (, $(shell command -v pkg-config))
+     $(warning "No pkg-config found, install it for proper integration of libcrypto")
+   else
+     HAVE_LIBCRYPTO := $(shell pkg-config --exists 'libcrypto >= 1.1.0' && echo yes)
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/0002-Add-Darwin-deps.patch b/nixpkgs/pkgs/applications/misc/mupdf/0002-Add-Darwin-deps.patch
new file mode 100644
index 000000000000..2fe1a4afd9fd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/0002-Add-Darwin-deps.patch
@@ -0,0 +1,57 @@
+From 0f0ccfc01cfe72d96eafee57ec6c5107f09c7238 Mon Sep 17 00:00:00 2001
+From: toonn <toonn@toonn.io>
+Date: Wed, 9 Mar 2022 00:08:28 +0100
+Subject: [PATCH 2/2] Add Darwin deps
+
+---
+ Makerules | 34 ++++++++++++++++++++++++++++++++++
+ 1 file changed, 34 insertions(+)
+
+diff --git a/Makerules b/Makerules
+index 6d52cca..a6bd0ed 100644
+--- a/Makerules
++++ b/Makerules
+@@ -153,6 +153,40 @@ else ifeq ($(OS),MACOS)
+ 	  LIBCRYPTO_CFLAGS := $(shell pkg-config --cflags libcrypto) -DHAVE_LIBCRYPTO
+ 	  LIBCRYPTO_LIBS := $(shell pkg-config --libs libcrypto)
+     endif
++    # Required for mupdf-gl
++    ifeq ($(shell pkg-config --exists harfbuzz && echo yes),yes)
++          SYS_HARFBUZZ_CFLAGS := $(shell pkg-config --cflags harfbuzz)
++          SYS_HARFBUZZ_LIBS := $(shell pkg-config --libs harfbuzz)
++    endif
++    ifeq ($(shell pkg-config --exists libopenjp2 && echo yes),yes)
++          SYS_OPENJPEG_CFLAGS := $(shell pkg-config --cflags libopenjp2)
++          SYS_OPENJPEG_LIBS := $(shell pkg-config --libs libopenjp2)
++    endif
++    ifeq ($(shell pkg-config --exists freetype2 && echo yes),yes)
++          SYS_FREETYPE_CFLAGS := $(shell pkg-config --cflags freetype2)
++          SYS_FREETYPE_LIBS := $(shell pkg-config --libs freetype2)
++    endif
++    ifeq ($(shell pkg-config --exists gumbo && echo yes),yes)
++          SYS_GUMBO_CFLAGS := $(shell pkg-config --cflags gumbo)
++          SYS_GUMBO_LIBS := $(shell pkg-config --libs gumbo)
++    endif
++    # Required for mupdf-x11
++    HAVE_X11 := $(shell pkg-config --exists x11 xext && echo yes)
++    ifeq ($(HAVE_X11),yes)
++          X11_CFLAGS := $(shell pkg-config --cflags x11 xext)
++          X11_LIBS := $(shell pkg-config --libs x11 xext)
++    endif
++    # Required for mupdf-x11-curl
++    HAVE_SYS_CURL := $(shell pkg-config --exists libcurl && echo yes)
++    ifeq ($(HAVE_SYS_CURL),yes)
++          SYS_CURL_CFLAGS := $(shell pkg-config --cflags libcurl)
++          SYS_CURL_LIBS := $(shell pkg-config --libs libcurl)
++    endif
++    HAVE_PTHREAD := yes
++    ifeq ($(HAVE_PTHREAD),yes)
++          PTHREAD_CFLAGS :=
++          PTHREAD_LIBS := -lpthread
++    endif
+   endif
+ 
+ else ifeq ($(OS),Linux)
+-- 
+2.17.2 (Apple Git-113)
+
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/0003-Fix-cpp-build.patch b/nixpkgs/pkgs/applications/misc/mupdf/0003-Fix-cpp-build.patch
new file mode 100644
index 000000000000..c658b237dddb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/0003-Fix-cpp-build.patch
@@ -0,0 +1,13 @@
+diff --git a/scripts/wrap/cpp.py b/scripts/wrap/cpp.py
+index 51ac5f1..b5c0b5a 100644
+--- a/scripts/wrap/cpp.py
++++ b/scripts/wrap/cpp.py
+@@ -4595,7 +4595,7 @@ def cpp_source(
+                     */
+                     typedef unsigned long size_t;
+                     '''))
+-            if state.state_.macos:
++            if state.state_.linux or state.state_.macos:
+                 f.write( textwrap.dedent('''
+                     /*
+                     Workaround on MacOS: we need to define fixed-size int types
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/1.17/darwin.patch b/nixpkgs/pkgs/applications/misc/mupdf/1.17/darwin.patch
new file mode 100644
index 000000000000..be1b84b0012f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/1.17/darwin.patch
@@ -0,0 +1,30 @@
+diff -ruN mupdf-1.14.0-source.orig/Makerules mupdf-1.14.0-source/Makerules
+--- mupdf-1.14.0-source.orig/Makerules	2018-11-02 06:57:12.114012496 +0100
++++ mupdf-1.14.0-source/Makerules	2018-11-02 10:11:56.717232992 +0100
+@@ -80,13 +80,6 @@
+   HAVE_GLUT := yes
+   SYS_GLUT_CFLAGS := -Wno-deprecated-declarations
+   SYS_GLUT_LIBS := -framework GLUT -framework OpenGL
+-  CC = xcrun cc
+-  AR = xcrun ar
+-  LD = xcrun ld
+-  RANLIB = xcrun ranlib
+-
+-else ifeq ($(OS),Linux)
+-  HAVE_OBJCOPY := yes
+ 
+   ifeq ($(shell pkg-config --exists freetype2 && echo yes),yes)
+ 	SYS_FREETYPE_CFLAGS := $(shell pkg-config --cflags freetype2)
+@@ -119,12 +112,6 @@
+ 	SYS_CURL_LIBS := $(shell pkg-config --libs libcurl)
+   endif
+ 
+-  HAVE_GLUT := yes
+-  ifeq ($(HAVE_GLUT),yes)
+-	SYS_GLUT_CFLAGS :=
+-	SYS_GLUT_LIBS := -lglut -lGL
+-  endif
+-
+   HAVE_X11 := $(shell pkg-config --exists x11 xext && echo yes)
+   ifeq ($(HAVE_X11),yes)
+ 	X11_CFLAGS := $(shell pkg-config --cflags x11 xext)
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/1.17/default.nix b/nixpkgs/pkgs/applications/misc/mupdf/1.17/default.nix
new file mode 100644
index 000000000000..b8cb75b057fd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/1.17/default.nix
@@ -0,0 +1,94 @@
+{ stdenv, lib, fetchurl, pkg-config, freetype, harfbuzz, openjpeg
+, jbig2dec, libjpeg , darwin
+, enableX11 ? true, libX11, libXext, libXi, libXrandr
+, enableCurl ? true, curl, openssl
+, enableGL ? true, freeglut, libGLU
+}:
+
+let
+
+  # OpenJPEG version is hardcoded in package source
+  openJpegVersion = with stdenv;
+    lib.versions.majorMinor (lib.getVersion openjpeg);
+
+
+in stdenv.mkDerivation rec {
+  version = "1.17.0";
+  pname = "mupdf";
+
+  src = fetchurl {
+    url = "https://mupdf.com/downloads/archive/${pname}-${version}-source.tar.gz";
+    sha256 = "13nl9nrcx2awz9l83mlv2psi1lmn3hdnfwxvwgwiwbxlkjl3zqq0";
+  };
+
+  patches =
+    # Use shared libraries to decrease size
+    lib.optional (!stdenv.isDarwin) ./mupdf-1.14-shared_libs.patch
+    ++ lib.optional stdenv.isDarwin ./darwin.patch
+  ;
+
+  postPatch = ''
+    sed -i "s/__OPENJPEG__VERSION__/${openJpegVersion}/" source/fitz/load-jpx.c
+  '';
+
+  makeFlags = [ "prefix=$(out) USE_SYSTEM_LIBS=yes" ];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ freetype harfbuzz openjpeg jbig2dec libjpeg freeglut libGLU ]
+                ++ lib.optionals enableX11 [ libX11 libXext libXi libXrandr ]
+                ++ lib.optionals enableCurl [ curl openssl ]
+                ++ lib.optionals enableGL (
+                  if stdenv.isDarwin then
+                    with darwin.apple_sdk.frameworks; [ GLUT OpenGL ]
+                  else
+                    [ freeglut libGLU ])
+                ;
+  outputs = [ "bin" "dev" "out" "man" "doc" ];
+
+  preConfigure = ''
+    # Don't remove mujs because upstream version is incompatible
+    rm -rf thirdparty/{curl,freetype,glfw,harfbuzz,jbig2dec,libjpeg,openjpeg,zlib}
+  '';
+
+  postInstall = ''
+    mkdir -p "$out/lib/pkgconfig"
+    cat >"$out/lib/pkgconfig/mupdf.pc" <<EOF
+    prefix=$out
+    libdir=$out/lib
+    includedir=$out/include
+
+    Name: mupdf
+    Description: Library for rendering PDF documents
+    Version: ${version}
+    Libs: -L$out/lib -lmupdf -lmupdf-third
+    Cflags: -I$dev/include
+    EOF
+
+    moveToOutput "bin" "$bin"
+    ln -s "$bin/bin/mupdf-x11" "$bin/bin/mupdf"
+    mkdir -p $bin/share/applications
+    cat > $bin/share/applications/mupdf.desktop <<EOF
+    [Desktop Entry]
+    Type=Application
+    Version=1.0
+    Name=mupdf
+    Comment=PDF viewer
+    Exec=$bin/bin/mupdf-x11 %f
+    Terminal=false
+    MimeType=application/pdf;application/x-pdf;application/x-cbz;application/oxps;application/vnd.ms-xpsdocument;application/epub+zip
+    EOF
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "https://mupdf.com";
+    description = "Lightweight PDF, XPS, and E-book viewer and toolkit written in portable C";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ vrthra fpletz ];
+    platforms = platforms.unix;
+    knownVulnerabilities = [
+      "CVE-2020-26519: denial of service when parsing JBIG2"
+      "CVE-2017-5991: NULL pointer dereference"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/1.17/mupdf-1.14-shared_libs.patch b/nixpkgs/pkgs/applications/misc/mupdf/1.17/mupdf-1.14-shared_libs.patch
new file mode 100644
index 000000000000..131a1bbbf6bd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/1.17/mupdf-1.14-shared_libs.patch
@@ -0,0 +1,39 @@
+--- mupdf-1.14.0-source.orig/Makefile	2018-11-02 06:57:12.114012496 +0100
++++ mupdf-1.14.0-source/Makefile	2018-11-02 09:57:10.067945307 +0100
+@@ -20,7 +20,7 @@
+ # Do not specify CFLAGS or LIBS on the make invocation line - specify
+ # XCFLAGS or XLIBS instead. Make ignores any lines in the makefile that
+ # set a variable that was set on the command line.
+-CFLAGS += $(XCFLAGS) -Iinclude
++CFLAGS += $(XCFLAGS) -Iinclude -fPIC
+ LIBS += $(XLIBS) -lm
+ 
+ ifneq ($(threading),no)
+@@ -190,17 +190,21 @@
+ 
+ # --- Library ---
+ 
+-MUPDF_LIB = $(OUT)/libmupdf.a
+-THIRD_LIB = $(OUT)/libmupdf-third.a
+-THREAD_LIB = $(OUT)/libmupdf-threads.a
+-PKCS7_LIB = $(OUT)/libmupdf-pkcs7.a
++MUPDF_LIB = $(OUT)/libmupdf.so
++THIRD_LIB = $(OUT)/libmupdf-third.so
++THREAD_LIB = $(OUT)/libmupdf-threads.so
++PKCS7_LIB = $(OUT)/libmupdf-pkcs7.so
+ 
+-$(MUPDF_LIB) : $(MUPDF_OBJ)
++$(MUPDF_LIB) : $(MUPDF_OBJ) $(THIRD_LIB) $(THREAD_LIB)
++	$(LINK_CMD) $(THIRD_LIBS) -shared -Wl,-soname -Wl,libmupdf.so -Wl,--no-undefined
+ $(THIRD_LIB) : $(THIRD_OBJ)
++	$(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-third.so -Wl,--no-undefined
+ $(THREAD_LIB) : $(THREAD_OBJ)
++	$(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-threads.so -Wl,--no-undefined -lpthread
+ $(PKCS7_LIB) : $(PKCS7_OBJ)
++	$(LINK_CMD) -shared -Wl,-soname -Wl,libmupdf-pkcs7.so
+ 
+-INSTALL_LIBS := $(MUPDF_LIB) $(THIRD_LIB)
++INSTALL_LIBS := $(MUPDF_LIB) $(THIRD_LIB) $(THREAD_LIB) $(PKCS7_LIB)
+ 
+ # --- Main tools and viewers ---
+ 
diff --git a/nixpkgs/pkgs/applications/misc/mupdf/default.nix b/nixpkgs/pkgs/applications/misc/mupdf/default.nix
new file mode 100644
index 000000000000..492722d33f49
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mupdf/default.nix
@@ -0,0 +1,215 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchFromGitHub
+, copyDesktopItems
+, makeDesktopItem
+, desktopToDarwinBundle
+, buildPackages
+, pkg-config
+, fixDarwinDylibNames
+, freetype
+, harfbuzz
+, openjpeg
+, jbig2dec
+, libjpeg
+, darwin
+, gumbo
+, enableX11 ? (!stdenv.isDarwin)
+, libX11
+, libXext
+, libXi
+, libXrandr
+, enableCurl ? true
+, curl
+, openssl
+, enableGL ? true
+, freeglut
+, libGLU
+, enableOcr ? false
+, leptonica
+, tesseract
+, enableCxx ? false
+, python3
+, enablePython ? false
+, which
+, swig
+, xcbuild
+, gitUpdater
+
+# for passthru.tests
+, cups-filters
+, zathura
+, mupdf
+}:
+
+assert enablePython -> enableCxx;
+
+let
+
+  freeglut-mupdf = freeglut.overrideAttrs (old: rec {
+    pname = "freeglut-mupdf";
+    version = "3.0.0-r${src.rev}";
+    src = fetchFromGitHub {
+      owner = "ArtifexSoftware";
+      repo = "thirdparty-freeglut";
+      rev = "13ae6aa2c2f9a7b4266fc2e6116c876237f40477";
+      hash = "sha256-0fuE0lm9rlAaok2Qe0V1uUrgP4AjMWgp3eTbw8G6PMM=";
+    };
+  });
+
+in
+stdenv.mkDerivation rec {
+  version = "1.23.6";
+  pname = "mupdf";
+
+  src = fetchurl {
+    url = "https://mupdf.com/downloads/archive/${pname}-${version}-source.tar.gz";
+    sha256 = "sha256-rBHrhZ3UBEiOUVPNyWUbtDQeW6r007Pyfir8gvmq3Ck=";
+  };
+
+  patches = [ ./0001-Use-command-v-in-favor-of-which.patch
+              ./0002-Add-Darwin-deps.patch
+              ./0003-Fix-cpp-build.patch
+            ];
+
+  postPatch = ''
+    substituteInPlace Makerules --replace "(shell pkg-config" "(shell $PKG_CONFIG"
+
+    patchShebangs scripts/mupdfwrap.py
+
+    # slip in makeFlags when building bindings
+    sed -i -e 's/^\( *make_args *=\)/\1 """ $(echo ''${makeFlagsArray[@]@Q})"""/' scripts/wrap/__main__.py
+
+    # fix libclang unnamed struct format
+    for wrapper in ./scripts/wrap/{cpp,state}.py; do
+      substituteInPlace "$wrapper" --replace 'struct (unnamed' '(unnamed struct'
+    done
+  '';
+
+  makeFlags = [
+    "prefix=$(out)"
+    "shared=yes"
+    "USE_SYSTEM_LIBS=yes"
+    "PKG_CONFIG=${buildPackages.pkg-config}/bin/${buildPackages.pkg-config.targetPrefix}pkg-config"
+  ] ++ lib.optionals (!enableX11) [ "HAVE_X11=no" ]
+    ++ lib.optionals (!enableGL) [ "HAVE_GLUT=no" ]
+    ++ lib.optionals (enableOcr) [ "USE_TESSERACT=yes" ];
+
+  nativeBuildInputs = [ pkg-config ]
+    ++ lib.optional (enableGL || enableX11) copyDesktopItems
+    ++ lib.optional (stdenv.isDarwin && (enableGL || enableX11)) desktopToDarwinBundle
+    ++ lib.optionals (enableCxx || enablePython) [ python3 python3.pkgs.setuptools python3.pkgs.libclang ]
+    ++ lib.optionals (enablePython) [ which swig ]
+    ++ lib.optionals stdenv.isDarwin [ fixDarwinDylibNames xcbuild ];
+
+  buildInputs = [ freetype harfbuzz openjpeg jbig2dec libjpeg gumbo ]
+    ++ lib.optionals enableX11 [ libX11 libXext libXi libXrandr ]
+    ++ lib.optionals enableCurl [ curl openssl ]
+    ++ lib.optionals enableGL (
+      if stdenv.isDarwin then
+        with darwin.apple_sdk.frameworks; [ GLUT OpenGL ]
+      else
+        [ freeglut-mupdf libGLU ]
+    )
+    ++ lib.optionals enableOcr [ leptonica tesseract ]
+  ;
+  outputs = [ "bin" "dev" "out" "man" "doc" ];
+
+  preConfigure = ''
+    # Don't remove mujs because upstream version is incompatible
+    rm -rf thirdparty/{curl,freetype,glfw,harfbuzz,jbig2dec,libjpeg,openjpeg,zlib}
+  '';
+
+  postBuild = lib.optionalString (enableCxx || enablePython) ''
+    for dir in build/*; do
+      ./scripts/mupdfwrap.py -d "$dir" -b ${lib.optionalString (enableCxx) "01"}${lib.optionalString (enablePython) "23"}
+    done
+  '';
+
+  desktopItems = lib.optionals (enableGL || enableX11) [
+    (makeDesktopItem {
+      name = pname;
+      desktopName = pname;
+      comment = meta.description;
+      icon = "mupdf";
+      exec = "${pname} %f";
+      terminal = false;
+      mimeTypes = [
+        "application/epub+zip"
+        "application/oxps"
+        "application/pdf"
+        "application/vnd.ms-xpsdocument"
+        "application/x-cbz"
+        "application/x-pdf"
+      ];
+      categories = [ "Graphics" "Viewer" ];
+      keywords = [
+        "mupdf" "comic" "document" "ebook" "viewer"
+        "cbz" "epub" "fb2" "pdf" "xps"
+      ];
+    })
+  ];
+
+  postInstall = ''
+    mkdir -p "$out/lib/pkgconfig"
+    cat >"$out/lib/pkgconfig/mupdf.pc" <<EOF
+    prefix=$out
+    libdir=\''${prefix}/lib
+    includedir=\''${prefix}/include
+
+    Name: mupdf
+    Description: Library for rendering PDF documents
+    Version: ${version}
+    Libs: -L\''${libdir} -lmupdf
+    Cflags: -I\''${includedir}
+    EOF
+
+    moveToOutput "bin" "$bin"
+  '' + (lib.optionalString (stdenv.isDarwin) ''
+    for exe in $bin/bin/*; do
+      install_name_tool -change build/shared-release/libmupdf.dylib $out/lib/libmupdf.dylib "$exe"
+    done
+  '') + (lib.optionalString (enableX11 || enableGL) ''
+    mkdir -p $bin/share/icons/hicolor/48x48/apps
+    cp docs/logo/mupdf.png $bin/share/icons/hicolor/48x48/apps
+  '') + (if enableGL then ''
+    ln -s "$bin/bin/mupdf-gl" "$bin/bin/mupdf"
+  '' else lib.optionalString (enableX11) ''
+    ln -s "$bin/bin/mupdf-x11" "$bin/bin/mupdf"
+  '') + (lib.optionalString (enableCxx) ''
+    cp platform/c++/include/mupdf/*.h $out/include/mupdf
+    cp build/*/libmupdfcpp.so $out/lib
+  '') + (lib.optionalString (enablePython) (''
+    mkdir -p $out/${python3.sitePackages}/mupdf
+    cp build/*/_mupdf.so $out/${python3.sitePackages}
+    cp build/*/mupdf.py $out/${python3.sitePackages}/mupdf/__init__.py
+  '' + lib.optionalString (stdenv.isDarwin) ''
+    install_name_tool -add_rpath $out/lib $out/${python3.sitePackages}/_mupdf.so
+  ''));
+
+  enableParallelBuilding = true;
+
+  passthru = {
+    tests = {
+      inherit cups-filters zathura;
+      inherit (python3.pkgs) pikepdf pymupdf;
+      mupdf-all = mupdf.override { enableCurl = true; enableGL = true; enableOcr = true; enableCxx = true; enablePython = true; };
+    };
+
+    updateScript = gitUpdater {
+      url = "https://git.ghostscript.com/mupdf.git";
+      ignoredVersions = ".rc.*";
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://mupdf.com";
+    description = "Lightweight PDF, XPS, and E-book viewer and toolkit written in portable C";
+    changelog = "https://git.ghostscript.com/?p=mupdf.git;a=blob_plain;f=CHANGES;hb=${version}";
+    license = licenses.agpl3Plus;
+    maintainers = with maintainers; [ vrthra fpletz lilyinstarlight ];
+    platforms = platforms.unix;
+    mainProgram = "mupdf";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/mwic/default.nix b/nixpkgs/pkgs/applications/misc/mwic/default.nix
new file mode 100644
index 000000000000..a31d6d5a90ab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mwic/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, pythonPackages }:
+
+stdenv.mkDerivation rec {
+  version = "0.7.10";
+  pname = "mwic";
+
+  src = fetchurl {
+    url = "https://github.com/jwilk/mwic/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-dmIHPehkxpSb78ymVpcPCu4L41coskrHQOg067dprOo=";
+  };
+
+  makeFlags=["PREFIX=\${out}"];
+
+  nativeBuildInputs = [
+    pythonPackages.wrapPython
+  ];
+
+  propagatedBuildInputs = with pythonPackages; [ pyenchant regex ];
+
+  postFixup = ''
+    wrapPythonPrograms
+  '';
+
+  meta = with lib; {
+    homepage = "http://jwilk.net/software/mwic";
+    description = "spell-checker that groups possible misspellings and shows them in their contexts";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/mya/argp.patch b/nixpkgs/pkgs/applications/misc/mya/argp.patch
new file mode 100644
index 000000000000..352f8a077adc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mya/argp.patch
@@ -0,0 +1,26 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 273968c..236e5fb 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -3,10 +3,6 @@ project(mya)
+ set(CMAKE_C_STANDARD 11 )
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall")
+ 
+-if(UNIX)
+-	set(LINUX TRUE)
+-endif()
+-
+ set(SRC_DIR src)
+ set(INC_DIR include)
+ 
+@@ -17,7 +13,8 @@ set_target_properties(mya PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DI
+ target_include_directories(mya PRIVATE ${INC_DIR})
+ 
+ set(LIBS curl json-c bsd)
+-if(LINUX)
+-    list(APPEND LIBS)
++find_library(ARGP argp)
++if(ARGP)
++    list(APPEND LIBS argp)
+ endif()
+ target_link_libraries(mya ${LIBS})
diff --git a/nixpkgs/pkgs/applications/misc/mya/default.nix b/nixpkgs/pkgs/applications/misc/mya/default.nix
new file mode 100644
index 000000000000..d33e6aecdf29
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mya/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, ninja
+, curl
+, json_c
+, libbsd
+, argp-standalone
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "mya";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "jmakhack";
+    repo = "myanimelist-cli";
+    rev = "refs/tags/v${finalAttrs.version}";
+    hash = "sha256-EmdkPpYEUIk9hr6rbnixjvznKSEnTCSMZz/17BfHGCk=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+  ];
+
+  buildInputs = [
+    curl
+    json_c
+    libbsd
+  ] ++ lib.optionals (!stdenv.hostPlatform.isGnu) [
+    argp-standalone
+  ];
+
+  patches = [
+    ./argp.patch
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    # Based on the upstream PKGBUILD
+    mkdir -p $out/share/doc/${finalAttrs.pname}
+    cp -a bin $out
+    cp $cmakeDir/README.md $out/share/doc/${finalAttrs.pname}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Minimalistic command line interface for fetching user anime data from MyAnimeList";
+    longDescription = ''
+      Minimalistic command line interface for fetching user anime data from MyAnimeList.
+
+      You have to run this with the MYANIMELIST_CLIENT_ID environ variable set.
+      Where to get one: <https://myanimelist.net/apiconfig>.
+      Select the type `other`.
+    '';
+    homepage = "https://github.com/jmakhack/myanimelist-cli";
+    changelog = "https://github.com/jmakhack/myanimelist-cli/releases/tag/v${finalAttrs.version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pbsds ];
+    mainProgram = "mya";
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/mysql-workbench/default.nix b/nixpkgs/pkgs/applications/misc/mysql-workbench/default.nix
new file mode 100644
index 000000000000..feda79ed8846
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mysql-workbench/default.nix
@@ -0,0 +1,209 @@
+{ lib
+, stdenv
+, fetchurl
+, substituteAll
+, cmake
+, ninja
+, pkg-config
+, glibc
+, gtk3
+, gtkmm3
+, pcre
+, swig
+, antlr4_12
+, sudo
+, mysql
+, libxml2
+, libmysqlconnectorcpp
+, vsqlite
+, gdal
+, libiodbc
+, libpthreadstubs
+, libXdmcp
+, libuuid
+, libzip
+, libsecret
+, libssh
+, python3
+, jre
+, boost
+, libsigcxx
+, libX11
+, openssl
+, rapidjson
+, proj
+, cairo
+, libxkbcommon
+, libepoxy
+, wrapGAppsHook
+, at-spi2-core
+, dbus
+, bash
+, coreutils
+, zstd
+}:
+
+let
+  inherit (python3.pkgs) paramiko pycairo pyodbc;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "mysql-workbench";
+  version = "8.0.36";
+
+  src = fetchurl {
+    url = "https://cdn.mysql.com/Downloads/MySQLGUITools/mysql-workbench-community-${finalAttrs.version}-src.tar.gz";
+    hash = "sha256-Y02KZrbCd3SRBYpgq6gYfpR+TEmg566D3zEvpwcUY3w=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./hardcode-paths.patch;
+      catchsegv = "${glibc.bin}/bin/catchsegv";
+      bash = "${bash}/bin/bash";
+      cp = "${coreutils}/bin/cp";
+      dd = "${coreutils}/bin/dd";
+      ls = "${coreutils}/bin/ls";
+      mkdir = "${coreutils}/bin/mkdir";
+      nohup = "${coreutils}/bin/nohup";
+      rm = "${coreutils}/bin/rm";
+      rmdir = "${coreutils}/bin/rmdir";
+      stat = "${coreutils}/bin/stat";
+      sudo = "${sudo}/bin/sudo";
+    })
+
+    # Fix swig not being able to find headers
+    # https://github.com/NixOS/nixpkgs/pull/82362#issuecomment-597948461
+    (substituteAll {
+      src = ./fix-swig-build.patch;
+      cairoDev = "${cairo.dev}";
+    })
+
+    # a newer libxml2 version has changed some interfaces
+    ./fix-xml2.patch
+  ];
+
+  # 1. have it look for 4.12.0 instead of 4.11.1
+  # 2. for some reason CMakeCache.txt is part of source code
+  preConfigure = ''
+    substituteInPlace CMakeLists.txt \
+      --replace "antlr-4.11.1-complete.jar" "antlr-4.12.0-complete.jar"
+    rm -f build/CMakeCache.txt
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    pkg-config
+    jre
+    swig
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    gtkmm3
+    libX11
+    antlr4_12.runtime.cpp
+    python3
+    mysql
+    libxml2
+    libmysqlconnectorcpp
+    vsqlite
+    gdal
+    boost
+    libssh
+    openssl
+    rapidjson
+    libiodbc
+    pcre
+    cairo
+    libuuid
+    libzip
+    libsecret
+    libsigcxx
+    proj
+
+    # python dependencies:
+    paramiko
+    pycairo
+    pyodbc
+    # TODO: package sqlanydb and add it here
+
+    # transitive dependencies:
+    libpthreadstubs
+    libXdmcp
+    libxkbcommon
+    libepoxy
+    at-spi2-core
+    dbus
+    zstd
+  ];
+
+  postPatch = ''
+    patchShebangs tools/get_wb_version.sh
+  '';
+
+  # GCC 13: error: 'int64_t' in namespace 'std' does not name a type
+  # when updating the version make sure this is still needed
+  env.CXXFLAGS = "-include cstdint";
+
+  env.NIX_CFLAGS_COMPILE = toString ([
+    # error: 'OGRErr OGRSpatialReference::importFromWkt(char**)' is deprecated
+    "-Wno-error=deprecated-declarations"
+  ] ++ lib.optionals stdenv.isAarch64 [
+    # error: narrowing conversion of '-1' from 'int' to 'char'
+    "-Wno-error=narrowing"
+  ] ++ lib.optionals (stdenv.cc.isGNU && lib.versionAtLeast stdenv.cc.version "12") [
+    # Needed with GCC 12 but problematic with some old GCCs
+    "-Wno-error=maybe-uninitialized"
+  ]);
+
+  cmakeFlags = [
+    "-DMySQL_CONFIG_PATH=${mysql}/bin/mysql_config"
+    "-DIODBC_CONFIG_PATH=${libiodbc}/bin/iodbc-config"
+    # mysql-workbench 8.0.21 depends on libmysqlconnectorcpp 1.1.8.
+    # Newer versions of connector still provide the legacy library when enabled
+    # but the headers are in a different location.
+    "-DWITH_ANTLR_JAR=${antlr4_12.jarLocation}"
+    "-DMySQLCppConn_INCLUDE_DIR=${libmysqlconnectorcpp}/include/jdbc"
+  ];
+
+  # There is already an executable and a wrapper in bindir
+  # No need to wrap both
+  dontWrapGApps = true;
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : "${python3}/bin"
+      --prefix PROJSO : "${proj}/lib/libproj.so"
+      --set PYTHONPATH $PYTHONPATH
+    )
+  '';
+
+  # Let’s wrap the programs not ending with bin
+  # until https://bugs.mysql.com/bug.php?id=91948 is fixed
+  postFixup = ''
+    find -L "$out/bin" -type f -executable -print0 \
+      | while IFS= read -r -d ''' file; do
+      if [[ "''${file}" != *-bin ]]; then
+        echo "Wrapping program $file"
+        wrapGApp "$file"
+      fi
+    done
+  '';
+
+  meta = {
+    description = "Visual MySQL database modeling, administration and querying tool";
+    longDescription = ''
+      MySQL Workbench is a modeling tool that allows you to design
+      and generate MySQL databases graphically. It also has administration
+      and query development modules where you can manage MySQL server instances
+      and execute SQL queries.
+    '';
+    homepage = "http://wb.mysql.com/";
+    license = lib.licenses.gpl2Only;
+    mainProgram = "mysql-workbench";
+    maintainers = with lib.maintainers; [ tomasajt ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-swig-build.patch b/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-swig-build.patch
new file mode 100644
index 000000000000..ace1e5add43f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-swig-build.patch
@@ -0,0 +1,12 @@
+--- a/library/forms/swig/CMakeLists.txt
++++ b/library/forms/swig/CMakeLists.txt
+@@ -57,7 +57,7 @@
+ 
+ set(CMAKE_SWIG_FLAGS -w312)
+ set_source_files_properties(cairo.i PROPERTIES CPLUSPLUS ON)
+-set_property(SOURCE cairo.i PROPERTY SWIG_FLAGS -DCAIRO_HAS_PNG_FUNCTIONS=1 -fcompact -DSWIG_PYTHON_LEGACY_BOOL -I/usr/include)
++set_property(SOURCE cairo.i PROPERTY SWIG_FLAGS -DCAIRO_HAS_PNG_FUNCTIONS=1 -fcompact -DSWIG_PYTHON_LEGACY_BOOL -I@cairoDev@/include)
+ if(CMAKE_VERSION VERSION_LESS 3.8)
+   swig_add_module(cairo python cairo.i)
+ else()
+
diff --git a/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-xml2.patch b/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-xml2.patch
new file mode 100644
index 000000000000..857c3f9add4c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mysql-workbench/fix-xml2.patch
@@ -0,0 +1,25 @@
+diff --git a/library/grt/src/grt.h b/library/grt/src/grt.h
+index 47bfd63..59e664b 100644
+--- a/library/grt/src/grt.h
++++ b/library/grt/src/grt.h
+@@ -35,6 +35,7 @@
+ #include <stdexcept>
+ #include <boost/function.hpp>
+ #include <libxml/xmlmemory.h>
++#include <libxml/tree.h>
+ #include "base/threading.h"
+ #include <string>
+ #include <gmodule.h>
+diff --git a/library/grt/src/unserializer.cpp b/library/grt/src/unserializer.cpp
+index 6dda76d..a6f6a3c 100644
+--- a/library/grt/src/unserializer.cpp
++++ b/library/grt/src/unserializer.cpp
+@@ -401,7 +401,7 @@ ValueRef internal::Unserializer::unserialize_xmldata(const char *data, size_t si
+   xmlDocPtr doc = xmlReadMemory(data, (int)size, NULL, NULL, XML_PARSE_NOENT);
+ 
+   if (!doc) {
+-    xmlErrorPtr error = xmlGetLastError();
++    const xmlError* error = xmlGetLastError();
+ 
+     if (error)
+       throw std::runtime_error(base::strfmt("Could not parse XML data. Line %d, %s", error->line, error->message));
diff --git a/nixpkgs/pkgs/applications/misc/mysql-workbench/hardcode-paths.patch b/nixpkgs/pkgs/applications/misc/mysql-workbench/hardcode-paths.patch
new file mode 100644
index 000000000000..a90075210cf6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mysql-workbench/hardcode-paths.patch
@@ -0,0 +1,203 @@
+diff -u -r a/frontend/linux/workbench/mysql-workbench.in b/frontend/linux/workbench/mysql-workbench.in
+--- a/frontend/linux/workbench/mysql-workbench.in	2022-03-25 09:06:06.000000000 +0200
++++ b/frontend/linux/workbench/mysql-workbench.in	2022-06-17 00:22:51.290117109 +0300
+@@ -100,8 +100,8 @@
+ if test "$WB_DEBUG" != ""; then
+   $WB_DEBUG $MWB_BINARIES_DIR/mysql-workbench-bin "$@"
+ else
+-  if type -p catchsegv > /dev/null; then
+-  catchsegv $MWB_BINARIES_DIR/mysql-workbench-bin "$@"
++  if type -p @catchsegv@ > /dev/null; then
++  @catchsegv@ $MWB_BINARIES_DIR/mysql-workbench-bin "$@"
+   else
+   $MWB_BINARIES_DIR/mysql-workbench-bin "$@"
+   fi
+diff -u -r a/plugins/migration/frontend/migration_bulk_copy_data.py b/plugins/migration/frontend/migration_bulk_copy_data.py
+--- a/plugins/migration/frontend/migration_bulk_copy_data.py	2022-03-25 09:06:06.000000000 +0200
++++ b/plugins/migration/frontend/migration_bulk_copy_data.py	2022-06-17 00:13:29.430055453 +0300
+@@ -110,7 +110,7 @@
+         return 'sh'
+ 
+     def generate_import_script(self, connection_args, path_to_file, schema_name):
+-        output = ['#!/bin/bash']
++        output = ['#!/usr/bin/env bash']
+         output.append('MYPATH=\`pwd\`')
+         
+         output.append('if [ -f \$MYPATH/%s ] ; then' % self.error_log_name)
+@@ -164,7 +164,7 @@
+         return 'sh'
+ 
+     def generate_import_script(self, connection_args, path_to_file, schema_name):
+-        output = ['#!/bin/bash']
++        output = ['#!/usr/bin/env bash']
+         output.append('MYPATH=\`pwd\`')
+         
+         output.append('if [ -f \$MYPATH/%s ] ; then' % self.error_log_name)
+@@ -417,7 +417,7 @@
+     
+         with open(script_path, 'w+') as f:
+             os.chmod(script_path, 0o700)
+-            f.write('#!/bin/bash\n\n')
++            f.write('#!/usr/bin/env bash\n\n')
+             f.write('MYPATH=`pwd`\n')
+             
+             f.write("arg_source_password=\"<put source password here>\"\n")
+@@ -521,7 +521,7 @@
+     
+         with open(script_path, 'w+') as f:
+             os.chmod(script_path, 0o700)
+-            f.write('#!/bin/bash\n\n')
++            f.write('#!/usr/bin/env bash\n\n')
+             f.write('MYPATH=`pwd`\n')
+             
+             f.write("arg_source_password=\"<put source password here>\"\n")
+diff -u -r a/plugins/wb.admin/backend/wb_server_control.py b/plugins/wb.admin/backend/wb_server_control.py
+--- a/plugins/wb.admin/backend/wb_server_control.py	2022-03-25 09:06:06.000000000 +0200
++++ b/plugins/wb.admin/backend/wb_server_control.py	2022-06-17 00:14:26.937905324 +0300
+@@ -39,7 +39,7 @@
+ 
+ UnixVariant = {
+     "" : {
+-        'sudo_command' : "/usr/bin/sudo -k -S -p EnterPasswordHere ",
++        'sudo_command' : "@sudo@ -k -S -p EnterPasswordHere ",
+     }
+ }
+ 
+diff -u -r a/plugins/wb.admin/backend/wb_server_management.py b/plugins/wb.admin/backend/wb_server_management.py
+--- a/plugins/wb.admin/backend/wb_server_management.py	2022-03-25 09:06:06.000000000 +0200
++++ b/plugins/wb.admin/backend/wb_server_management.py	2022-06-17 00:18:58.034028354 +0300
+@@ -40,7 +40,7 @@
+ 
+ def reset_sudo_prefix():
+     global default_sudo_prefix
+-    default_sudo_prefix       = '/usr/bin/sudo -k -S -p EnterPasswordHere'
++    default_sudo_prefix       = '@sudo@ -k -S -p EnterPasswordHere'
+ 
+ reset_sudo_prefix()
+ 
+@@ -100,7 +100,7 @@
+ 
+     if to_spawn:
+         command += ' &'
+-        sudo_prefix += ' /usr/bin/nohup'
++        sudo_prefix += ' @nohup@'
+       
+     # If as_user is the CURRENT then there's no need to sudo
+     if as_user != Users.CURRENT:
+@@ -111,7 +111,7 @@
+         if '/bin/sh' in sudo_prefix or '/bin/bash' in sudo_prefix:
+             command = "LANG=C " + sudo_prefix + " \"" + command.replace('\\', '\\\\').replace('"', r'\"').replace('$','\\$') + "\""
+         else:
+-            command = "LANG=C " + sudo_prefix + " /bin/bash -c \"" + command.replace('\\', '\\\\').replace('"', r'\"').replace('$','\\$') + "\""
++            command = "LANG=C " + sudo_prefix + " @bash@ -c \"" + command.replace('\\', '\\\\').replace('"', r'\"').replace('$','\\$') + "\""
+ 
+     return command
+ 
+@@ -878,9 +878,9 @@
+     @useAbsPath("path")
+     def get_file_owner(self, path, as_user = Users.CURRENT, user_password = None):
+         if self.target_os == wbaOS.linux:
+-          command = 'LC_ALL=C stat -c %U '
++          command = 'LC_ALL=C @stat@ -c %U '
+         else:
+-          command = 'LC_ALL=C /usr/bin/stat -f "%Su" '
++          command = 'LC_ALL=C @stat@ -f "%Su" '
+       
+         output = io.StringIO()
+         command = command + quote_path(path)
+@@ -904,9 +904,9 @@
+             if as_user == Users.CURRENT:
+                 raise PermissionDeniedError("Cannot set owner of directory %s" % path)        
+             else:
+-                command = "/bin/mkdir %s && chown %s %s" % (quote_path(path), with_owner, quote_path(path))
++                command = "@mkdir@ %s && chown %s %s" % (quote_path(path), with_owner, quote_path(path))
+         else:
+-            command = "/bin/mkdir %s" % (quote_path(path))
++            command = "@mkdir@ %s" % (quote_path(path))
+             
+         res = self.process_ops.exec_cmd(command,
+                                         as_user   = as_user,
+@@ -935,7 +935,7 @@
+     @useAbsPath("path")
+     def remove_directory(self, path, as_user = Users.CURRENT, user_password = None):
+         output = io.StringIO()
+-        res = self.process_ops.exec_cmd('/bin/rmdir ' + quote_path(path),
++        res = self.process_ops.exec_cmd('@rmdir@ ' + quote_path(path),
+                                         as_user   = as_user,
+                                         user_password = user_password,
+                                         output_handler = output.write,
+@@ -948,7 +948,7 @@
+     @useAbsPath("path")
+     def remove_directory_recursive(self, path, as_user = Users.CURRENT, user_password = None):
+         output = io.StringIO()
+-        res = self.process_ops.exec_cmd('/bin/rm -R ' + quote_path(path),
++        res = self.process_ops.exec_cmd('@rm@ -R ' + quote_path(path),
+                                         as_user   = as_user,
+                                         user_password = user_password,
+                                         output_handler = output.write,
+@@ -961,7 +961,7 @@
+     @useAbsPath("path")
+     def delete_file(self, path, as_user = Users.CURRENT, user_password = None):
+         output = io.StringIO()
+-        res = self.process_ops.exec_cmd("/bin/rm " + quote_path(path),
++        res = self.process_ops.exec_cmd("@rm@ " + quote_path(path),
+                                         as_user   = as_user,
+                                         user_password = user_password,
+                                         output_handler = output.write,
+@@ -1009,7 +1009,7 @@
+     def _copy_file(self, source, dest, as_user = Users.CURRENT, user_password = None):
+         output = io.StringIO()
+         
+-        res = self.process_ops.exec_cmd("LC_ALL=C /bin/cp " + quote_path(source) + " " + quote_path(dest),
++        res = self.process_ops.exec_cmd("LC_ALL=C @cp@ " + quote_path(source) + " " + quote_path(dest),
+                       as_user   = as_user,
+                       user_password = user_password,
+                       output_handler = output.write,
+@@ -1085,9 +1085,9 @@
+             # for ls -l, the output format changes depending on stdout being a terminal or not
+             # since both cases are possible, we need to handle both at the same time (1st line being total <nnnn> or not)
+             # the good news is that if the line is there, then it will always start with total, regardless of the locale
+-            command = 'LC_ALL=C /bin/ls -l -p %s' % quote_path(path)
++            command = 'LC_ALL=C @ls@ -l -p %s' % quote_path(path)
+         else:
+-            command = 'LC_ALL=C /bin/ls -1 -p %s' % quote_path(path)
++            command = 'LC_ALL=C @ls@ -1 -p %s' % quote_path(path)
+             
+         output = io.StringIO()
+         res = self.process_ops.exec_cmd(command,
+@@ -2163,9 +2163,9 @@
+     def get_range(self, start, end):
+         f = io.StringIO()
+         if not self._need_sudo:
+-            ret = self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i count=%i 2> /dev/null" % (quote_path(self.path), start, end-start), as_user = Users.CURRENT, user_password=None, output_handler=f.write)
++            ret = self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i count=%i 2> /dev/null" % (quote_path(self.path), start, end-start), as_user = Users.CURRENT, user_password=None, output_handler=f.write)
+         else:
+-            ret = self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i count=%i 2> /dev/null" % (quote_path(self.path), start, end-start), as_user = Users.ADMIN, user_password=self.get_password, output_handler=f.write)
++            ret = self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i count=%i 2> /dev/null" % (quote_path(self.path), start, end-start), as_user = Users.ADMIN, user_password=self.get_password, output_handler=f.write)
+ 
+         if ret != 0:
+             raise RuntimeError("Could not get data from file %s" % self.path)
+@@ -2173,9 +2173,9 @@
+ 
+     def read_task(self, offset, file):
+         if not self._need_sudo:
+-            self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.CURRENT, user_password=None, output_handler=file.write)
++            self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.CURRENT, user_password=None, output_handler=file.write)
+         else:
+-            self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.ADMIN, user_password=self.get_password, output_handler=file.write)
++            self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.ADMIN, user_password=self.get_password, output_handler=file.write)
+         # this will signal the reader end that there's no more data
+         file.close()
+ 
+@@ -2202,9 +2202,9 @@
+         self._pos = offset
+         f = io.StringIO()
+         if not self._need_sudo:
+-            self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.CURRENT, user_password=None, output_handler=f.write)
++            self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.CURRENT, user_password=None, output_handler=f.write)
+         else:
+-            self.server_helper.execute_command("/bin/dd if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.ADMIN, user_password=self._password, output_handler=f.write)
++            self.server_helper.execute_command("@dd@ if=%s ibs=1 skip=%i 2> /dev/null" % (quote_path(self.path), offset), as_user = Users.ADMIN, user_password=self._password, output_handler=f.write)
+         self.data = f
+         self.data.seek(0)
+         if self.skip_first_newline:
diff --git a/nixpkgs/pkgs/applications/misc/mystem/default.nix b/nixpkgs/pkgs/applications/misc/mystem/default.nix
new file mode 100644
index 000000000000..50c2c35749e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/mystem/default.nix
@@ -0,0 +1,28 @@
+{lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "mystem";
+  version = "3.1";
+
+  src = fetchurl {
+    url = "http://download.cdn.yandex.net/mystem/${pname}-${version}-linux-64bit.tar.gz";
+    sha256 = "0qha7jvkdmil3jiwrpsfhkqsbkqn9dzgx3ayxwjdmv73ikmg95j6";
+  };
+
+  buildCommand = ''
+    tar -xaf "$src"
+    mkdir -p $out/bin
+    install -Dm755 mystem $out/bin/mystem
+    patchelf --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) $out/bin/mystem
+  '';
+
+  meta = with lib; {
+    description = "Morphological analysis of Russian text";
+    homepage = "https://yandex.ru/dev/mystem/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfreeRedistributable;
+    maintainers = with maintainers; [ abbradar ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "mystem";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nanoblogger/default.nix b/nixpkgs/pkgs/applications/misc/nanoblogger/default.nix
new file mode 100644
index 000000000000..102991f00256
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nanoblogger/default.nix
@@ -0,0 +1,31 @@
+{ fetchurl, lib, stdenv, bash }:
+
+stdenv.mkDerivation rec {
+  version = "3.5-rc1";
+  pname = "nanoblogger";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/nanoblogger/${pname}-${version}.tar.gz";
+    sha256 = "09mv52a5f0h3das8x96irqyznm69arfskx472b7w3b9q4a2ipxbq";
+  };
+
+  buildInputs = [ ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r * $out
+    cat > $out/bin/nb << EOF
+    #!${bash}/bin/bash
+    $out/nb "\$@"
+    EOF
+    chmod 755 $out/bin/nb
+  '';
+
+  meta = {
+    description = "Small weblog engine written in Bash for the command line";
+    homepage = "https://nanoblogger.sourceforge.net/";
+    license = lib.licenses.gpl2;
+    mainProgram = "nb";
+    platforms = lib.platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/natural-docs/default.nix b/nixpkgs/pkgs/applications/misc/natural-docs/default.nix
new file mode 100644
index 000000000000..05a752ab465d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/natural-docs/default.nix
@@ -0,0 +1,37 @@
+{ stdenv, fetchzip, makeWrapper, mono, lib }:
+
+stdenv.mkDerivation rec {
+  pname = "natural-docs";
+  version = "2.3";
+
+  src = fetchzip {
+    url = "https://naturaldocs.org/download/natural_docs/${version}/Natural_Docs_${version}.zip";
+    sha256 = "sha256-yk9PxrZ6+ocqGLB+xCBGiQKnHLMdp2r+NuoMhWsr0GM=";
+  };
+
+  dontPatch = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r . $out/
+    makeWrapper ${mono}/bin/mono $out/bin/NaturalDocs --add-flags "$out/NaturalDocs.exe"
+  '';
+
+  meta = with lib; {
+    description = "Documentation generator for multiple programming languages.";
+    longDescription = ''
+      Natural Docs is an open source documentation generator for multiple
+      programming languages. You document your code in a natural syntax that
+      reads like plain English. Natural Docs then scans your code and builds
+      high-quality HTML documentation from it.
+    '';
+    homepage = "https://naturaldocs.org";
+    license = licenses.agpl3Only;
+    maintainers = [ maintainers.nkpvk ];
+    mainProgram = "NaturalDocs";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/navi/default.nix b/nixpkgs/pkgs/applications/misc/navi/default.nix
new file mode 100644
index 000000000000..3ea19ebd0209
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/navi/default.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchFromGitHub, lib, makeWrapper, rustPlatform, wget, libiconv, withFzf ? true, fzf }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "navi";
+  version = "2.23.0";
+
+  src = fetchFromGitHub {
+    owner = "denisidoro";
+    repo = "navi";
+    rev = "v${version}";
+    sha256 = "sha256-pqBTrHBvsuosyQqCnSiI3+pOe2J6XeIQ8dai+kTVFjc=";
+  };
+
+  cargoHash = "sha256-dx13p+kEyqhyaF8ejJLWsgW3IpEvS9nlIHhjxOpp4d8=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [ libiconv ];
+
+  postInstall = ''
+    wrapProgram $out/bin/navi \
+      --prefix PATH : "$out/bin" \
+      --prefix PATH : ${lib.makeBinPath([ wget ] ++ lib.optionals withFzf [ fzf ])}
+  '';
+
+  checkFlags = [
+    # error: Found argument '--test-threads' which wasn't expected, or isn't valid in this context
+    "--skip=test_parse_variable_line"
+   ];
+
+  meta = with lib; {
+    description = "An interactive cheatsheet tool for the command-line and application launchers";
+    homepage = "https://github.com/denisidoro/navi";
+    license = licenses.asl20;
+    platforms = platforms.unix;
+    mainProgram = "navi";
+    maintainers = with maintainers; [ cust0dian ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/neo/default.nix b/nixpkgs/pkgs/applications/misc/neo/default.nix
new file mode 100644
index 000000000000..27216c381db6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/neo/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "neo";
+  version = "0.6.1";
+
+  src = fetchurl {
+    url = "https://github.com/st3w/neo/releases/download/v${version}/neo-${version}.tar.gz";
+    sha256 = "sha256-pV5O1e/QpK8kjRYBinqq07YX7x06wF0pKiWKOKr0ank=";
+  };
+
+  buildInputs = [ ncurses ];
+
+  meta = with lib; {
+    description = ''Simulates the digital rain from "The Matrix"'';
+    license = licenses.gpl3Plus;
+    longDescription = ''
+      neo recreates the digital rain effect from "The Matrix". Streams of random
+      characters will endlessly scroll down your terminal screen.
+    '';
+    homepage = "https://github.com/st3w/neo";
+    platforms = ncurses.meta.platforms;
+    maintainers = [ maintainers.abbe ];
+    mainProgram = "neo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/neo4j-desktop/default.nix b/nixpkgs/pkgs/applications/misc/neo4j-desktop/default.nix
new file mode 100644
index 000000000000..42cd8067fe32
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/neo4j-desktop/default.nix
@@ -0,0 +1,34 @@
+{ appimageTools, lib, fetchurl }:
+let
+  pname = "neo4j-desktop";
+  version = "1.5.8";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://s3-eu-west-1.amazonaws.com/dist.neo4j.org/${pname}/linux-offline/${name}-x86_64.AppImage";
+    hash = "sha256-RqzR4TuvDasbkj/wKvOOS7r46sXDxvw3B5ydFGZeHX8=";
+  };
+
+  appimageContents = appimageTools.extract { inherit name src; };
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  extraPkgs = pkgs: with pkgs; [ libsecret ];
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/${pname}.desktop -t $out/share/applications
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "A GUI front-end for Neo4j";
+    homepage = "https://neo4j.com/";
+    license = licenses.unfree;
+    maintainers = [ maintainers.bobvanderlinden ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "neo4j-desktop";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nerd-font-patcher/default.nix b/nixpkgs/pkgs/applications/misc/nerd-font-patcher/default.nix
new file mode 100644
index 000000000000..76bd2a44824e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nerd-font-patcher/default.nix
@@ -0,0 +1,40 @@
+{ python3Packages, lib, fetchzip }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "nerd-font-patcher";
+  version = "3.1.1";
+
+  src = fetchzip {
+    url = "https://github.com/ryanoasis/nerd-fonts/releases/download/v${version}/FontPatcher.zip";
+    sha256 = "sha256-H2dPUs6HVKJcjxy5xtz9nL3SSPXKQF3w30/0l7A0PeY=";
+    stripRoot = false;
+  };
+
+  propagatedBuildInputs = with python3Packages; [ fontforge ];
+
+  format = "other";
+
+  postPatch = ''
+    sed -i font-patcher \
+      -e 's,__dir__ + "/src,"'$out'/share/,'
+    sed -i font-patcher \
+      -e  's,/bin/scripts/name_parser,/../lib/name_parser,'
+  '';
+  # Note: we cannot use $out for second substitution
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share $out/lib
+    install -Dm755 font-patcher $out/bin/nerd-font-patcher
+    cp -ra src/glyphs $out/share/
+    cp -ra bin/scripts/name_parser $out/lib/
+  '';
+
+  meta = with lib; {
+    description = "Font patcher to generate Nerd font";
+    homepage = "https://nerdfonts.com/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ck3d ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nimbo/default.nix b/nixpkgs/pkgs/applications/misc/nimbo/default.nix
new file mode 100644
index 000000000000..d028f205f3d5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nimbo/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, python3
+, fetchFromGitHub
+, installShellFiles
+, awscli
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "nimbo";
+  version = "0.3.0";
+  disabled = python3.pythonOlder "3.6";
+
+  src = fetchFromGitHub {
+    owner = "nimbo-sh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "YC5T02Sw22Uczufbyts8l99oCQW4lPq0gPMRXCoKsvw=";
+  };
+
+  # Rich + Colorama are added in `propagatedBuildInputs`
+  postPatch = ''
+    substituteInPlace setup.py \
+      --replace "awscli>=1.19<2.0" "" \
+      --replace "colorama==0.4.3" "" \
+      --replace "rich>=10.1.0" ""
+  '';
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    setuptools
+    boto3
+    requests
+    click
+    pyyaml
+    pydantic
+    rich
+    colorama
+  ];
+
+  # nimbo tests require an AWS instance
+  doCheck = false;
+  pythonImportsCheck = [ "nimbo" ];
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ awscli ])
+  ];
+
+  postInstall = ''
+    installShellCompletion --cmd nimbo \
+      --zsh <(_NIMBO_COMPLETE=source_zsh $out/bin/nimbo) \
+      --bash <(_NIMBO_COMPLETE=source_bash $out/bin/nimbo) \
+      --fish  <(_NIMBO_COMPLETE=source_fish $out/bin/nimbo)
+  '';
+
+  meta = with lib; {
+    description = "Run machine learning jobs on AWS with a single command";
+    homepage = "https://github.com/nimbo-sh/nimbo";
+    license = licenses.bsl11;
+    maintainers = with maintainers; [ noreferences ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nix-tour/default.nix b/nixpkgs/pkgs/applications/misc/nix-tour/default.nix
new file mode 100644
index 000000000000..bff2a40e5370
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nix-tour/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, electron
+, runtimeShell
+, makeWrapper
+, copyDesktopItems
+, makeDesktopItem
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nix-tour";
+  version = "unstable-2022-01-03";
+
+  src = fetchFromGitHub {
+    owner = "nixcloud";
+    repo = "tour_of_nix";
+    rev = "6a6784983e6dc121574b97eb9b1d03592c8cb9a7";
+    sha256 = "sha256-BhQz59wkwwY0ShXzqUD6MQl4NE/jUik5RbLzseEc5Bc=";
+  };
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+  buildInputs = [ electron ];
+
+  installPhase = ''
+    install -d $out/bin $out/share/nix-tour
+    cp -R * $out/share/nix-tour
+    makeWrapper ${electron}/bin/electron $out/bin/nix-tour \
+      --add-flags $out/share/nix-tour/electron-main.js
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      desktopName = "Tour of Nix";
+      genericName = "Tour of Nix";
+      comment =
+        "Interactive programming guide dedicated to the nix programming language";
+      categories = [ "Development" "Documentation" ];
+      exec = "nix-tour";
+    })
+  ];
+
+  meta = with lib; {
+    description = "'the tour of nix' from nixcloud.io/tour as offline version";
+    homepage = "https://nixcloud.io/tour";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ qknight yuu ];
+    mainProgram = "nix-tour";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nixnote2/default.nix b/nixpkgs/pkgs/applications/misc/nixnote2/default.nix
new file mode 100644
index 000000000000..b55497a168ce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nixnote2/default.nix
@@ -0,0 +1,43 @@
+{ lib, mkDerivation, fetchFromGitHub, boost
+, qtbase, qtwebkit, poppler, qmake, hunspell, html-tidy}:
+
+mkDerivation rec {
+  pname = "nixnote2";
+  version = "2.0.2";
+
+  src = fetchFromGitHub {
+    owner = "baumgarr";
+    repo = "nixnote2";
+    rev = "v${version}";
+    sha256 = "0cfq95mxvcgby66r61gclm1a2c6zck5aln04xmg2q8kg6p9d31fr";
+  };
+
+  buildInputs = [ boost qtbase qtwebkit poppler hunspell ];
+
+  nativeBuildInputs = [ qmake ];
+
+  postPatch = ''
+    # Fix location of poppler-qt5.h
+    for f in threads/indexrunner.cpp html/noteformatter.cpp utilities/noteindexer.cpp gui/plugins/popplerviewer.h gui/plugins/pluginfactory.h gui/plugins/popplerviewer.cpp ; do
+      substituteInPlace $f \
+        --replace '#include <poppler-qt5.h>' '#include <poppler/qt5/poppler-qt5.h>'
+    done
+
+    substituteInPlace help/about.html --replace '__VERSION__' '${version}'
+
+    substituteInPlace nixnote.cpp --replace 'tidyProcess.start("tidy' 'tidyProcess.start("${html-tidy}/bin/tidy'
+  '';
+
+  postInstall = ''
+    cp images/windowIcon.png $out/share/pixmaps/nixnote2.png
+    cp theme.ini $out/share/nixnote2/theme.ini
+  '';
+
+  meta = with lib; {
+    description = "An unofficial client of Evernote";
+    homepage = "http://www.nixnote.org/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ htr ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/notable/default.nix b/nixpkgs/pkgs/applications/misc/notable/default.nix
new file mode 100644
index 000000000000..4606ee943278
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/notable/default.nix
@@ -0,0 +1,50 @@
+{ appimageTools, makeWrapper, fetchurl, lib }:
+
+let
+  pname = "notable";
+  version = "1.8.4";
+  sha256 = "0rvz8zwsi62kiq89pv8n2wh9h5yb030kvdr1vf65xwqkhqcrzrby";
+
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/notable/notable/releases/download/v${version}/Notable-${version}.AppImage";
+    inherit sha256;
+  };
+
+  appimageContents = appimageTools.extract {
+    inherit name src;
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+in
+appimageTools.wrapType2 rec {
+
+  inherit pname version src;
+
+  profile = ''
+    export LC_ALL=C.UTF-8
+  '';
+
+  multiArch = false; # no 32bit needed
+  extraPkgs = p: (appimageTools.defaultFhsEnvArgs.multiPkgs p) ++ [ p.at-spi2-atk p.at-spi2-core ];
+  extraInstallCommands = ''
+    mv $out/bin/{${name},${pname}}
+    install -m 444 -D ${appimageContents}/notable.desktop $out/share/applications/notable.desktop
+    install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/1024x1024/apps/notable.png \
+      $out/share/icons/hicolor/1024x1024/apps/notable.png
+    substituteInPlace $out/share/applications/notable.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    source "${makeWrapper}/nix-support/setup-hook"
+    wrapProgram "$out/bin/${pname}" \
+      --add-flags "--disable-seccomp-filter-sandbox"
+  '';
+
+  meta = with lib; {
+    description = "The markdown-based note-taking app that doesn't suck";
+    homepage = "https://github.com/notable/notable";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/notejot/default.nix b/nixpkgs/pkgs/applications/misc/notejot/default.nix
new file mode 100644
index 000000000000..a2882e16f93e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/notejot/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gtk4
+, json-glib
+, libadwaita
+, libgee
+, desktop-file-utils
+, meson
+, ninja
+, nix-update-script
+, pkg-config
+, vala
+, wrapGAppsHook4
+, fetchpatch
+}:
+
+stdenv.mkDerivation rec {
+  pname = "notejot";
+  version = "3.5.1";
+
+  src = fetchFromGitHub {
+    owner = "lainsce";
+    repo = pname;
+    rev = version;
+    hash = "sha256-p5F0OITgfZyvHwndI5r5BE524+nft7A2XfR3BJZFamU=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    gtk4
+    json-glib
+    libadwaita
+    libgee
+  ];
+
+
+  patches = [
+    # Fixes the compilation error with new Vala compiler. Remove in the next version.
+    (fetchpatch {
+      url = "https://github.com/musicinmybrain/notejot/commit/c6a7cfcb792de63fb51eb174f9f3d4e02f6a2ce1.patch";
+      hash = "sha256-dexPKIpUaAu/p0K2WQpElhPNt86CS+jD0dPL5+CTl4I=";
+    })
+  ];
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = with lib; {
+    homepage = "https://github.com/lainsce/notejot";
+    description = "Stupidly-simple notes app";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.linux;
+    mainProgram = "io.github.lainsce.Notejot";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/notesnook/default.nix b/nixpkgs/pkgs/applications/misc/notesnook/default.nix
new file mode 100644
index 000000000000..62788b5a7f13
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/notesnook/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, appimageTools, fetchurl, undmg }:
+
+let
+  pname = "notesnook";
+  version = "2.6.1";
+
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "Unsupported system: ${system}";
+
+  suffix = {
+    x86_64-linux = "linux_x86_64.AppImage";
+    x86_64-darwin = "mac_x64.dmg";
+    aarch64-darwin = "mac_arm64.dmg";
+  }.${system} or throwSystem;
+
+  src = fetchurl {
+    url = "https://github.com/streetwriters/notesnook/releases/download/v${version}/notesnook_${suffix}";
+    hash = {
+      x86_64-linux = "sha256-PLHP1Q4+xcHyr0323K4BD+oH57SspsrAcxRe/C6RFDU=";
+      x86_64-darwin = "sha256-gOUL3qLSM+/pr519Gc0baUtbmhA40lG6XzuCRyGILkc=";
+      aarch64-darwin = "sha256-d1nXdCv1mK4+4Gef1upIkHS3J2d9qzTLXbBWabsJwpw=";
+    }.${system} or throwSystem;
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit pname version src;
+  };
+
+  meta = with lib; {
+    description = "A fully open source & end-to-end encrypted note taking alternative to Evernote.";
+    longDescription = ''
+      Notesnook is a free (as in speech) & open source note taking app
+      focused on user privacy & ease of use. To ensure zero knowledge
+      principles, Notesnook encrypts everything on your device using
+      XChaCha20-Poly1305 & Argon2.
+    '';
+    homepage = "https://notesnook.com";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ j0lol ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
+    mainProgram = "notesnook";
+  };
+
+  linux = appimageTools.wrapType2 rec {
+    inherit pname version src meta;
+
+    profile = ''
+      export LC_ALL=C.UTF-8
+    '';
+
+    multiPkgs = null; # no 32bit needed
+    extraPkgs = appimageTools.defaultFhsEnvArgs.multiPkgs;
+    extraInstallCommands = ''
+      mv $out/bin/{${pname}-${version},${pname}}
+      install -Dm444 ${appimageContents}/notesnook.desktop -t $out/share/applications
+      install -Dm444 ${appimageContents}/notesnook.png -t $out/share/pixmaps
+      substituteInPlace $out/share/applications/notesnook.desktop \
+        --replace 'Exec=AppRun --no-sandbox %U' 'Exec=${pname}'
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version src meta;
+
+    nativeBuildInputs = [ undmg ];
+
+    sourceRoot = "Notesnook.app";
+
+    installPhase = ''
+      mkdir -p $out/Applications/Notesnook.app
+      cp -R . $out/Applications/Notesnook.app
+    '';
+  };
+in
+if stdenv.isDarwin
+then darwin
+else linux
diff --git a/nixpkgs/pkgs/applications/misc/notify-osd-customizable/default.nix b/nixpkgs/pkgs/applications/misc/notify-osd-customizable/default.nix
new file mode 100644
index 000000000000..17377c6dae55
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/notify-osd-customizable/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv
+, dbus-glib
+, fetchurl
+, glib
+, gnome
+, libnotify
+, libtool
+, libwnck
+, makeWrapper
+, pkg-config
+, gsettings-desktop-schemas
+}:
+
+let baseURI = "https://launchpad.net/~leolik/+archive/leolik";
+in stdenv.mkDerivation rec {
+  pname = "notify-osd";
+  version = "0.9.35+16.04.20160415";
+
+  src = fetchurl {
+    url = "${baseURI}/+files/notify-osd_${version}-0ubuntu1-leolik~ppa0.tar.gz";
+    sha256 = "026dr46jh3xc4103wnslzy7pxbxkkpflh52c59j8vzwaa7bvvzkv";
+    name = "notify-osd-customizable.tar.gz";
+  };
+
+  preConfigure = "./autogen.sh --libexecdir=$(out)/bin";
+
+  nativeBuildInputs = [ pkg-config makeWrapper libtool ];
+  buildInputs = [
+    glib libwnck libnotify dbus-glib
+    gsettings-desktop-schemas gnome.gnome-common
+  ];
+
+  configureFlags = [ "--libexecdir=$(out)/bin" ];
+
+  preFixup = ''
+    wrapProgram "$out/bin/notify-osd" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
+  '';
+
+  meta = with lib; {
+    description = "Daemon that displays passive pop-up notifications";
+    homepage = "https://launchpad.net/notify-osd";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.imalison ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/notify-osd/default.nix b/nixpkgs/pkgs/applications/misc/notify-osd/default.nix
new file mode 100644
index 000000000000..9c0c5a3921ef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/notify-osd/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, pkg-config, glib, libwnck, libnotify, dbus-glib, makeWrapper, gsettings-desktop-schemas }:
+
+stdenv.mkDerivation rec {
+  pname = "notify-osd";
+  version = "0.9.34";
+
+  src = fetchurl {
+    url = "https://launchpad.net/notify-osd/precise/${version}/+download/notify-osd-${version}.tar.gz";
+    sha256 = "0g5a7a680b05x27apz0y1ldl5csxpp152wqi42s107jymbp0s20j";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [
+    glib libwnck libnotify dbus-glib
+    gsettings-desktop-schemas
+  ];
+
+  configureFlags = [ "--libexecdir=$(out)/bin" ];
+
+  preFixup = ''
+    wrapProgram "$out/bin/notify-osd" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
+  '';
+
+  meta = with lib; {
+    description = "Daemon that displays passive pop-up notifications";
+    homepage = "https://launchpad.net/notify-osd";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.bodil ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/notifymuch/default.nix b/nixpkgs/pkgs/applications/misc/notifymuch/default.nix
new file mode 100644
index 000000000000..e94b6f2f156b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/notifymuch/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, fetchFromGitHub
+, gobject-introspection
+, libnotify
+, wrapGAppsHook
+, gtk3
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "notifymuch";
+  version = "0.1";
+  format = "setuptools";
+
+  src = fetchFromGitHub {
+    owner = "kspi";
+    repo = "notifymuch";
+    # https://github.com/kspi/notifymuch/issues/11
+    rev = "9d4aaf54599282ce80643b38195ff501120807f0";
+    sha256 = "1lssr7iv43mp5v6nzrfbqlfzx8jcc7m636wlfyhhnd8ydd39n6k4";
+  };
+
+  propagatedBuildInputs = [
+    libnotify
+    gtk3
+  ] ++ (with python3.pkgs; [
+    notmuch
+    pygobject3
+  ]);
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  strictDeps = false;
+
+  meta = with lib; {
+    description = "Display desktop notifications for unread mail in a notmuch database";
+    homepage = "https://github.com/kspi/notifymuch";
+    maintainers = with maintainers; [ arjan-s ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nrsc5/default.nix b/nixpkgs/pkgs/applications/misc/nrsc5/default.nix
new file mode 100644
index 000000000000..2b1a2ff22188
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nrsc5/default.nix
@@ -0,0 +1,54 @@
+{ lib, stdenv, fetchFromGitHub,
+  autoconf, automake, libtool, cmake,
+  rtl-sdr, libao, fftwFloat
+} :
+let
+  src_faad2 = fetchFromGitHub {
+    owner = "dsvensson";
+    repo = "faad2";
+    rev = "b7aa099fd3220b71180ed2b0bc19dc6209a1b418";
+    sha256 = "0pcw2x9rjgkf5g6irql1j4m5xjb4lxj6468z8v603921bnir71mf";
+  };
+
+  version = "1.0";
+
+in stdenv.mkDerivation {
+  pname = "nrsc5";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "theori-io";
+    repo = "nrsc5";
+    rev = "v${version}";
+    sha256 = "09zzh3h1zzf2lwrbz3i7rif2hw36d9ska8irvxaa9lz6xc1y68pg";
+  };
+
+  postUnpack = ''
+    export srcRoot=`pwd`
+    export faadSrc="$srcRoot/faad2-prefix/src/faad2_external"
+    mkdir -p $faadSrc
+    cp -r ${src_faad2}/* $faadSrc
+    chmod -R u+w $faadSrc
+  '';
+
+  postPatch = ''
+    sed -i '/GIT_REPOSITORY/d' CMakeLists.txt
+    sed -i '/GIT_TAG/d' CMakeLists.txt
+    sed -i "s:set (FAAD2_PREFIX .*):set (FAAD2_PREFIX \"$srcRoot/faad2-prefix\"):" CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [ cmake autoconf automake libtool ];
+  buildInputs = [ rtl-sdr libao fftwFloat ];
+
+  cmakeFlags = [ "-DUSE_COLOR=ON" "-DUSE_FAAD2=ON" ];
+
+  meta = with lib; {
+    homepage = "https://github.com/theori-io/nrsc5";
+    description = "HD-Radio decoder for RTL-SDR";
+    platforms = lib.platforms.linux;
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ markuskowa ];
+    mainProgram = "nrsc5";
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/ns-usbloader/99-ns-usbloader.rules b/nixpkgs/pkgs/applications/misc/ns-usbloader/99-ns-usbloader.rules
new file mode 100644
index 000000000000..44644ba21770
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ns-usbloader/99-ns-usbloader.rules
@@ -0,0 +1,4 @@
+# Nintendo Switch HOS
+SUBSYSTEM=="usb", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="3000", MODE="0666"
+# Nintendo Switch RCM
+SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", ATTRS{idProduct}=="7321", MODE="0666"
diff --git a/nixpkgs/pkgs/applications/misc/ns-usbloader/default.nix b/nixpkgs/pkgs/applications/misc/ns-usbloader/default.nix
new file mode 100644
index 000000000000..2a08b24435a2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ns-usbloader/default.nix
@@ -0,0 +1,105 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, copyDesktopItems
+, makeDesktopItem
+, makeWrapper
+, wrapGAppsHook
+, gvfs
+, maven
+, jre
+}:
+let
+  pkgDescription = "All-in-one tool for managing Nintendo Switch homebrew";
+
+  selectSystem = attrs:
+    attrs.${stdenv.hostPlatform.system}
+      or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
+
+  jreWithJavaFX = jre.override { enableJavaFX = true; };
+in
+maven.buildMavenPackage rec {
+  pname = "ns-usbloader";
+  version = "7.1";
+
+  src = fetchFromGitHub {
+    owner = "developersu";
+    repo = "ns-usbloader";
+    rev = "v${version}";
+    sha256 = "sha256-gSf5SCIhcUEYGsYssXVGjUweVU+guxOI+lzD3ANr96w=";
+  };
+
+  patches = [ ./no-launch4j.patch ./make-deterministic.patch ];
+
+  # JavaFX pulls in architecture dependent jar dependencies. :(
+  # May be possible to unify these, but could lead to huge closure sizes.
+  mvnHash = selectSystem {
+    x86_64-linux = "sha256-vXZAlZOh9pXNF1RL78oQRal5pkXFRKDz/7SP9LibgiA=";
+    aarch64-linux = "sha256-xC+feb41EPi30gBrVR8usanVULI2Pt0knztzNagPQiw=";
+  };
+  mvnParameters = "-DskipTests";
+
+  nativeBuildInputs = [
+    copyDesktopItems
+    makeWrapper
+    wrapGAppsHook
+    gvfs
+  ];
+
+  # Don't wrap binaries twice.
+  dontWrapGApps = true;
+
+  ### Issues:
+  # * Set us to only use software rendering with `-Dprism.order=sw`, had a hard time
+  #   getting `prism_es2` happy with NixOS's GL/GLES.
+  # * Currently, there's also a lot of `Failed to build parent project for org.openjfx:javafx-*`
+  #   at build, but jar runs fine when using `jreWithJavaFX`.
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/java
+    install -Dm644 target/ns-usbloader-${version}.jar $out/share/java/ns-usbloader.jar
+
+    mkdir -p $out/lib/udev/rules.d
+    install -Dm644 ${./99-ns-usbloader.rules} $out/lib/udev/rules.d/99-ns-usbloader.rules
+
+    mkdir -p $out/share/icons/hicolor
+    install -Dm644 target/classes/res/app_icon32x32.png $out/share/icons/hicolor/32x32/apps/ns-usbloader.png
+    install -Dm644 target/classes/res/app_icon48x48.png $out/share/icons/hicolor/48x48/apps/ns-usbloader.png
+    install -Dm644 target/classes/res/app_icon64x64.png $out/share/icons/hicolor/64x64/apps/ns-usbloader.png
+    install -Dm644 target/classes/res/app_icon128x128.png $out/share/icons/hicolor/128x128/apps/ns-usbloader.png
+
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    mkdir -p $out/bin
+    makeWrapper ${jreWithJavaFX}/bin/java $out/bin/ns-usbloader \
+      --append-flags "-Dprism.order=sw -jar $out/share/java/ns-usbloader.jar" \
+      "''${gappsWrapperArgs[@]}"
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      type = "Application";
+      name = "ns-usbloader";
+      desktopName = "NS-USBLoader";
+      comment = pkgDescription;
+      exec = "ns-usbloader";
+      icon = "ns-usbloader";
+      categories = [ "Game" ];
+      terminal = false;
+      keywords = [ "nintendo" "switch" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = pkgDescription;
+    homepage = "https://github.com/developersu/ns-usbloader";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ soupglasses ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+    mainProgram = "ns-usbloader";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ns-usbloader/make-deterministic.patch b/nixpkgs/pkgs/applications/misc/ns-usbloader/make-deterministic.patch
new file mode 100644
index 000000000000..531f640b0891
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ns-usbloader/make-deterministic.patch
@@ -0,0 +1,130 @@
+From 3f85e2754144bbf2805ba68d8c76b3dec3299f4d Mon Sep 17 00:00:00 2001
+From: Sofi <sofi+git@mailbox.org>
+Date: Sat, 29 Jul 2023 11:16:38 +0200
+Subject: [PATCH] make deterministic
+
+---
+ pom.xml | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 57 insertions(+), 6 deletions(-)
+
+diff --git a/pom.xml b/pom.xml
+index 320d4f3..5a594e6 100644
+--- a/pom.xml
++++ b/pom.xml
+@@ -51,6 +51,7 @@
+         <maven.build.timestamp.format>yyyyMMdd.HHmmss</maven.build.timestamp.format>
+         <javafx.version>19.0.2.1</javafx.version>
+         <maven.compiler.release>11</maven.compiler.release>
++        <project.build.outputTimestamp>2023-01-01T00:00:00Z</project.build.outputTimestamp>
+     </properties>
+ 
+     <issueManagement>
+@@ -166,7 +167,7 @@
+         </dependency>
+     </dependencies>
+     <build>
+-        <finalName>${project.artifactId}-${project.version}-${maven.build.timestamp}</finalName>
++        <finalName>${project.artifactId}-${project.version}</finalName>
+         <resources>
+             <resource>
+                 <directory>src/main/resources</directory>
+@@ -193,26 +194,51 @@
+             <plugin>
+                 <groupId>org.apache.maven.plugins</groupId>
+                 <artifactId>maven-surefire-plugin</artifactId>
+-                <version>2.22.2</version>
++                <version>3.1.2</version>
+             </plugin>
+             <plugin>
+                 <groupId>org.apache.maven.plugins</groupId>
+                 <artifactId>maven-failsafe-plugin</artifactId>
+-                <version>2.22.2</version>
++                <version>3.1.2</version>
+             </plugin>
+             <plugin>
+                 <groupId>org.apache.maven.plugins</groupId>
+                 <artifactId>maven-compiler-plugin</artifactId>
+-                <version>3.10.1</version>
++                <version>3.11.0</version>
+                 <configuration>
+                     <release>11</release>
+                 </configuration>
+             </plugin>
++            <plugin>
++              <groupId>org.apache.maven.plugins</groupId>
++              <artifactId>maven-enforcer-plugin</artifactId>
++              <version>3.3.0</version>
++              <executions>
++                <execution>
++                  <id>enforce-versions</id>
++                  <phase>validate</phase>
++                  <goals>
++                    <goal>enforce</goal>
++                  </goals>
++                  <configuration>
++                    <rules>
++                      <requireMavenVersion>
++                        <version>[3.2.5,)</version>
++                      </requireMavenVersion>
++                      <requireJavaVersion>
++                        <version>[1.8,)</version>
++                      </requireJavaVersion>
++                      <requirePluginVersions />
++                    </rules>
++                  </configuration>
++                </execution>
++              </executions>
++            </plugin>
+             <!-- Don't generate default JAR without dependencies -->
+             <plugin>
+                 <groupId>org.apache.maven.plugins</groupId>
+                 <artifactId>maven-jar-plugin</artifactId>
+-                <version>3.1.2</version>
++                <version>3.3.0</version>
+                 <!--
+                 <configuration>
+                     <manifestEntries>
+@@ -231,7 +257,7 @@
+             <plugin>
+                 <groupId>org.apache.maven.plugins</groupId>
+                 <artifactId>maven-assembly-plugin</artifactId>
+-                <version>3.1.0</version>
++                <version>3.6.0</version>
+                 <configuration>
+                     <archive>
+                         <manifest>
+@@ -253,6 +279,31 @@
+                     </execution>
+                 </executions>
+             </plugin>
++            <plugin>
++              <groupId>org.apache.maven.plugins</groupId>
++              <artifactId>maven-deploy-plugin</artifactId>
++              <version>3.1.1</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-site-plugin</artifactId>
++              <version>4.0.0-M9</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-clean-plugin</artifactId>
++              <version>3.3.1</version>
++            </plugin>
+         </plugins>
+     </build>
+ </project>
+-- 
+2.41.0
+
diff --git a/nixpkgs/pkgs/applications/misc/ns-usbloader/no-launch4j.patch b/nixpkgs/pkgs/applications/misc/ns-usbloader/no-launch4j.patch
new file mode 100644
index 000000000000..4342b47e7fbe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ns-usbloader/no-launch4j.patch
@@ -0,0 +1,70 @@
+From ead7a3b988a47a3896ea8a3ff01556e073115f16 Mon Sep 17 00:00:00 2001
+From: Sofi <sofi+git@mailbox.org>
+Date: Thu, 27 Jul 2023 17:23:31 +0200
+Subject: [PATCH] No launch4j
+
+---
+ pom.xml | 47 +----------------------------------------------
+ 1 file changed, 1 insertion(+), 46 deletions(-)
+
+diff --git a/pom.xml b/pom.xml
+index 21352e0..320d4f3 100644
+--- a/pom.xml
++++ b/pom.xml
+@@ -253,51 +253,6 @@
+                     </execution>
+                 </executions>
+             </plugin>
+-            <plugin>
+-                <groupId>com.akathist.maven.plugins.launch4j</groupId>
+-                <version>2.2.0</version>
+-                <artifactId>launch4j-maven-plugin</artifactId>
+-                <executions>
+-                    <execution>
+-                        <id>l4j-ns-usbloader</id>
+-                        <phase>package</phase>
+-                        <goals>
+-                            <goal>launch4j</goal>
+-                        </goals>
+-                        <configuration>
+-                            <headerType>gui</headerType>
+-                            <icon>appicon.ico</icon>
+-                            <outfile>target/${project.name}.exe</outfile>
+-                            <jar>target/${project.artifactId}-${project.version}-${maven.build.timestamp}.jar</jar>
+-                            <!-- <downloadUrl>https://download.oracle.com/java/17/archive/jdk-17.0.1_windows-x64_bin.msi</downloadUrl> -->
+-                            <errTitle>Launching error</errTitle>
+-                            <!-- <dontWrapJar>true</dontWrapJar> -->
+-                            <jre>
+-                                <path>%PWD%/jdk</path>
+-                                <minVersion>11.0.0</minVersion>
+-                            </jre>
+-                            <versionInfo>
+-                                <fileVersion>${project.version}.0.0</fileVersion>
+-                                <txtFileVersion>${project.version}</txtFileVersion>
+-                                <fileDescription>NS multi-tool</fileDescription>
+-                                <copyright>GNU General Public License v3, ${project.inceptionYear} ${project.organization.name}, Russia.</copyright>
+-                                <productVersion>${project.version}.0.0</productVersion>
+-                                <txtProductVersion>${project.version}</txtProductVersion>
+-                                <companyName>${project.organization.name}</companyName>
+-                                <productName>${project.name}</productName>
+-                                <internalName>${project.name}</internalName>
+-                                <originalFilename>${project.name}.exe</originalFilename>
+-                            </versionInfo>
+-                            <messages>
+-                                <startupErr>Startup error</startupErr>
+-                                <jreNotFoundErr>JDK not found</jreNotFoundErr>
+-                                <jreVersionErr>JDK Version mismatch</jreVersionErr>
+-                                <launcherErr>Launcher Error</launcherErr>
+-                            </messages>
+-                        </configuration>
+-                    </execution>
+-                </executions>
+-            </plugin>
+         </plugins>
+     </build>
+-</project>
+\ No newline at end of file
++</project>
+-- 
+2.41.0
+
diff --git a/nixpkgs/pkgs/applications/misc/numberstation/default.nix b/nixpkgs/pkgs/applications/misc/numberstation/default.nix
new file mode 100644
index 000000000000..cceaec612d9b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/numberstation/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, python3
+, fetchFromSourcehut
+, desktop-file-utils
+, glib
+, gobject-introspection
+, gtk3
+, libhandy
+, librsvg
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "numberstation";
+  version = "1.3.0";
+
+  format = "other";
+
+  src = fetchFromSourcehut {
+    owner = "~martijnbraam";
+    repo = "numberstation";
+    rev = version;
+    hash = "sha256-l4ev47ofBZeUqjJjdhQOHX+mNL9nIHH0mfYdqZW1LMs=";
+  };
+
+  postPatch = ''
+    patchShebangs build-aux/meson
+  '';
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    glib
+    gtk3
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    libhandy
+    librsvg
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    keyring
+    pygobject3
+    pyotp
+  ];
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "TOTP Authentication application for mobile";
+    homepage = "https://sr.ht/~martijnbraam/numberstation/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nut/default.nix b/nixpkgs/pkgs/applications/misc/nut/default.nix
new file mode 100644
index 000000000000..2f3be342a7a8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nut/default.nix
@@ -0,0 +1,106 @@
+{ lib
+, stdenv
+, autoreconfHook
+, avahi
+, coreutils
+, fetchurl
+, freeipmi
+, gd
+, i2c-tools
+, libmodbus
+, libtool
+, libusb1
+, makeWrapper
+, neon
+, net-snmp
+, openssl
+, pkg-config
+, substituteAll
+, systemd
+, udev
+, gnused
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nut";
+  version = "2.8.0";
+
+  src = fetchurl {
+    url = "https://networkupstools.org/source/${lib.versions.majorMinor version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-w+WnCNp5e3xwtlPTexIGoAD8tQO4VRn+TN9jU/eSv+U=";
+  };
+
+  patches = [
+    # This patch injects a default value for NUT_CONFPATH into the nutshutdown script
+    # since the way we build the package results in the binaries being hardcoded to check
+    # $out/etc/ups.conf instead of /etc/nut/ups.conf (where the module places the file).
+    # We also cannot use `--sysconfdir=/etc/nut` since that results in the install phase
+    # trying to install directly into /etc/nut which predictably fails
+    ./nutshutdown-conf-default.patch
+
+    (substituteAll {
+      src = ./hardcode-paths.patch;
+      avahi = "${avahi}/lib";
+      freeipmi = "${freeipmi}/lib";
+      libusb = "${libusb1}/lib";
+      neon = "${neon}/lib";
+      libmodbus = "${libmodbus}/lib";
+      netsnmp = "${net-snmp.lib}/lib";
+    })
+  ];
+
+  buildInputs = [ neon libusb1 openssl udev avahi freeipmi libmodbus i2c-tools net-snmp gd ];
+
+  nativeBuildInputs = [ autoreconfHook libtool pkg-config makeWrapper ];
+
+  configureFlags =
+    [ "--with-all"
+      "--with-ssl"
+      "--without-powerman" # Until we have it ...
+      "--with-systemdsystemunitdir=$(out)/lib/systemd/system"
+      "--with-systemdshutdowndir=$(out)/lib/systemd/system-shutdown"
+      "--with-systemdtmpfilesdir=$(out)/lib/tmpfiles.d"
+      "--with-udev-dir=$(out)/etc/udev"
+    ];
+
+  enableParallelBuilding = true;
+
+  # Add `cgi-bin` to the default list to avoid pulling in whole
+  # of `gcc` into build closure.
+  stripDebugList = [ "cgi-bin" "lib" "lib32" "lib64" "libexec" "bin" "sbin" ];
+
+  postInstall = ''
+    substituteInPlace $out/lib/systemd/system-shutdown/nutshutdown \
+      --replace /bin/sed "${gnused}/bin/sed" \
+      --replace /bin/sleep "${coreutils}/bin/sleep" \
+      --replace /bin/systemctl "${systemd}/bin/systemctl"
+
+    for file in system/{nut-monitor.service,nut-driver-enumerator.service,nut-server.service,nut-driver@.service} system-shutdown/nutshutdown; do
+      substituteInPlace $out/lib/systemd/$file \
+        --replace "$out/etc/nut.conf" "/etc/nut/nut.conf"
+    done
+
+    substituteInPlace $out/lib/systemd/system/nut-driver-enumerator.path \
+      --replace "$out/etc/ups.conf" "/etc/nut/ups.conf"
+
+    # we don't need init.d scripts
+    rm -r $out/share/solaris-init
+
+    # Suspicious/overly broad rule, remove it until we know better
+    rm $out/etc/udev/rules.d/52-nut-ipmipsu.rules
+  '';
+
+  meta = with lib; {
+    description = "Network UPS Tools";
+    longDescription = ''
+      Network UPS Tools is a collection of programs which provide a common
+      interface for monitoring and administering UPS, PDU and SCD hardware.
+      It uses a layered approach to connect all of the parts.
+    '';
+    homepage = "https://networkupstools.org/";
+    platforms = platforms.linux;
+    maintainers = [ maintainers.pierron ];
+    license = with licenses; [ gpl1Plus gpl2Plus gpl3Plus ];
+    priority = 10;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nut/hardcode-paths.patch b/nixpkgs/pkgs/applications/misc/nut/hardcode-paths.patch
new file mode 100644
index 000000000000..a58d402a2058
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nut/hardcode-paths.patch
@@ -0,0 +1,15 @@
+--- a/common/common.c
++++ b/common/common.c
+@@ -991,6 +991,12 @@ ssize_t select_write(const int fd, const void *buf, const size_t buflen, const t
+  * communications media and/or vendor protocol.
+  */
+ static const char * search_paths[] = {
++	"@avahi@",
++	"@freeipmi@",
++	"@libusb@",
++	"@neon@",
++	"@libmodbus@",
++	"@netsnmp@",
+ 	/* Use the library path (and bitness) provided during ./configure first */
+ 	LIBDIR,
+ 	"/usr"LIBDIR,
diff --git a/nixpkgs/pkgs/applications/misc/nut/nutshutdown-conf-default.patch b/nixpkgs/pkgs/applications/misc/nut/nutshutdown-conf-default.patch
new file mode 100644
index 000000000000..28e5a286126d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nut/nutshutdown-conf-default.patch
@@ -0,0 +1,10 @@
+diff --git a/scripts/systemd/nutshutdown.in b/scripts/systemd/nutshutdown.in
+index ace2485b3..9dee869bb 100755
+--- a/scripts/systemd/nutshutdown.in
++++ b/scripts/systemd/nutshutdown.in
+@@ -1,4 +1,5 @@
+ #!/bin/sh
++export NUT_CONFPATH="${NUT_CONFPATH-/etc/nut}"
+ 
+ # This script requires both nut-server (drivers)
+ # and nut-client (upsmon) to be present locally
diff --git a/nixpkgs/pkgs/applications/misc/nwg-bar/default.nix b/nixpkgs/pkgs/applications/misc/nwg-bar/default.nix
new file mode 100644
index 000000000000..0b4b7cd1e255
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-bar/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, librsvg
+, pkg-config
+, gtk3
+, gtk-layer-shell
+, wrapGAppsHook }:
+
+buildGoModule rec {
+  pname = "nwg-bar";
+  version = "0.1.6";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-5N+WKZ+fuHQ0lVLd95/KkNAwzg/C4ImZ4DnSuKNGunk=";
+  };
+
+  patches = [ ./fix-paths.patch ];
+  postPatch = ''
+    substituteInPlace config/bar.json --subst-var out
+    substituteInPlace tools.go --subst-var out
+  '';
+
+  vendorHash = "sha256-/kqhZcIuoN/XA0i1ua3lzVGn4ghkekFYScL1o3kgBX4=";
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+
+  buildInputs = [ gtk3 gtk-layer-shell librsvg ];
+
+  preInstall = ''
+    mkdir -p $out/share/nwg-bar
+    cp -r config/* images $out/share/nwg-bar
+  '';
+
+  meta = with lib; {
+    description =
+      "GTK3-based button bar for sway and other wlroots-based compositors";
+    homepage = "https://github.com/nwg-piotr/nwg-bar";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ sei40kr ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nwg-bar/fix-paths.patch b/nixpkgs/pkgs/applications/misc/nwg-bar/fix-paths.patch
new file mode 100644
index 000000000000..9d4e98e9a7b7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-bar/fix-paths.patch
@@ -0,0 +1,47 @@
+diff --git a/config/bar.json b/config/bar.json
+index 6c456e7..98527cb 100644
+--- a/config/bar.json
++++ b/config/bar.json
+@@ -2,21 +2,21 @@
+   {
+     "label": "Lock",
+     "exec": "swaylock -f -c 000000",
+-    "icon": "/usr/share/nwg-bar/images/system-lock-screen.svg"
++    "icon": "@out@/share/nwg-bar/images/system-lock-screen.svg"
+   },
+   {
+     "label": "Logout",
+     "exec": "swaymsg exit",
+-    "icon": "/usr/share/nwg-bar/images/system-log-out.svg"
++    "icon": "@out@/share/nwg-bar/images/system-log-out.svg"
+   },
+   {
+     "label": "Reboot",
+     "exec": "systemctl reboot",
+-    "icon": "/usr/share/nwg-bar/images/system-reboot.svg"
++    "icon": "@out@/share/nwg-bar/images/system-reboot.svg"
+   },
+   {
+     "label": "Shutdown",
+     "exec": "systemctl -i poweroff",
+-    "icon": "/usr/share/nwg-bar/images/system-shutdown.svg"
++    "icon": "@out@/share/nwg-bar/images/system-shutdown.svg"
+   }
+ ]
+\ No newline at end of file
+diff --git a/tools.go b/tools.go
+index f97751e..987163e 100644
+--- a/tools.go
++++ b/tools.go
+@@ -45,10 +45,7 @@ func configDir() string {
+ }
+ 
+ func getDataHome() string {
+-	if os.Getenv("XDG_DATA_HOME") != "" {
+-		return os.Getenv("XDG_DATA_HOME")
+-	}
+-	return "/usr/share/"
++	return "@out@/share/"
+ }
+ 
+ func createDir(dir string) {
diff --git a/nixpkgs/pkgs/applications/misc/nwg-displays/default.nix b/nixpkgs/pkgs/applications/misc/nwg-displays/default.nix
new file mode 100644
index 000000000000..b73df6de31ee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-displays/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, atk
+, gdk-pixbuf
+, gobject-introspection
+, gtk-layer-shell
+, gtk3
+, pango
+, python310Packages
+, wrapGAppsHook
+, hyprlandSupport ? false
+, wlr-randr
+}:
+
+python310Packages.buildPythonApplication rec {
+  pname = "nwg-displays";
+  version = "0.3.13";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = "nwg-displays";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ZXEnlcifwJTnpSKVET/ThIA0NHLP9fQTIM2bQbJ7qZ8=";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+  ];
+
+  propagatedBuildInputs = [
+    atk
+    gdk-pixbuf
+    gtk-layer-shell
+    pango
+    python310Packages.gst-python
+    python310Packages.i3ipc
+    python310Packages.pygobject3
+  ] ++ lib.optionals hyprlandSupport [
+    wlr-randr
+  ];
+
+  dontWrapGApps = true;
+
+  postInstall = ''
+    install -Dm444 nwg-displays.svg -t $out/share/icons/hicolor/scalable/apps
+    install -Dm444 nwg-displays.desktop -t $out/share/applications
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}");
+  '';
+
+  # Upstream has no tests
+  doCheck = false;
+
+  meta = {
+    homepage = "https://github.com/nwg-piotr/nwg-displays";
+    description = "Output management utility for Sway and Hyprland";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.linux;
+    maintainers = [ ];
+    mainProgram = "nwg-displays";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nwg-dock-hyprland/default.nix b/nixpkgs/pkgs/applications/misc/nwg-dock-hyprland/default.nix
new file mode 100644
index 000000000000..676af3ec5891
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-dock-hyprland/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, wrapGAppsHook
+, gtk-layer-shell
+}:
+
+buildGoModule rec {
+  pname = "nwg-dock-hyprland";
+  version = "0.1.7";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Lekvk3tQfeOR+Ltbc5b7TMiUZpktZ2nvCtUncrFb+Kc=";
+  };
+
+  vendorHash = "sha256-5fN/6HASfTMb80YYAIoWRqnRGMvvX4d8C2UvOc0jQU0=";
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+  buildInputs = [ gtk-layer-shell ];
+
+  meta = with lib; {
+    description = "GTK3-based dock for Hyprland";
+    homepage = "https://github.com/nwg-piotr/nwg-dock-hyprland";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ aleksana ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nwg-dock/default.nix b/nixpkgs/pkgs/applications/misc/nwg-dock/default.nix
new file mode 100644
index 000000000000..f32873e21a06
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-dock/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, gtk3
+, gtk-layer-shell
+}:
+
+buildGoModule rec {
+  pname = "nwg-dock";
+  version = "0.3.9";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-/iUtVym+fNnbBeLlrYIiO5tV9eeAVBh6Nw+d3GCJ/F8=";
+  };
+
+  vendorHash = "sha256-GW+shKOCwU8yprEfBeAPx1RDgjA7cZZzXDG112bdZ6k=";
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk3 gtk-layer-shell ];
+
+  meta = with lib; {
+    description = "GTK3-based dock for sway";
+    homepage = "https://github.com/nwg-piotr/nwg-dock";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "nwg-dock";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nwg-launchers/default.nix b/nixpkgs/pkgs/applications/misc/nwg-launchers/default.nix
new file mode 100644
index 000000000000..d3e11493fad8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-launchers/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, gtkmm3
+, meson
+, ninja
+, nlohmann_json
+, pkg-config
+, swaylock
+, makeWrapper
+, gtk-layer-shell
+}:
+
+stdenv.mkDerivation rec {
+  pname = "nwg-launchers";
+  version = "0.7.1.1";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-+waoJHU/QrVH7o9qfwdvFTFJzTGLcV9CeYPn3XHEAkM=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    cmake
+    makeWrapper
+  ];
+
+  buildInputs = [
+    gtkmm3
+    nlohmann_json
+    gtk-layer-shell
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/nwgbar \
+      --prefix PATH : "${swaylock}/bin"
+  '';
+
+  meta = with lib; {
+    description = "GTK-based launchers: application grid, button bar, dmenu for sway and other window managers";
+    homepage = "https://github.com/nwg-piotr/nwg-launchers";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nwg-look/default.nix b/nixpkgs/pkgs/applications/misc/nwg-look/default.nix
new file mode 100644
index 000000000000..5ce8ad87ba37
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-look/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, substituteAll
+, buildGoModule
+, go
+, glib
+, pkg-config
+, cairo
+, gtk3
+, xcur2png
+, libX11
+, zlib
+}:
+
+buildGoModule rec {
+  pname = "nwg-look";
+  version = "0.2.6";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = "nwg-look";
+    rev = "v${version}";
+    hash = "sha256-kOoYhJKt7/BsQ0/RuVhj0bWnX9GU8ET3MSq6NMCOw5E=";
+  };
+
+  vendorHash = "sha256-V0KXK6jxBYI+tixBLq24pJJcnu4gDF6nfyns2IBTss4=";
+
+  # Replace /usr/ directories with the packages output location
+  # This means it references the correct path
+  patches = [ ./fix-paths.patch ];
+
+  postPatch = ''
+    substituteInPlace main.go tools.go --replace '@out@' $out
+  '';
+
+  ldflags = [ "-s" "-w" ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    cairo
+    xcur2png
+    libX11.dev
+    zlib
+    gtk3
+  ];
+
+  CGO_ENABLED = 1;
+
+  postInstall = ''
+    mkdir -p $out/share
+    mkdir -p $out/share/nwg-look/langs
+    mkdir -p $out/share/applications
+    mkdir -p $out/share/pixmaps
+    cp stuff/main.glade $out/share/nwg-look/
+    cp langs/* $out/share/nwg-look/langs
+    cp stuff/nwg-look.desktop $out/share/applications
+    cp stuff/nwg-look.svg $out/share/pixmaps
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/nwg-piotr/nwg-look";
+    description = "Nwg-look is a GTK3 settings editor, designed to work properly in wlroots-based Wayland environment.";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ max-amb ];
+    mainProgram = "nwg-look";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nwg-look/fix-paths.patch b/nixpkgs/pkgs/applications/misc/nwg-look/fix-paths.patch
new file mode 100644
index 000000000000..3b56e0052213
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-look/fix-paths.patch
@@ -0,0 +1,35 @@
+diff --git a/main.go b/main.go
+index 23c4756..c52e9c3 100644
+--- a/main.go
++++ b/main.go
+@@ -335,7 +335,7 @@ func main() {
+
+ 	gtkSettings, _ = gtk.SettingsGetDefault()
+
+-	builder, _ := gtk.BuilderNewFromFile("/usr/share/nwg-look/main.glade")
++	builder, _ := gtk.BuilderNewFromFile("@out@/share/nwg-look/main.glade")
+ 	win, _ := getWindow(builder, "window")
+
+ 	win.Connect("destroy", func() {
+diff --git a/tools.go b/tools.go
+index e6e7665..59d6f35 100644
+--- a/tools.go
++++ b/tools.go
+@@ -1034,7 +1034,7 @@ func getDataDirs() []string {
+ 	if os.Getenv("XDG_DATA_DIRS") != "" {
+ 		xdgDataDirs = os.Getenv("XDG_DATA_DIRS")
+ 	} else {
+-		xdgDataDirs = "/usr/local/share/:/usr/share/"
++		xdgDataDirs = "@out@/local/share/:@out@/share/"
+ 	}
+
+ 	for _, d := range strings.Split(xdgDataDirs, ":") {
+@@ -1280,7 +1280,7 @@ func detectLang() string {
+ }
+
+ func loadVocabulary(lang string) map[string]string {
+-	langsDir := "/usr/share/nwg-look/langs/"
++	langsDir := "@out@/share/nwg-look/langs/"
+ 	enUSFile := filepath.Join(langsDir, "en_US.json")
+ 	if pathExists(enUSFile) {
+ 		log.Infof(">>> Loading basic lang from '%s'", enUSFile)
diff --git a/nixpkgs/pkgs/applications/misc/nwg-look/go.mod b/nixpkgs/pkgs/applications/misc/nwg-look/go.mod
new file mode 100644
index 000000000000..0446058e56c2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-look/go.mod
@@ -0,0 +1,10 @@
+module github.com/nwg-piotr/nwg-look
+
+go 1.20
+
+require (
+	github.com/gotk3/gotk3 v0.6.2
+	github.com/sirupsen/logrus v1.9.3
+)
+
+require golang.org/x/sys v0.6.0 // indirect
diff --git a/nixpkgs/pkgs/applications/misc/nwg-menu/default.nix b/nixpkgs/pkgs/applications/misc/nwg-menu/default.nix
new file mode 100644
index 000000000000..e587396e151a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-menu/default.nix
@@ -0,0 +1,46 @@
+{ lib, fetchFromGitHub
+, buildGoModule, pkg-config, wrapGAppsHook, gobject-introspection
+, gtk-layer-shell, gtk3, pango, gdk-pixbuf, atk
+}:
+
+buildGoModule rec {
+  pname = "nwg-menu";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = "nwg-menu";
+    rev = "v${version}";
+    sha256 = "sha256-UFyC0gpKn0Ei5aOPC28iG4YI2BM5lrnl/J7RM4GjInc=";
+  };
+
+  vendorHash = "sha256-/kqhZcIuoN/XA0i1ua3lzVGn4ghkekFYScL1o3kgBX4=";
+
+  doCheck = false;
+
+  buildInputs = [ atk gtk3 gdk-pixbuf gtk-layer-shell pango ];
+  nativeBuildInputs = [ pkg-config wrapGAppsHook gobject-introspection ];
+
+  prePatch = ''
+    for file in main.go tools.go; do
+      substituteInPlace $file --replace '/usr/share/nwg-menu' $out/share
+    done
+  '';
+
+  postInstall = ''
+    mkdir -p $out/share/
+    cp menu-start.css $out/share/
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix XDG_DATA_DIRS : "$out/share")
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/nwg-piotr/nwg-menu";
+    description = "MenuStart plugin for nwg-panel";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ berbiche ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nwg-panel/default.nix b/nixpkgs/pkgs/applications/misc/nwg-panel/default.nix
new file mode 100644
index 000000000000..308a1d0d2cee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-panel/default.nix
@@ -0,0 +1,64 @@
+{ lib, fetchFromGitHub
+, python3Packages, wrapGAppsHook, gobject-introspection
+, gtk-layer-shell, pango, gdk-pixbuf, atk
+# Extra packages called by various internal nwg-panel modules
+, hyprland         # hyprctl
+, sway             # swaylock, swaymsg
+, systemd          # systemctl
+, wlr-randr        # wlr-randr
+, nwg-menu         # nwg-menu
+, brightnessctl    # brightnessctl
+, pamixer          # pamixer
+, pulseaudio       # pactl
+, libdbusmenu-gtk3 # tray
+, playerctl
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "nwg-panel";
+  version = "0.9.25";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = "nwg-panel";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-dTBV2OckPJNA707PNz/jmfUPpufhItt4EEDHAI79kxQ=";
+  };
+
+  # No tests
+  doCheck = false;
+
+  # Because of wrapGAppsHook
+  strictDeps = false;
+  dontWrapGApps = true;
+
+  buildInputs = [ atk gdk-pixbuf gtk-layer-shell pango playerctl ];
+  nativeBuildInputs = [ wrapGAppsHook gobject-introspection ];
+  propagatedBuildInputs = (with python3Packages;
+    [ i3ipc netifaces psutil pybluez pygobject3 requests dasbus setuptools ])
+    # Run-time GTK dependency required by the Tray module
+    ++ [ libdbusmenu-gtk3 ];
+
+  postInstall = ''
+    mkdir -p $out/share/{applications,pixmaps}
+    cp $src/nwg-panel-config.desktop nwg-processes.desktop $out/share/applications/
+    cp $src/nwg-shell.svg $src/nwg-panel.svg nwg-processes.svg $out/share/pixmaps/
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}"
+      --prefix XDG_DATA_DIRS : "$out/share"
+      --prefix PATH : "${lib.makeBinPath [ brightnessctl hyprland nwg-menu pamixer pulseaudio sway systemd wlr-randr ]}"
+    )
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/nwg-piotr/nwg-panel";
+    description = "GTK3-based panel for Sway window manager";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ludovicopiero ];
+    mainProgram = "nwg-panel";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/nwg-wrapper/default.nix b/nixpkgs/pkgs/applications/misc/nwg-wrapper/default.nix
new file mode 100644
index 000000000000..2ff04c09b82e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/nwg-wrapper/default.nix
@@ -0,0 +1,38 @@
+{ lib, python3Packages, fetchFromGitHub, gtk-layer-shell, gtk3, gobject-introspection, wrapGAppsHook, wlr-randr }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "nwg-wrapper";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "nwg-piotr";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-GKDAdjO67aedCEFHKDukQ+oPMomTPwFE/CvJu112fus=";
+  };
+
+  nativeBuildInputs = [ gobject-introspection wrapGAppsHook ];
+
+  buildInputs = [ gtk3 gtk-layer-shell ];
+
+  propagatedBuildInputs = with python3Packages; [ i3ipc pygobject3 ];
+
+  # No tests
+  doCheck = false;
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}"
+      --prefix PATH : "${lib.makeBinPath [ wlr-randr ]}"
+    )
+  '';
+
+  pythonImportsCheck = [ "nwg_wrapper" ];
+
+  meta = with lib; {
+    description = "Wrapper to display a script output or a text file content on the desktop in sway or other wlroots-based compositors";
+    homepage = "https://github.com/nwg-piotr/nwg-wrapper/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ artturin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/obinskit/default.nix b/nixpkgs/pkgs/applications/misc/obinskit/default.nix
new file mode 100644
index 000000000000..043ff2352e90
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/obinskit/default.nix
@@ -0,0 +1,65 @@
+{ stdenv
+, lib
+, fetchurl
+, libxkbcommon
+, systemd
+, xorg
+, electron_13
+, makeWrapper
+, makeDesktopItem
+}:
+let
+  desktopItem = makeDesktopItem rec {
+    name = "Obinskit";
+    exec = "obinskit";
+    icon = "obinskit";
+    desktopName = "Obinskit";
+    genericName = "Obinskit keyboard configurator";
+    categories = [ "Utility" ];
+  };
+  electron = electron_13;
+in
+stdenv.mkDerivation rec {
+  pname = "obinskit";
+  version = "1.2.11";
+
+  src = fetchurl {
+    url = "https://s3.hexcore.xyz/occ/linux/tar/ObinsKit_${version}_x64.tar.gz";
+    curlOptsList = [ "--header" "Referer: https://www.hexcore.xyz/" ];
+    hash = "sha256-KhCu1TZsJmcXRSWSTaYOMjt+IA4qqavBwaYzXnkgls0=";
+  };
+
+  unpackPhase = "tar -xzf $src";
+
+  sourceRoot = "ObinsKit_${version}_x64";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/opt/obinskit
+
+    cp -r resources $out/opt/obinskit/
+    cp -r locales $out/opt/obinskit/
+
+    mkdir -p $out/share/{applications,pixmaps}
+    install resources/icons/tray-darwin@2x.png $out/share/pixmaps/obinskit.png
+    ln -s ${desktopItem}/share/applications/* $out/share/applications
+  '';
+
+  postFixup = ''
+    makeWrapper ${electron}/bin/electron $out/bin/${pname} \
+      --add-flags $out/opt/obinskit/resources/app.asar \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc.lib libxkbcommon (lib.getLib systemd) xorg.libXt xorg.libXtst ]}"
+  '';
+
+  meta = with lib; {
+    description = "Graphical configurator for Anne Pro and Anne Pro II keyboards";
+    homepage = "https://www.hexcore.xyz/obinskit";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ shou ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/obs-cli/default.nix b/nixpkgs/pkgs/applications/misc/obs-cli/default.nix
new file mode 100644
index 000000000000..8ff7e7a48157
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/obs-cli/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, buildGoModule
+, fetchFromGitHub
+, makeWrapper
+}:
+
+buildGoModule rec {
+  pname = "obs-cli";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "muesli";
+    repo = "obs-cli";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-4tjS+PWyP/T0zs4IGE6VQ5c+3tuqxlBwfpPBVEcim6c=";
+  };
+
+  vendorHash = "sha256-tjQOHvmhHyVMqIJQvFaisEqci1wkB4ke/a+GSgwXzCo=";
+
+  proxyVendor = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  ldflags = [
+    "-s"
+    "-w"
+  ];
+
+  meta = with lib; {
+    description = "OBS-cli is a command-line remote control for OBS";
+    homepage = "https://github.com/muesli/obs-cli";
+    changelog = "https://github.com/muesli/obs-cli/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ flexiondotorg ];
+    platforms = platforms.linux ++ platforms.darwin;
+    mainProgram = "obs-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/obsidian/default.nix b/nixpkgs/pkgs/applications/misc/obsidian/default.nix
new file mode 100644
index 000000000000..586d9744dbe2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/obsidian/default.nix
@@ -0,0 +1,90 @@
+{ stdenv
+, fetchurl
+, lib
+, makeWrapper
+, electron
+, makeDesktopItem
+, imagemagick
+, writeScript
+, undmg
+, unzip
+}:
+let
+  inherit (stdenv.hostPlatform) system;
+  pname = "obsidian";
+  version = "1.5.8";
+  appname = "Obsidian";
+  meta = with lib; {
+    description = "A powerful knowledge base that works on top of a local folder of plain text Markdown files";
+    homepage = "https://obsidian.md";
+    downloadPage = "https://github.com/obsidianmd/obsidian-releases/releases";
+    license = licenses.obsidian;
+    maintainers = with maintainers; [ atila conradmearns zaninime qbit kashw2 ];
+  };
+
+  filename = if stdenv.isDarwin then "Obsidian-${version}-universal.dmg" else "obsidian-${version}.tar.gz";
+  src = fetchurl {
+    url = "https://github.com/obsidianmd/obsidian-releases/releases/download/v${version}/${filename}";
+    hash = if stdenv.isDarwin then "sha256-5olNmOLE9AgVUyRY8PylUPGYIMS+KoDG3g2BMCySdyE=" else "sha256-oc2iA2E3ac/uUNv6unzfac5meHqQzmzDVl/M9jNpS/M=";
+  };
+
+  icon = fetchurl {
+    url = "https://obsidian.md/images/obsidian-logo-gradient.svg";
+    hash = "sha256-EZsBuWyZ9zYJh0LDKfRAMTtnY70q6iLK/ggXlplDEoA=";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "obsidian";
+    desktopName = "Obsidian";
+    comment = "Knowledge base";
+    icon = "obsidian";
+    exec = "obsidian %u";
+    categories = [ "Office" ];
+    mimeTypes = [ "x-scheme-handler/obsidian" ];
+  };
+
+  linux = stdenv.mkDerivation {
+    inherit pname version src desktopItem icon;
+    meta = meta // { platforms = [ "x86_64-linux" "aarch64-linux" ]; };
+    nativeBuildInputs = [ makeWrapper imagemagick ];
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/bin
+      makeWrapper ${electron}/bin/electron $out/bin/obsidian \
+        --add-flags $out/share/obsidian/app.asar \
+        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland}}"
+      install -m 444 -D resources/app.asar $out/share/obsidian/app.asar
+      install -m 444 -D resources/obsidian.asar $out/share/obsidian/obsidian.asar
+      install -m 444 -D "${desktopItem}/share/applications/"* \
+        -t $out/share/applications/
+      for size in 16 24 32 48 64 128 256 512; do
+        mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+        convert -background none -resize "$size"x"$size" ${icon} $out/share/icons/hicolor/"$size"x"$size"/apps/obsidian.png
+      done
+      runHook postInstall
+    '';
+
+    passthru.updateScript = writeScript "updater" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl jq common-updater-scripts
+      set -eu -o pipefail
+      latestVersion="$(curl -sS https://raw.githubusercontent.com/obsidianmd/obsidian-releases/master/desktop-releases.json | jq -r '.latestVersion')"
+      update-source-version obsidian "$latestVersion"
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version src appname;
+    meta = meta // { platforms = [ "x86_64-darwin" "aarch64-darwin" ]; };
+    sourceRoot = "${appname}.app";
+    nativeBuildInputs = [ makeWrapper undmg unzip ];
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/{Applications/${appname}.app,bin}
+      cp -R . $out/Applications/${appname}.app
+      makeWrapper $out/Applications/${appname}.app/Contents/MacOS/${appname} $out/bin/${pname}
+      runHook postInstall
+    '';
+  };
+in
+if stdenv.isDarwin then darwin else linux
diff --git a/nixpkgs/pkgs/applications/misc/octoprint/default.nix b/nixpkgs/pkgs/applications/misc/octoprint/default.nix
new file mode 100644
index 000000000000..5b42f1d08c3c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/octoprint/default.nix
@@ -0,0 +1,261 @@
+{ pkgs
+, stdenv
+, callPackage
+, lib
+, fetchFromGitHub
+, fetchPypi
+, python3
+, substituteAll
+, nix-update-script
+, nixosTests
+  # To include additional plugins, pass them here as an overlay.
+, packageOverrides ? self: super: { }
+}:
+let
+
+  py = python3.override {
+    self = py;
+    packageOverrides = lib.foldr lib.composeExtensions (self: super: { }) (
+      [
+        (
+          # Due to flask > 2.3 the login will not work
+          self: super: {
+            werkzeug = super.werkzeug.overridePythonAttrs (oldAttrs: rec {
+              version = "2.2.3";
+              format = "setuptools";
+              src = fetchPypi {
+                pname = "Werkzeug";
+                inherit version;
+                hash = "sha256-LhzMlBfU2jWLnebxdOOsCUOR6h1PvvLWZ4ZdgZ39Cv4=";
+              };
+            });
+            flask = super.flask.overridePythonAttrs (oldAttrs: rec {
+              version = "2.2.5";
+              format = "setuptools";
+              src = fetchPypi {
+                pname = "Flask";
+                inherit version;
+                hash = "sha256-7e6bCn/yZiG9WowQ/0hK4oc3okENmbC7mmhQx/uXeqA=";
+              };
+            });
+          }
+        )
+
+        # Built-in dependency
+        (
+          self: super: {
+            octoprint-filecheck = self.buildPythonPackage rec {
+              pname = "OctoPrint-FileCheck";
+              version = "2021.2.23";
+
+              src = fetchFromGitHub {
+                owner = "OctoPrint";
+                repo = "OctoPrint-FileCheck";
+                rev = version;
+                sha256 = "sha256-e/QGEBa9+pjOdrZq3Zc6ifbSMClIyeTOi0Tji0YdVmI=";
+              };
+              doCheck = false;
+            };
+          }
+        )
+
+        # Built-in dependency
+        (
+          self: super: {
+            octoprint-firmwarecheck = self.buildPythonPackage rec {
+              pname = "OctoPrint-FirmwareCheck";
+              version = "2021.10.11";
+
+              src = fetchFromGitHub {
+                owner = "OctoPrint";
+                repo = "OctoPrint-FirmwareCheck";
+                rev = version;
+                hash = "sha256-wqbD82bhJDrDawJ+X9kZkoA6eqGxqJc1Z5dA0EUwgEI=";
+              };
+              doCheck = false;
+            };
+          }
+        )
+
+        (
+          self: super: {
+            octoprint-pisupport = self.buildPythonPackage rec {
+              pname = "OctoPrint-PiSupport";
+              version = "2023.5.24";
+              format = "setuptools";
+
+              src = fetchFromGitHub {
+                owner = "OctoPrint";
+                repo = "OctoPrint-PiSupport";
+                rev = version;
+                hash = "sha256-KfkZXJ2f02G2ee+J1w+YQRKz+LSWwxVIIwmdevDGhew=";
+              };
+
+              # requires octoprint itself during tests
+              doCheck = false;
+              postPatch = ''
+                substituteInPlace octoprint_pi_support/__init__.py \
+                  --replace /usr/bin/vcgencmd ${self.pkgs.libraspberrypi}/bin/vcgencmd
+              '';
+            };
+          }
+        )
+
+        (
+          self: super: {
+            octoprint = self.buildPythonPackage rec {
+              pname = "OctoPrint";
+              version = "1.9.3";
+
+              src = fetchFromGitHub {
+                owner = "OctoPrint";
+                repo = "OctoPrint";
+                rev = version;
+                hash = "sha256-71uE8JvcS++xH8WSVWj5x0+9s3XIwf3A64c6YtxpSRc=";
+              };
+
+              propagatedBuildInputs = with self; [
+                argon2-cffi
+                blinker
+                cachelib
+                click
+                colorlog
+                emoji
+                feedparser
+                filetype
+                flask
+                flask-babel
+                flask-assets
+                flask-login
+                flask-limiter
+                frozendict
+                future
+                itsdangerous
+                immutabledict
+                jinja2
+                markdown
+                markupsafe
+                netaddr
+                netifaces
+                octoprint-filecheck
+                octoprint-firmwarecheck
+                passlib
+                pathvalidate
+                pkginfo
+                pip
+                psutil
+                pylru
+                pyserial
+                pyyaml
+                regex
+                requests
+                rsa
+                sarge
+                semantic-version
+                sentry-sdk
+                setuptools
+                tornado
+                unidecode
+                watchdog
+                websocket-client
+                werkzeug
+                wrapt
+                zeroconf
+                zipstream-ng
+                class-doc
+                pydantic_1
+              ] ++ lib.optionals stdenv.isDarwin [
+                py.pkgs.appdirs
+              ] ++ lib.optionals (!stdenv.isDarwin) [
+                octoprint-pisupport
+              ];
+
+              nativeCheckInputs = with self; [
+                ddt
+                mock
+                pytestCheckHook
+              ];
+
+              patches = [
+                # substitute pip and let it find out, that it can't write anywhere
+                (substituteAll {
+                  src = ./pip-path.patch;
+                  pip = "${self.pip}/bin/pip";
+                })
+
+                # hardcore path to ffmpeg and hide related settings
+                (substituteAll {
+                  src = ./ffmpeg-path.patch;
+                  ffmpeg = "${pkgs.ffmpeg}/bin/ffmpeg";
+                })
+              ];
+
+              postPatch =
+                let
+                  ignoreVersionConstraints = [
+                    "cachelib"
+                    "colorlog"
+                    "emoji"
+                    "immutabledict"
+                    "PyYAML"
+                    "sarge"
+                    "sentry-sdk"
+                    "watchdog"
+                    "wrapt"
+                    "zeroconf"
+                    "Flask-Login"
+                    "werkzeug"
+                    "flask"
+                    "Flask-Limiter"
+                    "blinker"
+                  ];
+                in
+                ''
+                    sed -r -i \
+                      ${lib.concatStringsSep "\n" (
+                    map (
+                      e:
+                        ''-e 's@${e}[<>=]+.*@${e}",@g' \''
+                    ) ignoreVersionConstraints
+                  )}
+                      setup.py
+                '';
+
+              dontUseSetuptoolsCheck = true;
+
+              preCheck = ''
+                export HOME=$(mktemp -d)
+                rm pytest.ini
+              '';
+
+              disabledTests = [
+                "test_check_setup" # Why should it be able to call pip?
+              ] ++ lib.optionals stdenv.isDarwin [
+                "test_set_external_modification"
+              ];
+
+              passthru = {
+                inherit (self) python;
+                updateScript = nix-update-script { };
+                tests = {
+                  plugins = (callPackage ./plugins.nix { }) super self;
+                  inherit (nixosTests) octoprint;
+                };
+              };
+
+              meta = with lib; {
+                homepage = "https://octoprint.org/";
+                description = "The snappy web interface for your 3D printer";
+                license = licenses.agpl3Only;
+                maintainers = with maintainers; [ abbradar gebner WhittlesJr gador ];
+              };
+            };
+          }
+        )
+        (callPackage ./plugins.nix { })
+        packageOverrides
+      ]
+    );
+  };
+in
+with py.pkgs; toPythonApplication octoprint
diff --git a/nixpkgs/pkgs/applications/misc/octoprint/ffmpeg-path.patch b/nixpkgs/pkgs/applications/misc/octoprint/ffmpeg-path.patch
new file mode 100644
index 000000000000..2e7c7dbe0642
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/octoprint/ffmpeg-path.patch
@@ -0,0 +1,22 @@
+diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py
+index c3e6cea10..ced2f8fa0 100644
+--- a/src/octoprint/server/api/settings.py
++++ b/src/octoprint/server/api/settings.py
+@@ -130,7 +130,7 @@ data["webcam"] = {
+             "webcamEnabled": s.getBoolean(["webcam", "webcamEnabled"]),
+             "snapshotTimeout": s.getInt(["webcam", "snapshotTimeout"]),
+             "timelapseEnabled": s.getBoolean(["webcam", "timelapseEnabled"]),
+-            "ffmpegPath": s.get(["webcam", "ffmpeg"]),
++            "ffmpegPath": "@ffmpeg@",
+             "ffmpegCommandline": s.get(["webcam", "ffmpegCommandline"]),
+             "bitrate": s.get(["webcam", "bitrate"]),
+             "ffmpegThreads": s.get(["webcam", "ffmpegThreads"]),
+@@ -548,8 +548,6 @@ def _saveSettings(data):
+                 ["webcam", "snapshotSslValidation"],
+                 data["webcam"]["snapshotSslValidation"],
+             )
+-        if "ffmpegPath" in data["webcam"]:
+-            s.set(["webcam", "ffmpeg"], data["webcam"]["ffmpegPath"])
+         if "ffmpegCommandline" in data["webcam"]:
+             commandline = data["webcam"]["ffmpegCommandline"]
+             if not all(
diff --git a/nixpkgs/pkgs/applications/misc/octoprint/pip-path.patch b/nixpkgs/pkgs/applications/misc/octoprint/pip-path.patch
new file mode 100644
index 000000000000..9c6b1c74751d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/octoprint/pip-path.patch
@@ -0,0 +1,12 @@
+diff --git a/src/octoprint/util/pip.py b/src/octoprint/util/pip.py
+index 53500e5d5..39f76c1e5 100644
+--- a/src/octoprint/util/pip.py
++++ b/src/octoprint/util/pip.py
+@@ -284,6 +284,7 @@ class PipCaller(CommandlineCaller):
+     @classmethod
+     def autodetect_pip(cls):
+         commands = [
++            ["@pip@"],
+             [sys.executable, "-m", "pip"],
+             [
+                 os.path.join(
diff --git a/nixpkgs/pkgs/applications/misc/octoprint/plugins.nix b/nixpkgs/pkgs/applications/misc/octoprint/plugins.nix
new file mode 100644
index 000000000000..af251385fceb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/octoprint/plugins.nix
@@ -0,0 +1,482 @@
+{ lib
+, config
+, fetchFromGitHub
+, fetchFromGitLab
+, fetchpatch
+, marlin-calc
+}:
+
+self: super:
+let
+  buildPlugin = args: self.buildPythonPackage (args // {
+    pname = "octoprint-plugin-${args.pname}";
+    inherit (args) version;
+    propagatedBuildInputs = (args.propagatedBuildInputs or [ ]) ++ [ super.octoprint ];
+    # none of the following have tests
+    doCheck = false;
+  });
+in
+{
+  inherit buildPlugin;
+
+  m86motorsoff = buildPlugin rec {
+    pname = "m84motorsoff";
+    version = "0.1.0";
+
+    src = fetchFromGitHub {
+      owner = "ntoff";
+      repo = "Octoprint-M84MotOff";
+      rev = "v${version}";
+      sha256 = "1w6h4hia286lbz2gy33rslq02iypx067yqn413xcipb07ivhvdq7";
+    };
+
+    meta = with lib; {
+      description = "Changes the \"Motors off\" button in octoprint's control tab to issue an M84 command to allow compatibility with Repetier firmware Resources";
+      homepage = "https://github.com/ntoff/OctoPrint-M84MotOff";
+      license = licenses.agpl3Only;
+      maintainers = with maintainers; [ stunkymonkey ];
+    };
+  };
+
+  abl-expert = buildPlugin rec {
+    pname = "abl-expert";
+    version = "0.6";
+
+    src = fetchFromGitLab {
+      domain = "framagit.org";
+      owner = "razer";
+      repo = "Octoprint_ABL_Expert";
+      rev = version;
+      sha256 = "0ij3rvdwya1sbymwm5swlh2j4jagb6fal945g88zrzh5xf26hzjh";
+    };
+
+    meta = with lib; {
+      description = "Marlin auto bed leveling control, mesh correction, and z probe handling";
+      homepage = "https://framagit.org/razer/Octoprint_ABL_Expert/";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ WhittlesJr ];
+    };
+  };
+
+  bedlevelvisualizer = buildPlugin rec {
+    pname = "bedlevelvisualizer";
+    version = "1.1.1";
+
+    src = fetchFromGitHub {
+      owner = "jneilliii";
+      repo = "OctoPrint-BedLevelVisualizer";
+      rev = version;
+      sha256 = "sha256-6JcYvYgEmphp5zz4xZi4G0yTo4FCIR6Yh+MXYK7H7+w=";
+    };
+
+    meta = with lib; {
+      description = "Displays 3D mesh of bed topography report";
+      homepage = "https://github.com/jneilliii/OctoPrint-BedLevelVisualizer";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ lovesegfault ];
+    };
+  };
+
+  costestimation = buildPlugin rec {
+    pname = "costestimation";
+    version = "3.4.0";
+
+    src = fetchFromGitHub {
+      owner = "OllisGit";
+      repo = "OctoPrint-CostEstimation";
+      rev = version;
+      sha256 = "sha256-04OPa/RpM8WehUmOp195ocsAjAvKdVY7iD5ybzQO7Dg=";
+    };
+
+    meta = with lib; {
+      description = "Plugin to display the estimated print cost for the loaded model.";
+      homepage = "https://github.com/OllisGit/OctoPrint-CostEstimation";
+      license = licenses.agpl3Only;
+      maintainers = with maintainers; [ stunkymonkey ];
+    };
+  };
+
+  curaenginelegacy = buildPlugin rec {
+    pname = "curaenginelegacy";
+    version = "1.1.2";
+
+    src = fetchFromGitHub {
+      owner = "OctoPrint";
+      repo = "OctoPrint-CuraEngineLegacy";
+      rev = version;
+      sha256 = "sha256-54siSmzgPlnCRpkpZhXU9theNQ3hqL3j+Ip4Ie2w2vA=";
+    };
+
+    meta = with lib; {
+      description = "Plugin for slicing via Cura Legacy from within OctoPrint";
+      homepage = "https://github.com/OctoPrint/OctoPrint-CuraEngineLegacy";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ gebner ];
+    };
+  };
+
+  displayprogress = buildPlugin rec {
+    pname = "displayprogress";
+    version = "0.1.3";
+
+    src = fetchFromGitHub {
+      owner = "OctoPrint";
+      repo = "OctoPrint-DisplayProgress";
+      rev = version;
+      sha256 = "080prvfwggl4vkzyi369vxh1n8231hrl8a44f399laqah3dn5qw4";
+    };
+
+    meta = with lib; {
+      description = "Displays the job progress on the printer's display";
+      homepage = "https://github.com/OctoPrint/OctoPrint-DisplayProgress";
+      license = licenses.agpl3Only;
+      maintainers = with maintainers; [ stunkymonkey ];
+    };
+  };
+
+  displaylayerprogress = buildPlugin rec {
+    pname = "displaylayerprogress";
+    version = "1.26.0";
+
+    src = fetchFromGitHub {
+      owner = "OllisGit";
+      repo = "OctoPrint-DisplayLayerProgress";
+      rev = version;
+      sha256 = "sha256-hhHc2SPixZCPJzCP8enMMWNYaYbNZAU0lNSx1B0d++4=";
+    };
+
+    meta = with lib; {
+      description = "OctoPrint-Plugin that sends the current progress of a print via M117 command";
+      homepage = "https://github.com/OllisGit/OctoPrint-DisplayLayerProgress";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ j0hax ];
+    };
+  };
+
+  ender3v2tempfix = buildPlugin {
+    pname = "ender3v2tempfix";
+    version = "unstable-2021-04-27";
+
+    src = fetchFromGitHub {
+      owner = "SimplyPrint";
+      repo = "OctoPrint-Creality2xTemperatureReportingFix";
+      rev = "2c4183b6a0242a24ebf646d7ac717cd7a2db2bcf";
+      sha256 = "03bc2zbffw4ksk8if90kxhs3179nbhb4xikp4f0adm3lrnvxkd3s";
+    };
+
+    meta = with lib; {
+      description = "Fixes the double temperature reporting from the Creality Ender-3 v2 printer";
+      homepage = "https://github.com/SimplyPrint/OctoPrint-Creality2xTemperatureReportingFix";
+      license = licenses.mit;
+      maintainers = with maintainers; [ illustris ];
+    };
+  };
+
+  gcodeeditor = buildPlugin rec {
+    pname = "gcodeeditor";
+    version = "0.2.12";
+
+    src = fetchFromGitHub {
+      owner = "ieatacid";
+      repo = "OctoPrint-GcodeEditor";
+      rev = version;
+      sha256 = "sha256-1Sk2ri3DKW8q8VJ/scFjpRsz65Pwt8OEURP1k70aydE=";
+    };
+
+    meta = with lib; {
+      description = "Edit gcode on OctoPrint";
+      homepage = "https://github.com/ieatacid/OctoPrint-GcodeEditor";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ WhittlesJr ];
+    };
+  };
+
+  marlingcodedocumentation = buildPlugin rec {
+    pname = "marlingcodedocumentation";
+    version = "0.13.0";
+
+    src = fetchFromGitHub {
+      owner = "costas-basdekis";
+      repo = "MarlinGcodeDocumentation";
+      rev = "v${version}";
+      sha256 = "sha256-3ay6iCxZk8QkFM/2Y14VTpPoxr6NXq14BFSHofn3q7I=";
+    };
+
+    meta = with lib; {
+      description = "Displays GCode documentation for Marlin in the Octoprint terminal command line";
+      homepage = "https://github.com/costas-basdekis/MarlinGcodeDocumentation";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ lovesegfault ];
+    };
+  };
+
+  mqtt = buildPlugin rec {
+    pname = "mqtt";
+    version = "0.8.10";
+
+    src = fetchFromGitHub {
+      owner = "OctoPrint";
+      repo = "OctoPrint-MQTT";
+      rev = version;
+      sha256 = "sha256-nvEUvN/SdUE1tQkLbxMkZ8xxeUIZiNNirIfWLeH1Kfg=";
+    };
+
+    propagatedBuildInputs = with super; [ paho-mqtt ];
+
+    meta = with lib; {
+      description = "Publish printer status MQTT";
+      homepage = "https://github.com/OctoPrint/OctoPrint-MQTT";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ peterhoeg ];
+    };
+  };
+
+  printtimegenius = buildPlugin rec {
+    pname = "printtimegenius";
+    version = "2.3.1";
+
+    src = fetchFromGitHub {
+      owner = "eyal0";
+      repo = "OctoPrint-PrintTimeGenius";
+      rev = version;
+      sha256 = "sha256-2lxaTcmPBSdfMmViIfLEbeYWfXZpNVAO4i5Z678gWy0=";
+    };
+
+    propagatedBuildInputs = with super; [
+      psutil
+      sarge
+    ];
+
+    preConfigure = ''
+      # PrintTimeGenius ships with marlin-calc binaries for multiple architectures
+      rm */analyzers/marlin-calc*
+      sed 's@"{}.{}".format(binary_base_name, machine)@"${marlin-calc}/bin/marlin-calc"@' -i */analyzers/analyze_progress.py
+    '';
+
+    meta = with lib; {
+      description = "Better print time estimation for OctoPrint";
+      homepage = "https://github.com/eyal0/OctoPrint-PrintTimeGenius";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ gebner ];
+    };
+  };
+
+  psucontrol = buildPlugin rec {
+    pname = "psucontrol";
+    version = "1.0.6";
+
+    src = fetchFromGitHub {
+      owner = "kantlivelong";
+      repo = "OctoPrint-PSUControl";
+      rev = version;
+      sha256 = "sha256-S+lPm85+ZEO/3BXYsrxE4FU29EGWzWrSw3y1DLdByrM=";
+    };
+
+    propagatedBuildInputs = with super; [
+      python-periphery
+    ];
+
+    preConfigure = ''
+      # optional; RPi.GPIO is broken on vanilla kernels
+      sed /RPi.GPIO/d -i requirements.txt
+    '';
+
+    meta = with lib; {
+      description = "OctoPrint plugin to control ATX/AUX power supply";
+      homepage = "https://github.com/kantlivelong/OctoPrint-PSUControl";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ gebner ];
+    };
+  };
+
+  simpleemergencystop = buildPlugin rec {
+    pname = "simpleemergencystop";
+    version = "1.0.5";
+
+    src = fetchFromGitHub {
+      owner = "Sebclem";
+      repo = "OctoPrint-SimpleEmergencyStop";
+      rev = version;
+      sha256 = "sha256-MbP3cKa9FPElQ/M8ykYh9kVXl8hNvmGiCHDvjgWvm9k=";
+    };
+
+    meta = with lib; {
+      description = "A simple plugin that add an emergency stop buton on NavBar of OctoPrint";
+      homepage = "https://github.com/Sebclem/OctoPrint-SimpleEmergencyStop";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ WhittlesJr ];
+    };
+  };
+
+  stlviewer = buildPlugin rec {
+    pname = "stlviewer";
+    version = "0.4.2";
+
+    src = fetchFromGitHub {
+      owner = "jneilliii";
+      repo = "OctoPrint-STLViewer";
+      rev = "refs/tags/${version}";
+      sha256 = "sha256-S7zjEbyo59OJpa7INCv1o4ybQ+Sy6a3EJ5AJ6wiBe1Y=";
+    };
+
+    meta = with lib; {
+      description = "A simple stl viewer tab for OctoPrint";
+      homepage = "https://github.com/jneilliii/Octoprint-STLViewer";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ abbradar ];
+    };
+  };
+
+  telegram = buildPlugin rec {
+    pname = "telegram";
+    version = "1.6.5";
+
+    src = fetchFromGitHub {
+      owner = "fabianonline";
+      repo = "OctoPrint-Telegram";
+      rev = version;
+      sha256 = "sha256-SckJCbPNCflgGYLHFiXy0juCtpvo8YS1BQsFpc1f5rg=";
+    };
+
+    propagatedBuildInputs = with super; [ pillow ];
+
+    meta = with lib; {
+      description = "Plugin to send status messages and receive commands via Telegram messenger.";
+      homepage = "https://github.com/fabianonline/OctoPrint-Telegram";
+      license = licenses.agpl3Only;
+      maintainers = with maintainers; [ stunkymonkey ];
+    };
+  };
+
+  themeify = buildPlugin rec {
+    pname = "themeify";
+    version = "1.2.2";
+
+    src = fetchFromGitHub {
+      owner = "Birkbjo";
+      repo = "Octoprint-Themeify";
+      rev = "v${version}";
+      sha256 = "sha256-om9IUSmxU8y0x8DrodW1EU/pilAN3+PbtYck6KfROEg=";
+    };
+
+    meta = with lib; {
+      description = "Beautiful themes for OctoPrint";
+      homepage = "https://github.com/birkbjo/OctoPrint-Themeify";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ lovesegfault ];
+    };
+  };
+
+  titlestatus = buildPlugin rec {
+    pname = "titlestatus";
+    version = "0.0.5";
+
+    src = fetchFromGitHub {
+      owner = "MoonshineSG";
+      repo = "OctoPrint-TitleStatus";
+      rev = version;
+      sha256 = "10nxjrixg0i6n6x8ghc1ndshm25c97bvkcis5j9kmlkkzs36i2c6";
+    };
+
+    meta = with lib; {
+      description = "Show printers status in window title";
+      homepage = "https://github.com/MoonshineSG/OctoPrint-TitleStatus";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ abbradar ];
+    };
+  };
+
+  touchui = buildPlugin rec {
+    pname = "touchui";
+    version = "0.3.18";
+
+    src = fetchFromGitHub {
+      owner = "BillyBlaze";
+      repo = "OctoPrint-TouchUI";
+      rev = version;
+      sha256 = "sha256-PNDCjY7FhfnwK7Nd86el9ZQ00G4uMANH2Sk080iMYXw=";
+    };
+
+    meta = with lib; {
+      description = "Touch friendly interface for a small TFT module or phone for OctoPrint";
+      homepage = "https://github.com/BillyBlaze/OctoPrint-TouchUI";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ gebner ];
+    };
+  };
+
+  octoklipper = buildPlugin rec {
+    pname = "octoklipper";
+    version = "0.3.8.3";
+
+    src = fetchFromGitHub {
+      owner = "AliceGrey";
+      repo = "OctoprintKlipperPlugin";
+      rev = version;
+      sha256 = "sha256-6r5jJDSR0DxlDQ/XWmQgYUgeL1otNNBnwurX7bbcThg=";
+    };
+
+    meta = with lib; {
+      description = "A plugin for a better integration of Klipper into OctoPrint";
+      homepage = "https://github.com/AliceGrey/OctoprintKlipperPlugin";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ lovesegfault ];
+    };
+  };
+
+  octolapse = buildPlugin rec {
+    pname = "octolapse";
+    version = "0.4.2";
+
+    src = fetchFromGitHub {
+      owner = "FormerLurker";
+      repo = "Octolapse";
+      rev = "v${version}";
+      sha256 = "sha256-QP6PkKWKUv4uIaYdqTAsZmK7DVes94Q9K/DrBYrWxzY=";
+    };
+
+    patches = [
+      # fix version constraint
+      # https://github.com/FormerLurker/Octolapse/pull/894
+      (fetchpatch {
+        url = "https://github.com/FormerLurker/Octolapse/commit/0bd7db2430aef370f2665c6c7011fc3bb559122e.patch";
+        hash = "sha256-z2aEq5sJGarGtIDbTRCvXdSj+kq8HIVvLRWpKutmJNY=";
+      })
+    ];
+
+    # Test fails due to code executed on import, see #136513
+    #pythonImportsCheck = [ "octoprint_octolapse" ];
+
+    propagatedBuildInputs = with super; [ awesome-slugify setuptools pillow sarge six pillow psutil file-read-backwards ];
+
+    meta = with lib; {
+      description = "Stabilized timelapses for Octoprint";
+      homepage = "https://github.com/FormerLurker/OctoLapse";
+      license = licenses.agpl3Plus;
+      maintainers = with maintainers; [ illustris j0hax ];
+      # requires pillow >=6.2.0,<7.0.0
+      broken = true;
+    };
+  };
+
+  dashboard = buildPlugin rec {
+    pname = "dashboard";
+    version = "1.18.3";
+
+    src = fetchFromGitHub {
+      owner = "StefanCohen";
+      repo = "OctoPrint-Dashboard";
+      rev = version;
+      sha256 = "sha256-hLHT3Uze/6PlOCEICVZ2ieFTyXgcqCvgHOlIIEquujg=";
+    };
+
+    meta = with lib; {
+      description = "A dashboard for Octoprint";
+      homepage = "https://github.com/StefanCohen/OctoPrint-Dashboard";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ j0hax ];
+    };
+  };
+} // lib.optionalAttrs config.allowAliases {
+  octoprint-dashboard = super.dashboard;
+}
diff --git a/nixpkgs/pkgs/applications/misc/oil-buku/default.nix b/nixpkgs/pkgs/applications/misc/oil-buku/default.nix
new file mode 100644
index 000000000000..5f895179f1f4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/oil-buku/default.nix
@@ -0,0 +1,45 @@
+{ stdenvNoCC, lib, fetchFromGitHub, jq, gawk, peco, makeWrapper }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "oil-buku";
+  version = "0.3.2";
+
+  src = fetchFromGitHub {
+    owner = "AndreiUlmeyda";
+    repo = "oil";
+    rev = version;
+    sha256 = "12g0fd7h11hh94b2pyg3pqwbf8bc7gcnrnm1qqbf18s6z02b6ixr";
+  };
+
+  postPatch = ''
+    substituteInPlace src/oil --replace \
+      "LIBDIR=/usr/local/lib/oil" "LIBDIR=${placeholder "out"}/lib"
+
+    substituteInPlace src/json-to-line.jq --replace \
+      "/usr/bin/env -S jq" "${jq}/bin/jq"
+
+    substituteInPlace src/format-columns.awk --replace \
+      "/usr/bin/env -S awk" "${gawk}/bin/awk"
+  '';
+
+  makeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "LIBDIR=${placeholder "out"}/lib"
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postFixup = ''
+    wrapProgram $out/bin/oil \
+        --prefix PATH : ${lib.makeBinPath [ peco ]}
+  '';
+
+  meta = with lib; {
+    description = "Search-as-you-type cli frontend for the buku bookmarks manager using peco";
+    homepage = "https://github.com/AndreiUlmeyda/oil";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ atila ];
+    mainProgram = "oil";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ola/default.nix b/nixpkgs/pkgs/applications/misc/ola/default.nix
new file mode 100644
index 000000000000..5de5c157d370
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ola/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, bison
+, flex
+, pkg-config
+, libftdi1
+, libuuid
+, cppunit
+, protobuf
+, zlib
+, avahi
+, libmicrohttpd
+, perl
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ola";
+  version = "unstable-2020-07-17";
+
+  src = fetchFromGitHub {
+    owner = "OpenLightingProject";
+    repo = "ola";
+    rev = "e2cd699c7792570500578fd092fb6bfb3d511023"; # HEAD of "0.10" branch
+    sha256 = "17a3z3zhx00rjk58icd3zlqfw3753f3y8bwy2sza0frdim09lqr4";
+  };
+
+  nativeBuildInputs = [ autoreconfHook bison flex pkg-config perl ];
+  buildInputs = [
+    # required for ola-ftdidmx plugin (support for 'dumb' FTDI devices)
+    libftdi1
+    libuuid
+    cppunit
+    protobuf
+    zlib
+    avahi
+    libmicrohttpd
+    python3
+  ];
+  propagatedBuildInputs = [
+    (python3.pkgs.protobuf.override { protobuf = protobuf; })
+    python3.pkgs.numpy
+  ];
+
+  configureFlags = [ "--enable-python-libs" ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "A framework for controlling entertainment lighting equipment";
+    homepage = "https://www.openlighting.org/ola/";
+    maintainers = with maintainers; [ ];
+    license = with licenses; [ lgpl21 gpl2Plus ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/omegat.nix b/nixpkgs/pkgs/applications/misc/omegat.nix
new file mode 100644
index 000000000000..da4de96fbce0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/omegat.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, unzip, jdk, makeWrapper}:
+
+stdenv.mkDerivation {
+  version = "6.0.0";
+  pname = "omegat";
+
+  src = fetchurl {  # their zip has repeated files or something, so no fetchzip
+    url = "mirror://sourceforge/project/omegat/OmegaT%20-%20Standard/OmegaT%206.0.0/OmegaT_6.0.0_Without_JRE.zip";
+    sha256 = "sha256-dsbT5iuZBudUL4Kw4rdvi4y98mcvnYNj9jRvC5wJoYI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  unpackCmd = "unzip -o $curSrc";  # tries to go interactive without -o
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r lib docs images plugins scripts *.txt *.html OmegaT.jar $out/
+
+    cat > $out/bin/omegat <<EOF
+    #! $SHELL -e
+    CLASSPATH="$out/lib"
+    exec ${jdk}/bin/java -jar -Xmx1024M $out/OmegaT.jar "\$@"
+    EOF
+    chmod +x $out/bin/omegat
+  '';
+
+  meta = with lib; {
+    description = "The free computer aided translation (CAT) tool for professionals";
+    longDescription = ''
+      OmegaT is a free and open source multiplatform Computer Assisted Translation
+      tool with fuzzy matching, translation memory, keyword search, glossaries, and
+      translation leveraging into updated projects.
+    '';
+    homepage = "http://www.omegat.org/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ t184256 ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/onagre/Cargo.lock b/nixpkgs/pkgs/applications/misc/onagre/Cargo.lock
new file mode 100644
index 000000000000..b576dbc9022a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/onagre/Cargo.lock
@@ -0,0 +1,5128 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ab_glyph"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24606928a235e73cdef55a0c909719cadd72fce573e5713d58cb2952d8f5794c"
+dependencies = [
+ "ab_glyph_rasterizer",
+ "owned_ttf_parser",
+]
+
+[[package]]
+name = "ab_glyph_rasterizer"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a13739d7177fbd22bb0ed28badfff9f372f8bef46c863db4e1c6248f6b223b6e"
+
+[[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 = "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.57"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
+
+[[package]]
+name = "approx"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "approx"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
+
+[[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.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "ash"
+version = "0.34.0+1.2.203"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0f780da53d0063880d45554306489f09dd8d1bda47688b4a57bc579119356df"
+dependencies = [
+ "libloading",
+]
+
+[[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",
+]
+
+[[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-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-io"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b"
+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-oneshot"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ec7c75bcbcb0139e9177f30692fd617405ca4e0c27802e128d53171f7042e2c"
+dependencies = [
+ "futures-micro",
+]
+
+[[package]]
+name = "async-pidfd"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12177058299bb8e3507695941b6d0d7dc0e4e6515b8bc1bf4609d9e32ef51799"
+dependencies = [
+ "async-io",
+ "libc",
+]
+
+[[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-task"
+version = "4.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9"
+
+[[package]]
+name = "async-trait"
+version = "0.1.53"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+
+[[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"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a"
+
+[[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",
+]
+
+[[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 = "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 = "byte-tools"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
+
+[[package]]
+name = "bytemuck"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdead85bdec19c194affaeeb670c0e41fe23de31459efd1c174d049269cf02cc"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "562e382481975bc61d11275ac5e62a19abd00b0547d99516a415336f183dcd0e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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 = "cache-padded"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
+
+[[package]]
+name = "calloop"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf2eec61efe56aa1e813f5126959296933cf0700030e4314786c48779a66ab82"
+dependencies = [
+ "log",
+ "nix 0.22.3",
+]
+
+[[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"
+
+[[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 = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
+[[package]]
+name = "clap"
+version = "2.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
+dependencies = [
+ "bitflags",
+ "textwrap",
+ "unicode-width",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f3e1238132dc01f081e1cbb9dace14e5ef4c3a51ee244bd982275fb514605db"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "clipboard_macos"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "145a7f9e9b89453bc0a5e32d166456405d389cea5b578f57f1274b1397588a95"
+dependencies = [
+ "objc",
+ "objc-foundation",
+ "objc_id",
+]
+
+[[package]]
+name = "clipboard_wayland"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f6364a9f7a66f2ac1a1a098aa1c7f6b686f2496c6ac5e5c0d773445df912747"
+dependencies = [
+ "smithay-clipboard",
+]
+
+[[package]]
+name = "clipboard_x11"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64240d63f1883d87e5637bfcaf9d77e5c8bd24e30fd440ea2dff5c48c0bf0b7a"
+dependencies = [
+ "thiserror",
+ "x11rb",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.48"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8ad8cef104ac57b68b89df3208164d228503abbdce70f6880ffa3d970e7443a"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f63902e9223530efb4e26ccd0cf55ec30d592d3b42e21a28defc42a9586e832"
+dependencies = [
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "core-foundation 0.9.3",
+ "core-graphics 0.22.3",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
+dependencies = [
+ "bitflags",
+ "block",
+ "core-foundation 0.9.3",
+ "core-graphics-types",
+ "foreign-types",
+ "libc",
+ "objc",
+]
+
+[[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 = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[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 = "const_format"
+version = "0.2.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0936ffe6d0c8d6a51b3b0a73b2acbe925d786f346cf45bfddc8341d79fb7dc8a"
+dependencies = [
+ "const_format_proc_macros",
+]
+
+[[package]]
+name = "const_format_proc_macros"
+version = "0.2.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef196d5d972878a48da7decb7686eded338b4858fbabeed513d63a7c98b2b82d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "copyless"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2df960f5d869b2dd8532793fde43eb5427cceb126c929747a26823ab0eeb536"
+
+[[package]]
+name = "core-foundation"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
+dependencies = [
+ "core-foundation-sys 0.7.0",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+dependencies = [
+ "core-foundation-sys 0.8.3",
+ "libc",
+]
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
+
+[[package]]
+name = "core-foundation-sys"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "core-graphics"
+version = "0.19.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3889374e6ea6ab25dba90bb5d96202f61108058361f6dc72e8b03e6f8bbe923"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.7.0",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags",
+ "core-foundation 0.9.3",
+ "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",
+ "core-foundation 0.9.3",
+ "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 0.9.3",
+ "core-graphics 0.22.3",
+ "foreign-types",
+ "libc",
+]
+
+[[package]]
+name = "core-video-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34ecad23610ad9757664d644e369246edde1803fcb43ed72876565098a5d3828"
+dependencies = [
+ "cfg-if 0.1.10",
+ "core-foundation-sys 0.7.0",
+ "core-graphics 0.19.2",
+ "libc",
+ "objc",
+]
+
+[[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.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10"
+dependencies = [
+ "atty",
+ "cast",
+ "clap",
+ "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 = "crossbeam-channel"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53"
+dependencies = [
+ "cfg-if 1.0.0",
+ "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 1.0.0",
+ "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 1.0.0",
+ "crossbeam-utils",
+ "lazy_static",
+ "memoffset",
+ "scopeguard",
+]
+
+[[package]]
+name = "crossbeam-utils"
+version = "0.8.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
+dependencies = [
+ "cfg-if 1.0.0",
+ "lazy_static",
+]
+
+[[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 = "ctor"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c"
+dependencies = [
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "cty"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+
+[[package]]
+name = "d3d12"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2daefd788d1e96e0a9d66dee4b828b883509bc3ea9ce30665f04c3246372690c"
+dependencies = [
+ "bitflags",
+ "libloading",
+ "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",
+ "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 = "data-url"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a30bfce702bcfa94e906ef82421f2c0e61c076ad76030c16ee5d2e9a32fe193"
+dependencies = [
+ "matches",
+]
+
+[[package]]
+name = "deflate"
+version = "0.7.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
+[[package]]
+name = "deflate"
+version = "0.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73770f8e1fe7d64df17ca66ad28994a0a623ea497fa69486e14984e715c5d174"
+dependencies = [
+ "adler32",
+ "byteorder",
+]
+
+[[package]]
+name = "deflate"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c86f7e25f518f4b81808a2cf1c50996a61f5c2eb394b2393bd87f2a4780a432f"
+dependencies = [
+ "adler32",
+]
+
+[[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 = "digest"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
+dependencies = [
+ "generic-array",
+]
+
+[[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"
+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 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",
+]
+
+[[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 = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "dlv-list"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257"
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dwrote"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "winapi",
+ "wio",
+]
+
+[[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"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.31"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b"
+dependencies = [
+ "cfg-if 1.0.0",
+]
+
+[[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 = "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 = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "euclid"
+version = "0.22.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b52c2ef4a78da0ba68fbe1fd920627411096d2ac478f7f4c9f3a54ba6705bade"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "event-listener"
+version = "2.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
+
+[[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 = "fake-simd"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
+
+[[package]]
+name = "fastrand"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "find-crate"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a98bbaacea1c0eb6a0876280051b892eb73594fd90cf3b20e9c817029c57d2"
+dependencies = [
+ "toml",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af"
+dependencies = [
+ "cfg-if 1.0.0",
+ "crc32fast",
+ "libc",
+ "miniz_oxide 0.5.1",
+]
+
+[[package]]
+name = "float-cmp"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4"
+
+[[package]]
+name = "float-ord"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7bad48618fdb549078c333a7a8528acb57af271d0433bdecd523eb620628364e"
+
+[[package]]
+name = "flume"
+version = "0.10.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "843c03199d0c0ca54bc1ea90ac0d507274c28abcc4f691ae8b4eaa375087c76a"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "pin-project 1.0.10",
+ "spin 0.9.3",
+]
+
+[[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.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46c9a156ec38864999bc9c4156e5f3b50224d4a5578028a64e5a3875caa9ee28"
+dependencies = [
+ "bitflags",
+ "byteorder",
+ "core-foundation 0.9.3",
+ "core-graphics 0.22.3",
+ "core-text",
+ "dirs-next",
+ "dwrote",
+ "float-ord",
+ "freetype",
+ "lazy_static",
+ "libc",
+ "log",
+ "pathfinder_geometry",
+ "pathfinder_simd",
+ "servo-fontconfig",
+ "walkdir",
+ "winapi",
+]
+
+[[package]]
+name = "fontdb"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d66551cc28351f0bc6a73da86459ee7765caaad03ce284f2dc36472dbf539cd"
+dependencies = [
+ "log",
+ "memmap2",
+ "ttf-parser 0.12.3",
+]
+
+[[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 = "fork"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57b4f1a740392e495821244cc1658d86496ac6e67a47da67e243ed401b937717"
+dependencies = [
+ "libc",
+]
+
+[[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 = "freedesktop-desktop-entry"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45157175a725e81f3f594382430b6b78af5f8f72db9bd51b94f0785f80fc6d29"
+dependencies = [
+ "dirs 3.0.2",
+ "gettext-rs",
+ "memchr",
+ "thiserror",
+ "xdg",
+]
+
+[[package]]
+name = "freedesktop-icons"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "420b2cb0cf0ab0d5f34c068830f3b5c17b378ab3c2acaf7ca4bfde671d70be51"
+dependencies = [
+ "dirs 4.0.0",
+ "once_cell",
+ "rust-ini",
+ "thiserror",
+]
+
+[[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 = "fs2"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[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.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",
+ "num_cpus",
+]
+
+[[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",
+ "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-micro"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b460264b3593d68b16a7bc35f7bc226ddfebdf9a1c8db1ed95d5cc6b7168c826"
+dependencies = [
+ "pin-project-lite",
+]
+
+[[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",
+ "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 0.5.6",
+ "futures",
+ "memchr",
+ "pin-project 0.4.29",
+]
+
+[[package]]
+name = "fxhash"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
+dependencies = [
+ "byteorder",
+]
+
+[[package]]
+name = "gen-z"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0e87038e64f38cb7fcd57f54c8d6654ad65712babbf70f38d1834d3150ad2415"
+dependencies = [
+ "futures",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.12.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd"
+dependencies = [
+ "typenum",
+]
+
+[[package]]
+name = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.1.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
+dependencies = [
+ "cfg-if 1.0.0",
+ "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 1.0.0",
+ "js-sys",
+ "libc",
+ "wasi 0.10.2+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gettext-rs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e49ea8a8fad198aaa1f9655a2524b64b70eb06b2f3ff37da407566c93054f364"
+dependencies = [
+ "gettext-sys",
+ "locale_config",
+]
+
+[[package]]
+name = "gettext-sys"
+version = "0.21.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c63ce2e00f56a206778276704bbe38564c8695249fdc8f354b4ef71c57c3839d"
+dependencies = [
+ "cc",
+ "temp-dir",
+]
+
+[[package]]
+name = "gif"
+version = "0.11.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3a7187e78088aead22ceedeee99779455b23fc231fe13ec443f99bb71694e5b"
+dependencies = [
+ "color_quant",
+ "weezl",
+]
+
+[[package]]
+name = "glam"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "579160312273c954cc51bd440f059dde741029ac8daf8c84fece76cb77f62c15"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "glow"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919"
+dependencies = [
+ "js-sys",
+ "slotmap",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "glyph_brush"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a69c65dd1f1fbb6209aa00f78636e436ad0a55b7d8e5de886d00720dcad9c6e2"
+dependencies = [
+ "glyph_brush_draw_cache",
+ "glyph_brush_layout",
+ "log",
+ "ordered-float",
+ "rustc-hash",
+ "twox-hash",
+]
+
+[[package]]
+name = "glyph_brush_draw_cache"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6010675390f6889e09a21e2c8b575b3ee25667ea8237a8d59423f73cb8c28610"
+dependencies = [
+ "ab_glyph",
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "linked-hash-map",
+ "rayon",
+ "rustc-hash",
+]
+
+[[package]]
+name = "glyph_brush_layout"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc32c2334f00ca5ac3695c5009ae35da21da8c62d255b5b96d56e2597a637a38"
+dependencies = [
+ "ab_glyph",
+ "approx 0.5.1",
+ "xi-unicode",
+]
+
+[[package]]
+name = "gpu-alloc"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fc59e5f710e310e76e6707f86c561dd646f69a8876da9131703b2f717de818d"
+dependencies = [
+ "bitflags",
+ "gpu-alloc-types",
+]
+
+[[package]]
+name = "gpu-alloc-types"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "gpu-descriptor"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a538f217be4d405ff4719a283ca68323cc2384003eca5baaa87501e821c81dda"
+dependencies = [
+ "bitflags",
+ "gpu-descriptor-types",
+ "hashbrown 0.11.2",
+]
+
+[[package]]
+name = "gpu-descriptor-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "363e3677e55ad168fef68cf9de3a4a310b53124c5e784c53a1d70e92d23f2126"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "guillotiere"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b62d5865c036cb1393e23c50693df631d3f5d7bcca4c04fe4cc0fd592e74a782"
+dependencies = [
+ "euclid",
+ "svg_fmt",
+]
+
+[[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",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
+
+[[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",
+]
+
+[[package]]
+name = "heck"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[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 = "hexf-parse"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
+
+[[package]]
+name = "http"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff8670570af52249509a86f5e3e18a08c60b177071826898fde8997cf5f6bfbb"
+dependencies = [
+ "bytes 1.1.0",
+ "fnv",
+ "itoa 1.0.1",
+]
+
+[[package]]
+name = "http-body"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6"
+dependencies = [
+ "bytes 1.1.0",
+ "http",
+ "pin-project-lite",
+]
+
+[[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 = "human-sort"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "140a09c9305e6d5e557e2ed7cbc68e05765a7d4213975b87cb04920689cc6219"
+
+[[package]]
+name = "human_format"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86cce260d758a9aa3d7c4b99d55c815a540f8a37514ba6046ab6be402a157cb0"
+
+[[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.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2"
+dependencies = [
+ "bytes 1.1.0",
+ "futures-channel",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "httparse",
+ "httpdate",
+ "itoa 1.0.1",
+ "pin-project-lite",
+ "socket2",
+ "tokio",
+ "tower-service",
+ "tracing",
+ "want",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.23.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac"
+dependencies = [
+ "http",
+ "hyper",
+ "rustls",
+ "tokio",
+ "tokio-rustls",
+]
+
+[[package]]
+name = "iced"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6025abe6b1056c9b5adad79c484c5fd8b7012e5230f3b0439a1294ade7ded7bf"
+dependencies = [
+ "iced_core",
+ "iced_futures",
+ "iced_graphics",
+ "iced_native",
+ "iced_wgpu",
+ "iced_winit",
+ "thiserror",
+]
+
+[[package]]
+name = "iced_core"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccf9133ceb345ec640047d5597fb8aa88e9cf74ce2d0277a9a62e2d6ed4a8148"
+dependencies = [
+ "bitflags",
+ "palette 0.6.0",
+ "wasm-timer",
+]
+
+[[package]]
+name = "iced_futures"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a93ebc9bcad1745b0852f961c17f3311d8ad797dca5ec5d76c2f7b48922030d"
+dependencies = [
+ "futures",
+ "log",
+ "tokio",
+ "wasm-bindgen-futures",
+ "wasm-timer",
+]
+
+[[package]]
+name = "iced_graphics"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5f5e700f76069666fe7eb920f715a46471a6b8063d8c237b17ff2c1d2f31ce5"
+dependencies = [
+ "bytemuck",
+ "font-kit",
+ "glam",
+ "iced_native",
+ "iced_style",
+ "raw-window-handle 0.4.3",
+ "thiserror",
+]
+
+[[package]]
+name = "iced_native"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7bde7e7c754a0579bb1565394c2167014a8e29824195aecb598cbdf69dba4c5"
+dependencies = [
+ "iced_core",
+ "iced_futures",
+ "iced_style",
+ "num-traits",
+ "twox-hash",
+ "unicode-segmentation",
+]
+
+[[package]]
+name = "iced_style"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a90028c94ab62c13cd3b6fb1499a593a51510d4729c5b4e8e60705b2b28c6bc2"
+dependencies = [
+ "iced_core",
+]
+
+[[package]]
+name = "iced_wgpu"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eef85bef80e9a6ce3bd5e1c783661f4911424e922bfa30b2e600a33a1e5d5716"
+dependencies = [
+ "bitflags",
+ "bytemuck",
+ "futures",
+ "glyph_brush",
+ "guillotiere",
+ "iced_graphics",
+ "iced_native",
+ "image",
+ "kamadak-exif",
+ "log",
+ "raw-window-handle 0.4.3",
+ "resvg",
+ "tiny-skia",
+ "usvg",
+ "wgpu",
+ "wgpu_glyph",
+]
+
+[[package]]
+name = "iced_winit"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72011b895e439e2ebad8f545720e3e97c7368ecfc47a23cbfeaa9508a98af90c"
+dependencies = [
+ "iced_futures",
+ "iced_graphics",
+ "iced_native",
+ "log",
+ "thiserror",
+ "web-sys",
+ "winapi",
+ "window_clipboard",
+ "winit",
+]
+
+[[package]]
+name = "ico"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a4b3331534254a9b64095ae60d3dc2a8225a7a70229cd5888be127cdc1f6804"
+dependencies = [
+ "byteorder",
+ "png 0.11.0",
+]
+
+[[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 = "image"
+version = "0.23.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24ffcb7e7244a9bf19d35bf2883b9c080c4ced3c07a9895572178cdb8f13f6a1"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "gif",
+ "jpeg-decoder",
+ "num-iter",
+ "num-rational 0.3.2",
+ "num-traits",
+ "png 0.16.8",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.11.2",
+]
+
+[[package]]
+name = "inflate"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f5f9f47468e9a76a6452271efadc88fe865a82be91fe75e6c0c57b87ccea59d4"
+dependencies = [
+ "adler32",
+]
+
+[[package]]
+name = "inplace_it"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90953f308a79fe6d62a4643e51f848fbfddcd05975a38e69fdf4ab86a7baf7ca"
+
+[[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",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
+
+[[package]]
+name = "jni-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
+dependencies = [
+ "rayon",
+]
+
+[[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 = "kamadak-exif"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70494964492bf8e491eb3951c5d70c9627eb7100ede6cc56d748b9a3f302cfb6"
+dependencies = [
+ "mutate_once",
+]
+
+[[package]]
+name = "khronos-egl"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3"
+dependencies = [
+ "libc",
+ "libloading",
+]
+
+[[package]]
+name = "kurbo"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb348d766edbac91ba1eb83020d96f4f8867924d194393083c15a51f185e6a82"
+dependencies = [
+ "arrayvec 0.5.2",
+]
+
+[[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.125"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b"
+
+[[package]]
+name = "libloading"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd"
+dependencies = [
+ "cfg-if 1.0.0",
+ "winapi",
+]
+
+[[package]]
+name = "linked-hash-map"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3"
+
+[[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.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 1.0.0",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "matchers"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
+dependencies = [
+ "regex-automata",
+]
+
+[[package]]
+name = "matches"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "memmap2"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b6c2ebff6180198788f5db08d7ce3bc1d0b617176678831a7510825973e357"
+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 = "metal"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e0514f491f4cc03632ab399ee01e2c1c1b12d3e1cf2d667c1ff5f87d6dcd2084"
+dependencies = [
+ "bitflags",
+ "block",
+ "core-graphics-types",
+ "foreign-types",
+ "log",
+ "objc",
+]
+
+[[package]]
+name = "mime"
+version = "0.3.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[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.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791daaae1ed6889560f8c4359194f56648355540573244a5448a83ba1ecc7435"
+dependencies = [
+ "adler32",
+]
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082"
+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 = "mutate_once"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16cf681a23b4d0a43fc35024c176437f9dcd818db34e0f42ab456a0ee5ad497b"
+
+[[package]]
+name = "naga"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3012f2dbcc79e8e0b5825a4836a7106a75dd9b2fe42c528163be0f572538c705"
+dependencies = [
+ "bit-set",
+ "bitflags",
+ "codespan-reporting",
+ "hexf-parse",
+ "indexmap",
+ "log",
+ "num-traits",
+ "rustc-hash",
+ "spirv",
+ "thiserror",
+]
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom 0.2.6",
+]
+
+[[package]]
+name = "ndk"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96d868f654c72e75f8687572699cdabe755f03effbb62542768e995d5b8d699d"
+dependencies = [
+ "bitflags",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-glue"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c71bee8ea72d685477e28bd004cfe1bf99c754d688cd78cad139eae4089484d4"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-macro",
+ "ndk-sys",
+]
+
+[[package]]
+name = "ndk-macro"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c"
+dependencies = [
+ "darling",
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "ndk-sys"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1bcdd74c20ad5d95aacd60ef9ba40fdf77f767051040541df557b7a9b2a2121"
+
+[[package]]
+name = "new_mime_guess"
+version = "4.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2d684d1b59e0dc07b37e2203ef576987473288f530082512aff850585c61b1f"
+dependencies = [
+ "mime",
+ "unicase",
+]
+
+[[package]]
+name = "nix"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+]
+
+[[package]]
+name = "nix"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nix"
+version = "0.23.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset",
+]
+
+[[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"
+version = "0.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4703ad64153382334aa8db57c637364c322d3372e097840c72000dabdcf6156e"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational 0.1.42",
+ "num-traits",
+]
+
+[[package]]
+name = "num-bigint"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e63899ad0da84ce718c14936262a41cee2c79c981fc0a0e7c7beb47d5a07e8c1"
+dependencies = [
+ "num-integer",
+ "num-traits",
+ "rand 0.4.6",
+ "rustc-serialize",
+]
+
+[[package]]
+name = "num-complex"
+version = "0.1.43"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b288631d7878aaf59442cffd36910ea604ecd7745c36054328595114001c9656"
+dependencies = [
+ "num-traits",
+ "rustc-serialize",
+]
+
+[[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.1.42"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee314c74bd753fc86b4780aa9475da469155f3848473a261d2d18e35245a784e"
+dependencies = [
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+ "rustc-serialize",
+]
+
+[[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.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 = "numtoa"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aa2c4e539b869820a2b82e1aef6ff40aa85e65decdd5185e83fb4b1249cd00f"
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+ "objc_exception",
+]
+
+[[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_exception"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "objc_id"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b"
+dependencies = [
+ "objc",
+]
+
+[[package]]
+name = "onagre"
+version = "1.0.0-alpha.0"
+dependencies = [
+ "anyhow",
+ "criterion",
+ "dirs 4.0.0",
+ "env_logger",
+ "font-kit",
+ "freedesktop-icons",
+ "iced",
+ "iced_native",
+ "iced_style",
+ "ico",
+ "log",
+ "once_cell",
+ "palette 0.5.0",
+ "pest",
+ "pest_derive",
+ "pop-launcher-toolkit",
+ "pretty_assertions",
+ "regex",
+ "ron 0.6.6",
+ "serde",
+ "serde_ini",
+ "serde_json",
+ "serde_with",
+ "shell-words",
+ "sled",
+ "speculoos",
+ "structopt",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
+
+[[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 = "ordered-float"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96bcbab4bfea7a59c2c0fe47211a1ac4e3e96bea6eb446d704f310bc5c732ae2"
+dependencies = [
+ "num-traits",
+]
+
+[[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.1",
+]
+
+[[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 = "output_vt100"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "owned_ttf_parser"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1e509cfe7a12db2a90bfa057dfcdbc55a347f5da677c506b53dd099cfec9d"
+dependencies = [
+ "ttf-parser 0.15.0",
+]
+
+[[package]]
+name = "palette"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a05c0334468e62a4dfbda34b29110aa7d70d58c7fdb2c9857b5874dd9827cc59"
+dependencies = [
+ "approx 0.3.2",
+ "num-traits",
+ "palette_derive 0.5.0",
+ "phf 0.8.0",
+ "phf_codegen",
+ "serde",
+]
+
+[[package]]
+name = "palette"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9735f7e1e51a3f740bacd5dc2724b61a7806f23597a8736e679f38ee3435d18"
+dependencies = [
+ "approx 0.5.1",
+ "num-traits",
+ "palette_derive 0.6.0",
+ "phf 0.9.0",
+]
+
+[[package]]
+name = "palette_derive"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b4b5f600e60dd3a147fb57b4547033d382d1979eb087af310e91cb45a63b1f4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "palette_derive"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7799c3053ea8a6d8a1193c7ba42f534e7863cf52e378a7f90406f4a645d33bad"
+dependencies = [
+ "find-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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",
+]
+
+[[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",
+ "smallvec",
+ "winapi",
+]
+
+[[package]]
+name = "pathfinder_geometry"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b7b7e7b4ea703700ce73ebf128e1450eb69c3a8329199ffbfb9b2a0418e5ad3"
+dependencies = [
+ "log",
+ "pathfinder_simd",
+]
+
+[[package]]
+name = "pathfinder_simd"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39fe46acc5503595e5949c17b818714d26fdf9b4920eacf3b2947f0199f4a6ff"
+dependencies = [
+ "rustc_version 0.3.3",
+]
+
+[[package]]
+name = "percent-encoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
+
+[[package]]
+name = "pest"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
+dependencies = [
+ "ucd-trie",
+]
+
+[[package]]
+name = "pest_derive"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "833d1ae558dc601e9a60366421196a8d94bc0ac980476d0b67e1d0988d72b2d0"
+dependencies = [
+ "pest",
+ "pest_generator",
+]
+
+[[package]]
+name = "pest_generator"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99b8db626e31e5b81787b9783425769681b347011cc59471e33ea46d2ea0cf55"
+dependencies = [
+ "pest",
+ "pest_meta",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pest_meta"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54be6e404f5317079812fc8f9f5279de376d8856929e21c184ecf6bbd692a11d"
+dependencies = [
+ "maplit",
+ "pest",
+ "sha-1",
+]
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ac8b67553a7ca9457ce0e526948cad581819238f4a9d1ea74545851fa24f37"
+dependencies = [
+ "phf_macros",
+ "phf_shared 0.9.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d43f3220d96e0080cc9ea234978ccd80d904eafb17be31bb0f76daaea6493082"
+dependencies = [
+ "phf_shared 0.9.0",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b706f5936eb50ed880ae3009395b43ed19db5bff2ebd459c95e7bf013a89ab86"
+dependencies = [
+ "phf_generator 0.9.1",
+ "phf_shared 0.9.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a68318426de33640f02be62b4ae8eb1261be2efbc337b60c54d845bf4484e0d9"
+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 = "0.4.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9615c18d31137579e9ff063499264ddc1278e7b1982757ebc111028c4d1dc909"
+dependencies = [
+ "pin-project-internal 0.4.29",
+]
+
+[[package]]
+name = "pin-project"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e"
+dependencies = [
+ "pin-project-internal 1.0.10",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "0.4.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "044964427019eed9d49d9d5bbce6047ef18f37100ea400912a9fa4a3523ab12a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "pin-project-lite"
+version = "0.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 = "png"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0b0cabbbd20c2d7f06dbf015e06aad59b6ca3d9ed14848783e98af9aaf19925"
+dependencies = [
+ "bitflags",
+ "deflate 0.7.20",
+ "inflate",
+ "num-iter",
+]
+
+[[package]]
+name = "png"
+version = "0.16.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c3287920cb847dee3de33d301c463fba14dda99db24214ddf93f83d3021f4c6"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "deflate 0.8.6",
+ "miniz_oxide 0.3.7",
+]
+
+[[package]]
+name = "png"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc38c0ad57efb786dd57b9864e5b18bae478c00c824dc55a38bbc9da95dde3ba"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "deflate 1.0.0",
+ "miniz_oxide 0.5.1",
+]
+
+[[package]]
+name = "polling"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "log",
+ "wepoll-ffi",
+ "winapi",
+]
+
+[[package]]
+name = "pop-launcher"
+version = "1.2.1"
+source = "git+https://github.com/pop-os/launcher/#47852e53cb6f637003ed6bdb178fe76cb90dff24"
+dependencies = [
+ "const_format",
+ "dirs 4.0.0",
+ "futures",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "tokio",
+ "tokio-stream",
+]
+
+[[package]]
+name = "pop-launcher-plugins"
+version = "1.2.1"
+source = "git+https://github.com/pop-os/launcher/#47852e53cb6f637003ed6bdb178fe76cb90dff24"
+dependencies = [
+ "anyhow",
+ "async-pidfd",
+ "bytes 1.1.0",
+ "dirs 4.0.0",
+ "flume",
+ "fork",
+ "freedesktop-desktop-entry",
+ "futures",
+ "human-sort",
+ "human_format",
+ "new_mime_guess",
+ "pop-launcher",
+ "recently-used-xbel",
+ "regex",
+ "reqwest",
+ "ron 0.7.0",
+ "serde",
+ "serde_json",
+ "slab",
+ "strsim",
+ "sysfs-class",
+ "tokio",
+ "tracing",
+ "url",
+ "urlencoding",
+ "ward",
+ "zbus",
+ "zvariant",
+]
+
+[[package]]
+name = "pop-launcher-service"
+version = "1.2.1"
+source = "git+https://github.com/pop-os/launcher/#47852e53cb6f637003ed6bdb178fe76cb90dff24"
+dependencies = [
+ "anyhow",
+ "async-oneshot",
+ "async-trait",
+ "flume",
+ "futures",
+ "futures_codec",
+ "gen-z",
+ "num_cpus",
+ "pop-launcher",
+ "regex",
+ "ron 0.7.0",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "slab",
+ "strsim",
+ "tokio",
+ "tokio-stream",
+ "toml",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "pop-launcher-toolkit"
+version = "0.1.0"
+source = "git+https://github.com/pop-os/launcher/#47852e53cb6f637003ed6bdb178fe76cb90dff24"
+dependencies = [
+ "pop-launcher",
+ "pop-launcher-plugins",
+ "pop-launcher-service",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
+
+[[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.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa"
+dependencies = [
+ "unicode-xid",
+]
+
+[[package]]
+name = "profiling"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9145ac0af1d93c638c98c40cf7d25665f427b2a44ad0a99b1dccf3e2f25bb987"
+
+[[package]]
+name = "quote"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
+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.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",
+ "rand_pcg",
+]
+
+[[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.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.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_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "range-alloc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63e935c45e09cc6dcf00d2f0b2d630a58f4095320223d47fc68918722f0538b6"
+
+[[package]]
+name = "raw-window-handle"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e28f55143d0548dad60bb4fbdc835a3d7ac6acc3324506450c5fdd6e42903a76"
+dependencies = [
+ "libc",
+ "raw-window-handle 0.4.3",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41"
+dependencies = [
+ "cty",
+]
+
+[[package]]
+name = "rayon"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd249e82c21598a9a426a4e00dd7adc1d640b22445ec8545feef801d1a74c221"
+dependencies = [
+ "autocfg",
+ "crossbeam-deque",
+ "either",
+ "rayon-core",
+]
+
+[[package]]
+name = "rayon-core"
+version = "1.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f51245e1e62e1f1629cbfec37b5793bbabcaeb90f30e94d2ba03564687353e4"
+dependencies = [
+ "crossbeam-channel",
+ "crossbeam-deque",
+ "crossbeam-utils",
+ "num_cpus",
+]
+
+[[package]]
+name = "rctree"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ae028b272a6e99d9f8260ceefa3caa09300a8d6c8d2b2001316474bc52122e9"
+
+[[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 = "recently-used-xbel"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd9533c371523034735c8c68da31004561dd011df9d45d0e5886c141858a7d17"
+dependencies = [
+ "dirs 4.0.0",
+ "serde",
+ "serde-xml-rs",
+ "thiserror",
+]
+
+[[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.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
+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"
+dependencies = [
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
+
+[[package]]
+name = "remove_dir_all"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "renderdoc-sys"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1382d1f0a252c4bf97dc20d979a2fdd05b024acd7c2ed0f7595d7817666a157"
+
+[[package]]
+name = "reqwest"
+version = "0.11.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb"
+dependencies = [
+ "base64",
+ "bytes 1.1.0",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-rustls",
+ "ipnet",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "mime",
+ "percent-encoding",
+ "pin-project-lite",
+ "rustls",
+ "rustls-pemfile",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "tokio",
+ "tokio-rustls",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "webpki-roots",
+ "winreg",
+]
+
+[[package]]
+name = "result"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194d8e591e405d1eecf28819740abed6d719d1a2db87fc0bcdedee9a26d55560"
+
+[[package]]
+name = "resvg"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "608c6e8aa6fb2c13bc06e4184d7c7b2cc1b7c138f88a539da8be55c3c033d7f4"
+dependencies = [
+ "jpeg-decoder",
+ "log",
+ "pico-args",
+ "png 0.17.5",
+ "rgb",
+ "svgfilters",
+ "tiny-skia",
+ "usvg",
+]
+
+[[package]]
+name = "rgb"
+version = "0.8.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e74fdc210d8f24a7dbfedc13b04ba5764f5232754ccebfdf5fff1bad791ccbc6"
+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",
+ "web-sys",
+ "winapi",
+]
+
+[[package]]
+name = "ron"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86018df177b1beef6c7c8ef949969c4f7cb9a9344181b92486b23c79995bdaa4"
+dependencies = [
+ "base64",
+ "bitflags",
+ "serde",
+]
+
+[[package]]
+name = "ron"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678"
+dependencies = [
+ "base64",
+ "bitflags",
+ "serde",
+]
+
+[[package]]
+name = "roxmltree"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "921904a62e410e37e215c40381b7117f830d9d89ba60ab5236170541dd25646b"
+dependencies = [
+ "xmlparser",
+]
+
+[[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-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "rustc-serialize"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf128d1287d2ea9d80910b5f1120d0b8eede3fbf1abe91c40d39ea7d51e6fda"
+
+[[package]]
+name = "rustc_version"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
+dependencies = [
+ "semver 0.11.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.20.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921"
+dependencies = [
+ "log",
+ "ring",
+ "sct",
+ "webpki",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360"
+dependencies = [
+ "base64",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
+
+[[package]]
+name = "rustybuzz"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44561062e583c4873162861261f16fd1d85fe927c4904d71329a4fe43dc355ef"
+dependencies = [
+ "bitflags",
+ "bytemuck",
+ "smallvec",
+ "ttf-parser 0.12.3",
+ "unicode-bidi-mirroring",
+ "unicode-ccc",
+ "unicode-general-category",
+ "unicode-script",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
+
+[[package]]
+name = "safe_arch"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ff3d6d9696af502cc3110dacce942840fb06ff4514cad92236ecc455f2ce05"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
+
+[[package]]
+name = "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 = "semver"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
+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.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
+dependencies = [
+ "pest",
+]
+
+[[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-xml-rs"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65162e9059be2f6a3421ebbb4fef3e74b7d9e7c60c50a0e292c6239f19f1edfa"
+dependencies = [
+ "log",
+ "serde",
+ "thiserror",
+ "xml-rs",
+]
+
+[[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_ini"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb236687e2bb073a7521c021949be944641e671b8505a94069ca37b656c81139"
+dependencies = [
+ "result",
+ "serde",
+ "void",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c"
+dependencies = [
+ "itoa 1.0.1",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed"
+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 1.0.1",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "1.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b827f2113224f3f19a665136f006709194bdfdcb1fdc1e4b2b5cbac8e0cced54"
+dependencies = [
+ "rustversion",
+ "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 = "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 = "sha-1"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f7d94d0bede923b3cea61f3f1ff57ff8cdfd77b400fb8f9998949e0cf04163df"
+dependencies = [
+ "block-buffer",
+ "digest",
+ "fake-simd",
+ "opaque-debug",
+]
+
+[[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 = "sharded-slab"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
+dependencies = [
+ "lazy_static",
+]
+
+[[package]]
+name = "shell-words"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde"
+
+[[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 = "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.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",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a28f16a97fa0e8ce563b2774d1e732dd5d4025d2772c5dba0a41a0f90a29da3"
+dependencies = [
+ "bitflags",
+ "calloop",
+ "dlib",
+ "lazy_static",
+ "log",
+ "memmap2",
+ "nix 0.22.3",
+ "pkg-config",
+ "wayland-client",
+ "wayland-cursor",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "smithay-clipboard"
+version = "0.6.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "610b551bd25378bfd2b8e7a0fcbd83d427e8f2f6a40c47ae0f70688e9949dd55"
+dependencies = [
+ "smithay-client-toolkit",
+ "wayland-client",
+]
+
+[[package]]
+name = "socket2"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "speculoos"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bcff6a72e2ddfb09ce0064568857e70d3cf6f4342244ebb1f84fa6f89b16c26"
+dependencies = [
+ "num",
+]
+
+[[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.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c530c2b0d0bf8b69304b39fe2001993e267461948b890cd037d8ad4293fa1a0d"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "spirv"
+version = "0.2.0+1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830"
+dependencies = [
+ "bitflags",
+ "num-traits",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d44a3643b4ff9caf57abcee9c2c621d6c03d9135e0d8b589bd9afb5992cb176a"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "structopt"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6b5c64445ba8094a6ab0c3cd2ad323e07171012d9c98b0b15651daf1787a10"
+dependencies = [
+ "clap",
+ "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",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "svg_fmt"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fb1df15f412ee2e9dfc1c504260fa695c1c3f10fe9f4a6ee2d2184d7d6450e2"
+
+[[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.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dabb3eb59a457c56d5282ab4545609e2cc382b41f6af239bb8d59a7267ef94b3"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-xid",
+]
+
+[[package]]
+name = "sysfs-class"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e1bbcf869732c45a77898f7f61ed6d411dfc37613517e444842f58d428856d1"
+dependencies = [
+ "numtoa",
+]
+
+[[package]]
+name = "temp-dir"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
+
+[[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 = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.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_local"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "tiny-skia"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bcfd4339bdd4545eabed74b208f2f1555f2e6540fb58135c01f46c0940aa138"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.5.2",
+ "bytemuck",
+ "cfg-if 1.0.0",
+ "png 0.17.5",
+ "safe_arch",
+]
+
+[[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 = "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",
+ "signal-hook-registry",
+ "socket2",
+ "tokio-macros",
+ "winapi",
+]
+
+[[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-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.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-util"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764"
+dependencies = [
+ "bytes 1.1.0",
+ "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.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 1.0.0",
+ "pin-project-lite",
+ "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",
+ "valuable",
+]
+
+[[package]]
+name = "tracing-subscriber"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596"
+dependencies = [
+ "lazy_static",
+ "matchers",
+ "regex",
+ "sharded-slab",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+]
+
+[[package]]
+name = "try-lock"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+
+[[package]]
+name = "ttf-parser"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ae2f58a822f08abdaf668897e96a5656fe72f5a9ce66422423e8849384872e6"
+
+[[package]]
+name = "ttf-parser"
+version = "0.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c74c96594835e10fa545e2a51e8709f30b173a092bfd6036ef2cec53376244f3"
+
+[[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 = "typenum"
+version = "1.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
+
+[[package]]
+name = "ucd-trie"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+
+[[package]]
+name = "uds_windows"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "486992108df0fe0160680af1941fe856c521be931d5a5ecccefe0de86dc47e4a"
+dependencies = [
+ "tempdir",
+ "winapi",
+]
+
+[[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-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.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07547e3ee45e28326cc23faac56d44f58f16ab23e413db526debce3b0bfd2742"
+
+[[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-script"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58dd944fd05f2f0b5c674917aea8a4df6af84f2d8de3fe8d988b95d28fb8fb09"
+
+[[package]]
+name = "unicode-segmentation"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
+
+[[package]]
+name = "unicode-vo"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94"
+
+[[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 = "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",
+]
+
+[[package]]
+name = "urlencoding"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68b90931029ab9b034b300b797048cf23723400aa757e8a2bfb9d748102f9821"
+
+[[package]]
+name = "usvg"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4058e0bd091a56f905e6963e40776ce6880b271275f0b493bff951433e303071"
+dependencies = [
+ "base64",
+ "data-url",
+ "flate2",
+ "float-cmp",
+ "fontdb",
+ "kurbo",
+ "log",
+ "pico-args",
+ "rctree",
+ "roxmltree",
+ "rustybuzz",
+ "simplecss",
+ "siphasher",
+ "svgtypes",
+ "ttf-parser 0.12.3",
+ "unicode-bidi",
+ "unicode-script",
+ "unicode-vo",
+ "xmlwriter",
+]
+
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
+[[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 = "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 = "ward"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1cbcd609d606e1307a1530061482ed2ee3fc9963128990238cefb2013127b61e"
+
+[[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 1.0.0",
+ "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 1.0.0",
+ "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 = "wasm-timer"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
+dependencies = [
+ "futures",
+ "js-sys",
+ "parking_lot",
+ "pin-utils",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wayland-client"
+version = "0.29.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91223460e73257f697d9e23d401279123d36039a3f7a449e983f123292d4458f"
+dependencies = [
+ "bitflags",
+ "downcast-rs",
+ "libc",
+ "nix 0.22.3",
+ "scoped-tls",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.29.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94f6e5e340d7c13490eca867898c4cec5af56c27a5ffe5c80c6fc4708e22d33e"
+dependencies = [
+ "nix 0.22.3",
+ "once_cell",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-cursor"
+version = "0.29.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c52758f13d5e7861fc83d942d3d99bf270c83269575e52ac29e5b73cb956a6bd"
+dependencies = [
+ "nix 0.22.3",
+ "wayland-client",
+ "xcursor",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.29.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60147ae23303402e41fe034f74fb2c35ad0780ee88a1c40ac09a3be1e7465741"
+dependencies = [
+ "bitflags",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.29.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39a1ed3143f7a143187156a2ab52742e89dac33245ba505c17224df48939f9e0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.29.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9341df79a8975679188e37dab3889bfa57c44ac2cb6da166f519a81cbe452d4"
+dependencies = [
+ "dlib",
+ "lazy_static",
+ "pkg-config",
+]
+
+[[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.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "webpki-roots"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf"
+dependencies = [
+ "webpki",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c97e489d8f836838d497091de568cf16b117486d529ec5579233521065bd5e4"
+
+[[package]]
+name = "wepoll-ffi"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "wgpu"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b97cd781ff044d6d697b632a2e212032c2e957d1afaa21dbf58069cbb8f78567"
+dependencies = [
+ "arrayvec 0.7.2",
+ "js-sys",
+ "log",
+ "naga",
+ "parking_lot",
+ "raw-window-handle 0.4.3",
+ "smallvec",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "wgpu-core",
+ "wgpu-hal",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-core"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4688c000eb841ca55f7b35db659b78d6e1cd77d7caf8fb929f4e181f754047d"
+dependencies = [
+ "arrayvec 0.7.2",
+ "bitflags",
+ "cfg_aliases",
+ "codespan-reporting",
+ "copyless",
+ "fxhash",
+ "log",
+ "naga",
+ "parking_lot",
+ "profiling",
+ "raw-window-handle 0.4.3",
+ "smallvec",
+ "thiserror",
+ "wgpu-hal",
+ "wgpu-types",
+]
+
+[[package]]
+name = "wgpu-hal"
+version = "0.12.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d684ea6a34974a2fc19f1dfd183d11a62e22d75c4f187a574bb1224df8e056c2"
+dependencies = [
+ "arrayvec 0.7.2",
+ "ash",
+ "bit-set",
+ "bitflags",
+ "block",
+ "core-graphics-types",
+ "d3d12",
+ "foreign-types",
+ "fxhash",
+ "glow",
+ "gpu-alloc",
+ "gpu-descriptor",
+ "inplace_it",
+ "js-sys",
+ "khronos-egl",
+ "libloading",
+ "log",
+ "metal",
+ "naga",
+ "objc",
+ "parking_lot",
+ "profiling",
+ "range-alloc",
+ "raw-window-handle 0.4.3",
+ "renderdoc-sys",
+ "thiserror",
+ "wasm-bindgen",
+ "web-sys",
+ "wgpu-types",
+ "winapi",
+]
+
+[[package]]
+name = "wgpu-types"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "549533d9e1cdd4b4cda7718d33ff500fc4c34b5467b71d76b547ae0324f3b2a2"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "wgpu_glyph"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8134edb15ae465caf308125646c9e98bdef7398cdefc69227ac77a5eb795e7fe"
+dependencies = [
+ "bytemuck",
+ "glyph_brush",
+ "log",
+ "wgpu",
+]
+
+[[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-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+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_clipboard"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "086ed826cc4468377b6b995300d5f7f852a2fe1eb02e6cd1ccd4a574deb9d310"
+dependencies = [
+ "clipboard-win",
+ "clipboard_macos",
+ "clipboard_wayland",
+ "clipboard_x11",
+ "raw-window-handle 0.3.4",
+ "thiserror",
+]
+
+[[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 = "winit"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b43cc931d58b99461188607efd7acb2a093e65fc621f54cad78517a6063e73a"
+dependencies = [
+ "bitflags",
+ "cocoa",
+ "core-foundation 0.9.3",
+ "core-graphics 0.22.3",
+ "core-video-sys",
+ "dispatch",
+ "instant",
+ "lazy_static",
+ "libc",
+ "log",
+ "mio",
+ "ndk",
+ "ndk-glue",
+ "ndk-sys",
+ "objc",
+ "parking_lot",
+ "percent-encoding",
+ "raw-window-handle 0.4.3",
+ "smithay-client-toolkit",
+ "wasm-bindgen",
+ "wayland-client",
+ "wayland-protocols",
+ "web-sys",
+ "winapi",
+ "x11-dl",
+]
+
+[[package]]
+name = "winreg"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "wio"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea26926b4ce81a6f5d9d0f3a0bc401e5a37c6ae14a1bfaa8ff6099ca80038c59"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ffb080b3f2f616242a4eb8e7d325035312127901025b0052bc3154a282d0f19"
+dependencies = [
+ "gethostname",
+ "nix 0.20.0",
+ "winapi",
+ "winapi-wsapoll",
+]
+
+[[package]]
+name = "xcursor"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "xdg"
+version = "2.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c4583db5cbd4c4c0303df2d15af80f0539db703fa1c68802d4cbbd2dd0f88f6"
+dependencies = [
+ "dirs 4.0.0",
+]
+
+[[package]]
+name = "xi-unicode"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a67300977d3dc3f8034dae89778f502b6ba20b269527b3223ba59c0cf393bb8a"
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
+
+[[package]]
+name = "xmlparser"
+version = "0.13.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "114ba2b24d2167ef6d67d7d04c8cc86522b87f490025f39f0303b7db5bf5e3d8"
+
+[[package]]
+name = "xmlwriter"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9"
+
+[[package]]
+name = "zbus"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53819092b9db813b2c6168b097b4b13ad284d81c9f2b0165a0a1b190e505a1f3"
+dependencies = [
+ "async-broadcast",
+ "async-channel",
+ "async-executor",
+ "async-io",
+ "async-lock",
+ "async-recursion",
+ "async-task",
+ "async-trait",
+ "byteorder",
+ "derivative",
+ "enumflags2",
+ "event-listener",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hex",
+ "lazy_static",
+ "nix 0.23.1",
+ "once_cell",
+ "ordered-stream",
+ "rand 0.8.5",
+ "serde",
+ "serde_repr",
+ "sha1",
+ "static_assertions",
+ "uds_windows",
+ "winapi",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c7174ebe6722c280d6d132d694bb5664ce50a788cb70eeb518e7fc1ca095a114"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn",
+]
+
+[[package]]
+name = "zbus_names"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45dfcdcf87b71dad505d30cc27b1b7b88a64b6d1c435648f48f9dbc1fdc4b7e1"
+dependencies = [
+ "serde",
+ "static_assertions",
+ "zvariant",
+]
+
+[[package]]
+name = "zvariant"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e18ba99d71e03af262953f476071607da0c44e225236cf9b5b9f7f11f1d0b6b0"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9042892ebdca35261951a83d17bcbfd4d3d528cb3bde828498a9b306b50d05c0"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/nixpkgs/pkgs/applications/misc/onagre/default.nix b/nixpkgs/pkgs/applications/misc/onagre/default.nix
new file mode 100644
index 000000000000..b6375e6b5955
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/onagre/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, cmake
+, pkgconf
+, freetype
+, expat
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "onagre";
+  version = "1.0.0-alpha.0";
+
+  src = fetchFromGitHub {
+    owner = "oknozor";
+    repo = pname;
+    rev = version;
+    hash = "sha256-hP+slfCWgsTgR2ZUjAmqx9f7+DBu3MpSLvaiZhqNK1Q=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "pop-launcher-1.2.1" = "sha256-LeKaJIvooD2aUlY113P0mzxOcj63sGkrA0SIccNqCLY=";
+    };
+  };
+
+  cargoSha256 = "sha256-IOhAGrAiT2mnScNP7k7XK9CETUr6BjGdQVdEUvTYQT4=";
+
+  nativeBuildInputs = [ cmake pkgconf ];
+  buildInputs = [ freetype expat ];
+
+  meta = with lib; {
+    description = "A general purpose application launcher for X and wayland inspired by rofi/wofi and alfred";
+    homepage = "https://github.com/oknozor/onagre";
+    license = licenses.mit;
+    maintainers = [ maintainers.jfvillablanca ];
+    platforms = platforms.linux;
+    mainProgram = "onagre";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/onboard/default.nix b/nixpkgs/pkgs/applications/misc/onboard/default.nix
new file mode 100644
index 000000000000..cdcdb2b1e514
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/onboard/default.nix
@@ -0,0 +1,178 @@
+{ fetchurl
+, lib
+, substituteAll
+, aspellWithDicts
+, at-spi2-core ? null
+, atspiSupport ? true
+, bash
+, glib
+, dconf
+, gobject-introspection
+, gsettings-desktop-schemas
+, gtk3
+, hunspell
+, hunspellDicts
+, hunspellWithDicts
+, intltool
+, isocodes
+, libappindicator-gtk3
+, libcanberra-gtk3
+, mousetweaks
+, udev
+, libxkbcommon
+, pkg-config
+, procps
+, python3
+, wrapGAppsHook
+, xorg
+, yelp
+}:
+
+let
+
+  customHunspell = hunspellWithDicts [
+    hunspellDicts.en-us
+  ];
+
+  majorVersion = "1.4";
+
+in
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "onboard";
+  version = "${majorVersion}.1";
+
+  src = fetchurl {
+    url = "https://launchpad.net/onboard/${majorVersion}/${version}/+download/${pname}-${version}.tar.gz";
+    sha256 = "0r9q38ikmr4in4dwqd8m9gh9xjbgxnfxglnjbfcapw8ybfnf3jh1";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      inherit mousetweaks;
+    })
+    # Allow loading hunspell dictionaries installed in NixOS system path
+    ./hunspell-use-xdg-datadirs.patch
+  ];
+
+  nativeBuildInputs = [
+    gobject-introspection
+    intltool
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    bash
+    glib
+    dconf
+    gsettings-desktop-schemas
+    gtk3
+    hunspell
+    isocodes
+    libappindicator-gtk3
+    libcanberra-gtk3
+    libxkbcommon
+    mousetweaks
+    udev
+    xorg.libXtst
+    xorg.libxkbfile
+  ] ++ lib.optional atspiSupport at-spi2-core;
+
+  pythonPath = with python3.pkgs; [
+    dbus-python
+    distutils-extra
+    pyatspi
+    pycairo
+    pygobject3
+    systemd
+  ];
+
+  propagatedUserEnvPkgs = [
+    dconf
+  ];
+
+  nativeCheckInputs = [
+    # for Onboard.SpellChecker.aspell_cmd doctests
+    (aspellWithDicts (dicts: with dicts; [ en ]))
+
+    # for Onboard.SpellChecker.hunspell_cmd doctests
+    customHunspell
+
+    # for Onboard.SpellChecker.hunspell doctests
+    hunspellDicts.en-us
+    hunspellDicts.es-es
+    hunspellDicts.it-it
+
+    python3.pkgs.nose
+  ];
+
+  doCheck = false;
+
+  preBuild = ''
+    # Unnecessary file, has been removed upstream
+    # https://github.com/NixOS/nixpkgs/pull/24986#issuecomment-296114062
+    rm -r Onboard/pypredict/attic
+
+    substituteInPlace  ./scripts/sokSettings.py \
+      --replace "#!/usr/bin/python3" "" \
+      --replace "PYTHON_EXECUTABLE," "\"$out/bin/onboard-settings\"" \
+      --replace '"-cfrom Onboard.settings import Settings\ns = Settings(False)"' ""
+
+    chmod -x ./scripts/sokSettings.py
+
+    patchShebangs .
+
+    substituteInPlace setup.py \
+      --replace "/etc" "$out/etc"
+
+    substituteInPlace  ./Onboard/LanguageSupport.py \
+      --replace "/usr/share/xml/iso-codes" "${isocodes}/share/xml/iso-codes"
+
+    substituteInPlace  ./Onboard/Indicator.py \
+      --replace   "/usr/bin/yelp" "${yelp}/bin/yelp"
+
+    substituteInPlace  ./gnome/Onboard_Indicator@onboard.org/extension.js \
+      --replace "/usr/bin/yelp" "${yelp}/bin/yelp"
+
+    substituteInPlace  ./Onboard/SpellChecker.py \
+      --replace "/usr/lib" "$out/lib"
+
+    substituteInPlace  ./data/org.onboard.Onboard.service  \
+      --replace "/usr/bin" "$out/bin"
+
+    substituteInPlace  ./Onboard/utils.py \
+      --replace "/usr/share" "$out/share"
+    substituteInPlace  ./onboard-defaults.conf.example \
+      --replace "/usr/share" "$out/share"
+    substituteInPlace  ./Onboard/Config.py \
+      --replace "/usr/share/onboard" "$out/share/onboard"
+
+    substituteInPlace  ./Onboard/WordSuggestions.py \
+      --replace "/usr/bin" "$out/bin"
+
+    # killall is dangerous on non-gnu platforms. Use pkill instead.
+    substituteInPlace  ./setup.py \
+      --replace '"killall",' '"${procps}/bin/pkill", "-x",'
+  '';
+
+  installPhase = ''
+    ${python3.interpreter} setup.py install --prefix="$out"
+
+    cp onboard-default-settings.gschema.override.example $out/share/glib-2.0/schemas/10_onboard-default-settings.gschema.override
+    glib-compile-schemas $out/share/glib-2.0/schemas/
+  '';
+
+  # Remove ubuntu icons.
+  postFixup = ''
+    rm -rf  $out/share/icons/ubuntu-mono-*
+  '';
+
+  meta = with lib; {
+    homepage = "https://launchpad.net/onboard";
+    description = "Onscreen keyboard useful for tablet PC users and for mobility impaired users";
+    maintainers = with maintainers; [ johnramsden ];
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/onboard/fix-paths.patch b/nixpkgs/pkgs/applications/misc/onboard/fix-paths.patch
new file mode 100644
index 000000000000..64acc9b138c4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/onboard/fix-paths.patch
@@ -0,0 +1,11 @@
+--- a/Onboard/ClickSimulator.py
++++ b/Onboard/ClickSimulator.py
+@@ -479,7 +479,7 @@ class CSMousetweaks(ConfigObject, ClickSimulator):
+         self._daemon_running_notify_callbacks = []
+
+     def _launch_daemon(self, delay):
+-        self.launcher.launch_delayed(["mousetweaks"], delay)
++        self.launcher.launch_delayed(["@mousetweaks@/bin/mousetweaks"], delay)
+
+     def _set_connection(self, active):
+         ''' Update interface object, state and notify listeners '''
diff --git a/nixpkgs/pkgs/applications/misc/onboard/hunspell-use-xdg-datadirs.patch b/nixpkgs/pkgs/applications/misc/onboard/hunspell-use-xdg-datadirs.patch
new file mode 100644
index 000000000000..2463c8d5f5ac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/onboard/hunspell-use-xdg-datadirs.patch
@@ -0,0 +1,20 @@
+diff --git a/Onboard/SpellChecker.py b/Onboard/SpellChecker.py
+index 6a92757..46e755e 100644
+--- a/Onboard/SpellChecker.py
++++ b/Onboard/SpellChecker.py
+@@ -506,6 +506,10 @@ class hunspell(SCBackend):
+         if dicpath:
+             paths.extend(dicpath.split(pathsep))
+ 
++        datadirs = os.getenv("XDG_DATA_DIRS")
++        if datadirs:
++            paths.extend(map(lambda datadir: os.path.join(datadir, 'hunspell'), datadirs.split(pathsep)))
++
+         paths.extend(LIBDIRS)
+ 
+         home = os.getenv("HOME")
+@@ -723,4 +727,3 @@ class aspell_cmd(SCBackend):
+             _logger.error(_format("Failed to execute '{}', {}", \
+                             " ".join(args), e))
+         return [id for id in dict_ids if id]
+-
diff --git a/nixpkgs/pkgs/applications/misc/oneko/default.nix b/nixpkgs/pkgs/applications/misc/oneko/default.nix
new file mode 100644
index 000000000000..a67bedd42912
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/oneko/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, imake
+, gccmakedep
+, libX11
+, libXext
+}:
+
+stdenv.mkDerivation rec {
+  version_name = "1.2.hanami.6";
+  version = "1.2.6";
+  pname = "oneko";
+  src = fetchFromGitHub {
+    owner = "IreneKnapp";
+    repo = "oneko";
+    rev = version_name;
+    sha256 = "0vx12v5fm8ar3f1g6jbpmd3b1q652d32nc67ahkf28djbqjgcbnc";
+  };
+  nativeBuildInputs = [ imake gccmakedep ];
+  buildInputs = [ libX11 libXext ];
+
+  makeFlags = [ "BINDIR=$(out)/bin" "MANPATH=$(out)/share/man" ];
+  installTargets = [ "install" "install.man" ];
+
+  meta = with lib; {
+    description = "Creates a cute cat chasing around your mouse cursor";
+    longDescription = ''
+    Oneko changes your mouse cursor into a mouse
+    and creates a little cute cat, which starts
+    chasing around your mouse cursor.
+    When the cat is done catching the mouse, it starts sleeping.
+    '';
+    homepage = "https://github.com/IreneKnapp/oneko";
+    license = with licenses; [ publicDomain ];
+    maintainers = with maintainers; [ xaverdh irenes ];
+    platforms = platforms.unix;
+    mainProgram = "oneko";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/onthespot/default.nix b/nixpkgs/pkgs/applications/misc/onthespot/default.nix
new file mode 100644
index 000000000000..75ae769d33ff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/onthespot/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, copyDesktopItems
+, fetchFromGitHub
+, makeDesktopItem
+, python3
+, wrapQtAppsHook
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "onthespot";
+  version = "0.5";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "casualsnek";
+    repo = "onthespot";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-VaJBNsT7uNOGY43GnzhUqDQNiPoFZcc2UaIfOKgkufg=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    copyDesktopItems
+    pythonRelaxDepsHook
+    wrapQtAppsHook
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    charset-normalizer
+    defusedxml
+    librespot
+    music-tag
+    packaging
+    pillow
+    protobuf
+    pyogg
+    pyqt5
+    pyqt5-sip
+    pyxdg
+    requests
+    setuptools
+    show-in-file-manager
+    urllib3
+    zeroconf
+  ];
+
+  pythonRemoveDeps = [
+    "PyQt5-Qt5"
+    "PyQt5-stubs"
+  ];
+
+  pythonRelaxDeps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = " QT based Spotify music downloader written in Python";
+    homepage = "https://github.com/casualsnek/onthespot";
+    changelog = "https://github.com/casualsnek/onthespot/releases/tag/v${version}";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ onny ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openambit/default.nix b/nixpkgs/pkgs/applications/misc/openambit/default.nix
new file mode 100644
index 000000000000..f3429a05ee6e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openambit/default.nix
@@ -0,0 +1,59 @@
+{ cmake
+, fetchFromGitHub
+, fetchpatch
+, lib
+, libusb1
+, mkDerivation
+, python3
+, qtbase
+, qttools
+, udev
+, zlib
+}:
+
+mkDerivation rec {
+  pname = "openambit";
+  version = "0.5";
+
+  src = fetchFromGitHub {
+    owner = "openambitproject";
+    repo = pname;
+    rev = version;
+    sha256 = "1074kvkamwnlkwdajsw1799wddcfkjh2ay6l842r0s4cvrxrai85";
+  };
+
+  patches = [
+    # Pull upstream patch for -fno-common toolchain support:
+    #   https://github.com/openambitproject/openambit/pull/244
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/openambitproject/openambit/commit/b6d97eab417977b6dbe355e0b071d0a56cc3df6b.patch";
+      sha256 = "1p0dg902mlcfjvs01dxl9wv2b50ayp4330p38d14q87mn0c2xl5d";
+    })
+  ];
+
+  nativeBuildInputs = [ cmake qttools ];
+  buildInputs = [ libusb1 python3 qtbase udev zlib ];
+
+  cmakeFlags = [ "-DCMAKE_INSTALL_UDEVRULESDIR=${placeholder "out"}/lib/udev/rules.d" ];
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    $out/bin/openambit --version
+  '';
+
+  postInstall = ''
+    install -m755 -D $src/tools/openambit2gpx.py $out/bin/openambit2gpx
+
+    mv -v $out/lib/udev/rules.d/libambit.rules \
+          $out/lib/udev/rules.d/20-libambit.rules
+  '';
+
+  meta = with lib; {
+    description = "Helps fetch data from Suunto Ambit GPS watches";
+    homepage = "https://github.com/openambitproject/openambit/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ rycee ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openbangla-keyboard/Cargo.lock b/nixpkgs/pkgs/applications/misc/openbangla-keyboard/Cargo.lock
new file mode 100644
index 000000000000..d0bfd1e1783e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openbangla-keyboard/Cargo.lock
@@ -0,0 +1,334 @@
+# 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 = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ea5d730647d4fadd988536d06fecce94b7b4f2a7efdae548f1cf4b63205518ab"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "edit-distance"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbbaaaf38131deb9ca518a274a45bfdb8771f139517b073b16c2d3d32ae5037b"
+
+[[package]]
+name = "emojicon"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349cbfb1ca5301d8492ff741487f98fed75957c5e8fee41485e3413359099ef9"
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "libc"
+version = "0.2.148"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cdc71e17332e86d2e1d38c1f99edcb6288ee11b815fb1a4b049eaa2114d369b"
+
+[[package]]
+name = "matches"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
+
+[[package]]
+name = "memchr"
+version = "2.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
+
+[[package]]
+name = "okkhor"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6ef452078c9fb34be8842a52484bf9271e01ac2795e3d15ee90357fb45c102f"
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_macros",
+ "phf_shared",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf_generator"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6"
+dependencies = [
+ "phf_shared",
+ "rand",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
+dependencies = [
+ "phf_generator",
+ "phf_shared",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "poriborton"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c081c9ef49e856f39ccd59e4943582b1e47225eb01b0debc1d388c4daa55b0dd"
+dependencies = [
+ "matches",
+ "phf",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[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-macro2"
+version = "1.0.67"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d433d9f1a3e8c1263d9456598b16fec66f4acc9a74dacffd35c7bb09b3a1328"
+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 = "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 = "regex"
+version = "1.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
+
+[[package]]
+name = "riti"
+version = "0.1.0"
+dependencies = [
+ "ahash",
+ "edit-distance",
+ "emojicon",
+ "okkhor",
+ "poriborton",
+ "regex",
+ "serde_json",
+ "stringplus",
+]
+
+[[package]]
+name = "ryu"
+version = "1.0.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+
+[[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_derive"
+version = "1.0.188"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.37",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "siphasher"
+version = "0.3.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
+
+[[package]]
+name = "stringplus"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9057d3b491a3eee749e52560657c4d93b0badc04fb3fa8dae3c942c5c066f222"
+
+[[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.37"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7303ef2c05cd654186cb250d29049a24840ca25d2747c25c0381c8d9e2f582e8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
+
+[[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.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
diff --git a/nixpkgs/pkgs/applications/misc/openbangla-keyboard/default.nix b/nixpkgs/pkgs/applications/misc/openbangla-keyboard/default.nix
new file mode 100644
index 000000000000..4b7e1ec8c16a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openbangla-keyboard/default.nix
@@ -0,0 +1,90 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cargo
+, cmake
+, pkg-config
+, rustPlatform
+, rustc
+, wrapQtAppsHook
+, fcitx5
+, ibus
+, qtbase
+, zstd
+, fetchpatch
+, withFcitx5Support ? false
+, withIbusSupport ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openbangla-keyboard";
+  version = "unstable-2023-07-21";
+
+  src = fetchFromGitHub {
+    owner = "openbangla";
+    repo = "openbangla-keyboard";
+    # no upstream release in 3 years
+    # fcitx5 support was added over a year after the last release
+    rev = "780bd40eed16116222faff044bfeb61a07af158f";
+    hash = "sha256-4CR4lgHB51UvS/RLc0AEfIKJ7dyTCOfDrQdGLf9de8E=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # prevents runtime crash when fcitx5-based IM attempts to look in /usr
+    (fetchpatch {
+      name = "use-CMAKE_INSTALL_PREFIX-for-loading-data.patch";
+      url = "https://github.com/OpenBangla/OpenBangla-Keyboard/commit/f402472780c29eaa6b4cc841a70289adf171462b.diff";
+      hash = "sha256-YahvtyOxe8F40Wfe+31C6fdmm197QN26/Q67oinOplk=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    cargo
+    rustc
+    rustPlatform.cargoSetupHook
+    wrapQtAppsHook
+  ];
+
+  buildInputs = lib.optionals withFcitx5Support [
+    fcitx5
+  ] ++ lib.optionals withIbusSupport [
+    ibus
+  ] ++ [
+    qtbase
+    zstd
+  ];
+
+  cargoDeps = rustPlatform.fetchCargoTarball {
+    inherit src;
+    postPatch = ''
+      cp ${./Cargo.lock} Cargo.lock
+    '';
+    sourceRoot = "${src.name}/${cargoRoot}";
+    hash = "sha256-XMleyP2h1aBhtjXhuGHyU0BN+tuL12CGoj+kLY5uye0=";
+  };
+
+  cmakeFlags = lib.optionals withFcitx5Support [
+    "-DENABLE_FCITX=YES"
+  ] ++ lib.optionals withIbusSupport [
+    "-DENABLE_IBUS=YES"
+  ];
+
+  cargoRoot = "src/engine/riti";
+  postPatch = ''
+    cp ${./Cargo.lock} ${cargoRoot}/Cargo.lock
+ '';
+
+  meta = {
+    isIbusEngine = withIbusSupport;
+    description = "An OpenSource, Unicode compliant Bengali Input Method";
+    homepage = "https://openbangla.github.io/";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ eclairevoyant hqurve ];
+    platforms = lib.platforms.linux;
+    # never built on aarch64-linux since first introduction in nixpkgs
+    broken = stdenv.isLinux && stdenv.isAarch64;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openbox-menu/000-enable-svg.patch b/nixpkgs/pkgs/applications/misc/openbox-menu/000-enable-svg.patch
new file mode 100644
index 000000000000..dd6710f5cfc9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openbox-menu/000-enable-svg.patch
@@ -0,0 +1,11 @@
+--- a/Makefile.old	2013-12-11 06:39:44.397358610 +0100
++++ b/Makefile	2013-12-11 06:39:51.082275037 +0100
+@@ -7,7 +7,7 @@
+ CFLAGS+=-DWITH_ICONS
+ # Uncomment this line if Openbox can display SVG icons 
+ # Check SVG support with '$ ldd /usr/bin/openbox | grep svg', librsvg must appear..
+-# CFLAGS+=-DWITH_SVG
++CFLAGS+=-DWITH_SVG
+ 
+ prefix= /usr/local
+ DESTDIR ?= $(prefix)
diff --git a/nixpkgs/pkgs/applications/misc/openbox-menu/default.nix b/nixpkgs/pkgs/applications/misc/openbox-menu/default.nix
new file mode 100644
index 000000000000..de3fc6cd0acc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openbox-menu/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, glib
+, gtk2
+, menu-cache
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openbox-menu";
+  version = "0.8.0";
+
+  src = fetchurl {
+    url = "https://bitbucket.org/fabriceT/openbox-menu/downloads/${pname}-${version}.tar.bz2";
+    sha256 = "1hi4b6mq97y6ajq4hhsikbkk23aha7ikaahm92djw48mgj2f1w8l";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib gtk2 menu-cache ];
+
+  # Enables SVG support by uncommenting the Makefile
+  patches = [ ./000-enable-svg.patch ];
+
+  # The strip options are not recognized by Darwin.
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    sed -i -e '/strip -s/d' Makefile
+  '';
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installFlags = [ "prefix=${placeholder "out"}" ];
+
+  meta = with lib; {
+    homepage = "http://fabrice.thiroux.free.fr/openbox-menu_en.html";
+    description = "Dynamic XDG menu generator for Openbox";
+    longDescription = ''
+      Openbox-menu is a pipemenu for Openbox window manager. It provides a
+      dynamic menu listing installed applications. Most of the work is done by
+      the LXDE library menu-cache.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.romildo ];
+    platforms   = platforms.unix;
+    mainProgram = "openbox-menu";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openbrf/default.nix b/nixpkgs/pkgs/applications/misc/openbrf/default.nix
new file mode 100644
index 000000000000..63734811ff43
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openbrf/default.nix
@@ -0,0 +1,58 @@
+{ mkDerivation, lib, stdenv, fetchFromGitHub, fetchpatch, qtbase, vcg, glew, qmake, libGLU, eigen, libGL }:
+
+
+mkDerivation {
+  pname = "openbrf";
+  version = "unstable-2016-01-09";
+
+  src = fetchFromGitHub {
+    owner = "cfcohen";
+    repo = "openbrf";
+    rev = "4bdc66e38def5e5184f5379c84a7558b7484c70a";
+    sha256 = "16254cnr60ihcn7bki7wl1qm6gkvzb99cn66md1pnb7za8nvzf4j";
+  };
+
+  patches = [
+    # https://github.com/cfcohen/openbrf/pull/7
+    (fetchpatch {
+      name = "fix-build-against-newer-vcglib.patch";
+      url = "https://github.com/cfcohen/openbrf/commit/6d82a25314a393e72bfbe2ffc3965bcac407df4c.patch";
+      hash = "sha256-rNxAw6Le6QXMSirIAMhMmqVgNJLq6osnEOhWrY3mTpM=";
+    })
+  ];
+
+  buildInputs = [ qtbase vcg glew eigen ];
+
+  nativeBuildInputs = [ qmake ];
+
+  qmakeFlags = [ "openBrf.pro" ];
+
+  env.NIX_CFLAGS_COMPILE = "-isystem ${lib.getDev eigen}/include/eigen3";
+
+  postPatch = ''
+    sed -i 's,^VCGLIB .*,VCGLIB = ${vcg}/include,' openBrf.pro
+  '';
+
+  installPhase = ''
+    install -Dm755 openBrf $out/share/openBrf/openBrf
+    install -Dm644 carry_positions.txt $out/share/openBrf/carry_positions.txt
+    install -Dm644 reference.brf $out/share/openBrf/reference.brf
+
+    patchelf  \
+      --set-rpath "${lib.makeLibraryPath [ qtbase glew stdenv.cc.cc libGLU libGL ]}" \
+      $out/share/openBrf/openBrf
+
+    mkdir -p "$out/bin"
+    ln -s "$out/share/openBrf/openBrf" "$out/bin/openBrf"
+  '';
+
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "A tool to edit resource files (BRF)";
+    homepage = "https://github.com/cfcohen/openbrf";
+    maintainers = with lib.maintainers; [ abbradar ];
+    license = licenses.free;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/opencpn/default.nix b/nixpkgs/pkgs/applications/misc/opencpn/default.nix
new file mode 100644
index 000000000000..89d656798008
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/opencpn/default.nix
@@ -0,0 +1,142 @@
+{ stdenv
+, lib
+, AppKit
+, DarwinTools
+, alsa-utils
+, at-spi2-core
+, cmake
+, curl
+, dbus
+, elfutils
+, fetchFromGitHub
+, flac
+, gtk3
+, glew
+, gtest
+, jasper
+, lame
+, libGLU
+, libarchive
+, libdatrie
+, libepoxy
+, libexif
+, libogg
+, libopus
+, libselinux
+, libsepol
+, libsndfile
+, libthai
+, libunarr
+, libusb1
+, libvorbis
+, libxkbcommon
+, lsb-release
+, lz4
+, libmpg123
+, makeWrapper
+, pcre
+, pcre2
+, pkg-config
+, portaudio
+, rapidjson
+, sqlite
+, tinyxml
+, udev
+, util-linux
+, wxGTK32
+, xorg
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "opencpn";
+  version = "5.8.4";
+
+  src = fetchFromGitHub {
+    owner = "OpenCPN";
+    repo = "OpenCPN";
+    rev = "Release_${finalAttrs.version}";
+    hash = "sha256-axRI3sssj2Q6IBfIeyvOa494b0EgKFP+lFL/QrGIybQ=";
+  };
+
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    sed -i '/fixup_bundle/d; /NO_DEFAULT_PATH/d' CMakeLists.txt
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    gtest
+  ] ++ lib.optionals stdenv.isLinux [
+    lsb-release
+  ] ++ lib.optionals stdenv.isDarwin [
+    DarwinTools
+    makeWrapper
+  ];
+
+  buildInputs = [
+    at-spi2-core
+    curl
+    dbus
+    flac
+  ] ++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [
+    AppKit
+  ] ++ [
+    gtk3
+    glew
+    jasper
+    libGLU
+    libarchive
+    libdatrie
+    libepoxy
+    libexif
+    libogg
+    libopus
+    libsndfile
+    libthai
+    libunarr
+    libusb1
+    libvorbis
+    libxkbcommon
+    lz4
+    libmpg123
+    pcre
+    pcre2
+    portaudio
+    rapidjson
+    sqlite
+    tinyxml
+    wxGTK32
+  ] ++ lib.optionals stdenv.isLinux [
+    alsa-utils
+    elfutils
+    libselinux
+    libsepol
+    util-linux
+    xorg.libXdmcp
+    xorg.libXtst
+  ] ++ lib.optionals stdenv.isDarwin [
+    lame
+  ];
+
+  cmakeFlags = [ "-DOCPN_BUNDLE_DOCS=true" ];
+
+  env.NIX_CFLAGS_COMPILE = toString (lib.optionals (!stdenv.hostPlatform.isx86) [
+    "-DSQUISH_USE_SSE=0"
+  ]);
+
+  postInstall = lib.optionals stdenv.isDarwin ''
+    mkdir -p $out/Applications
+    mv $out/bin/OpenCPN.app $out/Applications
+    makeWrapper $out/Applications/OpenCPN.app/Contents/MacOS/OpenCPN $out/bin/opencpn
+  '';
+
+  doCheck = true;
+
+  meta = with lib; {
+    description = "A concise ChartPlotter/Navigator";
+    maintainers = with maintainers; [ kragniz lovesegfault ];
+    platforms = platforms.unix;
+    license = licenses.gpl2Plus;
+    homepage = "https://opencpn.org/";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/openjump/default.nix b/nixpkgs/pkgs/applications/misc/openjump/default.nix
new file mode 100644
index 000000000000..e1eceab49647
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openjump/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, unzip, makeWrapper
+, coreutils, gawk, which, gnugrep, findutils
+, jdk
+}:
+
+stdenv.mkDerivation {
+  pname = "openjump";
+  version = "1.15";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/jump-pilot/OpenJUMP/1.15/OpenJUMP-Portable-1.15-r6241-CORE.zip";
+    sha256 = "12snzkv83w6khcdqzp6xahqapwp82af6c7j2q8n0lj62hk79rfgl";
+  };
+
+  # TODO: build from source
+  unpackPhase = ''
+    mkdir -p $out/bin;
+    cd $out; unzip $src
+  '';
+
+  nativeBuildInputs = [ makeWrapper unzip ];
+
+  installPhase = ''
+    dir=$(echo $out/OpenJUMP-*)
+
+    chmod +x $dir/bin/oj_linux.sh
+    makeWrapper $dir/bin/oj_linux.sh $out/bin/OpenJump \
+      --set JAVA_HOME ${jdk.home} \
+      --set PATH "${coreutils}/bin:${gawk}/bin:${which}/bin:${gnugrep}/bin:${findutils}/bin"
+  '';
+
+  meta = {
+    description = "Open source Geographic Information System (GIS) written in the Java programming language";
+    homepage = "http://www.openjump.org/index.html";
+    license = lib.licenses.gpl2;
+    maintainers = [lib.maintainers.marcweber];
+    platforms = lib.platforms.linux;
+    mainProgram = "OpenJump";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openlp/default.nix b/nixpkgs/pkgs/applications/misc/openlp/default.nix
new file mode 100644
index 000000000000..a075a9bec6f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openlp/default.nix
@@ -0,0 +1,87 @@
+# This file contains all runtime glue: Bindings to optional runtime dependencies
+# for pdfSupport, presentationSupport, and media playback.
+{ lib, mkDerivation, wrapGAppsHook, python3Packages
+
+# qt deps
+, qtbase, qtmultimedia
+
+# optional deps
+, pdfSupport ? false, mupdf  # alternatively could use ghostscript
+, presentationSupport ? false, libreoffice-unwrapped
+, vlcSupport ? false
+, gstreamerSupport ? false, gst_all_1, gstPlugins ? (gst: [
+    gst.gst-plugins-base
+    gst.gst-plugins-good
+    gst.gst-plugins-bad
+    gst.gst-plugins-ugly
+  ])
+
+#, enableMySql ? false      # Untested. If interested, contact maintainer.
+#, enablePostgreSql ? false # Untested. If interested, contact maintainer.
+#, enableJenkinsApi ? false # Untested. If interested, contact maintainer.
+}:
+
+let p = gstPlugins gst_all_1;
+# If gstreamer is activated but no plugins are given, it will at runtime
+# create the false illusion of being usable.
+in assert gstreamerSupport -> (builtins.isList p && builtins.length p > 0);
+
+let
+  # optional packages
+  libreofficePath = "${libreoffice-unwrapped}/lib/libreoffice/program";
+
+  # lib functions
+  inherit (lib.lists) optional optionals;
+  wrapSetVar = var: ''--set ${var} "''$${var}"'';
+
+  # base pkg/lib
+  baseLib = python3Packages.callPackage ./lib.nix { };
+in mkDerivation {
+  pname = baseLib.pname + lib.optionalString (pdfSupport && presentationSupport && vlcSupport && gstreamerSupport) "-full";
+  inherit (baseLib) version src;
+
+  nativeBuildInputs = [ python3Packages.wrapPython wrapGAppsHook ];
+  buildInputs = [ qtbase ] ++ optionals gstreamerSupport
+    ([ qtmultimedia.bin gst_all_1.gstreamer ] ++ gstPlugins gst_all_1);
+  propagatedBuildInputs = optional pdfSupport mupdf
+    ++ optional presentationSupport libreoffice-unwrapped;
+  pythonPath = [ baseLib ] ++ optional vlcSupport python3Packages.python-vlc;
+    # ++ optional enableMySql mysql-connector  # Untested. If interested, contact maintainer.
+    # ++ optional enablePostgreSql psycopg2    # Untested. If interested, contact maintainer.
+    # ++ optional enableJenkinsApi jenkinsapi  # Untested. If interested, contact maintainer.
+
+  PYTHONPATH = libreofficePath;
+  URE_BOOTSTRAP = "vnd.sun.star.pathname:${libreofficePath}/fundamentalrc";
+  UNO_PATH = libreofficePath;
+  LD_LIBRARY_PATH = libreofficePath;
+  JAVA_HOME = "${libreoffice-unwrapped.jdk.home}";
+
+  dontWrapQtApps = true;
+  dontWrapGApps = true;
+
+  # defined in gappsWrapperHook
+  wrapPrefixVariables = optionals presentationSupport
+    [ "PYTHONPATH" "LD_LIBRARY_PATH" "JAVA_HOME" ];
+  makeWrapperArgs = [
+    "\${gappsWrapperArgs[@]}"
+    "\${qtWrapperArgs[@]}"
+  ] ++ optionals presentationSupport
+    ([ "--prefix PATH : ${libreoffice-unwrapped}/bin" ]
+      ++ map wrapSetVar [ "URE_BOOTSTRAP" "UNO_PATH" ]);
+
+  installPhase = ''
+    install -D openlp.py $out/bin/openlp
+  '';
+
+  preFixup = ''
+    wrapPythonPrograms
+  '';
+
+  meta = baseLib.meta // {
+    hydraPlatforms = [ ]; # this is only the wrapper; baseLib gets built
+  };
+
+  passthru = {
+    inherit baseLib;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openlp/lib.nix b/nixpkgs/pkgs/applications/misc/openlp/lib.nix
new file mode 100644
index 000000000000..ea22f54ac022
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openlp/lib.nix
@@ -0,0 +1,103 @@
+# This file contains the base package, some of which is compiled.
+# Runtime glue to optinal runtime dependencies is in 'default.nix'.
+{ fetchurl, lib, qt5
+
+# python deps
+, python, buildPythonPackage
+, alembic, beautifulsoup4, chardet, lxml, mako, pyenchant
+, pyqt5-webkit, pyxdg, sip4, sqlalchemy, sqlalchemy-migrate
+}:
+
+buildPythonPackage rec {
+  pname = "openlp";
+  version = "2.4.6";
+
+  src = fetchurl {
+    url = "https://get.openlp.org/${version}/OpenLP-${version}.tar.gz";
+    sha256 = "f63dcf5f1f8a8199bf55e806b44066ad920d26c9cf67ae432eb8cdd1e761fc30";
+  };
+
+  doCheck = false;
+  # FIXME: checks must be disabled because they are lacking the qt env.
+  #        They fail like this, even if built and wrapped with all Qt and
+  #        runtime dependencies:
+  #
+  #     running install tests
+  #     qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
+  #     This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
+  #
+  #     Available platform plugins are: wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx.
+  #
+  # See also https://discourse.nixos.org/t/qt-plugin-path-unset-in-test-phase/
+
+  #nativeCheckInputs = [ mock nose ];
+  nativeBuildInputs = [ qt5.qttools ];
+  propagatedBuildInputs = [
+    alembic
+    beautifulsoup4
+    chardet
+    lxml
+    mako
+    pyenchant
+    pyqt5-webkit
+    pyxdg
+    sip4
+    sqlalchemy
+    sqlalchemy-migrate
+  ];
+
+  prePatch = ''
+    echo 'from vlc import *' > openlp/core/ui/media/vendor/vlc.py
+  '';
+
+  dontWrapQtApps = true;
+  dontWrapGApps = true;
+  postInstall = ''
+    ( # use subshell because of cd
+      tdestdir="$out/i18n"
+      mkdir -p "$tdestdir"
+      cd ./resources/i18n
+      for file in *.ts; do
+          lconvert -i "$file" -o "$tdestdir/''${file%%ts}qm"
+      done
+    )
+  '';
+
+  preFixup = ''
+    rm -r $out/${python.sitePackages}/tests
+    rm -r $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Free church presentation software";
+    homepage = "https://openlp.org/";
+    downloadPage = "https://openlp.org/#downloads";
+    platforms = platforms.unix;
+    license = licenses.gpl2Only;
+    maintainers = [ maintainers.jorsn ];
+
+    longDescription = ''
+      OpenLP is a free church presentation software.
+
+      Features:
+
+      * Cross platform between Linux, Windows, OS X and FreeBSD
+      * Display songs, Bible verses, presentations, images, audio and video
+      * Control OpenLP remotely via the Android remote, iOS remote or mobile web browser
+      * Quickly and easily import songs from other popular presentation packages
+      * Easy enough to use to get up and running in less than 10 minutes
+
+      Remark: This pkg only supports sqlite dbs. If you wish to have support for
+            mysql or postgresql dbs, or Jenkins, please contact the maintainer.
+
+      Bugs which affect this software packaged in Nixpkgs:
+
+      1. The package must disable checks, because they are lacking the qt env.
+         (see pkg source and https://discourse.nixos.org/t/qt-plugin-path-unset-in-test-phase/)
+      2. There is a segfault on exit. Not a real problem, according to debug log, everything
+         shuts down correctly. Maybe related to https://forums.openlp.org/discussion/3620/crash-on-exit.
+         Plan: Wait for OpenLP-3, since it is already in beta 1
+         (2021-02-09; news: https://openlp.org/blog/).
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openrgb-plugins/effects/default.nix b/nixpkgs/pkgs/applications/misc/openrgb-plugins/effects/default.nix
new file mode 100644
index 000000000000..01ff20071516
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openrgb-plugins/effects/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, qtbase
+, openrgb
+, glib
+, openal
+, qmake
+, pkg-config
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openrgb-plugin-effects";
+  version = "0.9";
+
+  src = fetchFromGitLab {
+    owner = "OpenRGBDevelopers";
+    repo = "OpenRGBEffectsPlugin";
+    rev = "release_${version}";
+    hash = "sha256-8BnHifcFf7ESJgJi/q3ca38zuIVa++BoGlkWxj7gpog=";
+    fetchSubmodules = true;
+  };
+
+  postPatch = ''
+    # Use the source of openrgb from nixpkgs instead of the submodule
+    rm -r OpenRGB
+    ln -s ${openrgb.src} OpenRGB
+  '';
+
+  nativeBuildInputs = [
+    qmake
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    glib
+    openal
+  ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/OpenRGBDevelopers/OpenRGBEffectsPlugin";
+    description = "An effects plugin for OpenRGB";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openrgb-plugins/hardwaresync/default.nix b/nixpkgs/pkgs/applications/misc/openrgb-plugins/hardwaresync/default.nix
new file mode 100644
index 000000000000..5d0c4e966128
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openrgb-plugins/hardwaresync/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, qtbase
+, openrgb
+, glib
+, libgtop
+, lm_sensors
+, qmake
+, pkg-config
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "openrgb-plugin-hardwaresync";
+  version = "0.9";
+
+  src = fetchFromGitLab {
+    owner = "OpenRGBDevelopers";
+    repo = "OpenRGBHardwareSyncPlugin";
+    rev = "release_${version}";
+    hash = "sha256-3sQFiqmXhuavce/6v3XBpp6PAduY7t440nXfbfCX9a0=";
+  };
+
+  postPatch = ''
+    # Use the source of openrgb from nixpkgs instead of the submodule
+    rmdir OpenRGB
+    ln -s ${openrgb.src} OpenRGB
+    # Remove prebuilt stuff
+    rm -r dependencies/lhwm-cpp-wrapper
+  '';
+
+  buildInputs = [
+    qtbase
+    glib
+    libgtop
+    lm_sensors
+  ];
+
+  nativeBuildInputs = [
+    qmake
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/OpenRGBDevelopers/OpenRGBHardwareSyncPlugin";
+    description = "Sync your ARGB devices colors with hardware measures (CPU, GPU, fan speed, etc...)";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openrgb/default.nix b/nixpkgs/pkgs/applications/misc/openrgb/default.nix
new file mode 100644
index 000000000000..e0832ff2459c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openrgb/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, fetchFromGitLab, qmake, wrapQtAppsHook, libusb1, hidapi, pkg-config, coreutils, mbedtls_2, qtbase, qttools, symlinkJoin, openrgb }:
+
+stdenv.mkDerivation rec {
+  pname = "openrgb";
+  version = "0.9";
+
+  src = fetchFromGitLab {
+    owner = "CalcProgrammer1";
+    repo = "OpenRGB";
+    rev = "release_${version}";
+    sha256 = "sha256-XBLj4EfupyeVHRc0pVI7hrXFoCNJ7ak2yO0QSfhBsGU=";
+  };
+
+  nativeBuildInputs = [ qmake pkg-config wrapQtAppsHook ];
+  buildInputs = [ libusb1 hidapi mbedtls_2 qtbase qttools ];
+
+  postPatch = ''
+    patchShebangs scripts/build-udev-rules.sh
+    substituteInPlace scripts/build-udev-rules.sh \
+      --replace /bin/chmod "${coreutils}/bin/chmod"
+  '';
+
+  doInstallCheck = true;
+  installCheckPhase = ''
+    HOME=$TMPDIR $out/bin/openrgb --help > /dev/null
+  '';
+
+  passthru.withPlugins = plugins:
+    let pluginsDir = symlinkJoin {
+      name = "openrgb-plugins";
+      paths = plugins;
+      # Remove all library version symlinks except one,
+      # or they will result in duplicates in the UI.
+      # We leave the one pointing to the actual library, usually the most
+      # qualified one (eg. libOpenRGBHardwareSyncPlugin.so.1.0.0).
+      postBuild = ''
+        for f in $out/lib/*; do
+          if [ "$(dirname $(readlink "$f"))" == "." ]; then
+            rm "$f"
+          fi
+        done
+      '';
+    };
+    in openrgb.overrideAttrs (old: {
+      qmakeFlags = old.qmakeFlags or [] ++ [
+        # Welcome to Escape Hell, we have backslashes
+        ''DEFINES+=OPENRGB_EXTRA_PLUGIN_DIRECTORY=\\\""${lib.escape ["\\" "\"" " "] (toString pluginsDir)}/lib\\\""''
+      ];
+    });
+
+  meta = with lib; {
+    description = "Open source RGB lighting control";
+    homepage = "https://gitlab.com/CalcProgrammer1/OpenRGB";
+    maintainers = with maintainers; [ jonringer ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    mainProgram = "openrgb";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/openring/default.nix b/nixpkgs/pkgs/applications/misc/openring/default.nix
new file mode 100644
index 000000000000..2f72b8b41cc0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/openring/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, fetchFromSourcehut, lib }:
+
+buildGoModule rec {
+  pname = "openring";
+  version = "1.0.1";
+
+  src = fetchFromSourcehut {
+    owner = "~sircmpwn";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-BY2AtgZXzPLqHk3hd6D+XXbrwvWS9DNTKwLqsua/3uw=";
+  };
+
+  vendorHash = "sha256-BbBTmkGyLrIWphXC+dBaHaVzHuXRZ+4N/Jt2k3nF7Z4=";
+
+  # The package has no tests.
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A webring for static site generators";
+    homepage = "https://sr.ht/~sircmpwn/openring";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ sumnerevans ];
+    mainProgram = "openring";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/opentrack/aruco.nix b/nixpkgs/pkgs/applications/misc/opentrack/aruco.nix
new file mode 100644
index 000000000000..dddbfe78beab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/opentrack/aruco.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, cmake, fetchFromGitHub, opencv4 }:
+
+stdenv.mkDerivation {
+  pname = "opentrack-aruco";
+  version = "unstable-20190303";
+
+  src = fetchFromGitHub {
+    owner = "opentrack";
+    repo = "aruco";
+    rev = "12dc60efd61149227bd05c805208d9bcce308f6d";
+    sha256 = "0gkrixgfbpg8pls4qqilphbz4935mg5z4p18a0vv6kclmfccw9ad";
+  };
+
+  nativeBuildInputs = [ cmake ];
+
+  buildInputs = [ opencv4 ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wall -Wextra -Wpedantic -ffast-math -O3";
+
+  preInstall = ''
+    mkdir -p $out/include/aruco
+  '';
+
+  # copy headers required by main package
+  postInstall = ''
+    cp $src/src/*.h $out/include/aruco
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/opentrack/aruco";
+    description = "C++ library for detection of AR markers based on OpenCV";
+    license = licenses.isc;
+    maintainers = with maintainers; [ zaninime ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/opentrack/default.nix b/nixpkgs/pkgs/applications/misc/opentrack/default.nix
new file mode 100644
index 000000000000..84edbc567b41
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/opentrack/default.nix
@@ -0,0 +1,78 @@
+{
+  mkDerivation,
+  lib,
+  callPackage,
+  fetchzip,
+  fetchFromGitHub,
+  cmake,
+  pkg-config,
+  ninja,
+  copyDesktopItems,
+  qtbase,
+  qttools,
+  opencv4,
+  procps,
+  eigen,
+  libXdmcp,
+  libevdev,
+  makeDesktopItem,
+  fetchurl,
+}: let
+  version = "2022.3.0";
+
+  aruco = callPackage ./aruco.nix {};
+
+  # license.txt inside the zip file is MIT
+  xplaneSdk = fetchzip {
+    url = "https://developer.x-plane.com/wp-content/plugins/code-sample-generation/sample_templates/XPSDK303.zip";
+    sha256 = "11wqjsr996c5qhiv2djsd55gc373a9qcq30dvc6rhzm0fys42zba";
+  };
+in
+  mkDerivation {
+    pname = "opentrack";
+    inherit version;
+
+    src = fetchFromGitHub {
+      owner = "opentrack";
+      repo = "opentrack";
+      rev = "opentrack-${version}";
+      sha256 = "sha256-8gpNORTJclYUYp57Vw/0YO3XC9Idurt0a79fhqx0+mo=";
+    };
+
+    nativeBuildInputs = [cmake pkg-config ninja copyDesktopItems];
+    buildInputs = [qtbase qttools opencv4 procps eigen libXdmcp libevdev aruco];
+
+    env.NIX_CFLAGS_COMPILE = "-Wall -Wextra -Wpedantic -ffast-math -O3";
+    dontWrapQtApps = true;
+
+    cmakeFlags = [
+      "-DSDK_ARUCO_LIBPATH=${aruco}/lib/libaruco.a"
+      "-DSDK_XPLANE=${xplaneSdk}"
+    ];
+
+    postInstall = ''
+      wrapQtApp $out/bin/opentrack
+    '';
+
+    desktopItems = [
+      (makeDesktopItem rec {
+        name = "opentrack";
+        exec = "opentrack";
+        icon = fetchurl {
+          url = "https://github.com/opentrack/opentrack/raw/opentrack-${version}/gui/images/opentrack.png";
+          sha256 = "0d114zk78f7nnrk89mz4gqn7yk3k71riikdn29w6sx99h57f6kgn";
+        };
+        desktopName = name;
+        genericName = "Head tracking software";
+        categories = ["Utility"];
+      })
+    ];
+
+    meta = with lib; {
+      homepage = "https://github.com/opentrack/opentrack";
+      description = "Head tracking software for MS Windows, Linux, and Apple OSX";
+      changelog = "https://github.com/opentrack/opentrack/releases/tag/${version}";
+      license = licenses.isc;
+      maintainers = with maintainers; [zaninime];
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/misc/opentx/default.nix b/nixpkgs/pkgs/applications/misc/opentx/default.nix
new file mode 100644
index 000000000000..0634c03e7bd7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/opentx/default.nix
@@ -0,0 +1,51 @@
+{ lib, mkDerivation, fetchFromGitHub
+, cmake, gcc-arm-embedded, python3Packages
+, qtbase, qtmultimedia, qttools, SDL, gtest
+, dfu-util, avrdude
+}:
+
+mkDerivation rec {
+  pname = "opentx";
+  version = "2.3.15";
+
+  src = fetchFromGitHub {
+    owner = "opentx";
+    repo = "opentx";
+    rev = "release/${version}";
+    sha256 = "sha256-F3zykJhKuIpLQSTjn7mcdjEmgRAlwCZpkTaKQR9ve3g=";
+  };
+
+  nativeBuildInputs = [ cmake gcc-arm-embedded python3Packages.pillow qttools ];
+
+  buildInputs = [ qtbase qtmultimedia SDL ];
+
+  postPatch = ''
+    sed -i companion/src/burnconfigdialog.cpp \
+      -e 's|/usr/.*bin/dfu-util|${dfu-util}/bin/dfu-util|' \
+      -e 's|/usr/.*bin/avrdude|${avrdude}/bin/avrdude|'
+  '';
+
+  cmakeFlags = [
+    "-DGTEST_ROOT=${gtest.src}/googletest"
+    # XXX I would prefer to include these here, though we will need to file a bug upstream to get that changed.
+    #"-DDFU_UTIL_PATH=${dfu-util}/bin/dfu-util"
+    #"-DAVRDUDE_PATH=${avrdude}/bin/avrdude"
+
+    # file RPATH_CHANGE could not write new RPATH
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+  ];
+
+  meta = with lib; {
+    description = "OpenTX Companion transmitter support software";
+    longDescription = ''
+      OpenTX Companion is used for many different tasks like loading OpenTX
+      firmware to the radio, backing up model settings, editing settings and
+      running radio simulators.
+    '';
+    homepage = "https://www.open-tx.org/";
+    license = licenses.gpl2Only;
+    platforms = [ "i686-linux" "x86_64-linux" "aarch64-linux" ];
+    maintainers = with maintainers; [ elitak lopsided98 ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/oranda/default.nix b/nixpkgs/pkgs/applications/misc/oranda/default.nix
new file mode 100644
index 000000000000..832f6f8048d6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/oranda/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, tailwindcss
+, oniguruma
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "oranda";
+  version = "0.6.2";
+
+  src = fetchFromGitHub {
+    owner = "axodotdev";
+    repo = "oranda";
+    rev = "v${version}";
+    hash = "sha256-BOMAkmJ2i/zqp6v49xeIF+EfZob8yXohPh86ERwp5OU=";
+  };
+
+  cargoHash = "sha256-SjXPfrO/YiOb1gOw75nAstKFipeIvLV6yl/sy+BZqE4=";
+
+  nativeBuildInputs = [
+    pkg-config
+    tailwindcss
+  ];
+
+  buildInputs = [
+    oniguruma
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  # requires internet access
+  checkFlags = [
+    "--skip=build"
+    "--skip=integration"
+  ];
+
+  env = {
+    RUSTONIG_SYSTEM_LIBONIG = true;
+    ORANDA_USE_TAILWIND_BINARY = true;
+  } // lib.optionalAttrs stdenv.isDarwin {
+    # without this, tailwindcss fails with OpenSSL configuration error
+    OPENSSL_CONF = "";
+  };
+
+  meta = with lib; {
+    description = "Generate beautiful landing pages for your developer tools";
+    homepage = "https://github.com/axodotdev/oranda";
+    changelog = "https://github.com/axodotdev/oranda/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "oranda";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/orca/default.nix b/nixpkgs/pkgs/applications/misc/orca/default.nix
new file mode 100644
index 000000000000..fdb7d3ac9879
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/orca/default.nix
@@ -0,0 +1,115 @@
+{ lib
+, pkg-config
+, fetchurl
+, buildPythonApplication
+, autoreconfHook
+, wrapGAppsHook
+, gobject-introspection
+, gettext
+, yelp-tools
+, itstool
+, python
+, pygobject3
+, gtk3
+, gnome
+, substituteAll
+, at-spi2-atk
+, at-spi2-core
+, pyatspi
+, dbus
+, dbus-python
+, pyxdg
+, xkbcomp
+, procps
+, lsof
+, coreutils
+, gsettings-desktop-schemas
+, speechd
+, brltty
+, liblouis
+, setproctitle
+, gst_all_1
+, gst-python
+}:
+
+buildPythonApplication rec {
+  pname = "orca";
+  version = "45.2";
+
+  format = "other";
+
+  src = fetchurl {
+    url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
+    sha256 = "8PLFeaW+7f5WU7x/4kSBxNaqxd0fccHnoghZXzx473Y=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      cat = "${coreutils}/bin/cat";
+      lsof = "${lsof}/bin/lsof";
+      pgrep = "${procps}/bin/pgrep";
+      xkbcomp = "${xkbcomp}/bin/xkbcomp";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    wrapGAppsHook
+    pkg-config
+    gettext
+    yelp-tools
+    itstool
+    gobject-introspection
+  ];
+
+  pythonPath = [
+    pygobject3
+    pyatspi
+    dbus-python
+    pyxdg
+    brltty
+    liblouis
+    speechd
+    gst-python
+    setproctitle
+  ];
+
+  strictDeps = false;
+
+  buildInputs = [
+    python
+    gtk3
+    at-spi2-atk
+    at-spi2-core
+    dbus
+    gsettings-desktop-schemas
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+  ];
+
+  passthru = {
+    updateScript = gnome.updateScript {
+      packageName = pname;
+    };
+  };
+
+  meta = with lib; {
+    homepage = "https://wiki.gnome.org/Projects/Orca";
+    description = "Screen reader";
+    longDescription = ''
+      A free, open source, flexible and extensible screen reader that provides
+      access to the graphical desktop via speech and refreshable braille.
+      It works with applications and toolkits that support the Assistive
+      Technology Service Provider Interface (AT-SPI). That includes the GNOME
+      GTK toolkit, the Java platform's Swing toolkit, LibreOffice, Gecko, and
+      WebKitGtk. AT-SPI support for the KDE Qt toolkit is being pursued.
+
+      Needs `services.gnome.at-spi2-core.enable = true;` in `configuration.nix`.
+    '';
+    maintainers = with maintainers; [ berce ] ++ teams.gnome.members;
+    license = licenses.lgpl21;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/orca/fix-paths.patch b/nixpkgs/pkgs/applications/misc/orca/fix-paths.patch
new file mode 100644
index 000000000000..45ae4b827ba5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/orca/fix-paths.patch
@@ -0,0 +1,88 @@
+diff --git a/src/orca/debug.py b/src/orca/debug.py
+index b7e11ea60..9ab996765 100644
+--- a/src/orca/debug.py
++++ b/src/orca/debug.py
+@@ -447,7 +447,7 @@ def traceit(frame, event, arg):
+     return traceit
+ 
+ def getOpenFDCount(pid):
+-    procs = subprocess.check_output([ 'lsof', '-w', '-Ff', '-p', str(pid)])
++    procs = subprocess.check_output([ '@lsof@', '-w', '-Ff', '-p', str(pid)])
+     procs = procs.decode('UTF-8').split('\n')
+     files = list(filter(lambda s: s and s[0] == 'f' and s[1:].isdigit(), procs))
+ 
+@@ -465,7 +465,7 @@ def getCmdline(pid):
+     return cmdline
+ 
+ def pidOf(procName):
+-    openFile = subprocess.Popen(f'pgrep {procName}',
++    openFile = subprocess.Popen(f'@pgrep@ {procName}',
+                                 shell=True,
+                                 stdout=subprocess.PIPE).stdout
+     pids = openFile.read()
+diff --git a/src/orca/orca.py b/src/orca/orca.py
+index d4e89f918..bb3e6cc1d 100644
+--- a/src/orca/orca.py
++++ b/src/orca/orca.py
+@@ -312,7 +312,7 @@ def updateKeyMap(keyboardEvent):
+ 
+ def _setXmodmap(xkbmap):
+     """Set the keyboard map using xkbcomp."""
+-    p = subprocess.Popen(['xkbcomp', '-w0', '-', os.environ['DISPLAY']],
++    p = subprocess.Popen(['@xkbcomp@', '-w0', '-', os.environ['DISPLAY']],
+         stdin=subprocess.PIPE, stdout=None, stderr=None)
+     p.communicate(xkbmap)
+ 
+@@ -389,7 +389,7 @@ def _storeXmodmap(keyList):
+     """
+ 
+     global _originalXmodmap
+-    _originalXmodmap = subprocess.check_output(['xkbcomp', os.environ['DISPLAY'], '-'])
++    _originalXmodmap = subprocess.check_output(['@xkbcomp@', os.environ['DISPLAY'], '-'])
+ 
+ def _restoreXmodmap(keyList=[]):
+     """Restore the original xmodmap values for the keys in keyList.
+@@ -404,7 +404,7 @@ def _restoreXmodmap(keyList=[]):
+ 
+     global _capsLockCleared
+     _capsLockCleared = False
+-    p = subprocess.Popen(['xkbcomp', '-w0', '-', os.environ['DISPLAY']],
++    p = subprocess.Popen(['@xkbcomp@', '-w0', '-', os.environ['DISPLAY']],
+         stdin=subprocess.PIPE, stdout=None, stderr=None)
+     p.communicate(_originalXmodmap)
+ 
+diff --git a/src/orca/orca_bin.py.in b/src/orca/orca_bin.py.in
+index 9d64af948..ca9c9e083 100644
+--- a/src/orca/orca_bin.py.in
++++ b/src/orca/orca_bin.py.in
+@@ -65,7 +65,7 @@ class ListApps(argparse.Action):
+                 name = "[DEAD]"
+ 
+             try:
+-                cmdline = subprocess.getoutput('cat /proc/%s/cmdline' % pid)
++                cmdline = subprocess.getoutput('@cat@ /proc/%s/cmdline' % pid)
+             except Exception:
+                 cmdline = '(exception encountered)'
+             else:
+@@ -198,7 +198,7 @@ def inGraphicalDesktop():
+ def otherOrcas():
+     """Returns the pid of any other instances of Orca owned by this user."""
+ 
+-    openFile = subprocess.Popen('pgrep -u %s -x orca' % os.getuid(),
++    openFile = subprocess.Popen('@pgrep@ -u %s -x orca' % os.getuid(),
+                                 shell=True,
+                                 stdout=subprocess.PIPE).stdout
+     pids = openFile.read()
+diff --git a/src/orca/script_utilities.py b/src/orca/script_utilities.py
+index ed8b155e4..0436cca42 100644
+--- a/src/orca/script_utilities.py
++++ b/src/orca/script_utilities.py
+@@ -144,7 +144,7 @@ class Utilities:
+             return ""
+ 
+         try:
+-            cmdline = subprocess.getoutput(f"cat /proc/{pid}/cmdline")
++            cmdline = subprocess.getoutput(f"@cat@ /proc/{pid}/cmdline")
+         except Exception:
+             return ""
+ 
diff --git a/nixpkgs/pkgs/applications/misc/organicmaps/default.nix b/nixpkgs/pkgs/applications/misc/organicmaps/default.nix
new file mode 100644
index 000000000000..de12a1cb44a2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/organicmaps/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, ninja
+, pkg-config
+, which
+, python3
+, rsync
+, wrapQtAppsHook
+, qtbase
+, qtpositioning
+, qtsvg
+, libGLU
+, libGL
+, zlib
+, icu
+, freetype
+, pugixml
+, nix-update-script
+}:
+
+let
+  world_feed_integration_tests_data = fetchFromGitHub {
+    owner = "organicmaps";
+    repo = "world_feed_integration_tests_data";
+    rev = "3b66e59eaae85ebc583ce20baa3bdf27811349c4";
+    hash = "sha256-wOZKqwYxJLllyxCr44rAcropKhohLUIVCtsR5tz9TRw=";
+  };
+in stdenv.mkDerivation rec {
+  pname = "organicmaps";
+  version = "2024.02.06-11";
+
+  src = fetchFromGitHub {
+    owner = "organicmaps";
+    repo = "organicmaps";
+    rev = "${version}-android";
+    hash = "sha256-/taXiJvVP2WCg/F6I6WiZuPKl+Mhwvex/1JNXqrs0mA=";
+    fetchSubmodules = true;
+  };
+
+  postPatch = ''
+    # Disable certificate check. It's dependent on time
+    echo "exit 0" > tools/unix/check_cert.sh
+
+    # crude fix for https://github.com/organicmaps/organicmaps/issues/1862
+    echo "echo ${lib.replaceStrings ["." "-"] ["" ""] version}" > tools/unix/version.sh
+
+    # TODO use system boost instead, see https://github.com/organicmaps/organicmaps/issues/5345
+    patchShebangs 3party/boost/tools/build/src/engine/build.sh
+
+    # Prefetch test data, or the build system will try to fetch it with git.
+    ln -s ${world_feed_integration_tests_data} data/world_feed_integration_tests_data
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    ninja
+    pkg-config
+    which
+    python3
+    rsync
+    wrapQtAppsHook
+  ];
+
+  # Most dependencies are vendored
+  buildInputs = [
+    qtbase
+    qtpositioning
+    qtsvg
+    libGLU
+    libGL
+    zlib
+    icu
+    freetype
+    pugixml
+  ];
+
+  # Yes, this is PRE configure. The configure phase uses cmake
+  preConfigure = ''
+    bash ./configure.sh
+  '';
+
+  passthru = {
+    updateScript = nix-update-script {
+      extraArgs = [ "-vr" "(.*)-android" ];
+    };
+  };
+
+  meta = with lib; {
+    # darwin: "invalid application of 'sizeof' to a function type"
+    broken = stdenv.isDarwin;
+    homepage = "https://organicmaps.app/";
+    description = "Detailed Offline Maps for Travellers, Tourists, Hikers and Cyclists";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+    mainProgram = "OMaps";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/orpie/default.nix b/nixpkgs/pkgs/applications/misc/orpie/default.nix
new file mode 100644
index 000000000000..fc33b9e1cbd9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/orpie/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, ocamlPackages }:
+
+ocamlPackages.buildDunePackage rec {
+  pname = "orpie";
+  version = "1.6.1";
+
+  src = fetchFromGitHub {
+    owner = "pelzlpj";
+    repo = pname;
+    rev = "release-${version}";
+    sha256 = "1rx2nl6cdv609pfymnbq53pi3ql5fr4kda8x10ycd9xq2gc4f21g";
+  };
+
+  patches = [ ./prefix.patch ];
+
+  preConfigure = ''
+    substituteInPlace src/orpie/install.ml.in --replace '@prefix@' $out
+  '';
+
+  nativeBuildInputs = [ ocamlPackages.camlp5 ];
+  buildInputs = with ocamlPackages; [ curses num gsl ];
+
+  meta = {
+    inherit (src.meta) homepage;
+    description = "A Curses-based RPN calculator";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ obadz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/orpie/prefix.patch b/nixpkgs/pkgs/applications/misc/orpie/prefix.patch
new file mode 100644
index 000000000000..41e72ca6d616
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/orpie/prefix.patch
@@ -0,0 +1,11 @@
+--- a/src/orpie/dune	2021-10-05 06:09:09.040120000 +0200
++++ b/src/orpie/dune	2021-10-05 06:10:06.568418512 +0200
+@@ -18,7 +18,7 @@
+ ; Support $PREFIX for overriding installation location
+ (rule
+   (targets install.ml)
+-  (action (run %{project_root}/scripts/compute_prefix subst %{deps} %{targets}))
++  (action (copy# %{deps} %{targets}))
+   (deps (file install.ml.in)))
+ 
+ 
diff --git a/nixpkgs/pkgs/applications/misc/osm2xmap/default.nix b/nixpkgs/pkgs/applications/misc/osm2xmap/default.nix
new file mode 100644
index 000000000000..bca60b14a34d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/osm2xmap/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, libroxml, proj_7, yaml-cpp_0_3, boost } :
+
+stdenv.mkDerivation rec {
+  pname = "osm2xmap";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    sha256 = "1d3f18wzk240yp0q8i2vskhcfj5ar61s4hw83vgps0wr2aglph3w";
+    repo = "osm2xmap";
+    owner = "sembruk";
+    rev = "v${version}";
+  };
+
+  makeFlags = [
+    "GIT_VERSION=${version}"
+    "GIT_TIMESTAMP="
+    "SHAREDIR=${placeholder "out"}/share/osm2xmap/"
+    "INSTALL_BINDIR=${placeholder "out"}/bin"
+    "INSTALL_MANDIR=${placeholder "out"}/share/man/man1"
+  ];
+
+  env.NIX_CFLAGS_COMPILE = "-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H";
+
+  buildInputs = [ libroxml proj_7 yaml-cpp_0_3 boost ];
+
+  meta = with lib; {
+    homepage = "https://github.com/sembruk/osm2xmap";
+    description = "Converter from OpenStreetMap data format to OpenOrienteering Mapper format";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.mpickering ];
+    platforms = with lib.platforms; linux;
+    mainProgram = "osm2xmap";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/osmctools/default.nix b/nixpkgs/pkgs/applications/misc/osmctools/default.nix
new file mode 100644
index 000000000000..fc46ffb7ffac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/osmctools/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitLab, autoreconfHook, zlib }:
+
+stdenv.mkDerivation rec {
+  pname = "osmctools";
+  version = "0.9";
+
+  src = fetchFromGitLab {
+    owner = "osm-c-tools";
+    repo = pname;
+    rev = version;
+    sha256 = "1m8d3r1q1v05pkr8k9czrmb4xjszw6hvgsf3kn9pf0v14gpn4r8f";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ zlib ];
+
+  meta = with lib; {
+    description = "Command line tools for transforming Open Street Map files";
+    homepage = [
+      "https://wiki.openstreetmap.org/wiki/osmconvert"
+      "https://wiki.openstreetmap.org/wiki/osmfilter"
+      "https://wiki.openstreetmap.org/wiki/osmupdate"
+    ];
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.unix;
+    license = licenses.agpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/osmium-tool/default.nix b/nixpkgs/pkgs/applications/misc/osmium-tool/default.nix
new file mode 100644
index 000000000000..7735e7500f9d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/osmium-tool/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, installShellFiles
+, pandoc
+, boost
+, bzip2
+, expat
+, libosmium
+, lz4
+, protozero
+, zlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "osmium-tool";
+  version = "1.16.0";
+
+  src = fetchFromGitHub {
+    owner = "osmcode";
+    repo = "osmium-tool";
+    rev = "v${version}";
+    sha256 = "sha256-DObqbzdPA4RlrlcZhqA0MQtWBE+D6GRD1pd9U4DARIk=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    installShellFiles
+    pandoc
+  ];
+
+  buildInputs = [
+    boost
+    bzip2
+    expat
+    libosmium
+    lz4
+    protozero
+    zlib
+  ];
+
+  doCheck = true;
+
+  postInstall = ''
+    installShellCompletion --zsh ../zsh_completion/_osmium
+  '';
+
+  meta = with lib; {
+    description = "Multipurpose command line tool for working with OpenStreetMap data based on the Osmium library";
+    homepage = "https://osmcode.org/osmium-tool/";
+    changelog = "https://github.com/osmcode/osmium-tool/blob/v${version}/CHANGELOG.md";
+    license = with licenses; [ gpl3Plus mit bsd3 ];
+    maintainers = with maintainers; teams.geospatial.members ++ [ das-g ];
+    mainProgram = "osmium";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/osmscout-server/default.nix b/nixpkgs/pkgs/applications/misc/osmscout-server/default.nix
new file mode 100644
index 000000000000..05688d22bd18
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/osmscout-server/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, fetchpatch
+, pkg-config
+, qmake
+, qttools
+, boost
+, kirigami2
+, kyotocabinet
+, libmicrohttpd
+, libosmscout
+, libpostal
+, marisa
+, osrm-backend
+, protobuf
+, qtquickcontrols2
+, qtlocation
+, sqlite
+, valhalla
+}:
+
+let
+  date = fetchFromGitHub {
+    owner = "HowardHinnant";
+    repo = "date";
+    rev = "a2fdba1adcb076bf9a8343c07524afdf09aa8dcc";
+    sha256 = "00sf1pbaz0g0gsa0dlm23lxk4h46xm1jv1gzbjj5rr9sf1qccyr5";
+  };
+in
+mkDerivation rec {
+  pname = "osmscout-server";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "rinigus";
+    repo = "osmscout-server";
+    rev = version;
+    hash = "sha256-jcg/0SKeLviEC+vszh5DployKDAI7N+a8lzvImzFTvY=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ qmake pkg-config qttools ];
+  buildInputs = [
+    kirigami2 qtquickcontrols2 qtlocation
+    valhalla libosmscout osrm-backend libmicrohttpd
+    libpostal sqlite marisa kyotocabinet boost protobuf date
+  ];
+
+  patches = [
+    # Valhalla 3.2.1 support. Only required for next patch to apply cleanly
+    (fetchpatch {
+      url = "https://github.com/rinigus/osmscout-server/commit/1df9d383e61dd14cbe9e5b52412a2e951cee2ee4.patch";
+      hash = "sha256-h+YTyHr4RYgwH5bfVgyujSekbL2LfV8vJgVkjXT0I10=";
+    })
+    # Valhalla 3.4.0 support
+    (fetchpatch {
+      url = "https://github.com/rinigus/osmscout-server/commit/fe6562a4c3ba5da2735232ea8fdc7f71d7e7e714.patch";
+      hash = "sha256-wibLTFk3cFS5mcC71TgMA9ZAAHS3mbjboFHqax6nCxs=";
+    })
+  ];
+
+  qmakeFlags = [
+    "SCOUT_FLAVOR=kirigami" # Choose to build the kirigami UI variant
+    "CONFIG+=disable_mapnik" # Disable the optional mapnik backend
+  ];
+
+  meta = with lib; {
+    description = "Maps server providing tiles, geocoder, and router";
+    homepage = "https://github.com/rinigus/osmscout-server";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.Thra11 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/osmtogeojson/default.nix b/nixpkgs/pkgs/applications/misc/osmtogeojson/default.nix
new file mode 100644
index 000000000000..07d989d2cc83
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/osmtogeojson/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildNpmPackage, fetchFromGitHub }:
+
+buildNpmPackage rec {
+  pname = "osmtogeojson";
+  version = "3.0.0-beta.5";
+
+  src = fetchFromGitHub {
+    owner = "tyrasd";
+    repo = pname;
+    rev = version;
+    hash = "sha256-T6d/KQQGoXHgV0iNhOms8d9zfjYMfnBNwPLShrEkHG4=";
+  };
+
+  postPatch = ''
+    cp ${./package-lock.json} ./package-lock.json
+  '';
+
+  npmDepsHash = "sha256-stAVuyjuRQthQ3jQdekmZYjeau9l0GzEEMkV1q5fT2k=";
+  dontNpmBuild = true;
+
+  meta = with lib; {
+    description = "Converts OSM data to GeoJSON";
+    homepage = "https://tyrasd.github.io/osmtogeojson/";
+    maintainers = with maintainers; [ thibautmarty ];
+    license = licenses.mit;
+    mainProgram = "osmtogeojson";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/osmtogeojson/package-lock.json b/nixpkgs/pkgs/applications/misc/osmtogeojson/package-lock.json
new file mode 100644
index 000000000000..92979c78b203
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/osmtogeojson/package-lock.json
@@ -0,0 +1,2967 @@
+{
+  "name": "osmtogeojson",
+  "version": "3.0.0-beta.5",
+  "lockfileVersion": 3,
+  "requires": true,
+  "packages": {
+    "": {
+      "name": "osmtogeojson",
+      "version": "3.0.0-beta.5",
+      "license": "MIT",
+      "dependencies": {
+        "@mapbox/geojson-rewind": "0.5.2",
+        "@xmldom/xmldom": "0.8.3",
+        "concat-stream": "2.0.0",
+        "geojson-numeric": "0.2.1",
+        "htmlparser2": "3.5.1",
+        "JSONStream": "0.8.0",
+        "optimist": "~0.3.5",
+        "osm-polygon-features": "^0.9.1",
+        "tiny-osmpbf": "^0.1.0"
+      },
+      "bin": {
+        "osmtogeojson": "osmtogeojson"
+      },
+      "devDependencies": {
+        "expect.js": "~0.2.0",
+        "faucet": "~0.0.1",
+        "istanbul": "^0.4.5",
+        "mocha": "~10.1.0",
+        "tape": "~5.6.1"
+      },
+      "engines": {
+        "node": ">=0.5"
+      },
+      "optionalDependencies": {
+        "@types/geojson": "^7946.0"
+      }
+    },
+    "node_modules/@mapbox/geojson-rewind": {
+      "version": "0.5.2",
+      "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz",
+      "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==",
+      "dependencies": {
+        "get-stream": "^6.0.1",
+        "minimist": "^1.2.6"
+      },
+      "bin": {
+        "geojson-rewind": "geojson-rewind"
+      }
+    },
+    "node_modules/@types/geojson": {
+      "version": "7946.0.10",
+      "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz",
+      "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==",
+      "optional": true
+    },
+    "node_modules/@xmldom/xmldom": {
+      "version": "0.8.3",
+      "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.3.tgz",
+      "integrity": "sha512-Lv2vySXypg4nfa51LY1nU8yDAGo/5YwF+EY/rUZgIbfvwVARcd67ttCM8SMsTeJy51YhHYavEq+FS6R0hW9PFQ==",
+      "engines": {
+        "node": ">=10.0.0"
+      }
+    },
+    "node_modules/abbrev": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz",
+      "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==",
+      "dev": true
+    },
+    "node_modules/amdefine": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+      "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==",
+      "dev": true,
+      "optional": true,
+      "engines": {
+        "node": ">=0.4.2"
+      }
+    },
+    "node_modules/ansi-colors": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+      "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "dependencies": {
+        "color-convert": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+      }
+    },
+    "node_modules/anymatch": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+      "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+      "dev": true,
+      "dependencies": {
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
+      },
+      "engines": {
+        "node": ">= 8"
+      }
+    },
+    "node_modules/argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "dev": true,
+      "dependencies": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "node_modules/argparse/node_modules/sprintf-js": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+      "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
+      "dev": true
+    },
+    "node_modules/array-buffer-byte-length": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz",
+      "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "is-array-buffer": "^3.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.every": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/array.prototype.every/-/array.prototype.every-1.1.4.tgz",
+      "integrity": "sha512-Aui35iRZk1HHLRAyF7QP0KAnOnduaQ6fo6k1NVWfRc0xTs2AZ70ytlXvOmkC6Di4JmUs2Wv3DYzGtCQFSk5uGg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.20.4",
+        "is-string": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.foreach": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/array.prototype.foreach/-/array.prototype.foreach-1.0.4.tgz",
+      "integrity": "sha512-OYqqGR/56CopyheXNwdlJvFtbSvf2Z9RGvL20X6GvAuKePJ76L/D46BqZn3bITd36QA2Ti7Iy0UwVJaD/YwXZA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.20.4",
+        "es-array-method-boxes-properly": "^1.0.0",
+        "get-intrinsic": "^1.1.3",
+        "is-string": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.join": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array.prototype.join/-/array.prototype.join-1.0.1.tgz",
+      "integrity": "sha512-wZy9B8ee6JWSiSStaXac/L5BvoaNDo29l/PaEeIrnpW6PzLGOPBsOzNb4xMTua/q/bLBDttN7n6zc2TSp6058g==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.20.4",
+        "is-string": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.map": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.5.tgz",
+      "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.20.4",
+        "es-array-method-boxes-properly": "^1.0.0",
+        "is-string": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.push": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array.prototype.push/-/array.prototype.push-1.0.3.tgz",
+      "integrity": "sha512-oFJY5zqd2Izh0mEyuAQYduuzjydpaSG3t9L2oepBZUjPlRr/sNd6jqKBt5xtR0ZEKsZkhCeBQecUK16uxfuRYA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.20.4",
+        "get-intrinsic": "^1.1.3",
+        "has-property-descriptors": "^1.0.0",
+        "is-string": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/array.prototype.slice": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/array.prototype.slice/-/array.prototype.slice-1.0.1.tgz",
+      "integrity": "sha512-3LqX5RpWG4uLrHQrc7pQmQIhbqdHI77/CSSzSzRP7zC/mUqujux5yGVTvhSli2B9+8Fux5DZKt90+f84Kl4HVw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.20.4",
+        "get-intrinsic": "^1.1.3",
+        "is-string": "^1.0.7"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/async": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+      "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==",
+      "dev": true
+    },
+    "node_modules/available-typed-arrays": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+      "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "node_modules/binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+      "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "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==",
+      "dev": true,
+      "dependencies": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "node_modules/braces": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+      "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+      "dev": true,
+      "dependencies": {
+        "fill-range": "^7.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/browser-stdout": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+      "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+      "dev": true
+    },
+    "node_modules/buffer-from": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+      "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+    },
+    "node_modules/call-bind": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+      "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/camelcase": {
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+      "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "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/chalk/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==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/chalk/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==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/chokidar": {
+      "version": "3.5.3",
+      "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+      "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+      "dev": true,
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://paulmillr.com/funding/"
+        }
+      ],
+      "dependencies": {
+        "anymatch": "~3.1.2",
+        "braces": "~3.0.2",
+        "glob-parent": "~5.1.2",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.6.0"
+      },
+      "engines": {
+        "node": ">= 8.10.0"
+      },
+      "optionalDependencies": {
+        "fsevents": "~2.3.2"
+      }
+    },
+    "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==",
+      "dev": true,
+      "dependencies": {
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^7.0.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "node_modules/commander": {
+      "version": "2.20.3",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+      "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+      "dev": true
+    },
+    "node_modules/concat-map": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+      "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+      "dev": true
+    },
+    "node_modules/concat-stream": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+      "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+      "engines": [
+        "node >= 6.0"
+      ],
+      "dependencies": {
+        "buffer-from": "^1.0.0",
+        "inherits": "^2.0.3",
+        "readable-stream": "^3.0.2",
+        "typedarray": "^0.0.6"
+      }
+    },
+    "node_modules/core-util-is": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+      "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+    },
+    "node_modules/debug": {
+      "version": "4.3.4",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+      "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+      "dev": true,
+      "dependencies": {
+        "ms": "2.1.2"
+      },
+      "engines": {
+        "node": ">=6.0"
+      },
+      "peerDependenciesMeta": {
+        "supports-color": {
+          "optional": true
+        }
+      }
+    },
+    "node_modules/debug/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==",
+      "dev": true
+    },
+    "node_modules/decamelize": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+      "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/deep-equal": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz",
+      "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "es-get-iterator": "^1.1.2",
+        "get-intrinsic": "^1.1.3",
+        "is-arguments": "^1.1.1",
+        "is-array-buffer": "^3.0.1",
+        "is-date-object": "^1.0.5",
+        "is-regex": "^1.1.4",
+        "is-shared-array-buffer": "^1.0.2",
+        "isarray": "^2.0.5",
+        "object-is": "^1.1.5",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.4",
+        "regexp.prototype.flags": "^1.4.3",
+        "side-channel": "^1.0.4",
+        "which-boxed-primitive": "^1.0.2",
+        "which-collection": "^1.0.1",
+        "which-typed-array": "^1.1.9"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/deep-is": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+      "dev": true
+    },
+    "node_modules/define-properties": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
+      "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+      "dev": true,
+      "dependencies": {
+        "has-property-descriptors": "^1.0.0",
+        "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/defined": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz",
+      "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/diff": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+      "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.3.1"
+      }
+    },
+    "node_modules/domelementtype": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz",
+      "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w=="
+    },
+    "node_modules/domhandler": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.2.1.tgz",
+      "integrity": "sha512-MFFBQFGkyTuNe3vL9WEw9JdlCwIoBYpOGESLeZAvc/jClYNsOl6P1KzevJbWg76GovdEycfR7/2/Ra7NnqtMKw==",
+      "dependencies": {
+        "domelementtype": "1"
+      }
+    },
+    "node_modules/domutils": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.3.0.tgz",
+      "integrity": "sha512-1UdPmldjSGewOuWE40YYFZB1Q4im4LZoCMXGYeTeLz3R9hvxrDYJPRcPHXR4yBbubQebgGNCY2hwpJxmAiUMzQ==",
+      "dependencies": {
+        "domelementtype": "1"
+      }
+    },
+    "node_modules/dotignore": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz",
+      "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==",
+      "dev": true,
+      "dependencies": {
+        "minimatch": "^3.0.4"
+      },
+      "bin": {
+        "ignored": "bin/ignored"
+      }
+    },
+    "node_modules/duplexer": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz",
+      "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==",
+      "dev": true
+    },
+    "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==",
+      "dev": true
+    },
+    "node_modules/es-abstract": {
+      "version": "1.21.2",
+      "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz",
+      "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==",
+      "dev": true,
+      "dependencies": {
+        "array-buffer-byte-length": "^1.0.0",
+        "available-typed-arrays": "^1.0.5",
+        "call-bind": "^1.0.2",
+        "es-set-tostringtag": "^2.0.1",
+        "es-to-primitive": "^1.2.1",
+        "function.prototype.name": "^1.1.5",
+        "get-intrinsic": "^1.2.0",
+        "get-symbol-description": "^1.0.0",
+        "globalthis": "^1.0.3",
+        "gopd": "^1.0.1",
+        "has": "^1.0.3",
+        "has-property-descriptors": "^1.0.0",
+        "has-proto": "^1.0.1",
+        "has-symbols": "^1.0.3",
+        "internal-slot": "^1.0.5",
+        "is-array-buffer": "^3.0.2",
+        "is-callable": "^1.2.7",
+        "is-negative-zero": "^2.0.2",
+        "is-regex": "^1.1.4",
+        "is-shared-array-buffer": "^1.0.2",
+        "is-string": "^1.0.7",
+        "is-typed-array": "^1.1.10",
+        "is-weakref": "^1.0.2",
+        "object-inspect": "^1.12.3",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.4",
+        "regexp.prototype.flags": "^1.4.3",
+        "safe-regex-test": "^1.0.0",
+        "string.prototype.trim": "^1.2.7",
+        "string.prototype.trimend": "^1.0.6",
+        "string.prototype.trimstart": "^1.0.6",
+        "typed-array-length": "^1.0.4",
+        "unbox-primitive": "^1.0.2",
+        "which-typed-array": "^1.1.9"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/es-array-method-boxes-properly": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
+      "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
+      "dev": true
+    },
+    "node_modules/es-get-iterator": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
+      "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.1.3",
+        "has-symbols": "^1.0.3",
+        "is-arguments": "^1.1.1",
+        "is-map": "^2.0.2",
+        "is-set": "^2.0.2",
+        "is-string": "^1.0.7",
+        "isarray": "^2.0.5",
+        "stop-iteration-iterator": "^1.0.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/es-set-tostringtag": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
+      "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.1.3",
+        "has": "^1.0.3",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/es-to-primitive": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+      "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+      "dev": true,
+      "dependencies": {
+        "is-callable": "^1.1.4",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+      "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+      "dev": true,
+      "engines": {
+        "node": ">=6"
+      }
+    },
+    "node_modules/escape-string-regexp": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/escodegen": {
+      "version": "1.8.1",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz",
+      "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==",
+      "dev": true,
+      "dependencies": {
+        "esprima": "^2.7.1",
+        "estraverse": "^1.9.1",
+        "esutils": "^2.0.2",
+        "optionator": "^0.8.1"
+      },
+      "bin": {
+        "escodegen": "bin/escodegen.js",
+        "esgenerate": "bin/esgenerate.js"
+      },
+      "engines": {
+        "node": ">=0.12.0"
+      },
+      "optionalDependencies": {
+        "source-map": "~0.2.0"
+      }
+    },
+    "node_modules/esprima": {
+      "version": "2.7.3",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz",
+      "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==",
+      "dev": true,
+      "bin": {
+        "esparse": "bin/esparse.js",
+        "esvalidate": "bin/esvalidate.js"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/estraverse": {
+      "version": "1.9.3",
+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz",
+      "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/esutils": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/expect.js": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.2.0.tgz",
+      "integrity": "sha512-Si9lyFUkFCY9nTSKocf/Im/knEJNHUgbEWCNpRqiM5J2w+0YPxalJo0aomfh4WxlQiZ6kG97cZlN2UhAVxPAsA==",
+      "dev": true
+    },
+    "node_modules/fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+      "dev": true
+    },
+    "node_modules/faucet": {
+      "version": "0.0.4",
+      "resolved": "https://registry.npmjs.org/faucet/-/faucet-0.0.4.tgz",
+      "integrity": "sha512-vSUB+9iT2n77DPv2x3zYEt3rEIGIhVZJmNTfrx3Y0XVXlBiNOPq2jJVOucqkZ6MNHCgVQUZ5xxe78LkkYCRSFg==",
+      "dev": true,
+      "dependencies": {
+        "array.prototype.foreach": "^1.0.4",
+        "array.prototype.join": "^1.0.1",
+        "array.prototype.map": "^1.0.5",
+        "array.prototype.push": "^1.0.3",
+        "array.prototype.slice": "^1.0.1",
+        "defined": "^1.0.1",
+        "duplexer": "^0.1.2",
+        "minimist": "^1.2.7",
+        "npm-which": "^1.0.2",
+        "readable-stream": "^2.3.7",
+        "safe-regex-test": "^1.0.0",
+        "sprintf-js": "^1.1.2",
+        "string.prototype.split": "^1.0.7",
+        "string.prototype.trim": "^1.2.7",
+        "tap-parser": "^0.7.0",
+        "tape": "^5.6.3",
+        "through2": "^0.2.3"
+      },
+      "bin": {
+        "faucet": "bin/cmd.js"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/faucet/node_modules/isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+      "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+      "dev": true
+    },
+    "node_modules/faucet/node_modules/readable-stream": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+      "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+      "dev": true,
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.3",
+        "isarray": "~1.0.0",
+        "process-nextick-args": "~2.0.0",
+        "safe-buffer": "~5.1.1",
+        "string_decoder": "~1.1.1",
+        "util-deprecate": "~1.0.1"
+      }
+    },
+    "node_modules/faucet/node_modules/safe-buffer": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+      "dev": true
+    },
+    "node_modules/faucet/node_modules/string_decoder": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+      "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+      "dev": true,
+      "dependencies": {
+        "safe-buffer": "~5.1.0"
+      }
+    },
+    "node_modules/fill-range": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+      "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+      "dev": true,
+      "dependencies": {
+        "to-regex-range": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/find-up": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+      "dev": true,
+      "dependencies": {
+        "locate-path": "^6.0.0",
+        "path-exists": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/flat": {
+      "version": "5.0.2",
+      "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+      "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
+      "dev": true,
+      "bin": {
+        "flat": "cli.js"
+      }
+    },
+    "node_modules/for-each": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+      "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+      "dev": true,
+      "dependencies": {
+        "is-callable": "^1.1.3"
+      }
+    },
+    "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==",
+      "dev": true
+    },
+    "node_modules/fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "dev": true,
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
+    "node_modules/function-bind": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+      "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+      "dev": true
+    },
+    "node_modules/function.prototype.name": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+      "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "es-abstract": "^1.19.0",
+        "functions-have-names": "^1.2.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/functions-have-names": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+      "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/geojson-numeric": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npmjs.org/geojson-numeric/-/geojson-numeric-0.2.1.tgz",
+      "integrity": "sha512-rvItMp3W7pe16o2EQTnRw54v6WHdiE4bYjUsdr3FZskFb6oPC7gjLe4zginP+Wd1B/HLl2acTukfn16Lmwn7lg==",
+      "dependencies": {
+        "concat-stream": "2.0.0",
+        "optimist": "~0.3.5"
+      },
+      "bin": {
+        "geojson-numeric": "geojson-numeric"
+      }
+    },
+    "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==",
+      "dev": true,
+      "engines": {
+        "node": "6.* || 8.* || >= 10.*"
+      }
+    },
+    "node_modules/get-intrinsic": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+      "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/get-package-type": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+      "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=8.0.0"
+      }
+    },
+    "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/get-symbol-description": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+      "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/glob": {
+      "version": "5.0.15",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz",
+      "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==",
+      "dev": true,
+      "dependencies": {
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "2 || 3",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/glob-parent": {
+      "version": "5.1.2",
+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+      "dev": true,
+      "dependencies": {
+        "is-glob": "^4.0.1"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
+    "node_modules/globalthis": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
+      "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+      "dev": true,
+      "dependencies": {
+        "define-properties": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/gopd": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+      "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.1.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/handlebars": {
+      "version": "4.7.7",
+      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+      "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+      "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.5",
+        "neo-async": "^2.6.0",
+        "source-map": "^0.6.1",
+        "wordwrap": "^1.0.0"
+      },
+      "bin": {
+        "handlebars": "bin/handlebars"
+      },
+      "engines": {
+        "node": ">=0.4.7"
+      },
+      "optionalDependencies": {
+        "uglify-js": "^3.1.4"
+      }
+    },
+    "node_modules/handlebars/node_modules/source-map": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+      "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+      "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+      "dev": true,
+      "dependencies": {
+        "function-bind": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4.0"
+      }
+    },
+    "node_modules/has-bigints": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+      "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-dynamic-import": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/has-dynamic-import/-/has-dynamic-import-2.0.1.tgz",
+      "integrity": "sha512-X3fbtsZmwb6W7fJGR9o7x65fZoodygCrZ3TVycvghP62yYQfS0t4RS0Qcz+j5tQYUKeSWS09tHkWW6WhFV3XhQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.1.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-flag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
+      "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/has-property-descriptors": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+      "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.1.1"
+      },
+      "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==",
+      "dev": true,
+      "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==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/has-tostringtag": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+      "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+      "dev": true,
+      "dependencies": {
+        "has-symbols": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+      "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+      "dev": true,
+      "bin": {
+        "he": "bin/he"
+      }
+    },
+    "node_modules/htmlparser2": {
+      "version": "3.5.1",
+      "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.5.1.tgz",
+      "integrity": "sha512-9ouaQ6sjVJZS4NhPC65zNm2JCJotiH6BVm6iFvI90hRcsIEISMrgjqMUrPpU9G1VS4vTspH4dyaqSRf6JLQPbg==",
+      "dependencies": {
+        "domelementtype": "1",
+        "domhandler": "2.2",
+        "domutils": "1.3",
+        "readable-stream": "1.1"
+      }
+    },
+    "node_modules/htmlparser2/node_modules/isarray": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+      "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
+    },
+    "node_modules/htmlparser2/node_modules/readable-stream": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+      "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.1",
+        "isarray": "0.0.1",
+        "string_decoder": "~0.10.x"
+      }
+    },
+    "node_modules/htmlparser2/node_modules/string_decoder": {
+      "version": "0.10.31",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+      "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ=="
+    },
+    "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/inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+      "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+      "dev": true,
+      "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/internal-slot": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+      "dev": true,
+      "dependencies": {
+        "get-intrinsic": "^1.2.0",
+        "has": "^1.0.3",
+        "side-channel": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/is-arguments": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
+      "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-array-buffer": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz",
+      "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.2.0",
+        "is-typed-array": "^1.1.10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-bigint": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+      "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+      "dev": true,
+      "dependencies": {
+        "has-bigints": "^1.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+      "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+      "dev": true,
+      "dependencies": {
+        "binary-extensions": "^2.0.0"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-boolean-object": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+      "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-callable": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
+      "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-core-module": {
+      "version": "2.12.0",
+      "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz",
+      "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==",
+      "dev": true,
+      "dependencies": {
+        "has": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-date-object": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+      "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+      "dev": true,
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-glob": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+      "dev": true,
+      "dependencies": {
+        "is-extglob": "^2.1.1"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/is-map": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
+      "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-negative-zero": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+      "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-number": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.12.0"
+      }
+    },
+    "node_modules/is-number-object": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+      "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+      "dev": true,
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-plain-obj": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+      "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/is-regex": {
+      "version": "1.1.4",
+      "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+      "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-set": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
+      "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-shared-array-buffer": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+      "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-string": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+      "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+      "dev": true,
+      "dependencies": {
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-symbol": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+      "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+      "dev": true,
+      "dependencies": {
+        "has-symbols": "^1.0.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-typed-array": {
+      "version": "1.1.10",
+      "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+      "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+      "dev": true,
+      "dependencies": {
+        "available-typed-arrays": "^1.0.5",
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-tostringtag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "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==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/is-weakmap": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
+      "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-weakref": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+      "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/is-weakset": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
+      "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.1.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/isarray": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+      "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+      "dev": true
+    },
+    "node_modules/isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+      "dev": true
+    },
+    "node_modules/istanbul": {
+      "version": "0.4.5",
+      "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz",
+      "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==",
+      "deprecated": "This module is no longer maintained, try this instead:\n  npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.",
+      "dev": true,
+      "dependencies": {
+        "abbrev": "1.0.x",
+        "async": "1.x",
+        "escodegen": "1.8.x",
+        "esprima": "2.7.x",
+        "glob": "^5.0.15",
+        "handlebars": "^4.0.1",
+        "js-yaml": "3.x",
+        "mkdirp": "0.5.x",
+        "nopt": "3.x",
+        "once": "1.x",
+        "resolve": "1.1.x",
+        "supports-color": "^3.1.0",
+        "which": "^1.1.1",
+        "wordwrap": "^1.0.0"
+      },
+      "bin": {
+        "istanbul": "lib/cli.js"
+      }
+    },
+    "node_modules/js-yaml": {
+      "version": "3.14.1",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+      "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+      "dev": true,
+      "dependencies": {
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/js-yaml/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==",
+      "dev": true,
+      "bin": {
+        "esparse": "bin/esparse.js",
+        "esvalidate": "bin/esvalidate.js"
+      },
+      "engines": {
+        "node": ">=4"
+      }
+    },
+    "node_modules/jsonparse": {
+      "version": "0.0.5",
+      "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz",
+      "integrity": "sha512-fw7Q/8gFR8iSekUi9I+HqWIap6mywuoe7hQIg3buTVjuZgALKj4HAmm0X6f+TaL4c9NJbvyFQdaI2ppr5p6dnQ==",
+      "engines": [
+        "node >= 0.2.0"
+      ]
+    },
+    "node_modules/JSONStream": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.0.tgz",
+      "integrity": "sha512-PiV28BpoUorz9kKFwRbD7+wg0t/k0ITHKn0DgCU44YZ/GaGAZRPt9q5PzoifC85gE55SEPIdMu0Labfxevj8cw==",
+      "dependencies": {
+        "jsonparse": "0.0.5",
+        "through": "~2.2.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+      "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==",
+      "dev": true,
+      "dependencies": {
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/locate-path": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+      "dev": true,
+      "dependencies": {
+        "p-locate": "^5.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "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==",
+      "dev": true,
+      "dependencies": {
+        "chalk": "^4.1.0",
+        "is-unicode-supported": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/minimist": {
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/mkdirp": {
+      "version": "0.5.6",
+      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+      "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+      "dev": true,
+      "dependencies": {
+        "minimist": "^1.2.6"
+      },
+      "bin": {
+        "mkdirp": "bin/cmd.js"
+      }
+    },
+    "node_modules/mocha": {
+      "version": "10.1.0",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz",
+      "integrity": "sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==",
+      "dev": true,
+      "dependencies": {
+        "ansi-colors": "4.1.1",
+        "browser-stdout": "1.3.1",
+        "chokidar": "3.5.3",
+        "debug": "4.3.4",
+        "diff": "5.0.0",
+        "escape-string-regexp": "4.0.0",
+        "find-up": "5.0.0",
+        "glob": "7.2.0",
+        "he": "1.2.0",
+        "js-yaml": "4.1.0",
+        "log-symbols": "4.1.0",
+        "minimatch": "5.0.1",
+        "ms": "2.1.3",
+        "nanoid": "3.3.3",
+        "serialize-javascript": "6.0.0",
+        "strip-json-comments": "3.1.1",
+        "supports-color": "8.1.1",
+        "workerpool": "6.2.1",
+        "yargs": "16.2.0",
+        "yargs-parser": "20.2.4",
+        "yargs-unparser": "2.0.0"
+      },
+      "bin": {
+        "_mocha": "bin/_mocha",
+        "mocha": "bin/mocha.js"
+      },
+      "engines": {
+        "node": ">= 14.0.0"
+      },
+      "funding": {
+        "type": "opencollective",
+        "url": "https://opencollective.com/mochajs"
+      }
+    },
+    "node_modules/mocha/node_modules/argparse": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+      "dev": true
+    },
+    "node_modules/mocha/node_modules/glob": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+      "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+      "dev": true,
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      },
+      "engines": {
+        "node": "*"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs"
+      }
+    },
+    "node_modules/mocha/node_modules/glob/node_modules/minimatch": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+      "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^1.1.7"
+      },
+      "engines": {
+        "node": "*"
+      }
+    },
+    "node_modules/mocha/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==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/mocha/node_modules/js-yaml": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+      "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+      "dev": true,
+      "dependencies": {
+        "argparse": "^2.0.1"
+      },
+      "bin": {
+        "js-yaml": "bin/js-yaml.js"
+      }
+    },
+    "node_modules/mocha/node_modules/minimatch": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+      "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+      "dev": true,
+      "dependencies": {
+        "brace-expansion": "^2.0.1"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/mocha/node_modules/minimatch/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/mocha/node_modules/supports-color": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+      "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^4.0.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/chalk/supports-color?sponsor=1"
+      }
+    },
+    "node_modules/ms": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+      "dev": true
+    },
+    "node_modules/nanoid": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+      "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==",
+      "dev": true,
+      "bin": {
+        "nanoid": "bin/nanoid.cjs"
+      },
+      "engines": {
+        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+      }
+    },
+    "node_modules/neo-async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+      "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+      "dev": true
+    },
+    "node_modules/nopt": {
+      "version": "3.0.6",
+      "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
+      "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==",
+      "dev": true,
+      "dependencies": {
+        "abbrev": "1"
+      },
+      "bin": {
+        "nopt": "bin/nopt.js"
+      }
+    },
+    "node_modules/normalize-path": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+      "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/npm-path": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-1.1.0.tgz",
+      "integrity": "sha512-wsL+YXGWlE3DWEqhpgKdt0RWxQrHKpVZ5u6uDYFSpxrxKYVPOctOun8q77VwD02zPTQD4wkc35elWPcocaICag==",
+      "dev": true,
+      "dependencies": {
+        "which": "^1.2.4"
+      },
+      "bin": {
+        "npm-path": "bin/npm-path"
+      }
+    },
+    "node_modules/npm-which": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-1.0.2.tgz",
+      "integrity": "sha512-y1s2PrTct2DuRudZNyu4+l4HteWFzaHcN+mMtA54htjA8xIzYza9casIqUdf+/Lqb4Zg2harBpCxBUt83Dwnuw==",
+      "dev": true,
+      "dependencies": {
+        "commander": "^2.2.0",
+        "npm-path": "^1.0.0",
+        "which": "^1.0.5"
+      },
+      "bin": {
+        "npm-which": "bin/npm-which.js"
+      }
+    },
+    "node_modules/object-inspect": {
+      "version": "1.12.3",
+      "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+      "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/object-is": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
+      "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/object-keys": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+      "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "node_modules/object.assign": {
+      "version": "4.1.4",
+      "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+      "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "has-symbols": "^1.0.3",
+        "object-keys": "^1.1.1"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "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==",
+      "dev": true,
+      "dependencies": {
+        "wrappy": "1"
+      }
+    },
+    "node_modules/optimist": {
+      "version": "0.3.7",
+      "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
+      "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==",
+      "dependencies": {
+        "wordwrap": "~0.0.2"
+      }
+    },
+    "node_modules/optimist/node_modules/wordwrap": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
+      "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
+    "node_modules/optionator": {
+      "version": "0.8.3",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+      "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+      "dev": true,
+      "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"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/osm-polygon-features": {
+      "version": "0.9.2",
+      "resolved": "https://registry.npmjs.org/osm-polygon-features/-/osm-polygon-features-0.9.2.tgz",
+      "integrity": "sha512-5zNEFCq+G6X2TDkqbKYLF1+GtWVCCLA8zX+FVhSogsiTRsGquyaGRy5cYNW4BE3ci0MKOLvNTkFNsjsCNtgz0A=="
+    },
+    "node_modules/p-limit": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+      "dev": true,
+      "dependencies": {
+        "yocto-queue": "^0.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/p-locate": {
+      "version": "5.0.0",
+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+      "dev": true,
+      "dependencies": {
+        "p-limit": "^3.0.2"
+      },
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/path-exists": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "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==",
+      "dev": true,
+      "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==",
+      "dev": true
+    },
+    "node_modules/pbf": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz",
+      "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
+      "dependencies": {
+        "ieee754": "^1.1.12",
+        "resolve-protobuf-schema": "^2.1.0"
+      },
+      "bin": {
+        "pbf": "bin/pbf"
+      }
+    },
+    "node_modules/picomatch": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+      "dev": true,
+      "engines": {
+        "node": ">=8.6"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/jonschlinkert"
+      }
+    },
+    "node_modules/prelude-ls": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+      "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/process-nextick-args": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+      "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+      "dev": true
+    },
+    "node_modules/protocol-buffers-schema": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
+      "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw=="
+    },
+    "node_modules/randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "dev": true,
+      "dependencies": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "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/readdirp": {
+      "version": "3.6.0",
+      "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+      "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+      "dev": true,
+      "dependencies": {
+        "picomatch": "^2.2.1"
+      },
+      "engines": {
+        "node": ">=8.10.0"
+      }
+    },
+    "node_modules/regexp.prototype.flags": {
+      "version": "1.4.3",
+      "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
+      "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.3",
+        "functions-have-names": "^1.2.2"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "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==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/resolve": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
+      "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==",
+      "dev": true
+    },
+    "node_modules/resolve-protobuf-schema": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
+      "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
+      "dependencies": {
+        "protocol-buffers-schema": "^3.3.1"
+      }
+    },
+    "node_modules/resumer": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz",
+      "integrity": "sha512-Fn9X8rX8yYF4m81rZCK/5VmrmsSbqS/i3rDLl6ZZHAXgC2nTAx3dhwG8q8odP/RmdLa2YrybDJaAMg+X1ajY3w==",
+      "dev": true,
+      "dependencies": {
+        "through": "~2.3.4"
+      }
+    },
+    "node_modules/resumer/node_modules/through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+      "dev": true
+    },
+    "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/safe-regex-test": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
+      "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "get-intrinsic": "^1.1.3",
+        "is-regex": "^1.1.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/serialize-javascript": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+      "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+      "dev": true,
+      "dependencies": {
+        "randombytes": "^2.1.0"
+      }
+    },
+    "node_modules/side-channel": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.0",
+        "get-intrinsic": "^1.0.2",
+        "object-inspect": "^1.9.0"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/source-map": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz",
+      "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==",
+      "dev": true,
+      "optional": true,
+      "dependencies": {
+        "amdefine": ">=0.0.4"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/sprintf-js": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+      "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
+      "dev": true
+    },
+    "node_modules/stop-iteration-iterator": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
+      "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
+      "dev": true,
+      "dependencies": {
+        "internal-slot": "^1.0.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      }
+    },
+    "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==",
+      "dev": true,
+      "dependencies": {
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/string.prototype.split": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/string.prototype.split/-/string.prototype.split-1.0.7.tgz",
+      "integrity": "sha512-nKEBpIMVowgjlHVshwjhv7Tq6bp3INe+0Ib4XNjTT5RbJwIrF1t5JJ2xWrICohhCuSa6HfSZUU1EJWBFven2+Q==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.20.4",
+        "get-intrinsic": "^1.1.3",
+        "is-regex": "^1.1.4",
+        "regexp.prototype.flags": "^1.4.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/string.prototype.trim": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz",
+      "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.20.4"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/string.prototype.trimend": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
+      "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.20.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/string.prototype.trimstart": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
+      "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "define-properties": "^1.1.4",
+        "es-abstract": "^1.20.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "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==",
+      "dev": true,
+      "dependencies": {
+        "ansi-regex": "^5.0.1"
+      },
+      "engines": {
+        "node": ">=8"
+      }
+    },
+    "node_modules/strip-json-comments": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+      "dev": true,
+      "engines": {
+        "node": ">=8"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    },
+    "node_modules/supports-color": {
+      "version": "3.2.3",
+      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
+      "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
+      "dev": true,
+      "dependencies": {
+        "has-flag": "^1.0.0"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "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==",
+      "dev": true,
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tap-parser": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-0.7.0.tgz",
+      "integrity": "sha512-eg6Vt2kTjxJyjrt1luqrMD6jbOM2W5MCZ53ci6+9K97f/aQFI0R/01l70hTES66fTuqhMkNQQGjZESz+/7wsGA==",
+      "dev": true,
+      "dependencies": {
+        "inherits": "~2.0.1",
+        "minimist": "^0.2.0",
+        "readable-stream": "~1.1.11"
+      },
+      "bin": {
+        "tap-parser": "bin/cmd.js"
+      }
+    },
+    "node_modules/tap-parser/node_modules/isarray": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+      "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+      "dev": true
+    },
+    "node_modules/tap-parser/node_modules/minimist": {
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.2.4.tgz",
+      "integrity": "sha512-Pkrrm8NjyQ8yVt8Am9M+yUt74zE3iokhzbG1bFVNjLB92vwM71hf40RkEsryg98BujhVOncKm/C1xROxZ030LQ==",
+      "dev": true,
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tap-parser/node_modules/readable-stream": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+      "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
+      "dev": true,
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.1",
+        "isarray": "0.0.1",
+        "string_decoder": "~0.10.x"
+      }
+    },
+    "node_modules/tap-parser/node_modules/string_decoder": {
+      "version": "0.10.31",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+      "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
+      "dev": true
+    },
+    "node_modules/tape": {
+      "version": "5.6.3",
+      "resolved": "https://registry.npmjs.org/tape/-/tape-5.6.3.tgz",
+      "integrity": "sha512-cUDDGSbyoSIpdUAqbqLI/r7i/S4BHuCB9M5j7E/LrLs/x/i4zeAJ798aqo+FGo+kr9seBZwr8AkZW6rjceyAMQ==",
+      "dev": true,
+      "dependencies": {
+        "array.prototype.every": "^1.1.4",
+        "call-bind": "^1.0.2",
+        "deep-equal": "^2.2.0",
+        "defined": "^1.0.1",
+        "dotignore": "^0.1.2",
+        "for-each": "^0.3.3",
+        "get-package-type": "^0.1.0",
+        "glob": "^7.2.3",
+        "has": "^1.0.3",
+        "has-dynamic-import": "^2.0.1",
+        "inherits": "^2.0.4",
+        "is-regex": "^1.1.4",
+        "minimist": "^1.2.7",
+        "object-inspect": "^1.12.3",
+        "object-is": "^1.1.5",
+        "object-keys": "^1.1.1",
+        "object.assign": "^4.1.4",
+        "resolve": "^2.0.0-next.4",
+        "resumer": "^0.0.0",
+        "string.prototype.trim": "^1.2.7",
+        "through": "^2.3.8"
+      },
+      "bin": {
+        "tape": "bin/tape"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/tape/node_modules/glob": {
+      "version": "7.2.3",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+      "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+      "dev": true,
+      "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/tape/node_modules/resolve": {
+      "version": "2.0.0-next.4",
+      "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+      "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+      "dev": true,
+      "dependencies": {
+        "is-core-module": "^2.9.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/tape/node_modules/through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+      "dev": true
+    },
+    "node_modules/through": {
+      "version": "2.2.7",
+      "resolved": "https://registry.npmjs.org/through/-/through-2.2.7.tgz",
+      "integrity": "sha512-JIR0m0ybkmTcR8URann+HbwKmodP+OE8UCbsifQDYMLD5J3em1Cdn3MYPpbEd5elGDwmP98T+WbqP/tvzA5Mjg=="
+    },
+    "node_modules/through2": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
+      "integrity": "sha512-mLa8Bn2mZurjyomGKWRu3Bo2mvoQojFks9NvOK8H+k4kDJNkdEqG522KFZsEFBEl6rKkxTgFbE5+OPcgfvPEHA==",
+      "dev": true,
+      "dependencies": {
+        "readable-stream": "~1.1.9",
+        "xtend": "~2.1.1"
+      }
+    },
+    "node_modules/through2/node_modules/isarray": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+      "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+      "dev": true
+    },
+    "node_modules/through2/node_modules/readable-stream": {
+      "version": "1.1.14",
+      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+      "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
+      "dev": true,
+      "dependencies": {
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.1",
+        "isarray": "0.0.1",
+        "string_decoder": "~0.10.x"
+      }
+    },
+    "node_modules/through2/node_modules/string_decoder": {
+      "version": "0.10.31",
+      "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+      "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
+      "dev": true
+    },
+    "node_modules/tiny-inflate": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
+      "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="
+    },
+    "node_modules/tiny-osmpbf": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/tiny-osmpbf/-/tiny-osmpbf-0.1.0.tgz",
+      "integrity": "sha512-Sl0xuDdM0+bnrYPhTAWnQ5eui8+2cpYCnsBxq0EFR1/IgmfB7+FiC23I8aa7tdP4AjaWvBUMK34kfXdY6C1LCQ==",
+      "dependencies": {
+        "pbf": "^3.0.4",
+        "tiny-inflate": "^1.0.2"
+      }
+    },
+    "node_modules/to-regex-range": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+      "dev": true,
+      "dependencies": {
+        "is-number": "^7.0.0"
+      },
+      "engines": {
+        "node": ">=8.0"
+      }
+    },
+    "node_modules/type-check": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+      "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==",
+      "dev": true,
+      "dependencies": {
+        "prelude-ls": "~1.1.2"
+      },
+      "engines": {
+        "node": ">= 0.8.0"
+      }
+    },
+    "node_modules/typed-array-length": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
+      "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "is-typed-array": "^1.1.9"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/typedarray": {
+      "version": "0.0.6",
+      "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+      "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+    },
+    "node_modules/uglify-js": {
+      "version": "3.17.4",
+      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+      "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+      "dev": true,
+      "optional": true,
+      "bin": {
+        "uglifyjs": "bin/uglifyjs"
+      },
+      "engines": {
+        "node": ">=0.8.0"
+      }
+    },
+    "node_modules/unbox-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+      "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+      "dev": true,
+      "dependencies": {
+        "call-bind": "^1.0.2",
+        "has-bigints": "^1.0.2",
+        "has-symbols": "^1.0.3",
+        "which-boxed-primitive": "^1.0.2"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "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/which": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+      "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+      "dev": true,
+      "dependencies": {
+        "isexe": "^2.0.0"
+      },
+      "bin": {
+        "which": "bin/which"
+      }
+    },
+    "node_modules/which-boxed-primitive": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+      "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+      "dev": true,
+      "dependencies": {
+        "is-bigint": "^1.0.1",
+        "is-boolean-object": "^1.1.0",
+        "is-number-object": "^1.0.4",
+        "is-string": "^1.0.5",
+        "is-symbol": "^1.0.3"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/which-collection": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
+      "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
+      "dev": true,
+      "dependencies": {
+        "is-map": "^2.0.1",
+        "is-set": "^2.0.1",
+        "is-weakmap": "^2.0.1",
+        "is-weakset": "^2.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/which-typed-array": {
+      "version": "1.1.9",
+      "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+      "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+      "dev": true,
+      "dependencies": {
+        "available-typed-arrays": "^1.0.5",
+        "call-bind": "^1.0.2",
+        "for-each": "^0.3.3",
+        "gopd": "^1.0.1",
+        "has-tostringtag": "^1.0.0",
+        "is-typed-array": "^1.1.10"
+      },
+      "engines": {
+        "node": ">= 0.4"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/ljharb"
+      }
+    },
+    "node_modules/word-wrap": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+      "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+      "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
+      "dev": true
+    },
+    "node_modules/workerpool": {
+      "version": "6.2.1",
+      "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+      "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
+      "dev": true
+    },
+    "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==",
+      "dev": true,
+      "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/wrappy": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+      "dev": true
+    },
+    "node_modules/xtend": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+      "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==",
+      "dev": true,
+      "dependencies": {
+        "object-keys": "~0.4.0"
+      },
+      "engines": {
+        "node": ">=0.4"
+      }
+    },
+    "node_modules/xtend/node_modules/object-keys": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+      "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==",
+      "dev": 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==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yargs": {
+      "version": "16.2.0",
+      "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+      "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+      "dev": true,
+      "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.4",
+      "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+      "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yargs-unparser": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+      "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+      "dev": true,
+      "dependencies": {
+        "camelcase": "^6.0.0",
+        "decamelize": "^4.0.0",
+        "flat": "^5.0.2",
+        "is-plain-obj": "^2.1.0"
+      },
+      "engines": {
+        "node": ">=10"
+      }
+    },
+    "node_modules/yocto-queue": {
+      "version": "0.1.0",
+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus"
+      }
+    }
+  }
+}
diff --git a/nixpkgs/pkgs/applications/misc/otf2bdf/default.nix b/nixpkgs/pkgs/applications/misc/otf2bdf/default.nix
new file mode 100644
index 000000000000..6653225b7f44
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/otf2bdf/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, freetype
+}:
+
+stdenv.mkDerivation rec {
+  pname = "otf2bdf";
+  version = "3.1";
+
+  # Original site http://sofia.nmsu.edu/~mleisher/Software/otf2bdf/ unreachable,
+  # This is a mirror.
+  src = fetchFromGitHub {
+    owner = "jirutka";
+    repo  = "otf2bdf";
+    rev   = "v${version}";
+    hash  = "sha256-HK9ZrnwKhhYcBvSl+3RwFD7m/WSaPkGKX6utXnk5k+A=";
+  };
+
+  buildInputs = [ freetype ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    install otf2bdf $out/bin
+    cp otf2bdf.man $out/share/man/man1/otf2bdf.1
+  '';
+
+  meta = with lib; {
+    #homepage = "http://sofia.nmsu.edu/~mleisher/Software/otf2bdf/";  # timeout
+    homepage = "https://github.com/jirutka/otf2bdf";
+    description = "OpenType to BDF font converter";
+    license = licenses.mit0;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ hzeller ];
+    mainProgram = "otf2bdf";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/otpclient/default.nix b/nixpkgs/pkgs/applications/misc/otpclient/default.nix
new file mode 100644
index 000000000000..15e2154bdfc0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/otpclient/default.nix
@@ -0,0 +1,61 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, pkg-config
+, gtk3
+, wrapGAppsHook
+, jansson
+, libgcrypt
+, libzip
+, libpng
+, libcotp
+, protobuf
+, protobufc
+, qrencode
+, libsecret
+, libuuid
+, zbar
+}:
+
+stdenv.mkDerivation rec {
+  pname = "otpclient";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "paolostivanin";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-ca0lGlpR9ynaGQPNLoe7/MegXcyRxLltF/65DJC3830=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    jansson
+    libcotp
+    libgcrypt
+    libpng
+    libsecret
+    libuuid
+    libzip
+    protobuf
+    protobufc
+    qrencode
+    zbar
+  ];
+
+  meta = with lib; {
+    description = "Highly secure and easy to use OTP client written in C/GTK that supports both TOTP and HOTP";
+    homepage = "https://github.com/paolostivanin/OTPClient";
+    changelog = "https://github.com/paolostivanin/OTPClient/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ alexbakker ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/overmind/default.nix b/nixpkgs/pkgs/applications/misc/overmind/default.nix
new file mode 100644
index 000000000000..ec1ea90cd47c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/overmind/default.nix
@@ -0,0 +1,28 @@
+{ lib, buildGoModule, fetchFromGitHub, tmux, which, makeWrapper }:
+
+buildGoModule rec {
+  pname = "overmind";
+  version = "2.4.0";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/overmind" --prefix PATH : "${lib.makeBinPath [ tmux which ]}"
+  '';
+
+  src = fetchFromGitHub {
+    owner = "DarthSim";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-cpsTytV1TbvdR7XUKkp4GPD1qyt1qnmY6qOsge01swE=";
+  };
+
+  vendorHash = "sha256-ndgnFBGtVFc++h+EnA37aY9+zNsO5GDrTECA4TEWPN4=";
+
+  meta = with lib; {
+    homepage = "https://github.com/DarthSim/overmind";
+    description = "Process manager for Procfile-based applications and tmux";
+    license = with licenses; [ mit ];
+    maintainers = [ maintainers.adisbladis ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/oversteer/default.nix b/nixpkgs/pkgs/applications/misc/oversteer/default.nix
new file mode 100644
index 000000000000..a7567380c5f0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/oversteer/default.nix
@@ -0,0 +1,77 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, gettext, python3, python3Packages
+, meson, ninja, udev, appstream, appstream-glib, desktop-file-utils, gtk3
+, wrapGAppsHook, gobject-introspection, bash, }:
+let
+  python = python3.withPackages (p:
+    with p; [
+      pygobject3
+      pyudev
+      pyxdg
+      evdev
+      matplotlib
+      scipy
+      gtk3
+      pygobject3
+    ]);
+
+  version = "0.8.1";
+in stdenv.mkDerivation {
+  inherit version;
+
+  pname = "oversteer";
+
+  src = fetchFromGitHub {
+    owner = "berarma";
+    repo = "oversteer";
+    rev = version;
+    sha256 = "sha256-J23fgEDkfZMjVEYHaSPbU9zh5CQFjPmqMsm09VybBv8=";
+  };
+
+  buildInputs = [ bash gtk3 ];
+
+  nativeBuildInputs = [
+    pkg-config
+    gettext
+    python
+    wrapGAppsHook
+    gobject-introspection
+    meson
+    udev
+    ninja
+    appstream
+    appstream-glib
+    desktop-file-utils
+  ];
+
+  dontUseCmakeConfigure = true;
+
+  propagatedBuildInputs = [ python gtk3 python3Packages.pygobject3 ];
+
+  mesonFlags = [
+    "--prefix"
+    (placeholder "out")
+    "-Dudev_rules_dir=${placeholder "out"}/lib/udev/rules.d/"
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}"
+    )
+  '';
+
+  postInstall = ''
+    substituteInPlace $out/lib/udev/rules.d/* \
+      --replace /bin/sh ${bash}/bin/sh
+  '';
+
+  patches = [ ];
+
+  meta = with lib; {
+    homepage = "https://github.com/berarma/oversteer";
+    changelog = "https://github.com/berarma/oversteer/releases/tag/${version}";
+    description = "Steering Wheel Manager for Linux";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.srounce ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/owmods-cli/default.nix b/nixpkgs/pkgs/applications/misc/owmods-cli/default.nix
new file mode 100644
index 000000000000..44a711dfeec1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/owmods-cli/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, nix-update-script
+, fetchFromGitHub
+, rustPlatform
+, pkg-config
+, installShellFiles
+, zstd
+, openssl
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "owmods-cli";
+  version = "0.12.2";
+
+  src = fetchFromGitHub {
+    owner = "ow-mods";
+    repo = "ow-mod-man";
+    rev = "cli_v${version}";
+    hash = "sha256-AfqpLL3cGZLKW5/BE6SaBe4S8GzYM2GKUZU8mFH5uX4=";
+  };
+
+  cargoHash = "sha256-PhdfpiUgeOB13ROgzPBYM+sBLGMP+RtV9j9ebo8PpJU=";
+
+  nativeBuildInputs = [
+    pkg-config
+    installShellFiles
+  ];
+
+  buildInputs = [
+    zstd
+  ] ++ lib.optionals stdenv.isLinux [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    Security
+  ];
+
+  env = {
+    ZSTD_SYS_USE_PKG_CONFIG = true;
+  };
+
+  buildAndTestSubdir = "owmods_cli";
+
+  postInstall = ''
+    cargo xtask dist_cli
+    installManPage man/man*/*
+    installShellCompletion --cmd owmods \
+      dist/cli/completions/owmods.{bash,fish,zsh}
+  '';
+
+  passthru.updateScript = nix-update-script {};
+
+  meta = with lib; {
+    description = "CLI version of the mod manager for Outer Wilds Mod Loader";
+    homepage = "https://github.com/ow-mods/ow-mod-man/tree/main/owmods_cli";
+    downloadPage = "https://github.com/ow-mods/ow-mod-man/releases/tag/cli_v${version}";
+    changelog = "https://github.com/ow-mods/ow-mod-man/releases/tag/cli_v${version}";
+    mainProgram = "owmods";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ locochoco ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/oxker/default.nix b/nixpkgs/pkgs/applications/misc/oxker/default.nix
new file mode 100644
index 000000000000..5952345ec1c7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/oxker/default.nix
@@ -0,0 +1,22 @@
+{ lib, fetchCrate, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "oxker";
+  version = "0.6.1";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-cUM9+6BZcsrb850fm5mFWpo7/JmxwNDh+upHeE7+DU8=";
+  };
+
+  cargoHash = "sha256-sFBI/+7oGjjUyr3PBkkqdgprGdcaYHtOvqFpkrF4Qx8=";
+
+  meta = with lib; {
+    description = "A simple tui to view & control docker containers";
+    homepage = "https://github.com/mrjackwills/oxker";
+    changelog = "https://github.com/mrjackwills/oxker/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ siph ];
+    mainProgram = "oxker";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/p2pool/default.nix b/nixpkgs/pkgs/applications/misc/p2pool/default.nix
new file mode 100644
index 000000000000..9265543ff8f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/p2pool/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, cmake
+, curl
+, fetchFromGitHub
+, gss
+, hwloc
+, lib
+, libsodium
+, libuv
+, nix-update-script
+, openssl
+, pkg-config
+, zeromq
+, darwin
+}:
+
+let
+  inherit (darwin.apple_sdk.frameworks) Foundation;
+in
+stdenv.mkDerivation rec {
+  pname = "p2pool";
+  version = "3.10";
+
+  src = fetchFromGitHub {
+    owner = "SChernykh";
+    repo = "p2pool";
+    rev = "v${version}";
+    sha256 = "sha256-IDOtwrIKzP/pbwqIespvZtNS1VdR3246uXxgxR3V6VI=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libuv zeromq libsodium gss hwloc openssl curl ]
+    ++ lib.optionals stdenv.isDarwin [ Foundation ];
+
+  cmakeFlags = ["-DWITH_LTO=OFF"];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD p2pool $out/bin/p2pool
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Decentralized pool for Monero mining";
+    homepage = "https://github.com/SChernykh/p2pool";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ratsclub ];
+    mainProgram = "p2pool";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pagefind/default.nix b/nixpkgs/pkgs/applications/misc/pagefind/default.nix
new file mode 100644
index 000000000000..35fe84b22729
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pagefind/default.nix
@@ -0,0 +1,111 @@
+{ lib
+, callPackage
+, rustPlatform
+, fetchFromGitHub
+, fetchNpmDeps
+, npmHooks
+, binaryen
+, gzip
+, nodejs
+, rustc
+, wasm-bindgen-cli
+, wasm-pack
+}:
+
+let
+
+  wasm-bindgen-84 = wasm-bindgen-cli.override {
+    version = "0.2.84";
+    hash = "sha256-0rK+Yx4/Jy44Fw5VwJ3tG243ZsyOIBBehYU54XP/JGk=";
+    cargoHash = "sha256-vcpxcRlW1OKoD64owFF6mkxSqmNrvY+y3Ckn5UwEQ50=";
+  };
+
+in
+
+rustPlatform.buildRustPackage rec {
+  pname = "pagefind";
+  version = "1.0.4";
+
+  src = fetchFromGitHub {
+    owner = "cloudcannon";
+    repo = "pagefind";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-IN+l5Wq89tjppE0xCcvczQSkJc1CLymEFeieJhvQQ54=";
+  };
+
+  cargoHash = "sha256-T7DBuqfpqaEmu9iItnFYsJVnEFxG1r9uXEkfqJp1mD8=";
+
+  env.npmDeps_web_js = fetchNpmDeps {
+    name = "npm-deps-web-js";
+    src = "${src}/pagefind_web_js";
+    hash = "sha256-1gdVBCxxLEGFihIxoSSgxw/tMyVgwe7HFG/JjEfYVnQ=";
+  };
+  env.npmDeps_ui_default = fetchNpmDeps {
+    name = "npm-deps-ui-default";
+    src = "${src}/pagefind_ui/default";
+    hash = "sha256-voCs49JneWYE1W9U7aB6G13ypH6JqathVDeF58V57U8=";
+  };
+  env.npmDeps_ui_modular = fetchNpmDeps {
+    name = "npm-deps-ui-modular";
+    src = "${src}/pagefind_ui/modular";
+    hash = "sha256-O0RqZUsRFtByxMQdwNGNcN38Rh+sDqqNo9YlBcrnsF4=";
+  };
+
+  postPatch = ''
+    # Tricky way to run npmConfigHook multiple times
+    (
+      local postPatchHooks=() # written to by npmConfigHook
+      source ${npmHooks.npmConfigHook}/nix-support/setup-hook
+      npmRoot=pagefind_web_js     npmDeps=$npmDeps_web_js     npmConfigHook
+      npmRoot=pagefind_ui/default npmDeps=$npmDeps_ui_default npmConfigHook
+      npmRoot=pagefind_ui/modular npmDeps=$npmDeps_ui_modular npmConfigHook
+    )
+  '';
+
+  nativeBuildInputs = [
+    binaryen
+    gzip
+    nodejs
+    rustc
+    rustc.llvmPackages.lld
+    wasm-bindgen-84
+    wasm-pack
+  ];
+
+  # build wasm and js assets
+  # based on "test-and-build" in https://github.com/CloudCannon/pagefind/blob/main/.github/workflows/release.yml
+  preBuild = ''
+    export HOME=$(mktemp -d)
+    (
+      cd pagefind_web_js
+      npm run build-coupled
+    )
+
+    (
+      cd pagefind_web
+      export RUSTFLAGS="-C linker=lld"
+      bash ./local_build.sh
+    )
+
+    (
+      cd pagefind_ui/default
+      npm run build
+    )
+
+    (
+      cd pagefind_ui/modular
+      npm run build
+    )
+  '';
+
+  buildFeatures = [ "extended" ];
+
+  meta = with lib; {
+    description = "Generate low-bandwidth search index for your static website";
+    homepage = "https://pagefind.app/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pbsds ];
+    platforms = platforms.unix;
+    mainProgram = "pagefind";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pairdrop/default.nix b/nixpkgs/pkgs/applications/misc/pairdrop/default.nix
new file mode 100644
index 000000000000..7715481cffd5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pairdrop/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, buildNpmPackage
+, fetchFromGitHub
+, nodejs
+}:
+
+buildNpmPackage rec {
+  pname = "pairdrop";
+  version = "1.7.6";
+
+  src = fetchFromGitHub {
+    owner = "schlagmichdoch";
+    repo = "PairDrop";
+    rev = "v${version}";
+    hash = "sha256-AOFATOCLf2KigeqoUzIfNngyeDesNrThRzxFvqtsXBs=";
+  };
+
+  npmDepsHash = "sha256-3nKjmC5eizoV/mrKDBhsSlVQxEHyIsWR6KHFwZhBugI=";
+
+  dontNpmBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/lib
+    cp -r * $out/lib
+
+    makeWrapper ${nodejs}/bin/node "$out/bin/pairdrop" --add-flags "index.js public --rate-limit --auto-restart"
+    wrapProgram $out/bin/pairdrop --chdir "$out/lib"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Local file sharing in your browser";
+    longDescription = ''
+      PairDrop is a sublime alternative to AirDrop that works on all platforms.
+      Send images, documents or text via peer to peer connection to devices in the same local network/Wi-Fi or to paired devices.
+    '';
+    homepage = "https://github.com/schlagmichdoch/PairDrop";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ dit7ya ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/parsec/bin.nix b/nixpkgs/pkgs/applications/misc/parsec/bin.nix
new file mode 100644
index 000000000000..602c366c12a4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/parsec/bin.nix
@@ -0,0 +1,124 @@
+{ stdenvNoCC
+, stdenv
+, lib
+, dpkg
+, autoPatchelfHook
+, makeWrapper
+, fetchurl
+, alsa-lib
+, openssl
+, udev
+, libglvnd
+, libX11
+, libXcursor
+, libXi
+, libXrandr
+, libXfixes
+, libpulseaudio
+, libva
+, ffmpeg_5
+, libpng
+, libjpeg8
+, curl
+, vulkan-loader
+, gnome
+, zenity ? gnome.zenity
+}:
+
+stdenvNoCC.mkDerivation {
+  pname = "parsec-bin";
+  version = "150_91a";
+
+  src = fetchurl {
+    url = "https://web.archive.org/web/20231209190803if_/https://builds.parsec.app/package/parsec-linux.deb";
+    sha256 = "sha256-/qugI7k0NYpq7p9l9auD2Pp+SFoFZ9jAZswpreVfgO4=";
+  };
+
+  unpackPhase = ''
+    runHook preUnpack
+
+    dpkg-deb -x $src .
+
+    runHook postUnpack
+  '';
+
+  nativeBuildInputs = [ dpkg autoPatchelfHook makeWrapper ];
+
+  buildInputs = [
+    stdenv.cc.cc # libstdc++
+    libglvnd
+    libX11
+  ];
+
+  runtimeDependenciesPath = lib.makeLibraryPath [
+    stdenv.cc.cc
+    libglvnd
+    openssl
+    udev
+    alsa-lib
+    libpulseaudio
+    libva
+    ffmpeg_5
+    libpng
+    libjpeg8
+    curl
+    libX11
+    libXcursor
+    libXi
+    libXrandr
+    libXfixes
+    vulkan-loader
+  ];
+
+  binPath = lib.makeBinPath [
+    zenity
+  ];
+
+  prepareParsec = ''
+    if [[ ! -e "$HOME/.parsec/appdata.json" ]]; then
+      mkdir -p "$HOME/.parsec"
+      cp --no-preserve=mode,ownership,timestamps ${placeholder "out"}/share/parsec/skel/* "$HOME/.parsec/"
+    fi
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    mv usr/* $out
+
+    wrapProgram $out/bin/parsecd \
+      --prefix PATH : "$binPath" \
+      --prefix LD_LIBRARY_PATH : "$runtimeDependenciesPath" \
+      --run "$prepareParsec"
+
+    substituteInPlace $out/share/applications/parsecd.desktop \
+      --replace "/usr/bin/parsecd" "parsecd" \
+      --replace "/usr/share/icons" "${placeholder "out"}/share/icons"
+
+    runHook postInstall
+  '';
+
+  # Only the main binary needs to be patched, the wrapper script handles
+  # everything else. The libraries in `share/parsec/skel` would otherwise
+  # contain dangling references when copied out of the nix store.
+  dontAutoPatchelf = true;
+
+  fixupPhase = ''
+    runHook preFixup
+
+    autoPatchelf $out/bin
+
+    runHook postFixup
+  '';
+
+  meta = with lib; {
+    homepage = "https://parsec.app/";
+    changelog = "https://parsec.app/changelog";
+    description = "Remote streaming service client";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ arcnmx pabloaul ];
+    platforms = platforms.linux;
+    mainProgram = "parsecd";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pass-secret-service/default.nix b/nixpkgs/pkgs/applications/misc/pass-secret-service/default.nix
new file mode 100644
index 000000000000..1ce8511b27c7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pass-secret-service/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, fetchFromGitHub
+, python3
+, dbus
+, gnupg
+, coreutils
+, nixosTests
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pass-secret-service";
+  # PyPI has old alpha version. Since then the project has switched from using a
+  # seemingly abandoned D-Bus package pydbus and started using maintained
+  # dbus-next. So let's use latest from GitHub.
+  version = "unstable-2022-07-18";
+
+  src = fetchFromGitHub {
+    owner = "mdellweg";
+    repo = "pass_secret_service";
+    rev = "fadc09be718ae1e507eeb8719f3a2ea23edb6d7a";
+    hash = "sha256-lrNU5bkG4/fMu5rDywfiI8vNHyBsMf/fiWIeEHug03c=";
+  };
+
+  # Need to specify session.conf file for tests because it won't be found under
+  # /etc/ in check phase.
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "dbus-run-session" "dbus-run-session --config-file=${dbus}/share/dbus-1/session.conf" \
+      --replace '-p $(relpassstore)' '-p $(PASSWORD_STORE_DIR)' \
+      --replace 'pytest-3' 'pytest'
+
+    substituteInPlace systemd/org.freedesktop.secrets.service \
+      --replace "/bin/false" "${coreutils}/bin/false"
+    substituteInPlace systemd/dbus-org.freedesktop.secrets.service \
+      --replace "/usr/local" "$out"
+  '';
+
+  postInstall = ''
+    mkdir -p "$out/share/dbus-1/services/" "$out/lib/systemd/user/"
+    cp systemd/org.freedesktop.secrets.service "$out/share/dbus-1/services/"
+    cp systemd/dbus-org.freedesktop.secrets.service "$out/lib/systemd/user/"
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    cryptography
+    dbus-next
+    decorator
+    pypass
+    secretstorage
+  ];
+
+  nativeCheckInputs =
+    let
+      ps = python3.pkgs;
+    in
+    [
+      dbus
+      gnupg
+      ps.pytest
+      ps.pytest-asyncio
+      ps.pypass
+    ];
+
+  checkTarget = "test";
+
+  passthru.tests.pass-secret-service = nixosTests.pass-secret-service;
+
+  meta = {
+    description = "Libsecret D-Bus API with pass as the backend";
+    homepage = "https://github.com/mdellweg/pass_secret_service/";
+    license = lib.licenses.gpl3Only;
+    platforms = lib.platforms.all;
+    mainProgram = "pass_secret_service";
+    maintainers = with lib.maintainers; [ jluttine aidalgol ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/passky-desktop/default.nix b/nixpkgs/pkgs/applications/misc/passky-desktop/default.nix
new file mode 100644
index 000000000000..927035ed8167
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/passky-desktop/default.nix
@@ -0,0 +1,70 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, electron_22
+, makeWrapper
+, makeDesktopItem
+, copyDesktopItems
+}:
+
+stdenv.mkDerivation rec {
+  pname = "passky-desktop";
+  version = "8.1.1";
+
+  src = fetchFromGitHub {
+    owner = "Rabbit-Company";
+    repo = "Passky-Desktop";
+    rev = "refs/tags/v${version}";
+    sha256 = "1ma8s1bngjdzclcc4m5pcmavk38sidaskmz7dgfnv84y35si18dr";
+  };
+
+  nativeBuildInputs = [ makeWrapper copyDesktopItems ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/passky
+    cp -r "." "$out/share/passky/electron"
+
+    local resolution
+    for icon in $out/share/passky/electron/images/icons/icon*.png; do
+      resolution=''${icon%".png"}
+      resolution=''${resolution##*/icon-}
+      mkdir -p "$out/share/icons/hicolor/''${resolution}/apps"
+      ln -s "$icon" "$out/share/icons/hicolor/''${resolution}/apps/passky.png"
+    done
+
+    mkdir "$out/share/applications"
+    makeWrapper ${electron_22}/bin/electron "$out/bin/passky" \
+      --add-flags "$out/share/passky/electron/" \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (
+      makeDesktopItem {
+        name = "Passky";
+        type = "Application";
+        desktopName = "passky";
+        comment = "Simple, modern, open source and secure password manager.";
+        icon = "passky";
+        exec = "passky %U";
+        categories = [ "Utility" ];
+        startupWMClass = "Passky";
+      }
+    )
+  ];
+
+  meta = with lib; {
+    description = "A simple, modern, lightweight, open source and secure password manager";
+    homepage = "https://passky.org";
+    downloadPage = "https://github.com/Rabbit-Company/Passky-Desktop/releases";
+    changelog = "https://github.com/Rabbit-Company/Passky-Desktop/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ akkesm ];
+    mainProgram = "passky";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pastel/default.nix b/nixpkgs/pkgs/applications/misc/pastel/default.nix
new file mode 100644
index 000000000000..ba59bc5db42c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pastel/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pastel";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "sharkdp";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-uK4HWC+uGiey+K0p8+Wi+Pi+U7b4k09b8iKF9BmTPcc=";
+  };
+
+  cargoSha256 = "sha256-5paHSrqU8tItD/CAbauj6KcW/mKsveOAfXjD/NUuFAc=";
+
+  buildInputs = lib.optional stdenv.isDarwin Security;
+
+  meta = with lib; {
+    description = "A command-line tool to generate, analyze, convert and manipulate colors";
+    homepage = "https://github.com/sharkdp/pastel";
+    changelog = "https://github.com/sharkdp/pastel/releases/tag/v${version}";
+    license = with licenses; [ asl20 /* or */ mit ];
+    maintainers = with maintainers; [ davidtwco ];
+    mainProgram = "pastel";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pattypan/default.nix b/nixpkgs/pkgs/applications/misc/pattypan/default.nix
new file mode 100644
index 000000000000..aac0da8b4c40
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pattypan/default.nix
@@ -0,0 +1,80 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, ant
+, jdk
+, makeWrapper
+, wrapGAppsHook
+, makeDesktopItem
+, copyDesktopItems
+, canonicalize-jars-hook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "pattypan";
+  version = "22.03";
+
+  src = fetchFromGitHub {
+    owner = "yarl";
+    repo = "pattypan";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-wMQrBg+rEV1W7NgtWFXZr3pAxpyqdbEBKLNwDDGju2I=";
+  };
+
+  nativeBuildInputs = [
+    ant
+    jdk
+    makeWrapper
+    wrapGAppsHook
+    copyDesktopItems
+    canonicalize-jars-hook
+  ];
+
+  dontWrapGApps = true;
+
+  env.JAVA_TOOL_OPTIONS = "-Dfile.encoding=UTF8"; # needed for jdk versions below jdk19
+
+  buildPhase = ''
+    runHook preBuild
+    ant
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm644 pattypan.jar -t $out/share/pattypan
+    install -Dm644 src/pattypan/resources/logo.png $out/share/pixmaps/pattypan.png
+    runHook postInstall
+  '';
+
+  # gappsWrapperArgs is set in preFixup
+  postFixup = ''
+    makeWrapper ${jdk}/bin/java $out/bin/pattypan \
+        ''${gappsWrapperArgs[@]} \
+        --add-flags "-jar $out/share/pattypan/pattypan.jar"
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "pattypan";
+      exec = "pattypan";
+      icon = "pattypan";
+      desktopName = "Pattypan";
+      genericName = "An uploader for Wikimedia Commons";
+      categories = [ "Utility" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "An uploader for Wikimedia Commons";
+    homepage = "https://commons.wikimedia.org/wiki/Commons:Pattypan";
+    license = licenses.mit;
+    mainProgram = "pattypan";
+    maintainers = with maintainers; [ fee1-dead ];
+    platforms = platforms.all;
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode # source bundles dependencies as jars
+    ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/pcmanx-gtk2/default.nix b/nixpkgs/pkgs/applications/misc/pcmanx-gtk2/default.nix
new file mode 100644
index 000000000000..6179bbe15fbf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pcmanx-gtk2/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, gtk2, libXft, intltool, automake, autoconf, libtool, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "pcmanx-gtk2";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "pcman-bbs";
+    repo = "pcmanx";
+    rev = version;
+    sha256 = "0fbwd149wny67rfhczz4cbh713a1qnswjiz7b6c2bxfcwh51f9rc";
+  };
+
+  nativeBuildInputs = [ pkg-config automake autoconf intltool ];
+  buildInputs = [ gtk2 libXft libtool ];
+
+  preConfigure = ''
+    ./autogen.sh
+    # libtoolize generates configure script which uses older version of automake, we need to autoreconf it
+    cd libltdl; autoreconf; cd ..
+  '';
+
+  meta = with lib; {
+    homepage = "https://pcman.ptt.cc";
+    license = licenses.gpl2;
+    description = "Telnet BBS browser with GTK interface";
+    maintainers = [ maintainers.sifmelcara ];
+    platforms = platforms.linux;
+    mainProgram = "pcmanx";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdf-quench/default.nix b/nixpkgs/pkgs/applications/misc/pdf-quench/default.nix
new file mode 100644
index 000000000000..0245fadb171a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdf-quench/default.nix
@@ -0,0 +1,36 @@
+{ lib, fetchFromGitHub, pkgs, python3, wrapGAppsHook, gobject-introspection }:
+
+python3.pkgs.buildPythonApplication {
+  pname = "pdf-quench";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "linuxerwang";
+    repo = "pdf-quench";
+    rev = "b72b3970b371026f9a7ebe6003581e8a63af98f6";
+    sha256 = "1rp9rlwr6rarcsxygv5x2c5psgwl6r69k0lsgribgyyla9cf2m7n";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook gobject-introspection ];
+  buildInputs = with pkgs; [
+    gtk3
+    goocanvas2
+    poppler_gi
+  ];
+  propagatedBuildInputs = with python3.pkgs; [ pygobject3 pypdf2 ];
+
+  format = "other";
+  doCheck = false;
+
+  installPhase = ''
+    install -D -T -m 755 src/pdf_quench.py $out/bin/pdf-quench
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/linuxerwang/pdf-quench";
+    description = "A visual tool for cropping pdf files";
+    platforms = platforms.linux;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ flokli ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfarranger/default.nix b/nixpkgs/pkgs/applications/misc/pdfarranger/default.nix
new file mode 100644
index 000000000000..34077b857415
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfarranger/default.nix
@@ -0,0 +1,59 @@
+{ fetchFromGitHub
+, lib
+, wrapGAppsHook
+, python3Packages
+, gtk3
+, poppler_gi
+, libhandy
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pdfarranger";
+  version = "1.10.1";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "pdfarranger";
+    repo = "pdfarranger";
+    rev = "refs/tags/${version}";
+    hash = "sha256-l//DeaIqUl6FdGFxM8yTKcTjVNvYMllorcoXoK33Iy4=";
+  };
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+  ] ++ (with python3Packages; [
+    setuptools
+  ]);
+
+  buildInputs = [
+    gtk3
+    poppler_gi
+    libhandy
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+    pikepdf
+    img2pdf
+    setuptools
+    python-dateutil
+  ];
+
+  # incompatible with wrapGAppsHook
+  strictDeps = false;
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  doCheck = false; # no tests
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Merge or split pdf documents and rotate, crop and rearrange their pages using an interactive and intuitive graphical interface";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ symphorien ];
+    license = licenses.gpl3Plus;
+    changelog = "https://github.com/pdfarranger/pdfarranger/releases/tag/${version}";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfdiff/default.nix b/nixpkgs/pkgs/applications/misc/pdfdiff/default.nix
new file mode 100644
index 000000000000..c80396840e41
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfdiff/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+, xpdf
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "pdfdiff";
+  version = "0.93";
+
+  src = fetchFromGitHub {
+    owner = "cascremers";
+    repo = "pdfdiff";
+    rev = version;
+    hash = "sha256-NPki/PFm0b71Ksak1mimR4w6J2a0jBCbQDTMQR4uZFI=";
+  };
+
+  format = "other";
+
+  dontConfigure = true;
+  dontBuild = true;
+  doCheck = false;
+
+  postPatch = ''
+    substituteInPlace pdfdiff.py \
+      --replace 'pdftotextProgram = "pdftotext"' 'pdftotextProgram = "${xpdf}/bin/pdftotext"' \
+      --replace 'progName = "pdfdiff.py"' 'progName = "pdfdiff"'
+    '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp pdfdiff.py $out/bin/pdfdiff
+    chmod +x $out/bin/pdfdiff
+    '';
+
+  meta = with lib; {
+    homepage = "https://github.com/cascremers/pdfdiff";
+    description = "Tool to view the difference between two PDF or PS files";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfpc/default.nix b/nixpkgs/pkgs/applications/misc/pdfpc/default.nix
new file mode 100644
index 000000000000..0fa676bdfb4b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfpc/default.nix
@@ -0,0 +1,56 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, vala, gtk3, libgee
+, poppler, libpthreadstubs, gstreamer, gst-plugins-base, gst-plugins-good, gst-libav, gobject-introspection, wrapGAppsHook
+, qrencode, webkitgtk, discount, json-glib, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "pdfpc";
+  version = "4.6.0";
+
+  src = fetchFromGitHub {
+    repo = "pdfpc";
+    owner = "pdfpc";
+    rev = "v${version}";
+    hash = "sha256-5HFmbVsNajMwo+lBe9kJcJyQGe61N6Oy2CI/WJwmSE4=";
+  };
+
+  nativeBuildInputs = [
+    cmake pkg-config vala
+    # For setup hook
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3 libgee poppler
+    libpthreadstubs
+    gstreamer
+    gst-plugins-base
+    (gst-plugins-good.override { gtkSupport = true; })
+    gst-libav
+    qrencode
+    webkitgtk
+    discount
+    json-glib
+  ];
+
+  patches = [
+    # needed for compiling pdfpc 4.6.0 with vala 0.56.7, see
+    # https://github.com/pdfpc/pdfpc/issues/686
+    # https://github.com/pdfpc/pdfpc/pull/687
+    (fetchpatch {
+      url = "https://github.com/pdfpc/pdfpc/commit/d38edfac63bec54173b4b31eae5c7fb46cd8f714.diff";
+      hash = "sha256-KC2oyzcwU2fUmxaed8qAsKcePwR5KcXgpVdstJg8KmU=";
+    })
+  ];
+
+  cmakeFlags = lib.optional stdenv.isDarwin "-DMOVIES=OFF";
+
+  meta = with lib; {
+    description = "A presenter console with multi-monitor support for PDF files";
+    homepage = "https://pdfpc.github.io/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.unix;
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfposter/default.nix b/nixpkgs/pkgs/applications/misc/pdfposter/default.nix
new file mode 100644
index 000000000000..5261fe3dbfe2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfposter/default.nix
@@ -0,0 +1,44 @@
+{ lib, python3, fetchPypi }:
+let
+  localPython = python3.override {
+    self = localPython;
+    packageOverrides = self: super: {
+      # Can be removed once this is merged
+      # https://gitlab.com/pdftools/pdfposter/-/merge_requests/7
+      pypdf2 = super.pypdf2.overridePythonAttrs (oldAttrs: rec {
+        version = "2.11.1";
+        format = "setuptools";
+        src = fetchPypi {
+          pname = "PyPDF2";
+          inherit version;
+          hash = "sha256-PHut1RLCFxHrF4nC6tv5YnkonA+URS7lSoZHO/vv1zI=";
+        };
+      });
+    };
+  };
+in
+with localPython.pkgs; buildPythonApplication rec {
+  pname = "pdfposter";
+  version = "0.8.1";
+  format = "setuptools";
+
+  propagatedBuildInputs = [ pypdf2 ];
+
+  src = fetchPypi {
+    pname = "pdftools.pdfposter";
+    inherit version;
+    hash = "sha256-yWFtHgVKAWs4dRlSk8t8cB2KBJeBOa0Frh3BLR9txS0=";
+  };
+
+  pythonImportsCheck = [
+    "pdftools.pdfposter"
+    "pdftools.pdfposter.cmd"
+  ];
+
+  meta = with lib; {
+    description = "Split large pages of a PDF into smaller ones for poster printing";
+    homepage = "https://pdfposter.readthedocs.io";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ wamserma ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfsam-basic/default.nix b/nixpkgs/pkgs/applications/misc/pdfsam-basic/default.nix
new file mode 100644
index 000000000000..e5d831513f06
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfsam-basic/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, makeDesktopItem, fetchurl, jdk21, wrapGAppsHook, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "pdfsam-basic";
+  version = "5.2.0";
+
+  src = fetchurl {
+    url = "https://github.com/torakiki/pdfsam/releases/download/v${version}/pdfsam_${version}-1_amd64.deb";
+    hash = "sha256-Q1387Su6bmBkXvcrTgWtYZb9z/pKHiOTfUkUNHN8ItY=";
+  };
+
+  unpackPhase = ''
+    ar vx ${src}
+    tar xvf data.tar.gz
+  '';
+
+  nativeBuildInputs = [ wrapGAppsHook ];
+  buildInputs = [ glib ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(--set JAVA_HOME "${jdk21}" --set PDFSAM_JAVA_PATH "${jdk21}")
+  '';
+
+  installPhase = ''
+    cp -R opt/pdfsam-basic/ $out/
+    mkdir -p "$out"/share/icons
+    cp --recursive ${desktopItem}/share/applications $out/share
+    cp $out/icon.svg "$out"/share/icons/pdfsam-basic.svg
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = pname;
+    icon = pname;
+    comment = meta.description;
+    desktopName = "PDFsam Basic";
+    genericName = "PDF Split and Merge";
+    mimeTypes = [ "application/pdf" ];
+    categories = [ "Office" ];
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/torakiki/pdfsam";
+    description = "Multi-platform software designed to extract pages, split, merge, mix and rotate PDF files";
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    license = licenses.agpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ _1000101 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfslicer/default.nix b/nixpkgs/pkgs/applications/misc/pdfslicer/default.nix
new file mode 100644
index 000000000000..ed20f460a167
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfslicer/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, gettext
+, intltool
+, pkg-config
+, wrapGAppsHook
+, gtkmm3
+, libuuid
+, poppler
+, qpdf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pdfslicer";
+  version = "1.8.8";
+
+  src = fetchFromGitHub {
+    owner = "junrrein";
+    repo = "pdfslicer";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "0sja0ddd9c8wjjpzk2ag8q1lxpj09adgmhd7wnsylincqnj2jyls";
+  };
+
+  postPatch = ''
+    # Don't build tests, vendored catch doesn't build with latest glibc.
+    substituteInPlace CMakeLists.txt \
+      --replace "add_subdirectory (tests)" ""
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    gettext
+    intltool
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtkmm3
+    libuuid
+    poppler
+    qpdf
+  ];
+
+  meta = with lib; {
+    description = "A simple application to extract, merge, rotate and reorder pages of PDF documents";
+    homepage = "https://junrrein.github.io/pdfslicer/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfstudio/common.nix b/nixpkgs/pkgs/applications/misc/pdfstudio/common.nix
new file mode 100644
index 000000000000..e7d061123039
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfstudio/common.nix
@@ -0,0 +1,102 @@
+{ pname
+, program
+, src
+, year
+, version
+, desktopName
+, longDescription
+, broken ? false
+, buildFHSEnv
+, extraBuildInputs ? [ ]
+, jdk
+, stdenv
+, lib
+, dpkg
+, makeDesktopItem
+, copyDesktopItems
+, autoPatchelfHook
+, sane-backends
+, cups
+}:
+let
+  thisPackage = stdenv.mkDerivation rec {
+    inherit pname src version;
+    strictDeps = true;
+
+    buildInputs = [
+      sane-backends #for libsane.so.1
+    ] ++ extraBuildInputs;
+
+    nativeBuildInputs = [
+      autoPatchelfHook
+      dpkg
+      copyDesktopItems
+    ];
+
+    desktopItems = [
+      (makeDesktopItem {
+        name = "${pname}";
+        desktopName = desktopName;
+        genericName = "View and edit PDF files";
+        exec = "${pname} %f";
+        icon = "${pname}";
+        comment = "Views and edits PDF files";
+        mimeTypes = [ "application/pdf" ];
+        categories = [ "Office" ];
+      })
+    ];
+
+    unpackCmd = "dpkg-deb -x $src ./${program}-${version}";
+    dontBuild = true;
+
+    postPatch = ''
+      substituteInPlace opt/${program}${year}/${program}${year} --replace "# INSTALL4J_JAVA_HOME_OVERRIDE=" "INSTALL4J_JAVA_HOME_OVERRIDE=${jdk.out}"
+      substituteInPlace opt/${program}${year}/updater --replace "# INSTALL4J_JAVA_HOME_OVERRIDE=" "INSTALL4J_JAVA_HOME_OVERRIDE=${jdk.out}"
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/{bin,share/pixmaps}
+      rm -rf opt/${program}${year}/jre
+      cp -r opt/${program}${year} $out/share/
+      ln -s $out/share/${program}${year}/.install4j/${program}${year}.png  $out/share/pixmaps/${pname}.png
+      ln -s $out/share/${program}${year}/${program}${year} $out/bin/
+
+      runHook postInstall
+    '';
+  };
+
+in
+# Package with cups in FHS sandbox, because JAVA bin expects "/usr/bin/lpr" for printing.
+buildFHSEnv {
+  name = pname;
+  targetPkgs = pkgs: [
+    cups
+    thisPackage
+  ];
+  runScript = "${program}${year}";
+
+  # link desktop item and icon into FHS user environment
+  extraInstallCommands = ''
+    mkdir -p "$out/share/applications"
+    mkdir -p "$out/share/pixmaps"
+    ln -s ${thisPackage}/share/applications/*.desktop "$out/share/applications/"
+    ln -s ${thisPackage}/share/pixmaps/*.png "$out/share/pixmaps/"
+  '';
+
+  meta = with lib; {
+    inherit broken;
+    homepage = "https://www.qoppa.com/${pname}/";
+    description = "An easy to use, full-featured PDF editing software";
+    longDescription = longDescription;
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    mainProgram = pname;
+    maintainers = [ maintainers.pwoelfel ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pdfstudio/default.nix b/nixpkgs/pkgs/applications/misc/pdfstudio/default.nix
new file mode 100644
index 000000000000..21874519a7c7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pdfstudio/default.nix
@@ -0,0 +1,80 @@
+# For upstream versions, download links, and change logs see https://www.qoppa.com/pdfstudio/versions
+#
+# PDF Studio license is for a specific year, so we need different packages for different years.
+# All versions of PDF Studio Viewer are free, so we package only the latest year.
+# Thus, packages are pdfstudioviewer, pdfstudio2021, pdfstudio2022, etc.
+# Variables:
+# - program is either "pdfstudio" or "pdfstudioviewer", defaults to "pdfstudio".
+# - year identifies the year portion of the version, defaults to most recent year.
+# - pname is either "pdfstudio${year}" or "pdfstudioviewer".
+
+{ lib
+, stdenv
+, program ? "pdfstudio"
+, year ? "2023"
+, fetchurl
+, callPackage
+, jdk11
+, jdk17
+}:
+let
+  longDescription = ''
+    PDF Studio is an easy to use, full-featured PDF editing software. This is the standard/pro edition, which requires a license. For the free PDF Studio Viewer see the package pdfstudioviewer.
+  '';
+  pname = if (program == "pdfstudio") then "${program}${year}" else program;
+  desktopName =
+    if (program == "pdfstudio")
+    then "PDF Studio ${year}"
+    else "PDF Studio Viewer";
+  dot2dash = str: builtins.replaceStrings [ "." ] [ "_" ] str;
+in
+{
+  pdfstudioviewer = callPackage ./common.nix rec {
+    inherit desktopName pname program year;
+    version = "${year}.0.3";
+    longDescription = ''
+      PDF Studio Viewer is an easy to use, full-featured PDF editing software. This is the free edition. For the standard/pro edition, see the package pdfstudio.
+    '';
+    src = fetchurl {
+      url = "https://download.qoppa.com/pdfstudioviewer/PDFStudioViewer_linux64.deb";
+      sha256 = "sha256-JQx5yJLjwW4VRXLM+/VNDXFN8ZcHJxlxyKDIzc++hEs=";
+    };
+    jdk = jdk17;
+  };
+
+  pdfstudio2021 = callPackage ./common.nix rec {
+    inherit desktopName longDescription pname program year;
+    version = "${year}.2.2";
+    src = fetchurl {
+      url = "https://download.qoppa.com/pdfstudio/v${year}/PDFStudio_v${dot2dash version}_linux64.deb";
+      sha256 = "sha256-HdkwRMqwquAaW6l3AukGReFtw2f5n36tZ8vXo6QiPvU=";
+    };
+    extraBuildInputs = [
+      (lib.getLib stdenv.cc.cc)  # for libstdc++.so.6 and libgomp.so.1
+    ];
+    jdk = jdk11;
+  };
+
+  pdfstudio2022 = callPackage ./common.nix rec {
+    inherit desktopName longDescription pname program year;
+    version = "${year}.2.5";
+    src = fetchurl {
+      url = "https://download.qoppa.com/pdfstudio/v${year}/PDFStudio_v${dot2dash version}_linux64.deb";
+      sha256 = "sha256-3faZyWUnFe//S+gOskWhsZ6jzHw67FRsv/xP77R1jj4=";
+    };
+    extraBuildInputs = [
+      (lib.getLib stdenv.cc.cc)  # for libstdc++.so.6 and libgomp.so.1
+    ];
+    jdk = jdk17;
+  };
+
+  pdfstudio2023 = callPackage ./common.nix rec {
+    inherit desktopName longDescription pname program year;
+    version = "${year}.0.3";
+    src = fetchurl {
+      url = "https://download.qoppa.com/pdfstudio/v${year}/PDFStudio_v${dot2dash version}_linux64.deb";
+      sha256 = "sha256-Po7BMmEWoC46rP7tUwZT9Ji/Wi8lKc6WN8x47fx2DXg=";
+    };
+    jdk = jdk17;
+  };
+}.${pname}
diff --git a/nixpkgs/pkgs/applications/misc/pe-bear/default.nix b/nixpkgs/pkgs/applications/misc/pe-bear/default.nix
new file mode 100644
index 000000000000..79307f777955
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pe-bear/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, qtbase
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pe-bear";
+  version = "0.6.7.3";
+
+  src = fetchFromGitHub {
+    owner = "hasherezade";
+    repo = "pe-bear";
+    rev = "v${version}";
+    sha256 = "sha256-We3XxSsGL1mTK5DgI2wgRm7OaziI/cZRiLd+qrvZ7SE=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+  ];
+
+  meta = with lib; {
+    description = "Portable Executable reversing tool with a friendly GUI";
+    homepage = "https://hshrzd.wordpress.com/pe-bear/";
+
+    license = [
+      # PE-Bear
+      licenses.gpl2Only
+
+      # Vendored capstone
+      licenses.bsd3
+
+      # Vendored bearparser
+      licenses.bsd2
+    ];
+
+    maintainers = with maintainers; [ blitz ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/peaclock/default.nix b/nixpkgs/pkgs/applications/misc/peaclock/default.nix
new file mode 100644
index 000000000000..866d6660910f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/peaclock/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libpthreadstubs, icu }:
+
+stdenv.mkDerivation rec {
+  pname = "peaclock";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    owner = "octobanana";
+    repo = pname;
+    rev = version;
+    sha256 = "1582vgslhpgbvcd7ipgf1d1razrvgpq1f93q069yr2bbk6xn8i16";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libpthreadstubs icu ];
+
+  meta = with lib; {
+    description = "A clock, timer, and stopwatch for the terminal";
+    homepage = "https://octobanana.com/software/peaclock";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ djanatyn ];
+    mainProgram = "peaclock";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pell/default.nix b/nixpkgs/pkgs/applications/misc/pell/default.nix
new file mode 100644
index 000000000000..1a11a793f563
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pell/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, scsh, sox, libnotify }:
+
+stdenv.mkDerivation rec {
+  pname = "pell";
+  version = "0.0.4";
+
+  src = fetchFromGitHub {
+    owner = "ebzzry";
+    repo = pname;
+    rev = "f251625ece6bb5517227970287119e7d2dfcea8b";
+    sha256 = "0k8m1lv2kyrs8fylxmbgxg3jn65g57frf2bndc82gkr5svwb554a";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/share
+    cp pell $out/bin
+    cp resources/online.mp3 $out/share
+    cp resources/offline.mp3 $out/share
+    chmod +x $out/bin/pell
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/bin/pell --replace "/usr/bin/env scsh" "${scsh}/bin/scsh"
+    substituteInPlace $out/bin/pell --replace "(play " "(${sox}/bin/play "
+    substituteInPlace $out/bin/pell --replace "(notify-send " "(${libnotify}/bin/notify-send "
+    substituteInPlace $out/bin/pell --replace "/usr/share/pell/online.mp3" "$out/share/online.mp3"
+    substituteInPlace $out/bin/pell --replace "/usr/share/pell/offline.mp3" "$out/share/offline.mp3"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ebzzry/pell";
+    description = "A simple host availability monitor";
+    license = licenses.mit;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+    mainProgram = "pell";
+  };
+
+  dontBuild = true;
+}
diff --git a/nixpkgs/pkgs/applications/misc/perkeep/default.nix b/nixpkgs/pkgs/applications/misc/perkeep/default.nix
new file mode 100644
index 000000000000..da67c39ab585
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/perkeep/default.nix
@@ -0,0 +1,60 @@
+{ buildGoModule, fetchurl, fetchFromGitHub, lib }:
+
+let
+  gouiJS = fetchurl {
+    url = "https://storage.googleapis.com/perkeep-release/gopherjs/goui.js";
+    hash = "sha256-z8A5vbkAaXCw/pv9t9sFJ2xNbEOjg4vkr/YBkNptc3U=";
+  };
+
+  publisherJS = fetchurl {
+    url = "https://storage.googleapis.com/perkeep-release/gopherjs/publisher.js";
+    hash = "sha256-4iKMkOEKPCo6Xrq0L5IglVZpB9wyLymCgRYz3cE9DSY=";
+  };
+
+  packages = [
+    "perkeep.org/server/perkeepd"
+    "perkeep.org/cmd/pk"
+    "perkeep.org/cmd/pk-get"
+    "perkeep.org/cmd/pk-put"
+    "perkeep.org/cmd/pk-mount"
+  ];
+
+in
+buildGoModule rec {
+  pname = "perkeep";
+  version = "0.11";
+
+  src = fetchFromGitHub {
+    owner = "perkeep";
+    repo = "perkeep";
+    rev = version;
+    hash = "sha256-lGZb9tH1MrclCRkkmNB85dP/Hl+kkue/WplNMul9RR4=";
+  };
+
+  vendorHash = "sha256-y+AYUG15tsj5SppY2bTg/dh3LPpp+14smCo7nLJRyak=";
+  deleteVendor = true; # Vendor is out of sync with go.mod
+
+  buildPhase = ''
+    cd "$NIX_BUILD_TOP/source"
+
+    # Skip network fetches
+    cp ${publisherJS} app/publisher/publisher.js
+    cp ${gouiJS} server/perkeepd/ui/goui.js
+
+    go run make.go -offline=true -targets=${lib.concatStringsSep "," packages}
+  '';
+
+  # genfileembed gets built regardless of -targets, to embed static
+  # content into the Perkeep binaries. Remove it in post-install to
+  # avoid polluting paths.
+  postInstall = ''
+    rm -f $out/bin/genfileembed
+  '';
+
+  meta = with lib; {
+    description = "A way of storing, syncing, sharing, modelling and backing up content (née Camlistore)";
+    homepage = "https://perkeep.org";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ danderson kalbasit ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pgmanage/default.nix b/nixpkgs/pkgs/applications/misc/pgmanage/default.nix
new file mode 100644
index 000000000000..e3860ee62584
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pgmanage/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, postgresql, openssl, nixosTests } :
+stdenv.mkDerivation rec {
+  pname = "pgmanage";
+  # The last release 11.0.1 from 2018 fails the NixOS test
+  # probably because of PostgreSQL-12 incompatibility.
+  # Fortunately the latest master does succeed the test.
+  version = "unstable-2022-05-11";
+
+  src = fetchFromGitHub {
+    owner  = "pgManage";
+    repo   = "pgManage";
+    rev    = "a028604416be382d6d310bc68b4e7c3cd16020fb";
+    sha256 = "sha256-ibCzZrqfbio1wBVFKB6S/wdRxnCc7s3IQdtI9txxhaM=";
+  };
+
+  patchPhase = ''
+    patchShebangs src/configure
+  '';
+
+  configurePhase = ''
+    ./configure --prefix $out
+  '';
+
+  buildInputs = [ postgresql openssl ];
+
+  passthru.tests.sign-in = nixosTests.pgmanage;
+
+  meta = with lib; {
+    description = "A fast replacement for PGAdmin";
+    longDescription = ''
+      At the heart of pgManage is a modern, fast, event-based C-binary, built in
+      the style of NGINX and Node.js. This heart makes pgManage as fast as any
+      PostgreSQL interface can hope to be. (Note: pgManage replaces Postage,
+      which is no longer maintained.)
+    '';
+    homepage = "https://github.com/pgManage/pgManage";
+    license = licenses.postgresql;
+    maintainers = [ maintainers.basvandijk ];
+    mainProgram = "pgmanage";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pgmodeler/default.nix b/nixpkgs/pkgs/applications/misc/pgmodeler/default.nix
new file mode 100644
index 000000000000..ba12738c2e1c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pgmodeler/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, wrapQtAppsHook
+, pkg-config
+, qmake
+, qtwayland
+, qtsvg
+, postgresql
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pgmodeler";
+  version = "1.0.6";
+
+  src = fetchFromGitHub {
+    owner = "pgmodeler";
+    repo = "pgmodeler";
+    rev = "v${version}";
+    sha256 = "sha256-Km4PWvbIzgc1Kxsp26HYLCA4OkCfOsGWsdWYLmWf/NA=";
+  };
+
+  nativeBuildInputs = [ pkg-config qmake wrapQtAppsHook ];
+  qmakeFlags = [ "pgmodeler.pro" "CONFIG+=release" ];
+
+  # todo: libpq would suffice here. Unfortunately this won't work, if one uses only postgresql.lib here.
+  buildInputs = [ postgresql qtsvg qtwayland ];
+
+  meta = with lib; {
+    description = "A database modeling tool for PostgreSQL";
+    homepage = "https://pgmodeler.io/";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.esclear ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/phoc/default.nix b/nixpkgs/pkgs/applications/misc/phoc/default.nix
new file mode 100644
index 000000000000..9ccc17f95ec6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/phoc/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenv
+, stdenvNoCC
+, fetchurl
+, meson
+, ninja
+, pkg-config
+, python3
+, wrapGAppsHook
+, libinput
+, gnome
+, gnome-desktop
+, glib
+, gtk3
+, wayland
+, libdrm
+, libxkbcommon
+, wlroots
+, xorg
+, directoryListingUpdater
+, nixosTests
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "phoc";
+  version = "0.36.0";
+
+  src = fetchurl {
+    # This tarball includes the meson wrapped subproject 'gmobile'.
+    url = with finalAttrs; "https://sources.phosh.mobi/releases/${pname}/${pname}-${version}.tar.xz";
+    hash = "sha256-eAKHboICsuQ4lecxnnZ8+hZjt5l1DDQbfuwypDYtdKk=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    libdrm.dev
+    libxkbcommon
+    libinput
+    glib
+    gtk3
+    gnome-desktop
+    # For keybindings settings schemas
+    gnome.mutter
+    wayland
+    finalAttrs.wlroots
+    xorg.xcbutilwm
+  ];
+
+  mesonFlags = ["-Dembed-wlroots=disabled"];
+
+  # Patch wlroots to remove a check which crashes Phosh.
+  # This patch can be found within the phoc source tree.
+  wlroots = wlroots.overrideAttrs (old: {
+    patches = (old.patches or []) ++ [
+      (stdenvNoCC.mkDerivation {
+        name = "0001-Revert-layer-shell-error-on-0-dimension-without-anch.patch";
+        inherit (finalAttrs) src;
+        preferLocalBuild = true;
+        allowSubstitutes = false;
+        phases = "unpackPhase installPhase";
+        installPhase = "cp subprojects/packagefiles/wlroots/$name $out";
+      })
+    ];
+  });
+
+  passthru = {
+    tests.phosh = nixosTests.phosh;
+    tests.version = testers.testVersion {
+      package = finalAttrs.finalPackage;
+    };
+    updateScript = directoryListingUpdater { };
+  };
+
+  meta = with lib; {
+    description = "Wayland compositor for mobile phones like the Librem 5";
+    homepage = "https://gitlab.gnome.org/World/Phosh/phoc";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ masipcat tomfitzhenry zhaofengli ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/phockup/default.nix b/nixpkgs/pkgs/applications/misc/phockup/default.nix
new file mode 100644
index 000000000000..8df388e1f64f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/phockup/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, python3, fetchFromGitHub, exiftool, makeWrapper }:
+let
+  pythonEnv = python3.withPackages (p: with p; [ tqdm ]);
+in
+stdenv.mkDerivation rec {
+  pname = "phockup";
+  version = "1.13.0";
+
+  src = fetchFromGitHub {
+    owner = "ivandokov";
+    repo = "phockup";
+    rev = version;
+    sha256 = "sha256-44UjxTbC2XK+NThvesROdd7aGP7zr7g7bQiQZv2TvvM=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    # based roughly on https://github.com/ivandokov/phockup#linux-without-snap
+    mkdir -p $out/bin $out/opt
+    mv * $out/opt
+    makeWrapper ${pythonEnv.interpreter} $out/bin/phockup --add-flags "$out/opt/phockup.py" --suffix PATH : ${lib.makeBinPath [ exiftool ]}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Media sorting tool to organize photos and videos from your camera in folders by year, month and day";
+    homepage = "https://github.com/ivandokov/phockup";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aanderse ];
+    mainProgram = "phockup";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pinfo/default.nix b/nixpkgs/pkgs/applications/misc/pinfo/default.nix
new file mode 100644
index 000000000000..92d892fc9c97
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pinfo/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, autoreconfHook
+, fetchFromGitHub
+, fetchpatch
+, gettext
+, ncurses
+, readline
+, stdenv
+, texinfo
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pinfo";
+  version = "0.6.13";
+
+  src = fetchFromGitHub {
+    owner = "baszoetekouw";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "173d2p22irwiabvr4z6qvr6zpr6ysfkhmadjlyhyiwd7z62larvy";
+  };
+
+  patches = [
+    # Pull upstream fix for -fno-common toolchains
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/baszoetekouw/pinfo/commit/16dba5978146b6d3a540ac7c8f415eda49280847.patch";
+      sha256 = "148fm32chvq8x9ayq9cnhgszh10g5v0cv0xph67fa7sp341p09wy";
+    })
+
+    # Fix pending upstream inclusion for build on ncurses-6.3:
+    #   https://github.com/baszoetekouw/pinfo/pull/27
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/baszoetekouw/pinfo/commit/fc67ceacd81f0c74fcab85447c23a532ae482827.patch";
+      sha256 = "08phmng8vgfqjjazys05acpd5gh110malhw3sx29dg86nsrg2khs";
+    })
+
+    # Fix pending upstream inclusion for build on gcc-11:
+    #   https://github.com/baszoetekouw/pinfo/pull/27
+    (fetchpatch {
+      name = "gcc-11.patch";
+      url = "https://github.com/baszoetekouw/pinfo/commit/ab604fdb67296dad27f3a25f3c9aabdd2fb8c3fa.patch";
+      sha256 = "09g8msgan2x48hxcbm7l6j3av6n8i0bsd4g0vf5xd8bxwzynb13m";
+    })
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    gettext
+    texinfo
+    ncurses
+    readline
+  ];
+
+  configureFlags = [
+    "--with-curses=${ncurses.dev}"
+    "--with-readline=${readline.dev}"
+  ];
+
+  meta = with lib; {
+    description = "A viewer for info files";
+    homepage = "https://github.com/baszoetekouw/pinfo";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ fab ];
+    mainProgram = "pinfo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pipr/default.nix b/nixpkgs/pkgs/applications/misc/pipr/default.nix
new file mode 100644
index 000000000000..2f5ba3e6d9cb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pipr/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+, bubblewrap
+, makeWrapper
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pipr";
+  version = "0.0.16";
+
+  src = fetchFromGitHub {
+    owner = "ElKowar";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-6jtUNhib6iveuZ7qUKK7AllyMKFpZ8OUUaIieFqseY8=";
+  };
+
+  cargoSha256 = "sha256-SLOiX8z8LuQ9VA/lg0lOhqs85MGs0vmeP74cS6sgghI=";
+
+  nativeBuildInputs = [ makeWrapper ];
+  postFixup = ''
+    wrapProgram "$out/bin/pipr" --prefix PATH : ${lib.makeBinPath [ bubblewrap ]}
+  '';
+
+  meta = with lib; {
+    description = "A commandline-tool to interactively write shell pipelines";
+    homepage = "https://github.com/ElKowar/pipr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ elkowar ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/plank/default.nix b/nixpkgs/pkgs/applications/misc/plank/default.nix
new file mode 100644
index 000000000000..1a8f0df5e41c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plank/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv
+, fetchurl
+, vala
+, atk
+, cairo
+, dconf
+, glib
+, gnome
+, gtk3
+, libwnck
+, libX11
+, libXfixes
+, libXi
+, pango
+, gettext
+, pkg-config
+, libxml2
+, bamf
+, gdk-pixbuf
+, libdbusmenu-gtk3
+, file
+, gnome-menus
+, libgee
+, wrapGAppsHook
+, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "plank";
+  version = "0.11.89";
+
+  src = fetchurl {
+    url = "https://launchpad.net/${pname}/1.0/${version}/+download/${pname}-${version}.tar.xz";
+    sha256 = "17cxlmy7n13jp1v8i4abxyx9hylzb39andhz3mk41ggzmrpa8qm6";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gettext
+    gnome.gnome-common
+    libxml2 # xmllint
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    atk
+    bamf
+    cairo
+    gdk-pixbuf
+    glib
+    gnome-menus
+    dconf
+    gtk3
+    libX11
+    libXfixes
+    libXi
+    libdbusmenu-gtk3
+    libgee
+    libwnck
+    pango
+  ];
+
+  # fix paths
+  makeFlags = [
+    "INTROSPECTION_GIRDIR=${placeholder "out"}/share/gir-1.0/"
+    "INTROSPECTION_TYPELIBDIR=${placeholder "out"}/lib/girepository-1.0"
+  ];
+
+  # Make plank's application launcher hidden in Pantheon
+  patches = [
+    ./hide-in-pantheon.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace ./configure \
+      --replace "/usr/bin/file" "${file}/bin/file"
+  '';
+
+  meta = with lib; {
+    description = "Elegant, simple, clean dock";
+    homepage = "https://launchpad.net/plank";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ davidak ] ++ teams.pantheon.members;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/plank/hide-in-pantheon.patch b/nixpkgs/pkgs/applications/misc/plank/hide-in-pantheon.patch
new file mode 100644
index 000000000000..ab8a4c723897
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plank/hide-in-pantheon.patch
@@ -0,0 +1,9 @@
+diff --git a/data/plank.desktop.in b/data/plank.desktop.in
+index 330c3a4..e1bdf5f 100644
+--- a/data/plank.desktop.in
++++ b/data/plank.desktop.in
+@@ -8,3 +8,4 @@ Exec=plank
+ Icon=plank
+ Terminal=false
+ NoDisplay=false
++NotShowIn=Pantheon;
diff --git a/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/cmake.patch b/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/cmake.patch
new file mode 100644
index 000000000000..b33a3e174bc4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/cmake.patch
@@ -0,0 +1,20 @@
+diff -Naur org.kde.plasma.volumewin7mixer/CMakeLists.txt org.kde.plasma.volumewin7mixer.patch/CMakeLists.txt
+--- org.kde.plasma.volumewin7mixer/CMakeLists.txt	1970-01-01 01:00:00.000000000 +0100
++++ org.kde.plasma.volumewin7mixer.patch/CMakeLists.txt	2016-04-19 11:23:35.137866949 +0200
+@@ -0,0 +1,15 @@
++# Set minimum CMake version (required for CMake 3.0 or later)
++cmake_minimum_required(VERSION 2.8.12)
++
++# Use Extra CMake Modules (ECM) for common functionality.
++# See http://api.kde.org/ecm/manual/ecm.7.html
++# and http://api.kde.org/ecm/manual/ecm-kde-modules.7.html
++find_package(ECM REQUIRED NO_MODULE)
++# Needed by find_package(KF5Plasma) below.
++set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_MODULE_PATH})
++
++# Locate plasma_install_package macro.
++find_package(KF5Plasma REQUIRED)
++
++# Add installatation target ("make install").
++plasma_install_package(package org.kde.plasma.volumewin7mixer)
+
diff --git a/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/default.nix b/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/default.nix
new file mode 100644
index 000000000000..e8bc572e284f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plasma-applet-volumewin7mixer/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, cmake, extra-cmake-modules, plasma-framework, kwindowsystem, plasma-pa, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "plasma-applet-volumewin7mixer";
+  version = "26";
+
+  src = fetchFromGitHub {
+    owner = "Zren";
+    repo = "plasma-applet-volumewin7mixer";
+    rev = "v${version}";
+    sha256 = "sha256-VMOUNtAURTHDuJBOGz2N0+3VzxBmVNC1O8dVuyUZAa4=";
+  };
+
+  # Adds the CMakeLists.txt not provided by upstream
+  patches = [ ./cmake.patch ];
+  postPatch = "rm build";
+  nativeBuildInputs = [ cmake extra-cmake-modules ];
+  buildInputs = [ plasma-framework kwindowsystem plasma-pa ];
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    description = "A fork of the default volume plasmoid with a Windows 7 theme (vertical sliders)";
+    homepage = "https://github.com/Zren/plasma-applet-volumewin7mixer";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ mdevlamynck ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/plasma-theme-switcher/default.nix b/nixpkgs/pkgs/applications/misc/plasma-theme-switcher/default.nix
new file mode 100644
index 000000000000..f2af3f6e43ab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plasma-theme-switcher/default.nix
@@ -0,0 +1,43 @@
+{
+  stdenv, lib, cmake, extra-cmake-modules, fetchFromGitHub, qtbase, kdeFrameworks
+}:
+
+stdenv.mkDerivation rec {
+  pname = "plasma-theme-switcher";
+  version = "0.1";
+  dontWrapQtApps = true;
+
+  src = fetchFromGitHub {
+    owner = "maldoinc";
+    repo = "plasma-theme-switcher";
+    rev = "v${version}";
+    sha256 = "sdcJ6K5QmglJEDIEl4sd8x7DuCPCqMHRxdYbcToM46Q=";
+  };
+
+  buildInputs = [
+    qtbase
+    kdeFrameworks.plasma-framework
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp plasma-theme $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/maldoinc/plasma-theme-switcher/";
+    description = "A KDE Plasma theme switcher";
+    license = with licenses; [ gpl2Only ];
+    maintainers = with maintainers; [ kevink ];
+    mainProgram = "plasma-theme";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/plater/default.nix b/nixpkgs/pkgs/applications/misc/plater/default.nix
new file mode 100644
index 000000000000..e2e1906926a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plater/default.nix
@@ -0,0 +1,47 @@
+{ mkDerivation
+, cmake
+, fetchFromGitHub
+, lib
+, libGLU
+, makeDesktopItem
+, qtbase
+, wrapQtAppsHook
+}:
+
+mkDerivation rec {
+  pname = "plater";
+  version = "2020-07-30";
+
+  src = fetchFromGitHub {
+    owner = "Rhoban";
+    repo = "Plater";
+    rev = "f8de6d038f95a9edebfcfe142c8e9783697d5b47";
+    sha256 = "0r20mbzd16zv1aiadjqdy7z6sp09rr6lgfxhvir4ll3cpakkynr4";
+  };
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+  buildInputs = [ libGLU qtbase ];
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = pname;
+    icon = pname;
+    desktopName = "Ideamaker";
+    genericName = meta.description;
+    categories = ["Utility" "Engineering"];
+  };
+
+  postInstall = ''
+    mkdir -p $out/share/pixmaps
+    ln -s ${desktopItem}/share/applications $out/share/
+    cp $src/gui/img/plater.png $out/share/pixmaps/${pname}.png
+  '';
+
+  meta = with lib; {
+    description = "3D-printer parts placer and plate generator";
+    homepage = "https://github.com/Rhoban/Plater";
+    maintainers = with maintainers; [ lovesegfault ];
+    platforms = platforms.linux;
+    license = licenses.cc-by-nc-30;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/playonlinux/0001-fix-locale.patch b/nixpkgs/pkgs/applications/misc/playonlinux/0001-fix-locale.patch
new file mode 100644
index 000000000000..2ae1a17ca8b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/playonlinux/0001-fix-locale.patch
@@ -0,0 +1,17 @@
+diff --git a/python/lib/lng.py b/python/lib/lng.py
+index a390d920..00c3527e 100755
+--- a/python/lib/lng.py
++++ b/python/lib/lng.py
+@@ -12,11 +12,7 @@ class Lang(object):
+ 
+ class iLang(object):
+     def __init__(self):
+-        if(os.environ["DEBIAN_PACKAGE"] == "TRUE"):
+-            languages = os.listdir('/usr/share/locale')
+-        else:
+-            languages = os.listdir(Variables.playonlinux_env+'/lang/locale')
+-
++        languages = os.listdir('@out@/share/playonlinux/lang/locale')
+         if(os.environ["POL_OS"] == "Mac"):
+             wxLocale = wx.Locale().FindLanguageInfo(os.environ["RLANG"])
+ 
diff --git a/nixpkgs/pkgs/applications/misc/playonlinux/default.nix b/nixpkgs/pkgs/applications/misc/playonlinux/default.nix
new file mode 100644
index 000000000000..0b4f445c0066
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/playonlinux/default.nix
@@ -0,0 +1,151 @@
+{ lib, stdenv
+, makeWrapper
+, fetchurl
+, cabextract
+, gettext
+, glxinfo
+, gnupg
+, icoutils
+, imagemagick
+, netcat-gnu
+, p7zip
+, python3
+, unzip
+, wget
+, wine
+, xdg-user-dirs
+, xterm
+, pkgs
+, pkgsi686Linux
+, which
+, curl
+, jq
+, xorg
+, libGL
+, steam-run
+# needed for avoiding crash on file selector
+, gsettings-desktop-schemas
+, glib
+, wrapGAppsHook
+, hicolor-icon-theme
+}:
+
+let
+  version = "4.4";
+
+  binpath = lib.makeBinPath [
+    cabextract
+    python
+    gettext
+    glxinfo
+    gnupg
+    icoutils
+    imagemagick
+    netcat-gnu
+    p7zip
+    unzip
+    wget
+    wine
+    xdg-user-dirs
+    xterm
+    which
+    curl
+    jq
+  ];
+
+  ld32 =
+    if stdenv.hostPlatform.system == "x86_64-linux" then "${stdenv.cc}/nix-support/dynamic-linker-m32"
+    else if stdenv.hostPlatform.system == "i686-linux" then "${stdenv.cc}/nix-support/dynamic-linker"
+    else throw "Unsupported platform for PlayOnLinux: ${stdenv.hostPlatform.system}";
+  ld64 = "${stdenv.cc}/nix-support/dynamic-linker";
+  libs = pkgs: lib.makeLibraryPath [ xorg.libX11 libGL ];
+
+  python = python3.withPackages(ps: with ps; [
+    wxpython
+    setuptools
+    natsort
+  ]);
+
+in stdenv.mkDerivation {
+  pname = "playonlinux";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://www.playonlinux.com/script_files/PlayOnLinux/${version}/PlayOnLinux_${version}.tar.gz";
+    sha256 = "0n40927c8cnjackfns68zwl7h4d7dvhf7cyqdkazzwwx4k2xxvma";
+  };
+
+  patches = [
+    ./0001-fix-locale.patch
+  ];
+
+  nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
+
+  preBuild = ''
+    makeFlagsArray+=(PYTHON="python -m py_compile")
+  '';
+
+  buildInputs = [
+    glib
+    xorg.libX11
+    libGL
+    python
+    gsettings-desktop-schemas
+    hicolor-icon-theme
+  ];
+
+  postPatch = ''
+    substituteAllInPlace python/lib/lng.py
+    patchShebangs python tests/python
+    sed -i "s/ %F//g" etc/PlayOnLinux.desktop
+  '';
+
+  installPhase = ''
+    install -d $out/share/playonlinux
+    cp -r . $out/share/playonlinux/
+
+    install -D -m644 etc/PlayOnLinux.desktop $out/share/applications/playonlinux.desktop
+
+    makeWrapper $out/share/playonlinux/playonlinux{,-wrapper} \
+      --prefix PATH : ${binpath} \
+      --prefix XDG_DATA_DIRS : ${gsettings-desktop-schemas}/share/GConf
+    # steam-run is needed to run the downloaded wine executables
+    mkdir -p $out/bin
+    cat > $out/bin/playonlinux <<EOF
+    #!${stdenv.shell} -e
+    exec ${steam-run}/bin/steam-run $out/share/playonlinux/playonlinux-wrapper "\$@"
+    EOF
+    chmod a+x $out/bin/playonlinux
+
+    bunzip2 $out/share/playonlinux/bin/check_dd_x86.bz2
+    patchelf --set-interpreter $(cat ${ld32}) --set-rpath ${libs pkgsi686Linux} $out/share/playonlinux/bin/check_dd_x86
+    ${if stdenv.hostPlatform.system == "x86_64-linux" then ''
+      bunzip2 $out/share/playonlinux/bin/check_dd_amd64.bz2
+      patchelf --set-interpreter $(cat ${ld64}) --set-rpath ${libs pkgs} $out/share/playonlinux/bin/check_dd_amd64
+    '' else ''
+      rm $out/share/playonlinux/bin/check_dd_amd64.bz2
+    ''}
+    for f in $out/share/playonlinux/bin/*; do
+      bzip2 $f
+    done
+  '';
+
+  dontWrapGApps = true;
+  postFixup = ''
+    makeWrapper $out/share/playonlinux/playonlinux{,-wrapped} \
+      --prefix PATH : ${binpath} \
+      ''${gappsWrapperArgs[@]}
+    makeWrapper ${steam-run}/bin/steam-run $out/bin/playonlinux \
+      --add-flags $out/share/playonlinux/playonlinux-wrapped
+  '';
+
+  meta = with lib; {
+    description = "GUI for managing Windows programs under linux";
+    homepage = "https://www.playonlinux.com/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl3;
+    maintainers = [ maintainers.pasqui23 ];
+    platforms = [ "x86_64-linux" "i686-linux" ];
+    mainProgram = "playonlinux";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/please-cli/default.nix b/nixpkgs/pkgs/applications/misc/please-cli/default.nix
new file mode 100644
index 000000000000..f21ef4203831
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/please-cli/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, curl
+, fetchFromGitHub
+, jq
+, makeBinaryWrapper
+, please-cli
+, stdenv
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "please-cli";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "TNG";
+    repo = "please-cli";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-rJIR4eMhXL4K9iO7JxnkgWNsICV3hPQb0aobWNuHAG0=";
+  };
+
+  nativeBuildInputs = [ makeBinaryWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm555 please.sh "$out/bin/please"
+    wrapProgram $out/bin/please \
+      --prefix PATH : ${lib.makeBinPath [ curl jq ]}
+    runHook postInstall
+  '';
+
+  passthru.tests = testers.testVersion {
+    package = please-cli;
+    version = "v${finalAttrs.version}";
+  };
+
+  meta = with lib; {
+    description = "An AI helper script to create CLI commands based on GPT prompts";
+    homepage = "https://github.com/TNG/please-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ _8-bit-fox ];
+    mainProgram = "please";
+    platforms = platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/plots/default.nix b/nixpkgs/pkgs/applications/misc/plots/default.nix
new file mode 100644
index 000000000000..4e6b9d24a56b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plots/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, python3Packages
+, gobject-introspection
+, libadwaita
+, wrapGAppsHook
+, lmmath
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "plots";
+  version = "0.8.5";
+
+  src = fetchFromGitHub {
+    owner = "alexhuntley";
+    repo = "Plots";
+    rev = "v${version}";
+    hash = "sha256-GjNpaorxkkhZsqrKq4kO5nqF5+4I4tmSc023AZpY8Sw=";
+  };
+
+  nativeBuildInputs = [ gobject-introspection wrapGAppsHook ];
+  buildInputs = [ libadwaita ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+    numpy
+    lark
+    jinja2
+    freetype-py
+    pyopengl
+    pycairo
+    pyglm
+  ];
+
+  nativeCheckInputs = with python3Packages; [ pytest ];
+
+  postInstall = ''
+    install -D ${lmmath}/share/fonts/opentype/latinmodern-math.otf -t $out/share/fonts/
+
+    install -D res/com.github.alexhuntley.Plots.metainfo.xml -t $out/share/metainfo/
+    install -D res/com.github.alexhuntley.Plots.desktop -t $out/share/applications/
+    install -D res/com.github.alexhuntley.Plots.svg -t $out/share/icons/hicolor/scalable/apps/
+    install -D res/com.github.alexhuntley.Plots-symbolic.svg -t $out/share/icons/hicolor/symbolic/apps/
+
+    for lang_dir in help/*; do
+      lang=$(basename "$lang_dir")
+      install -D -t $out/share/help/$lang/plots/ $lang_dir/*
+    done
+  '';
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Graph plotting app for GNOME";
+    longDescription = ''
+      Plots is a graph plotting app for GNOME.
+      Plots makes it easy to visualise mathematical formulae.
+      In addition to basic arithmetic operations, it supports trigonometric, hyperbolic, exponential and logarithmic functions, as well as arbitrary sums and products.
+      It can display polar equations, and both implicit and explicit Cartesian equations.
+    '';
+    homepage = "https://github.com/alexhuntley/Plots";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ sund3RRR ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/plover/default.nix b/nixpkgs/pkgs/applications/misc/plover/default.nix
new file mode 100644
index 000000000000..3f4e82d2e4d9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/plover/default.nix
@@ -0,0 +1,37 @@
+{ lib, fetchFromGitHub, python3Packages, wmctrl, qtbase, mkDerivationWith }:
+
+{
+  stable = throw "plover.stable was removed because it used Python 2. Use plover.dev instead."; # added 2022-06-05
+
+  dev = with python3Packages; mkDerivationWith buildPythonPackage rec {
+    pname = "plover";
+    version = "4.0.0.dev10";
+
+    meta = with lib; {
+      broken = stdenv.isDarwin;
+      description = "OpenSteno Plover stenography software";
+      maintainers = with maintainers; [ twey kovirobi ];
+      license     = licenses.gpl2;
+    };
+
+    src = fetchFromGitHub {
+      owner = "openstenoproject";
+      repo = "plover";
+      rev = "v${version}";
+      sha256 = "sha256-oJ7+R3ZWhUbNTTAw1AfMg2ur8vW1XEbsa5FgSTam1Ns=";
+    };
+
+    # I'm not sure why we don't find PyQt5 here but there's a similar
+    # sed on many of the platforms Plover builds for
+    postPatch = "sed -i /PyQt5/d setup.cfg";
+
+    nativeCheckInputs           = [ pytest mock ];
+    propagatedBuildInputs = [ babel pyqt5 xlib pyserial appdirs wcwidth setuptools ];
+
+    dontWrapQtApps = true;
+
+    preFixup = ''
+      makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pokemon-colorscripts-mac/default.nix b/nixpkgs/pkgs/applications/misc/pokemon-colorscripts-mac/default.nix
new file mode 100644
index 000000000000..5205e8ad6eaf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pokemon-colorscripts-mac/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, coreutils
+, fetchFromGitHub
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pokemon-colorscripts-mac";
+  version = "stable-2021-08-10";
+
+  src = fetchFromGitHub {
+    owner = "nuke-dash";
+    repo = "${pname}";
+    rev = "6aa0cd93b255bee35c5716652b8b7dfecb5fcfa2";
+    sha256 = "06b86qy2fpzdd81n2mscc2njkrxx0dyzxpgnm1xk6ldn17c853lc";
+  };
+
+  buildInputs = [ coreutils ];
+
+  preBuild = ''
+    patchShebangs ./install.sh
+
+    # Fix hardcoded prefixed coreutils
+    substituteInPlace pokemon-colorscripts.sh --replace greadlink readlink
+    substituteInPlace pokemon-colorscripts.sh --replace gshuf shuf
+
+    substituteInPlace install.sh --replace /usr/local $out
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/opt
+    mkdir -p $out/bin
+    ./install.sh
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Pokémon colorscripts for the terminal, compatible for mac";
+    longDescription = ''
+      Show colored sprites of pokémons in your terminal.
+      Contains almost 900 pokemon from gen 1 to gen 8.
+      Inspired by DT's colorscripts.
+    '';
+    homepage = "https://github.com/nuke-dash/pokemon-colorscripts-mac";
+    license = licenses.mit;
+    maintainers = [ maintainers.wesleyjrz ];
+    platforms = platforms.unix;
+    mainProgram = "pokemon-colorscripts";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/polar-bookshelf/default.nix b/nixpkgs/pkgs/applications/misc/polar-bookshelf/default.nix
new file mode 100644
index 000000000000..ad731c1050c9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/polar-bookshelf/default.nix
@@ -0,0 +1,131 @@
+{ stdenv
+, lib
+, makeWrapper
+, fetchurl
+, dpkg
+, wrapGAppsHook
+, autoPatchelfHook
+, gtk3
+, cairo
+, pango
+, atk
+, gdk-pixbuf
+, glib
+, at-spi2-atk
+, dbus
+, libX11
+, libxcb
+, libXi
+, libXcursor
+, libXdamage
+, libXrandr
+, libXcomposite
+, libXext
+, libXfixes
+, libXrender
+, libXtst
+, libXScrnSaver
+, nss
+, nspr
+, alsa-lib
+, cups
+, fontconfig
+, expat
+, libudev0-shim
+, glibc
+, curl
+, openssl
+, libnghttp2
+, gsettings-desktop-schemas
+, libdrm
+, mesa
+}:
+
+
+stdenv.mkDerivation rec {
+  pname = "polar-bookshelf";
+  version = "2.0.103";
+
+  # fetching a .deb because there's no easy way to package this Electron app
+  src = fetchurl {
+    url = "https://github.com/burtonator/polar-bookshelf/releases/download/v${version}/polar-desktop-app-${version}-amd64.deb";
+    hash = "sha256-jcq0hW698bAhVM3fLQQeKAnld33XLkHsGjS3QwUpciQ=";
+  };
+
+  buildInputs = [
+    libdrm
+    mesa
+    gsettings-desktop-schemas
+    glib
+    gtk3
+    cairo
+    pango
+    atk
+    gdk-pixbuf
+    at-spi2-atk
+    dbus
+    libX11
+    libxcb
+    libXi
+    libXcursor
+    libXdamage
+    libXrandr
+    libXcomposite
+    libXext
+    libXfixes
+    libXrender
+    libXtst
+    libXScrnSaver
+    nss
+    nspr
+    alsa-lib
+    cups
+    fontconfig
+    expat
+  ];
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    autoPatchelfHook
+    makeWrapper
+    dpkg
+  ];
+
+  runtimeLibs = lib.makeLibraryPath [ libudev0-shim glibc curl openssl libnghttp2 ];
+
+  unpackPhase = "dpkg-deb -x $src .";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/polar-bookshelf
+    mkdir -p $out/bin
+    mkdir -p $out/lib
+
+    mv opt/Polar/* $out/share/polar-bookshelf
+    mv $out/share/polar-bookshelf/*.so $out/lib
+
+    mv usr/share/* $out/share/
+
+    ln -s $out/share/polar-bookshelf/polar-desktop-app $out/bin/polar-desktop-app
+
+    substituteInPlace $out/share/applications/polar-desktop-app.desktop \
+      --replace "/opt/Polar/polar-desktop-app" "$out/bin/polar-desktop-app"
+
+    runHook postInstall
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${runtimeLibs}" )
+  '';
+
+  meta = {
+    homepage = "https://getpolarized.io/";
+    description = "Personal knowledge repository for PDF and web content supporting incremental reading and document annotation";
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+    license = lib.licenses.gpl3Only;
+    platforms = lib.platforms.linux;
+    maintainers = [ ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/polar-bookshelf1/default.nix b/nixpkgs/pkgs/applications/misc/polar-bookshelf1/default.nix
new file mode 100644
index 000000000000..41b7fb786abd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/polar-bookshelf1/default.nix
@@ -0,0 +1,117 @@
+{ lib
+, stdenv
+, fetchurl
+, alsa-lib
+, at-spi2-atk
+, atk
+, autoPatchelfHook
+, cairo
+, cups
+, curl
+, dbus
+, dpkg
+, expat
+, fontconfig
+, gdk-pixbuf
+, glib
+, glibc
+, gsettings-desktop-schemas
+, gtk3
+, libX11
+, libXScrnSaver
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXrandr
+, libXrender
+, libXtst
+, libnghttp2
+, libudev0-shim
+, libxcb
+, makeWrapper
+, nspr
+, nss
+, openssl
+, pango
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "polar-bookshelf1";
+  version = "1.100.14";
+
+  src = fetchurl {
+    url = "https://github.com/burtonator/polar-bookshelf/releases/download/v${version}/polar-bookshelf-${version}-amd64.deb";
+    hash = "sha256-5xa+Nwu0p1x5DLn1GNI0HDt7GtBGoFQ/9qGTeq9uBgU=";
+  };
+
+  buildInputs = [
+    alsa-lib
+    at-spi2-atk
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    gdk-pixbuf
+    glib
+    gsettings-desktop-schemas
+    gtk3
+    libX11
+    libXScrnSaver
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    libxcb
+    nspr
+    nss
+    pango
+  ];
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    makeWrapper
+    wrapGAppsHook
+  ];
+
+  runtimeLibs = lib.makeLibraryPath [ libudev0-shim glibc curl openssl libnghttp2 ];
+
+  unpackPhase = ''
+    dpkg-deb -x $src .
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/polar-bookshelf $out/bin $out/lib
+    mv opt/Polar\ Bookshelf/* $out/share/polar-bookshelf
+    mv $out/share/polar-bookshelf/*.so $out/lib
+    mv usr/share/* $out/share/
+    ln -s $out/share/polar-bookshelf/polar-bookshelf $out/bin/polar-bookshelf
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : "${runtimeLibs}" )
+    # Correct desktop file `Exec`
+    substituteInPlace $out/share/applications/polar-bookshelf.desktop \
+      --replace "/opt/Polar Bookshelf/polar-bookshelf" "$out/bin/polar-bookshelf"
+  '';
+
+  meta = {
+    homepage = "https://getpolarized.io/";
+    description = "Personal knowledge repository for PDF and web content supporting incremental reading and document annotation";
+    license = lib.licenses.gpl3Only;
+    maintainers = [ lib.maintainers.dansbandit ];
+    platforms = lib.platforms.linux;
+    sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/polychromatic/default.nix b/nixpkgs/pkgs/applications/misc/polychromatic/default.nix
new file mode 100644
index 000000000000..f940f5a4af80
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/polychromatic/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, fetchFromGitHub
+, bash
+, glib
+, gdk-pixbuf
+, gettext
+, imagemagick
+, ninja
+, meson
+, sassc
+, python3Packages
+, gobject-introspection
+, wrapGAppsHook
+, libappindicator-gtk3
+, libxcb
+, qt5
+, ibus
+, usbutils
+}:
+
+python3Packages.buildPythonApplication rec {
+  name = "polychromatic";
+  version = "0.8.0";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "polychromatic";
+    repo = "polychromatic";
+    rev = "v${version}";
+    sha256 = "sha256-ym2pcGUWM5zCUx/lYs+WECj+wbyBtWnx04W/NRXNKlw=";
+  };
+
+  postPatch = ''
+    patchShebangs scripts
+    substituteInPlace scripts/build-styles.sh \
+      --replace '$(which sassc 2>/dev/null)' '${sassc}/bin/sassc' \
+      --replace '$(which sass 2>/dev/null)' '${sassc}/bin/sass'
+    substituteInPlace polychromatic/paths.py \
+      --replace "/usr/share/polychromatic" "$out/share/polychromatic"
+  '';
+
+  preConfigure = ''
+    scripts/build-styles.sh
+  '';
+  nativeBuildInputs = with python3Packages; [
+    gettext
+    gobject-introspection
+    meson
+    ninja
+    sassc
+    wrapGAppsHook
+    qt5.wrapQtAppsHook
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    colorama
+    colour
+    openrazer
+    pyqt5
+    pyqtwebengine
+    requests
+    setproctitle
+    libxcb
+    openrazer-daemon
+    libappindicator-gtk3
+    ibus
+    usbutils
+  ];
+
+  dontWrapGapps = true;
+  dontWrapQtApps = true;
+
+  makeWrapperArgs = [
+    "\${gappsWrapperArgs[@]}"
+    "\${qtWrapperArgs[@]}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://polychromatic.app/";
+    description = "Graphical front-end and tray applet for configuring Razer peripherals on GNU/Linux.";
+    longDescription = ''
+      Polychromatic is a frontend for OpenRazer that enables Razer devices
+      to control lighting effects and more on GNU/Linux.
+    '';
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ evanjs ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pomodoro/default.nix b/nixpkgs/pkgs/applications/misc/pomodoro/default.nix
new file mode 100644
index 000000000000..fe09f5328ee8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pomodoro/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Foundation }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pomodoro";
+  version = "unstable-2021-06-18";
+
+  src = fetchFromGitHub {
+    owner = "SanderJSA";
+    repo = "Pomodoro";
+    rev = "c833b9551ed0b09e311cdb369cc8226c5b9cac6a";
+    sha256 = "sha256-ZA1q1YVJcdSUF9NTikyT3vrRnqbsu5plzRI2gMu+qnQ=";
+  };
+
+  cargoSha256 = "sha256-6ZhWStZebXSwrej36DXifrsrmR1SWW3PwGUX0hqPwE4=";
+  buildInputs = lib.optionals stdenv.isDarwin [ Foundation ];
+
+  meta = with lib; {
+    description = "A simple CLI pomodoro timer using desktop notifications written in Rust";
+    homepage = "https://github.com/SanderJSA/Pomodoro";
+    license = licenses.mit;
+    maintainers = with maintainers; [ annaaurora ];
+    # error: redefinition of module 'ObjectiveC'
+    broken = stdenv.isDarwin;
+    mainProgram = "pomodoro";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pop-launcher/default.nix b/nixpkgs/pkgs/applications/misc/pop-launcher/default.nix
new file mode 100644
index 000000000000..b8ba5133904b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pop-launcher/default.nix
@@ -0,0 +1,62 @@
+{ rustPlatform
+, fetchFromGitHub
+, lib
+, fd
+, libqalculate
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pop-launcher";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    owner = "pop-os";
+    repo = "launcher";
+    rev = version;
+    sha256 = "sha256-BQAO9IodZxGgV8iBmUaOF0yDbAMVDFslKCqlh3pBnb0=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/lib.rs \
+        --replace '/usr/lib/pop-launcher' "$out/share/pop-launcher"
+    substituteInPlace plugins/src/scripts/mod.rs \
+        --replace '/usr/lib/pop-launcher' "$out/share/pop-launcher"
+    substituteInPlace plugins/src/calc/mod.rs \
+        --replace 'Command::new("qalc")' 'Command::new("${libqalculate}/bin/qalc")'
+    substituteInPlace plugins/src/find/mod.rs \
+        --replace 'spawn("fd")' 'spawn("${fd}/bin/fd")'
+    substituteInPlace plugins/src/terminal/mod.rs \
+        --replace '/usr/bin/gnome-terminal' 'gnome-terminal'
+  '';
+
+  cargoSha256 = "sha256-cTvrq0fH057UIx/O9u8zHMsg+psMGg1q9klV5OMxtok=";
+
+  cargoBuildFlags = [ "--package" "pop-launcher-bin" ];
+
+  postInstall = ''
+    mv $out/bin/pop-launcher{-bin,}
+
+    plugins_dir=$out/share/pop-launcher/plugins
+    scripts_dir=$out/share/pop-launcher/scripts
+    mkdir -p $plugins_dir $scripts_dir
+
+    for plugin in $(find plugins/src -mindepth 1 -maxdepth 1 -type d -printf '%f\n'); do
+      mkdir $plugins_dir/$plugin
+      cp plugins/src/$plugin/*.ron $plugins_dir/$plugin
+      ln -sf $out/bin/pop-launcher $plugins_dir/$plugin/$(echo $plugin | sed 's/_/-/')
+    done
+
+    for script in scripts/*; do
+      cp -r $script $scripts_dir
+    done
+  '';
+
+  meta = with lib; {
+    description = "Modular IPC-based desktop launcher service";
+    homepage = "https://github.com/pop-os/launcher";
+    platforms = platforms.linux;
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ samhug ];
+    mainProgram = "pop-launcher";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pop/default.nix b/nixpkgs/pkgs/applications/misc/pop/default.nix
new file mode 100644
index 000000000000..3fbf063e7315
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pop/default.nix
@@ -0,0 +1,41 @@
+{ lib, buildGoModule, installShellFiles, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "pop";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "charmbracelet";
+    repo = "pop";
+    rev = "v${version}";
+    hash = "sha256-ZGJkpa1EIw3tt1Ww2HFFoYsnnmnSAiv86XEB5TPf4/k=";
+  };
+
+  vendorHash = "sha256-8YcJXvR0cdL9PlP74Qh6uN2XZoN16sz/yeeZlBsk5N8=";
+
+  GOWORK = "off";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  postInstall = ''
+    $out/bin/pop man > pop.1
+    installManPage pop.1
+    installShellCompletion --cmd pop \
+      --bash <($out/bin/pop completion bash) \
+      --fish <($out/bin/pop completion fish) \
+      --zsh <($out/bin/pop completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "Send emails from your terminal";
+    homepage = "https://github.com/charmbracelet/pop";
+    changelog = "https://github.com/charmbracelet/pop/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ caarlos0 maaslalani ];
+    mainProgram = "pop";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/porsmo/default.nix b/nixpkgs/pkgs/applications/misc/porsmo/default.nix
new file mode 100644
index 000000000000..f741ad2d6b48
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/porsmo/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, alsa-lib
+, stdenv
+, darwin
+, testers
+, porsmo
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "porsmo";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "ColorCookie-dev";
+    repo = "porsmo";
+    rev = version;
+    hash = "sha256-bYPUSrGJKoNLFkIiGuXraYoaYn/HKSP8IiH3gtyWfmw=";
+  };
+
+  cargoHash = "sha256-EVo8iewKs4D7H2GP/T5oFO6LlTSzuIUqEdpwgjCKtJ8=";
+
+  nativeBuildInputs = [
+    pkg-config
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreAudio
+    darwin.apple_sdk.frameworks.CoreFoundation
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = porsmo;
+  };
+
+  meta = with lib; {
+    description = "Pomodoro cli app in rust with timer and countdown";
+    homepage = "https://github.com/ColorCookie-dev/porsmo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ MoritzBoehme ];
+    mainProgram = "porsmo";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pot/Cargo.lock b/nixpkgs/pkgs/applications/misc/pot/Cargo.lock
new file mode 100644
index 000000000000..a8dcf7612e3a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pot/Cargo.lock
@@ -0,0 +1,7348 @@
+# 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 = "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.8.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+dependencies = [
+ "cfg-if",
+ "const-random",
+ "getrandom 0.2.11",
+ "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 = "alloc-no-stdlib"
+version = "2.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3"
+
+[[package]]
+name = "alloc-stdlib"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece"
+dependencies = [
+ "alloc-no-stdlib",
+]
+
+[[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 = "anyhow"
+version = "1.0.75"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+
+[[package]]
+name = "arboard"
+version = "3.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aafb29b107435aa276664c1db8954ac27a6e105cdad3c88287a199eb0e313c08"
+dependencies = [
+ "clipboard-win",
+ "core-graphics 0.22.3",
+ "image",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "parking_lot",
+ "thiserror",
+ "winapi",
+ "x11rb",
+]
+
+[[package]]
+name = "ascii"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d92bec98840b8f03a5ff5413de5293bfcd8bf96467cf5452609f939ec6f5de16"
+
+[[package]]
+name = "async-broadcast"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
+dependencies = [
+ "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.0",
+ "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.1.2",
+ "async-task",
+ "concurrent-queue",
+ "fastrand 2.0.1",
+ "futures-lite 2.0.1",
+ "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 1.13.0",
+]
+
+[[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 0.4.10",
+ "waker-fn",
+]
+
+[[package]]
+name = "async-io"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6d3b15875ba253d1110c740755e246537483f152fa334f91abd7fe84c88b3ff"
+dependencies = [
+ "async-lock 3.1.2",
+ "cfg-if",
+ "concurrent-queue",
+ "futures-io",
+ "futures-lite 2.0.1",
+ "parking",
+ "polling 3.3.1",
+ "rustix 0.38.25",
+ "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.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dea8b3453dd7cc96711834b75400d671b73e3656975fa68d9f277163b7f7e316"
+dependencies = [
+ "event-listener 4.0.0",
+ "event-listener-strategy",
+ "pin-project-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.1.0",
+ "futures-lite 1.13.0",
+ "rustix 0.38.25",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-recursion"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "async-signal"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5"
+dependencies = [
+ "async-io 2.2.1",
+ "async-lock 2.8.0",
+ "atomic-waker",
+ "cfg-if",
+ "futures-core",
+ "futures-io",
+ "rustix 0.38.25",
+ "signal-hook-registry",
+ "slab",
+ "windows-sys 0.48.0",
+]
+
+[[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.74"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "atk"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd"
+dependencies = [
+ "atk-sys",
+ "bitflags 1.3.2",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "atk-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.2.0",
+]
+
+[[package]]
+name = "atoi"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528"
+dependencies = [
+ "num-traits",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
+
+[[package]]
+name = "atomic-write-file"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ae364a6c1301604bbc6dfbf8c385c47ff82301dd01eef506195a029196d8d04"
+dependencies = [
+ "nix 0.27.1",
+ "rand 0.8.5",
+]
+
+[[package]]
+name = "auto-launch"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f012b8cc0c850f34117ec8252a44418f2e34a2cf501de89e29b241ae5f79471"
+dependencies = [
+ "dirs 4.0.0",
+ "thiserror",
+ "winreg 0.10.1",
+]
+
+[[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.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
+
+[[package]]
+name = "base64"
+version = "0.21.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[package]]
+name = "bit_field"
+version = "0.10.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61"
+
+[[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",
+ "async-lock 3.1.2",
+ "async-task",
+ "fastrand 2.0.1",
+ "futures-io",
+ "futures-lite 2.0.1",
+ "piper",
+ "tracing",
+]
+
+[[package]]
+name = "brotli"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+ "brotli-decompressor",
+]
+
+[[package]]
+name = "brotli-decompressor"
+version = "2.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f"
+dependencies = [
+ "alloc-no-stdlib",
+ "alloc-stdlib",
+]
+
+[[package]]
+name = "bstr"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+
+[[package]]
+name = "byte-unit"
+version = "4.0.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c"
+dependencies = [
+ "serde",
+ "utf8-width",
+]
+
+[[package]]
+name = "bytecount"
+version = "0.6.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205"
+
+[[package]]
+name = "bytemuck"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+
+[[package]]
+name = "byteorder"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
+
+[[package]]
+name = "bytes"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+dependencies = [
+ "serde",
+]
+
+[[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 = "cairo-rs"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps 6.2.0",
+]
+
+[[package]]
+name = "cargo_toml"
+version = "0.15.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838"
+dependencies = [
+ "serde",
+ "toml 0.7.8",
+]
+
+[[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 = "cfb"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d38f2da7a0a2c4ccf0065be06397cc26a81f4e528be095826eee9d4adbb8c60f"
+dependencies = [
+ "byteorder",
+ "fnv",
+ "uuid",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7"
+dependencies = [
+ "smallvec",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03915af431787e6ffdcc74c645077518c6b6e01f80b761e0fbbfa288536311b3"
+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.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.5",
+]
+
+[[package]]
+name = "chunked_transfer"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e4de3bc4ea267985becf712dc6d9eed8b04c953b3fcfb339ebc87acd9804901"
+
+[[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 = "clipboard-win"
+version = "4.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a31c789563b815f77f4250caee12365734369f942439b7defd71e18a48197130"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics 0.22.3",
+ "foreign-types 0.3.2",
+ "libc",
+ "objc",
+]
+
+[[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 0.23.1",
+ "foreign-types 0.5.0",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7"
+dependencies = [
+ "bitflags 1.3.2",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "color_quant"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b"
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[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 1.0.9",
+ "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 = "const-oid"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+
+[[package]]
+name = "const-random"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a"
+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 0.2.11",
+ "once_cell",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
+[[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 0.3.2",
+ "libc",
+]
+
+[[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 = "core-text"
+version = "19.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99d74ada66e07c1cefa18f8abfba765b486f250de2e4a999e5727fc0dd4b4a25"
+dependencies = [
+ "core-foundation",
+ "core-graphics 0.22.3",
+ "foreign-types 0.3.2",
+ "libc",
+]
+
+[[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.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
+
+[[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 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",
+ "crossbeam-utils",
+]
+
+[[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 = "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",
+ "typenum",
+]
+
+[[package]]
+name = "cssparser"
+version = "0.27.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "754b69d351cdc2d8ee09ae203db831e005560fc6030da058f86ad60c92a9cb0a"
+dependencies = [
+ "cssparser-macros",
+ "dtoa-short",
+ "itoa 0.4.8",
+ "matches",
+ "phf 0.8.0",
+ "proc-macro2",
+ "quote",
+ "smallvec",
+ "syn 1.0.109",
+]
+
+[[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.39",
+]
+
+[[package]]
+name = "cstr"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8aa998c33a6d3271e3678950a22134cd7dd27cef86dee1b611b5b14207d1d90b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
+[[package]]
+name = "ctor"
+version = "0.1.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e"
+dependencies = [
+ "darling_core",
+ "darling_macro",
+]
+
+[[package]]
+name = "darling_core"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.20.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
+dependencies = [
+ "darling_core",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[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 = "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",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "derive-new"
+version = "0.5.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3418329ca0ad70234b9735dc4ceed10af4df60eff9c8e7b06cb5e520d92c3535"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "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",
+ "proc-macro2",
+ "quote",
+ "rustc_version",
+ "syn 1.0.109",
+]
+
+[[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 = "digest_auth"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3054f4e81d395e50822796c5e99ca522e6ba7be98947d6d4b0e5e61640bdb894"
+dependencies = [
+ "digest",
+ "hex",
+ "md-5",
+ "rand 0.8.5",
+ "sha2",
+]
+
+[[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"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys 0.4.1",
+]
+
+[[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"
+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 = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "display-info"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f9fb6a73233755f827129d80a80a6a16448122040537c881248a09d5c80ab6b"
+dependencies = [
+ "anyhow",
+ "core-graphics 0.23.1",
+ "fxhash",
+ "widestring",
+ "windows 0.48.0",
+ "xcb",
+]
+
+[[package]]
+name = "dlib"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412"
+dependencies = [
+ "libloading 0.8.1",
+]
+
+[[package]]
+name = "dotenvy"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b"
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[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.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
+
+[[package]]
+name = "dwrote"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "winapi",
+ "wio",
+]
+
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "embed-resource"
+version = "2.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f54cc3e827ee1c3812239a9a41dede7b4d7d5d5464faa32d71bd7cba28ce2cb2"
+dependencies = [
+ "cc",
+ "rustc_version",
+ "toml 0.8.8",
+ "vswhom",
+ "winreg 0.51.0",
+]
+
+[[package]]
+name = "embed_plist"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7"
+
+[[package]]
+name = "encoding_rs"
+version = "0.8.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "enigo"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "802e4b2ae123615659085369b453cba87c5562e46ed8050a909fee18a9bc3157"
+dependencies = [
+ "core-graphics 0.23.1",
+ "libc",
+ "objc",
+ "pkg-config",
+ "windows 0.51.1",
+]
+
+[[package]]
+name = "enumflags2"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939"
+dependencies = [
+ "enumflags2_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumflags2_derive"
+version = "0.7.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[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.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+dependencies = [
+ "libc",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[package]]
+name = "etcetera"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943"
+dependencies = [
+ "cfg-if",
+ "home",
+ "windows-sys 0.48.0",
+]
+
+[[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.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2"
+dependencies = [
+ "concurrent-queue",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "event-listener"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "770d968249b5d99410d61f5bf89057f3199a077a04d087092f58e7d10692baae"
+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.0",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "exr"
+version = "1.71.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "832a761f35ab3e6664babfbdc6cef35a4860e816ec3916dcfd0882954e98a8a8"
+dependencies = [
+ "bit_field",
+ "flume",
+ "half",
+ "lebe",
+ "miniz_oxide",
+ "rayon-core",
+ "smallvec",
+ "zune-inflate",
+]
+
+[[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 = "fdeflate"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "fern"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee"
+dependencies = [
+ "log",
+]
+
+[[package]]
+name = "field-offset"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
+dependencies = [
+ "memoffset 0.9.0",
+ "rustc_version",
+]
+
+[[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 = "flate2"
+version = "1.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "float-ord"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d"
+
+[[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 = "font-kit"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0504fc23a34d36352540ae5eedcec2623c86607a4efe25494ca9641845c5a50"
+dependencies = [
+ "bitflags 2.4.1",
+ "byteorder",
+ "core-foundation",
+ "core-graphics 0.22.3",
+ "core-text",
+ "dirs-next",
+ "dwrote",
+ "float-ord",
+ "freetype",
+ "lazy_static",
+ "libc",
+ "log",
+ "pathfinder_geometry",
+ "pathfinder_simd",
+ "walkdir",
+ "winapi",
+ "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 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 2.0.39",
+]
+
+[[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 = "form_urlencoded"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
+dependencies = [
+ "percent-encoding",
+]
+
+[[package]]
+name = "fraction"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59a78dd758a47a7305478e0e054f9fde4e983b9f9eccda162bf7ca03b79e9d40"
+dependencies = [
+ "lazy_static",
+ "num",
+]
+
+[[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 = "fsevent-sys"
+version = "4.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "futf"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843"
+dependencies = [
+ "mac",
+ "new_debug_unreachable",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-intrusive"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f"
+dependencies = [
+ "futures-core",
+ "lock_api",
+ "parking_lot",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+
+[[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.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb"
+dependencies = [
+ "fastrand 2.0.1",
+ "futures-core",
+ "futures-io",
+ "memchr",
+ "parking",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "futures-macro"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+
+[[package]]
+name = "futures-task"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+
+[[package]]
+name = "futures-util"
+version = "0.3.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+dependencies = [
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "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 = "gdk"
+version = "0.15.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.15.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a"
+dependencies = [
+ "bitflags 1.3.2",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.2.0",
+]
+
+[[package]]
+name = "gdk-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps 6.2.0",
+]
+
+[[package]]
+name = "gdkwayland-sys"
+version = "0.15.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2"
+dependencies = [
+ "gdk-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pkg-config",
+ "system-deps 6.2.0",
+]
+
+[[package]]
+name = "gdkx11-sys"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178"
+dependencies = [
+ "gdk-sys",
+ "glib-sys",
+ "libc",
+ "system-deps 6.2.0",
+ "x11",
+]
+
+[[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 0.48.0",
+]
+
+[[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 = "gethostname"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb65d4ba3173c56a500b555b532f72c42e8d1fe64962b518897f8959fae2c177"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[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.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+]
+
+[[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 = "gimli"
+version = "0.28.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+
+[[package]]
+name = "gio"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "gio-sys",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "gio-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.2.0",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.15.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d"
+dependencies = [
+ "bitflags 1.3.2",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-task",
+ "glib-macros",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "once_cell",
+ "smallvec",
+ "thiserror",
+]
+
+[[package]]
+name = "glib-macros"
+version = "0.15.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a"
+dependencies = [
+ "anyhow",
+ "heck 0.4.1",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4"
+dependencies = [
+ "libc",
+ "system-deps 6.2.0",
+]
+
+[[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.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
+dependencies = [
+ "aho-corasick",
+ "bstr",
+ "log",
+ "regex-automata 0.4.3",
+ "regex-syntax 0.8.2",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps 6.2.0",
+]
+
+[[package]]
+name = "gtk"
+version = "0.15.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0"
+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.15.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84"
+dependencies = [
+ "atk-sys",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "system-deps 6.2.0",
+]
+
+[[package]]
+name = "gtk3-macros"
+version = "0.15.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "h2"
+version = "0.3.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
+dependencies = [
+ "bytes",
+ "fnv",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "http",
+ "indexmap 2.1.0",
+ "slab",
+ "tokio",
+ "tokio-util",
+ "tracing",
+]
+
+[[package]]
+name = "half"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0"
+dependencies = [
+ "crunchy",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
+dependencies = [
+ "hashbrown 0.14.3",
+]
+
+[[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"
+dependencies = [
+ "unicode-segmentation",
+]
+
+[[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 = "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 = "html5ever"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever 0.10.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever 0.11.0",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "http"
+version = "0.2.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb"
+dependencies = [
+ "bytes",
+ "fnv",
+ "itoa 1.0.9",
+]
+
+[[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 = "http-range"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573"
+
+[[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 = "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 1.0.9",
+ "pin-project-lite",
+ "socket2 0.4.10",
+ "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.58"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+dependencies = [
+ "android_system_properties",
+ "core-foundation-sys",
+ "iana-time-zone-haiku",
+ "js-sys",
+ "wasm-bindgen",
+ "windows-core 0.51.1",
+]
+
+[[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 = "ico"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3804960be0bb5e4edb1e1ad67afd321a9ecfd875c3e65c099468fd2717d7cae"
+dependencies = [
+ "byteorder",
+ "png",
+]
+
+[[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.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[package]]
+name = "ignore"
+version = "0.4.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "747ad1b4ae841a78e8aba0d63adbfbeaea26b517b63705d47856b73015d27060"
+dependencies = [
+ "crossbeam-deque",
+ "globset",
+ "log",
+ "memchr",
+ "regex-automata 0.4.3",
+ "same-file",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
+name = "image"
+version = "0.24.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711"
+dependencies = [
+ "bytemuck",
+ "byteorder",
+ "color_quant",
+ "exr",
+ "gif",
+ "jpeg-decoder",
+ "num-rational",
+ "num-traits",
+ "png",
+ "qoi",
+ "tiff",
+]
+
+[[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",
+ "hashbrown 0.12.3",
+ "serde",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.3",
+ "serde",
+]
+
+[[package]]
+name = "infer"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a898e4b7951673fce96614ce5751d13c40fc5674bc2d759288e46c3ab62598b3"
+dependencies = [
+ "cfb",
+]
+
+[[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 = [
+ "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 = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi",
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
+
+[[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 = "0.4.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+[[package]]
+name = "itoa"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+
+[[package]]
+name = "javascriptcore-rs"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c"
+dependencies = [
+ "bitflags 1.3.2",
+ "glib",
+ "javascriptcore-rs-sys",
+]
+
+[[package]]
+name = "javascriptcore-rs-sys"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 5.0.0",
+]
+
+[[package]]
+name = "jni"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
+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 = "jobserver"
+version = "0.1.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "jpeg-decoder"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e"
+dependencies = [
+ "rayon",
+]
+
+[[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 = "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 = "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 = "kuchiki"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
+dependencies = [
+ "cssparser",
+ "html5ever 0.25.2",
+ "matches",
+ "selectors",
+]
+
+[[package]]
+name = "kuchikiki"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8"
+dependencies = [
+ "cssparser",
+ "html5ever 0.26.0",
+ "indexmap 1.9.3",
+ "matches",
+ "selectors",
+]
+
+[[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 = "lebe"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8"
+
+[[package]]
+name = "libappindicator"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db2d3cb96d092b4824cb306c9e544c856a4cb6210c1081945187f7f1924b47e8"
+dependencies = [
+ "glib",
+ "gtk",
+ "gtk-sys",
+ "libappindicator-sys",
+ "log",
+]
+
+[[package]]
+name = "libappindicator-sys"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1b3b6681973cea8cc3bce7391e6d7d5502720b80a581c9a95c9cbaf592826aa"
+dependencies = [
+ "gtk-sys",
+ "libloading 0.7.4",
+ "once_cell",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.150"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+
+[[package]]
+name = "libdbus-sys"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
+
+[[package]]
+name = "libloader"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d39e73d63036eb973937a3d247e8c9799b1cd0e131079ae8aba294cb0328073"
+dependencies = [
+ "libloading 0.7.4",
+]
+
+[[package]]
+name = "libloading"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
+dependencies = [
+ "cfg-if",
+ "winapi",
+]
+
+[[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 = "libm"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
+
+[[package]]
+name = "libredox"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
+dependencies = [
+ "bitflags 2.4.1",
+ "libc",
+ "redox_syscall 0.4.1",
+]
+
+[[package]]
+name = "libsqlite3-sys"
+version = "0.27.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716"
+dependencies = [
+ "cc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "line-wrap"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9"
+dependencies = [
+ "safemem",
+]
+
+[[package]]
+name = "lingua"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73989d32b4cd00a69e78d979203fa3b87e43fae0236a29544331c2ccfa180fdd"
+dependencies = [
+ "ahash",
+ "brotli",
+ "compact_str",
+ "fraction",
+ "include_dir",
+ "itertools 0.12.0",
+ "lingua-arabic-language-model",
+ "lingua-bokmal-language-model",
+ "lingua-chinese-language-model",
+ "lingua-english-language-model",
+ "lingua-french-language-model",
+ "lingua-german-language-model",
+ "lingua-hindi-language-model",
+ "lingua-indonesian-language-model",
+ "lingua-italian-language-model",
+ "lingua-japanese-language-model",
+ "lingua-korean-language-model",
+ "lingua-malay-language-model",
+ "lingua-mongolian-language-model",
+ "lingua-nynorsk-language-model",
+ "lingua-persian-language-model",
+ "lingua-portuguese-language-model",
+ "lingua-russian-language-model",
+ "lingua-spanish-language-model",
+ "lingua-thai-language-model",
+ "lingua-turkish-language-model",
+ "lingua-vietnamese-language-model",
+ "maplit",
+ "once_cell",
+ "rayon",
+ "regex",
+ "serde",
+ "serde-wasm-bindgen",
+ "serde_json",
+ "strum",
+ "strum_macros",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "lingua-arabic-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ada75100728990b05bacaec7693efebf0c8b911599ac0c082cb4ed576bf494d"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-bokmal-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a9215ee6bbe6d37222dc5dbd9d1577389810011cb8afbef6155e71a11fa5cb9"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-chinese-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "45a1e3a38a0920f6ddbd9b6a79a8c04cd927142713b595ba32be6b811603f7c6"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-english-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbd066693abb10083bb5b5fc1c494dda357170265021ad873ef582211817b8a8"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-french-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba406de05309b212790036e576aee4b1a71ce62b77fbd084df5bc8d7c624866f"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-german-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0dd4041d542b6512d415c0ea6979333e5e88698b966dda7b9bf06029bf690a13"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-hindi-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f63659e514fa8c706d2ed0d7a04b98adb05b8c8d4bc37e3d12edb9d35ce24fd0"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-indonesian-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc06b8937f6adaad76b28fd009cbfaa6f876ebe5fa887d96dccd1dff2d21d9ad"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-italian-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c6e138047ac4d681e419e37ad9e383878652ac19e67056ff16085d4cc82e590"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-japanese-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b34b94aa96a1bc0838ddda2c7912d0ebd7256bb21e7a2974e4dd8b186df501a8"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-korean-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35c47aa5e5dc8d029967375081aabda462faf10b070aefc1a175ea7f42f5267c"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-malay-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "771c6b7ab2865e2563e1ce19bf06611aad674c3f0a180ec43c03a9883e49c8aa"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-mongolian-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f53de502920af44b5d8ec7787895c0a81b0f5f43e3f3c2b80a240f2b605122c1"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-nynorsk-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db00b13561df244acb76927677200ff399b02d8c9b160d25a38320ef3361cfa9"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-persian-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "043ba9b4ac7df99acaa1cd9f5925d6fc9b0fe850d3891bbeb91b27ed94f266c4"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-portuguese-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9df0be307b3f5e24e10e76a7841302c0ff4a6ebf818a11d3a3c5c4cecfcfe58b"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-russian-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dea97d6643e90ee4fc0043c728f0c06cdd9e69d4970fd1983e5c59b3448a676e"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-spanish-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d45be9bede9b9d6d53b6e06047822a18dbd83e5d515736afecd85c1e71cc6070"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-thai-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "194b09209fc63d986d8ef9505689756eff1935fa52fd91031b60e7d546ca3c76"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-turkish-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b517e12fe94ce80e7f8f380fdd2c0223bcfe351c0898c9a83f56f78b3afad81"
+dependencies = [
+ "include_dir",
+]
+
+[[package]]
+name = "lingua-vietnamese-language-model"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07d08afaf263906aa3f2bfaffaf52eecd368992685e2468f1ba7f85f3e41fd49"
+dependencies = [
+ "include_dir",
+]
+
+[[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.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+
+[[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 = "loom"
+version = "0.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5"
+dependencies = [
+ "cfg-if",
+ "generator",
+ "scoped-tls",
+ "serde",
+ "serde_json",
+ "tracing",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "mac"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
+
+[[package]]
+name = "mac-notification-sys"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51fca4d74ff9dbaac16a01b924bc3693fa2bba0862c2c633abc73f9a8ea21f64"
+dependencies = [
+ "cc",
+ "dirs-next",
+ "objc-foundation",
+ "objc_id",
+ "time",
+]
+
+[[package]]
+name = "macos-accessibility-client"
+version = "0.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "edf7710fbff50c24124331760978fb9086d6de6288dcdb38b25a97f8b1bdebbb"
+dependencies = [
+ "core-foundation",
+ "core-foundation-sys",
+]
+
+[[package]]
+name = "malloc_buf"
+version = "0.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "maplit"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d"
+
+[[package]]
+name = "markup5ever"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
+dependencies = [
+ "log",
+ "phf 0.8.0",
+ "phf_codegen 0.8.0",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "markup5ever"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
+dependencies = [
+ "log",
+ "phf 0.10.1",
+ "phf_codegen 0.10.0",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[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 = "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.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+
+[[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 = "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 = "minisign-verify"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881"
+
+[[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.8.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+dependencies = [
+ "libc",
+ "log",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "mouse_position"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffd272ac3ad817af3d158eecd4d4ba6f92a1fa5f7255e3c0d63b72d4dac12edd"
+dependencies = [
+ "core-graphics 0.22.3",
+ "winapi",
+ "x11-dl",
+]
+
+[[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 = "ndk"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4"
+dependencies = [
+ "bitflags 1.3.2",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "new_debug_unreachable"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
+
+[[package]]
+name = "nix"
+version = "0.26.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
+dependencies = [
+ "bitflags 1.3.2",
+ "cfg-if",
+ "libc",
+ "memoffset 0.7.1",
+ "pin-utils",
+]
+
+[[package]]
+name = "nix"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "libc",
+]
+
+[[package]]
+name = "nodrop"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
+
+[[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 = "notify"
+version = "6.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d"
+dependencies = [
+ "bitflags 2.4.1",
+ "crossbeam-channel",
+ "filetime",
+ "fsevent-sys",
+ "inotify",
+ "kqueue",
+ "libc",
+ "log",
+ "mio",
+ "serde",
+ "walkdir",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "notify-debouncer-mini"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d40b221972a1fc5ef4d858a2f671fb34c75983eb385463dff3780eeff6a9d43"
+dependencies = [
+ "crossbeam-channel",
+ "log",
+ "notify",
+ "serde",
+]
+
+[[package]]
+name = "notify-rust"
+version = "4.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "827c5edfa80235ded4ab3fe8e9dc619b4f866ef16fe9b1c6b8a7f8692c0f2226"
+dependencies = [
+ "log",
+ "mac-notification-sys",
+ "serde",
+ "tauri-winrt-notification",
+ "zbus",
+]
+
+[[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"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
+dependencies = [
+ "num-bigint",
+ "num-complex",
+ "num-integer",
+ "num-iter",
+ "num-rational",
+ "num-traits",
+]
+
+[[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-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.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+dependencies = [
+ "autocfg",
+ "num-bigint",
+ "num-integer",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+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_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 = "num_threads"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "objc"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1"
+dependencies = [
+ "malloc_buf",
+ "objc_exception",
+]
+
+[[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_exception"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4"
+dependencies = [
+ "cc",
+]
+
+[[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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[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 = "openssl"
+version = "0.10.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800"
+dependencies = [
+ "bitflags 2.4.1",
+ "cfg-if",
+ "foreign-types 0.3.2",
+ "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.39",
+]
+
+[[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.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f"
+dependencies = [
+ "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-stream"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "os_info"
+version = "3.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e"
+dependencies = [
+ "log",
+ "serde",
+ "winapi",
+]
+
+[[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 = "overload"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
+
+[[package]]
+name = "pango"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f"
+dependencies = [
+ "bitflags 1.3.2",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.15.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 6.2.0",
+]
+
+[[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 = "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 = "paste"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+
+[[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",
+ "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",
+]
+
+[[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 = "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 = "petgraph"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
+dependencies = [
+ "fixedbitset",
+ "indexmap 2.1.0",
+]
+
+[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
+dependencies = [
+ "phf_macros 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fabbf1ead8a5bcbc20f5f8b939ee3f5b0f6f281b6ad3468b84656b658b455259"
+dependencies = [
+ "phf_macros 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro-hack",
+]
+
+[[package]]
+name = "phf_codegen"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbffee61585b0411840d3ece935cce9cb6321f01c45477d30066498cd5e1a815"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+]
+
+[[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.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+dependencies = [
+ "phf_shared 0.8.0",
+ "rand 0.7.3",
+]
+
+[[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_macros"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
+dependencies = [
+ "phf_generator 0.8.0",
+ "phf_shared 0.8.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58fdf3184dd560f160dd73922bea2d5cd6e8f064bf4b13110abd81b03697b4e0"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+ "proc-macro-hack",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+dependencies = [
+ "siphasher",
+]
+
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
+[[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 = "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 = "plist"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef"
+dependencies = [
+ "base64 0.21.5",
+ "indexmap 2.1.0",
+ "line-wrap",
+ "quick-xml 0.31.0",
+ "serde",
+ "time",
+]
+
+[[package]]
+name = "png"
+version = "0.17.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64"
+dependencies = [
+ "bitflags 1.3.2",
+ "crc32fast",
+ "fdeflate",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[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.25",
+ "tracing",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "pot"
+version = "0.0.0"
+dependencies = [
+ "arboard",
+ "base64 0.21.5",
+ "dirs 5.0.1",
+ "font-kit",
+ "image",
+ "libloader",
+ "libloading 0.8.1",
+ "lingua",
+ "log",
+ "macos-accessibility-client",
+ "mouse_position",
+ "once_cell",
+ "reqwest",
+ "reqwest_dav",
+ "screenshots",
+ "selection",
+ "serde",
+ "serde_json",
+ "tauri",
+ "tauri-build",
+ "tauri-plugin-autostart",
+ "tauri-plugin-fs-watch",
+ "tauri-plugin-log",
+ "tauri-plugin-single-instance",
+ "tauri-plugin-sql",
+ "tauri-plugin-store",
+ "thiserror",
+ "tiny_http",
+ "walkdir",
+ "window-shadows",
+ "windows 0.44.0",
+ "zip",
+]
+
+[[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 = "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-macro-hack"
+version = "0.5.20+deprecated"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.70"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "qoi"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.28.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.30.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1004a344b30a54e2ee58d66a71b32d2db2feb0a31f9a2d302bf0536f15de2a33"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.33"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+dependencies = [
+ "proc-macro2",
+]
+
+[[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",
+ "rand_pcg",
+]
+
+[[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.11",
+]
+
+[[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_pcg"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
+dependencies = [
+ "rand_core 0.5.1",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
+
+[[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 = "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.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
+dependencies = [
+ "getrandom 0.2.11",
+ "libredox",
+ "thiserror",
+]
+
+[[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 0.4.3",
+ "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.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax 0.8.2",
+]
+
+[[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.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+
+[[package]]
+name = "reqwest"
+version = "0.11.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+dependencies = [
+ "base64 0.21.5",
+ "bytes",
+ "encoding_rs",
+ "futures-core",
+ "futures-util",
+ "h2",
+ "http",
+ "http-body",
+ "hyper",
+ "hyper-tls",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "mime_guess",
+ "native-tls",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "system-configuration",
+ "tokio",
+ "tokio-native-tls",
+ "tokio-util",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "wasm-streams",
+ "web-sys",
+ "winreg 0.50.0",
+]
+
+[[package]]
+name = "reqwest_dav"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b567143a5c9b806f8f3a7a13f18e2517fd95da6f8daf2c22525b43992c64d4b"
+dependencies = [
+ "async-trait",
+ "chrono",
+ "digest_auth",
+ "http",
+ "reqwest",
+ "serde",
+ "serde-xml-rs",
+ "serde_derive",
+ "serde_json",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "rfd"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea"
+dependencies = [
+ "block",
+ "dispatch",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "js-sys",
+ "lazy_static",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "raw-window-handle",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "windows 0.37.0",
+]
+
+[[package]]
+name = "rsa"
+version = "0.9.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af6c4b23d99685a1408194da11270ef8e9809aff951cc70ec9b17350b087e474"
+dependencies = [
+ "const-oid",
+ "digest",
+ "num-bigint-dig",
+ "num-integer",
+ "num-traits",
+ "pkcs1",
+ "pkcs8",
+ "rand_core 0.6.4",
+ "signature",
+ "spki",
+ "subtle",
+ "zeroize",
+]
+
+[[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.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.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
+dependencies = [
+ "bitflags 2.4.1",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.11",
+ "windows-sys 0.48.0",
+]
+
+[[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 = "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 = "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 = "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 = "screenshots"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa2e9c30ca7f738a53367336d820f4a9af213c706ea55266d608d38e3b5cbff"
+dependencies = [
+ "anyhow",
+ "core-graphics 0.22.3",
+ "dbus",
+ "display-info",
+ "fxhash",
+ "percent-encoding",
+ "png",
+ "widestring",
+ "windows 0.48.0",
+ "xcb",
+]
+
+[[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 = "selection"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f4c5f3c0a904e16c649b1c59e95bda2d0983334a7b836b3aa4a85430831af16"
+dependencies = [
+ "arboard",
+ "enigo",
+ "log",
+ "windows 0.52.0",
+ "wl-clipboard-rs",
+ "x11-clipboard",
+]
+
+[[package]]
+name = "selectors"
+version = "0.22.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df320f1889ac4ba6bc0cdc9c9af7af4bd64bb927bccdf32d81140dc1f9be12fe"
+dependencies = [
+ "bitflags 1.3.2",
+ "cssparser",
+ "derive_more",
+ "fxhash",
+ "log",
+ "matches",
+ "phf 0.8.0",
+ "phf_codegen 0.8.0",
+ "precomputed-hash",
+ "servo_arc",
+ "smallvec",
+ "thin-slice",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde-wasm-bindgen"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ba92964781421b6cef36bf0d7da26d201e96d84e1b10e7ae6ed416e516906d"
+dependencies = [
+ "js-sys",
+ "serde",
+ "wasm-bindgen",
+]
+
+[[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_derive"
+version = "1.0.193"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.108"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+dependencies = [
+ "itoa 1.0.9",
+ "ryu",
+ "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.39",
+]
+
+[[package]]
+name = "serde_spanned"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+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 1.0.9",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_with"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23"
+dependencies = [
+ "base64 0.21.5",
+ "chrono",
+ "hex",
+ "indexmap 1.9.3",
+ "indexmap 2.1.0",
+ "serde",
+ "serde_json",
+ "serde_with_macros",
+ "time",
+]
+
+[[package]]
+name = "serde_with_macros"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788"
+dependencies = [
+ "darling",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "serialize-to-javascript"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9823f2d3b6a81d98228151fdeaf848206a7855a7a042bbf9bf870449a66cafb"
+dependencies = [
+ "serde",
+ "serde_json",
+ "serialize-to-javascript-impl",
+]
+
+[[package]]
+name = "serialize-to-javascript-impl"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74064874e9f6a15f04c1f3cb627902d0e6b410abbf36668afa873c61889f1763"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "servo_arc"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d98238b800e0d1576d8b6e3de32827c2d74bee68bb97748dcf5071fb53965432"
+dependencies = [
+ "nodrop",
+ "stable_deref_trait",
+]
+
+[[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 = "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-registry"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "signature"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de"
+dependencies = [
+ "digest",
+ "rand_core 0.6.4",
+]
+
+[[package]]
+name = "simd-adler32"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
+
+[[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",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+
+[[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.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "soup2"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0"
+dependencies = [
+ "bitflags 1.3.2",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "soup2-sys",
+]
+
+[[package]]
+name = "soup2-sys"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf"
+dependencies = [
+ "bitflags 1.3.2",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps 5.0.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.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
+dependencies = [
+ "base64ct",
+ "der",
+]
+
+[[package]]
+name = "sqlformat"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b7b278788e7be4d0d29c0f39497a0eef3fba6bbc8e70d8bf7fde46edeaa9e85"
+dependencies = [
+ "itertools 0.11.0",
+ "nom",
+ "unicode_categories",
+]
+
+[[package]]
+name = "sqlx"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dba03c279da73694ef99763320dea58b51095dfe87d001b1d4b5fe78ba8763cf"
+dependencies = [
+ "sqlx-core",
+ "sqlx-macros",
+ "sqlx-mysql",
+ "sqlx-postgres",
+ "sqlx-sqlite",
+]
+
+[[package]]
+name = "sqlx-core"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d84b0a3c3739e220d94b3239fd69fb1f74bc36e16643423bd99de3b43c21bfbd"
+dependencies = [
+ "ahash",
+ "atoi",
+ "byteorder",
+ "bytes",
+ "crc",
+ "crossbeam-queue",
+ "dotenvy",
+ "either",
+ "event-listener 2.5.3",
+ "futures-channel",
+ "futures-core",
+ "futures-intrusive",
+ "futures-io",
+ "futures-util",
+ "hashlink",
+ "hex",
+ "indexmap 2.1.0",
+ "log",
+ "memchr",
+ "once_cell",
+ "paste",
+ "percent-encoding",
+ "serde",
+ "serde_json",
+ "sha2",
+ "smallvec",
+ "sqlformat",
+ "thiserror",
+ "time",
+ "tokio",
+ "tokio-stream",
+ "tracing",
+ "url",
+]
+
+[[package]]
+name = "sqlx-macros"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89961c00dc4d7dffb7aee214964b065072bff69e36ddb9e2c107541f75e4f2a5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "sqlx-core",
+ "sqlx-macros-core",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "sqlx-macros-core"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0bd4519486723648186a08785143599760f7cc81c52334a55d6a83ea1e20841"
+dependencies = [
+ "atomic-write-file",
+ "dotenvy",
+ "either",
+ "heck 0.4.1",
+ "hex",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "sha2",
+ "sqlx-core",
+ "sqlx-mysql",
+ "sqlx-postgres",
+ "sqlx-sqlite",
+ "syn 1.0.109",
+ "tempfile",
+ "tokio",
+ "url",
+]
+
+[[package]]
+name = "sqlx-mysql"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e37195395df71fd068f6e2082247891bc11e3289624bbc776a0cdfa1ca7f1ea4"
+dependencies = [
+ "atoi",
+ "base64 0.21.5",
+ "bitflags 2.4.1",
+ "byteorder",
+ "bytes",
+ "crc",
+ "digest",
+ "dotenvy",
+ "either",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "generic-array",
+ "hex",
+ "hkdf",
+ "hmac",
+ "itoa 1.0.9",
+ "log",
+ "md-5",
+ "memchr",
+ "once_cell",
+ "percent-encoding",
+ "rand 0.8.5",
+ "rsa",
+ "serde",
+ "sha1",
+ "sha2",
+ "smallvec",
+ "sqlx-core",
+ "stringprep",
+ "thiserror",
+ "time",
+ "tracing",
+ "whoami",
+]
+
+[[package]]
+name = "sqlx-postgres"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6ac0ac3b7ccd10cc96c7ab29791a7dd236bd94021f31eec7ba3d46a74aa1c24"
+dependencies = [
+ "atoi",
+ "base64 0.21.5",
+ "bitflags 2.4.1",
+ "byteorder",
+ "crc",
+ "dotenvy",
+ "etcetera",
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-util",
+ "hex",
+ "hkdf",
+ "hmac",
+ "home",
+ "itoa 1.0.9",
+ "log",
+ "md-5",
+ "memchr",
+ "once_cell",
+ "rand 0.8.5",
+ "serde",
+ "serde_json",
+ "sha1",
+ "sha2",
+ "smallvec",
+ "sqlx-core",
+ "stringprep",
+ "thiserror",
+ "time",
+ "tracing",
+ "whoami",
+]
+
+[[package]]
+name = "sqlx-sqlite"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "210976b7d948c7ba9fced8ca835b11cbb2d677c59c79de41ac0d397e14547490"
+dependencies = [
+ "atoi",
+ "flume",
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-intrusive",
+ "futures-util",
+ "libsqlite3-sys",
+ "log",
+ "percent-encoding",
+ "serde",
+ "sqlx-core",
+ "time",
+ "tracing",
+ "url",
+ "urlencoding",
+]
+
+[[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 = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[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",
+ "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 = "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 = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+
+[[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",
+ "quote",
+ "rustversion",
+ "syn 2.0.39",
+]
+
+[[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.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "sys-locale"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8a11bd9c338fdba09f7881ab41551932ad42e405f61d01e8406baea71c07aee"
+dependencies = [
+ "js-sys",
+ "libc",
+ "wasm-bindgen",
+ "web-sys",
+ "windows-sys 0.45.0",
+]
+
+[[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 = "system-deps"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e"
+dependencies = [
+ "cfg-expr 0.9.1",
+ "heck 0.3.3",
+ "pkg-config",
+ "toml 0.5.11",
+ "version-compare 0.0.11",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331"
+dependencies = [
+ "cfg-expr 0.15.5",
+ "heck 0.4.1",
+ "pkg-config",
+ "toml 0.8.8",
+ "version-compare 0.1.1",
+]
+
+[[package]]
+name = "tao"
+version = "0.16.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75f5aefd6be4cd3ad3f047442242fd9f57cbfb3e565379f66b5e14749364fa4f"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "cc",
+ "cocoa 0.24.1",
+ "core-foundation",
+ "core-graphics 0.22.3",
+ "crossbeam-channel",
+ "dirs-next",
+ "dispatch",
+ "gdk",
+ "gdk-pixbuf",
+ "gdk-sys",
+ "gdkwayland-sys",
+ "gdkx11-sys",
+ "gio",
+ "glib",
+ "glib-sys",
+ "gtk",
+ "image",
+ "instant",
+ "jni",
+ "lazy_static",
+ "libappindicator",
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-sys",
+ "objc",
+ "once_cell",
+ "parking_lot",
+ "png",
+ "raw-window-handle",
+ "scopeguard",
+ "serde",
+ "tao-macros",
+ "unicode-segmentation",
+ "uuid",
+ "windows 0.39.0",
+ "windows-implement",
+ "x11-dl",
+]
+
+[[package]]
+name = "tao-macros"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[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 = "target-lexicon"
+version = "0.12.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+
+[[package]]
+name = "tauri"
+version = "1.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9bfe673cf125ef364d6f56b15e8ce7537d9ca7e4dae1cf6fbbdeed2e024db3d9"
+dependencies = [
+ "anyhow",
+ "base64 0.21.5",
+ "bytes",
+ "cocoa 0.24.1",
+ "dirs-next",
+ "embed_plist",
+ "encoding_rs",
+ "flate2",
+ "futures-util",
+ "glib",
+ "glob",
+ "gtk",
+ "heck 0.4.1",
+ "http",
+ "ignore",
+ "minisign-verify",
+ "notify-rust",
+ "objc",
+ "once_cell",
+ "open",
+ "os_info",
+ "os_pipe",
+ "percent-encoding",
+ "rand 0.8.5",
+ "raw-window-handle",
+ "regex",
+ "reqwest",
+ "rfd",
+ "semver",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "serialize-to-javascript",
+ "shared_child",
+ "state",
+ "sys-locale",
+ "tar",
+ "tauri-macros",
+ "tauri-runtime",
+ "tauri-runtime-wry",
+ "tauri-utils",
+ "tempfile",
+ "thiserror",
+ "time",
+ "tokio",
+ "url",
+ "uuid",
+ "webkit2gtk",
+ "webview2-com",
+ "windows 0.39.0",
+ "zip",
+]
+
+[[package]]
+name = "tauri-build"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defbfc551bd38ab997e5f8e458f87396d2559d05ce32095076ad6c30f7fc5f9c"
+dependencies = [
+ "anyhow",
+ "cargo_toml",
+ "dirs-next",
+ "heck 0.4.1",
+ "json-patch",
+ "semver",
+ "serde",
+ "serde_json",
+ "tauri-utils",
+ "tauri-winres",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-codegen"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b3475e55acec0b4a50fb96435f19631fb58cbcd31923e1a213de5c382536bbb"
+dependencies = [
+ "base64 0.21.5",
+ "brotli",
+ "ico",
+ "json-patch",
+ "plist",
+ "png",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "semver",
+ "serde",
+ "serde_json",
+ "sha2",
+ "tauri-utils",
+ "thiserror",
+ "time",
+ "uuid",
+ "walkdir",
+]
+
+[[package]]
+name = "tauri-macros"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613740228de92d9196b795ac455091d3a5fbdac2654abb8bb07d010b62ab43af"
+dependencies = [
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "tauri-codegen",
+ "tauri-utils",
+]
+
+[[package]]
+name = "tauri-plugin-autostart"
+version = "0.0.0"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#9b2e9ab6c9b853a861292c69770458e5409992c0"
+dependencies = [
+ "auto-launch",
+ "log",
+ "serde",
+ "serde_json",
+ "tauri",
+ "thiserror",
+]
+
+[[package]]
+name = "tauri-plugin-fs-watch"
+version = "0.0.0"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#9b2e9ab6c9b853a861292c69770458e5409992c0"
+dependencies = [
+ "log",
+ "notify",
+ "notify-debouncer-mini",
+ "serde",
+ "serde_json",
+ "tauri",
+ "thiserror",
+]
+
+[[package]]
+name = "tauri-plugin-log"
+version = "0.0.0"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#9b2e9ab6c9b853a861292c69770458e5409992c0"
+dependencies = [
+ "byte-unit",
+ "fern",
+ "log",
+ "serde",
+ "serde_json",
+ "serde_repr",
+ "tauri",
+ "time",
+]
+
+[[package]]
+name = "tauri-plugin-single-instance"
+version = "0.0.0"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#9b2e9ab6c9b853a861292c69770458e5409992c0"
+dependencies = [
+ "log",
+ "serde",
+ "serde_json",
+ "tauri",
+ "thiserror",
+ "windows-sys 0.52.0",
+ "zbus",
+]
+
+[[package]]
+name = "tauri-plugin-sql"
+version = "0.0.0"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#9b2e9ab6c9b853a861292c69770458e5409992c0"
+dependencies = [
+ "futures-core",
+ "log",
+ "serde",
+ "serde_json",
+ "sqlx",
+ "tauri",
+ "thiserror",
+ "time",
+ "tokio",
+]
+
+[[package]]
+name = "tauri-plugin-store"
+version = "0.0.0"
+source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#9b2e9ab6c9b853a861292c69770458e5409992c0"
+dependencies = [
+ "log",
+ "serde",
+ "serde_json",
+ "tauri",
+ "thiserror",
+]
+
+[[package]]
+name = "tauri-runtime"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "07f8e9e53e00e9f41212c115749e87d5cd2a9eebccafca77a19722eeecd56d43"
+dependencies = [
+ "gtk",
+ "http",
+ "http-range",
+ "rand 0.8.5",
+ "raw-window-handle",
+ "serde",
+ "serde_json",
+ "tauri-utils",
+ "thiserror",
+ "url",
+ "uuid",
+ "webview2-com",
+ "windows 0.39.0",
+]
+
+[[package]]
+name = "tauri-runtime-wry"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8141d72b6b65f2008911e9ef5b98a68d1e3413b7a1464e8f85eb3673bb19a895"
+dependencies = [
+ "cocoa 0.24.1",
+ "gtk",
+ "percent-encoding",
+ "rand 0.8.5",
+ "raw-window-handle",
+ "tauri-runtime",
+ "tauri-utils",
+ "uuid",
+ "webkit2gtk",
+ "webview2-com",
+ "windows 0.39.0",
+ "wry",
+]
+
+[[package]]
+name = "tauri-utils"
+version = "1.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34d55e185904a84a419308d523c2c6891d5e2dbcee740c4997eb42e75a7b0f46"
+dependencies = [
+ "brotli",
+ "ctor",
+ "dunce",
+ "glob",
+ "heck 0.4.1",
+ "html5ever 0.26.0",
+ "infer",
+ "json-patch",
+ "kuchikiki",
+ "log",
+ "memchr",
+ "phf 0.10.1",
+ "proc-macro2",
+ "quote",
+ "semver",
+ "serde",
+ "serde_json",
+ "serde_with",
+ "thiserror",
+ "url",
+ "walkdir",
+ "windows 0.39.0",
+]
+
+[[package]]
+name = "tauri-winres"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5993dc129e544393574288923d1ec447c857f3f644187f4fbf7d9a875fbfc4fb"
+dependencies = [
+ "embed-resource",
+ "toml 0.7.8",
+]
+
+[[package]]
+name = "tauri-winrt-notification"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "006851c9ccefa3c38a7646b8cec804bb429def3da10497bfa977179869c3e8e2"
+dependencies = [
+ "quick-xml 0.30.0",
+ "windows 0.51.1",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+dependencies = [
+ "cfg-if",
+ "fastrand 2.0.1",
+ "redox_syscall 0.4.1",
+ "rustix 0.38.25",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "tendril"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0"
+dependencies = [
+ "futf",
+ "mac",
+ "utf-8",
+]
+
+[[package]]
+name = "thin-slice"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c"
+
+[[package]]
+name = "thiserror"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.50"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[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 = "tiff"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211"
+dependencies = [
+ "flate2",
+ "jpeg-decoder",
+ "weezl",
+]
+
+[[package]]
+name = "time"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+dependencies = [
+ "deranged",
+ "itoa 1.0.9",
+ "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 = "tiny_http"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "389915df6413a2e74fb181895f933386023c71110878cd0825588928e64cdc82"
+dependencies = [
+ "ascii",
+ "chunked_transfer",
+ "httpdate",
+ "log",
+]
+
+[[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.34.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
+dependencies = [
+ "backtrace",
+ "bytes",
+ "libc",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2 0.5.5",
+ "windows-sys 0.48.0",
+]
+
+[[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-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.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15"
+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.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.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 2.1.0",
+ "serde",
+ "serde_spanned",
+ "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 2.1.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.40"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
+dependencies = [
+ "log",
+ "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.39",
+]
+
+[[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-log"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
+dependencies = [
+ "log",
+ "once_cell",
+ "tracing-core",
+]
+
+[[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",
+ "sharded-slab",
+ "smallvec",
+ "thread_local",
+ "tracing",
+ "tracing-core",
+ "tracing-log",
+]
+
+[[package]]
+name = "tree_magic_mini"
+version = "3.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91adfd0607cacf6e4babdb870e9bec4037c1c4b151cfd279ccefc5e0c7feaa6d"
+dependencies = [
+ "bytecount",
+ "fnv",
+ "lazy_static",
+ "nom",
+ "once_cell",
+ "petgraph",
+]
+
+[[package]]
+name = "treediff"
+version = "4.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303"
+dependencies = [
+ "serde_json",
+]
+
+[[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.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
+
+[[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 = "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_categories"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
+
+[[package]]
+name = "url"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
+dependencies = [
+ "form_urlencoded",
+ "idna",
+ "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 = "uuid"
+version = "1.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
+dependencies = [
+ "getrandom 0.2.11",
+]
+
+[[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.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a72e1902dde2bd6441347de2b70b7f5d59bf157c6c62f0c44572607a1d55bbe"
+
+[[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.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
+
+[[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 = "vswhom"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be979b7f07507105799e854203b470ff7c78a1639e330a58f183b5fea574608b"
+dependencies = [
+ "libc",
+ "vswhom-sys",
+]
+
+[[package]]
+name = "vswhom-sys"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3b17ae1f6c8a2b28506cd96d412eebf83b4a0ff2cbefeeb952f2f9dfa44ba18"
+dependencies = [
+ "cc",
+ "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 = "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 = "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.39",
+ "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.39",
+ "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 = "wasm-streams"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7"
+dependencies = [
+ "futures-util",
+ "js-sys",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+]
+
+[[package]]
+name = "wayland-backend"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19152ddd73f45f024ed4534d9ca2594e0ef252c1847695255dae47f34df9fbe4"
+dependencies = [
+ "cc",
+ "downcast-rs",
+ "nix 0.26.4",
+ "scoped-tls",
+ "smallvec",
+ "wayland-sys",
+]
+
+[[package]]
+name = "wayland-client"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1ca7d52347346f5473bf2f56705f360e8440873052e575e55890c4fa57843ed3"
+dependencies = [
+ "bitflags 2.4.1",
+ "nix 0.26.4",
+ "wayland-backend",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e253d7107ba913923dc253967f35e8561a3c65f914543e46843c88ddd729e21c"
+dependencies = [
+ "bitflags 2.4.1",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-protocols-wlr"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad1f61b76b6c2d8742e10f9ba5c3737f6530b4c243132c2a2ccc8aa96fe25cd6"
+dependencies = [
+ "bitflags 2.4.1",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-protocols",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.31.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb8e28403665c9f9513202b7e1ed71ec56fde5c107816843fb14057910b2c09c"
+dependencies = [
+ "proc-macro2",
+ "quick-xml 0.30.0",
+ "quote",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.31.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15a0c8eaff5216d07f226cb7a549159267f3467b289d9a2e52fd3ef5aae2b7af"
+dependencies = [
+ "dlib",
+ "log",
+ "pkg-config",
+]
+
+[[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 = "webkit2gtk"
+version = "0.18.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370"
+dependencies = [
+ "bitflags 1.3.2",
+ "cairo-rs",
+ "gdk",
+ "gdk-sys",
+ "gio",
+ "gio-sys",
+ "glib",
+ "glib-sys",
+ "gobject-sys",
+ "gtk",
+ "gtk-sys",
+ "javascriptcore-rs",
+ "libc",
+ "once_cell",
+ "soup2",
+ "webkit2gtk-sys",
+]
+
+[[package]]
+name = "webkit2gtk-sys"
+version = "0.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3"
+dependencies = [
+ "atk-sys",
+ "bitflags 1.3.2",
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk-sys",
+ "javascriptcore-rs-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "soup2-sys",
+ "system-deps 6.2.0",
+]
+
+[[package]]
+name = "webview2-com"
+version = "0.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178"
+dependencies = [
+ "webview2-com-macros",
+ "webview2-com-sys",
+ "windows 0.39.0",
+ "windows-implement",
+]
+
+[[package]]
+name = "webview2-com-macros"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "webview2-com-sys"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7"
+dependencies = [
+ "regex",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "windows 0.39.0",
+ "windows-bindgen",
+ "windows-metadata",
+]
+
+[[package]]
+name = "weezl"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb"
+
+[[package]]
+name = "whoami"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50"
+
+[[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-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+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-shadows"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67ff424735b1ac21293b0492b069394b0a189c8a463fb015a16dea7c2e221c08"
+dependencies = [
+ "cocoa 0.25.0",
+ "objc",
+ "raw-window-handle",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "windows"
+version = "0.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647"
+dependencies = [
+ "windows_aarch64_msvc 0.37.0",
+ "windows_i686_gnu 0.37.0",
+ "windows_i686_msvc 0.37.0",
+ "windows_x86_64_gnu 0.37.0",
+ "windows_x86_64_msvc 0.37.0",
+]
+
+[[package]]
+name = "windows"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a"
+dependencies = [
+ "windows-implement",
+ "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"
+version = "0.44.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e745dab35a0c4c77aa3ce42d595e13d2003d6902d6b08c9ef5fc326d08da12b"
+dependencies = [
+ "windows-targets 0.42.2",
+]
+
+[[package]]
+name = "windows"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
+dependencies = [
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows"
+version = "0.51.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9"
+dependencies = [
+ "windows-core 0.51.1",
+ "windows-targets 0.48.5",
+]
+
+[[package]]
+name = "windows"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
+dependencies = [
+ "windows-core 0.52.0",
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-bindgen"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41"
+dependencies = [
+ "windows-metadata",
+ "windows-tokens",
+]
+
+[[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-core"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
+[[package]]
+name = "windows-implement"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7"
+dependencies = [
+ "syn 1.0.109",
+ "windows-tokens",
+]
+
+[[package]]
+name = "windows-metadata"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278"
+
+[[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.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-tokens"
+version = "0.39.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597"
+
+[[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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a"
+
+[[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.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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1"
+
+[[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.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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c"
+
+[[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.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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d"
+
+[[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.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.37.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d"
+
+[[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.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.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+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 = "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 = "winreg"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "wio"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "wl-clipboard-rs"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57af79e973eadf08627115c73847392e6b766856ab8e3844a59245354b23d2fa"
+dependencies = [
+ "derive-new",
+ "libc",
+ "log",
+ "nix 0.26.4",
+ "os_pipe",
+ "tempfile",
+ "thiserror",
+ "tree_magic_mini",
+ "wayland-backend",
+ "wayland-client",
+ "wayland-protocols",
+ "wayland-protocols-wlr",
+]
+
+[[package]]
+name = "wry"
+version = "0.24.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a70547e8f9d85da0f5af609143f7bde3ac7457a6e1073104d9b73d6c5ac744"
+dependencies = [
+ "base64 0.13.1",
+ "block",
+ "cocoa 0.24.1",
+ "core-graphics 0.22.3",
+ "crossbeam-channel",
+ "dunce",
+ "gdk",
+ "gio",
+ "glib",
+ "gtk",
+ "html5ever 0.25.2",
+ "http",
+ "kuchiki",
+ "libc",
+ "log",
+ "objc",
+ "objc_id",
+ "once_cell",
+ "serde",
+ "serde_json",
+ "sha2",
+ "soup2",
+ "tao",
+ "thiserror",
+ "url",
+ "webkit2gtk",
+ "webkit2gtk-sys",
+ "webview2-com",
+ "windows 0.39.0",
+ "windows-implement",
+]
+
+[[package]]
+name = "x11"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "502da5464ccd04011667b11c435cb992822c2c0dbde1770c988480d312a0db2e"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11-clipboard"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b41aca1115b1f195f21c541c5efb423470848d48143127d0f07f8b90c27440df"
+dependencies = [
+ "x11rb",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f"
+dependencies = [
+ "libc",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1641b26d4dec61337c35a1b1aaf9e3cba8f46f0b43636c609ab0291a648040a"
+dependencies = [
+ "gethostname",
+ "nix 0.26.4",
+ "winapi",
+ "winapi-wsapoll",
+ "x11rb-protocol",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "82d6c3f9a0fb6701fab8f6cea9b0c0bd5d6876f1f89f7fada07e558077c344bc"
+dependencies = [
+ "nix 0.26.4",
+]
+
+[[package]]
+name = "xattr"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "xcb"
+version = "1.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb3acf6b0945550d37d3a683b8f7de9d9f66b2c14dc390313b34d7ac6f1b4089"
+dependencies = [
+ "bitflags 1.3.2",
+ "libc",
+ "quick-xml 0.28.2",
+]
+
+[[package]]
+name = "xdg-home"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd"
+dependencies = [
+ "nix 0.26.4",
+ "winapi",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a"
+
+[[package]]
+name = "yeslogic-fontconfig-sys"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffb6b23999a8b1a997bf47c7bb4d19ad4029c3327bb3386ebe0a5ff584b33c7a"
+dependencies = [
+ "cstr",
+ "dlib",
+ "once_cell",
+ "pkg-config",
+]
+
+[[package]]
+name = "zbus"
+version = "3.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948"
+dependencies = [
+ "async-broadcast",
+ "async-executor",
+ "async-fs",
+ "async-io 1.13.0",
+ "async-lock 2.8.0",
+ "async-process",
+ "async-recursion",
+ "async-task",
+ "async-trait",
+ "blocking",
+ "byteorder",
+ "derivative",
+ "enumflags2",
+ "event-listener 2.5.3",
+ "futures-core",
+ "futures-sink",
+ "futures-util",
+ "hex",
+ "nix 0.26.4",
+ "once_cell",
+ "ordered-stream",
+ "rand 0.8.5",
+ "serde",
+ "serde_repr",
+ "sha1",
+ "static_assertions",
+ "tracing",
+ "uds_windows",
+ "winapi",
+ "xdg-home",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "3.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zbus_names"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9"
+dependencies = [
+ "serde",
+ "static_assertions",
+ "zvariant",
+]
+
+[[package]]
+name = "zerocopy"
+version = "0.7.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.39",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d"
+
+[[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",
+ "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.9+zstd.1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656"
+dependencies = [
+ "cc",
+ "pkg-config",
+]
+
+[[package]]
+name = "zune-inflate"
+version = "0.2.54"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02"
+dependencies = [
+ "simd-adler32",
+]
+
+[[package]]
+name = "zvariant"
+version = "3.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.15.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zvariant_utils"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
diff --git a/nixpkgs/pkgs/applications/misc/pot/default.nix b/nixpkgs/pkgs/applications/misc/pot/default.nix
new file mode 100644
index 000000000000..33e6c18932de
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pot/default.nix
@@ -0,0 +1,137 @@
+{ lib
+, stdenv
+, stdenvNoCC
+, rustPlatform
+, fetchFromGitHub
+, wrapGAppsHook
+, cargo
+, rustc
+, cargo-tauri
+, pkg-config
+, nodePackages
+, esbuild
+, buildGoModule
+, jq
+, moreutils
+, libayatana-appindicator
+, gtk3
+, webkitgtk
+, libsoup
+, openssl
+, xdotool
+, cacert
+}:
+
+stdenv.mkDerivation rec {
+  pname = "pot";
+  version = "2.7.4";
+
+  src = fetchFromGitHub {
+    owner = "pot-app";
+    repo = "pot-desktop";
+    rev = version;
+    hash = "sha256-c7FHkp/utvrr7qasY+XKaTnPaiZWb8M5EGiFne52osQ=";
+  };
+
+  sourceRoot = "${src.name}/src-tauri";
+
+  postPatch = ''
+    substituteInPlace $cargoDepsCopy/libappindicator-sys-*/src/lib.rs \
+      --replace "libayatana-appindicator3.so.1" "${libayatana-appindicator}/lib/libayatana-appindicator3.so.1"
+  '';
+
+  pnpm-deps = stdenvNoCC.mkDerivation {
+    pname = "${pname}-pnpm-deps";
+    inherit src version;
+
+    nativeBuildInputs = [
+      jq
+      moreutils
+      nodePackages.pnpm
+      cacert
+    ];
+
+    installPhase = ''
+      export HOME=$(mktemp -d)
+      pnpm config set store-dir $out
+      # use --ignore-script and --no-optional to avoid downloading binaries
+      # use --frozen-lockfile to avoid checking git deps
+      pnpm install --frozen-lockfile --no-optional --ignore-script
+
+      # Remove timestamp and sort the json files
+      rm -rf $out/v3/tmp
+      for f in $(find $out -name "*.json"); do
+        sed -i -E -e 's/"checkedAt":[0-9]+,//g' $f
+        jq --sort-keys . $f | sponge $f
+      done
+    '';
+
+    dontFixup = true;
+    outputHashMode = "recursive";
+    outputHash = "sha256-BQ5M+pKEXGJzWmxMchNgxpvLpgFCRIg33GQCvO4TLz4=";
+  };
+
+  cargoDeps = rustPlatform.importCargoLock {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      # All other crates in the same workspace reuse this hash.
+      "tauri-plugin-autostart-0.0.0" = "sha256-/uxaSBp+N1VjjSiwf6NwNnSH02Vk6gQZ/CzO+AyEI7o=";
+    };
+  };
+
+  nativeBuildInputs = [
+    rustPlatform.cargoSetupHook
+    cargo
+    rustc
+    cargo-tauri
+    wrapGAppsHook
+    nodePackages.pnpm
+    pkg-config
+  ];
+
+  buildInputs = [
+    gtk3
+    libsoup
+    libayatana-appindicator
+    openssl
+    webkitgtk
+    xdotool
+  ];
+
+  ESBUILD_BINARY_PATH = "${lib.getExe (esbuild.override {
+    buildGoModule = args: buildGoModule (args // rec {
+      version = "0.18.20";
+      src = fetchFromGitHub {
+        owner = "evanw";
+        repo = "esbuild";
+        rev = "v${version}";
+        hash = "sha256-mED3h+mY+4H465m02ewFK/BgA1i/PQ+ksUNxBlgpUoI=";
+      };
+      vendorHash = "sha256-+BfxCyg0KkDQpHt/wycy/8CTG6YBA/VJvJFhhzUnSiQ=";
+    });
+  })}";
+
+  preBuild = ''
+    export HOME=$(mktemp -d)
+    pnpm config set store-dir ${pnpm-deps}
+    chmod +w ..
+    pnpm install --offline --frozen-lockfile --no-optional --ignore-script
+    chmod -R +w ../node_modules
+    pnpm rebuild
+    # Use cargo-tauri from nixpkgs instead of pnpm tauri from npm
+    cargo tauri build -b deb
+  '';
+
+  preInstall = ''
+    mv target/release/bundle/deb/*/data/usr/ $out
+  '';
+
+  meta = with lib; {
+    description = "A cross-platform translation software";
+    homepage = "https://pot.pylogmon.com";
+    platforms = platforms.linux;
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ linsui ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/premid/default.nix b/nixpkgs/pkgs/applications/misc/premid/default.nix
new file mode 100644
index 000000000000..f621d510e411
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/premid/default.nix
@@ -0,0 +1,94 @@
+{ autoPatchelfHook, makeDesktopItem, lib, stdenv, wrapGAppsHook, fetchurl, copyDesktopItems
+, alsa-lib, at-spi2-atk, at-spi2-core, atk, cairo, cups, dbus, expat, fontconfig
+, freetype, gdk-pixbuf, glib, gtk3, libcxx, libdrm, libnotify, libpulseaudio, libuuid
+, libX11, libXScrnSaver, libXcomposite, libXcursor, libXdamage, libXext
+, libXfixes, libXi, libXrandr, libXrender, libXtst, libxcb, libxshmfence
+, mesa, nspr, nss, pango, systemd, libappindicator-gtk3, libdbusmenu
+}:
+
+stdenv.mkDerivation rec {
+  pname = "premid";
+  version = "2.3.4";
+
+  src = fetchurl {
+    url = "https://github.com/premid/Linux/releases/download/v${version}/${pname}.tar.gz";
+    sha256 = "sha256-ime6SCxm+fhMR2wagv1RItqwLjPxvJnVziW3DZafP50=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    wrapGAppsHook
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    alsa-lib
+    cups
+    libdrm
+    libuuid
+    libXdamage
+    libX11
+    libXScrnSaver
+    libXtst
+    libxcb
+    libxshmfence
+    mesa
+    nss
+  ];
+
+  dontWrapGApps = true;
+  dontBuild = true;
+  dontConfigure = true;
+
+  libPath = lib.makeLibraryPath [
+    libcxx systemd libpulseaudio libdrm mesa
+    stdenv.cc.cc alsa-lib atk at-spi2-atk at-spi2-core cairo cups dbus expat fontconfig freetype
+    gdk-pixbuf glib gtk3 libnotify libX11 libXcomposite libuuid
+    libXcursor libXdamage libXext libXfixes libXi libXrandr libXrender
+    libXtst nspr nss libxcb pango systemd libXScrnSaver
+    libappindicator-gtk3 libdbusmenu
+   ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,opt/PreMiD,share/pixmaps}
+    mv * $out/opt/PreMiD
+
+    chmod +x $out/opt/PreMiD/${pname}
+    patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \
+        $out/opt/PreMiD/${pname}
+
+    wrapProgram $out/opt/PreMiD/${pname} \
+        "''${gappsWrapperArgs[@]}" \
+        --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+        --prefix LD_LIBRARY_PATH : ${libPath}:$out/opt/${pname}
+
+    ln -s $out/opt/PreMiD/${pname} $out/bin/
+  '';
+
+  # This is the icon used by the desktop file
+  postInstall = ''
+    ln -s $out/opt/PreMiD/assets/appIcon.png $out/share/pixmaps/${pname}.png
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = "PreMiD";
+      icon = pname;
+      desktopName = "PreMiD";
+      genericName = meta.description;
+      mimeTypes = [ "x-scheme-handler/premid" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "A simple, configurable utility to show your web activity as playing status on Discord";
+    homepage = "https://premid.app";
+    downloadPage = "https://premid.app/downloads";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ natto1784 ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "premid";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/printrun/default.nix b/nixpkgs/pkgs/applications/misc/printrun/default.nix
new file mode 100644
index 000000000000..61acdd32857c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/printrun/default.nix
@@ -0,0 +1,50 @@
+{ lib, python3Packages, fetchFromGitHub, glib, wrapGAppsHook }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "printrun";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "kliment";
+    repo = "Printrun";
+    rev = "refs/tags/printrun-${version}";
+    hash = "sha256-GmTA/C45MuptN/Y0KjpFjaLV3sWoM4rHz8AMfV9sf4U=";
+  };
+
+  postPatch = ''
+    substituteInPlace requirements.txt \
+      --replace "pyglet >= 1.1, < 2.0" "pyglet" \
+      --replace "cairosvg >= 1.0.9, < 2.6.0" "cairosvg"
+    sed -i -r "s|/usr(/local)?/share/|$out/share/|g" printrun/utils.py
+  '';
+
+  nativeBuildInputs = [ glib wrapGAppsHook ];
+
+  propagatedBuildInputs = with python3Packages; [
+    appdirs cython dbus-python numpy six wxpython psutil pyglet pyopengl pyserial cffi cairosvg lxml
+  ];
+
+  # pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to "None"
+  doCheck = false;
+
+  setupPyBuildFlags = ["-i"];
+
+  postInstall = ''
+    for f in $out/share/applications/*.desktop; do
+      sed -i -e "s|/usr/|$out/|g" "$f"
+    done
+  '';
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Pronterface, Pronsole, and Printcore - Pure Python 3d printing host software";
+    homepage = "https://github.com/kliment/Printrun";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/process-compose/default.nix b/nixpkgs/pkgs/applications/misc/process-compose/default.nix
new file mode 100644
index 000000000000..e286e782a6e8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/process-compose/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, installShellFiles
+}:
+
+let config-module = "github.com/f1bonacc1/process-compose/src/config";
+in
+buildGoModule rec {
+  pname = "process-compose";
+  version = "0.85.0";
+
+  src = fetchFromGitHub {
+    owner = "F1bonacc1";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-UH9nC+vqG3nRpv1HkfxW/vQ6ZSZFF7+vpHm93ZQcMrA=";
+    # populate values that require us to use git. By doing this in postFetch we
+    # can delete .git afterwards and maintain better reproducibility of the src.
+    leaveDotGit = true;
+    postFetch = ''
+      cd "$out"
+      git rev-parse --short HEAD > $out/COMMIT
+      # in format of 0000-00-00T00:00:00Z
+      date -u -d "@$(git log -1 --pretty=%ct)" "+%Y-%m-%dT%H:%M:%SZ" > $out/SOURCE_DATE_EPOCH
+      find "$out" -name .git -print0 | xargs -0 rm -rf
+    '';
+  };
+
+  # ldflags based on metadata from git and source
+  preBuild = ''
+    ldflags+=" -X ${config-module}.Commit=$(cat COMMIT)"
+    ldflags+=" -X ${config-module}.Date=$(cat SOURCE_DATE_EPOCH)"
+  '';
+
+  ldflags = [
+    "-X ${config-module}.Version=v${version}"
+    "-s"
+    "-w"
+  ];
+
+  nativeBuildInputs = [
+    installShellFiles
+  ];
+
+  vendorHash = "sha256-LZb/2yuJYqppsOxZoOkTZPMxYSSIJjVDzsqJ8SP7N9k=";
+
+  doCheck = false;
+
+  postInstall = ''
+    mv $out/bin/{src,process-compose}
+
+    installShellCompletion --cmd process-compose \
+      --bash <($out/bin/process-compose completion bash) \
+      --zsh <($out/bin/process-compose completion zsh) \
+      --fish <($out/bin/process-compose completion fish)
+  '';
+
+  meta = with lib; {
+    description = "A simple and flexible scheduler and orchestrator to manage non-containerized applications";
+    homepage = "https://github.com/F1bonacc1/process-compose";
+    changelog = "https://github.com/F1bonacc1/process-compose/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ thenonameguy ];
+    mainProgram = "process-compose";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/process-viewer/default.nix b/nixpkgs/pkgs/applications/misc/process-viewer/default.nix
new file mode 100644
index 000000000000..f453009e0c81
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/process-viewer/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, gtk4
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "process-viewer";
+  version = "0.5.8";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-mEmtLCtHlrCurjKKJ3vEtEkLBik4LwuUED5UeQ1QLws=";
+  };
+
+  cargoSha256 = "sha256-lgVByl+mpCDbhwlC1Eiw9ZkHIDYJsOR06Ds790pXOMc=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ gtk4 ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.Foundation
+  ];
+
+  postInstall = ''
+    install -Dm644 assets/fr.guillaume_gomez.ProcessViewer.desktop -t $out/share/applications
+    install -Dm644 assets/fr.guillaume_gomez.ProcessViewer.svg -t $out/share/icons/hicolor/scalable/apps
+    install -Dm644 assets/fr.guillaume_gomez.ProcessViewer.metainfo.xml -t $out/share/metainfo
+  '';
+
+  meta = with lib; {
+    description = "A process viewer GUI in rust";
+    homepage = "https://github.com/guillaumegomez/process-viewer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "process_viewer";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/procmail/default.nix b/nixpkgs/pkgs/applications/misc/procmail/default.nix
new file mode 100644
index 000000000000..661bbd22be85
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/procmail/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, fetchpatch }:
+
+stdenv.mkDerivation rec {
+  pname = "procmail";
+  version = "3.24";
+
+  src = fetchurl {
+    url = "https://github.com/BuGlessRB/procmail/archive/refs/tags/v${version}.tar.gz";
+    sha256 = "UU6kMzOXg+ld+TIeeUdx5Ih7mCOsVf2yRpcCz2m9OYk=";
+  };
+
+  patches = [
+    # Fix clang-16 and gcc-14 build failures:
+    #   https://github.com/BuGlessRB/procmail/pull/7
+    (fetchpatch {
+      name = "clang-16.patch";
+      url = "https://github.com/BuGlessRB/procmail/commit/8cfd570fd14c8fb9983859767ab1851bfd064b64.patch";
+      hash = "sha256-CaQeDKwF0hNOrxioBj7EzkCdJdsq44KwkfA9s8xK88g=";
+    })
+  ];
+
+  # getline is defined differently in glibc now. So rename it.
+  # Without the .PHONY target "make install" won't install anything on Darwin.
+  postPatch = ''
+    sed -i Makefile \
+      -e "s%^RM.*$%#%" \
+      -e "s%^BASENAME.*%\BASENAME=$out%" \
+      -e "s%^LIBS=.*%LIBS=-lm%"
+    sed -e "s%getline%thisgetline%g" -i src/*.c src/*.h
+    sed -e "3i\
+    .PHONY: install
+    " -i Makefile
+  '';
+
+  meta = with lib; {
+    description = "Mail processing and filtering utility";
+    homepage = "https://github.com/BuGlessRB/procmail/";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ gebner ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/projectlibre/default.nix b/nixpkgs/pkgs/applications/misc/projectlibre/default.nix
new file mode 100644
index 000000000000..ceb61d71866c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/projectlibre/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchgit, ant, jdk, makeWrapper, jre, coreutils, which }:
+
+stdenv.mkDerivation rec {
+  pname = "projectlibre";
+  version = "1.7.0";
+
+  src = fetchgit {
+    url = "https://git.code.sf.net/p/projectlibre/code";
+    rev = "0c939507cc63e9eaeb855437189cdec79e9386c2"; # version 1.7.0 was not tagged
+    sha256 = "0vy5vgbp45ai957gaby2dj1hvmbxfdlfnwcanwqm9f8q16qipdbq";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ ant jdk ];
+  buildPhase = ''
+    export ANT_OPTS=-Dbuild.sysclasspath=ignore
+    ${ant}/bin/ant -f openproj_build/build.xml
+  '';
+
+  resourcesPath = "openproj_build/resources";
+  desktopItem = "${resourcesPath}/projectlibre.desktop";
+
+  installPhase = ''
+    mkdir -p $out/share/{applications,projectlibre/samples,pixmaps,doc/projectlibre} $out/bin
+
+    substitute $resourcesPath/projectlibre $out/bin/projectlibre \
+      --replace "\"/usr/share/projectlibre\"" "\"$out/share/projectlibre\""
+    chmod +x $out/bin/projectlibre
+    wrapProgram $out/bin/projectlibre \
+     --prefix PATH : "${jre}/bin:${coreutils}/bin:${which}/bin"
+
+    cp -R openproj_build/dist/* $out/share/projectlibre
+    cp -R openproj_build/license $out/share/doc/projectlibre
+    cp $desktopItem $out/share/applications
+    cp $resourcesPath/projectlibre.png $out/share/pixmaps
+    cp -R $resourcesPath/samples/* $out/share/projectlibre/samples
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.projectlibre.com/";
+    description = "Project-Management Software similar to MS-Project";
+    maintainers = [ maintainers.Mogria ];
+    license = licenses.cpal10;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/protonup-qt/default.nix b/nixpkgs/pkgs/applications/misc/protonup-qt/default.nix
new file mode 100644
index 000000000000..24cc1f5438ec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/protonup-qt/default.nix
@@ -0,0 +1,34 @@
+{ appimageTools, fetchurl, lib }:
+let
+  pname = "protonup-qt";
+  version = "2.9.1";
+  src = fetchurl {
+    url = "https://github.com/DavidoTek/ProtonUp-Qt/releases/download/v${version}/ProtonUp-Qt-${version}-x86_64.AppImage";
+    hash = "sha256-rT+vRYGE62SMBYhCsxYc9gnvKpOkqz0Qkr9QtKQx/Uc=";
+  };
+  appimageContents = appimageTools.extractType2 { inherit pname version src; };
+in
+appimageTools.wrapType2 {
+  inherit pname version src;
+
+  extraInstallCommands = ''
+    mv $out/bin/{${pname}-${version},${pname}}
+    mkdir -p $out/share/{applications,pixmaps}
+    cp ${appimageContents}/net.davidotek.pupgui2.desktop $out/share/applications/${pname}.desktop
+    cp ${appimageContents}/net.davidotek.pupgui2.png $out/share/pixmaps/${pname}.png
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=net.davidotek.pupgui2' 'Exec=${pname}' \
+      --replace 'Icon=net.davidotek.pupgui2' 'Icon=${pname}'
+  '';
+
+  meta = with lib; {
+    homepage = "https://davidotek.github.io/protonup-qt/";
+    description = "Install and manage Proton-GE and Luxtorpeda for Steam and Wine-GE for Lutris with this graphical user interface.";
+    license = licenses.gpl3;
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    mainProgram = "protonup-qt";
+    changelog = "https://github.com/DavidoTek/ProtonUp-Qt/releases/tag/v${version}";
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ michaelBelsanti ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/prusa-slicer/default.nix b/nixpkgs/pkgs/applications/misc/prusa-slicer/default.nix
new file mode 100644
index 000000000000..724bfcc4ecce
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/prusa-slicer/default.nix
@@ -0,0 +1,200 @@
+{ stdenv
+, lib
+, binutils
+, fetchFromGitHub
+, cmake
+, pkg-config
+, wrapGAppsHook
+, boost
+, cereal
+, cgal
+, curl
+, darwin
+, dbus
+, eigen
+, expat
+, glew
+, glib
+, gmp
+, gtk3
+, hicolor-icon-theme
+, ilmbase
+, libpng
+, mpfr
+, nanosvg
+, nlopt
+, opencascade-occt
+, openvdb
+, pcre
+, qhull
+, tbb_2021_8
+, wxGTK32
+, xorg
+, libbgcode
+, heatshrink
+, catch2
+, withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd, systemd
+, wxGTK-override ? null
+}:
+let
+  wxGTK-prusa = wxGTK32.overrideAttrs (old: rec {
+    pname = "wxwidgets-prusa3d-patched";
+    version = "3.2.0";
+    configureFlags = old.configureFlags ++ [ "--disable-glcanvasegl" ];
+    patches = [ ./wxWidgets-Makefile.in-fix.patch ];
+    src = fetchFromGitHub {
+      owner = "prusa3d";
+      repo = "wxWidgets";
+      rev = "78aa2dc0ea7ce99dc19adc1140f74c3e2e3f3a26";
+      hash = "sha256-rYvmNmvv48JSKVT4ph9AS+JdstnLSRmcpWz1IdgBzQo=";
+      fetchSubmodules = true;
+    };
+  });
+  nanosvg-fltk = nanosvg.overrideAttrs (old: rec {
+    pname = "nanosvg-fltk";
+    version = "unstable-2022-12-22";
+
+    src = fetchFromGitHub {
+      owner = "fltk";
+      repo = "nanosvg";
+      rev = "abcd277ea45e9098bed752cf9c6875b533c0892f";
+      hash = "sha256-WNdAYu66ggpSYJ8Kt57yEA4mSTv+Rvzj9Rm1q765HpY=";
+    };
+  });
+  openvdb_tbb_2021_8 = openvdb.override { tbb = tbb_2021_8; };
+  wxGTK-override' = if wxGTK-override == null then wxGTK-prusa else wxGTK-override;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "prusa-slicer";
+  version = "2.7.1";
+
+  src = fetchFromGitHub {
+    owner = "prusa3d";
+    repo = "PrusaSlicer";
+    hash = "sha256-hSHeh3qJroCFnzeoVz6LKtCK8r0ealWSFz9cW4xvSb8=";
+    rev = "version_${finalAttrs.version}";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    binutils
+    boost
+    cereal
+    cgal
+    curl
+    dbus
+    eigen
+    expat
+    glew
+    glib
+    gmp
+    gtk3
+    hicolor-icon-theme
+    ilmbase
+    libpng
+    mpfr
+    nanosvg-fltk
+    nlopt
+    opencascade-occt
+    openvdb_tbb_2021_8
+    pcre
+    qhull
+    tbb_2021_8
+    wxGTK-override'
+    xorg.libX11
+    libbgcode
+    heatshrink
+    catch2
+  ] ++ lib.optionals withSystemd [
+    systemd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.CoreWLAN
+  ];
+
+  separateDebugInfo = true;
+
+  # The build system uses custom logic - defined in
+  # cmake/modules/FindNLopt.cmake in the package source - for finding the nlopt
+  # library, which doesn't pick up the package in the nix store.  We
+  # additionally need to set the path via the NLOPT environment variable.
+  NLOPT = nlopt;
+
+  # prusa-slicer uses dlopen on `libudev.so` at runtime
+  NIX_LDFLAGS = lib.optionalString withSystemd "-ludev";
+
+  prePatch = ''
+    # Since version 2.5.0 of nlopt we need to link to libnlopt, as libnlopt_cxx
+    # now seems to be integrated into the main lib.
+    sed -i 's|nlopt_cxx|nlopt|g' cmake/modules/FindNLopt.cmake
+
+    # Disable slic3r_jobs_tests.cpp as the test fails sometimes
+    sed -i 's|slic3r_jobs_tests.cpp||g' tests/slic3rutils/CMakeLists.txt
+
+    # prusa-slicer expects the OCCTWrapper shared library in the same folder as
+    # the executable when loading STEP files. We force the loader to find it in
+    # the usual locations (i.e. LD_LIBRARY_PATH) instead. See the manpage
+    # dlopen(3) for context.
+    if [ -f "src/libslic3r/Format/STEP.cpp" ]; then
+      substituteInPlace src/libslic3r/Format/STEP.cpp \
+        --replace 'libpath /= "OCCTWrapper.so";' 'libpath = "OCCTWrapper.so";'
+    fi
+    # https://github.com/prusa3d/PrusaSlicer/issues/9581
+    if [ -f "cmake/modules/FindEXPAT.cmake" ]; then
+      rm cmake/modules/FindEXPAT.cmake
+    fi
+
+    # Fix resources folder location on macOS
+    substituteInPlace src/PrusaSlicer.cpp \
+      --replace "#ifdef __APPLE__" "#if 0"
+  '';
+
+  cmakeFlags = [
+    "-DSLIC3R_STATIC=0"
+    "-DSLIC3R_FHS=1"
+    "-DSLIC3R_GTK=3"
+  ];
+
+  postInstall = ''
+    ln -s "$out/bin/prusa-slicer" "$out/bin/prusa-gcodeviewer"
+
+    mkdir -p "$out/lib"
+    mv -v $out/bin/*.* $out/lib/
+
+    mkdir -p "$out/share/pixmaps/"
+    ln -s "$out/share/PrusaSlicer/icons/PrusaSlicer.png" "$out/share/pixmaps/PrusaSlicer.png"
+    ln -s "$out/share/PrusaSlicer/icons/PrusaSlicer-gcodeviewer_192px.png" "$out/share/pixmaps/PrusaSlicer-gcodeviewer.png"
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH : "$out/lib"
+    )
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+
+    ctest \
+      --force-new-ctest-process \
+      -E 'libslic3r_tests|sla_print_tests'
+
+    runHook postCheck
+  '';
+
+  meta = with lib; {
+    description = "G-code generator for 3D printer";
+    homepage = "https://github.com/prusa3d/PrusaSlicer";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ moredread tweber tmarkus ];
+    platforms = platforms.unix;
+  } // lib.optionalAttrs (stdenv.isDarwin) {
+    mainProgram = "PrusaSlicer";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/prusa-slicer/super-slicer.nix b/nixpkgs/pkgs/applications/misc/prusa-slicer/super-slicer.nix
new file mode 100644
index 000000000000..88423e36a956
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/prusa-slicer/super-slicer.nix
@@ -0,0 +1,106 @@
+{ lib, fetchFromGitHub, fetchpatch, makeDesktopItem, wxGTK31, prusa-slicer, libspnav }:
+let
+  appname = "SuperSlicer";
+  pname = "super-slicer";
+  description = "PrusaSlicer fork with more features and faster development cycle";
+
+  patches = [
+    # Fix compile error with boost 1.79. See https://github.com/supermerill/SuperSlicer/issues/2823
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/gentoo/gentoo/81e3ca3b7c131e8345aede89e3bbcd700e1ad567/media-gfx/superslicer/files/superslicer-2.4.58.3-boost-1.79-port-v2.patch";
+      # Excludes Linux-only patches
+      excludes = [
+        "src/slic3r/GUI/FreeCADDialog.cpp"
+        "src/slic3r/GUI/Tab.cpp"
+        "src/slic3r/Utils/Http.cpp"
+      ];
+      sha256 = "sha256-v0q2MhySayij7+qBTE5q01IOq/DyUcWnjpbzB/AV34c=";
+    })
+  ];
+
+  versions = {
+    stable = {
+      version = "2.3.57.12";
+      sha256 = "sha256-lePhDRHI++9zs54bTt2/Lu6ZQ7egjJCWb752aI0s7Mw==";
+      patches = null;
+    };
+    latest = {
+      version = "2.4.58.5";
+      sha256 = "sha256-UywxEGedXaBUTKojEkbkuejI6SdPSkPxTJMwUDNW6W0=";
+      inherit patches;
+    };
+    beta = {
+      version = "2.5.59.6";
+      sha256 = "sha256-4ivhkcvVw5NlPsDz3J840aWc0qnp/XzCnTTCICwi3/c=";
+      inherit patches;
+    };
+  };
+
+  override = { version, sha256, patches }: super: {
+    inherit version pname patches;
+
+    src = fetchFromGitHub {
+      owner = "supermerill";
+      repo = "SuperSlicer";
+      inherit sha256;
+      rev = version;
+      fetchSubmodules = true;
+    };
+
+    # - wxScintilla is not used on macOS
+    # - Partially applied upstream changes cause a bug when trying to link against a nonexistent libexpat
+    prePatch = super.prePatch + ''
+      substituteInPlace src/CMakeLists.txt \
+        --replace "scintilla" "" \
+        --replace "list(APPEND wxWidgets_LIBRARIES libexpat)" "list(APPEND wxWidgets_LIBRARIES EXPAT::EXPAT)"
+
+      substituteInPlace src/libslic3r/CMakeLists.txt \
+        --replace "libexpat" "EXPAT::EXPAT"
+    '';
+
+    # We don't need PS overrides anymore, and gcode-viewer is embedded in the binary.
+    postInstall = null;
+    separateDebugInfo = true;
+
+    buildInputs = super.buildInputs ++ [
+      libspnav
+    ];
+
+    desktopItems = [
+      (makeDesktopItem {
+        name = "superslicer";
+        exec = "superslicer";
+        icon = appname;
+        comment = description;
+        desktopName = appname;
+        genericName = "3D printer tool";
+        categories = [ "Development" ];
+      })
+    ];
+
+    meta = with lib; {
+      inherit description;
+      homepage = "https://github.com/supermerill/SuperSlicer";
+      license = licenses.agpl3;
+      maintainers = with maintainers; [ cab404 moredread tmarkus ];
+      mainProgram = "superslicer";
+    };
+
+    passthru = allVersions;
+
+  };
+ wxGTK31-prusa = wxGTK31.overrideAttrs (old: rec {
+    pname = "wxwidgets-prusa3d-patched";
+    version = "3.1.4";
+    src = fetchFromGitHub {
+      owner = "prusa3d";
+      repo = "wxWidgets";
+      rev = "489f6118256853cf5b299d595868641938566cdb";
+      hash = "sha256-xGL5I2+bPjmZGSTYe1L7VAmvLHbwd934o/cxg9baEvQ=";
+      fetchSubmodules = true;
+    };
+  });
+  prusa-slicer-wxGTK-override = prusa-slicer.override { wxGTK-override = wxGTK31-prusa; };
+  allVersions = builtins.mapAttrs (_name: version: (prusa-slicer-wxGTK-override.overrideAttrs (override version))) versions;
+in
+allVersions.stable
diff --git a/nixpkgs/pkgs/applications/misc/prusa-slicer/wxWidgets-Makefile.in-fix.patch b/nixpkgs/pkgs/applications/misc/prusa-slicer/wxWidgets-Makefile.in-fix.patch
new file mode 100644
index 000000000000..aadf9765882d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/prusa-slicer/wxWidgets-Makefile.in-fix.patch
@@ -0,0 +1,112 @@
+diff --git a/Makefile.in b/Makefile.in
+index 8f33aa2ff4..39928382da 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -4358,7 +4358,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS =  \
+ 	monodll_msw_utils.o \
+ 	monodll_utilsexc.o \
+ 	monodll_fswatcher.o \
+-	monodll_msw_secretstore.o
++	monodll_msw_secretstore.o \
+ 	monodll_msw_uilocale.o
+ @COND_PLATFORM_WIN32_1@__BASE_PLATFORM_SRC_OBJECTS = $(COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS)
+ @COND_PLATFORM_WIN32_1@__BASE_AND_GUI_PLATFORM_SRC_OBJECTS \
+@@ -5284,7 +5284,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS =  \
+ 	monodll_uuid.o \
+ 	monodll_msw_evtloop.o \
+ 	monodll_access.o \
+-	monodll_dark_mode.o
++	monodll_dark_mode.o \
+ 	monodll_msw_bmpbndl.o
+ @COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS)
+ @COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS = \
+@@ -6196,7 +6196,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_1 =  \
+ 	monodll_uuid.o \
+ 	monodll_msw_evtloop.o \
+ 	monodll_access.o \
+-	monodll_dark_mode.o
++	monodll_dark_mode.o \
+ 	monodll_msw_bmpbndl.o
+ @COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_1 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_1)
+ @COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_1 = \
+@@ -6371,7 +6371,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_1 =  \
+ 	monolib_msw_utils.o \
+ 	monolib_utilsexc.o \
+ 	monolib_fswatcher.o \
+-	monolib_msw_secretstore.o
++	monolib_msw_secretstore.o \
+ 	monolib_msw_uilocale.o
+ @COND_PLATFORM_WIN32_1@__BASE_PLATFORM_SRC_OBJECTS_1 = $(COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_1)
+ @COND_PLATFORM_WIN32_1@__BASE_AND_GUI_PLATFORM_SRC_OBJECTS_1 \
+@@ -7297,7 +7297,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_2 =  \
+ 	monolib_uuid.o \
+ 	monolib_msw_evtloop.o \
+ 	monolib_access.o \
+-	monolib_dark_mode.o
++	monolib_dark_mode.o \
+ 	monolib_msw_bmpbndl.o
+ @COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_2 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_2)
+ @COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_2 = \
+@@ -8209,7 +8209,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_3 =  \
+ 	monolib_uuid.o \
+ 	monolib_msw_evtloop.o \
+ 	monolib_access.o \
+-	monolib_dark_mode.o
++	monolib_dark_mode.o \
+ 	monolib_msw_bmpbndl.o
+ @COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_3 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_3)
+ @COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_3 = \
+@@ -8436,7 +8436,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_2 =  \
+ 	basedll_msw_utils.o \
+ 	basedll_utilsexc.o \
+ 	basedll_fswatcher.o \
+-	basedll_msw_secretstore.o
++	basedll_msw_secretstore.o \
+ 	basedll_msw_uilocale.o
+ @COND_PLATFORM_WIN32_1@__BASE_PLATFORM_SRC_OBJECTS_2 = $(COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_2)
+ @COND_PLATFORM_WIN32_1@__BASE_AND_GUI_PLATFORM_SRC_OBJECTS_2 \
+@@ -8523,7 +8523,7 @@ COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_3 =  \
+ 	baselib_msw_utils.o \
+ 	baselib_utilsexc.o \
+ 	baselib_fswatcher.o \
+-	baselib_msw_secretstore.o
++	baselib_msw_secretstore.o \
+ 	baselib_msw_uilocale.o
+ @COND_PLATFORM_WIN32_1@__BASE_PLATFORM_SRC_OBJECTS_3 = $(COND_PLATFORM_WIN32_1___BASE_PLATFORM_SRC_OBJECTS_3)
+ @COND_PLATFORM_WIN32_1@__BASE_AND_GUI_PLATFORM_SRC_OBJECTS_3 \
+@@ -9464,7 +9464,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_4 =  \
+ 	coredll_uuid.o \
+ 	coredll_msw_evtloop.o \
+ 	coredll_access.o \
+-	coredll_dark_mode.o
++	coredll_dark_mode.o \
+ 	coredll_msw_bmpbndl.o
+ @COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_4 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_4)
+ @COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_4 = \
+@@ -10376,7 +10376,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_5 =  \
+ 	coredll_uuid.o \
+ 	coredll_msw_evtloop.o \
+ 	coredll_access.o \
+-	coredll_dark_mode.o
++	coredll_dark_mode.o \
+ 	coredll_msw_bmpbndl.o
+ @COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_5 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_5)
+ @COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_5 = \
+@@ -11204,7 +11204,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_6 =  \
+ 	corelib_uuid.o \
+ 	corelib_msw_evtloop.o \
+ 	corelib_access.o \
+-	corelib_dark_mode.o
++	corelib_dark_mode.o \
+ 	corelib_msw_bmpbndl.o
+ @COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_6 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_6)
+ @COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_6 = \
+@@ -12116,7 +12116,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_7 =  \
+ 	corelib_uuid.o \
+ 	corelib_msw_evtloop.o \
+ 	corelib_access.o \
+-	corelib_dark_mode.o
++	corelib_dark_mode.o \
+ 	corelib_msw_bmpbndl.o
+ @COND_TOOLKIT_MSW@__LOWLEVEL_SRC_OBJECTS_7 = $(COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_7)
+ @COND_TOOLKIT_OSX_COCOA@__LOWLEVEL_SRC_OBJECTS_7 = \
diff --git a/nixpkgs/pkgs/applications/misc/psi-notify/default.nix b/nixpkgs/pkgs/applications/misc/psi-notify/default.nix
new file mode 100644
index 000000000000..b984cc5cd5c3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/psi-notify/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, systemd, libnotify, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "psi-notify";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "cdown";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-GhGiSI5r0Ki6+MYNa5jCDyYZEW5R9LDNZ/S8K+6L0jo=";
+  };
+
+  buildInputs = [ systemd libnotify ];
+  nativeBuildInputs = [ pkg-config ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D psi-notify $out/bin/psi-notify
+    substituteInPlace psi-notify.service --replace psi-notify $out/bin/psi-notify
+    install -D psi-notify.service $out/lib/systemd/user/psi-notify.service
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Alert on system resource saturation";
+    longDescription = ''
+      psi-notify can alert you when resources on your machine are becoming
+      oversaturated, and allow you to take action before your system slows to a
+      crawl.
+    '';
+    license = licenses.mit;
+    homepage = "https://github.com/cdown/psi-notify";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ eduarrrd ];
+    mainProgram = "psi-notify";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pstree/default.nix b/nixpkgs/pkgs/applications/misc/pstree/default.nix
new file mode 100644
index 000000000000..7b979d486faa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pstree/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "pstree";
+  version = "2.39";
+
+  src = fetchurl {
+    urls = [
+      "https://distfiles.macports.org/${pname}/${pname}-${version}.tar.gz"
+      "https://fossies.org/linux/misc/${pname}-${version}.tar.gz"
+      "ftp://ftp.thp.uni-duisburg.de/pub/source/${pname}-${version}.tar.gz"
+    ];
+    sha256 = "17s7v15c4gryjpi11y1xq75022nkg4ggzvjlq2dkmyg67ssc76vw";
+  };
+
+  sourceRoot = ".";
+  buildPhase = ''
+    runHook preBuild
+    $CC $NIX_CFLAGS -o pstree pstree.c
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm0555 ${pname} -t $out/bin
+    install -Dm0444 ${pname}.1 -t $out/share/man/man1
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Show the set of running processes as a tree";
+    homepage = "http://www.thp.uni-duisburg.de/pstree/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.c0bw3b ];
+    platforms = platforms.unix;
+    priority = 5; # Lower than psmisc also providing pstree on Linux platforms
+    mainProgram = "pstree";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pt/.bundle/config b/nixpkgs/pkgs/applications/misc/pt/.bundle/config
new file mode 100644
index 000000000000..88cb2d529351
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pt/.bundle/config
@@ -0,0 +1,2 @@
+---
+BUNDLE_NO_INSTALL: true
diff --git a/nixpkgs/pkgs/applications/misc/pt/Gemfile b/nixpkgs/pkgs/applications/misc/pt/Gemfile
new file mode 100644
index 000000000000..ed2136ea5b85
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pt/Gemfile
@@ -0,0 +1,3 @@
+source "https://rubygems.org"
+
+gem 'pt'
diff --git a/nixpkgs/pkgs/applications/misc/pt/Gemfile.lock b/nixpkgs/pkgs/applications/misc/pt/Gemfile.lock
new file mode 100644
index 000000000000..dfaa018d3724
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pt/Gemfile.lock
@@ -0,0 +1,69 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.6.0)
+      public_suffix (>= 2.0.2, < 4.0)
+    axiom-types (0.1.1)
+      descendants_tracker (~> 0.0.4)
+      ice_nine (~> 0.11.0)
+      thread_safe (~> 0.3, >= 0.3.1)
+    coercible (1.0.0)
+      descendants_tracker (~> 0.0.1)
+    colored (1.2)
+    declarative (0.0.10)
+    declarative-option (0.1.0)
+    descendants_tracker (0.0.4)
+      thread_safe (~> 0.3, >= 0.3.1)
+    equalizer (0.0.11)
+    excon (0.64.0)
+    faraday (0.9.2)
+      multipart-post (>= 1.2, < 3)
+    faraday_middleware (0.13.1)
+      faraday (>= 0.7.4, < 1.0)
+    highline (2.0.2)
+    hirb (0.7.3)
+    hirb-unicode (0.0.5)
+      hirb (~> 0.5)
+      unicode-display_width (~> 0.1.1)
+    ice_nine (0.11.2)
+    multi_json (1.13.1)
+    multipart-post (2.0.0)
+    pt (0.10.0)
+      colored (~> 1.2)
+      highline
+      hirb (~> 0.7, >= 0.7.3)
+      hirb-unicode (~> 0.0.5, >= 0.0.5)
+      thor
+      tracker_api (~> 1.6.0)
+    public_suffix (3.0.3)
+    representable (3.0.4)
+      declarative (< 0.1.0)
+      declarative-option (< 0.2.0)
+      uber (< 0.2.0)
+    thor (0.20.3)
+    thread_safe (0.3.6)
+    tracker_api (1.6.0)
+      addressable
+      equalizer
+      excon
+      faraday (~> 0.9.0)
+      faraday_middleware
+      multi_json
+      representable
+      virtus
+    uber (0.1.0)
+    unicode-display_width (0.1.1)
+    virtus (1.0.5)
+      axiom-types (~> 0.1)
+      coercible (~> 1.0)
+      descendants_tracker (~> 0.0, >= 0.0.3)
+      equalizer (~> 0.0, >= 0.0.9)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  pt
+
+BUNDLED WITH
+   2.1.4
diff --git a/nixpkgs/pkgs/applications/misc/pt/default.nix b/nixpkgs/pkgs/applications/misc/pt/default.nix
new file mode 100644
index 000000000000..2cbcbdd7faa0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pt/default.nix
@@ -0,0 +1,18 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "pt";
+  gemdir = ./.;
+  exes = [ "pt" ];
+
+  passthru.updateScript = bundlerUpdateScript "pt";
+
+  meta = with lib; {
+    description = "Minimalist command-line Pivotal Tracker client";
+    homepage    = "http://www.github.com/raul/pt";
+    license     = licenses.mit;
+    maintainers = with maintainers; [ ebzzry manveru nicknovitski ];
+    platforms   = platforms.unix;
+    mainProgram = "pt";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pt/gemset.nix b/nixpkgs/pkgs/applications/misc/pt/gemset.nix
new file mode 100644
index 000000000000..9cd83a90721d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pt/gemset.nix
@@ -0,0 +1,273 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0bcm2hchn897xjhqj9zzsxf3n9xhddymj4lsclz508f4vw3av46l";
+      type = "gem";
+    };
+    version = "2.6.0";
+  };
+  axiom-types = {
+    dependencies = ["descendants_tracker" "ice_nine" "thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10q3k04pll041mkgy0m5fn2b1lazm6ly1drdbcczl5p57lzi3zy1";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  coercible = {
+    dependencies = ["descendants_tracker"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p5azydlsz0nkxmcq0i1gzmcfq02lgxc4as7wmf47j1c6ljav0ah";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  colored = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0b0x5jmsyi0z69bm6sij1k89z7h0laag3cb4mdn7zkl9qmxb90lx";
+      type = "gem";
+    };
+    version = "1.2";
+  };
+  declarative = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0642xvwzzbgi3kp1bg467wma4g3xqrrn0sk369hjam7w579gnv5j";
+      type = "gem";
+    };
+    version = "0.0.10";
+  };
+  declarative-option = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g4ibxq566f1frnhdymzi9hxxcm4g2gw4n21mpjk2mhwym4q6l0p";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  descendants_tracker = {
+    dependencies = ["thread_safe"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15q8g3fcqyb41qixn6cky0k3p86291y7xsh1jfd851dvrza1vi79";
+      type = "gem";
+    };
+    version = "0.0.4";
+  };
+  equalizer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kjmx3fygx8njxfrwcmn7clfhjhb6bvv3scy2lyyi0wqyi3brra4";
+      type = "gem";
+    };
+    version = "0.0.11";
+  };
+  excon = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0vcplvlykirg2vc56jjxavgpkllzq26xgp7ind7wc5ikaqaz64gn";
+      type = "gem";
+    };
+    version = "0.64.0";
+  };
+  faraday = {
+    dependencies = ["multipart-post"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1kplqkpn2s2yl3lxdf6h7sfldqvkbkpxwwxhyk7mdhjplb5faqh6";
+      type = "gem";
+    };
+    version = "0.9.2";
+  };
+  faraday_middleware = {
+    dependencies = ["faraday"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a93rs58bakqck7bcihasz66a1riy22h2zpwrpmb13gp8mw3wkmr";
+      type = "gem";
+    };
+    version = "0.13.1";
+  };
+  highline = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1g0zpalfj8wvca86hcnirir5py2zyqrhkgdgv9f87fxkjaw815wr";
+      type = "gem";
+    };
+    version = "2.0.2";
+  };
+  hirb = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mzch3c2lvmf8gskgzlx6j53d10j42ir6ik2dkrl27sblhy76cji";
+      type = "gem";
+    };
+    version = "0.7.3";
+  };
+  hirb-unicode = {
+    dependencies = ["hirb" "unicode-display_width"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1b7hka1p4mkjdy2wr2cxsivnsmnz31zz1bswznmmxnvf5a6c00jk";
+      type = "gem";
+    };
+    version = "0.0.5";
+  };
+  ice_nine = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1nv35qg1rps9fsis28hz2cq2fx1i96795f91q4nmkm934xynll2x";
+      type = "gem";
+    };
+    version = "0.11.2";
+  };
+  multi_json = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1rl0qy4inf1mp8mybfk56dfga0mvx97zwpmq5xmiwl5r770171nv";
+      type = "gem";
+    };
+    version = "1.13.1";
+  };
+  multipart-post = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09k0b3cybqilk1gwrwwain95rdypixb2q9w65gd44gfzsd84xi1x";
+      type = "gem";
+    };
+    version = "2.0.0";
+  };
+  pt = {
+    dependencies = ["colored" "highline" "hirb" "hirb-unicode" "thor" "tracker_api"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1ypyya7bk0w7zd9c3224zsizhv5wbs1icjpn0023wh3ii1by16a8";
+      type = "gem";
+    };
+    version = "0.10.0";
+  };
+  public_suffix = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08q64b5br692dd3v0a9wq9q5dvycc6kmiqmjbdxkxbfizggsvx6l";
+      type = "gem";
+    };
+    version = "3.0.3";
+  };
+  representable = {
+    dependencies = ["declarative" "declarative-option" "uber"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qm9rgi1j5a6nv726ka4mmixivlxfsg91h8rpp72wwd4vqbkkm07";
+      type = "gem";
+    };
+    version = "3.0.4";
+  };
+  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";
+  };
+  tracker_api = {
+    dependencies = ["addressable" "equalizer" "excon" "faraday" "faraday_middleware" "multi_json" "representable" "virtus"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0pxwzbjzxign81wynl44napkvkrrhlyl7rm4ywrcdqahmzxmavsp";
+      type = "gem";
+    };
+    version = "1.6.0";
+  };
+  uber = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1p1mm7mngg40x05z52md3mbamkng0zpajbzqjjwmsyw0zw3v9vjv";
+      type = "gem";
+    };
+    version = "0.1.0";
+  };
+  unicode-display_width = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06dpm3yqc974qfy6nyx7b0w0f6b8k08jadd5l9xnmla3fji6c405";
+      type = "gem";
+    };
+    version = "0.1.1";
+  };
+  virtus = {
+    dependencies = ["axiom-types" "coercible" "descendants_tracker" "equalizer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06iphwi3c4f7y9i2rvhvaizfswqbaflilziz4dxqngrdysgkn1fk";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ptask/default.nix b/nixpkgs/pkgs/applications/misc/ptask/default.nix
new file mode 100644
index 000000000000..739003720447
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ptask/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl, pkg-config, makeWrapper, gtk3, json_c, taskwarrior }:
+
+stdenv.mkDerivation rec {
+  pname = "ptask";
+  version = "1.0.0";
+
+  src = fetchurl {
+    url = "https://wpitchoune.net/ptask/files/ptask-${version}.tar.gz";
+    sha256 = "13nirr7b29bv3w2zc8zxphhmc9ayhs61i11jl4819nabk7vy1kdq";
+  };
+
+  buildInputs = [ gtk3 json_c ];
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+
+  patches = [ ./tw-version.patch ./json_c_is_error.patch ];
+
+  preFixup = ''
+    wrapProgram "$out/bin/ptask" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
+      --prefix PATH : "${taskwarrior}/bin"
+  '';
+
+  meta = with lib; {
+    homepage = "http://wpitchoune.net/ptask/";
+    description = "GTK-based GUI for taskwarrior";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.spacefrogg ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ptask/json_c_is_error.patch b/nixpkgs/pkgs/applications/misc/ptask/json_c_is_error.patch
new file mode 100644
index 000000000000..435c8b26e6f7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ptask/json_c_is_error.patch
@@ -0,0 +1,13 @@
+diff --git a/src/tw.c b/src/tw.c
+index 602f7b3..ca601cd 100644
+--- a/src/tw.c
++++ b/src/tw.c
+@@ -163,7 +163,7 @@ static struct json_object *task_exec_json(const char *opts)
+ 
+ 	free(cmd);
+ 
+-	if (o && is_error(o))
++	if (!o)
+ 		return NULL;
+ 
+ 	return o;
diff --git a/nixpkgs/pkgs/applications/misc/ptask/tw-version.patch b/nixpkgs/pkgs/applications/misc/ptask/tw-version.patch
new file mode 100644
index 000000000000..995fffeda2f8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ptask/tw-version.patch
@@ -0,0 +1,11 @@
+--- a/src/tw.c	2017-02-21 22:56:19.289037608 +0100
++++ b/src/tw.c	2017-02-21 22:57:04.726814256 +0100
+@@ -116,7 +116,7 @@
+ 	    || !strcmp(ver, "2.3.0")
+ 	    || !strcmp(ver, "2.4.0")
+ 	    || !strcmp(ver, "2.4.1")
+-	    || !strcmp(ver, "2.5.0"))
++	    || !strcmp(ver, "2.5.1"))
+ 		return 1;
+ 	else
+ 		return 0;
diff --git a/nixpkgs/pkgs/applications/misc/pueue/default.nix b/nixpkgs/pkgs/applications/misc/pueue/default.nix
new file mode 100644
index 000000000000..7e158853966b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pueue/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, Libsystem
+, SystemConfiguration
+, installShellFiles
+, libiconv
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pueue";
+  version = "3.3.3";
+
+  src = fetchFromGitHub {
+    owner = "Nukesor";
+    repo = "pueue";
+    rev = "v${version}";
+    hash = "sha256-Q1x97eJNjtET+L3KpWTXLKbz62XgkjxNZkAAZWhbMmM=";
+  };
+
+  cargoHash = "sha256-i9SPOZo9AuITm6iI++D3ipY8c0xfZzkeHW7tb9SZ3iQ=";
+
+  nativeBuildInputs = [
+    installShellFiles
+  ] ++ lib.optionals stdenv.isDarwin [
+    rustPlatform.bindgenHook
+  ];
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    Libsystem
+    SystemConfiguration
+    libiconv
+  ];
+
+  checkFlags = [
+    "--test client_tests"
+    "--skip=test_single_huge_payload"
+    "--skip=test_create_unix_socket"
+  ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/pueue completions $shell .
+    done
+    installShellCompletion pueue.{bash,fish} _pueue
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Nukesor/pueue";
+    description = "A daemon for managing long running shell commands";
+    longDescription = ''
+      Pueue is a command-line task management tool for sequential and parallel
+      execution of long-running tasks.
+
+      Simply put, it's a tool that processes a queue of shell commands. On top
+      of that, there are a lot of convenient features and abstractions.
+
+      Since Pueue is not bound to any terminal, you can control your tasks from
+      any terminal on the same machine. The queue will be continuously
+      processed, even if you no longer have any active ssh sessions.
+    '';
+    changelog = "https://github.com/Nukesor/pueue/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pure-maps/default.nix b/nixpkgs/pkgs/applications/misc/pure-maps/default.nix
new file mode 100644
index 000000000000..d1bfe4132583
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pure-maps/default.nix
@@ -0,0 +1,45 @@
+{ lib, mkDerivation, fetchFromGitHub
+, cmake, qttools, kirigami2, qtquickcontrols2, qtlocation, qtsensors
+, nemo-qml-plugin-dbus, mapbox-gl-qml, s2geometry
+, python3, pyotherside
+}:
+
+mkDerivation rec {
+  pname = "pure-maps";
+  version = "3.2.1";
+
+  src = fetchFromGitHub {
+    owner = "rinigus";
+    repo = "pure-maps";
+    rev = version;
+    hash = "sha256-AZt0JcNegHkUkWy+NW5CNLZfxjjFyKWBrhLJgSTv3to=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [
+    cmake python3 qttools python3.pkgs.wrapPython
+  ];
+
+  buildInputs = [
+    kirigami2 qtquickcontrols2 qtlocation qtsensors
+    nemo-qml-plugin-dbus pyotherside mapbox-gl-qml s2geometry
+  ];
+
+  cmakeFlags = [ "-DFLAVOR=kirigami" ];
+
+  pythonPath = with python3.pkgs; [ gpxpy ];
+
+  preInstall = ''
+    buildPythonPath "$pythonPath"
+    qtWrapperArgs+=(--prefix PYTHONPATH : "$program_PYTHONPATH")
+  '';
+
+  meta = with lib; {
+    description = "Display vector and raster maps, places, routes, and provide navigation instructions with a flexible selection of data and service providers";
+    homepage = "https://github.com/rinigus/pure-maps";
+    changelog = "https://github.com/rinigus/pure-maps/blob/${src.rev}/NEWS.md";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.Thra11 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pw-viz/Cargo.lock b/nixpkgs/pkgs/applications/misc/pw-viz/Cargo.lock
new file mode 100644
index 000000000000..aa97cc770b7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pw-viz/Cargo.lock
@@ -0,0 +1,2664 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "ab_glyph"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dcdbc68024b653943864d436fe8a24b028095bc1cf91a8926f8241e4aaffe59"
+dependencies = [
+ "ab_glyph_rasterizer",
+ "owned_ttf_parser",
+]
+
+[[package]]
+name = "ab_glyph_rasterizer"
+version = "0.1.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "330223a1aecc308757b9926e9391c9b47f8ef2dbd8aea9df88312aea18c5e8d6"
+
+[[package]]
+name = "accesskit"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3083ac5a97521e35388ca80cf365b6be5210962cc59f11ee238cd92ac2fa9524"
+dependencies = [
+ "enumset",
+ "kurbo",
+ "serde",
+]
+
+[[package]]
+name = "accesskit_consumer"
+version = "0.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52ca67e745149d4f118f67fcdfcf57c94aeb9b43672d4ccc9dc902c8e0abc433"
+dependencies = [
+ "accesskit",
+ "parking_lot",
+]
+
+[[package]]
+name = "accesskit_macos"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa024dd9711bc1003738f3869762b49a439d4b12df1e26dac75864149115197c"
+dependencies = [
+ "accesskit",
+ "accesskit_consumer",
+ "objc2",
+ "once_cell",
+ "parking_lot",
+]
+
+[[package]]
+name = "accesskit_windows"
+version = "0.10.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4423e748eaf38f23388f9b931abc1e026f2bf9c9f35a652a280e0ad9351fd2d"
+dependencies = [
+ "accesskit",
+ "accesskit_consumer",
+ "arrayvec 0.7.2",
+ "once_cell",
+ "parking_lot",
+ "paste",
+ "windows 0.42.0",
+]
+
+[[package]]
+name = "accesskit_winit"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f270416d033ab5b2a8fa72a976dfdad0db1ea194721f16cadbdb45ff219779f"
+dependencies = [
+ "accesskit",
+ "accesskit_macos",
+ "accesskit_windows",
+ "parking_lot",
+ "winit",
+]
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "ahash"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bf6ccdb167abbf410dcb915cabd428929d7f6a04980b54a11f26a39f1c7f7107"
+dependencies = [
+ "cfg-if 1.0.0",
+ "once_cell",
+ "serde",
+ "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 = "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.68"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
+
+[[package]]
+name = "arboard"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6041616acea41d67c4a984709ddab1587fd0b10efe5cc563fee954d2f011854"
+dependencies = [
+ "clipboard-win",
+ "log",
+ "objc",
+ "objc-foundation",
+ "objc_id",
+ "once_cell",
+ "parking_lot",
+ "thiserror",
+ "winapi",
+ "x11rb",
+]
+
+[[package]]
+name = "arrayref"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
+
+[[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.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+
+[[package]]
+name = "atomic_refcell"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "857253367827bd9d0fd973f0ef15506a96e79e41b0ad7aa691203a4e3214f6c8"
+
+[[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 = "bindgen"
+version = "0.59.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8"
+dependencies = [
+ "bitflags",
+ "cexpr",
+ "clang-sys",
+ "clap",
+ "env_logger",
+ "lazy_static",
+ "lazycell",
+ "log",
+ "peeking_take_while",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "which",
+]
+
+[[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 = "block-sys"
+version = "0.1.0-beta.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fa55741ee90902547802152aaf3f8e5248aab7e21468089560d4c8840561146"
+dependencies = [
+ "objc-sys",
+]
+
+[[package]]
+name = "block2"
+version = "0.2.0-alpha.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8dd9e63c1744f755c2f60332b88de39d341e5e86239014ad839bd71c106dec42"
+dependencies = [
+ "block-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
+
+[[package]]
+name = "bytemuck"
+version = "1.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aaa3a8d9a1ca92e282c96a32d6511b695d7d994d1d102ba85d279f9b2756947f"
+dependencies = [
+ "bytemuck_derive",
+]
+
+[[package]]
+name = "bytemuck_derive"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fe233b960f12f8007e3db2d136e3cb1c291bfd7396e384ee76025fc1a3932b4"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "bytes"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dfb24e866b15a1af2a1b663f10c6b6b8f397a84aadb828f12e5b289ec23a3a3c"
+
+[[package]]
+name = "calloop"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a59225be45a478d772ce015d9743e49e92798ece9e34eda9a6aa2a6a7f40192"
+dependencies = [
+ "log",
+ "nix 0.25.1",
+ "slotmap",
+ "thiserror",
+ "vec_map",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.78"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d"
+
+[[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.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa"
+dependencies = [
+ "smallvec",
+]
+
+[[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 = "cfg_aliases"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
+
+[[package]]
+name = "cgl"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "clang-sys"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa2e27ae6ab525c3d369ded447057bca5438d86dc3a68f6faafb8269ba82ebf3"
+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",
+ "unicode-width",
+ "vec_map",
+]
+
+[[package]]
+name = "clipboard-win"
+version = "4.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4ab1b92798304eedc095b53942963240037c0516452cb11aeba709d420b2219"
+dependencies = [
+ "error-code",
+ "str-buf",
+ "winapi",
+]
+
+[[package]]
+name = "cmake"
+version = "0.1.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db34956e100b30725f2eb215f90d4871051239535632f84fea3bc92722c66b7c"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "cocoa"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a"
+dependencies = [
+ "bitflags",
+ "block",
+ "cocoa-foundation",
+ "core-foundation",
+ "core-graphics",
+ "foreign-types 0.3.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "cocoa-foundation"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ade49b65d560ca58c403a479bb396592b155c0185eada742ee323d1d68d6318"
+dependencies = [
+ "bitflags",
+ "block",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.3.2",
+ "libc",
+ "objc",
+]
+
+[[package]]
+name = "colored"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
+dependencies = [
+ "atty",
+ "lazy_static",
+ "winapi",
+]
+
+[[package]]
+name = "combine"
+version = "4.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4"
+dependencies = [
+ "bytes",
+ "memchr",
+]
+
+[[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.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+
+[[package]]
+name = "core-graphics"
+version = "0.22.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "core-graphics-types",
+ "foreign-types 0.3.2",
+ "libc",
+]
+
+[[package]]
+name = "core-graphics-types"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a68b68b3446082644c91ac778bf50cd4104bfb002b5a6a7c44cca5a2c70788b"
+dependencies = [
+ "bitflags",
+ "core-foundation",
+ "foreign-types 0.3.2",
+ "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 0.3.2",
+ "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 = "crossfont"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21fd3add36ea31aba1520aa5288714dd63be506106753226d0eb387a93bc9c45"
+dependencies = [
+ "cocoa",
+ "core-foundation",
+ "core-foundation-sys",
+ "core-graphics",
+ "core-text",
+ "dwrote",
+ "foreign-types 0.5.0",
+ "freetype-rs",
+ "libc",
+ "log",
+ "objc",
+ "once_cell",
+ "pkg-config",
+ "servo-fontconfig",
+ "winapi",
+]
+
+[[package]]
+name = "cty"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35"
+
+[[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.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0dd3cd20dc6b5a876612a6e5accfe7f3dd883db6d07acfbf14c128f61550dfa"
+dependencies = [
+ "darling_core 0.14.2",
+ "darling_macro 0.14.2",
+]
+
+[[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_core"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a784d2ccaf7c98501746bf0be29b2022ba41fd62a2e622af997a03e9f972859f"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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",
+ "syn",
+]
+
+[[package]]
+name = "darling_macro"
+version = "0.14.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e"
+dependencies = [
+ "darling_core 0.14.2",
+ "quote",
+ "syn",
+]
+
+[[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 = "directories-next"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc"
+dependencies = [
+ "cfg-if 1.0.0",
+ "dirs-sys-next",
+]
+
+[[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-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 = "dispatch"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
+
+[[package]]
+name = "dlib"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1b7517328c04c2aa68422fc60a41b92208182142ed04a25879c26c8f878794"
+dependencies = [
+ "libloading",
+]
+
+[[package]]
+name = "downcast-rs"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
+
+[[package]]
+name = "dwrote"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439a1c2ba5611ad3ed731280541d36d2e9c4ac5e7fb818a27b604bdc5a6aa65b"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "serde",
+ "serde_derive",
+ "winapi",
+ "wio",
+]
+
+[[package]]
+name = "ecolor"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b601108bca3af7650440ace4ca55b2daf52c36f2635be3587d77b16efd8d0691"
+dependencies = [
+ "bytemuck",
+ "serde",
+]
+
+[[package]]
+name = "eframe"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ea929ec5819fef373728bb0e55003ce921975039cfec3ca8305bb024e5b7b32"
+dependencies = [
+ "bytemuck",
+ "directories-next",
+ "egui",
+ "egui-winit",
+ "egui_glow",
+ "glow",
+ "glutin",
+ "js-sys",
+ "percent-encoding",
+ "raw-window-handle 0.5.0",
+ "ron",
+ "serde",
+ "tracing",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winit",
+]
+
+[[package]]
+name = "egui"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65a5e883a316e53866977450eecfbcac9c48109c2ab3394af29feb83fcde4ea9"
+dependencies = [
+ "accesskit",
+ "ahash",
+ "epaint",
+ "nohash-hasher",
+ "ron",
+ "serde",
+ "tracing",
+]
+
+[[package]]
+name = "egui-winit"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5696bdbe60898b81157f07ae34fe02dbfd522174bd6e620942c269cd7307901f"
+dependencies = [
+ "accesskit_winit",
+ "arboard",
+ "egui",
+ "instant",
+ "serde",
+ "smithay-clipboard",
+ "tracing",
+ "webbrowser",
+ "winit",
+]
+
+[[package]]
+name = "egui_glow"
+version = "0.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d4b5960cb1bae1c403a6c9027a745210a41913433b10c73b6e7d76a1017f8b4"
+dependencies = [
+ "bytemuck",
+ "egui",
+ "glow",
+ "memoffset",
+ "tracing",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "egui_nodes"
+version = "0.1.4"
+source = "git+https://github.com/Ax9D/egui_nodes?rev=27167e4#27167e4b77e5c306e35d9d65ec7eb310cd25bc4f"
+dependencies = [
+ "derivative",
+ "egui",
+]
+
+[[package]]
+name = "either"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
+
+[[package]]
+name = "emath"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5277249c8c3430e7127e4f2c40a77485e7baf11ae132ce9b3253a8ed710df0a0"
+dependencies = [
+ "bytemuck",
+ "serde",
+]
+
+[[package]]
+name = "enumset"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19be8061a06ab6f3a6cf21106c873578bf01bd42ad15e0311a9c76161cb1c753"
+dependencies = [
+ "enumset_derive",
+ "serde",
+]
+
+[[package]]
+name = "enumset_derive"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03e7b551eba279bf0fa88b83a46330168c1560a52a94f5126f892f0b364ab3e0"
+dependencies = [
+ "darling 0.14.2",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "env_logger"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a12e6657c4c97ebab115a42dcee77225f7f482cdd841cf7088c657a42e9e00e7"
+dependencies = [
+ "atty",
+ "humantime",
+ "log",
+ "regex",
+ "termcolor",
+]
+
+[[package]]
+name = "epaint"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "de14b65fe5e423e0058f77a8beb2c863b056d0566d6c4ce0d097aa5814cb705a"
+dependencies = [
+ "ab_glyph",
+ "ahash",
+ "atomic_refcell",
+ "bytemuck",
+ "ecolor",
+ "emath",
+ "nohash-hasher",
+ "parking_lot",
+ "serde",
+]
+
+[[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-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "error-code"
+version = "2.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64f18991e7bf11e7ffee451b5318b5c1a73c52d0d0ada6e5a3017c8c1ced6a21"
+dependencies = [
+ "libc",
+ "str-buf",
+]
+
+[[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 = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[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 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.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c8469d0d40519bc608ec6863f1cc88f3f1deee15913f2f3b3e573d81ed38cccc"
+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 = "form_urlencoded"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+dependencies = [
+ "percent-encoding",
+]
+
+[[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 = "gethostname"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "gl_generator"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d"
+dependencies = [
+ "khronos_api",
+ "log",
+ "xml-rs",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "glow"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8bd5877156a19b8ac83a29b2306fe20537429d318f3ff0a1a2119f8d9c61919"
+dependencies = [
+ "js-sys",
+ "slotmap",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "glutin"
+version = "0.30.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524d807cd49a0c56a53ef9a6738cd15e7c8c4e9d37a3b7fdb3c250c1cd5bf7a3"
+dependencies = [
+ "bitflags",
+ "cfg_aliases",
+ "cgl",
+ "cocoa",
+ "core-foundation",
+ "glutin_egl_sys",
+ "glutin_glx_sys",
+ "glutin_wgl_sys",
+ "libloading",
+ "objc",
+ "once_cell",
+ "raw-window-handle 0.5.0",
+ "wayland-sys 0.30.1",
+ "windows-sys 0.36.1",
+ "x11-dl",
+]
+
+[[package]]
+name = "glutin_egl_sys"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3adbb8fec0e18e340f990c78f79f5f0e142d0d83f46b10909aaa7d251c00afdf"
+dependencies = [
+ "gl_generator",
+ "windows-sys 0.36.1",
+]
+
+[[package]]
+name = "glutin_glx_sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "947c4850c58211c9627969c2b4e2674764b81ae5b47bab2c9a477d7942f96e0f"
+dependencies = [
+ "gl_generator",
+ "x11-dl",
+]
+
+[[package]]
+name = "glutin_wgl_sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20c33975a6c9d49d72c8f032a60079bf8df536954fbf9e4cee90396ace815c57"
+dependencies = [
+ "gl_generator",
+]
+
+[[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 = "humantime"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
+
+[[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.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+dependencies = [
+ "unicode-bidi",
+ "unicode-normalization",
+]
+
+[[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",
+ "js-sys",
+ "wasm-bindgen",
+ "web-sys",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440"
+
+[[package]]
+name = "jni"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c"
+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 = "js-sys"
+version = "0.3.60"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
+dependencies = [
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "khronos_api"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
+
+[[package]]
+name = "kurbo"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a53776d271cfb873b17c618af0298445c88afc52837f3e948fa3fafd131f449"
+dependencies = [
+ "arrayvec 0.7.2",
+ "serde",
+]
+
+[[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.139"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79"
+
+[[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",
+]
+
+[[package]]
+name = "libspa"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8bb02bbc8d550e2f0a31989c61e1ac3c883bab2edee49ffcb5d5ca18266786d"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cookie-factory",
+ "errno",
+ "libc",
+ "libspa-sys",
+ "nom",
+ "system-deps",
+]
+
+[[package]]
+name = "libspa-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8d2e38d6cdd10d7d78eb0cb409c127cf16da2c296d9623375551e309616d4d"
+dependencies = [
+ "bindgen",
+ "system-deps",
+]
+
+[[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 1.0.0",
+]
+
+[[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 = "memmap2"
+version = "0.5.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b182332558b18d807c4ce1ca8ca983b34c3ee32765e47b3f0f69b90355cc1dc"
+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 = "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 = "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 = "natord"
+version = "1.0.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "308d96db8debc727c3fd9744aac51751243420e46edf401010908da7f8d5e57c"
+
+[[package]]
+name = "ndk"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0"
+dependencies = [
+ "bitflags",
+ "jni-sys",
+ "ndk-sys",
+ "num_enum",
+ "raw-window-handle 0.5.0",
+ "thiserror",
+]
+
+[[package]]
+name = "ndk-context"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b"
+
+[[package]]
+name = "ndk-glue"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0434fabdd2c15e0aab768ca31d5b7b333717f03cf02037d5a0a3ff3c278ed67f"
+dependencies = [
+ "libc",
+ "log",
+ "ndk",
+ "ndk-context",
+ "ndk-macro",
+ "ndk-sys",
+ "once_cell",
+ "parking_lot",
+]
+
+[[package]]
+name = "ndk-macro"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0df7ac00c4672f9d5aece54ee3347520b7e20f158656c7db2e6de01902eb7a6c"
+dependencies = [
+ "darling 0.13.4",
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "ndk-sys"
+version = "0.4.1+23.1.7779620"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3"
+dependencies = [
+ "jni-sys",
+]
+
+[[package]]
+name = "nix"
+version = "0.14.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c722bee1037d430d0f8e687bbdbf222f27cc6e4e68d5caf630857bb2b6dbdce"
+dependencies = [
+ "bitflags",
+ "cc",
+ "cfg-if 0.1.10",
+ "libc",
+ "void",
+]
+
+[[package]]
+name = "nix"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069"
+dependencies = [
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nix"
+version = "0.25.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f346ff70e7dbfd675fe90590b92d59ef2de15a8779ae305ebcbfd3f0caf59be4"
+dependencies = [
+ "autocfg",
+ "bitflags",
+ "cfg-if 1.0.0",
+ "libc",
+ "memoffset",
+]
+
+[[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.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5507769c4919c998e69e49c839d9dc6e693ede4cc4290d6ad8b41d4f09c548c"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[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 = "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-sys"
+version = "0.2.0-beta.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "df3b9834c1e95694a05a828b59f55fa2afec6288359cda67146126b3f90a55d7"
+
+[[package]]
+name = "objc2"
+version = "0.3.0-beta.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe31e5425d3d0b89a15982c024392815da40689aceb34bad364d58732bcfd649"
+dependencies = [
+ "block2",
+ "objc-sys",
+ "objc2-encode",
+]
+
+[[package]]
+name = "objc2-encode"
+version = "2.0.0-pre.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "abfcac41015b00a120608fdaa6938c44cb983fee294351cc4bac7638b4e50512"
+dependencies = [
+ "objc-sys",
+]
+
+[[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.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66"
+
+[[package]]
+name = "owned_ttf_parser"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18904d3c65493a9f0d7542293d1a7f69bfdc309a6b9ef4f46dc3e58b0577edc5"
+dependencies = [
+ "ttf-parser",
+]
+
+[[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.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ff9f3fef3968a3ec5945535ed654cb38ff72d7495a25619e2247fb15a2ed9ba"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall",
+ "smallvec",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "paste"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba"
+
+[[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 = "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 = "pipewire"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d80fef8219c37f479f3d62d70167f3daaa90b71a083f7fd88d69e49f05f0ecdc"
+dependencies = [
+ "anyhow",
+ "bitflags",
+ "errno",
+ "libc",
+ "libspa",
+ "libspa-sys",
+ "once_cell",
+ "pipewire-sys",
+ "signal",
+ "thiserror",
+]
+
+[[package]]
+name = "pipewire-sys"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f6d4262ea1fd3b01786046d1892cc49e9578d872faf8723d95dc7affc810ee4"
+dependencies = [
+ "bindgen",
+ "libspa-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "pkg-config"
+version = "0.3.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+
+[[package]]
+name = "png"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638"
+dependencies = [
+ "bitflags",
+ "crc32fast",
+ "flate2",
+ "miniz_oxide",
+]
+
+[[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-macro2"
+version = "1.0.49"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "pw-viz"
+version = "0.2.0"
+dependencies = [
+ "eframe",
+ "egui",
+ "egui_nodes",
+ "log",
+ "natord",
+ "pipewire",
+ "rand",
+ "serde",
+ "simple_logger",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+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 = "raw-window-handle"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b800beb9b6e7d2df1fe337c9e3d04e3af22a124460fb4c30fcc22c9117cefb41"
+dependencies = [
+ "cty",
+]
+
+[[package]]
+name = "raw-window-handle"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed7e3d950b66e19e0c372f3fa3fbbcf85b1746b571f74e0c2af6042a5c93420a"
+dependencies = [
+ "cty",
+]
+
+[[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-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "ron"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "300a51053b1cb55c80b7a9fde4120726ddf25ca241a1cbb926626f62fb136bff"
+dependencies = [
+ "base64",
+ "bitflags",
+ "serde",
+]
+
+[[package]]
+name = "rustc-hash"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
+
+[[package]]
+name = "safe_arch"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1ff3d6d9696af502cc3110dacce942840fb06ff4514cad92236ecc455f2ce05"
+dependencies = [
+ "bytemuck",
+]
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "scoped-tls"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sctk-adwaita"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61270629cc6b4d77ec1907db1033d5c2e1a404c412743621981a871dc9c12339"
+dependencies = [
+ "crossfont",
+ "log",
+ "smithay-client-toolkit",
+ "tiny-skia",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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 = "shlex"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43b2853a4d09f215c24cc5489c992ce46052d359b5109343cbafbf26bc62f8a3"
+
+[[package]]
+name = "signal"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f6ce83b159ab6984d2419f495134972b48754d13ff2e3f8c998339942b56ed9"
+dependencies = [
+ "libc",
+ "nix 0.14.1",
+]
+
+[[package]]
+name = "simple_logger"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e190a521c2044948158666916d9e872cbb9984f755e9bb3b5b75a836205affcd"
+dependencies = [
+ "atty",
+ "colored",
+ "log",
+ "time",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "slotmap"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "smallvec"
+version = "1.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+
+[[package]]
+name = "smithay-client-toolkit"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f307c47d32d2715eb2e0ece5589057820e0e5e70d07c247d1063e844e107f454"
+dependencies = [
+ "bitflags",
+ "calloop",
+ "dlib",
+ "lazy_static",
+ "log",
+ "memmap2",
+ "nix 0.24.3",
+ "pkg-config",
+ "wayland-client",
+ "wayland-cursor",
+ "wayland-protocols",
+]
+
+[[package]]
+name = "smithay-clipboard"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0a345c870a1fae0b1b779085e81b51e614767c239e93503588e54c5b17f4b0e8"
+dependencies = [
+ "smithay-client-toolkit",
+ "wayland-client",
+]
+
+[[package]]
+name = "str-buf"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e08d8363704e6c71fc928674353e6b7c23dcea9d82d7012c8faf2a3a025f8d0"
+
+[[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 = "syn"
+version = "1.0.107"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml",
+ "version-compare",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
+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 = [
+ "itoa",
+ "libc",
+ "num_threads",
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
+dependencies = [
+ "time-core",
+]
+
+[[package]]
+name = "tiny-skia"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "642680569bb895b16e4b9d181c60be1ed136fa0c9c7f11d004daf053ba89bf82"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.5.2",
+ "bytemuck",
+ "cfg-if 1.0.0",
+ "png",
+ "safe_arch",
+ "tiny-skia-path",
+]
+
+[[package]]
+name = "tiny-skia-path"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c114d32f0c2ee43d585367cb013dfaba967ab9f62b90d9af0d696e955e70fa6c"
+dependencies = [
+ "arrayref",
+ "bytemuck",
+]
+
+[[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 = "toml"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f"
+dependencies = [
+ "serde",
+]
+
+[[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-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 = "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.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc"
+
+[[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 = "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 = "vec_map"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
+
+[[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 = "void"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
+
+[[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.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 1.0.0",
+ "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 1.0.0",
+ "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 = "wayland-client"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f3b068c05a039c9f755f881dc50f01732214f5685e379829759088967c46715"
+dependencies = [
+ "bitflags",
+ "downcast-rs",
+ "libc",
+ "nix 0.24.3",
+ "scoped-tls",
+ "wayland-commons",
+ "wayland-scanner",
+ "wayland-sys 0.29.5",
+]
+
+[[package]]
+name = "wayland-commons"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8691f134d584a33a6606d9d717b95c4fa20065605f798a3f350d78dced02a902"
+dependencies = [
+ "nix 0.24.3",
+ "once_cell",
+ "smallvec",
+ "wayland-sys 0.29.5",
+]
+
+[[package]]
+name = "wayland-cursor"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6865c6b66f13d6257bef1cd40cbfe8ef2f150fb8ebbdb1e8e873455931377661"
+dependencies = [
+ "nix 0.24.3",
+ "wayland-client",
+ "xcursor",
+]
+
+[[package]]
+name = "wayland-protocols"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b950621f9354b322ee817a23474e479b34be96c2e909c14f7bc0100e9a970bc6"
+dependencies = [
+ "bitflags",
+ "wayland-client",
+ "wayland-commons",
+ "wayland-scanner",
+]
+
+[[package]]
+name = "wayland-scanner"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f4303d8fa22ab852f789e75a967f0a2cdc430a607751c0499bada3e451cbd53"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "xml-rs",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.29.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be12ce1a3c39ec7dba25594b97b42cb3195d54953ddb9d3d95a7c3902bc6e9d4"
+dependencies = [
+ "dlib",
+ "lazy_static",
+ "pkg-config",
+]
+
+[[package]]
+name = "wayland-sys"
+version = "0.30.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "96b2a02ac608e07132978689a6f9bf4214949c85998c247abadd4f4129b1aa06"
+dependencies = [
+ "dlib",
+ "lazy_static",
+ "log",
+ "pkg-config",
+]
+
+[[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 = "webbrowser"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e74f5ff7786c4c21f61ba8e30ea29c9745f06fca0a4a02d083b3c662583399e8"
+dependencies = [
+ "core-foundation",
+ "dirs",
+ "jni",
+ "log",
+ "ndk-context",
+ "objc",
+ "raw-window-handle 0.5.0",
+ "url",
+ "web-sys",
+ "windows 0.43.0",
+]
+
+[[package]]
+name = "which"
+version = "4.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b"
+dependencies = [
+ "either",
+ "libc",
+ "once_cell",
+]
+
+[[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-wsapoll"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c17110f57155602a80dca10be03852116403c9ff3cd25b079d666f2aa3df6e"
+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.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0286ba339aa753e70765d521bb0242cc48e1194562bfa2a2ad7ac8a6de28f5d5"
+dependencies = [
+ "windows-implement",
+ "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"
+version = "0.43.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04662ed0e3e5630dfa9b26e4cb823b817f1a9addda855d973a9458c236556244"
+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-implement"
+version = "0.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9539b6bd3eadbd9de66c9666b22d802b833da7e996bc06896142e09854a61767"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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.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.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.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.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.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
+
+[[package]]
+name = "winit"
+version = "0.27.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bb796d6fbd86b2fd896c9471e6f04d39d750076ebe5680a3958f00f5ab97657c"
+dependencies = [
+ "bitflags",
+ "cocoa",
+ "core-foundation",
+ "core-graphics",
+ "dispatch",
+ "instant",
+ "libc",
+ "log",
+ "mio",
+ "ndk",
+ "ndk-glue",
+ "objc",
+ "once_cell",
+ "parking_lot",
+ "percent-encoding",
+ "raw-window-handle 0.4.3",
+ "raw-window-handle 0.5.0",
+ "sctk-adwaita",
+ "smithay-client-toolkit",
+ "wasm-bindgen",
+ "wayland-client",
+ "wayland-protocols",
+ "web-sys",
+ "windows-sys 0.36.1",
+ "x11-dl",
+]
+
+[[package]]
+name = "wio"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "x11-dl"
+version = "2.20.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1536d6965a5d4e573c7ef73a2c15ebcd0b2de3347bdf526c34c297c00ac40f0"
+dependencies = [
+ "lazy_static",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "x11rb"
+version = "0.10.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "592b4883219f345e712b3209c62654ebda0bb50887f330cbd018d0f654bfd507"
+dependencies = [
+ "gethostname",
+ "nix 0.24.3",
+ "winapi",
+ "winapi-wsapoll",
+ "x11rb-protocol",
+]
+
+[[package]]
+name = "x11rb-protocol"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56b245751c0ac9db0e006dc812031482784e434630205a93c73cfefcaabeac67"
+dependencies = [
+ "nix 0.24.3",
+]
+
+[[package]]
+name = "xcursor"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "463705a63313cd4301184381c5e8042f0a7e9b4bb63653f216311d4ae74690b7"
+dependencies = [
+ "nom",
+]
+
+[[package]]
+name = "xml-rs"
+version = "0.8.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3"
diff --git a/nixpkgs/pkgs/applications/misc/pw-viz/default.nix b/nixpkgs/pkgs/applications/misc/pw-viz/default.nix
new file mode 100644
index 000000000000..c4afc80830db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pw-viz/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, expat
+, fontconfig
+, freetype
+, libGL
+, libxkbcommon
+, pipewire
+, wayland
+, xorg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "pw-viz";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "ax9d";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-lw4whdh8tNoS5XUlamQCq8f8z8K59uD90PSSo3skeyo=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "egui_nodes-0.1.4" = "sha256-Bb88T+erjgKD769eYOSiVEg9lFnB5pBEDLeWgCdyUus=";
+    };
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    expat
+    fontconfig
+    freetype
+    libGL
+    libxkbcommon
+    pipewire
+    rustPlatform.bindgenHook
+    wayland
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXi
+    xorg.libXrandr
+  ];
+
+  postFixup = ''
+    patchelf $out/bin/pw-viz \
+      --add-rpath ${lib.makeLibraryPath [ libGL libxkbcommon wayland ]}
+  '';
+
+  # enables pipewire API deprecated in 0.3.64
+  # fixes error caused by https://gitlab.freedesktop.org/pipewire/pipewire-rs/-/issues/55
+  env.NIX_CFLAGS_COMPILE = toString [ "-DPW_ENABLE_DEPRECATED" ];
+
+  meta = with lib; {
+    description = "A simple and elegant pipewire graph editor ";
+    homepage = "https://github.com/ax9d/pw-viz";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pwsafe/default.nix b/nixpkgs/pkgs/applications/misc/pwsafe/default.nix
new file mode 100644
index 000000000000..d9ae209dda21
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pwsafe/default.nix
@@ -0,0 +1,118 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, zip
+, gettext
+, perl
+, wxGTK32
+, libXext
+, libXi
+, libXt
+, libXtst
+, xercesc
+, qrencode
+, libuuid
+, libyubikey
+, yubikey-personalization
+, curl
+, openssl
+, file
+, darwin
+, gitUpdater
+}:
+
+let
+  inherit (darwin.apple_sdk.frameworks) Cocoa;
+in
+stdenv.mkDerivation rec {
+  pname = "pwsafe";
+  version = "1.18.0"; # do NOT update to 3.x Windows releases
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = version;
+    hash = "sha256-2n3JJ/DPhJpNOyviYpqQQl83IAZnmnH5w7b/pOGU8K8=";
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = [
+    cmake
+    gettext
+    perl
+    pkg-config
+    zip
+  ];
+
+  buildInputs = [
+    wxGTK32
+    curl
+    qrencode
+    openssl
+    xercesc
+    file
+  ] ++ lib.optionals stdenv.isLinux [
+    libXext
+    libXi
+    libXt
+    libXtst
+    libuuid
+    libyubikey
+    yubikey-personalization
+  ] ++ lib.optionals stdenv.isDarwin [
+    Cocoa
+  ];
+
+  cmakeFlags = [
+    "-DNO_GTEST=ON"
+    "-DCMAKE_CXX_FLAGS=-I${yubikey-personalization}/include/ykpers-1"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "-DNO_YUBI=ON"
+  ];
+
+  postPatch = ''
+    # Fix perl scripts used during the build.
+    for f in $(find . -type f -name '*.pl') ; do
+      patchShebangs $f
+    done
+
+    # Fix hard coded paths.
+    for f in $(grep -Rl /usr/share/ src install/desktop) ; do
+      substituteInPlace $f --replace /usr/share/ $out/share/
+    done
+
+    # Fix hard coded zip path.
+    substituteInPlace help/Makefile.linux --replace /usr/bin/zip ${zip}/bin/zip
+
+    for f in $(grep -Rl /usr/bin/ .) ; do
+      substituteInPlace $f --replace /usr/bin/ ""
+    done
+  '' + lib.optionalString stdenv.isDarwin ''
+    substituteInPlace src/ui/cli/CMakeLists.txt --replace "uuid" ""
+  '';
+
+  installFlags = [ "PREFIX=${placeholder "out"}" ];
+
+  passthru.updateScript = gitUpdater {
+    ignoredVersions = "^([^1]|1[^.])"; # ignore anything other than 1.x
+    url = src.gitRepoUrl;
+  };
+
+  meta = with lib; {
+    description = "A password database utility";
+    longDescription = ''
+      Password Safe is a password database utility. Like many other
+      such products, commercial and otherwise, it stores your
+      passwords in an encrypted file, allowing you to remember only
+      one password (the "safe combination"), instead of all the
+      username/password combinations that you use.
+    '';
+    homepage = "https://pwsafe.org/";
+    maintainers = with maintainers; [ c0bw3b pjones ];
+    platforms = platforms.unix;
+    license = licenses.artistic2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pydf/default.nix b/nixpkgs/pkgs/applications/misc/pydf/default.nix
new file mode 100644
index 000000000000..61f79edeab16
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pydf/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonPackage rec {
+  pname = "pydf";
+  version = "12";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "7f47a7c3abfceb1ac04fc009ded538df1ae449c31203962a1471a4eb3bf21439";
+  };
+
+  postInstall = ''
+    mkdir -p $out/share/man/man1 $out/share/pydf
+    install -t $out/share/pydf -m 444 pydfrc
+    install -t $out/share/man/man1 -m 444 pydf.1
+  '';
+
+  meta = with lib; {
+    description = "colourised df(1)-clone";
+    homepage = "http://kassiopeia.juls.savba.sk/~garabik/software/pydf/";
+    mainProgram = "pydf";
+    license = licenses.publicDomain;
+    maintainers = with maintainers; [ monsieurp ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pyditz/default.nix b/nixpkgs/pkgs/applications/misc/pyditz/default.nix
new file mode 100644
index 000000000000..9fda9dee0949
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pyditz/default.nix
@@ -0,0 +1,25 @@
+{ lib, pythonPackages, fetchPypi }:
+
+with pythonPackages;
+
+buildPythonApplication rec {
+  pname = "pyditz";
+  version = "0.11";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-2gNlrpBk4wxKJ1JvsNeoAv2lyGUc2mmQ0Xvn7eiaJVE=";
+  };
+  nativeBuildInputs = [ setuptools-scm ];
+  propagatedBuildInputs = [ pyyaml six jinja2 cerberus ];
+
+  nativeCheckInputs = [ unittestCheckHook ];
+
+  meta = with lib; {
+    homepage = "https://pypi.org/project/pyditz/";
+    description = "Drop-in replacement for the Ditz distributed issue tracker";
+    maintainers = [ maintainers.ilikeavocadoes ];
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pysentation/default.nix b/nixpkgs/pkgs/applications/misc/pysentation/default.nix
new file mode 100644
index 000000000000..1a84c06c94ff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pysentation/default.nix
@@ -0,0 +1,44 @@
+{ lib
+, python3
+, fetchFromGitHub
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pysentation";
+  version = "1.0.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "mimseyedi";
+    repo = "pysentation";
+    rev = "v${version}";
+    hash = "sha256-TwHDXWgGWuQVgatBDc1iympnb6dy4xYThLR5MouEZHA=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = [
+    "click"
+    "rich"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    click
+    getkey
+    rich
+  ];
+
+  pythonImportsCheck = [ "pysentation" ];
+
+  meta = with lib; {
+    description = "A CLI for displaying Python presentations";
+    homepage = "https://github.com/mimseyedi/pysentation";
+    changelog = "https://github.com/mimseyedi/pysentation/releases/tag/${src.rev}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "pysentation";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/pytrainer/default.nix b/nixpkgs/pkgs/applications/misc/pytrainer/default.nix
new file mode 100644
index 000000000000..22ee11082f15
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/pytrainer/default.nix
@@ -0,0 +1,98 @@
+{ lib
+, python310
+, fetchPypi
+, fetchFromGitHub
+, gdk-pixbuf
+, gnome
+, gpsbabel
+, glib-networking
+, glibcLocales
+, gobject-introspection
+, gtk3
+, perl
+, sqlite
+, tzdata
+, webkitgtk
+, wrapGAppsHook
+, xvfb-run
+}:
+
+let
+  python = python310.override {
+    packageOverrides = (self: super: {
+      matplotlib = super.matplotlib.override {
+        enableGtk3 = true;
+      };
+    });
+  };
+in python.pkgs.buildPythonApplication rec {
+  pname = "pytrainer";
+  version = "2.2.1";
+
+  src = fetchFromGitHub {
+    owner = "pytrainer";
+    repo = "pytrainer";
+    rev = "v${version}";
+    hash = "sha256-t61vHVTKN5KsjrgbhzljB7UZdRask7qfYISd+++QbV0=";
+  };
+
+  propagatedBuildInputs = with python.pkgs; [
+    sqlalchemy
+    python-dateutil
+    matplotlib
+    lxml
+    setuptools
+    requests
+    gdal
+  ];
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    sqlite
+    gtk3
+    webkitgtk
+    glib-networking
+    gnome.adwaita-icon-theme
+    gdk-pixbuf
+  ];
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ perl gpsbabel ])
+  ];
+
+  nativeCheckInputs = [
+    glibcLocales
+    perl
+    xvfb-run
+  ] ++ (with python.pkgs; [
+    mysqlclient
+    psycopg2
+  ]);
+
+  postPatch = ''
+    substituteInPlace pytrainer/platform.py \
+        --replace 'sys.prefix' "\"$out\""
+  '';
+
+  checkPhase = ''
+    env \
+      HOME=$TEMPDIR \
+      TZDIR=${tzdata}/share/zoneinfo \
+      TZ=Europe/Kaliningrad \
+      LC_TIME=C \
+      xvfb-run -s '-screen 0 800x600x24' \
+      ${python.interpreter} setup.py test
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/pytrainer/pytrainer";
+    description = "Application for logging and graphing sporting excursions";
+    maintainers = with maintainers; [ rycee dotlambda ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/q4wine/default.nix b/nixpkgs/pkgs/applications/misc/q4wine/default.nix
new file mode 100644
index 000000000000..cb4014684fd2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/q4wine/default.nix
@@ -0,0 +1,37 @@
+{ lib, fetchFromGitHub, mkDerivation, cmake, sqlite
+, qtbase, qtsvg, qttools, wrapQtAppsHook
+, icoutils # build and runtime deps.
+, wget, fuseiso, wine, sudo, which # runtime deps.
+}:
+
+mkDerivation rec {
+  pname = "q4wine";
+  version = "1.3.13";
+
+  src = fetchFromGitHub {
+    owner = "brezerk";
+    repo = "q4wine";
+    rev = "v${version}";
+    sha256 = "04gw5y3dxdpivm2xqacqq85fdzx7xkl0c3h3hdazljb0c3cxxs6h";
+  };
+
+  buildInputs = [
+     sqlite icoutils qtbase qtsvg qttools
+  ];
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook ];
+
+  # Add runtime deps.
+  postInstall = ''
+    wrapProgram $out/bin/q4wine \
+      --prefix PATH : ${lib.makeBinPath [ icoutils wget fuseiso wine which ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://q4wine.brezblock.org.ua/";
+    description = "A Qt GUI for Wine to manage prefixes and applications";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ rkitover ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qMasterPassword/default.nix b/nixpkgs/pkgs/applications/misc/qMasterPassword/default.nix
new file mode 100644
index 000000000000..436c1fc70377
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qMasterPassword/default.nix
@@ -0,0 +1,76 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libX11
+, libXtst
+, cmake
+, qtbase
+, qttools
+, qtwayland
+, openssl
+, libscrypt
+, wrapQtAppsHook
+, testers
+, qMasterPassword
+, x11Support ? true
+, waylandSupport ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "qMasterPassword";
+  version = "2.0";
+
+  src = fetchFromGitHub {
+    owner = "bkueng";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-4qxPjrf6r2S0l/hcs6bqfJm56jdDz+0a0xEkqGBYGBs=";
+  };
+
+  buildInputs = [ qtbase qtwayland openssl libscrypt ] ++ lib.optionals x11Support [ libX11 libXtst ];
+  nativeBuildInputs = [ cmake qttools wrapQtAppsHook ];
+  cmakeFlags = lib.optionals waylandSupport [
+    "-DDISABLE_FILL_FORM_SHORTCUTS=1"
+  ];
+
+  # Upstream install is mostly defunct. It hardcodes target.path and doesn't
+  # install anything but the binary.
+  installPhase = if stdenv.isDarwin then ''
+    mkdir -p "$out"/{Applications,bin}
+    mv qMasterPassword.app "$out"/Applications/
+    ln -s ../Applications/qMasterPassword.app/Contents/MacOS/qMasterPassword "$out"/bin/qMasterPassword
+  '' else ''
+    mkdir -p $out/bin
+    mkdir -p $out/share/{applications,doc/qMasterPassword,icons/qmasterpassword,icons/hicolor/512x512/apps,qMasterPassword/translations}
+    cp qMasterPassword $out/bin
+    cp $src/data/qMasterPassword.desktop $out/share/applications
+    cp $src/LICENSE $src/README.md $out/share/doc/qMasterPassword
+    cp $src/data/icons/app_icon.png $out/share/icons/hicolor/512x512/apps/qmasterpassword.png
+    cp $src/data/icons/* $out/share/icons/qmasterpassword
+    cp ./translations/translation_de.qm $out/share/qMasterPassword/translations/translation_de.qm
+    cp ./translations/translation_pl.qm $out/share/qMasterPassword/translations/translation_pl.qm
+  '';
+
+  passthru = {
+    tests.version = testers.testVersion {
+      package = qMasterPassword;
+      version = "v${version}";
+    };
+  };
+
+  meta = with lib; {
+    description = "Stateless Master Password Manager";
+    longDescription = ''
+      Access all your passwords using only a single master password. But in
+      contrast to other managers it does not store any passwords: Unique
+      passwords are generated from the master password and a site name. This
+      means you automatically get different passwords for each account and
+      there is no password file that can be lost or get stolen. There is also
+      no need to trust any online password service.
+    '';
+    homepage = "https://github.com/bkueng/qMasterPassword";
+    license = licenses.gpl3;
+    maintainers = with lib.maintainers; [ tadeokondrak teutat3s ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qcad/application-dir.patch b/nixpkgs/pkgs/applications/misc/qcad/application-dir.patch
new file mode 100644
index 000000000000..84782e1e7178
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qcad/application-dir.patch
@@ -0,0 +1,35 @@
+diff --git a/src/core/RS.cpp b/src/core/RS.cpp
+index d8a135d6f..659795dbb 100644
+--- a/src/core/RS.cpp
++++ b/src/core/RS.cpp
+@@ -151,7 +151,7 @@ QStringList RS::getDirectoryList(const QString& subDirectory) {
+     dirList.append(appDir + "/../../../" + subDirectory);
+     dirList.append(QDir::currentPath() + "/" + subDirectory);
+ #else
+-    dirList.append(appDir + "/" + subDirectory);
++    dirList.append(appDir + "/../lib/" + subDirectory);
+ #endif
+ 
+     /*
+diff --git a/src/core/RSettings.cpp b/src/core/RSettings.cpp
+index c6c31cbf5..c51b59ce6 100644
+--- a/src/core/RSettings.cpp
++++ b/src/core/RSettings.cpp
+@@ -367,6 +367,8 @@ QString RSettings::getApplicationPath() {
+         ret.cdUp();
+     }
+ 
++    ret.cd("../lib");
++
+     return ret.path();
+ }
+ 
+@@ -1268,7 +1270,7 @@ QString RSettings::getRevisionString() {
+ }
+ 
+ QString RSettings::getReleaseDate() {
+-    return __DATE__;
++    return "";
+ }
+ 
+ int RSettings::getSnapRange() {
diff --git a/nixpkgs/pkgs/applications/misc/qcad/default.nix b/nixpkgs/pkgs/applications/misc/qcad/default.nix
new file mode 100644
index 000000000000..e67a96fe7cd3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qcad/default.nix
@@ -0,0 +1,132 @@
+{ lib
+, stdenv
+, mkDerivation
+, fetchFromGitHub
+, installShellFiles
+, pkg-config
+, qmake
+, qttools
+, boost
+, libGLU
+, muparser
+, qtbase
+, qtscript
+, qtsvg
+, qtxmlpatterns
+, qtmacextras
+}:
+
+mkDerivation rec {
+  pname = "qcad";
+  version = "3.29.4.1";
+
+  src = fetchFromGitHub {
+    name = "qcad-${version}-src";
+    owner = "qcad";
+    repo = "qcad";
+    rev = "v${version}";
+    hash = "sha256-00lPgiE3hsP3SL96ygBP91CaAWi1IGOYUO7zC/ORG1U=";
+  };
+
+  patches = [
+    # Patch directory lookup, remove __DATE__ and executable name
+    ./application-dir.patch
+  ];
+
+  postPatch = ''
+    if ! [ -d src/3rdparty/qt-labs-qtscriptgenerator-${qtbase.version} ]; then
+      mkdir src/3rdparty/qt-labs-qtscriptgenerator-${qtbase.version}
+      cp \
+        src/3rdparty/qt-labs-qtscriptgenerator-5.14.0/qt-labs-qtscriptgenerator-5.14.0.pro \
+        src/3rdparty/qt-labs-qtscriptgenerator-${qtbase.version}/qt-labs-qtscriptgenerator-${qtbase.version}.pro
+    fi
+  '';
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+    qmake
+    qttools
+  ];
+
+  buildInputs = [
+    boost
+    libGLU
+    muparser
+    qtbase
+    qtscript
+    qtsvg
+    qtxmlpatterns
+  ] ++ lib.optionals stdenv.isDarwin [
+    qtmacextras
+  ];
+
+  qmakeFlags = [
+    "MUPARSER_DIR=${muparser}"
+    "INSTALLROOT=$(out)"
+    "BOOST_DIR=${boost.dev}"
+    "QMAKE_CXXFLAGS=-std=c++14"
+  ];
+
+  qtWrapperArgs = lib.optionals stdenv.isLinux [
+    "--prefix LD_LIBRARY_PATH : ${placeholder "out"}/lib"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "--prefix DYLD_LIBRARY_PATH : ${placeholder "out"}/lib"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+  '' + lib.optionalString stdenv.isLinux ''
+    install -Dm555 release/qcad-bin $out/bin/qcad
+  '' + lib.optionalString stdenv.isDarwin ''
+    install -Dm555 release/QCAD.app/Contents/MacOS/QCAD $out/bin/qcad
+    mkdir -p $out/lib
+  '' + ''
+    install -Dm555 -t $out/lib release/libspatialindexnavel${stdenv.hostPlatform.extensions.sharedLibrary}
+    install -Dm555 -t $out/lib release/libqcadcore${stdenv.hostPlatform.extensions.sharedLibrary}
+    install -Dm555 -t $out/lib release/libqcadentity${stdenv.hostPlatform.extensions.sharedLibrary}
+    install -Dm555 -t $out/lib release/libqcadgrid${stdenv.hostPlatform.extensions.sharedLibrary}
+    install -Dm555 -t $out/lib release/libqcadsnap${stdenv.hostPlatform.extensions.sharedLibrary}
+    install -Dm555 -t $out/lib release/libqcadoperations${stdenv.hostPlatform.extensions.sharedLibrary}
+    install -Dm555 -t $out/lib release/libqcadstemmer${stdenv.hostPlatform.extensions.sharedLibrary}
+    install -Dm555 -t $out/lib release/libqcadspatialindex${stdenv.hostPlatform.extensions.sharedLibrary}
+    install -Dm555 -t $out/lib release/libqcadgui${stdenv.hostPlatform.extensions.sharedLibrary}
+    install -Dm555 -t $out/lib release/libqcadecmaapi${stdenv.hostPlatform.extensions.sharedLibrary}
+
+    install -Dm444 -t $out/share/applications qcad.desktop
+    install -Dm644 -t $out/share/pixmaps      scripts/qcad_icon.png
+
+    cp -r scripts $out/lib
+    cp -r plugins $out/lib/plugins
+    cp -r patterns $out/lib/patterns
+    cp -r fonts $out/lib/fonts
+    cp -r libraries $out/lib/libraries
+    cp -r linetypes $out/lib/linetypes
+    cp -r ts $out/lib/ts
+
+    # workaround to fix the library browser:
+    rm -r $out/lib/plugins/sqldrivers
+    ln -s -t $out/lib/plugins ${qtbase}/${qtbase.qtPluginPrefix}/sqldrivers
+
+    rm -r $out/lib/plugins/printsupport
+    ln -s -t $out/lib/plugins ${qtbase}/${qtbase.qtPluginPrefix}/printsupport
+
+    rm -r $out/lib/plugins/imageformats
+    ln -s -t $out/lib/plugins ${qtbase}/${qtbase.qtPluginPrefix}/imageformats
+
+    install -Dm644 scripts/qcad_icon.svg $out/share/icons/hicolor/scalable/apps/qcad.svg
+
+    installManPage qcad.1
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "2D CAD package based on Qt";
+    homepage = "https://qcad.org";
+    license = lib.licenses.gpl3Only;
+    mainProgram = "qcad";
+    maintainers = with lib.maintainers; [ yvesf ];
+    platforms = qtbase.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qdirstat/default.nix b/nixpkgs/pkgs/applications/misc/qdirstat/default.nix
new file mode 100644
index 000000000000..dc112d2d6935
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qdirstat/default.nix
@@ -0,0 +1,58 @@
+{ lib, fetchFromGitHub, qmake
+, coreutils, xdg-utils, bash
+, makeWrapper, perlPackages, mkDerivation }:
+
+let
+  pname = "qdirstat";
+  version = "1.9";
+
+  src = fetchFromGitHub {
+    owner = "shundhammer";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-pwdmltHDNwUMx1FNOoiXl5Pna0zlKqahmicBCN6UVSU=";
+  };
+in
+
+mkDerivation {
+  inherit pname version src;
+
+  nativeBuildInputs = [ qmake makeWrapper ];
+
+  buildInputs = [ perlPackages.perl ];
+
+  postPatch = ''
+    substituteInPlace scripts/scripts.pro \
+      --replace /bin/true ${coreutils}/bin/true
+
+    for i in src/SysUtil.cpp src/FileSizeStatsWindow.cpp
+    do
+      substituteInPlace $i \
+        --replace /usr/bin/xdg-open ${xdg-utils}/bin/xdg-open
+    done
+    for i in src/Cleanup.cpp src/cleanup-config-page.ui
+    do
+      substituteInPlace $i \
+        --replace /bin/bash ${bash}/bin/bash \
+        --replace /bin/sh ${bash}/bin/sh
+    done
+    substituteInPlace src/StdCleanup.cpp \
+      --replace /bin/bash ${bash}/bin/bash
+  '';
+
+  qmakeFlags = [ "INSTALL_PREFIX=${placeholder "out"}" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/qdirstat-cache-writer \
+      --set PERL5LIB "${perlPackages.makePerlPath [ perlPackages.URI ]}"
+  '';
+
+  meta = with lib; {
+    description = "Graphical disk usage analyzer";
+    homepage = src.meta.homepage;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    mainProgram = "qdirstat";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qelectrotech/default.nix b/nixpkgs/pkgs/applications/misc/qelectrotech/default.nix
new file mode 100644
index 000000000000..3b97a69de226
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qelectrotech/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, mkDerivation
+, fetchzip
+, installShellFiles
+, pkg-config
+, qmake
+, qtbase
+, kcoreaddons
+, kwidgetsaddons
+}:
+
+mkDerivation rec {
+  pname = "qelectrotech";
+  version = "0.8.0";
+
+  src = fetchzip {
+    url = "https://git.tuxfamily.org/qet/qet.git/snapshot/qet-${version}.tar.gz";
+    sha256 = "sha256-op2vnMPF9bNnHGphWFB/HEeoThE6tX+9UvX8LWVwkzI=";
+  };
+
+  postPatch = ''
+    substituteInPlace qelectrotech.pro \
+      --replace 'GIT_COMMIT_SHA="\\\"$(shell git -C \""$$_PRO_FILE_PWD_"\" rev-parse --verify HEAD)\\\""' \
+                'GIT_COMMIT_SHA="\\\"${version}\\\""' \
+      --replace "COMPIL_PREFIX              = '/usr/local/'" \
+                "COMPIL_PREFIX              = '$out/'" \
+      --replace "INSTALL_PREFIX             = '/usr/local/'" \
+                "INSTALL_PREFIX             = '$out/'"
+  '';
+
+  nativeBuildInputs = [
+    installShellFiles
+    pkg-config
+    qmake
+  ];
+
+  buildInputs = [
+    kcoreaddons
+    kwidgetsaddons
+    qtbase
+  ];
+
+  qmakeFlags = [
+    "INSTALLROOT=$(out)"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 qelectrotech $out/bin/qelectrotech
+
+    install -Dm444 -t $out/share/applications misc/qelectrotech.desktop
+    install -Dm444 -t $out/share/applications misc/x-qet-titleblock.desktop
+    install -Dm444 -t $out/share/applications misc/x-qet-element.desktop
+    install -Dm444 -t $out/share/applications misc/x-qet-project.desktop
+
+    mkdir -p $out/share/qelectrotech
+    cp -r elements $out/share/qelectrotech
+    cp -r titleblocks $out/share/qelectrotech
+    cp -r lang $out/share/qelectrotech
+    cp -r examples $out/share/qelectrotech
+
+    mkdir -p $out/share/icons/hicolor
+    cp -r ico $out/share/icons/hicolor
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Free software to create electric diagrams";
+    homepage = "https://qelectrotech.org/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ yvesf ];
+    platforms = qtbase.meta.platforms;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qlcplus/default.nix b/nixpkgs/pkgs/applications/misc/qlcplus/default.nix
new file mode 100644
index 000000000000..5ddb8170fcef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qlcplus/default.nix
@@ -0,0 +1,53 @@
+{ lib, mkDerivation, fetchFromGitHub, fetchpatch, qmake, pkg-config, udev
+, qtmultimedia, qtscript, alsa-lib, ola, libftdi1, libusb-compat-0_1
+, libsndfile, libmad
+}:
+
+mkDerivation rec {
+  pname = "qlcplus";
+  version = "4.12.3";
+
+  src = fetchFromGitHub {
+    owner = "mcallegari";
+    repo = "qlcplus";
+    rev = "QLC+_${version}";
+    sha256 = "PB1Y8N1TrJMcS7A2e1nKjsUlAxOYjdJqBhbyuDCAbGs=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "qt5.15-deprecation-fixes.patch";
+      url = "https://github.com/mcallegari/qlcplus/commit/e4ce4b0226715876e8e9e3b23785d43689b2bb64.patch";
+      sha256 = "1zhrg6ava1nyc97xcx75r02zzkxmar0973w4jwkm5ch3iqa8bqnh";
+    })
+  ];
+
+  nativeBuildInputs = [ qmake pkg-config ];
+  buildInputs = [
+    udev qtmultimedia qtscript alsa-lib ola libftdi1 libusb-compat-0_1 libsndfile libmad
+  ];
+
+  qmakeFlags = [ "INSTALLROOT=$(out)" ];
+
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations";
+
+  postPatch = ''
+    patchShebangs .
+    sed -i -e '/unix:!macx:INSTALLROOT += \/usr/d' \
+            -e "s@\$\$LIBSDIR/qt4/plugins@''${qtPluginPrefix}@" \
+            -e "s@/etc/udev/rules.d@''${out}/lib/udev/rules.d@" \
+      variables.pri
+  '';
+
+  postInstall = ''
+    ln -sf $out/lib/*/libqlcplus* $out/lib
+  '';
+
+  meta = with lib; {
+    description = "A free and cross-platform software to control DMX or analog lighting systems like moving heads, dimmers, scanners etc";
+    maintainers = [ ];
+    license = licenses.asl20;
+    platforms = platforms.all;
+    homepage = "https://www.qlcplus.org/";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qolibri/default.nix b/nixpkgs/pkgs/applications/misc/qolibri/default.nix
new file mode 100644
index 000000000000..af7cc7e01a6f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qolibri/default.nix
@@ -0,0 +1,31 @@
+{ stdenv, lib, fetchFromGitHub, pkg-config, cmake, libeb, lzo
+, qtmultimedia, qttools, qtwebengine, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "qolibri";
+  version = "2.1.4";
+
+  src = fetchFromGitHub {
+    owner = "ludios";
+    repo = "qolibri";
+    rev = version;
+    sha256 = "jyLF1MKDVH0Lt8lw+O93b+LQ4J+s42O3hebthJk83hg=";
+  };
+
+  nativeBuildInputs = [ pkg-config cmake qttools wrapQtAppsHook ];
+  buildInputs = [
+    libeb lzo qtmultimedia qtwebengine
+  ];
+
+  postInstall = ''
+    install -D $src/qolibri.desktop -t $out/share/applications
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ludios/qolibri";
+    description = "EPWING reader for viewing Japanese dictionaries";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+    license = licenses.gpl2;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qsudo/default.nix b/nixpkgs/pkgs/applications/misc/qsudo/default.nix
new file mode 100644
index 000000000000..d73c3793871a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qsudo/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, qmake
+, qtbase
+, sudo
+}:
+
+mkDerivation rec {
+  pname = "qsudo";
+  version = "2020.03.27";
+
+  src = fetchFromGitHub {
+    owner = "project-trident";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "06kg057vwkvafnk69m9rar4wih3vq4h36wbzwbfc2kndsnn47lfl";
+  };
+
+  sourceRoot = "${src.name}/src-qt5";
+
+  nativeBuildInputs = [
+    qmake
+  ];
+
+  buildInputs = [
+    qtbase
+    sudo
+  ];
+
+  postPatch = ''
+    substituteInPlace qsudo.pro --replace /usr/bin $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Graphical sudo utility from Project Trident";
+    homepage = "https://github.com/project-trident/qsudo";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qsyncthingtray/default.nix b/nixpkgs/pkgs/applications/misc/qsyncthingtray/default.nix
new file mode 100644
index 000000000000..bfe1d61818f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qsyncthingtray/default.nix
@@ -0,0 +1,69 @@
+{ mkDerivation, stdenv, lib, fetchFromGitHub, fetchpatch, procps
+, qtbase, qtwebengine, qtwebkit
+, cmake
+, syncthing
+, preferQWebView ? false
+, preferNative   ? true }:
+
+mkDerivation rec {
+  version = "0.5.8";
+  pname = "qsyncthingtray";
+
+  src = fetchFromGitHub {
+    owner  = "sieren";
+    repo   = "QSyncthingTray";
+    rev    = version;
+    sha256 = "1n9g4j7qznvg9zl6x163pi9f7wsc3x6q76i33psnm7x2v1i22x5w";
+  };
+
+  buildInputs = [ qtbase qtwebengine ] ++ lib.optional preferQWebView qtwebkit;
+
+  nativeBuildInputs = [ cmake ];
+
+  cmakeFlags = [ ]
+    ++ lib.optional preferQWebView "-DQST_BUILD_WEBKIT=1"
+    ++ lib.optional preferNative   "-DQST_BUILD_NATIVEBROWSER=1";
+
+  patches = [ (fetchpatch {
+    name = "support_native_browser.patch";
+    url = "https://patch-diff.githubusercontent.com/raw/sieren/QSyncthingTray/pull/225.patch";
+    sha256 = "0w665xdlsbjxs977pdpzaclxpswf7xys1q3rxriz181lhk2y66yy";
+  }) ] ++ lib.optional (!preferQWebView && !preferNative) ./qsyncthingtray-0.5.8-qt-5.6.3.patch;
+
+  postPatch = ''
+    ${lib.optionalString stdenv.isLinux ''
+      substituteInPlace includes/platforms/linux/posixUtils.hpp \
+        --replace '"/usr/local/bin/syncthing"'         '"${syncthing}/bin/syncthing"' \
+        --replace '"pgrep -x'                          '"${procps}/bin/pgrep -x'
+    ''}
+
+    ${lib.optionalString stdenv.isDarwin ''
+      substituteInPlace includes/platforms/darwin/macUtils.hpp \
+        --replace '"/usr/local/bin/syncthing"'         '"${syncthing}/bin/syncthing"'
+    ''}
+  '';
+
+  installPhase = let qst = "qsyncthingtray"; in ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install -m755 QSyncthingTray $out/bin/${qst}
+    ln -s $out/bin/${qst} $out/bin/QSyncthingTray
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/sieren/QSyncthingTray/";
+    description = "A Traybar Application for Syncthing written in C++";
+    longDescription = ''
+        A cross-platform status bar for Syncthing.
+        Currently supports macOS, Windows and Linux.
+        Written in C++ with Qt.
+    '';
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ zraexy peterhoeg ];
+    platforms = platforms.all;
+    broken = !preferNative || stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qsyncthingtray/qsyncthingtray-0.5.8-qt-5.6.3.patch b/nixpkgs/pkgs/applications/misc/qsyncthingtray/qsyncthingtray-0.5.8-qt-5.6.3.patch
new file mode 100644
index 000000000000..424bbe171779
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qsyncthingtray/qsyncthingtray-0.5.8-qt-5.6.3.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index b778d09..247b606 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -12,7 +12,7 @@ set(CMAKE_AUTOMOC ON)
+ 
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+ 
+-find_package(Qt5 5.6 COMPONENTS Widgets Network PrintSupport)
++find_package(Qt5 5.6 COMPONENTS Widgets Network PrintSupport WebEngineWidgets)
+ if (NOT Qt5_FOUND)
+   message(FATAL_ERROR
+     "Some components of Qt5 not found (see above messages for details. "
diff --git a/nixpkgs/pkgs/applications/misc/qt-box-editor/default.nix b/nixpkgs/pkgs/applications/misc/qt-box-editor/default.nix
new file mode 100644
index 000000000000..7a84f85a9e21
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qt-box-editor/default.nix
@@ -0,0 +1,41 @@
+{ mkDerivation
+, lib
+, fetchFromGitHub
+, qtbase
+, qtsvg
+, qmake
+, leptonica
+, tesseract4
+}:
+
+mkDerivation {
+  pname = "qt-box-editor";
+  version = "unstable-2019-07-14";
+
+  src = fetchFromGitHub {
+    owner = "zdenop";
+    repo = "qt-box-editor";
+    rev = "cba2929dabc6c715acd1a282ba161fee914c87f6";
+    hash = "sha256-3dWnAu0CLO3atjbC1zJEnL3vzsIEecDDDhW3INMfCv4=";
+  };
+
+  buildInputs = [ qtbase qtsvg leptonica tesseract4 ];
+
+  nativeBuildInputs = [ qmake ];
+
+  # https://github.com/zdenop/qt-box-editor/issues/87
+  postPatch = ''
+    sed -i '/allheaders.h/a#include <leptonica/pix_internal.h>' src/TessTools.h
+
+    substituteInPlace qt-box-editor.pro \
+      --replace '-llept' '-lleptonica'
+  '';
+
+  meta = with lib; {
+    description = "Editor of tesseract-ocr box files";
+    homepage = "https://github.com/zdenop/qt-box-editor";
+    license = licenses.asl20;
+    maintainers = [ maintainers.costrouc ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qt-video-wlr/default.nix b/nixpkgs/pkgs/applications/misc/qt-video-wlr/default.nix
new file mode 100644
index 000000000000..f8020fbdb447
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qt-video-wlr/default.nix
@@ -0,0 +1,47 @@
+{ stdenv, lib, fetchFromGitHub, pkg-config, meson, cmake, ninja, gst_all_1, wrapQtAppsHook, qtbase, qtmultimedia, layer-shell-qt }:
+let
+ gstreamerPath = with gst_all_1; lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" [
+     gstreamer
+     gst-plugins-base
+     gst-plugins-good
+     gst-plugins-bad
+     gst-plugins-ugly
+ ];
+in stdenv.mkDerivation rec {
+  pname = "qt-video-wlr";
+  version = "2023-07-22";
+
+  src = fetchFromGitHub {
+    owner = "xdavidwu";
+    repo = "qt-video-wlr";
+    rev = "1373c8eeb0a5d867927ba30a9a9bb2d5b0057a87";
+    hash = "sha256-mg0ROD9kV88I5uCm+niAI5tJuhkmYC7Z8dixxrNow4c=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    cmake # only used for find layer-shell-qt
+    ninja
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtmultimedia
+    layer-shell-qt
+  ];
+
+  qtWrapperArgs = [
+    "--prefix PATH : $out/bin/qt-video-wlr"
+    "--prefix GST_PLUGIN_PATH : ${gstreamerPath}"
+  ];
+
+  meta = with lib; {
+    description = "Qt pip-mode-like video player for wlroots-based wayland compositors";
+    homepage = "https://github.com/xdavidwu/qt-video-wlr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fionera rewine ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qtbitcointrader/default.nix b/nixpkgs/pkgs/applications/misc/qtbitcointrader/default.nix
new file mode 100644
index 000000000000..d158c111c87f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qtbitcointrader/default.nix
@@ -0,0 +1,34 @@
+{ lib, fetchFromGitHub, qt5, mkDerivation }:
+
+mkDerivation rec {
+  pname = "qtbitcointrader";
+  version = "1.40.43";
+
+  src = fetchFromGitHub {
+    owner = "JulyIGHOR";
+    repo = "QtBitcoinTrader";
+    rev = "v${version}";
+    sha256 = "sha256-u3+Kwn8KunYUpWCd55TQuVVfoSp8hdti93d6hk7Uqx8=";
+  };
+
+  buildInputs = [ qt5.qtbase qt5.qtmultimedia qt5.qtscript ];
+
+  postUnpack = "sourceRoot=\${sourceRoot}/src";
+
+  configurePhase = ''
+    runHook preConfigure
+    qmake $qmakeFlags \
+      PREFIX=$out \
+      DESKTOPDIR=$out/share/applications \
+      ICONDIR=$out/share/pixmaps \
+      QtBitcoinTrader_Desktop.pro
+    runHook postConfigure
+  '';
+
+  meta = with lib; {
+    description = "Bitcoin trading client";
+    homepage = "https://centrabit.com/";
+    license = licenses.gpl3;
+    platforms = qt5.qtbase.meta.platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/qtpass/default.nix b/nixpkgs/pkgs/applications/misc/qtpass/default.nix
new file mode 100644
index 000000000000..ad940a77f99a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/qtpass/default.nix
@@ -0,0 +1,62 @@
+{ lib, mkDerivation, fetchFromGitHub
+, git, gnupg, pass, pwgen, qrencode
+, fetchpatch
+, qtbase, qtsvg, qttools, qmake
+}:
+
+mkDerivation rec {
+  pname = "qtpass";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner  = "IJHack";
+    repo   = "QtPass";
+    rev    = "v${version}";
+    sha256 = "0748hjvhjrybi33ci3c8hcr74k9pdrf5jv8npf9hrsrmdyy1kr9x";
+  };
+
+  postPatch = ''
+    substituteInPlace src/qtpass.cpp \
+      --replace "/usr/bin/qrencode" "${qrencode}/bin/qrencode"
+  '';
+
+  buildInputs = [ git gnupg pass qtbase qtsvg ];
+
+  nativeBuildInputs = [ qmake qttools ];
+
+  patches = [
+    # Fix path to pass-otp plugin `/usr/lib/password-store/extensions/otp.bash` being hardcoded.
+    # TODO: Remove when https://github.com/IJHack/QtPass/pull/499 is merged and available.
+    (fetchpatch {
+      name = "qtpass-Dont-hardcode-pass-otp-usr-lib-path.patch";
+      url = "https://github.com/IJHack/QtPass/commit/2ca9f0ec5a8d709c97a2433c5cd814040c82d4f3.patch";
+      sha256 = "0ljlvqxvarrz2a4j71i66aflrxi84zirb6cg9kvygnvhvm1zbc7d";
+    })
+  ];
+
+  # HACK `propagatedSandboxProfile` does not appear to actually propagate the sandbox profile from `qt5.qtbase`
+  sandboxProfile = toString qtbase.__propagatedSandboxProfile;
+
+  qmakeFlags = [
+    # setup hook only sets QMAKE_LRELEASE, set QMAKE_LUPDATE too:
+    "QMAKE_LUPDATE=${qttools.dev}/bin/lupdate"
+  ];
+
+  qtWrapperArgs = [
+    "--suffix PATH : ${lib.makeBinPath [ git gnupg pass pwgen ]}"
+  ];
+
+  postInstall = ''
+    install -D qtpass.desktop -t $out/share/applications
+    install -D artwork/icon.svg $out/share/icons/hicolor/scalable/apps/qtpass-icon.svg
+    install -D qtpass.1 -t $out/share/man/man1
+  '';
+
+  meta = with lib; {
+    description = "A multi-platform GUI for pass, the standard unix password manager";
+    homepage = "https://qtpass.org";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.hrdinka ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/quicksynergy/default.nix b/nixpkgs/pkgs/applications/misc/quicksynergy/default.nix
new file mode 100644
index 000000000000..5a93f647291d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/quicksynergy/default.nix
@@ -0,0 +1,38 @@
+{lib, stdenv, fetchurl, pkg-config, gtk2, synergy}:
+
+stdenv.mkDerivation rec {
+  pname = "quicksynergy";
+  version = "0.9.0";
+  src = fetchurl {
+    url = "mirror://sourceforge/project/quicksynergy/Linux/${version}/quicksynergy-${version}.tar.gz";
+    sha256 = "1pi8503bg8q1psw50y6d780i33nnvfjqiy9vnr3v52pdcfip8pix";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [
+    gtk2
+    synergy
+  ];
+  preBuild = "
+    sed -i 's@/usr/bin@${synergy.out}/bin@' src/synergy_config.c
+  ";
+  meta = {
+    description = "GUI application to share mouse and keyboard between computers";
+    longDescription = "
+      QuickSynergy is a graphical interface (GUI) for easily configuring
+      Synergy2, an application that allows the user to share his mouse and
+      keyboard between two or more computers.
+
+      Without the need for any external hardware, Synergy2 uses the TCP-IP
+      protocol to share the resources, even between machines with different
+      operating systems, such as Mac OS, Linux and Windows.
+
+      Remember to open port 24800 (used by synergys program) if you want to
+      host mouse and keyboard.";
+    homepage = "https://sourceforge.net/projects/quicksynergy/";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.spinus ];
+    platforms = lib.platforms.linux;
+    mainProgram = "quicksynergy";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/raider/default.nix b/nixpkgs/pkgs/applications/misc/raider/default.nix
new file mode 100644
index 000000000000..cf368fbe79dc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/raider/default.nix
@@ -0,0 +1,58 @@
+{ appstream-glib
+, blueprint-compiler
+, desktop-file-utils
+, fetchFromGitHub
+, gettext
+, glib
+, gtk4
+, itstool
+, lib
+, libadwaita
+, meson
+, mesonEmulatorHook
+, ninja
+, pkg-config
+, stdenv
+, wrapGAppsHook4
+}:
+stdenv.mkDerivation rec {
+  pname = "raider";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "ADBeveridge";
+    repo = "raider";
+    rev = "v${version}";
+    hash = "sha256-fyE0CsQp2UVh+7bAQo+GHEF0k8Gwl9j4qclh04AQiVI=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    blueprint-compiler
+    desktop-file-utils
+    itstool
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ] ++ lib.optionals (!stdenv.buildPlatform.canExecute stdenv.hostPlatform) [
+    mesonEmulatorHook
+  ];
+
+  buildInputs = [
+    gtk4
+    libadwaita
+  ];
+
+  postInstall = ''
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  meta = with lib; {
+    description = "Securely delete your files";
+    homepage = "https://apps.gnome.org/app/com.github.ADBeveridge.Raider";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ benediktbroich ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/raiseorlaunch/default.nix b/nixpkgs/pkgs/applications/misc/raiseorlaunch/default.nix
new file mode 100644
index 000000000000..9c5f35be9a9e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/raiseorlaunch/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "raiseorlaunch";
+  version = "2.3.5";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-L/hu0mYCAxHkp5me96a6HlEY6QsuJDESpTNhlzVRHWs=";
+  };
+
+  nativeBuildInputs = [ python3Packages.setuptools-scm ];
+  pythonPath = with python3Packages; [ i3ipc ];
+
+  # no tests
+  doCheck = false;
+  pythonImportsCheck = [ "raiseorlaunch" ];
+
+  meta = with lib; {
+    maintainers = with maintainers; [ winpat ];
+    description = "A run-or-raise-application-launcher for i3 window manager";
+    homepage = "https://github.com/open-dynaMIX/raiseorlaunch";
+    license = licenses.mit;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ratt/default.nix b/nixpkgs/pkgs/applications/misc/ratt/default.nix
new file mode 100644
index 000000000000..afdc3c231418
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ratt/default.nix
@@ -0,0 +1,26 @@
+{ buildGoModule, fetchFromSourcehut, lib }:
+buildGoModule rec {
+  pname = "ratt";
+  version = "unstable-2023-02-12";
+
+  src = fetchFromSourcehut {
+    owner = "~ghost08";
+    repo = "ratt";
+    rev = "ed1a675685b9d86d6602e168199ba9b4260f5f06";
+    hash = "sha256-HfS97Lxt6FAj/2/WAzLI06F/h6TP5m2lHHOTAs8XNFY=";
+  };
+
+  proxyVendor = true;
+  vendorHash = "sha256-6cpHDwnxdc/9YPj77JVuT5ZDFjKkF6nBX4RgZr/9fFY=";
+
+  # tests try to access the internet to scrape websites
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A tool for converting websites to rss/atom feeds";
+    homepage = "https://git.sr.ht/~ghost08/ratt";
+    license = licenses.mit;
+    maintainers = with maintainers; [ kmein ];
+    mainProgram = "ratt";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/razergenie/default.nix b/nixpkgs/pkgs/applications/misc/razergenie/default.nix
new file mode 100644
index 000000000000..8f78c0becaf5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/razergenie/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, lib, meson, ninja, pkg-config, qtbase, qttools
+, wrapQtAppsHook
+, enableExperimental ? false
+, includeMatrixDiscovery ? false
+}:
+
+let
+  version = "0.9.0";
+  pname = "razergenie";
+
+in stdenv.mkDerivation {
+  inherit pname version;
+
+  src = fetchFromGitHub {
+    owner = "z3ntu";
+    repo = "RazerGenie";
+    rev = "v${version}";
+    sha256 = "17xlv26q8sdbav00wdm043449pg2424l3yaf8fvkc9rrlqkv13a4";
+  };
+
+  nativeBuildInputs = [
+    pkg-config meson ninja wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase qttools
+  ];
+
+  mesonFlags = [
+    "-Denable_experimental=${lib.boolToString enableExperimental}"
+    "-Dinclude_matrix_discovery=${lib.boolToString includeMatrixDiscovery}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/z3ntu/RazerGenie";
+    description = "Qt application for configuring your Razer devices under GNU/Linux";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ f4814n Mogria ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/reddsaver/default.nix b/nixpkgs/pkgs/applications/misc/reddsaver/default.nix
new file mode 100644
index 000000000000..1c6202eb0dee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/reddsaver/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv
+, fetchFromGitHub
+, rustPlatform
+, openssl
+, pkg-config
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "reddsaver";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "manojkarthick";
+    repo = "reddsaver";
+    rev = "v${version}";
+    sha256 = "07xsrc0w0z7w2w0q44aqnn1ybf9vqry01v3xr96l1xzzc5mkqdzf";
+  };
+
+  cargoSha256 = "0y94dywligcsqs01d228w454ssrzg31p4j8mni9flcr4v29z3rwp";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ]
+    ++ lib.optional stdenv.isDarwin Security;
+
+  # package does not contain tests as of v0.3.3
+  docCheck = false;
+
+  meta = with lib; {
+    description = "CLI tool to download saved media from Reddit";
+    homepage = "https://github.com/manojkarthick/reddsaver";
+    license = with licenses; [ mit /* or */ asl20 ];
+    maintainers = [ maintainers.manojkarthick ];
+    mainProgram = "reddsaver";
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/redshift-plasma-applet/default.nix b/nixpkgs/pkgs/applications/misc/redshift-plasma-applet/default.nix
new file mode 100644
index 000000000000..9bc39aaac4ff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/redshift-plasma-applet/default.nix
@@ -0,0 +1,58 @@
+{ lib, stdenv, cmake, extra-cmake-modules, plasma-framework, kwindowsystem, redshift, fetchFromGitHub, fetchpatch, }:
+
+let version = "1.0.18"; in
+
+stdenv.mkDerivation {
+  pname = "redshift-plasma-applet";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "kotelnik";
+    repo = "plasma-applet-redshift-control";
+    rev = "v${version}";
+    sha256 = "122nnbafa596rxdxlfshxk45lzch8c9342bzj7kzrsjkjg0xr9pq";
+  };
+
+  patches = [
+    # This patch fetches from out-of-source repo because the GitHub copy is frozen,
+    #     the active fork is now on invent.kde.org. Remove this patch when a new version is released and src is updated
+    # Redshift version >= 1.12 requires the -P option to clear the existing effects before applying shading.
+    #     Without it scrolling makes the screen gets darker and darker until it is impossible to see anything.
+    (fetchpatch {
+      url = "https://invent.kde.org/plasma/plasma-redshift-control/-/commit/898c3a4cfc6c317915f1e664078d8606497c4049.patch";
+      sha256 =  "0b6pa3fcj698mgqnc85jbbmcl3qpf418mh06qgsd3c4v237my0nv";
+    })
+  ];
+
+  patchPhase = ''
+    substituteInPlace package/contents/ui/main.qml \
+      --replace "redshiftCommand: 'redshift'" \
+                "redshiftCommand: '${redshift}/bin/redshift'" \
+      --replace "redshiftOneTimeCommand: 'redshift -O " \
+                "redshiftOneTimeCommand: '${redshift}/bin/redshift -O "
+
+    substituteInPlace package/contents/ui/config/ConfigAdvanced.qml \
+      --replace "'redshift -V'" \
+                "'${redshift}/bin/redshift -V'"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+  ];
+
+  buildInputs = [
+    plasma-framework
+    kwindowsystem
+  ];
+
+  dontWrapQtApps = true;
+
+  meta = with lib; {
+    description = "KDE Plasma 5 widget for controlling Redshift";
+    homepage = "https://github.com/kotelnik/plasma-applet-redshift-control";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ benley zraexy ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/redshift/575.patch b/nixpkgs/pkgs/applications/misc/redshift/575.patch
new file mode 100644
index 000000000000..f5beeb6ce518
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/redshift/575.patch
@@ -0,0 +1,51 @@
+From 467156efccc5e36a36bec8c0b64cc5a70f14d5ed Mon Sep 17 00:00:00 2001
+From: Yana Timoshenko <yana@riseup.net>
+Date: Tue, 16 Jan 2018 11:43:46 +0000
+Subject: [PATCH] Fix Autoconf script
+
+gettext/intltool macros are not used correctly, see:
+https://bugs.launchpad.net/inkscape/+bug/1418943
+---
+ bootstrap    | 6 +-----
+ configure.ac | 5 +----
+ 2 files changed, 2 insertions(+), 9 deletions(-)
+
+diff --git a/bootstrap b/bootstrap
+index 0599cf5..40b1dca 100755
+--- a/bootstrap
++++ b/bootstrap
+@@ -1,7 +1,3 @@
+ #!/bin/sh
+ 
+-# change to root directory
+-cd $(dirname "$0")
+-
+-autopoint --force && \
+-	AUTOPOINT="intltoolize --automake --copy" autoreconf --force --install --verbose
++autoreconf --force --install && intltoolize
+diff --git a/configure.ac b/configure.ac
+index be0b51a..a2e7c42 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -17,6 +17,7 @@ AC_PROG_OBJC # For macOS support modules
+ AC_LANG([C])
+ 
+ AC_PROG_INTLTOOL([0.50])
++AC_SUBST(LIBINTL)
+ 
+ AC_CANONICAL_HOST
+ 
+@@ -51,10 +52,6 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], [
+ ])
+ AC_LANG_POP([Objective C])
+ 
+-# Checks for libraries.
+-AM_GNU_GETTEXT_VERSION([0.17])
+-AM_GNU_GETTEXT([external])
+-
+ GETTEXT_PACKAGE=redshift
+ AC_SUBST(GETTEXT_PACKAGE)
+ AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, "$GETTEXT_PACKAGE", [Package name for gettext])
+-- 
+2.15.1
+
diff --git a/nixpkgs/pkgs/applications/misc/redshift/default.nix b/nixpkgs/pkgs/applications/misc/redshift/default.nix
new file mode 100644
index 000000000000..71be8f8b157d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/redshift/default.nix
@@ -0,0 +1,145 @@
+{ lib, stdenv, fetchFromGitHub, fetchFromGitLab
+, autoconf, automake, gettext, intltool
+, libtool, pkg-config, wrapGAppsHook, wrapPython, gobject-introspection
+, gtk3, python, pygobject3, pyxdg
+
+, withQuartz ? stdenv.isDarwin, ApplicationServices
+, withRandr ? stdenv.isLinux, libxcb
+, withDrm ? stdenv.isLinux, libdrm
+
+, withGeolocation ? true
+, withCoreLocation ? withGeolocation && stdenv.isDarwin, CoreLocation, Foundation, Cocoa
+, withGeoclue ? withGeolocation && stdenv.isLinux, geoclue
+, withAppIndicator ? stdenv.isLinux, libappindicator, libayatana-appindicator
+}:
+
+let
+  mkRedshift =
+    { pname, version, src, meta }:
+    stdenv.mkDerivation rec {
+      inherit pname version src meta;
+
+      patches = lib.optionals (pname != "gammastep") [
+        # https://github.com/jonls/redshift/pull/575
+        ./575.patch
+      ];
+
+      nativeBuildInputs = [
+        autoconf
+        automake
+        gettext
+        intltool
+        libtool
+        pkg-config
+        wrapGAppsHook
+        wrapPython
+        gobject-introspection
+      ];
+
+      configureFlags = [
+        "--enable-randr=${if withRandr then "yes" else "no"}"
+        "--enable-geoclue2=${if withGeoclue then "yes" else "no"}"
+        "--enable-drm=${if withDrm then "yes" else "no"}"
+        "--enable-quartz=${if withQuartz then "yes" else "no"}"
+        "--enable-corelocation=${if withCoreLocation then "yes" else "no"}"
+      ] ++ lib.optionals (pname == "gammastep") [
+        "--with-systemduserunitdir=${placeholder "out"}/lib/systemd/user/"
+        "--enable-apparmor"
+      ];
+
+      buildInputs = [
+        gtk3
+        python
+      ] ++ lib.optional  withRandr        libxcb
+        ++ lib.optional  withGeoclue      geoclue
+        ++ lib.optional  withDrm          libdrm
+        ++ lib.optional  withQuartz       ApplicationServices
+        ++ lib.optionals withCoreLocation [ CoreLocation Foundation Cocoa ]
+        ++ lib.optional  withAppIndicator (if (pname != "gammastep")
+             then libappindicator
+             else libayatana-appindicator)
+        ;
+
+      pythonPath = [ pygobject3 pyxdg ];
+
+      preConfigure = "./bootstrap";
+
+      dontWrapGApps = true;
+
+      preFixup = ''
+        makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+      '';
+
+      postFixup = ''
+        wrapPythonPrograms
+        wrapGApp $out/bin/${pname}
+      '';
+
+      # the geoclue agent may inspect these paths and expect them to be
+      # valid without having the correct $PATH set
+      postInstall = if (pname == "gammastep") then ''
+        substituteInPlace $out/share/applications/gammastep.desktop \
+          --replace 'Exec=gammastep' "Exec=$out/bin/gammastep"
+        substituteInPlace $out/share/applications/gammastep-indicator.desktop \
+          --replace 'Exec=gammastep-indicator' "Exec=$out/bin/gammastep-indicator"
+      '' else ''
+        substituteInPlace $out/share/applications/redshift.desktop \
+          --replace 'Exec=redshift' "Exec=$out/bin/redshift"
+        substituteInPlace $out/share/applications/redshift-gtk.desktop \
+          --replace 'Exec=redshift-gtk' "Exec=$out/bin/redshift-gtk"
+      '';
+
+      enableParallelBuilding = true;
+    };
+in
+rec {
+  redshift = mkRedshift rec {
+    pname = "redshift";
+    version = "1.12";
+
+    src = fetchFromGitHub {
+      owner = "jonls";
+      repo = "redshift";
+      rev = "v${version}";
+      sha256 = "12cb4gaqkybp4bkkns8pam378izr2mwhr2iy04wkprs2v92j7bz6";
+    };
+
+    meta = with lib; {
+      description = "Screen color temperature manager";
+      longDescription = ''
+        Redshift adjusts the color temperature according to the position
+        of the sun. A different color temperature is set during night and
+        daytime. During twilight and early morning, the color temperature
+        transitions smoothly from night to daytime temperature to allow
+        your eyes to slowly adapt. At night the color temperature should
+        be set to match the lamps in your room.
+      '';
+      license = licenses.gpl3Plus;
+      homepage = "http://jonls.dk/redshift";
+      platforms = platforms.unix;
+      mainProgram = "redshift";
+      maintainers = with maintainers; [ yana ];
+    };
+  };
+
+  gammastep = mkRedshift rec {
+    pname = "gammastep";
+    version = "2.0.9";
+
+    src = fetchFromGitLab {
+      owner = "chinstrap";
+      repo = pname;
+      rev = "v${version}";
+      sha256 = "sha256-EdVLBBIEjMu+yy9rmcxQf4zdW47spUz5SbBDbhmLjOU=";
+    };
+
+    meta = redshift.meta // {
+      name = "${pname}-${version}";
+      longDescription = "Gammastep"
+        + lib.removePrefix "Redshift" redshift.meta.longDescription;
+      homepage = "https://gitlab.com/chinstrap/gammastep";
+      mainProgram = "gammastep";
+      maintainers = (with lib.maintainers; [ eclairevoyant primeos ]) ++ redshift.meta.maintainers;
+    };
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/regextester/default.nix b/nixpkgs/pkgs/applications/misc/regextester/default.nix
new file mode 100644
index 000000000000..e5900a050efc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/regextester/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv
+, fetchFromGitHub
+, vala
+, gettext
+, libxml2
+, pkg-config
+, glib
+, gtk3
+, libgee
+, meson
+, ninja
+, gobject-introspection
+, gsettings-desktop-schemas
+, desktop-file-utils
+, pantheon
+, wrapGAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "regextester";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "artemanufrij";
+    repo = "regextester";
+    rev = version;
+    hash = "sha256-5+gU8DeB99w2h/4vMal2eHkR0305dmRYiY6fsLZzlnc=";
+  };
+
+  nativeBuildInputs = [
+    vala
+    gettext
+    gobject-introspection
+    libxml2
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    pantheon.granite
+    glib
+    libgee
+    gsettings-desktop-schemas
+    gtk3
+  ];
+
+  postInstall = ''
+    ${glib.dev}/bin/glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  meta = with lib; {
+    description = "A desktop application to test regular expressions interactively";
+    homepage = "https://github.com/artemanufrij/regextester";
+    maintainers = with maintainers; [ samdroid-apps ];
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix b/nixpkgs/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix
new file mode 100644
index 000000000000..64baaf5d1b08
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildPythonApplication, fetchPypi, python3Packages }:
+
+buildPythonApplication rec {
+  pname = "remarkable-mouse";
+  version = "7.1.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-82P9tE3jiUlKBGZCiWDoL+9VJ06Bc+If+aMfcEEU90U=";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ screeninfo paramiko pynput libevdev ];
+
+  # no tests
+  doCheck = false;
+  pythonImportsCheck = [ "remarkable_mouse" ];
+
+  meta = with lib; {
+    description = "A program to use a reMarkable as a graphics tablet";
+    homepage = "https://github.com/evidlo/remarkable_mouse";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.nickhu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/remarkable/restream/default.nix b/nixpkgs/pkgs/applications/misc/remarkable/restream/default.nix
new file mode 100644
index 000000000000..c5958aff724c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/remarkable/restream/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, lz4
+, ffmpeg-full
+, fetchFromGitHub
+, openssh
+, netcat
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "restream";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "rien";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-AXHKOfdIM3LsHF6u3M/lMhhcuPZADoEal7de3zlx7L4=";
+  };
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D ${src}/restream.arm.static $out/libexec/restream.arm.static
+    install -D ${src}/reStream.sh $out/bin/restream
+
+    runHook postInstall
+  '';
+
+  postInstall = let
+    deps = [
+      # `ffmpeg-full` is used here to bring in `ffplay`, which is used
+      # to display the reMarkable framebuffer
+      ffmpeg-full
+      lz4
+      openssh
+      # Libressl netcat brings in `nc` which used for --uncompressed mode.
+      netcat
+    ];
+  in ''
+    # This `sed` command has the same effect as `wrapProgram`, except
+    # without .restream-wrapped store paths appearing everywhere.
+    sed -i \
+      '2i export PATH=$PATH''${PATH:+':'}${lib.makeBinPath deps}' \
+      "$out/bin/restream"
+  '';
+
+  meta = with lib; {
+    description = "reMarkable screen sharing over SSH";
+    homepage = "https://github.com/rien/reStream";
+    license = licenses.mit;
+    maintainers = [ maintainers.cpcloud ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/remarkable/rmapi/default.nix b/nixpkgs/pkgs/applications/misc/remarkable/rmapi/default.nix
new file mode 100644
index 000000000000..585a18bb3432
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/remarkable/rmapi/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "rmapi";
+  version = "0.0.25";
+
+  src = fetchFromGitHub {
+    owner = "juruen";
+    repo = "rmapi";
+    rev = "v${version}";
+    sha256 = "sha256-7pwCd9tey7w5B8UgsMLHegPqmmY1prLM+Sk9o42X9lY=";
+  };
+
+  vendorHash = "sha256-Id2RaiSxthyR6egDQz2zulbSZ4STRTaA3yQIr6Mx9kg=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A Go app that allows access to the ReMarkable Cloud API programmatically";
+    homepage = "https://github.com/juruen/rmapi";
+    changelog = "https://github.com/juruen/rmapi/blob/v${version}/CHANGELOG.md";
+    license = licenses.agpl3Only;
+    maintainers = [ maintainers.nickhu ];
+    mainProgram = "rmapi";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/remarkable/rmview/default.nix b/nixpkgs/pkgs/applications/misc/remarkable/rmview/default.nix
new file mode 100644
index 000000000000..24627025ca9f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/remarkable/rmview/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, python3Packages, wrapQtAppsHook }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "rmview";
+  version = "3.1.3";
+
+  src = fetchFromGitHub {
+    owner = "bordaigorl";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-V26zmu8cQkLs0IMR7eFO8x34McnT3xYyzlZfntApYkk=";
+  };
+
+  nativeBuildInputs = with python3Packages; [ pyqt5 wrapQtAppsHook ];
+  propagatedBuildInputs = with python3Packages; [ pyqt5 paramiko twisted pyjwt pyopenssl service-identity sshtunnel ];
+
+  preBuild = ''
+    pyrcc5 -o src/rmview/resources.py resources.qrc
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Fast live viewer for reMarkable 1 and 2";
+    homepage = "https://github.com/bordaigorl/rmview";
+    license = licenses.gpl3Only;
+    maintainers = [ maintainers.nickhu ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/remnote/default.nix b/nixpkgs/pkgs/applications/misc/remnote/default.nix
new file mode 100644
index 000000000000..a7c781ebdda8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/remnote/default.nix
@@ -0,0 +1,52 @@
+{ lib, stdenv, fetchurl, appimageTools, makeDesktopItem }:
+
+stdenv.mkDerivation (finalAttrs: let
+  inherit (finalAttrs) pname version src appexec icon desktopItem;
+
+in
+{
+  pname = "remnote";
+  version = "1.13.52";
+
+  src = fetchurl {
+    url = "https://download.remnote.io/remnote-desktop/RemNote-${version}.AppImage";
+    hash = "sha256-4wN4lqeA9olo6igr1M1JhecPG/ruVivdOyWiRlDAzQQ=";
+  };
+  appexec = appimageTools.wrapType2 {
+    inherit pname version src;
+  };
+  icon = fetchurl {
+    url = "https://www.remnote.io/icon.png";
+    hash = "sha256-r5D7fNefKPdjtmV7f/88Gn3tqeEG8LGuD4nHI/sCk94=";
+  };
+  desktopItem = makeDesktopItem {
+    type = "Application";
+    name = "remnote";
+    desktopName = "RemNote";
+    comment = "Spaced Repetition";
+    icon = "remnote";
+    exec = "remnote %u";
+    categories = [ "Office" ];
+    mimeTypes = [ "x-scheme-handler/remnote" "x-scheme-handler/rn" ];
+  };
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+  installPhase = ''
+    runHook preInstall
+
+    install -D ${appexec}/bin/remnote-${version} $out/bin/remnote
+    install -m 444 -D "${desktopItem}/share/applications/"* -t $out/share/applications/
+    install -m 444 -D ${icon} $out/share/pixmaps/remnote.png
+
+    runHook postInstall
+  '';
+  meta = with lib; {
+    description = "A note-taking application focused on learning and productivity";
+    homepage = "https://remnote.com/";
+    maintainers = with maintainers; [ max-niederman chewblacka ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "remnote";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/remontoire/default.nix b/nixpkgs/pkgs/applications/misc/remontoire/default.nix
new file mode 100644
index 000000000000..fdabc149d6db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/remontoire/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, wrapGAppsHook
+, desktop-file-utils
+, glib
+, gtk3
+, json-glib
+, libgee
+, librsvg
+, meson
+, ninja
+, pkg-config
+, python3
+, vala
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "remontoire";
+  version = "unstable-2022-06-19";
+
+  src = fetchFromGitHub {
+    owner = "regolith-linux";
+    repo = "remontoire";
+    rev = "68d562c78d6e0094ca744bd7161c308f583e93e";
+    hash = "sha256-Cb6tzTGZdQA9oA04DO/xLBw5F+FRj5BM2Aa62YWGmZA=";
+  };
+
+  nativeBuildInputs = [
+    glib
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    gtk3
+    json-glib
+    libgee
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/postinstall.py
+    patchShebangs build-aux/meson/postinstall.py
+  '';
+
+  meta = with lib; {
+    description = "A small GTK app for presenting keybinding hints";
+    homepage = "https://github.com/regolith-linux/remontoire";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ aacebedo ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/rescuetime/default.nix b/nixpkgs/pkgs/applications/misc/rescuetime/default.nix
new file mode 100644
index 000000000000..22a1964e466d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rescuetime/default.nix
@@ -0,0 +1,60 @@
+{ stdenv, lib, fetchurl, dpkg, patchelf, qt5, libXtst, libXext, libX11, mkDerivation, libXScrnSaver, writeScript, common-updater-scripts, curl, pup }:
+
+let
+  version = "2.16.5.1";
+  src =
+    if stdenv.hostPlatform.system == "i686-linux" then fetchurl {
+      name = "rescuetime-installer.deb";
+      url = "https://www.rescuetime.com/installers/rescuetime_${version}_i386.deb";
+      sha256 = "1xrvyy0higc1fbc8ascpaszvg2bl6x0a35bzmdq6dkay48hnrd8b";
+    } else fetchurl {
+      name = "rescuetime-installer.deb";
+      url = "https://www.rescuetime.com/installers/rescuetime_${version}_amd64.deb";
+      sha256 = "09ng0yal66d533vzfv27k9l2va03rqbqmsni43qi3hgx7w9wx5ii";
+    };
+in mkDerivation rec {
+  # https://www.rescuetime.com/updates/linux_release_notes.html
+  inherit version;
+  pname = "rescuetime";
+  inherit src;
+  nativeBuildInputs = [ dpkg ];
+  # avoid https://github.com/NixOS/patchelf/issues/99
+  dontStrip = true;
+  unpackPhase = ''
+    mkdir pkg
+    dpkg-deb -x $src pkg
+    sourceRoot=pkg
+  '';
+  installPhase = ''
+    mkdir -p $out/bin
+    cp usr/bin/rescuetime $out/bin
+
+    ${patchelf}/bin/patchelf \
+      --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${lib.makeLibraryPath [ qt5.qtbase libXtst libXext libX11 libXScrnSaver ]}" \
+      $out/bin/rescuetime
+  '';
+
+  passthru.updateScript = writeScript "${pname}-updater" ''
+    #!${stdenv.shell}
+    set -eu -o pipefail
+    PATH=${lib.makeBinPath [curl pup common-updater-scripts]}:$PATH
+    latestVersion="$(curl -sS https://www.rescuetime.com/release-notes/linux | pup '.release:first-of-type h2 strong text{}' | tr -d '\n')"
+
+    for platform in ${lib.concatStringsSep " " meta.platforms}; do
+      # The script will not perform an update when the version attribute is up to date from previous platform run
+      # We need to clear it before each run
+      update-source-version ${pname} 0 $(yes 0 | head -64 | tr -d "\n") --system=$platform
+      update-source-version ${pname} "$latestVersion" --system=$platform
+    done
+  '';
+
+  meta = with lib; {
+    description = "Helps you understand your daily habits so you can focus and be more productive";
+    homepage    = "https://www.rescuetime.com";
+    maintainers = with maintainers; [ ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license     = licenses.unfree;
+    platforms   = [ "i686-linux" "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/resp-app/default.nix b/nixpkgs/pkgs/applications/misc/resp-app/default.nix
new file mode 100644
index 000000000000..b95bc98fdd3a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/resp-app/default.nix
@@ -0,0 +1,103 @@
+{ stdenv
+, mkDerivation
+, lib
+, fetchFromGitHub
+, fetchpatch
+, brotli
+, lz4
+, pyotherside
+, python3
+, python3Packages
+, qtbase
+, qtcharts
+, qmake
+, qttools
+, rdbtools
+, snappy
+, wrapQtAppsHook
+, zstd
+}:
+
+let
+  rdbtools-patched = rdbtools.overridePythonAttrs (oldAttrs: {
+    # Add required additional flag for resp-app
+    patches = [
+      (fetchpatch {
+        name = "Add-flag-to-parse-only-key-names.patch";
+        url = "https://github.com/uglide/redis-rdb-tools/commit/b74946e6fbca589947ef0186429d5ce45a074b87.patch";
+        hash = "sha256-1gjqB/IDSsAbrwzWSezlAW/2SYr6BFm1QJ2HAHK2fFs=";
+      })
+    ];
+  });
+in
+mkDerivation rec {
+  pname = "RESP.app";
+  version = "2022.5";
+
+  src = fetchFromGitHub {
+    owner = "RedisInsight";
+    repo = "RedisDesktopManager";
+    fetchSubmodules = true;
+    rev = version;
+    sha256 = "sha256-5eI3J2RsYE5Ejb1r8YkgzmGX2FyaCLFD0lc10J+fOT4=";
+  };
+
+  nativeBuildInputs = [
+    python3Packages.wrapPython
+    qmake
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    brotli
+    lz4
+    pyotherside
+    python3
+    qtbase
+    qtcharts
+    qttools
+    snappy
+    zstd
+  ] ++ pythonPath;
+
+
+  pythonPath = with python3Packages; [
+    bitstring
+    cbor
+    msgpack
+    phpserialize
+    rdbtools-patched
+    python-lzf
+  ];
+
+  postPatch = ''
+    substituteInPlace src/resp.pro \
+      --replace 'which ccache' "false" \
+      --replace 'target.files = $$DESTDIR/resp' "${placeholder "src"}/bin/linux/release/resp" \
+      --replace '/opt/resp_app' "${placeholder "out"}" \
+      --replace 'target.path = $$LINUX_INSTALL_PATH' 'target.path = $$LINUX_INSTALL_PATH/bin' \
+      --replace '/usr/' "$out/"
+  '';
+
+  qmakeFlags = [
+    "SYSTEM_LZ4=1"
+    "SYSTEM_ZSTD=1"
+    "SYSTEM_SNAPPY=1"
+    "SYSTEM_BROTLI=1"
+    "VERSION=${version}"
+    "src/resp.pro"
+  ];
+
+  preFixup = ''
+    buildPythonPath "$pythonPath"
+    qtWrapperArgs+=(--prefix PYTHONPATH : "$program_PYTHONPATH")
+  '';
+
+  meta = with lib; {
+    description = "Cross-platform Developer GUI for Redis";
+    homepage = "https://resp.app/";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/resumed/default.nix b/nixpkgs/pkgs/applications/misc/resumed/default.nix
new file mode 100644
index 000000000000..e1f6928dcdbb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/resumed/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildNpmPackage, fetchFromGitHub }:
+
+buildNpmPackage rec {
+  pname = "resumed";
+  version = "3.0.1";
+
+  src = fetchFromGitHub {
+    owner = "rbardini";
+    repo = "resumed";
+    rev = "v${version}";
+    hash = "sha256-X1efWl0CjbEbhNfDUNvb5SCc2exfI8v95gzqcaKU5eU=";
+  };
+
+  npmDepsHash = "sha256-b8NeO0w2UH1wEifDCkl8L48LoJM0jLStE0fO9G438dU=";
+
+  meta = with lib; {
+    description = "Lightweight JSON Resume builder, no-frills alternative to resume-cli";
+    homepage = "https://github.com/rbardini/resumed";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ambroisie ];
+    mainProgram = "resumed";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/retool/default.nix b/nixpkgs/pkgs/applications/misc/retool/default.nix
new file mode 100644
index 000000000000..8d7811120979
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/retool/default.nix
@@ -0,0 +1,59 @@
+{ lib
+, stdenv
+, python3
+, fetchFromGitHub
+, qt6
+}:
+
+python3.pkgs.buildPythonApplication {
+  pname = "retool";
+  version = "unstable-2023-08-24";
+
+  format = "pyproject";
+  disabled = python3.pkgs.pythonOlder "3.10";
+
+  src = fetchFromGitHub {
+    owner = "unexpectedpanda";
+    repo = "retool";
+    rev =  "d8acdb960d35b5a6b01d7dc66b7e40b3ec451301";
+    hash = "sha256-6y/7RR7O2xYKXdxaFtkRfnSlwygp/LRDUozUJo6ue7s=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    poetry-core
+    pythonRelaxDepsHook
+    qt6.wrapQtAppsHook
+  ];
+
+  pythonRelaxDeps = true;
+
+  # ERROR: Could not find a version that satisfies the requirement PySide6 (from retool) (from versions: none)
+  # ERROR: No matching distribution found for PySide6
+  pythonRemoveDeps = [ "PySide6" ];
+
+  buildInputs = [
+    qt6.qtbase
+  ] ++
+  lib.optionals (stdenv.isLinux) [
+    qt6.qtwayland
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    alive-progress
+    lxml
+    psutil
+    validators
+    pyside6
+    strictyaml
+  ];
+
+  # Upstream has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A better filter tool for Redump and No-Intro dats";
+    homepage = "https://github.com/unexpectedpanda/retool";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ thiagokokada ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/revanced-cli/default.nix b/nixpkgs/pkgs/applications/misc/revanced-cli/default.nix
new file mode 100644
index 000000000000..56923e0ee195
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/revanced-cli/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, makeWrapper, jre }:
+
+stdenv.mkDerivation rec {
+  pname = "revanced-cli";
+  version = "4.4.0";
+
+  src = fetchurl {
+    url = "https://github.com/revanced/revanced-cli/releases/download/v${version}/revanced-cli-${version}-all.jar";
+    hash = "sha256-ydP9iPClWNKlbBhsNC1bzqfJYRyit1WsxIgwbQQbgi8=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ jre ];
+
+  dontUnpack = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$prefix/bin"
+
+    makeWrapper ${jre}/bin/java $out/bin/revanced-cli \
+      --add-flags "-jar $src" \
+      --prefix PATH : "$PATH"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Command line application as an alternative to the ReVanced Manager";
+    homepage = "https://github.com/revanced/revanced-cli";
+    license = licenses.gpl3Only;
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    maintainers = with maintainers; [ jopejoe1 ];
+    mainProgram = "revanced-cli";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/river-luatile/default.nix b/nixpkgs/pkgs/applications/misc/river-luatile/default.nix
new file mode 100644
index 000000000000..8999ea2445e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/river-luatile/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, luajit
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "river-luatile";
+  version = "0.1.3";
+
+  src = fetchFromGitHub {
+    owner = "MaxVerevkin";
+    repo = "river-luatile";
+    rev = "v${version}";
+    hash = "sha256-ZBytoj4L72TjxJ7vFivjcSO69AcdwKNbXh4rA/bn5iU=";
+  };
+
+  cargoHash = "sha256-GcMSglLKuUD3nVj0/8Nbrk4qs5gl5PlCj7r1MYq/vQg=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    luajit
+  ];
+
+  meta = with lib; {
+    description = "Write your own river layout generator in lua";
+    homepage = "https://github.com/MaxVerevkin/river-luatile";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ pinpox ];
+    mainProgram = "river-luatile";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/river-tag-overlay/default.nix b/nixpkgs/pkgs/applications/misc/river-tag-overlay/default.nix
new file mode 100644
index 000000000000..e1652cf70da7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/river-tag-overlay/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromSourcehut, fetchpatch
+, wayland, pixman, pkg-config, wayland-scanner
+}:
+
+stdenv.mkDerivation rec {
+  pname = "river-tag-overlay";
+  version = "1.0.0";
+
+  src = fetchFromSourcehut {
+    owner = "~leon_plickat";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-hLyXdLi/ldvwPJ1oQQsH5wgflQJuXu6vhYw/qdKAV9E=";
+  };
+
+  patches = [
+    # Backport cross fix.
+    (fetchpatch {
+      url = "https://git.sr.ht/~leon_plickat/river-tag-overlay/commit/791eaadf46482121a4c811ffba13d03168d74d8f.patch";
+      sha256 = "CxSDcweHGup1EF3oD/2vhP6RFoeYorj0BwmlgA3tbPE=";
+    })
+  ];
+
+  buildInputs = [ pixman wayland ];
+  nativeBuildInputs = [ pkg-config wayland-scanner ];
+
+  makeFlags = [
+    "DESTDIR=${placeholder "out"}"
+    "PREFIX="
+  ];
+
+  meta = with lib; {
+    description = "A pop-up showing tag status";
+    homepage = "https://sr.ht/~leon_plickat/river-tag-overlay";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ edrex ];
+    platforms = platforms.linux;
+    mainProgram = "river-tag-overlay";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rivercarro/default.nix b/nixpkgs/pkgs/applications/misc/rivercarro/default.nix
new file mode 100644
index 000000000000..93b476973f55
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rivercarro/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, pkg-config
+, river
+, wayland
+, wayland-protocols
+, zig_0_11
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "rivercarro";
+  version = "0.3.0";
+
+  src = fetchFromSourcehut {
+    owner = "~novakane";
+    repo = "rivercarro";
+    rev = "v${finalAttrs.version}";
+    fetchSubmodules = true;
+    hash = "sha256-lucwn9MmyVd4pynuG/ZAXnZ384wdS0gi7JN44vNQA1I=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    river
+    wayland
+    wayland-protocols
+    zig_0_11.hook
+  ];
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~novakane/rivercarro";
+    description = "A layout generator for river Wayland compositor, fork of rivertile";
+    longDescription = ''
+      A slightly modified version of rivertile layout generator for river.
+
+      Compared to rivertile, rivercarro adds:
+      - Monocle layout, views will takes all the usable area on the screen.
+      - Gaps instead of padding around views or layout area.
+      - Modify gaps size at runtime.
+      - Smart gaps, if there is only one view, gaps will be disable.
+      - Limit the width of the usable area of the screen.
+    '';
+    changelog = "https://git.sr.ht/~novakane/rivercarro/refs/v${finalAttrs.version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kraem ];
+    inherit (zig_0_11.meta) platforms;
+    mainProgram = "rivercarro";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/rlaunch/default.nix b/nixpkgs/pkgs/applications/misc/rlaunch/default.nix
new file mode 100644
index 000000000000..da90dbe5d74a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rlaunch/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, fetchFromGitHub
+, fetchpatch
+, rustPlatform
+, xorg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rlaunch";
+  version = "1.3.14";
+
+  src = fetchFromGitHub {
+    owner = "PonasKovas";
+    repo = pname;
+    rev = version;
+    hash = "sha256-PyCR/ob947W+6T56y1se74aNy1avJDb2ELyv2aGf1og=";
+  };
+
+  cargoHash = "sha256-/a1SjGDcauOy1vmXvmWBZmag8G+T2au+Z7b0y1Vj3C8=";
+
+  # The x11_dl crate dlopen()s these libraries, so we have to inject them into rpath.
+  postFixup = ''
+    patchelf --set-rpath ${lib.makeLibraryPath (with xorg; [ libX11 libXft libXinerama ])} $out/bin/rlaunch
+  '';
+
+  meta = with lib; {
+    description = "A lightweight application launcher for X11";
+    homepage = "https://github.com/PonasKovas/rlaunch";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ danc86 ];
+    mainProgram = "rlaunch";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rm-improved/default.nix b/nixpkgs/pkgs/applications/misc/rm-improved/default.nix
new file mode 100644
index 000000000000..be5fb6344494
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rm-improved/default.nix
@@ -0,0 +1,23 @@
+{ fetchFromGitHub, rustPlatform, lib }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rm-improved";
+  version = "0.13.0";
+
+  cargoSha256 = "0wgpr6gx9dpvf02xgvrdbyiqfz1k9vipnvriz3jg0cz7n1afqisj";
+
+  src = fetchFromGitHub {
+    owner = "nivekuil";
+    repo = "rip";
+    rev = "0.13.0";
+    sha256 = "0d065xia4mwdhxkiqfg7pic6scfzipzmsvvx7l6l97w62lzpiqx3";
+  };
+
+  meta = with lib; {
+    description = "Replacement for rm with focus on safety, ergonomics and performance";
+    homepage = "https://github.com/nivekuil/rip";
+    maintainers = with maintainers; [ nils-degroot ];
+    mainProgram = "rip";
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/robo3t/default.nix b/nixpkgs/pkgs/applications/misc/robo3t/default.nix
new file mode 100644
index 000000000000..c2ea6a2a2552
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/robo3t/default.nix
@@ -0,0 +1,99 @@
+{ lib
+, stdenv
+, fetchurl
+, curlWithGnuTls
+, zlib
+, glib
+, xorg
+, dbus
+, fontconfig
+, libGL
+, freetype
+, xkeyboard_config
+, makeDesktopItem
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "robo3t";
+  version = "1.4.3";
+  rev = "48f7dfd";
+
+  src = fetchurl {
+    url = "https://github.com/Studio3T/robomongo/releases/download/v${version}/robo3t-${version}-linux-x86_64-${rev}.tar.gz";
+    sha256 = "sha256-pH4q/O3bq45ZZn+s/12iScd0WbfkcLjK4MBdVCMXK00=";
+  };
+
+  icon = fetchurl {
+    url = "https://github.com/Studio3T/robomongo/raw/${rev}/install/macosx/robomongo.iconset/icon_128x128.png";
+    sha256 = "sha256-2PkUxBq2ow0wl09k8B6LJJUQ+y4GpnmoAeumKN1u5xg=";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "robo3t";
+    exec = "robo3t";
+    icon = icon;
+    comment = "Query GUI for mongodb";
+    desktopName = "Robo3T";
+    genericName = "MongoDB management tool";
+    categories = [ "Development" "IDE" ];
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  ldLibraryPath = lib.makeLibraryPath [
+    stdenv.cc.cc
+    zlib
+    glib
+    xorg.libXi
+    xorg.libxcb
+    xorg.libXrender
+    xorg.libX11
+    xorg.libSM
+    xorg.libICE
+    xorg.libXext
+    dbus
+    fontconfig
+    freetype
+    libGL
+    curlWithGnuTls
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    BASEDIR=$out/lib/robo3t
+
+    mkdir -p $BASEDIR/bin
+    cp bin/* $BASEDIR/bin
+
+    mkdir -p $BASEDIR/lib
+    cp -r lib/* $BASEDIR/lib
+
+    mkdir -p $out/share/applications
+    cp $desktopItem/share/applications/* $out/share/applications
+
+    mkdir -p $out/share/icons
+    cp ${icon} $out/share/icons/robomongo.png
+
+    patchelf --set-interpreter ${stdenv.cc.libc}/lib/ld-linux-x86-64.so.2 $BASEDIR/bin/robo3t
+
+    mkdir $out/bin
+
+    makeWrapper $BASEDIR/bin/robo3t $out/bin/robo3t \
+      --suffix LD_LIBRARY_PATH : ${ldLibraryPath} \
+      --suffix QT_XKB_CONFIG_ROOT : ${xkeyboard_config}/share/X11/xkb
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://robomongo.org/";
+    description = "Query GUI for mongodb. Formerly called Robomongo";
+    platforms = [ "x86_64-linux" ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ eperuffo ];
+    mainProgram = "robo3t";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi-bluetooth/default.nix b/nixpkgs/pkgs/applications/misc/rofi-bluetooth/default.nix
new file mode 100644
index 000000000000..01307494340c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-bluetooth/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, bluez
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "rofi-bluetooth";
+  version = "unstable-2023-02-03";
+
+  src = fetchFromGitHub {
+    owner = "nickclyde";
+    repo = finalAttrs.pname;
+    # https://github.com/nickclyde/rofi-bluetooth/issues/19
+    rev = "9d91c048ff129819f4c6e9e48a17bd54343bbffb";
+    sha256 = "sha256-1Xe3QFThIvJDCUznDP5ZBzwZEMuqmxpDIV+BcVvQDG8=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D --target-directory=$out/bin/ ./rofi-bluetooth
+
+    wrapProgram $out/bin/rofi-bluetooth \
+      --prefix PATH ":" ${lib.makeBinPath [ bluez ] }
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Rofi-based interface to connect to bluetooth devices and display status info";
+    homepage = "https://github.com/nickclyde/rofi-bluetooth";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ MoritzBoehme ];
+    mainProgram = "rofi-bluetooth";
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/rofi-emoji/0001-Patch-plugindir-to-output.patch b/nixpkgs/pkgs/applications/misc/rofi-emoji/0001-Patch-plugindir-to-output.patch
new file mode 100644
index 000000000000..9b9479b1b49a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-emoji/0001-Patch-plugindir-to-output.patch
@@ -0,0 +1,25 @@
+From 695e7a441fc28b874e65917fe2c0059b5b8ca749 Mon Sep 17 00:00:00 2001
+From: Cole Helbling <cole.e.helbling@outlook.com>
+Date: Sat, 28 Mar 2020 23:46:03 -0700
+Subject: [PATCH] Patch plugindir to output
+
+---
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 75e476f..cb1ddf7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -55,7 +55,7 @@ PKG_CHECK_MODULES([glib],     [glib-2.0 >= 2.40 gio-unix-2.0 gmodule-2.0 ])
+ PKG_CHECK_MODULES([cairo],    [cairo])
+ PKG_CHECK_MODULES([rofi],     [rofi])
+ 
+-[rofi_PLUGIN_INSTALL_DIR]="`$PKG_CONFIG --variable=pluginsdir rofi`"
++[rofi_PLUGIN_INSTALL_DIR]="`echo $out/lib/rofi`"
+ AC_SUBST([rofi_PLUGIN_INSTALL_DIR])
+ 
+ LT_INIT([disable-static])
+-- 
+2.25.1
+
diff --git a/nixpkgs/pkgs/applications/misc/rofi-emoji/default.nix b/nixpkgs/pkgs/applications/misc/rofi-emoji/default.nix
new file mode 100644
index 000000000000..921ba4ddd9b3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-emoji/default.nix
@@ -0,0 +1,67 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+
+, autoreconfHook
+, pkg-config
+
+, cairo
+, glib
+, libnotify
+, rofi-unwrapped
+, wl-clipboard
+, xclip
+, xsel
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-emoji";
+  version = "3.3.0";
+
+  src = fetchFromGitHub {
+    owner = "Mange";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-Y+E5TViKFVtqXMLVEcq1VMLPzG04vfZyThUM7a/fFGM=";
+  };
+
+  patches = [
+    # Look for plugin-related files in $out/lib/rofi
+    ./0001-Patch-plugindir-to-output.patch
+  ];
+
+  postPatch = ''
+    patchShebangs clipboard-adapter.sh
+  '';
+
+  postFixup = ''
+    chmod +x $out/share/rofi-emoji/clipboard-adapter.sh
+    wrapProgram $out/share/rofi-emoji/clipboard-adapter.sh \
+      --prefix PATH ":" ${lib.makeBinPath [ libnotify wl-clipboard xclip xsel ]}
+  '';
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+    makeWrapper
+  ];
+
+  buildInputs = [
+    cairo
+    glib
+    libnotify
+    rofi-unwrapped
+    wl-clipboard
+    xclip
+    xsel
+  ];
+
+  meta = with lib; {
+    description = "An emoji selector plugin for Rofi";
+    homepage = "https://github.com/Mange/rofi-emoji";
+    license = licenses.mit;
+    maintainers = with maintainers; [ cole-h ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi-file-browser/default.nix b/nixpkgs/pkgs/applications/misc/rofi-file-browser/default.nix
new file mode 100644
index 000000000000..0dff62cca229
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-file-browser/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, rofi, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-file-browser-extended";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "marvinkreis";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-UEFv0skFzWhgFkmz1h8uV1ygW977zNq1Dw8VAawqUgw=";
+    fetchSubmodules = true;
+  };
+
+  prePatch = ''
+    substituteInPlace ./CMakeLists.txt \
+      --replace ' ''${ROFI_PLUGINS_DIR}' " $out/lib/rofi" \
+      --replace "/usr/share/" "$out/share/"
+  '';
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ rofi gtk3 ];
+
+  ROFI_PLUGINS_DIR = "$out/lib/rofi";
+
+  dontUseCmakeBuildDir = true;
+
+  meta = with lib; {
+    description = "Use rofi to quickly open files";
+    homepage = "https://github.com/marvinkreis/rofi-file-browser-extended";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jluttine ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi-menugen/default.nix b/nixpkgs/pkgs/applications/misc/rofi-menugen/default.nix
new file mode 100644
index 000000000000..569ae6ef4cd8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-menugen/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, rofi, gnused }:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-menugen";
+  version = "unstable-2015-12-28";
+
+  src = fetchFromGitHub {
+    owner = "octotep";
+    repo = "menugen";
+    rev = "168efd2608fdb88b1aff3e0244bda8402169f207";
+    sha256 = "09fk9i6crw772qlc5zld35pcff1jq4jcag0syial2q000fbpjx5m";
+  };
+
+  postPatch = ''
+    sed -i -e "s|menugenbase|$out/bin/rofi-menugenbase|" menugen
+    sed -i -e "s|rofi |${rofi}/bin/rofi |" menugen
+    sed -i -e "s|sed |${gnused}/bin/sed |" menugenbase
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp menugen $out/bin/rofi-menugen
+    cp menugenbase $out/bin/rofi-menugenbase
+  '';
+
+  meta = with lib; {
+    description = "Generates menu based applications using rofi";
+    homepage = "https://github.com/octotep/menugen";
+    maintainers = with maintainers; [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi-power-menu/default.nix b/nixpkgs/pkgs/applications/misc/rofi-power-menu/default.nix
new file mode 100644
index 000000000000..c16311e67db2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-power-menu/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-power-menu";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    owner = "jluttine";
+    repo = "rofi-power-menu";
+    rev = version;
+    sha256 = "sha256-VPCfmCTr6ADNT7MW4jiqLI/lvTjlAu1QrCAugiD0toU=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp rofi-power-menu $out/bin/rofi-power-menu
+    cp dmenu-power-menu $out/bin/dmenu-power-menu
+  '';
+
+  meta = with lib; {
+    description = "Shows a Power/Lock menu with Rofi";
+    homepage = "https://github.com/jluttine/rofi-power-menu";
+    maintainers = with maintainers; [ ikervagyok ];
+    platforms = platforms.linux;
+    mainProgram = "rofi-power-menu";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi-rbw/default.nix b/nixpkgs/pkgs/applications/misc/rofi-rbw/default.nix
new file mode 100644
index 000000000000..ede6912a2764
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-rbw/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, configargparse
+, setuptools
+, poetry-core
+, rbw
+
+, waylandSupport ? false
+, wl-clipboard
+, wtype
+
+, x11Support ? false
+, xclip
+, xdotool
+}:
+
+buildPythonApplication rec {
+  pname = "rofi-rbw";
+  version = "1.3.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "fdw";
+    repo = "rofi-rbw";
+    rev = "refs/tags/${version}";
+    hash = "sha256-aTMKwb4BLupY0UmvPC86RnElZ9DFep8sApaMrlGbJ0M=";
+  };
+
+  nativeBuildInputs = [
+    setuptools
+    poetry-core
+  ];
+
+  buildInputs = [
+    rbw
+  ] ++ lib.optionals waylandSupport [
+    wl-clipboard
+    wtype
+  ] ++ lib.optionals x11Support [
+    xclip
+    xdotool
+  ];
+
+  propagatedBuildInputs = [ configargparse ];
+
+  pythonImportsCheck = [ "rofi_rbw" ];
+
+  wrapper_paths = [
+    rbw
+  ] ++ lib.optionals waylandSupport [
+    wl-clipboard
+    wtype
+  ] ++ lib.optionals x11Support [
+    xclip
+    xdotool
+  ];
+
+  wrapper_flags =
+    lib.optionalString waylandSupport "--typer wtype --clipboarder wl-copy"
+    + lib.optionalString x11Support "--typer xdotool --clipboarder xclip";
+
+  preFixup = ''
+    makeWrapperArgs+=(--prefix PATH : ${lib.makeBinPath wrapper_paths} --add-flags "${wrapper_flags}")
+  '';
+
+  meta = with lib; {
+    description = "Rofi frontend for Bitwarden";
+    homepage = "https://github.com/fdw/rofi-rbw";
+    license = licenses.mit;
+    maintainers = with maintainers; [ equirosa dit7ya ];
+    platforms = platforms.linux;
+    mainProgram = "rofi-rbw";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi-screenshot/default.nix b/nixpkgs/pkgs/applications/misc/rofi-screenshot/default.nix
new file mode 100644
index 000000000000..fedb03fa613d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-screenshot/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, libnotify
+, slop
+, ffcast
+, ffmpeg
+, xclip
+, rofi
+, coreutils
+, gnused
+, procps
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-screenshot";
+  version = "2023-07-02";
+
+  src = fetchFromGitHub {
+    owner = "ceuk";
+    repo = pname;
+    rev = "365cfa51c6c7deb072d98d7bfd68cf4038bf2737";
+    hash = "sha256-M1cab+2pOjZ2dElMg0Y0ZrIxRE0VwymVwcElgzFrmVs=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postFixup = ''
+    wrapProgram $out/bin/${pname} \
+      --set PATH ${
+        lib.makeBinPath [
+          libnotify
+          slop
+          ffcast
+          ffmpeg
+          xclip
+          rofi
+          coreutils
+          gnused
+          procps
+        ]
+      }
+  '';
+
+  installPhase = ''
+    install -Dm755 ${pname} $out/bin/${pname}
+  '';
+
+  meta = {
+    description =
+      "Use rofi to perform various types of screenshots and screen captures";
+    homepage = "https://github.com/ceuk/rofi-screenshot";
+    maintainers = with lib.maintainers; [ zopieux ];
+    platforms = lib.platforms.all;
+    license = lib.licenses.wtfpl;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi-top/0001-Patch-plugindir-to-output.patch b/nixpkgs/pkgs/applications/misc/rofi-top/0001-Patch-plugindir-to-output.patch
new file mode 100644
index 000000000000..f749d6f220ef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-top/0001-Patch-plugindir-to-output.patch
@@ -0,0 +1,13 @@
+diff --git a/configure.ac b/configure.ac
+index 4d2df69..3260910 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -54,7 +54,7 @@ dnl ---------------------------------------------------------------------
+ PKG_CHECK_MODULES([glib],     [glib-2.0 >= 2.40 gio-unix-2.0 gmodule-2.0 libgtop-2.0])
+ PKG_CHECK_MODULES([rofi],     [rofi])
+ 
+-[rofi_PLUGIN_INSTALL_DIR]="`$PKG_CONFIG --variable=pluginsdir rofi`"
++[rofi_PLUGIN_INSTALL_DIR]="`echo $out/lib/rofi`"
+ AC_SUBST([rofi_PLUGIN_INSTALL_DIR])
+ 
+ LT_INIT([disable-static])
diff --git a/nixpkgs/pkgs/applications/misc/rofi-top/0002-Patch-add-cairo.patch b/nixpkgs/pkgs/applications/misc/rofi-top/0002-Patch-add-cairo.patch
new file mode 100644
index 000000000000..dd7d7c223a8b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-top/0002-Patch-add-cairo.patch
@@ -0,0 +1,25 @@
+diff --git a/Makefile.am b/Makefile.am
+index 24c1a85..cfabbbf 100644
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -6,6 +6,6 @@ plugin_LTLIBRARIES = top.la
+ top_la_SOURCES=\
+ 		 src/top.c
+ 
+-top_la_CFLAGS= @glib_CFLAGS@ @rofi_CFLAGS@
+-top_la_LIBADD= @glib_LIBS@ @rofi_LIBS@
++top_la_CFLAGS= @glib_CFLAGS@ @rofi_CFLAGS@ @cairo_CFLAGS@
++top_la_LIBADD= @glib_LIBS@ @rofi_LIBS@ @cairo_LIBS@
+ top_la_LDFLAGS= -module -avoid-version
+diff --git a/configure.ac b/configure.ac
+index 4d2df69..f340a7a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -53,6 +53,7 @@ dnl PKG_CONFIG based dependencies
+ dnl ---------------------------------------------------------------------
+ PKG_CHECK_MODULES([glib],     [glib-2.0 >= 2.40 gio-unix-2.0 gmodule-2.0 libgtop-2.0])
+ PKG_CHECK_MODULES([rofi],     [rofi])
++PKG_CHECK_MODULES([cairo],    [cairo cairo-xcb])
+ 
+ [rofi_PLUGIN_INSTALL_DIR]="`$PKG_CONFIG --variable=pluginsdir rofi`"
+ AC_SUBST([rofi_PLUGIN_INSTALL_DIR])
diff --git a/nixpkgs/pkgs/applications/misc/rofi-top/default.nix b/nixpkgs/pkgs/applications/misc/rofi-top/default.nix
new file mode 100644
index 000000000000..328eca9da894
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi-top/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, cairo
+, glib
+, gobject-introspection
+, libgtop
+, pkg-config
+, rofi-unwrapped
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-top";
+  version = "unstable-2017-10-16";
+
+  src = fetchFromGitHub {
+    owner = "davatorium";
+    repo = pname;
+    rev = "9416addf91dd1bd25dfd5a8c5f1c7297c444408e";
+    sha256 = "sha256-lNsmx1xirepITpUD30vpcs5slAQYQcvDW8FkA2K9JtU=";
+  };
+
+  patches = [
+    ./0001-Patch-plugindir-to-output.patch
+    ./0002-Patch-add-cairo.patch
+  ];
+
+  nativeBuildInputs = [
+    autoreconfHook
+    gobject-introspection
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    cairo
+    glib
+    libgtop
+    rofi-unwrapped
+  ];
+
+  meta = with lib; {
+    description = "A plugin for rofi that emulates top behaviour";
+    homepage = "https://github.com/davatorium/rofi-top";
+    license = licenses.mit;
+    maintainers = with maintainers; [ aacebedo ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi/default.nix b/nixpkgs/pkgs/applications/misc/rofi/default.nix
new file mode 100644
index 000000000000..edd012034115
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi/default.nix
@@ -0,0 +1,72 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, meson
+, ninja
+, pkg-config
+, libxkbcommon
+, pango
+, which
+, git
+, cairo
+, libxcb
+, xcbutil
+, xcbutilwm
+, xcbutilxrm
+, xcb-util-cursor
+, libstartup_notification
+, bison
+, flex
+, librsvg
+, check
+, glib
+, buildPackages
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rofi-unwrapped";
+  version = "1.7.5";
+
+  src = fetchFromGitHub {
+    owner = "davatorium";
+    repo = "rofi";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "sha256-3XFusKeckagEPfbLtt1xAVTEfn1Qebdi/Iq1AYbHCR4=";
+  };
+
+  preConfigure = ''
+    patchShebangs "script"
+    # root not present in build /etc/passwd
+    sed -i 's/~root/~nobody/g' test/helper-expand.c
+  '';
+
+  depsBuildBuild = [ buildPackages.stdenv.cc pkg-config glib ];
+  nativeBuildInputs = [ meson ninja pkg-config flex bison ];
+  buildInputs = [
+    libxkbcommon
+    pango
+    cairo
+    git
+    librsvg
+    check
+    libstartup_notification
+    libxcb
+    xcbutil
+    xcbutilwm
+    xcbutilxrm
+    xcb-util-cursor
+    which
+  ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Window switcher, run dialog and dmenu replacement";
+    homepage = "https://github.com/davatorium/rofi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ bew ];
+    platforms = with platforms; linux;
+    mainProgram = "rofi";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofi/wayland.nix b/nixpkgs/pkgs/applications/misc/rofi/wayland.nix
new file mode 100644
index 000000000000..1466d3e23233
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi/wayland.nix
@@ -0,0 +1,33 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, rofi-unwrapped
+, wayland-scanner
+, wayland-protocols
+, wayland
+}:
+
+rofi-unwrapped.overrideAttrs (oldAttrs: rec {
+  pname = "rofi-wayland-unwrapped";
+  version = "1.7.5+wayland2";
+
+  src = fetchFromGitHub {
+    owner = "lbonn";
+    repo = "rofi";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "sha256-5pxDA/71PV4B5T3fzLKVC4U8Gt13vwy3xSDPDsSDAKU=";
+  };
+
+  nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [ wayland-scanner ];
+  buildInputs = oldAttrs.buildInputs ++ [ wayland wayland-protocols ];
+
+  meta = with lib; {
+    description = "Window switcher, run dialog and dmenu replacement for Wayland";
+    homepage = "https://github.com/lbonn/rofi";
+    license = licenses.mit;
+    mainProgram = "rofi";
+    maintainers = with maintainers; [ bew ];
+    platforms = with platforms; linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/rofi/wrapper.nix b/nixpkgs/pkgs/applications/misc/rofi/wrapper.nix
new file mode 100644
index 000000000000..2f98fe164161
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofi/wrapper.nix
@@ -0,0 +1,42 @@
+{ symlinkJoin, lib, rofi-unwrapped, makeWrapper, wrapGAppsHook, gdk-pixbuf, hicolor-icon-theme, theme ? null, plugins ? [], symlink-dmenu ? false }:
+
+symlinkJoin {
+  name = "rofi-${rofi-unwrapped.version}";
+
+  paths = [
+    rofi-unwrapped.out
+  ] ++ (lib.forEach plugins (p: p.out));
+
+  nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
+  buildInputs = [ gdk-pixbuf ];
+
+  preferLocalBuild = true;
+  passthru.unwrapped = rofi-unwrapped;
+
+  dontWrapGApps = true;
+
+  postBuild = ''
+    rm -rf $out/bin
+    mkdir $out/bin
+    ln -s ${rofi-unwrapped}/bin/* $out/bin
+    rm $out/bin/rofi
+
+    gappsWrapperArgsHook
+    makeWrapper ${rofi-unwrapped}/bin/rofi $out/bin/rofi \
+      ''${gappsWrapperArgs[@]} \
+      --prefix XDG_DATA_DIRS : ${hicolor-icon-theme}/share \
+      ${lib.optionalString (plugins != []) ''--prefix XDG_DATA_DIRS : ${lib.concatStringsSep ":" (lib.forEach plugins (p: "${p.out}/share"))}''} \
+      ${lib.optionalString (theme != null) ''--add-flags "-theme ${theme}"''} \
+      ${lib.optionalString (plugins != []) ''--add-flags "-plugin-path $out/lib/rofi"''}
+
+    ${lib.optionalString symlink-dmenu "ln -s ${rofi-unwrapped}/bin/rofi $out/bin/dmenu"}
+
+    rm $out/bin/rofi-theme-selector
+    makeWrapper ${rofi-unwrapped}/bin/rofi-theme-selector $out/bin/rofi-theme-selector \
+      --prefix XDG_DATA_DIRS : $out/share
+  '';
+
+  meta = rofi-unwrapped.meta // {
+    priority = (rofi-unwrapped.meta.priority or 0) - 1;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rofimoji/default.nix b/nixpkgs/pkgs/applications/misc/rofimoji/default.nix
new file mode 100644
index 000000000000..f620bb7bd832
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rofimoji/default.nix
@@ -0,0 +1,58 @@
+{ buildPythonApplication
+, fetchFromGitHub
+, lib
+, python3
+, installShellFiles
+
+, waylandSupport ? true
+, x11Support ? true
+
+, configargparse
+, rofi
+, wl-clipboard
+, wtype
+, xdotool
+, xsel
+}:
+
+buildPythonApplication rec {
+  pname = "rofimoji";
+  version = "6.1.0";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "fdw";
+    repo = "rofimoji";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-eyzdTMLW9nk0x74T/AhvoVSrxXugc1HgNJy8EB5BApE=";
+  };
+
+  nativeBuildInputs = [
+    python3.pkgs.poetry-core
+    installShellFiles
+  ];
+
+  # `rofi` and the `waylandSupport` and `x11Support` dependencies
+  # contain binaries needed at runtime.
+  propagatedBuildInputs = with lib; [ configargparse rofi ]
+    ++ optionals waylandSupport [ wl-clipboard wtype ]
+    ++ optionals x11Support [ xdotool xsel ];
+
+  # The 'extractors' sub-module is used for development
+  # and has additional dependencies.
+  postPatch = ''
+    rm -rf extractors
+  '';
+
+  postInstall = ''
+    installManPage src/picker/docs/rofimoji.1
+  '';
+
+  meta = with lib; {
+    description = "A simple emoji and character picker for rofi";
+    homepage = "https://github.com/fdw/rofimoji";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ justinlovinger ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rootbar/default.nix b/nixpkgs/pkgs/applications/misc/rootbar/default.nix
new file mode 100644
index 000000000000..ee536ca7c50f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rootbar/default.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv
+, fetchhg
+, pkg-config
+, meson
+, ninja
+, gtk3
+, json_c
+, libpulseaudio
+, wayland
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "rootbar";
+  version = "unstable-2020-11-13";
+
+  src = fetchhg {
+    url = "https://hg.sr.ht/~scoopta/rootbar";
+    rev = "a018e10cfc5e";
+    sha256 = "sha256-t6oDIYCVaCxaYy4bS1vxESaFDNxsx5JQLQK77eVuafE=";
+  };
+
+  nativeBuildInputs = [
+    meson ninja pkg-config wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    json_c
+    libpulseaudio
+    wayland
+  ];
+
+  meta = with lib; {
+    homepage = "https://hg.sr.ht/~scoopta/rootbar";
+    description = "A bar for Wayland WMs";
+    longDescription = ''
+      Root Bar is a bar for wlroots based wayland compositors such as sway and
+      was designed to address the lack of good bars for wayland.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rsclock/default.nix b/nixpkgs/pkgs/applications/misc/rsclock/default.nix
new file mode 100644
index 000000000000..1830a6008726
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rsclock/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rsClock";
+  version = "0.1.11";
+
+  src = fetchFromGitHub {
+    owner = "valebes";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-z+WGi1Jl+YkdAc4Nu818vi+OXg54GfAM6PbWYkgptpo=";
+  };
+
+  cargoHash = "sha256-/uAxIV7eroJNGsLl4T/6RskoTIWKu5Cgmv48eMkDZQw=";
+
+  meta = with lib; {
+    description = "A simple terminal clock written in Rust";
+    homepage = "https://github.com/valebes/rsClock";
+    license = licenses.mit;
+    maintainers = with maintainers; [valebes];
+    mainProgram = "rsclock";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rsibreak/default.nix b/nixpkgs/pkgs/applications/misc/rsibreak/default.nix
new file mode 100644
index 000000000000..eb0944fd2a03
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rsibreak/default.nix
@@ -0,0 +1,25 @@
+{
+  mkDerivation, fetchurl, lib,
+  extra-cmake-modules, kdoctools,
+  knotifyconfig, kidletime, kwindowsystem, ktextwidgets, kcrash
+}:
+
+mkDerivation rec {
+  pname = "rsibreak";
+  version = "0.12.13";
+
+  src = fetchurl {
+    url = "mirror://kde/stable/rsibreak/${version}/rsibreak-${version}.tar.xz";
+    sha256 = "N0C+f788fq5yotSC54H2K4WDc6PnGi8Nh/vXL4v0fxo=";
+  };
+
+  nativeBuildInputs = [ extra-cmake-modules kdoctools ];
+  propagatedBuildInputs = [ knotifyconfig kidletime kwindowsystem ktextwidgets kcrash ];
+
+  meta = with lib; {
+    description = "Takes care of your health and regularly breaks your work to avoid repetitive strain injury (RSI)";
+    license = licenses.gpl2;
+    homepage = "https://www.kde.org/applications/utilities/rsibreak/";
+    maintainers = with maintainers; [ vandenoever ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rss-bridge-cli/default.nix b/nixpkgs/pkgs/applications/misc/rss-bridge-cli/default.nix
new file mode 100644
index 000000000000..e7714a21b129
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rss-bridge-cli/default.nix
@@ -0,0 +1,28 @@
+{ lib, writeShellScriptBin, rss-bridge, php }:
+
+let
+  phpWithExts = (php.withExtensions
+    ({ all, ... }: with all; [
+      curl
+      filter
+      iconv
+      mbstring
+      openssl
+      simplexml
+      sqlite3
+    ])
+  );
+  phpBin = "${phpWithExts}/bin/php";
+in (writeShellScriptBin "rss-bridge-cli" ''
+  ${phpBin} ${rss-bridge}/index.php "$@"
+'').overrideAttrs (oldAttrs: rec {
+  version = rss-bridge.version;
+
+  meta = with lib; {
+    description = "Command-line interface for RSS-Bridge";
+    homepage = "https://github.com/RSS-Bridge/rss-bridge";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ ymeister ];
+    mainProgram = "rss-bridge-cli";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/rtfm/default.nix b/nixpkgs/pkgs/applications/misc/rtfm/default.nix
new file mode 100644
index 000000000000..9eb97113c37b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rtfm/default.nix
@@ -0,0 +1,91 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, crystal
+, wrapGAppsHook4
+, gobject-introspection
+, desktopToDarwinBundle
+, webkitgtk_6_0
+, sqlite
+, gi-crystal
+, libadwaita
+, gtk4
+, pango
+}:
+let
+  gtk4' = gtk4.override { x11Support = true; };
+  pango' = pango.override { withIntrospection = true; };
+in
+crystal.buildCrystalPackage rec {
+  pname = "rtfm";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "hugopl";
+    repo = "rtfm";
+    rev = "v${version}";
+    name = "rtfm";
+    hash = "sha256-IfI7jYM1bsrCq2NiANv/SWkCjPyT/HYUofJMUYy0Sbk=";
+  };
+
+  patches = [
+    # 1) fixed gi-crystal binding generator command
+    # 2) removed `-v` arg to `cp` command to prevent build failure due to stdout buffer overflow
+    # 3) added commands to build gschemas and update icon-cache
+    ./patches/make.patch
+
+    # fixed docset path and gi libs directory names
+    ./patches/friendly-docs-path.patch
+
+    # added chmod +w for copied docs to prevent error:
+    # `Error opening file with mode 'wb': '.../style.css': Permission denied`
+    ./patches/enable-write-permissions.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "crystal run src/create_crystal_docset.cr" "crystal src/create_crystal_docset.cr ${crystal}/share/doc/crystal/api/" \
+      --replace "crystal run src/create_gtk_docset.cr" "crystal src/create_gtk_docset.cr gtk-doc/"
+  '';
+
+  shardsFile = ./shards.nix;
+
+  nativeBuildInputs = [
+    wrapGAppsHook4
+    gobject-introspection
+    gi-crystal
+  ] ++ lib.optionals stdenv.isDarwin [ desktopToDarwinBundle ];
+
+  buildInputs = [
+    webkitgtk_6_0
+    sqlite
+    libadwaita
+    gtk4'
+    pango'
+  ];
+
+  buildTargets = [ "configure" "rtfm" "docsets" ];
+
+  preBuild = ''
+    mkdir gtk-doc/
+
+    for file in "${gtk4'.devdoc}"/share/doc/*; do
+      ln -s "$file" "gtk-doc/$(basename "$file")"
+    done
+
+    for file in "${pango'.devdoc}"/share/doc/*; do
+      ln -s "$file" "gtk-doc/$(basename "$file")"
+    done
+
+    for file in "${libadwaita.devdoc}"/share/doc/*; do
+      ln -s "$file" "gtk-doc/$(basename "$file")"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Dash/docset reader with built in documentation for Crystal and GTK APIs";
+    homepage = "https://github.com/hugopl/rtfm/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sund3RRR ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rtfm/patches/enable-write-permissions.patch b/nixpkgs/pkgs/applications/misc/rtfm/patches/enable-write-permissions.patch
new file mode 100644
index 000000000000..efdabce08351
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rtfm/patches/enable-write-permissions.patch
@@ -0,0 +1,10 @@
+--- a/src/doc2dash/doc_set_builder.cr	2023-07-19 14:00:06.864770147 +0300
++++ b/src/doc2dash/doc_set_builder.cr	2023-07-19 13:59:35.440707740 +0300
+@@ -44,6 +44,7 @@
+       real_dest = @html_dest.join(dest || source)
+       Dir.mkdir_p(Path.new(real_dest).dirname)
+       File.copy(original, real_dest)
++      File.chmod(real_dest, 0o600)
+       dest || source
+     end
+ 
diff --git a/nixpkgs/pkgs/applications/misc/rtfm/patches/friendly-docs-path.patch b/nixpkgs/pkgs/applications/misc/rtfm/patches/friendly-docs-path.patch
new file mode 100644
index 000000000000..cecbeb750b30
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rtfm/patches/friendly-docs-path.patch
@@ -0,0 +1,11 @@
+--- a/src/create_gtk_docset.cr	2023-07-17 14:28:04.882620660 +0300
++++ b/src/create_gtk_docset.cr	2023-07-17 14:27:09.660643747 +0300
+@@ -136,7 +136,7 @@
+ end
+ 
+ def find_modules : Array(Path)
+-  basedir = Path.new("/usr/share/doc")
++  basedir = Path.new(ARGV[0]? || "gtk-docs")
+   MODULES.compact_map do |mod|
+     print "#{mod.ljust(20, '.')}"
+     mod_dir = basedir.join(mod)
diff --git a/nixpkgs/pkgs/applications/misc/rtfm/patches/make.patch b/nixpkgs/pkgs/applications/misc/rtfm/patches/make.patch
new file mode 100644
index 000000000000..51b95575cd0d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rtfm/patches/make.patch
@@ -0,0 +1,21 @@
+--- a/Makefile	2023-12-07 23:37:38.984501858 +0300
++++ b/Makefile	2023-12-07 23:47:52.884456064 +0300
+@@ -4,8 +4,7 @@
+ all: configure .WAIT rtfm docsets
+ 
+ configure:
+-	shards install
+-	./bin/gi-crystal
++	gi-crystal
+ 
+ rtfm:
+ 	shards build --release -s rtfm
+@@ -36,6 +35,8 @@
+ 	# Changelog
+ 	install -D -m0644 CHANGELOG.md $(DESTDIR)$(PREFIX)/share/doc/rtfm/CHANGELOG.md
+ 	gzip -9fn $(DESTDIR)$(PREFIX)/share/doc/rtfm/CHANGELOG.md
++	gtk4-update-icon-cache --ignore-theme-index $(PREFIX)/share/icons/hicolor
++	glib-compile-schemas $(DESTDIR)$(PREFIX)/share/glib-2.0/schemas
+ 
+ uninstall:
+ 	rm -f $(DESTDIR)$(PREFIX)/bin/rtfm
diff --git a/nixpkgs/pkgs/applications/misc/rtfm/shards.nix b/nixpkgs/pkgs/applications/misc/rtfm/shards.nix
new file mode 100644
index 000000000000..0a7ce34cda62
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rtfm/shards.nix
@@ -0,0 +1,42 @@
+{
+  db = {
+    url = "https://github.com/crystal-lang/crystal-db.git";
+    rev = "v0.12.0";
+    sha256 = "1in8w2dz7nlhqgc9l6b3pi6f944m29nhbg3p5j40qzvsrr8lqaj7";
+  };
+  fzy = {
+    url = "https://github.com/hugopl/fzy.git";
+    rev = "v0.5.5";
+    sha256 = "1zk95m43ymx9ilwr6iw9l44nkmp4sas28ib0dkr07hkhgrkw68sv";
+  };
+  gio = {
+    url = "https://github.com/hugopl/gio.cr.git";
+    rev = "v0.2.1";
+    sha256 = "0vl5lpvhhdi9pvyl12smag0i3dwj1jjz1zzilc8ai0wjrnbnwlxs";
+  };
+  gtk4 = {
+    url = "https://github.com/hugopl/gtk4.cr.git";
+    rev = "v0.16.0";
+    sha256 = "1bnnfy07246vwbjfwhziv2yw1g52pzhhrr25660fp3qcnw8q513w";
+  };
+  harfbuzz = {
+    url = "https://github.com/hugopl/harfbuzz.cr.git";
+    rev = "v0.2.0";
+    sha256 = "06wgqxwyib5416yp53j2iwcbr3bl4jjxb1flm7z103l365par694";
+  };
+  libadwaita = {
+    url = "https://github.com/geopjr/libadwaita.cr.git";
+    rev = "cffabb56e911d2a90c53c2fd14d6bd08bf5ac446";
+    sha256 = "0gcq04vgxg0vff9fcalgzq9phq0y76diihkzhlfn91bdxwkx7rl3";
+  };
+  pango = {
+    url = "https://github.com/hugopl/pango.cr.git";
+    rev = "v0.3.0";
+    sha256 = "1dg5bcbq11zww4xh68dq4ivnsz89yqsnxz81ggp4j9c9d6dhx0m4";
+  };
+  sqlite3 = {
+    url = "https://github.com/crystal-lang/crystal-sqlite3.git";
+    rev = "v0.20.0";
+    sha256 = "0mqy6rc26i0sf2fdllbbzdhbd1d35npmpqqjz0b1n1vrzrm6fg05";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rust-traverse/default.nix b/nixpkgs/pkgs/applications/misc/rust-traverse/default.nix
new file mode 100644
index 000000000000..7d0e072ee36b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rust-traverse/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, bzip2
+, zstd
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rust-traverse";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "dmcg310";
+    repo = "Rust-Traverse";
+    rev = "v${version}";
+    hash = "sha256-OcCWmBNDo4AA5Pk5TQqb8hen9LlHaY09Wrm4BkrU7qA=";
+  };
+
+  cargoHash = "sha256-aZ0KewzeC6o+wW2EejodHnOPbuTLjRufEYGWDyoqkq0=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    bzip2
+    zstd
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk_11_0.frameworks.Foundation
+  ];
+
+  env = {
+    ZSTD_SYS_USE_PKG_CONFIG = true;
+  };
+
+  meta = with lib; {
+    description = "Terminal based file explorer";
+    homepage = "https://github.com/dmcg310/Rust-Traverse";
+    changelog = "https://github.com/dmcg310/Rust-Traverse/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "rt";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/rusty-psn/default.nix b/nixpkgs/pkgs/applications/misc/rusty-psn/default.nix
new file mode 100644
index 000000000000..c9968f7257f8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/rusty-psn/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, makeDesktopItem
+, copyDesktopItems
+, pkg-config
+, cmake
+, fontconfig
+, glib
+, gtk3
+, freetype
+, openssl
+, xorg
+, libGL
+, withGui ? false # build GUI version
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "rusty-psn";
+  version = "0.3.0";
+
+  src = fetchFromGitHub {
+    owner = "RainbowCookie32";
+    repo = "rusty-psn";
+    rev = "v${version}";
+    sha256 = "sha256-BsbuEsW6cQbWg8BLtEBnjoCfcUCy1xWz9u0wBa8BKtA=";
+  };
+
+  cargoSha256 = "sha256-TD5du7I6Hw1PC8s9NI19jYCXlaZMnsdVj/a0q+M8Raw=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ] ++ lib.optionals withGui [
+    copyDesktopItems
+    cmake
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals withGui [
+    fontconfig
+    glib
+    gtk3
+    freetype
+    openssl
+    xorg.libxcb
+    xorg.libX11
+    xorg.libXcursor
+    xorg.libXrandr
+    xorg.libXi
+    xorg.libxcb
+    libGL
+    libGL.dev
+  ];
+
+  buildNoDefaultFeatures = true;
+  buildFeatures = [ (if withGui then "egui" else "cli") ];
+
+  postFixup = ''
+    patchelf --set-rpath "${lib.makeLibraryPath buildInputs}" $out/bin/rusty-psn
+  '' + lib.optionalString withGui ''
+    mv $out/bin/rusty-psn $out/bin/rusty-psn-gui
+  '';
+
+  desktopItem = lib.optionalString withGui (makeDesktopItem {
+    name = "rusty-psn";
+    desktopName = "rusty-psn";
+    exec = "rusty-psn-gui";
+    comment = "A simple tool to grab updates for PS3 games, directly from Sony's servers using their updates API.";
+    categories = [
+      "Network"
+    ];
+    keywords = [
+      "psn"
+      "ps3"
+      "sony"
+      "playstation"
+      "update"
+    ];
+  });
+  desktopItems = lib.optionals withGui [ desktopItem ];
+
+  meta = with lib; {
+    description = "Simple tool to grab updates for PS3 games, directly from Sony's servers using their updates API";
+    homepage = "https://github.com/RainbowCookie32/rusty-psn/";
+    license = licenses.mit;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ AngryAnt ];
+    mainProgram = "rusty-psn";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/safecloset/default.nix b/nixpkgs/pkgs/applications/misc/safecloset/default.nix
new file mode 100644
index 000000000000..ce774e5a668f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/safecloset/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, stdenv
+, darwin
+, xorg
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "safecloset";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "Canop";
+    repo = "safecloset";
+    rev = "v${version}";
+    hash = "sha256-buIceYP/dZMDw3tyrzj1bY6+sIIPaVJIVj1L//jZnws=";
+  };
+
+  cargoHash = "sha256-rxNp9dOvy/UTx6Q9pzZGccEKmIiWxzWVYyMxb+h5bqw=";
+
+  buildInputs = lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+  ] ++ lib.optionals stdenv.isLinux [
+    xorg.libxcb
+  ];
+
+  checkFlags = [
+    # skip flaky test
+    "--skip=timer::timer_tests::test_timer_reset"
+  ];
+
+  meta = with lib; {
+    description = "Cross-platform secure TUI secret locker";
+    homepage = "https://github.com/Canop/safecloset";
+    changelog = "https://github.com/Canop/safecloset/blob/${src.rev}/CHANGELOG.md";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "safecloset";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/safeeyes/default.nix b/nixpkgs/pkgs/applications/misc/safeeyes/default.nix
new file mode 100644
index 000000000000..39bb82aaaef6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/safeeyes/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, python3
+, fetchPypi
+, alsa-utils
+, gobject-introspection
+, libappindicator-gtk3
+, libnotify
+, wlrctl
+, gtk3
+, safeeyes
+, testers
+, xprintidle
+, xprop
+, wrapGAppsHook
+}:
+
+with python3.pkgs;
+
+buildPythonApplication rec {
+  pname = "safeeyes";
+  version = "2.1.6";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-tvsBTf6+zKBzB5aL+LUcEvE4jmVHnnoY0L4xoKMJ0vM=";
+  };
+
+  postPatch = ''
+    substituteInPlace setup.py --replace "root_dir = sys.prefix" "root_dir = '/'"
+  '';
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gtk3
+    libappindicator-gtk3
+    libnotify
+  ];
+
+  propagatedBuildInputs = [
+    babel
+    psutil
+    xlib
+    pygobject3
+    dbus-python
+    croniter
+  ];
+
+  # Prevent double wrapping, let the Python wrapper use the args in preFixup.
+  dontWrapGApps = true;
+
+  postInstall = ''
+    mv $out/lib/python*/site-packages/share $out/share
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      "''${gappsWrapperArgs[@]}"
+      --prefix PATH : ${lib.makeBinPath [ alsa-utils wlrctl xprintidle xprop ]}
+    )
+  '';
+
+  doCheck = false; # no tests
+
+  passthru.tests.version = testers.testVersion { package = safeeyes; };
+
+  meta = with lib; {
+    homepage = "http://slgobinath.github.io/SafeEyes";
+    description = "Protect your eyes from eye strain using this simple and beautiful, yet extensible break reminder. A Free and Open Source Linux alternative to EyeLeo";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ srghma ];
+    platforms = platforms.linux;
+    mainProgram = "safeeyes";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sampler/default.nix b/nixpkgs/pkgs/applications/misc/sampler/default.nix
new file mode 100644
index 000000000000..a111142bbde4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sampler/default.nix
@@ -0,0 +1,40 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch, darwin, alsa-lib, stdenv }:
+
+buildGoModule rec {
+  pname = "sampler";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "sqshq";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-H7QllAqPp35wHeJ405YSfPX3S4lH0/hdQ8Ja2OGLVtE=";
+  };
+
+  patches = [
+    # fix build with go 1.17
+    (fetchpatch {
+      url = "https://github.com/sqshq/sampler/commit/97a4a0ebe396a780d62f50f112a99b27044e832b.patch";
+      hash = "sha256-c9nP92YHKvdc156OXgYVoyNNa5TkoFeDa78WxOTR9rM=";
+    })
+  ];
+
+  vendorHash = "sha256-UZLF/oJbWUKwIPyWcT1QX+rIU5SRnav/3GLq2xT+jgk=";
+
+  doCheck = false;
+
+  subPackages = [ "." ];
+
+  buildInputs = lib.optional stdenv.isLinux alsa-lib
+    ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.OpenAL
+  ];
+
+  meta = with lib; {
+    description = "Tool for shell commands execution, visualization and alerting";
+    homepage = "https://sampler.dev";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ uvnikita ];
+    mainProgram = "sampler";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sbagen/default.nix b/nixpkgs/pkgs/applications/misc/sbagen/default.nix
new file mode 100644
index 000000000000..4ddfa6f9cf28
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sbagen/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "sbagen";
+  version = "1.4.4";
+
+  src = fetchurl {
+    url = "https://uazu.net/sbagen/sbagen-${version}.tgz";
+    sha256 = "0w62yk1b0hq79kl0angma897yqa8p1ww0dwydf3zlwav333prkd2";
+  };
+
+  postPatch = ''
+    patchShebangs ./mk
+  '';
+
+  buildPhase = "./mk";
+
+  installPhase = ''
+    mkdir -p $out/{bin,share/sbagen/doc}
+    cp -r --target-directory=$out/share/sbagen examples scripts river1.ogg river2.ogg
+    cp sbagen $out/bin
+    cp --target-directory=$out/share/sbagen/doc README.txt SBAGEN.txt theory{,2}.txt {wave,holosync,focus,TODO}.txt
+  '';
+
+  meta = {
+    description = "Binaural sound generator";
+    homepage = "http://uazu.net/sbagen";
+    license = lib.licenses.gpl2;
+    platforms = [ "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sc-im/default.nix b/nixpkgs/pkgs/applications/misc/sc-im/default.nix
new file mode 100644
index 000000000000..506ff5f10c8a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sc-im/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, pkg-config
+, which
+, bison
+, gnuplot
+, libxls
+, libxlsxwriter
+, libxml2
+, libzip
+, ncurses
+, xlsSupport ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sc-im";
+  version = "0.8.3";
+
+  src = fetchFromGitHub {
+    owner = "andmarti1424";
+    repo = "sc-im";
+    rev = "v${version}";
+    sha256 = "sha256-QlnxMe0WsRX9J2xzpf2Udcf9+N3MvQWqmYl2YKsGpYM=";
+  };
+
+  sourceRoot = "${src.name}/src";
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+    which
+    bison
+  ];
+
+  buildInputs = [
+    gnuplot
+    libxml2
+    libzip
+    ncurses
+  ] ++ lib.optionals xlsSupport [
+    libxls
+    libxlsxwriter
+  ];
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/sc-im" --prefix PATH : "${lib.makeBinPath [ gnuplot ]}"
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/andmarti1424/sc-im/blob/${src.rev}/CHANGES";
+    homepage = "https://github.com/andmarti1424/sc-im";
+    description = "An ncurses spreadsheet program for terminal";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ dotlambda ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/schemes/default.nix b/nixpkgs/pkgs/applications/misc/schemes/default.nix
new file mode 100644
index 000000000000..41ec97f8b176
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/schemes/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, appstream-glib
+, desktop-file-utils
+, glib
+, gtk4
+, gtksourceview5
+, libadwaita
+, libgee
+, libpanel
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook4
+}:
+
+stdenv.mkDerivation rec {
+  pname = "schemes";
+  version = "0.2.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "chergert";
+    repo = "schemes";
+    rev = version;
+    hash = "sha256-XUC24KzZSU4+F2JZMsydukvAwEGdMxCnkPG6QHnCw6w=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+    appstream-glib
+    desktop-file-utils
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    libadwaita
+    gtksourceview5
+    libpanel
+  ];
+
+  meta = with lib; {
+    description = "Edit GtkSourceView style-schemes for an application or platform";
+    homepage = "https://gitlab.gnome.org/chergert/schemes";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ _0xMRTT ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/scli/default.nix b/nixpkgs/pkgs/applications/misc/scli/default.nix
new file mode 100644
index 000000000000..2cfc8b6a3265
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/scli/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, python3
+, fetchFromGitHub
+, dbus
+, signal-cli
+, xclip
+, testers
+, scli
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "scli";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "isamert";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    sha256 = "sha256-x5NLYqA/sdQkT/8oG/ija/+4+KjRHa1q0T3mqymAuV8=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pyqrcode
+    urwid
+    urwid-readline
+  ];
+  format = "other";
+
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    patchShebangs scli
+    install -Dm555 scli -t $out/bin
+    echo "v$version" > $out/bin/VERSION
+
+    runHook postInstall
+  '';
+
+  makeWrapperArgs = [
+    "--prefix" "PATH" ":" (lib.makeBinPath [ dbus signal-cli xclip ])
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = scli;
+      command = "HOME=$(mktemp -d) scli --version";
+    };
+  };
+
+  meta = with lib; {
+    description = "Simple terminal user interface for Signal";
+    homepage = "https://github.com/isamert/scli";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sdcv/default.nix b/nixpkgs/pkgs/applications/misc/sdcv/default.nix
new file mode 100644
index 000000000000..206ca96d0100
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sdcv/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, glib, gettext, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "sdcv";
+  version = "0.5.5";
+
+  src = fetchFromGitHub {
+    owner = "Dushistov";
+    repo = "sdcv";
+    rev = "v${version}";
+    sha256 = "sha256-EyvljVXhOsdxIYOGTzD+T16nvW7/RNx3DuQ2OdhjXJ4=";
+  };
+
+  hardeningDisable = [ "format" ];
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ glib gettext readline ];
+
+  preInstall = ''
+    mkdir locale
+  '';
+
+  env.NIX_CFLAGS_COMPILE = "-D__GNU_LIBRARY__";
+
+  meta = with lib; {
+    homepage = "https://dushistov.github.io/sdcv/";
+    description = "Console version of StarDict";
+    maintainers = with maintainers; [ lovek323 ];
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    mainProgram = "sdcv";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/seashells/default.nix b/nixpkgs/pkgs/applications/misc/seashells/default.nix
new file mode 100644
index 000000000000..4ece0036c530
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/seashells/default.nix
@@ -0,0 +1,26 @@
+{ lib, python3Packages, fetchPypi }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "seashells";
+  version = "0.1.2";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-RBs28FC7f82DrxRcmvTP9nljVpm7tjrGuvr05l32hDM=";
+  };
+
+  doCheck = false; # there are no tests
+  pythonImportsCheck = [ "seashells" ];
+
+  meta = with lib; {
+    homepage = "https://seashells.io/";
+    description = "Pipe command-line programs to seashells.io";
+    longDescription = ''
+      Official cient for seashells.io, which allows you to view
+      command-line output on the web, in real-time.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ deejayem ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/seatd/default.nix b/nixpkgs/pkgs/applications/misc/seatd/default.nix
new file mode 100644
index 000000000000..da3dda9fc8d7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/seatd/default.nix
@@ -0,0 +1,55 @@
+{ fetchFromSourcehut
+, lib
+, meson
+, ninja
+, pkg-config
+, scdoc
+, stdenv
+, systemdSupport ? lib.meta.availableOn stdenv.hostPlatform systemd, systemd
+, nixosTests
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "seatd";
+  version = "0.8.0";
+
+  src = fetchFromSourcehut {
+    owner = "~kennylevinsen";
+    repo = "seatd";
+    rev = finalAttrs.version;
+    hash = "sha256-YaR4VuY+wrzbnhER4bkwdm0rTY1OVMtixdDEhu7Lnws=";
+  };
+
+  outputs = [ "bin" "out" "dev" "man" ];
+
+  depsBuildBuild = [
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    scdoc
+  ];
+
+  buildInputs = lib.optionals systemdSupport [ systemd ];
+
+  mesonFlags = [
+    "-Dlibseat-logind=${if systemdSupport then "systemd" else "disabled"}"
+    "-Dlibseat-builtin=enabled"
+    "-Dserver=enabled"
+  ];
+
+  passthru.tests.basic = nixosTests.seatd;
+
+  meta = {
+    description = "A minimal seat management daemon, and a universal seat management library";
+    changelog = "https://git.sr.ht/~kennylevinsen/seatd/refs/${finalAttrs.version}";
+    homepage = "https://sr.ht/~kennylevinsen/seatd/";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ emantor ];
+    platforms = with lib.platforms; freebsd ++ linux ++ netbsd;
+    mainProgram = "seatd";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/selectdefaultapplication/default.nix b/nixpkgs/pkgs/applications/misc/selectdefaultapplication/default.nix
new file mode 100644
index 000000000000..39470d2b0edd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/selectdefaultapplication/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchFromGitHub, qmake, qtbase, wrapQtAppsHook }:
+
+stdenv.mkDerivation {
+  pname = "selectdefaultapplication";
+  version = "unstable-2021-08-12";
+
+  src = fetchFromGitHub {
+    owner = "sandsmark";
+    repo = "selectdefaultapplication";
+    rev = "c752df6ba8caceeef54bcf6527f1bccc2ca8202a";
+    sha256 = "C/70xpt6RoQNIlAjSJhOCyheolK4Xp6RiSZmeqMP4fw=";
+  };
+
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+  buildInputs = [ qtbase ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp selectdefaultapplication $out/bin
+
+    install -Dm644 -t "$out/share/applications" selectdefaultapplication.desktop
+    install -Dm644 -t "$out/share/icons/hicolor/48x48/apps" selectdefaultapplication.png
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A very simple application that lets you define default applications on Linux in a sane way";
+    homepage = "https://github.com/sandsmark/selectdefaultapplication";
+    maintainers = with maintainers; [ nsnelson ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/semver/default.nix b/nixpkgs/pkgs/applications/misc/semver/default.nix
new file mode 100644
index 000000000000..53e06a4c406e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/semver/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub, git }:
+
+buildGoModule rec {
+  pname = "semver";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "catouc";
+    repo = "semver-go";
+    rev = "v${version}";
+    sha256 = "0v3j7rw917wnmp4lyjscqzk4qf4azfiz70ynbq3wl4gwp1m783vv";
+  };
+
+  vendorHash = null;
+  nativeBuildInputs = [ git ];
+
+  meta = with lib; {
+    homepage = "https://github.com/catouc/semver-go";
+    description = "A small CLI to fish out the current or next semver version from a git repository";
+    maintainers = with maintainers; [ catouc ];
+    license = licenses.mit;
+    mainProgram = "semver";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sent/default.nix b/nixpkgs/pkgs/applications/misc/sent/default.nix
new file mode 100644
index 000000000000..fcf021a5ac7f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sent/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, farbfeld, libX11, libXft, makeWrapper
+, patches ? [] }:
+
+stdenv.mkDerivation rec {
+  pname = "sent";
+  version = "1";
+
+  src = fetchurl {
+    url = "https://dl.suckless.org/tools/sent-${version}.tar.gz";
+    sha256 = "0cxysz5lp25mgww73jl0mgip68x7iyvialyzdbriyaff269xxwvv";
+  };
+
+  buildInputs = [ libX11 libXft ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  # unpacking doesn't create a directory
+  sourceRoot = ".";
+
+  inherit patches;
+
+  installFlags = [ "PREFIX=$(out)" ];
+  postInstall = ''
+    wrapProgram "$out/bin/sent" --prefix PATH : "${farbfeld}/bin"
+  '';
+
+  meta = with lib; {
+    description = "A simple plaintext presentation tool";
+    homepage = "https://tools.suckless.org/sent/";
+    license = licenses.isc;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/senv/default.nix b/nixpkgs/pkgs/applications/misc/senv/default.nix
new file mode 100644
index 000000000000..b542966e828a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/senv/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "senv";
+  version = "0.7.0";
+
+  src = fetchFromGitHub {
+    owner = "SpectralOps";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-TjlIX8FPNiPDQo41pIt04cki/orc+v30pV3o2bQQhAQ=";
+  };
+
+  vendorHash = "sha256-zOWX0AiLAs1FtOn+VtRexfn6oOmJT1PoTPHkcpwvxRY=";
+
+  subPackages = [ "." ];
+
+  meta = with lib; {
+    description = "Friends don't let friends leak secrets on their terminal window";
+    homepage = "https://github.com/SpectralOps/senv";
+    license = licenses.mit;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+    broken = stdenv.isDarwin; # needs golang.org/x/sys bump
+    mainProgram = "senv";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sequeler/default.nix b/nixpkgs/pkgs/applications/misc/sequeler/default.nix
new file mode 100644
index 000000000000..49fa61270b4d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sequeler/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitHub, nix-update-script
+, vala, meson, ninja, pkg-config, pantheon, gettext, wrapGAppsHook, python3, desktop-file-utils
+, gtk3, glib, libgee, libgda, gtksourceview, libxml2, libsecret, libssh2 }:
+
+
+let
+  sqlGda = libgda.override {
+    mysqlSupport = true;
+    postgresSupport = true;
+  };
+
+in stdenv.mkDerivation rec {
+  pname = "sequeler";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "Alecaddd";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-MsHHTYERe0v+u3KnVtx+jmJTKORJTJ7bNfJMZHV9Ly4=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config vala gettext wrapGAppsHook python3 desktop-file-utils ];
+
+  buildInputs = [ gtk3 glib pantheon.granite libgee sqlGda gtksourceview libxml2 libsecret libssh2 ];
+
+  postPatch = ''
+    chmod +x build-aux/meson_post_install.py
+    patchShebangs build-aux/meson_post_install.py
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Friendly SQL Client";
+    longDescription = ''
+      Sequeler is a native Linux SQL client built in Vala and Gtk. It allows you
+      to connect to your local and remote databases, write SQL in a handy text
+      editor with language recognition, and visualize SELECT results in a
+      Gtk.Grid Widget.
+    '';
+    homepage = "https://github.com/Alecaddd/sequeler";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ] ++ teams.pantheon.members;
+    platforms = platforms.linux;
+    mainProgram = "com.github.alecaddd.sequeler";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sequelpro/default.nix b/nixpkgs/pkgs/applications/misc/sequelpro/default.nix
new file mode 100644
index 000000000000..dd1aca73b7db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sequelpro/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, undmg }:
+
+stdenv.mkDerivation {
+  pname = "sequel-pro";
+  version = "1.1.2";
+
+  src = fetchurl {
+    url = "https://github.com/sequelpro/sequelpro/releases/download/release-1.1.2/sequel-pro-1.1.2.dmg";
+    sha256 = "1il7yc3f0yzxkra27bslnmka5ycxzx0q4m3xz2j9r7iyq5izsd3v";
+  };
+
+  buildInputs = [ undmg ];
+  installPhase = ''
+    mkdir -p "$out/Applications/Sequel Pro.app"
+    cp -R . "$out/Applications/Sequel Pro.app"
+    chmod +x "$out/Applications/Sequel Pro.app/Contents/MacOS/Sequel Pro"
+  '';
+
+  meta = {
+    description = "MySQL database management for macOS";
+    homepage = "http://www.sequelpro.com/";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/serial-studio/default.nix b/nixpkgs/pkgs/applications/misc/serial-studio/default.nix
new file mode 100644
index 000000000000..1e205618f400
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/serial-studio/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, qmake, qtquickcontrols2, qtserialport, qtsvg, wrapQtAppsHook }:
+
+stdenv.mkDerivation rec {
+  pname = "serial-studio";
+  version = "1.1.7";
+
+  src = fetchFromGitHub {
+    owner = "Serial-Studio";
+    repo = "Serial-Studio";
+    rev = "v${version}";
+    hash = "sha256-Tsd1PGB7cO8h3HDifOtB8jsnj+fS4a/o5nfLoohVLM4=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+
+  buildInputs = [ qtquickcontrols2 qtserialport qtsvg ];
+
+  meta = with lib; {
+    description = "Multi-purpose serial data visualization & processing program";
+    homepage = "https://serial-studio.github.io/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sfwbar/default.nix b/nixpkgs/pkgs/applications/misc/sfwbar/default.nix
new file mode 100644
index 000000000000..bd46c449ffab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sfwbar/default.nix
@@ -0,0 +1,57 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gtk3
+, meson
+, ninja
+, json_c
+, pkg-config
+, gtk-layer-shell
+, libpulseaudio
+, libmpdclient
+, libxkbcommon
+, alsa-lib
+, makeWrapper
+,
+}:
+stdenv.mkDerivation rec {
+  pname = "sfwbar";
+  version = "1.0_beta13";
+
+  src = fetchFromGitHub {
+    owner = "LBCrion";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7oiuTEqdXDReKdakJX6+HRaSi1XovM+MkHFkaFZtq64=";
+  };
+
+  buildInputs = [
+    gtk3
+    json_c
+    gtk-layer-shell
+    libpulseaudio
+    libmpdclient
+    libxkbcommon
+    alsa-lib
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    makeWrapper
+  ];
+
+  postFixup = ''
+    wrapProgram $out/bin/sfwbar \
+      --suffix XDG_DATA_DIRS : $out/share
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/LBCrion/sfwbar";
+    description = "A flexible taskbar application for wayland compositors, designed with a stacking layout in mind";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ NotAShelf ];
+    license = licenses.gpl3Only;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/shavee/default.nix b/nixpkgs/pkgs/applications/misc/shavee/default.nix
new file mode 100644
index 000000000000..7854cfbd17f4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/shavee/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pam
+, pkg-config
+, openssl
+, zlib
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "shavee";
+  version = "0.7.3";
+
+  src = fetchFromGitHub {
+    owner = "ashuio";
+    repo = "shavee";
+    rev = "v${version}";
+    hash = "sha256-41wJ3QBZdmCl7v/6JetXhzH2zF7tsKYMKZY1cKhByX8=";
+  };
+
+  cargoHash = "sha256-tnIqhZpqdy8pV4L6KF5v19ufpWRpMX5gTPlWWbwB3RU=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+    pam
+    zlib
+  ];
+
+   # these tests require network access
+  checkFlags = [
+    "--skip=filehash::tests::remote_file_hash"
+    "--skip=filehash::tests::get_filehash_unit_test"
+  ];
+
+  meta = {
+    homepage = "https://github.com/ashuio/shavee";
+    description = "A program to automatically decrypt and mount ZFS datasets using Yubikey HMAC as 2FA or any File on USB/SFTP/HTTPS";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ jasonodoom ];
+    platforms = lib.platforms.linux;
+    mainProgram = "shavee";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/shell-genie/default.nix b/nixpkgs/pkgs/applications/misc/shell-genie/default.nix
new file mode 100644
index 000000000000..dd6c723121d4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/shell-genie/default.nix
@@ -0,0 +1,51 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+with python3.pkgs;
+
+buildPythonPackage rec {
+  pname = "shell-genie";
+  version = "0.2.10";
+  pyproject = true;
+
+  src = fetchPypi {
+    pname = "shell_genie";
+    inherit version;
+    hash = "sha256-z7LiAq2jLzqjg4Q/r9o7M6VbedeT34NyPpgctfqBp+8=";
+  };
+
+  pythonRelaxDeps = [
+    "openai"
+    "typer"
+  ];
+
+  nativeBuildInputs = [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  propagatedBuildInputs = [
+    colorama
+    openai
+    pyperclip
+    rich
+    shellingham
+    typer
+  ] ++ typer.optional-dependencies.all;
+
+  # No tests available
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "shell_genie"
+  ];
+
+  meta = with lib; {
+    description = "Describe your shell commands in natural language";
+    homepage = "https://github.com/dylanjcastillo/shell-genie";
+    license = licenses.mit;
+    maintainers = with maintainers; [ onny ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/shipments/default.nix b/nixpkgs/pkgs/applications/misc/shipments/default.nix
new file mode 100644
index 000000000000..dccd5dc89c69
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/shipments/default.nix
@@ -0,0 +1,51 @@
+{ desktop-file-utils
+, fetchFromSourcehut
+, gobject-introspection
+, gtk3
+, lib
+, libhandy
+, meson
+, ninja
+, pkg-config
+, python3
+, stdenv
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "shipments";
+  version = "0.3.0";
+
+  src = fetchFromSourcehut {
+    owner = "~martijnbraam";
+    repo = "shipments";
+    rev = version;
+    hash = "sha256-8wX1s5mPCdMINIQP4m5q5StKqxY6CGBBxIxyQAvU7Pc=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gtk3
+    libhandy
+    (python3.withPackages (ps: with ps; [
+      pygobject3
+      requests
+    ]))
+  ];
+
+  meta = with lib; {
+    description = "Postal package tracking application";
+    homepage = "https://sr.ht/~martijnbraam/shipments/";
+    changelog = "https://git.sr.ht/~martijnbraam/shipments/refs/${version}";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ michaelgrahamevans ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sidequest/default.nix b/nixpkgs/pkgs/applications/misc/sidequest/default.nix
new file mode 100644
index 000000000000..c472fdb65ec9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sidequest/default.nix
@@ -0,0 +1,126 @@
+{ stdenv
+, lib
+, fetchurl
+, buildFHSEnv
+, makeDesktopItem
+, makeWrapper
+, alsa-lib
+, at-spi2-atk
+, cairo
+, cups
+, dbus
+, expat
+, gdk-pixbuf
+, glib
+, gtk3
+, mesa
+, nss
+, nspr
+, libdrm
+, xorg
+, libxkbcommon
+, libxshmfence
+, pango
+, systemd
+, icu
+, openssl
+, zlib
+}:
+  let
+    pname = "sidequest";
+    version = "0.10.33";
+
+    desktopItem = makeDesktopItem rec {
+      name = "SideQuest";
+      exec = "SideQuest";
+      desktopName = name;
+      genericName = "VR App Store";
+      categories = [ "Settings" "PackageManager" ];
+    };
+
+    sidequest = stdenv.mkDerivation {
+      inherit pname version;
+
+      src = fetchurl {
+        url = "https://github.com/SideQuestVR/SideQuest/releases/download/v${version}/SideQuest-${version}.tar.xz";
+        sha256 = "8ac3d97400a8e3ce86902b5bea7b8d042a092acd888d20e5139490a38507f995";
+      };
+      dontUnpack = true;
+
+      nativeBuildInputs = [ makeWrapper ];
+
+      installPhase = ''
+        mkdir -p "$out/lib/SideQuest" "$out/bin"
+        tar -xJf "$src" -C "$out/lib/SideQuest" --strip-components 1
+
+        ln -s "$out/lib/SideQuest/sidequest" "$out/bin"
+      '';
+
+      postFixup = let
+        libPath = lib.makeLibraryPath [
+          alsa-lib
+          at-spi2-atk
+          cairo
+          cups
+          dbus
+          expat
+          gdk-pixbuf
+          glib
+          gtk3
+          mesa
+          nss
+          nspr
+          libdrm
+          xorg.libX11
+          xorg.libxcb
+          xorg.libXcomposite
+          xorg.libXdamage
+          xorg.libXext
+          xorg.libXfixes
+          xorg.libXrandr
+          xorg.libxshmfence
+          libxkbcommon
+          xorg.libxkbfile
+          pango
+          stdenv.cc.cc.lib
+          systemd
+        ];
+      in ''
+        patchelf \
+          --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+          --set-rpath "${libPath}:$out/lib/SideQuest" \
+          "$out/lib/SideQuest/sidequest"
+      '';
+    };
+  in buildFHSEnv {
+    name = "SideQuest";
+
+    passthru = {
+      inherit pname version;
+
+      meta = with lib; {
+        description = "An open app store and side-loading tool for Android-based VR devices such as the Oculus Go, Oculus Quest or Moverio BT 300";
+        homepage = "https://github.com/SideQuestVR/SideQuest";
+        downloadPage = "https://github.com/SideQuestVR/SideQuest/releases";
+        sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+        license = licenses.mit;
+        maintainers = with maintainers; [ joepie91 rvolosatovs ];
+        platforms = [ "x86_64-linux" ];
+        mainProgram = "SideQuest";
+      };
+    };
+
+    targetPkgs = pkgs: [
+      sidequest
+      # Needed in the environment on runtime, to make QuestSaberPatch work
+      icu openssl zlib
+      libxkbcommon libxshmfence
+    ];
+
+    extraInstallCommands = ''
+      mkdir -p "$out/share/applications"
+      ln -s ${desktopItem}/share/applications/* "$out/share/applications"
+    '';
+
+    runScript = "sidequest";
+  }
diff --git a/nixpkgs/pkgs/applications/misc/sigal/default.nix b/nixpkgs/pkgs/applications/misc/sigal/default.nix
new file mode 100644
index 000000000000..145c34b7f8c0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sigal/default.nix
@@ -0,0 +1,58 @@
+{ stdenv
+, lib
+, python3
+, fetchPypi
+, ffmpeg
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "sigal";
+  version = "2.4";
+  pyproject = true;
+
+  src = fetchPypi {
+    inherit version pname;
+    hash = "sha256-pDTaqtqfuk7tACkyaKClTJotuVcTKli5yx1wbEM93TM=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    setuptools-scm
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    # install_requires
+    jinja2
+    markdown
+    pillow
+    pilkit
+    click
+    blinker
+    natsort
+    # extras_require
+    brotli
+    feedgenerator
+    zopfli
+    cryptography
+  ];
+
+  nativeCheckInputs = [
+    ffmpeg
+  ] ++ (with python3.pkgs; [
+    pytestCheckHook
+  ]);
+
+  disabledTests = lib.optionals stdenv.isDarwin [
+    "test_nonmedia_files"
+  ];
+
+  makeWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ ffmpeg ]}"
+  ];
+
+  meta = with lib; {
+    description = "Yet another simple static gallery generator";
+    homepage = "http://sigal.saimon.org/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ domenkozar matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sigi/default.nix b/nixpkgs/pkgs/applications/misc/sigi/default.nix
new file mode 100644
index 000000000000..16df94f4d0f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sigi/default.nix
@@ -0,0 +1,31 @@
+{ lib, rustPlatform, fetchCrate, installShellFiles, testers, sigi }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "sigi";
+  version = "3.6.3";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-JGQ9UbkS3Q1ohy6vtiUlPijuffH4Gb99cZCKreGqE/U=";
+  };
+
+  cargoHash = "sha256-W/ekk4tsYxG7FXzJW5i0Ii7nLgDHCSCjO3couN+/sMk=";
+  nativeBuildInputs = [ installShellFiles ];
+
+  # In case anything goes wrong.
+  checkFlags = [ "RUST_BACKTRACE=1" ];
+
+  postInstall = ''
+    installManPage sigi.1
+  '';
+
+  passthru.tests.version = testers.testVersion { package = sigi; };
+
+  meta = with lib; {
+    description = "Organizing CLI for people who don't love organizing.";
+    homepage = "https://github.com/sigi-cli/sigi";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ booniepepper ];
+    mainProgram = "sigi";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/siglo/default.nix b/nixpkgs/pkgs/applications/misc/siglo/default.nix
new file mode 100644
index 000000000000..520f4330e503
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/siglo/default.nix
@@ -0,0 +1,70 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, glib
+, meson
+, ninja
+, wrapGAppsHook
+, desktop-file-utils
+, gobject-introspection
+, gtk3
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "siglo";
+  version = "0.9.9";
+
+  src = fetchFromGitHub {
+    owner = "theironrobin";
+    repo = "siglo";
+    rev = "v${version}";
+    hash = "sha256-4jKsRpzuyHH31LXndC3Ua4TYcI0G0v9qqe0cbvLuCDA=";
+  };
+
+  patches = [
+    ./siglo-no-user-install.patch
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/postinstall.py # patchShebangs requires an executable file
+    patchShebangs build-aux/meson/postinstall.py
+  '';
+
+  nativeBuildInputs = [
+    glib
+    meson
+    ninja
+    wrapGAppsHook
+    python3.pkgs.wrapPython
+    python3
+    desktop-file-utils
+    gtk3
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gtk3
+    python3.pkgs.gatt
+  ];
+
+  pythonPath = with python3.pkgs; [
+    gatt
+    pybluez
+    requests
+  ];
+
+  preFixup = ''
+    buildPythonPath "$out $pythonPath"
+    gappsWrapperArgs+=(--prefix PYTHONPATH : "$program_PYTHONPATH")
+  '';
+
+  meta = with lib; {
+    description = "GTK app to sync InfiniTime watch with PinePhone";
+    homepage = "https://github.com/theironrobin/siglo";
+    changelog = "https://github.com/theironrobin/siglo/tags/v${version}";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/siglo/siglo-no-user-install.patch b/nixpkgs/pkgs/applications/misc/siglo/siglo-no-user-install.patch
new file mode 100644
index 000000000000..11cd472d7eb5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/siglo/siglo-no-user-install.patch
@@ -0,0 +1,13 @@
+diff --git a/data/meson.build b/data/meson.build
+index 62a00fe..5319974 100644
+--- a/data/meson.build
++++ b/data/meson.build
+@@ -18,8 +18,6 @@ install_data(join_paths('icons', 'com.github.alexr4535.siglo.svg'),
+   install_dir: join_paths(get_option('datadir'), 'icons')
+ )
+ 
+-install_data('siglo.service', install_dir: '/etc/systemd/user/')
+-
+ appstream_file = i18n.merge_file(
+   input: 'com.github.alexr4535.siglo.appdata.xml.in',
+   output: 'com.github.alexr4535.siglo.appdata.xml',
diff --git a/nixpkgs/pkgs/applications/misc/sioyek/default.nix b/nixpkgs/pkgs/applications/misc/sioyek/default.nix
new file mode 100644
index 000000000000..3a59a2542eaf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sioyek/default.nix
@@ -0,0 +1,94 @@
+{ lib
+, stdenv
+, installShellFiles
+, fetchFromGitHub
+, fetchurl
+, freetype
+, gumbo
+, harfbuzz
+, jbig2dec
+, mujs
+, mupdf
+, openjpeg
+, qt3d
+, qtbase
+, qmake
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "sioyek";
+  version = "2.0.0";
+
+  src = fetchFromGitHub {
+    owner = "ahrm";
+    repo = "sioyek";
+    rev = "v${finalAttrs.version}";
+    sha256 = "sha256-GFZaTXJhoBB+rSe7Qk6H6FZJVXr3nO9XgM+LAbS4te4=";
+  };
+
+  patches = [
+    # Fixed compatibility with mupdf-0.23.0
+    # https://github.com/ahrm/sioyek/issues/804
+    (fetchurl {
+      url = "https://git.alpinelinux.org/aports/plain/community/sioyek/mupdf-0.23.0.patch?id=86e913eccf19b97a16f25d9b6cdf0f50232f1226";
+      hash = "sha256-sEqhpk7/h6g/fIhbu5LgpKKnbnIFLInrTP1k+/GhrXE=";
+    })
+  ];
+
+  buildInputs = [
+    gumbo
+    harfbuzz
+    jbig2dec
+    mujs
+    mupdf
+    openjpeg
+    qt3d
+    qtbase
+  ]
+  ++ lib.optionals stdenv.isDarwin [ freetype ];
+
+  nativeBuildInputs = [
+    installShellFiles
+    qmake
+    wrapQtAppsHook
+  ];
+
+  qmakeFlags = lib.optionals stdenv.isDarwin [ "CONFIG+=non_portable" ];
+
+  postPatch = ''
+    substituteInPlace pdf_viewer_build_config.pro \
+      --replace "-lmupdf-threads" "-lgumbo -lharfbuzz -lfreetype -ljbig2dec -ljpeg -lopenjp2" \
+      --replace "-lmupdf-third" ""
+    substituteInPlace pdf_viewer/main.cpp \
+      --replace "/usr/share/sioyek" "$out/share" \
+      --replace "/etc/sioyek" "$out/etc"
+  '';
+
+  postInstall = if stdenv.isDarwin then ''
+    cp -r pdf_viewer/shaders sioyek.app/Contents/MacOS/shaders
+    cp pdf_viewer/prefs.config sioyek.app/Contents/MacOS/
+    cp pdf_viewer/prefs_user.config sioyek.app/Contents/MacOS/
+    cp pdf_viewer/keys.config sioyek.app/Contents/MacOS/
+    cp pdf_viewer/keys_user.config sioyek.app/Contents/MacOS/
+    cp tutorial.pdf sioyek.app/Contents/MacOS/
+
+    mkdir -p $out/Applications $out/bin
+    cp -r sioyek.app $out/Applications
+    ln -s $out/Applications/sioyek.app/Contents/MacOS/sioyek $out/bin/sioyek
+  '' else ''
+    install -Dm644 tutorial.pdf $out/share/tutorial.pdf
+    cp -r pdf_viewer/shaders $out/share/
+    install -Dm644 -t $out/etc/ pdf_viewer/{keys,prefs}.config
+    installManPage resources/sioyek.1
+  '';
+
+  meta = with lib; {
+    homepage = "https://sioyek.info/";
+    description = "A PDF viewer designed for research papers and technical books";
+    changelog = "https://github.com/ahrm/sioyek/releases/tag/v${finalAttrs.version}";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ podocarp ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/skate/default.nix b/nixpkgs/pkgs/applications/misc/skate/default.nix
new file mode 100644
index 000000000000..16849996441f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/skate/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "skate";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "charmbracelet";
+    repo = "skate";
+    rev = "v${version}";
+    hash = "sha256-Kum8IdgvRC75RLafCac0fkNn/VKvWFW48IK5tqLH/ME=";
+  };
+
+  proxyVendor = true;
+  vendorHash = "sha256-xNM4qmpv+wcoiGrQ585N3VoKW6tio0cdHmUHRl2Pvio=";
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  meta = with lib; {
+    description = "A personal multi-machine syncable key value store";
+    homepage = "https://github.com/charmbracelet/skate";
+    changelog = "https://github.com/charmbracelet/skate/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda penguwin ];
+    mainProgram = "skate";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/skytemple/default.nix b/nixpkgs/pkgs/applications/misc/skytemple/default.nix
new file mode 100644
index 000000000000..945ea6e25bdd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/skytemple/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, fetchFromGitHub
+, gobject-introspection
+, gtk3
+, gtksourceview4
+, webkitgtk
+, wrapGAppsHook
+, python3Packages
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "skytemple";
+  version = "1.6.3";
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "SkyTemple";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-norcfoxZG9crgQz7p1+Gfne5il1AWfxdZa4JE/LfXU8=";
+  };
+
+  buildInputs = [
+    gtk3
+    gtksourceview4
+    # webkitgtk is used for rendering interactive statistics graph which
+    # can be seen by opening a ROM, entering Pokemon section, selecting
+    # any Pokemon, and clicking Stats and Moves tab.
+    webkitgtk
+  ];
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    cairosvg
+    natsort
+    ndspy
+    packaging
+    pycairo
+    pygal
+    psutil
+    gbulb
+    pypresence
+    sentry-sdk
+    setuptools
+    skytemple-dtef
+    skytemple-eventserver
+    skytemple-files
+    skytemple-icons
+    skytemple-ssb-debugger
+    tilequant
+    wheel
+  ] ++ skytemple-files.optional-dependencies.spritecollab;
+
+  doCheck = false; # there are no tests
+
+  postInstall = ''
+    install -Dm444 org.skytemple.SkyTemple.desktop -t $out/share/applications
+    install -Dm444 installer/skytemple.ico $out/share/icons/hicolor/256x256/apps/org.skytemple.SkyTemple.ico
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/SkyTemple/skytemple";
+    description = "ROM hacking tool for Pokémon Mystery Dungeon Explorers of Sky";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ xfix marius851000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sl1-to-photon/default.nix b/nixpkgs/pkgs/applications/misc/sl1-to-photon/default.nix
new file mode 100644
index 000000000000..c924a3ec2bb5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sl1-to-photon/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonApplication
+, fetchFromGitHub
+, pillow
+, pyside2
+, numpy
+, pyphotonfile
+, shiboken2
+}:
+let
+  version = "0.1.3";
+in
+ buildPythonApplication rec {
+  pname = "sl1-to-photon";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "fookatchu";
+    repo = "SL1toPhoton";
+    rev = "v${version}";
+    sha256 = "1hmb74rcky3nax4lxn7pw6lcd5a66fdbwrm11c84zb31xb51bakw";
+  };
+
+  propagatedBuildInputs = [ pyphotonfile pillow numpy pyside2 shiboken2 ];
+
+  format = "other";
+
+  installPhase = ''
+    install -D -m 0755 SL1_to_Photon.py $out/bin/${pname}
+    sed -i '1i#!/usr/bin/env python' $out/bin/${pname}
+  '';
+
+  meta = with lib; {
+    maintainers = [ maintainers.cab404 ];
+    license = licenses.gpl3Plus;
+    description = "Tool for converting Slic3r PE's SL1 files to Photon files for the Anycubic Photon 3D-Printer";
+    homepage = "https://github.com/fookatchu/SL1toPhoton";
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/slic3r/default.nix b/nixpkgs/pkgs/applications/misc/slic3r/default.nix
new file mode 100644
index 000000000000..923e480c1f0f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slic3r/default.nix
@@ -0,0 +1,102 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, perl, makeWrapper
+, makeDesktopItem, which, perlPackages, boost, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  version = "1.3.0";
+  pname = "slic3r";
+
+  src = fetchFromGitHub {
+    owner = "alexrj";
+    repo = "Slic3r";
+    rev = version;
+    sha256 = "sha256-cf0QTOzhLyTcbJryCQoTVzU8kfrPV6SLpqi4s36X5N0=";
+  };
+
+  nativeBuildInputs = [ makeWrapper which wrapGAppsHook ];
+  buildInputs =
+  [boost] ++
+  (with perlPackages; [ perl
+    EncodeLocale MathClipper ExtUtilsXSpp
+    MathConvexHullMonotoneChain MathGeometryVoronoi MathPlanePath Moo
+    IOStringy ClassXSAccessor Wx GrowlGNTP NetDBus ImportInto XMLSAX
+    ExtUtilsMakeMaker OpenGL WxGLCanvas ModuleBuild LWP
+    ExtUtilsCppGuess ModuleBuildWithXSpp ExtUtilsTypemapsDefault
+    DevelChecklib locallib
+  ]);
+
+  desktopItem = makeDesktopItem {
+    name = "slic3r";
+    exec = "slic3r";
+    icon = "slic3r";
+    comment = "G-code generator for 3D printers";
+    desktopName = "Slic3r";
+    genericName = "3D printer tool";
+    categories = [ "Development" ];
+  };
+
+  prePatch = ''
+    # In nix ioctls.h isn't available from the standard kernel-headers package
+    # on other distributions. As the copy in glibc seems to be identical to the
+    # one in the kernel, we use that one instead.
+    sed -i 's|"/usr/include/asm-generic/ioctls.h"|<asm-generic/ioctls.h>|g' xs/src/libslic3r/GCodeSender.cpp
+  '';
+
+  patches = [
+    (fetchpatch {
+      url = "https://web.archive.org/web/20230606220657if_/https://sources.debian.org/data/main/s/slic3r/1.3.0%2Bdfsg1-5/debian/patches/Drop-error-admesh-works-correctly-on-little-endian-machin.patch";
+      hash = "sha256-+F94jzMFBdI++SKgyEZTBaHFVbjxWwgJa8YVbpK0euI=";
+    })
+    (fetchpatch {
+      url = "https://web.archive.org/web/20230606220036if_/https://sources.debian.org/data/main/s/slic3r/1.3.0+dfsg1-5/debian/patches/0006-Fix-FTBFS-with-Boost-1.71.patch";
+      hash = "sha256-4jvNccttig5YI1hXSANAWxVz6C4+kowlacMXVCpFgOo=";
+    })
+    (fetchpatch {
+      url = "https://web.archive.org/web/20230606220054if_/https://sources.debian.org/data/main/s/slic3r/1.3.0+dfsg1-5/debian/patches/fix_boost_174.patch";
+      hash = "sha256-aSmxc2htmrla9l/DIRWeKdBW0LTV96wMUZSLLNjgbzY=";
+    })
+  ];
+
+  buildPhase = ''
+    export SLIC3R_NO_AUTO=true
+    export LD=$CXX
+    export PERL5LIB="./xs/blib/arch/:./xs/blib/lib:$PERL5LIB"
+
+    substituteInPlace Build.PL \
+      --replace "0.9918" "0.9923" \
+      --replace "eval" ""
+
+    pushd xs
+      perl Build.PL
+      perl Build
+    popd
+
+    perl Build.PL --gui
+  '';
+
+  installPhase = ''
+    mkdir -p "$out/share/slic3r/"
+    cp -r * "$out/share/slic3r/"
+    wrapProgram "$out/share/slic3r/slic3r.pl" \
+      --prefix PERL5LIB : "$out/share/slic3r/xs/blib/arch:$out/share/slic3r/xs/blib/lib:$PERL5LIB"
+    mkdir -p "$out/bin"
+    ln -s "$out/share/slic3r/slic3r.pl" "$out/bin/slic3r"
+    mkdir -p "$out/share/pixmaps/"
+    ln -s "$out/share/slic3r/var/Slic3r.png" "$out/share/pixmaps/slic3r.png"
+    mkdir -p "$out/share/applications"
+    cp "$desktopItem"/share/applications/* "$out/share/applications/"
+  '';
+
+  meta = with lib; {
+    description = "G-code generator for 3D printers";
+    longDescription = ''
+      Slic3r is the tool you need to convert a digital 3D model into printing
+      instructions for your 3D printer. It cuts the model into horizontal
+      slices (layers), generates toolpaths to fill them and calculates the
+      amount of material to be extruded.'';
+    homepage = "https://slic3r.org/";
+    license = licenses.agpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bjornfor ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/slides/default.nix b/nixpkgs/pkgs/applications/misc/slides/default.nix
new file mode 100644
index 000000000000..0c97ff7f14fa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slides/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, bash
+, buildGoModule
+, fetchFromGitHub
+, go
+}:
+
+buildGoModule rec {
+  pname = "slides";
+  version = "0.9.0";
+
+  src = fetchFromGitHub {
+    owner = "maaslalani";
+    repo = "slides";
+    rev = "v${version}";
+    sha256 = "sha256-K8VsqaNUPxh3/Yddy6DFiOyjRuZ6r6bU456Pm31A1og=";
+  };
+
+  nativeCheckInputs = [
+    bash
+    go
+  ];
+
+  vendorHash = "sha256-c3YCf22L5+rTmH5ePeJ0/goRj5rKY6v+Zon3183MhMY=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.Version=${version}"
+  ];
+
+  meta = with lib; {
+    description = "Terminal based presentation tool";
+    homepage = "https://github.com/maaslalani/slides";
+    changelog = "https://github.com/maaslalani/slides/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ maaslalani penguwin ];
+    mainProgram = "slides";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/slippy/default.nix b/nixpkgs/pkgs/applications/misc/slippy/default.nix
new file mode 100644
index 000000000000..40de95838ad5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slippy/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, jq
+, moreutils
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "slippy";
+  version = "0.1.1";
+
+  src = fetchFromGitHub {
+    owner = "axodotdev";
+    repo = "slippy";
+    rev = "v${version}";
+    hash = "sha256-7Uvo5+saxwTMQjfDliyOYC6j6LbpMf/FiONfX38xepI=";
+  };
+
+  cargoHash = "sha256-6nB+rHBJU9qhA7azz2ynaBw1UJdwE+T7pgpoPzhD5Bk=";
+
+  # the dependency css-minify contains both README.md and Readme.md,
+  # which causes a hash mismatch on systems with a case-insensitive filesystem
+  # this removes the readme files and updates cargo's checksum file accordingly
+  depsExtraArgs = {
+    nativeBuildInputs = [
+      jq
+      moreutils
+    ];
+
+    postBuild = ''
+      pushd $name/css-minify
+
+      rm -f README.md Readme.md
+      jq 'del(.files."README.md") | del(.files."Readme.md")' \
+        .cargo-checksum.json -c \
+        | sponge .cargo-checksum.json
+
+      popd
+    '';
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  # Cargo.lock is outdated
+  postConfigure = ''
+    cargo metadata --offline
+  '';
+
+  meta = with lib; {
+    description = "Markdown slideshows in Rust";
+    homepage = "https://github.com/axodotdev/slippy";
+    changelog = "https://github.com/axodotdev/slippy/releases/tag/${src.rev}";
+    license = with licenses; [ asl20 mit ];
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "slippy";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/slstatus/default.nix b/nixpkgs/pkgs/applications/misc/slstatus/default.nix
new file mode 100644
index 000000000000..fcac061de0d1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slstatus/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchgit
+, pkg-config
+, writeText
+, libX11
+, libXau
+, libXdmcp
+, conf ? null
+, patches ? [ ]
+}:
+
+stdenv.mkDerivation rec {
+  pname = "slstatus";
+  version = "1.0";
+
+  src = fetchgit {
+    url = "https://git.suckless.org/slstatus";
+    rev = version;
+    hash = "sha256-cFah6EgApslLSlJaOy/5W9ZV9Z1lzfKye/rRh9Om3T4=";
+  };
+
+  preBuild =
+    let
+      configFile = if lib.isDerivation conf || builtins.isPath conf then conf else writeText "config.def.h" conf;
+    in
+    ''
+      ${lib.optionalString (conf!=null) "cp ${configFile} config.def.h"}
+      makeFlagsArray+=(LDLIBS="-lX11 -lxcb -lXau -lXdmcp" CC=$CC)
+    '';
+
+  inherit patches;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libX11 libXau libXdmcp ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    homepage = "https://tools.suckless.org/slstatus/";
+    description = "status monitor for window managers that use WM_NAME like dwm";
+    license = licenses.isc;
+    maintainers = with maintainers; [ oxzi ];
+    platforms = platforms.linux;
+    mainProgram = "slstatus";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/slweb/default.nix b/nixpkgs/pkgs/applications/misc/slweb/default.nix
new file mode 100644
index 000000000000..b1e92cb9a39c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/slweb/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, redo-apenwarr
+, testers
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "slweb";
+  version = "0.9.0";
+
+  src = fetchFromSourcehut {
+    owner = "~strahinja";
+    repo = "slweb";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-QDHcp5pCmapgOlJpDDyyC12JOfh/biDyF6O+iKGbOGg=";
+  };
+
+  nativeBuildInputs = [ redo-apenwarr ];
+
+  installPhase = ''
+    runHook preInstall
+    export FALLBACKVER=${finalAttrs.version}
+    PREFIX=$out redo install
+    runHook postInstall
+  '';
+
+  enableParallelBuilding = true;
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+  };
+
+  meta = with lib; {
+    description = "A static website generator which aims at being simplistic";
+    homepage = "https://strahinja.srht.site/slweb/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ GaetanLepage ];
+    mainProgram = "slweb";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/smpq/default.nix b/nixpkgs/pkgs/applications/misc/smpq/default.nix
new file mode 100644
index 000000000000..a1879241bd21
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/smpq/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, cmake, stormlib }:
+
+stdenv.mkDerivation rec {
+  pname = "smpq";
+  version = "1.6";
+
+  src = fetchurl {
+    url = "https://launchpad.net/smpq/trunk/${version}/+download/${pname}_${version}.orig.tar.gz";
+    sha256 = "1jqq5x3b17jy66x3kkf5hs5l322dx2v14djxxrqrnqp8bn5drlmm";
+  };
+
+  cmakeFlags = [
+    "-DWITH_KDE=OFF"
+  ];
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ stormlib ];
+
+  meta = with lib; {
+    description = "StormLib MPQ archiving utility";
+    homepage = "https://launchpad.net/smpq";
+    license = licenses.gpl3Only;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ aanderse karolchmist ];
+    mainProgram = "smpq";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/snagboot/default.nix b/nixpkgs/pkgs/applications/misc/snagboot/default.nix
new file mode 100644
index 000000000000..353712d5ba89
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/snagboot/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pythonRelaxDepsHook
+, python3
+, snagboot
+, testers
+, gitUpdater
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "snagboot";
+  version = "1.3";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "bootlin";
+    repo = "snagboot";
+    rev = "v${version}";
+    hash = "sha256-ergTa6uR1SyR27H2HAWp/rtgalCnQge07Pi24PrsW+8=";
+  };
+
+  nativeBuildInputs = [
+    pythonRelaxDepsHook
+  ];
+
+  pythonRemoveDeps = [
+    "pylibfdt"
+    "swig"
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    setuptools
+    pyusb
+    pyserial
+    crccheck
+    six
+    xmodem
+    pyyaml
+    libfdt
+    tftpy
+  ];
+
+  postInstall = lib.optionalString stdenv.isLinux ''
+    rules="src/snagrecover/50-snagboot.rules"
+    if [ ! -f "$rules" ]; then
+        echo "$rules is missing, must update the Nix file."
+        exit 1
+    fi
+
+    mkdir -p "$out/lib/udev/rules.d"
+    cp "$rules" "$out/lib/udev/rules.d/50-snagboot.rules"
+  '';
+
+  # There are no tests
+  doCheck = false;
+
+  passthru = {
+    updateScript = gitUpdater {
+      rev-prefix = "v";
+      ignoredVersions = ".(rc|beta).*";
+    };
+
+    tests.version = testers.testVersion {
+      package = snagboot;
+      command = "snagrecover --version";
+      version = "v${version}";
+    };
+  };
+
+  meta = {
+    homepage = "https://github.com/bootlin/snagboot";
+    description = "Generic recovery and reflashing tool for embedded platforms";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ otavio ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/snapmaker-luban/default.nix b/nixpkgs/pkgs/applications/misc/snapmaker-luban/default.nix
new file mode 100644
index 000000000000..351a17c5fc4d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/snapmaker-luban/default.nix
@@ -0,0 +1,99 @@
+{ lib, stdenv, autoPatchelfHook, makeDesktopItem, copyDesktopItems, wrapGAppsHook, fetchurl
+, alsa-lib, at-spi2-atk, at-spi2-core, atk, cairo, cups
+, gtk3, nss, glib, dbus, nspr, gdk-pixbuf, libdrm, mesa
+, libX11, libXScrnSaver, libXcomposite, libXcursor, libXdamage, libXext
+, libXfixes, libXi, libXrandr, libXrender, libXtst, libxcb, libxshmfence, pango
+, gcc-unwrapped, udev
+}:
+
+stdenv.mkDerivation rec {
+  pname = "snapmaker-luban";
+  version = "4.10.2";
+
+  src = fetchurl {
+    url = "https://github.com/Snapmaker/Luban/releases/download/v${version}/snapmaker-luban-${version}-linux-x64.tar.gz";
+    sha256 = "sha256-unxI0L8pcF6iWWa57GpYv/aYsApKAKfRaes3uXE7izM=";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    wrapGAppsHook
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    alsa-lib
+    at-spi2-atk
+    at-spi2-core
+    cairo
+    cups
+    gcc-unwrapped
+    gtk3
+    libdrm
+    libXdamage
+    libX11
+    libXScrnSaver
+    libXtst
+    libxcb
+    libxshmfence
+    mesa # Required for libgbm
+    nspr
+    nss
+  ];
+
+  libPath = lib.makeLibraryPath [
+    stdenv.cc.cc alsa-lib atk at-spi2-atk at-spi2-core cairo cups
+    gdk-pixbuf glib gtk3 libX11 libXcomposite libxshmfence
+    libXcursor libXdamage libXext libXfixes libXi libXrandr libXrender
+    libXtst nspr nss libxcb pango libXScrnSaver udev
+  ];
+
+  autoPatchelfIgnoreMissingDeps = [
+    "libc.musl-x86_64.so.1"
+  ];
+
+  dontWrapGApps = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,opt,share/pixmaps}/
+    mv * $out/opt/
+
+    patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \
+      $out/opt/snapmaker-luban
+
+    wrapProgram $out/opt/snapmaker-luban \
+      "''${gappsWrapperArgs[@]}" \
+      --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+      --prefix LD_LIBRARY_PATH : ${libPath}:$out/snapmaker-luban
+
+    ln -s $out/opt/snapmaker-luban $out/bin/snapmaker-luban
+    ln -s $out/opt/resources/app/app/resources/images/snap-luban-logo-64x64.png $out/share/pixmaps/snapmaker-luban.png
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      exec = "snapmaker-luban";
+      icon = "snapmaker-luban";
+      desktopName = "Snapmaker Luban";
+      genericName = meta.description;
+      categories = [ "Office" "Printing" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "Snapmaker Luban is an easy-to-use 3-in-1 software tailor-made for Snapmaker machines";
+    homepage = "https://github.com/Snapmaker/Luban";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl3;
+    maintainers = [ maintainers.simonkampe ];
+    platforms = [ "x86_64-linux" ];
+    knownVulnerabilities = [ "CVE-2023-5217" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/snapper-gui/default.nix b/nixpkgs/pkgs/applications/misc/snapper-gui/default.nix
new file mode 100644
index 000000000000..4c60e2947b97
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/snapper-gui/default.nix
@@ -0,0 +1,48 @@
+{ lib, fetchFromGitHub, python3, python3Packages
+, gnome, gtk3, wrapGAppsHook, gtksourceview3, snapper
+, gobject-introspection
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "snapper-gui";
+  version = "2020-10-20";
+
+  src = fetchFromGitHub {
+    owner = "ricardomv";
+    repo = pname;
+    rev = "f0c67abe0e10cc9e2ebed400cf80ecdf763fb1d1";
+    sha256 = "13j4spbi9pxg69zifzai8ifk4207sn0vwh6vjqryi0snd5sylh7h";
+  };
+
+  nativeBuildInputs = [ wrapGAppsHook gobject-introspection ];
+
+  buildInputs = [
+    python3
+    gnome.adwaita-icon-theme
+  ];
+
+  doCheck = false; # it doesn't have any tests
+
+  propagatedBuildInputs = with python3Packages; [
+    gtk3
+    dbus-python
+    pygobject3
+    setuptools
+    gtksourceview3
+    snapper
+  ];
+
+  meta = with lib; {
+    description = "Graphical interface for snapper";
+    longDescription = ''
+      A graphical user interface for the tool snapper for Linux filesystem
+      snapshot management. It can compare snapshots and revert differences between snapshots.
+      In simple terms, this allows root and non-root users to view older versions of files
+      and revert changes. Currently works with btrfs, ext4 and thin-provisioned LVM volumes.
+    '';
+    homepage = "https://github.com/ricardomv/snapper-gui";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ahuzik ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/snixembed/default.nix b/nixpkgs/pkgs/applications/misc/snixembed/default.nix
new file mode 100644
index 000000000000..21ec5dac81df
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/snixembed/default.nix
@@ -0,0 +1,29 @@
+{ fetchFromSourcehut, gtk3, lib, libdbusmenu-gtk3, pkg-config, stdenv, vala }:
+
+stdenv.mkDerivation rec {
+  pname = "snixembed";
+  version = "0.3.3";
+
+  src = fetchFromSourcehut {
+    owner = "~steef";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-co32Xlklg6KVyi+xEoDJ6TeN28V+wCSx73phwnl/05E=";
+  };
+
+  nativeBuildInputs = [ pkg-config vala ];
+
+  buildInputs = [ gtk3 libdbusmenu-gtk3 ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Proxy StatusNotifierItems as XEmbedded systemtray-spec icons";
+    homepage = "https://git.sr.ht/~steef/snixembed";
+    changelog = "https://git.sr.ht/~steef/snixembed/refs/${version}";
+    license = licenses.isc;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "snixembed";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/snowsql/default.nix b/nixpkgs/pkgs/applications/misc/snowsql/default.nix
new file mode 100644
index 000000000000..c4af36299895
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/snowsql/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, stdenv
+, fetchurl
+, rpmextract
+, patchelf
+, makeWrapper
+, openssl
+, libxcrypt-legacy
+}:
+
+stdenv.mkDerivation rec {
+  pname = "snowsql";
+  version = "1.2.26";
+
+  src = fetchurl {
+    url = "https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/${lib.versions.majorMinor version}/linux_x86_64/snowflake-snowsql-${version}-1.x86_64.rpm";
+    sha256 = "sha256-V0TZebmhc463DczQuTDy0nZQX+io61z/m32/n/EKFJY=";
+  };
+
+  nativeBuildInputs = [ rpmextract makeWrapper ];
+
+  libPath = lib.makeLibraryPath [ openssl libxcrypt-legacy ];
+
+  buildCommand = ''
+    mkdir -p $out/bin/
+    cd $out
+    rpmextract $src
+    rm -R usr/bin
+    mv usr/* $out
+    rmdir usr
+
+    ${patchelf}/bin/patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+        lib64/snowflake/snowsql/snowsql
+
+    makeWrapper $out/lib64/snowflake/snowsql/snowsql $out/bin/snowsql \
+      --set LD_LIBRARY_PATH "${libPath}":"${placeholder "out"}"/lib64/snowflake/snowsql \
+  '';
+
+  meta = with lib; {
+    description = "Command line client for the Snowflake database";
+    homepage = "https://www.snowflake.com";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ andehen ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "snowsql";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/solaar/default.nix b/nixpkgs/pkgs/applications/misc/solaar/default.nix
new file mode 100644
index 000000000000..f3cd458510b3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/solaar/default.nix
@@ -0,0 +1,87 @@
+{ fetchFromGitHub
+, lib
+, gobject-introspection
+, gtk3
+, python3Packages
+, wrapGAppsHook
+, gdk-pixbuf
+, libappindicator
+, librsvg
+}:
+
+# Although we copy in the udev rules here, you probably just want to use
+# `logitech-udev-rules`, which is an alias to `udev` output of this derivation,
+# instead of adding this to `services.udev.packages` on NixOS,
+python3Packages.buildPythonApplication rec {
+  pname = "solaar";
+  version = "1.1.11";
+
+  src = fetchFromGitHub {
+    owner = "pwr-Solaar";
+    repo = "Solaar";
+    rev = "refs/tags/${version}";
+    hash = "sha256-fVWfV7rEu/knysWUrPeokBBlSGnvNlpiptAd1M7ZVd8=";
+  };
+
+  outputs = [ "out" "udev" ];
+
+  nativeBuildInputs = [
+    gdk-pixbuf
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    libappindicator
+    librsvg
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    evdev
+    dbus-python
+    gtk3
+    hid-parser
+    psutil
+    pygobject3
+    pyudev
+    pyyaml
+    xlib
+  ];
+
+  # the -cli symlink is just to maintain compabilility with older versions where
+  # there was a difference between the GUI and CLI versions.
+  postInstall = ''
+    ln -s $out/bin/solaar $out/bin/solaar-cli
+
+    install -Dm444 -t $udev/etc/udev/rules.d rules.d-uinput/*.rules
+  '';
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  # no tests
+  doCheck = false;
+
+  pythonImportsCheck = [ "solaar" ];
+
+  meta = with lib; {
+    description = "Linux devices manager for the Logitech Unifying Receiver";
+    longDescription = ''
+      Solaar is a Linux manager for many Logitech keyboards, mice, and trackpads that
+      connect wirelessly to a USB Unifying, Lightspeed, or Nano receiver, connect
+      directly via a USB cable, or connect via Bluetooth. Solaar does not work with
+      peripherals from other companies.
+
+      Solaar can be used as a GUI application or via its command-line interface.
+
+      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://pwr-solaar.github.io/Solaar/";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ spinus ysndr oxalica ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/somebar/default.nix b/nixpkgs/pkgs/applications/misc/somebar/default.nix
new file mode 100644
index 000000000000..4c2545fe9c96
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/somebar/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, meson
+, ninja
+, pkg-config
+, wayland
+, pango
+, wayland-protocols
+, wayland-scanner
+, conf ? null
+}:
+
+let
+  # There is a configuration in src/config.def.hpp, which we use by default
+  configFile = if lib.isDerivation conf || builtins.isPath conf then conf else "src/config.def.hpp";
+in
+
+stdenv.mkDerivation rec {
+  pname = "somebar";
+  version = "1.0.3";
+
+  src = fetchFromSourcehut {
+    owner = "~raphi";
+    repo = "somebar";
+    rev = version;
+    sha256 = "sha256-PBxCy1dZrOL1nmhVDQozvF0XL79uKMhhERGNpPPzaRU=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config wayland-scanner ];
+  buildInputs = [ pango wayland wayland-protocols ];
+
+  prePatch = ''
+    cp ${configFile} src/config.hpp
+  '';
+
+  meta = with lib; {
+    homepage = "https://git.sr.ht/~raphi/somebar";
+    description = "dwm-like bar for dwl";
+    license = licenses.mit;
+    maintainers = with maintainers; [ magnouvean ];
+    platforms = platforms.linux;
+    mainProgram = "somebar";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/spacenav-cube-example/default.nix b/nixpkgs/pkgs/applications/misc/spacenav-cube-example/default.nix
new file mode 100644
index 000000000000..66c16e458b8f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/spacenav-cube-example/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, libspnav, libX11, mesa_glu }:
+
+stdenv.mkDerivation {
+  pname = "spacenav-cube-example";
+  inherit (libspnav) version src;
+
+  sourceRoot = "${libspnav.src.name}/examples/cube";
+
+  buildInputs = [ libX11 mesa_glu libspnav ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp cube $out/bin/spacenav-cube-example
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://spacenav.sourceforge.net/";
+    description = "An example application to test the spacenavd driver";
+    license = licenses.bsd3;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sohalt ];
+    mainProgram = "spacenav-cube-example";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/speedread/default.nix b/nixpkgs/pkgs/applications/misc/speedread/default.nix
new file mode 100644
index 000000000000..234e6b136feb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/speedread/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "speedread";
+  version = "unstable-2016-09-21";
+
+  src = fetchFromGitHub {
+    owner = "pasky";
+    repo = "speedread";
+    rev = "93acfd61a1bf4482537ce5d71b9164b8446cb6bd";
+    sha256 = "1h94jx3v18fdlc64lfmj2g5x63fjyqb8c56k5lihl7bva0xgdkxd";
+  };
+
+  buildInputs = [ perl ];
+
+  installPhase = ''
+    install -m755 -D speedread $out/bin/speedread
+  '';
+
+  meta = with lib; {
+    description = "A simple terminal-based open source Spritz-alike";
+    longDescription = ''
+      Speedread is a command line filter that shows input text as a
+      per-word rapid serial visual presentation aligned on optimal
+      reading points. This allows reading text at a much more rapid
+      pace than usual as the eye can stay fixed on a single place.
+    '';
+    homepage = src.meta.homepage;
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.oxij ];
+    mainProgram = "speedread";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/spnavcfg/configure-cfgfile-path.patch b/nixpkgs/pkgs/applications/misc/spnavcfg/configure-cfgfile-path.patch
new file mode 100644
index 000000000000..22db2ee66ce3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/spnavcfg/configure-cfgfile-path.patch
@@ -0,0 +1,100 @@
+diff --git a/back.c b/back.c
+index c1810dc..75416fb 100644
+--- a/back.c
++++ b/back.c
+@@ -25,7 +25,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ #include "cfgfile.h"
+ #include "cmd.h"
+ 
+-#define CFGFILE		"/etc/spnavrc"
+ 
+ int get_daemon_pid(void);
+ static int update_cfg(void);
+@@ -127,7 +126,7 @@ int get_daemon_pid(void)
+ 
+ static int update_cfg(void)
+ {
+-	if(write_cfg(CFGFILE, &cfg) == -1) {
++	if(write_cfg(cfg_path(), &cfg) == -1) {
+ 		fprintf(stderr, "failed to update config file\n");
+ 		return -1;
+ 	}
+diff --git a/cfgfile.c b/cfgfile.c
+index 5a9c502..2ea323d 100644
+--- a/cfgfile.c
++++ b/cfgfile.c
+@@ -22,12 +22,40 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ #include <ctype.h>
+ #include <errno.h>
+ #include <fcntl.h>
++#include <unistd.h>
++#include <sys/types.h>
++#include <pwd.h>
+ #include "cfgfile.h"
+ 
+ enum {TX, TY, TZ, RX, RY, RZ};
+ 
+ static const int def_axmap[] = {0, 2, 1, 3, 5, 4};
+ static const int def_axinv[] = {0, 1, 1, 0, 1, 1};
++static char* config_path;
++
++char* cfg_path()
++{
++	char* buf;
++	if((buf = getenv("XDG_CONFIG_HOME"))) {
++		if(config_path == NULL) {
++			config_path = malloc(strlen(buf) + strlen("/spnavrc") + 1);
++			if ( config_path != NULL) {
++				sprintf(config_path, "%s/spnavrc", buf);
++			}
++		};
++		return config_path;
++	} else {
++		if (!(buf = getenv("HOME"))) {
++			struct passwd *pw = getpwuid(getuid());
++			buf = pw->pw_dir;
++		}
++		config_path = malloc(strlen(buf) + strlen("/.config/spnavrc") + 1);
++		if ( config_path != NULL) {
++			sprintf(config_path, "%s/.config/spnavrc", buf);
++		}
++		return config_path;
++	}
++}
+ 
+ void default_cfg(struct cfg *cfg)
+ {
+diff --git a/cfgfile.h b/cfgfile.h
+index dfed8c9..5bb1b2c 100644
+--- a/cfgfile.h
++++ b/cfgfile.h
+@@ -47,6 +47,7 @@ struct cfg {
+ 	int devid[MAX_CUSTOM][2];	/* custom USB vendor/product id list */
+ };
+ 
++char* cfg_path(void);
+ void default_cfg(struct cfg *cfg);
+ int read_cfg(const char *fname, struct cfg *cfg);
+ int write_cfg(const char *fname, struct cfg *cfg);
+diff --git a/front_gtk.c b/front_gtk.c
+index e4c2cd7..6a800a0 100644
+--- a/front_gtk.c
++++ b/front_gtk.c
+@@ -28,8 +28,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ #include "cmd.h"
+ #include "ui.h"
+ 
+-#define CFGFILE		"/etc/spnavrc"
+-
+ #define CHK_AXINV_TRANS_X			"axinv_trans_x"
+ #define CHK_AXINV_TRANS_Y			"axinv_trans_y"
+ #define CHK_AXINV_TRANS_Z			"axinv_trans_z"
+@@ -121,7 +119,7 @@ void frontend(int pfd)
+ 
+ 	gtk_init(&argc, 0);
+ 
+-	read_cfg(CFGFILE, &cfg);
++	read_cfg(cfg_path(), &cfg);
+ 
+ 	create_ui();
+ 
diff --git a/nixpkgs/pkgs/applications/misc/spnavcfg/configure-pidfile-path.patch b/nixpkgs/pkgs/applications/misc/spnavcfg/configure-pidfile-path.patch
new file mode 100644
index 000000000000..a420fcbc07b8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/spnavcfg/configure-pidfile-path.patch
@@ -0,0 +1,40 @@
+diff --git a/back.c b/back.c
+index f364e31..c1810dc 100644
+--- a/back.c
++++ b/back.c
+@@ -26,7 +26,6 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ #include "cmd.h"
+ 
+ #define CFGFILE		"/etc/spnavrc"
+-#define PIDFILE		"/var/run/spnavd.pid"
+ 
+ int get_daemon_pid(void);
+ static int update_cfg(void);
+@@ -97,11 +96,26 @@ int get_daemon_pid(void)
+ {
+ 	FILE *fp;
+ 	char buf[64];
++	char* xdg_runtime_dir;
++	char* pidfile;
+ 
+-	if(!(fp = fopen(PIDFILE, "r"))) {
++	if(!(xdg_runtime_dir = getenv("XDG_RUNTIME_DIR"))){
++		fprintf(stderr, "XDG_RUNTIME_DIR not set, can't find spacenav pid file\n");
++		return -1;
++	}
++	pidfile = malloc(strlen(xdg_runtime_dir) + strlen("/spnavd.pid") + 1);
++	if (pidfile == NULL) {
++		fprintf(stderr, "failed to allocate memory\n");
++		return -1;
++	}
++	sprintf(pidfile, "%s/spnavd.pid", xdg_runtime_dir);
++
++	if(!(fp = fopen(pidfile, "r"))) {
+ 		fprintf(stderr, "no spacenav pid file, can't find daemon\n");
++		free(pidfile);
+ 		return -1;
+ 	}
++	free(pidfile);
+ 	if(!fgets(buf, sizeof buf, fp) || !isdigit(buf[0])) {
+ 		fprintf(stderr, "corrupted pidfile, can't find the daemon\n");
+ 		fclose(fp);
diff --git a/nixpkgs/pkgs/applications/misc/spnavcfg/default.nix b/nixpkgs/pkgs/applications/misc/spnavcfg/default.nix
new file mode 100644
index 000000000000..921947fc1b80
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/spnavcfg/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, lib, fetchFromGitHub, pkg-config, gtk2 }:
+
+stdenv.mkDerivation rec {
+  pname = "spnavcfg";
+  version = "0.3.1";
+
+  src = fetchFromGitHub {
+    owner = "FreeSpacenav";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "180mkdis15gxs79rr3f7hpwa1p6v81bybw37pzzdjnmqwqrc08a0";
+  };
+
+  patches = [
+    # Changes the pidfile path from /run/spnavd.pid to $XDG_RUNTIME_DIR/spnavd.pid
+    # to allow for a user service
+    ./configure-pidfile-path.patch
+    # Changes the config file path from /etc/spnavrc to $XDG_CONFIG_HOME/spnavrc or $HOME/.config/spnavrc
+    # to allow for a user service
+    ./configure-cfgfile-path.patch
+  ];
+
+  postPatch = ''
+    sed -i s/4775/775/ Makefile.in
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk2 ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
+
+  meta = with lib; {
+    homepage = "https://spacenav.sourceforge.net/";
+    description = "Interactive configuration GUI for space navigator input devices";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ gebner ];
+    mainProgram = "spnavcfg";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/spotify-tray/default.nix b/nixpkgs/pkgs/applications/misc/spotify-tray/default.nix
new file mode 100644
index 000000000000..372e468487fd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/spotify-tray/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "spotify-tray";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "tsmetana";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-E86rA8cBjy/bI7sZHlT40o7i23PcONXT5GTHEfcaDf0=";
+  };
+
+  patches = [
+    (fetchpatch {
+      name = "fix-building-with-automake-1.16.5.patch";
+      url = "https://github.com/tsmetana/spotify-tray/commit/1305f473ba4a406e907b98c8255f23154f349613.patch";
+      sha256 = "sha256-u2IopfMzNCu2F06RZoJw3OAsRxxZYdIMnKnyb7/KBgk=";
+    })
+  ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+  buildInputs = [ gtk3 ];
+
+  meta = with lib; {
+    homepage = "https://github.com/tsmetana/spotify-tray";
+    description = "Adds a tray icon to the Spotify Linux client application.";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ Enzime ];
+    mainProgram = "spotify-tray";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sqls/default.nix b/nixpkgs/pkgs/applications/misc/sqls/default.nix
new file mode 100644
index 000000000000..b6d4f3f180eb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sqls/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "sqls";
+  version = "0.2.28";
+
+  src = fetchFromGitHub {
+    owner = "sqls-server";
+    repo = "sqls";
+    rev = "v${version}";
+    hash = "sha256-b3zLyj2n+eKOPBRooS68GfM0bsiTVXDblYKyBYKiYug=";
+  };
+
+  vendorHash = "sha256-6IFJvdT7YLnWsg7Icd3nKXXHM6TZKZ+IG9nEBosRCwA=";
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" "-X main.revision=${src.rev}" ];
+
+  doCheck = false;
+
+  meta = with lib; {
+    homepage = "https://github.com/sqls-server/sqls";
+    description = "SQL language server written in Go";
+    license = licenses.mit;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ssh-tools/default.nix b/nixpkgs/pkgs/applications/misc/ssh-tools/default.nix
new file mode 100644
index 000000000000..2e79f69656f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ssh-tools/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "ssh-tools";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "vaporup";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-PDoljR/e/qraPhG9RRjHx1gBIMtTJ815TZDJws8Qg6o=";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ssh-* $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Collection of various tools using ssh";
+    homepage = "https://github.com/vaporup/ssh-tools/";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ SuperSandro2000 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ssocr/default.nix b/nixpkgs/pkgs/applications/misc/ssocr/default.nix
new file mode 100644
index 000000000000..4231adb65b41
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ssocr/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, imlib2, libX11, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "ssocr";
+  version = "2.23.1";
+
+  src = fetchFromGitHub {
+    owner = "auerswal";
+    repo = "ssocr";
+    rev = "v${version}";
+    sha256 = "sha256-EfZsTrZI6vKM7tB6mKNGEkdfkNFbN5p4TmymOJGZRBk=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ imlib2 libX11 ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Seven Segment Optical Character Recognition";
+    homepage = "https://github.com/auerswal/ssocr";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.kroell ];
+    mainProgram = "ssocr";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ssw/default.nix b/nixpkgs/pkgs/applications/misc/ssw/default.nix
new file mode 100644
index 000000000000..062f10636912
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ssw/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pkg-config, gtk3 }:
+
+stdenv.mkDerivation rec {
+  pname = "ssw";
+  version = "0.8";
+
+  src = fetchurl {
+    url = "https://alpha.gnu.org/gnu/ssw/spread-sheet-widget-${version}.tar.gz";
+    sha256 = "sha256-hYnYKY/PO1hQ0JaLBIAaT0D68FVVRPbMnZVLAWLplUs=";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk3 ];
+
+  meta = with lib; {
+    homepage = "https://www.gnu.org/software/ssw/";
+    license = licenses.gpl3;
+    description = "GNU Spread Sheet Widget";
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/stag/default.nix b/nixpkgs/pkgs/applications/misc/stag/default.nix
new file mode 100644
index 000000000000..049cee5a830d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stag/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchFromGitHub, curses, fetchpatch }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "stag";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "seenaburns";
+    repo = "stag";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-O3iHTsaFs1l9sQV7hOoh4F+w3t28JCNlwT33zBmUP/s=";
+  };
+
+  patches = [
+    # fix compilation on aarch64 https://github.com/seenaburns/stag/pull/19
+    (fetchpatch {
+      url = "https://github.com/seenaburns/stag/commit/0a5a8533d0027b2ee38d109adb0cb7d65d171497.diff";
+      hash = "sha256-fqcsStduL3qfsp5wLJ0GLfEz0JRnOqsvpXB4gdWwVzg=";
+    })
+  ];
+
+  buildInputs = [ curses ];
+
+  installPhase = ''
+    make install PREFIX=$out
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/seenaburns/stag";
+    description = "Terminal streaming bar graph passed through stdin";
+    license = licenses.bsdOriginal;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    platforms = platforms.unix;
+    mainProgram = "stag";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/stepreduce/default.nix b/nixpkgs/pkgs/applications/misc/stepreduce/default.nix
new file mode 100644
index 000000000000..40e0986c5d01
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stepreduce/default.nix
@@ -0,0 +1,32 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stepreduce";
+  version = "unstable-2020-04-30";
+
+  src = fetchFromGitLab {
+    owner = "sethhillbrand";
+    repo = "stepreduce";
+    rev = "e89091c33b67e2a18584e1fe3560bfd48ae98773";
+    hash = "sha256-bCseBQ6J3sWFt0kzaRkV11lwzOGvNPebvQ6w4OJaMBs=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 stepreduce $out/bin/stepreduce
+
+    runHook prostInstall
+  '';
+
+  meta = with lib; {
+    description = "Reduces STEP file size by removing redundancy";
+    homepage = "https://gitlab.com/sethhillbrand/stepreduce";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ evils ];
+    mainProgram = "stepreduce";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sticky/default.nix b/nixpkgs/pkgs/applications/misc/sticky/default.nix
new file mode 100644
index 000000000000..6571bca3bfa6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sticky/default.nix
@@ -0,0 +1,86 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, gobject-introspection
+, meson
+, ninja
+, python3
+, wrapGAppsHook
+, cinnamon
+, glib
+, gspell
+, gtk3
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  pname = "sticky";
+  version = "1.19";
+
+  src = fetchFromGitHub {
+    owner = "linuxmint";
+    repo = pname;
+    rev = version;
+    hash = "sha256-nvnft62vZ9ivijYnQGULW7ff2aAVJiIx9xq09My2NxE=";
+  };
+
+  postPatch = ''
+    sed -i -e "s|/usr/bin|$out/bin|" data/org.x.sticky.service
+    sed -i -e "s|/usr/lib|$out/lib|" usr/bin/sticky
+    sed -i -e "s|/usr/share|$out/share|" usr/lib/sticky/*.py
+  '';
+
+  nativeBuildInputs = [
+    gobject-introspection
+    meson
+    ninja
+    python3.pkgs.wrapPython
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    cinnamon.xapp
+    glib
+    gspell
+    gtk3
+    python3 # for patchShebangs
+  ];
+
+  pythonPath = with python3.pkgs; [
+    pygobject3
+    xapp
+  ];
+
+  postInstall = ''
+    # https://github.com/linuxmint/sticky/pull/118
+    cp -r ../etc $out
+    cp -r ../usr/* $out
+
+    glib-compile-schemas $out/share/glib-2.0/schemas
+  '';
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    buildPythonPath "$out $pythonPath"
+
+    chmod +x $out/bin/sticky
+    wrapProgram $out/bin/sticky \
+      --prefix PYTHONPATH : "$program_PYTHONPATH" \
+      ''${gappsWrapperArgs[@]}
+  '';
+
+  passthru = {
+    updateScript = gitUpdater {
+      ignoredVersions = ''master.*'';
+    };
+  };
+
+  meta = with lib; {
+    description = "A sticky notes app for the linux desktop";
+    homepage = "https://github.com/linuxmint/sticky";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ linsui bobby285271 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/stog/default.nix b/nixpkgs/pkgs/applications/misc/stog/default.nix
new file mode 100644
index 000000000000..17affeb3bbf6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stog/default.nix
@@ -0,0 +1,50 @@
+{ lib, buildDunePackage, fetchFromGitLab, fetchpatch, ocaml
+, fmt, lwt_ppx, menhir, ocf_ppx, ppx_blob, xtmpl_ppx
+, dune-build-info, dune-site, higlo, logs, lwt, ocf, ptime, uri, uutf, xtmpl
+}:
+
+if lib.versionAtLeast ocaml.version "4.13"
+then throw "stog is not available for OCaml ${ocaml.version}"
+else
+
+buildDunePackage rec {
+  pname = "stog";
+  version = "0.20.0";
+  minimalOCamlVersion = "4.12";
+  src = fetchFromGitLab {
+    domain = "framagit.org";
+    owner = "zoggy";
+    repo = "stog";
+    rev = version;
+    sha256 = "sha256:0krj5w4y05bcfx7hk9blmap8avl31gp7yi01lpqzs6ync23mvm0x";
+  };
+
+  # Compatibility with higlo 0.9
+  patches = fetchpatch {
+    url = "https://framagit.org/zoggy/stog/-/commit/ea0546ab4cda8cc5c4c820ebaf2e3dfddc2ab101.patch";
+    hash = "sha256-86GRHF9OjfcalGfA0Om2wXH99j4THCs9a4+o5ghuiJc=";
+  };
+
+  nativeBuildInputs = [ menhir ];
+  buildInputs = [ fmt lwt_ppx ocf_ppx ppx_blob xtmpl_ppx ];
+  propagatedBuildInputs = [
+    dune-build-info
+    dune-site
+    higlo
+    logs
+    lwt
+    ocf
+    ppx_blob
+    ptime
+    uri
+    uutf
+    xtmpl
+  ];
+
+  meta = with lib; {
+    description = "XML documents and web site compiler";
+    homepage = "https://www.good-eris.net/stog";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ regnat ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/stork/default.nix b/nixpkgs/pkgs/applications/misc/stork/default.nix
new file mode 100644
index 000000000000..ab851363d381
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stork/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, openssl
+, pkg-config
+, stdenv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "stork";
+  version = "1.6.0";
+
+  src = fetchFromGitHub {
+    owner = "jameslittle230";
+    repo = "stork";
+    rev = "v${version}";
+    sha256 = "sha256-qGcEhoytkCkcaA5eHc8GVgWvbOIyrO6BCp+EHva6wTw=";
+  };
+
+  cargoSha256 = "sha256-a7ADTJ0VmKiZBr951JIAOSPWucsBl5JnM8eQHWssRM4=";
+
+  checkFlags = [
+    # Fails for 1.6.0, but binary works fine
+    "--skip=pretty_print_search_results::tests::display_pretty_search_results_given_output"
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ openssl ]
+    ++ lib.optionals stdenv.isDarwin [ Security ];
+
+  meta = with lib; {
+    description = "Impossibly fast web search, made for static sites";
+    homepage = "https://github.com/jameslittle230/stork";
+    license = with licenses; [ asl20 ];
+    maintainers = with maintainers; [ chuahou ];
+    mainProgram = "stork";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/streamdeck-ui/default.nix b/nixpkgs/pkgs/applications/misc/streamdeck-ui/default.nix
new file mode 100644
index 000000000000..f46be1a24324
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/streamdeck-ui/default.nix
@@ -0,0 +1,106 @@
+{ lib
+, python3Packages
+, fetchFromGitHub
+, copyDesktopItems
+, writeText
+, makeDesktopItem
+, wrapGAppsHook
+, xvfb-run
+, qt6
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "streamdeck-ui";
+  version = "3.1.0";
+
+  src = fetchFromGitHub {
+    repo = "streamdeck-linux-gui";
+    owner = "streamdeck-linux-gui";
+    rev = "v${version}";
+    sha256 = "sha256-AIE9j022L4WSlHBAu3TT5uE4Ilgk/jYSmU03K8Hs8xY=";
+  };
+
+  patches = [
+    # nixpkgs has a newer pillow version
+    ./update-pillow.patch
+  ];
+
+  desktopItems = let
+    common = {
+      name = "streamdeck-ui";
+      desktopName = "Stream Deck UI";
+      icon = "streamdeck-ui";
+      exec = "streamdeck";
+      comment = "UI for the Elgato Stream Deck";
+      categories = [ "Utility" ];
+    };
+  in builtins.map makeDesktopItem [
+    common
+    (common // {
+      name = "${common.name}-noui";
+      exec = "${common.exec} --no-ui";
+      noDisplay = true;
+    })
+  ];
+
+  postInstall =
+    let
+      udevRules = ''
+        SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", TAG+="uaccess"
+      '';
+    in
+      ''
+        mkdir -p $out/lib/systemd/user
+        substitute scripts/streamdeck.service $out/lib/systemd/user/streamdeck.service \
+          --replace '<path to streamdeck>' $out/bin/streamdeck
+
+        mkdir -p "$out/etc/udev/rules.d"
+        cp ${writeText "70-streamdeck.rules" udevRules} $out/etc/udev/rules.d/70-streamdeck.rules
+
+        mkdir -p "$out/share/pixmaps"
+        cp streamdeck_ui/logo.png $out/share/pixmaps/streamdeck-ui.png
+      '';
+
+  dontWrapQtApps = true;
+  dontWrapGApps = true;
+  makeWrapperArgs = [ "\${qtWrapperArgs[@]}" "\${gappsWrapperArgs[@]}"];
+
+  format = "pyproject";
+
+  nativeBuildInputs = [
+    python3Packages.poetry-core
+    copyDesktopItems
+    qt6.wrapQtAppsHook
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    setuptools
+    filetype
+    cairosvg
+    pillow
+    pynput
+    pyside6
+    streamdeck
+    xlib
+  ] ++ lib.optionals stdenv.isLinux [
+    qt6.qtwayland
+  ];
+
+  nativeCheckInputs = [
+    xvfb-run
+    python3Packages.pytest
+  ];
+
+  checkPhase = ''
+    xvfb-run pytest tests
+  '';
+
+  meta = with lib; {
+    description = "Linux compatible UI for the Elgato Stream Deck";
+    homepage = "https://streamdeck-linux-gui.github.io/streamdeck-linux-gui/";
+    license = licenses.mit;
+    mainProgram = "streamdeck";
+    maintainers = with maintainers; [ majiir ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/streamdeck-ui/update-pillow.patch b/nixpkgs/pkgs/applications/misc/streamdeck-ui/update-pillow.patch
new file mode 100644
index 000000000000..88945586628f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/streamdeck-ui/update-pillow.patch
@@ -0,0 +1,13 @@
+diff --git a/pyproject.toml b/pyproject.toml
+index 0aff29e..4371616 100644
+--- a/pyproject.toml
++++ b/pyproject.toml
+@@ -14,7 +14,7 @@ packages = [
+ [tool.poetry.dependencies]
+ python = ">=3.8,<3.12"
+ streamdeck = "^0.9.3"
+-pillow = "^9.4.0"
++pillow = "^10.0.0"
+ pynput = "^1.7.6"
+ pyside6 = "^6.4.2"
+ CairoSVG = "^2.5.2"
diff --git a/nixpkgs/pkgs/applications/misc/stretchly/default.nix b/nixpkgs/pkgs/applications/misc/stretchly/default.nix
new file mode 100644
index 000000000000..71288ca07c9d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stretchly/default.nix
@@ -0,0 +1,80 @@
+{ stdenv
+, lib
+, fetchurl
+, makeWrapper
+, electron
+, common-updater-scripts
+, writeShellScript
+, makeDesktopItem
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "stretchly";
+  version = "1.15.1";
+
+  src = fetchurl {
+    url = "https://github.com/hovancik/stretchly/releases/download/v${finalAttrs.version}/stretchly-${finalAttrs.version}.tar.xz";
+    hash = "sha256-suTH6o7vtUr2DidPXAwqrya5/WukQOFmS/34LaiWDBs=";
+  };
+
+  icon = fetchurl {
+    url = "https://raw.githubusercontent.com/hovancik/stretchly/v${finalAttrs.version}/stretchly_128x128.png";
+    hash = "sha256-tO0cNKopG/recQus7KDUTyGpApvR5/tpmF5C4V14DnI=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${finalAttrs.pname}/
+    mv resources/app.asar* $out/share/${finalAttrs.pname}/
+
+    mkdir -p $out/share/applications
+    ln -s ${finalAttrs.desktopItem}/share/applications/* $out/share/applications/
+
+    makeWrapper ${electron}/bin/electron $out/bin/${finalAttrs.pname} \
+      --add-flags $out/share/${finalAttrs.pname}/app.asar
+
+    runHook postInstall
+  '';
+
+  passthru = {
+    updateScript = writeShellScript "update-stretchly" ''
+      set -eu -o pipefail
+
+      # get the latest release version
+      latest_version=$(curl -s https://api.github.com/repos/hovancik/stretchly/releases/latest | jq --raw-output .tag_name | sed -e 's/^v//')
+
+      echo "updating to $latest_version..."
+
+      ${common-updater-scripts}/bin/update-source-version stretchly "$latest_version"
+    '';
+  };
+
+  desktopItem = makeDesktopItem {
+    name = finalAttrs.pname;
+    exec = finalAttrs.pname;
+    icon = finalAttrs.icon;
+    desktopName = "Stretchly";
+    genericName = "Stretchly";
+    categories = [ "Utility" ];
+  };
+
+  meta = with lib; {
+    description = "A break time reminder app";
+    longDescription = ''
+      stretchly is a cross-platform electron app that reminds you to take
+      breaks when working on your computer. By default, it runs in your tray
+      and displays a reminder window containing an idea for a microbreak for 20
+      seconds every 10 minutes. Every 30 minutes, it displays a window
+      containing an idea for a longer 5 minute break.
+    '';
+    homepage = "https://hovancik.net/stretchly";
+    downloadPage = "https://hovancik.net/stretchly/downloads/";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ _1000101 ];
+    platforms = platforms.linux;
+    mainProgram = "stretchly";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/stw/default.nix b/nixpkgs/pkgs/applications/misc/stw/default.nix
new file mode 100644
index 000000000000..ca46c163128a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stw/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libX11
+, fontconfig
+, libXft
+, libXrender
+}:
+
+stdenv.mkDerivation rec {
+  pname = "stw";
+  version = "unstable-2022-02-04";
+
+  src = fetchFromGitHub {
+    owner = "sineemore";
+    repo = pname;
+    rev = "c034e04ac912c157f9faa35cb769ba93d92486a0";
+    sha256 = "sha256-YohHF1O0lm6QWJv/wkS4RVJvWaOjcYSZNls6tt4hbqo==";
+  };
+
+  buildInputs = [ libX11 fontconfig libXft libXrender ];
+
+  makeFlags = [ "CC:=$(CC)" "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "A simple text widget for X resembling the watch(1) command";
+    license = licenses.mit;
+    maintainers = with maintainers; [ somasis ];
+    platforms = platforms.unix;
+    broken = stdenv.isDarwin;
+    mainProgram = "stw";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/stylish/default.nix b/nixpkgs/pkgs/applications/misc/stylish/default.nix
new file mode 100644
index 000000000000..b1fed22b7ffe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/stylish/default.nix
@@ -0,0 +1,59 @@
+{
+  lib,
+  stdenvNoCC,
+  fetchFromGitHub,
+  makeWrapper,
+  curl,
+  feh,
+  file,
+  jq,
+  util-linux,
+  wget,
+}:
+stdenvNoCC.mkDerivation rec {
+  pname = "stylish";
+  version = "unstable-2022-12-05";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  src = fetchFromGitHub {
+    owner = "thevinter";
+    repo = "styli.sh";
+    rev = "d595412a949c6cdc7e151ae0cf929aa1958aa7f1";
+    hash = "sha256-lFnzrYnTFWe8bvK//aC1+TapWIFNsNP60Msn7D0tk/0=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out/bin
+    cp "${src}/styli.sh" $out/bin
+    chmod +x $out/bin/styli.sh
+    runHook postInstall
+  '';
+
+  postInstall = ''
+    wrapProgram $out/bin/styli.sh --prefix PATH : ${lib.makeBinPath [
+      curl
+      feh
+      file
+      jq
+      util-linux
+      wget
+    ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/thevinter/styli.sh";
+    description = "A shell script to manage wallpapers";
+    longDescription = ''
+      Styli.sh is a Bash script that aims to automate the tedious process
+      of finding new wallpapers, downloading and switching them via the
+      configs.
+      Styli.sh can search for specific wallpapers from unsplash or download
+      a random image from the specified subreddits. If you have pywal it also
+      can set automatically your terminal colors.
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ tchab ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/styx/default.nix b/nixpkgs/pkgs/applications/misc/styx/default.nix
new file mode 100644
index 000000000000..96278fd9c322
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/styx/default.nix
@@ -0,0 +1,72 @@
+{ lib, stdenv, fetchFromGitHub, caddy, asciidoctor
+, file, lessc, sass, multimarkdown, linkchecker
+, perlPackages, python3Packages }:
+
+stdenv.mkDerivation rec {
+  pname = "styx";
+  version = "0.7.5";
+
+  src = fetchFromGitHub {
+    owner  = "styx-static";
+    repo   = "styx";
+    rev    = "v${version}";
+    hash = "sha256-f6iA/nHpKnm3BALoQq8SzdcSzJLCFSferEf69SpgD2Y=";
+  };
+
+  server = "${caddy}/bin/caddy";
+  linkcheck = "${linkchecker}/bin/linkchecker";
+
+  nativeBuildInputs = [ asciidoctor ];
+
+  outputs = [ "out" "lib" "themes" ];
+
+  propagatedBuildInputs = [
+    file
+    lessc
+    sass
+    asciidoctor
+    multimarkdown
+    perlPackages.ImageExifTool
+    python3Packages.parsimonious
+  ];
+
+  installPhase = ''
+    mkdir $out
+    install -D -m 777 src/styx.sh $out/bin/styx
+
+    mkdir -p $out/share/styx-src
+    cp -r ./* $out/share/styx-src
+
+    mkdir -p $out/share/doc/styx
+    asciidoctor src/doc/index.adoc       -o $out/share/doc/styx/index.html
+    asciidoctor src/doc/styx-themes.adoc -o $out/share/doc/styx/styx-themes.html
+    asciidoctor src/doc/library.adoc     -o $out/share/doc/styx/library.html
+    cp -r src/doc/highlight $out/share/doc/styx/
+    cp -r src/doc/imgs $out/share/doc/styx/
+
+    substituteAllInPlace $out/bin/styx
+    substituteAllInPlace $out/share/doc/styx/index.html
+    substituteAllInPlace $out/share/doc/styx/styx-themes.html
+    substituteAllInPlace $out/share/doc/styx/library.html
+
+    mkdir -p $out/share/styx/scaffold
+    cp -r src/scaffold $out/share/styx
+    cp -r src/tools $out/share/styx
+
+    mkdir $lib
+    cp -r src/lib/* $lib
+
+    mkdir $themes
+    cp -r themes/* $themes
+  '';
+
+  meta = with lib; {
+    description  = "Nix based static site generator";
+    maintainers  = with maintainers; [ ericsagnes ];
+    homepage     = "https://styx-static.github.io/styx-site/";
+    downloadPage = "https://github.com/styx-static/styx/";
+    platforms    = platforms.all;
+    license      = licenses.mit;
+    mainProgram  = "styx";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/subsurface/default.nix b/nixpkgs/pkgs/applications/misc/subsurface/default.nix
new file mode 100644
index 000000000000..6831cea6c4f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/subsurface/default.nix
@@ -0,0 +1,154 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, writeShellScriptBin
+, cmake
+, wrapQtAppsHook
+, pkg-config
+, qmake
+, curl
+, grantlee
+, hidapi
+, libgit2
+, libssh2
+, libusb1
+, libxml2
+, libxslt
+, libzip
+, zlib
+, qtbase
+, qtconnectivity
+, qtlocation
+, qtsvg
+, qttools
+, qtwebengine
+, libXcomposite
+, bluez
+}:
+
+let
+  version = "5.0.10";
+
+  subsurfaceSrc = (fetchFromGitHub {
+    owner = "Subsurface";
+    repo = "subsurface";
+    rev = "v${version}";
+    hash = "sha256-KzUBhFGvocaS1VrVT2stvKrj3uVxYka+dyYZUfkIoNs=";
+    fetchSubmodules = true;
+  });
+
+  libdc = stdenv.mkDerivation {
+    pname = "libdivecomputer-ssrf";
+    inherit version;
+
+    src = subsurfaceSrc;
+
+    sourceRoot = "${subsurfaceSrc.name}/libdivecomputer";
+
+    nativeBuildInputs = [ autoreconfHook pkg-config ];
+
+    buildInputs = [ zlib libusb1 bluez hidapi ];
+
+    enableParallelBuilding = true;
+
+    meta = with lib; {
+      homepage = "https://www.libdivecomputer.org";
+      description = "A cross-platform and open source library for communication with dive computers from various manufacturers";
+      maintainers = with maintainers; [ mguentner ];
+      license = licenses.lgpl21;
+      platforms = platforms.all;
+    };
+  };
+
+  googlemaps = stdenv.mkDerivation rec {
+    pname = "googlemaps";
+    version = "0.0.0.2";
+
+    src = fetchFromGitHub {
+      owner = "vladest";
+      repo = "googlemaps";
+      rev = "v.${version}";
+      hash = "sha256-PfSLFQeCeVNcCVDCZehxyNLQGT6gff5jNxMW8lAaP8c=";
+    };
+
+    nativeBuildInputs = [ qmake ];
+
+    buildInputs = [ qtbase qtlocation libXcomposite ];
+
+    dontWrapQtApps = true;
+
+    pluginsSubdir = "lib/qt-${qtbase.qtCompatVersion}/plugins";
+
+    installPhase = ''
+      mkdir -p $out $(dirname ${pluginsSubdir}/geoservices)
+      mkdir -p ${pluginsSubdir}/geoservices
+      mv *.so ${pluginsSubdir}/geoservices
+      mv lib $out/
+    '';
+
+    meta = with lib; {
+      inherit (src.meta) homepage;
+      description = "QtLocation plugin for Google maps tile API";
+      maintainers = with maintainers; [ orivej ];
+      license = licenses.mit;
+      platforms = platforms.all;
+    };
+  };
+
+  get-version = writeShellScriptBin "get-version" ''
+    echo -n ${version}
+  '';
+
+in
+stdenv.mkDerivation {
+  pname = "subsurface";
+  inherit version;
+
+  src = subsurfaceSrc;
+
+  postPatch = ''
+    install -m555 -t scripts ${lib.getExe get-version}
+  '';
+
+  buildInputs = [
+    bluez
+    curl
+    googlemaps
+    grantlee
+    libdc
+    libgit2
+    libssh2
+    libxml2
+    libxslt
+    libzip
+    qtbase
+    qtconnectivity
+    qtsvg
+    qttools
+    qtwebengine
+  ];
+
+  nativeBuildInputs = [ cmake wrapQtAppsHook pkg-config ];
+
+  cmakeFlags = [
+    "-DLIBDC_FROM_PKGCONFIG=ON"
+    "-DNO_PRINTING=OFF"
+  ];
+
+  passthru = { inherit version libdc googlemaps; };
+
+  meta = with lib; {
+    description = "A divelog program";
+    longDescription = ''
+      Subsurface can track single- and multi-tank dives using air, Nitrox or TriMix.
+      It allows tracking of dive locations including GPS coordinates (which can also
+      conveniently be entered using a map interface), logging of equipment used and
+      names of other divers, and lets users rate dives and provide additional notes.
+    '';
+    homepage = "https://subsurface-divelog.org";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ mguentner adisbladis ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sunwait/default.nix b/nixpkgs/pkgs/applications/misc/sunwait/default.nix
new file mode 100644
index 000000000000..f824011f1b86
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sunwait/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "sunwait";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "risacher";
+    repo = "sunwait";
+    rev = finalAttrs.version;
+    hash = "sha256-v2cNjecJ4SstOsvDe/Lu0oOyBd8I8LMHZIH+f9ZC7Fc=";
+  };
+
+  makeFlags = [ "C=${stdenv.cc.targetPrefix}c++" ];
+
+  installPhase = ''
+    install -Dm755 sunwait -t $out/bin
+  '';
+
+  meta = {
+    description = "Calculates sunrise or sunset times with civil, nautical, astronomical and custom twilights";
+    homepage = "https://github.com/risacher/sunwait";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ eclairevoyant ];
+    mainProgram = "sunwait";
+    platforms = lib.platforms.all;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/surface-control/Cargo.lock b/nixpkgs/pkgs/applications/misc/surface-control/Cargo.lock
new file mode 100644
index 000000000000..512ea36f5eaa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/surface-control/Cargo.lock
@@ -0,0 +1,501 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "anyhow"
+version = "1.0.65"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602"
+
+[[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 = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[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.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86447ad904c7fb335a790c9d7fe3d0d971dc523b8ccd1561a520de9a85302750"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_lex",
+ "indexmap",
+ "once_cell",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_complete"
+version = "3.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f7a2e0a962c45ce25afce14220bc24f9dade0a1787f185cecf96bfba7847cd8"
+dependencies = [
+ "clap",
+]
+
+[[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 = "futures"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ff63c23854bee61b6e9cd331d523909f238fc7636290b96826e9cfa5faa00ab"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68"
+
+[[package]]
+name = "futures-macro"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "futures-sink"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56"
+
+[[package]]
+name = "futures-task"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1"
+
+[[package]]
+name = "futures-util"
+version = "0.3.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
+dependencies = [
+ "autocfg",
+ "hashbrown",
+]
+
+[[package]]
+name = "indoc"
+version = "1.0.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adab1eaa3408fb7f0c777a73e7465fd5656136fc93b670eb6df3c88c2c1344e3"
+
+[[package]]
+name = "itoa"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
+
+[[package]]
+name = "libc"
+version = "0.2.132"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5"
+
+[[package]]
+name = "libudev-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c8469b4a23b962c1396b9b451dda50ef5b283e8dd309d69033475fa9b334324"
+dependencies = [
+ "libc",
+ "pkg-config",
+]
+
+[[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 = "nix"
+version = "0.24.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc"
+dependencies = [
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "memoffset",
+]
+
+[[package]]
+name = "nix"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb"
+dependencies = [
+ "autocfg",
+ "bitflags",
+ "cfg-if",
+ "libc",
+ "memoffset",
+ "pin-utils",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2f7254b99e31cad77da24b08ebf628882739a608578bb1bcdfc1f9c21260d7c0"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ff7415e9ae3fff1225851df9e0d9e4e5479f947619774677a63572e55e80eff"
+
+[[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 = "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 = "ryu"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
+
+[[package]]
+name = "sdtx"
+version = "0.1.3"
+source = "git+https://github.com/linux-surface/libsurfacedtx?tag=v0.1.3#e30bf41f67831f90f361fc3521963f96d98936d4"
+dependencies = [
+ "futures",
+ "nix 0.24.2",
+ "smallvec",
+ "thiserror",
+ "tracing",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.144"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
+
+[[package]]
+name = "serde_json"
+version = "1.0.85"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[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.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fd0db749597d91ff862fd1d55ea87f7855a744a8425a64695b6fca237d1dad1"
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "surface"
+version = "0.4.3"
+dependencies = [
+ "anyhow",
+ "clap",
+ "clap_complete",
+ "indoc",
+ "nix 0.25.0",
+ "sdtx",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "udev",
+]
+
+[[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 = "termcolor"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.15.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "949517c0cf1bf4ee812e2e07e08ab448e3ae0d23472aee8a06c985f0c8815b16"
+
+[[package]]
+name = "thiserror"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c53f98874615aea268107765aa1ed8f6116782501d18e53d08b471733bea6c85"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8b463991b4eab2d801e724172285ec4195c650e8ec79b149e6c2a8e6dd3f783"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing"
+version = "0.1.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307"
+dependencies = [
+ "cfg-if",
+ "pin-project-lite",
+ "tracing-attributes",
+ "tracing-core",
+]
+
+[[package]]
+name = "tracing-attributes"
+version = "0.1.22"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "tracing-core"
+version = "0.1.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "udev"
+version = "0.6.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c960764f7e816eed851a96c364745d37f9fe71a2e7dba79fbd40104530b5dd0"
+dependencies = [
+ "libc",
+ "libudev-sys",
+ "pkg-config",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
+
+[[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/applications/misc/surface-control/default.nix b/nixpkgs/pkgs/applications/misc/surface-control/default.nix
new file mode 100644
index 000000000000..77f3954ed059
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/surface-control/default.nix
@@ -0,0 +1,44 @@
+{ lib, rustPlatform, fetchFromGitHub, pkg-config, installShellFiles, udev, coreutils }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "surface-control";
+  version = "0.4.3-2";
+
+  src = fetchFromGitHub {
+    owner = "linux-surface";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-QgkUxT5Ae0agvalZl1ie+1LwxgaTzMrKpQY3KkpWwG4=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "sdtx-0.1.3" = "sha256-srYSVXRP/rynhhE3ZfOGRM6c7GDgjfmjO/GLXeTze3A=";
+    };
+  };
+
+  nativeBuildInputs = [ pkg-config installShellFiles ];
+  buildInputs = [ udev ];
+
+  postInstall = ''
+    installShellCompletion \
+      $releaseDir/build/surface-*/out/surface.{bash,fish} \
+      --zsh $releaseDir/build/surface-*/out/_surface
+    install -Dm 0444 -t $out/etc/udev/rules.d \
+      etc/udev/40-surface-control.rules
+    substituteInPlace $out/etc/udev/rules.d/40-surface-control.rules \
+      --replace "/usr/bin/chmod" "${coreutils}/bin/chmod" \
+      --replace "/usr/bin/chown" "${coreutils}/bin/chown"
+  '';
+
+  meta = with lib; {
+    description =
+      "Control various aspects of Microsoft Surface devices on Linux from the Command-Line";
+    homepage = "https://github.com/linux-surface/surface-control";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+    mainProgram = "surface";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/survex/default.nix b/nixpkgs/pkgs/applications/misc/survex/default.nix
new file mode 100644
index 000000000000..6f2098ea4778
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/survex/default.nix
@@ -0,0 +1,83 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
+, Carbon
+, Cocoa
+, ffmpeg
+, glib
+, libGLU
+, libICE
+, libX11
+, mesa
+, perl
+, pkg-config
+, proj
+, python3
+, wrapGAppsHook
+, wxGTK32
+}:
+
+stdenv.mkDerivation rec {
+  pname = "survex";
+  version = "1.4.3";
+
+  src = fetchurl {
+    url = "https://survex.com/software/${version}/${pname}-${version}.tar.gz";
+    hash = "sha256-7NtGTe9xNRPEvG9fQ2fC6htQLEMHfqGmBM2ezhi6oNM=";
+  };
+
+  patches = [
+    # Fix cavern.tst to work with SOURCE_DATE_EPOCH set
+    (fetchpatch {
+      url = "https://github.com/ojwb/survex/commit/b1200a60be7bdea20ffebbd8bb15386041727fa6.patch";
+      hash = "sha256-OtFjqpU+u8XGy+PAHg2iea++b681p/Kl8YslisBs4sA=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    perl
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    ffmpeg
+    glib
+    proj
+    wxGTK32
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    Carbon
+    Cocoa
+  ] ++ lib.optionals stdenv.hostPlatform.isLinux [
+    # TODO: libGLU doesn't build for macOS because of Mesa issues
+    # (#233265); is it required for anything?
+    libGLU
+    mesa
+    libICE
+    libX11
+  ];
+
+  postPatch = ''
+    patchShebangs .
+  '';
+
+  enableParallelBuilding = true;
+  doCheck = (!stdenv.isDarwin); # times out
+  enableParallelChecking = false;
+
+  meta = with lib; {
+    description = "Free Software/Open Source software package for mapping caves";
+    longDescription = ''
+      Survex is a Free Software/Open Source software package for mapping caves,
+      licensed under the GPL. It is designed to be portable and can be run on a
+      variety of platforms, including Linux/Unix, macOS, and Microsoft Windows.
+    '';
+    homepage = "https://survex.com/";
+    changelog = "https://github.com/ojwb/survex/raw/v${version}/NEWS";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.matthewcroughan ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/swappy/default.nix b/nixpkgs/pkgs/applications/misc/swappy/default.nix
new file mode 100644
index 000000000000..b0cfc24aab65
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/swappy/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, meson
+, ninja
+, wayland
+, cairo
+, pango
+, gtk
+, pkg-config
+, scdoc
+, libnotify
+, glib
+, wrapGAppsHook
+, hicolor-icon-theme
+}:
+
+stdenv.mkDerivation rec {
+  pname = "swappy";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "jtheoof";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-/XPvy98Il4i8cDl9vH6f0/AZmiSqseSXnen7HfMqCDo=";
+  };
+
+  nativeBuildInputs = [ glib meson ninja pkg-config scdoc wrapGAppsHook ];
+
+  buildInputs = [
+    cairo pango gtk libnotify wayland glib hicolor-icon-theme
+  ];
+
+  strictDeps = true;
+
+  mesonFlags = [
+    # TODO: https://github.com/NixOS/nixpkgs/issues/36468
+    "-Dc_args=-I${glib.dev}/include/gio-unix-2.0"
+  ];
+
+  meta = with lib; {
+    description = "A Wayland native snapshot editing tool, inspired by Snappy on macOS";
+    homepage = "https://github.com/jtheoof/swappy";
+    license = licenses.mit;
+    mainProgram = "swappy";
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sway-contrib/default.nix b/nixpkgs/pkgs/applications/misc/sway-contrib/default.nix
new file mode 100644
index 000000000000..4ddca21774e0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sway-contrib/default.nix
@@ -0,0 +1,108 @@
+{ lib, stdenvNoCC
+, fetchFromGitHub
+, coreutils
+, makeWrapper
+, sway-unwrapped
+, installShellFiles
+, wl-clipboard
+, libnotify
+, slurp
+, grim
+, jq
+, bash
+
+, python3Packages
+}:
+
+let
+  version = "0-unstable-2024-01-20";
+  src = fetchFromGitHub {
+    owner = "OctopusET";
+    repo = "sway-contrib";
+    rev = "b7825b218e677c65f6849be061b93bd5654991bf";
+    hash = "sha256-ZTfItJ77mrNSzXFVcj7OV/6zYBElBj+1LcLLHxBFypk=";
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/OctopusET/sway-contrib";
+    license = licenses.mit;
+    platforms = platforms.all;
+  };
+in
+{
+
+grimshot = stdenvNoCC.mkDerivation {
+  inherit version src;
+
+  pname = "grimshot";
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  outputs = [ "out" "man" ];
+
+  strictDeps = true;
+  nativeBuildInputs = [ makeWrapper installShellFiles ];
+  buildInputs = [ bash ];
+  installPhase = ''
+    installManPage grimshot.1
+
+    install -Dm 0755 grimshot $out/bin/grimshot
+    wrapProgram $out/bin/grimshot --set PATH \
+      "${lib.makeBinPath [
+        sway-unwrapped
+        wl-clipboard
+        coreutils
+        libnotify
+        slurp
+        grim
+        jq
+        ] }"
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    # check always returns 0
+    if [[ $($out/bin/grimshot check | grep "NOT FOUND") ]]; then false
+    else
+      echo "grimshot check passed"
+    fi
+  '';
+
+  meta = with lib; meta // {
+    description = "A helper for screenshots within sway";
+    maintainers = with maintainers; [ evils ];
+    mainProgram = "grimshot";
+  };
+};
+
+
+inactive-windows-transparency = let
+  # long name is long
+  lname = "inactive-windows-transparency";
+in python3Packages.buildPythonApplication {
+  inherit version src;
+
+  pname = "sway-${lname}";
+
+  format = "other";
+  dontBuild = true;
+  dontConfigure = true;
+
+  propagatedBuildInputs = [ python3Packages.i3ipc ];
+
+  installPhase = ''
+    install -Dm 0755 $src/${lname}.py $out/bin/${lname}.py
+  '';
+
+  meta = with lib; meta // {
+    description = "It makes inactive sway windows transparent";
+    mainProgram = "${lname}.py";
+    maintainers = with maintainers; [
+      evils # packaged this as a side-effect of grimshot but doesn't use it
+    ];
+  };
+};
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/sway-launcher-desktop/default.nix b/nixpkgs/pkgs/applications/misc/sway-launcher-desktop/default.nix
new file mode 100644
index 000000000000..525e25ae7e06
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sway-launcher-desktop/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, lib, pkgs, fzf, gawk, fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "sway-launcher-desktop";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "Biont";
+    repo = "sway-launcher-desktop";
+    rev = "v${version}";
+    hash = "sha256-lv1MLPJsJJjm6RLzZXWEz1JO/4EXTQ8wj225Di+98G4=";
+  };
+
+  postPatch = ''
+    patchShebangs ${pname}.sh
+  '';
+
+  buildInputs = [ fzf gawk ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    install -d $out/bin
+    install ${pname}.sh $out/bin/${pname}
+    wrapProgram $out/bin/${pname} \
+      --prefix PATH : ${lib.makeBinPath [ gawk fzf ]}
+  '';
+
+  meta = with lib; {
+    description = "TUI Application launcher with Desktop Entry support.";
+    longDescription = ''
+      This is a TUI-based launcher menu made with bash and the amazing fzf.
+      Despite its name, it does not (read: no longer) depend on the Sway window manager
+      in any way and can be used with just about any WM.
+    '';
+    homepage = "https://github.com/Biont/sway-launcher-desktop";
+    changelog = "https://github.com/Biont/sway-launcher-desktop/releases/tag/v${version}";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.thehedgeh0g ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/swaynag-battery/default.nix b/nixpkgs/pkgs/applications/misc/swaynag-battery/default.nix
new file mode 100644
index 000000000000..8dc99ca012e9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/swaynag-battery/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "swaynag-battery";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "m00qek";
+    repo = "swaynag-battery";
+    rev = "v${version}";
+    hash = "sha256-7f9+4Fzw5B5ATuud4MJC3iyuNRTx6kwJ7/KsusGtQM8=";
+  };
+
+  vendorHash = "sha256-h9Zj3zmQ0Xpili5Pl6CXh1L0bb2uL1//B79I4/ron08=";
+
+  meta = with lib; {
+    homepage = "https://github.com/m00qek/swaynag-battery";
+    description = "Shows a message when your battery is discharging ";
+    maintainers = with maintainers; [ ];
+    license = licenses.mit;
+    mainProgram = "swaynag-battery";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/swaynotificationcenter/default.nix b/nixpkgs/pkgs/applications/misc/swaynotificationcenter/default.nix
new file mode 100644
index 000000000000..f05aa8fd9345
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/swaynotificationcenter/default.nix
@@ -0,0 +1,96 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, testers
+, wrapGAppsHook
+, bash-completion
+, dbus
+, dbus-glib
+, fish
+, gdk-pixbuf
+, glib
+, gobject-introspection
+, gtk-layer-shell
+, gtk3
+, json-glib
+, libgee
+, libhandy
+, libpulseaudio
+, librsvg
+, meson
+, ninja
+, pkg-config
+, python3
+, scdoc
+, vala
+, xvfb-run
+, sassc
+, pantheon
+}:
+
+stdenv.mkDerivation (finalAttrs: rec {
+  pname = "SwayNotificationCenter";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "ErikReider";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-7O+DX4uuncUqx5zEKQprZE6tctteT6NU01V2EBHiFqA=";
+  };
+
+  # build pkg-config is required to locate the native `scdoc` input
+  depsBuildBuild = [ pkg-config ];
+
+  nativeBuildInputs = [
+    bash-completion
+    # cmake # currently conflicts with meson
+    fish
+    glib
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    python3
+    sassc
+    scdoc
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    dbus
+    dbus-glib
+    gdk-pixbuf
+    glib
+    gtk-layer-shell
+    gtk3
+    json-glib
+    libgee
+    libhandy
+    libpulseaudio
+    librsvg
+    pantheon.granite
+    # systemd # ends with broken permission
+  ];
+
+  postPatch = ''
+    chmod +x build-aux/meson/postinstall.py
+    patchShebangs build-aux/meson/postinstall.py
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+    command = "${xvfb-run}/bin/xvfb-run swaync --version";
+  };
+
+  meta = with lib; {
+    description = "Simple notification daemon with a GUI built for Sway";
+    homepage = "https://github.com/ErikReider/SwayNotificationCenter";
+    changelog = "https://github.com/ErikReider/SwayNotificationCenter/releases/tag/v${version}";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    mainProgram = "swaync";
+    maintainers = with maintainers; [ berbiche pedrohlc ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/swaysettings/default.nix b/nixpkgs/pkgs/applications/misc/swaysettings/default.nix
new file mode 100644
index 000000000000..babd312d3edd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/swaysettings/default.nix
@@ -0,0 +1,82 @@
+{ lib
+, fetchFromGitHub
+, accountsservice
+, appstream-glib
+, dbus
+, desktop-file-utils
+, gettext
+, glib
+, gobject-introspection
+, gsettings-desktop-schemas
+, gtk-layer-shell
+, gtk3
+, json-glib
+, libgee
+, libhandy
+, libpulseaudio
+, libxml2
+, meson
+, ninja
+, pantheon
+, pkg-config
+, python3
+, stdenv
+, vala
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "swaysettings";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "ErikReider";
+    repo = "SwaySettings";
+    rev = "v${version}";
+    hash = "sha256-dn3n5DOAsw0FeXBkh19A2qB/5O+RyA2/Fj5PVtMOyL0=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    gettext
+    meson
+    ninja
+    pkg-config
+    python3
+    vala
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    accountsservice
+    dbus
+    glib
+    gsettings-desktop-schemas
+    gtk-layer-shell
+    gtk3
+    json-glib
+    libgee
+    libhandy
+    libpulseaudio
+    libxml2
+    pantheon.granite
+  ];
+
+  postPatch = ''
+    patchShebangs /build/source/build-aux/meson/postinstall.py
+  '';
+
+  meta = with lib; {
+    description = "A GUI for configuring your sway desktop";
+    longDescription = ''
+      Sway settings enables easy configuration of a sway desktop environment
+      such as selection of application or icon themes.
+    '';
+    homepage = "https://github.com/ErikReider/SwaySettings";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.aacebedo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/sweethome3d/default.nix b/nixpkgs/pkgs/applications/misc/sweethome3d/default.nix
new file mode 100644
index 000000000000..2c8f9993fed5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sweethome3d/default.nix
@@ -0,0 +1,131 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, makeDesktopItem
+, jdk
+, ant
+, gtk3
+, gsettings-desktop-schemas
+, p7zip
+, autoPatchelfHook
+, libXxf86vm
+, unzip
+, libGL
+}:
+
+let
+
+  # TODO: Should we move this to `lib`? Seems like its would be useful in many cases.
+  extensionOf = filePath:
+    lib.concatStringsSep "." (lib.tail (lib.splitString "." (builtins.baseNameOf filePath)));
+
+  installIcons = iconName: icons: lib.concatStringsSep "\n" (lib.mapAttrsToList (size: iconFile: ''
+    mkdir -p "$out/share/icons/hicolor/${size}/apps"
+    ln -s -T "${iconFile}" "$out/share/icons/hicolor/${size}/apps/${iconName}.${extensionOf iconFile}"
+  '') icons);
+
+  mkSweetHome3D =
+  { pname, module, version, src, license, description, desktopName, icons }:
+
+  stdenv.mkDerivation rec {
+    inherit pname version src description;
+    exec = lib.toLower module;
+    sweethome3dItem = makeDesktopItem {
+      inherit exec desktopName;
+      name = pname;
+      icon = pname;
+      comment =  description;
+      genericName = "Computer Aided (Interior) Design";
+      categories = [ "Graphics" "2DGraphics" "3DGraphics" ];
+    };
+
+    postPatch = ''
+      addAutoPatchelfSearchPath ${jdk}/lib/openjdk/lib/
+      autoPatchelf lib
+
+      # Nix cannot see the runtime references to the paths we just patched in
+      # once they've been compressed into the .jar. Scan for and remember them
+      # as plain text so they don't get overlooked.
+      find . -name '*.so' | xargs strings | { grep '/nix/store' || :; } >> ./.jar-paths
+    '';
+
+    nativeBuildInputs = [ makeWrapper unzip autoPatchelfHook ];
+    buildInputs = [ ant jdk p7zip gtk3 gsettings-desktop-schemas libXxf86vm ];
+
+    buildPhase = ''
+      runHook preBuild
+
+      ant furniture textures help
+      mkdir -p $out/share/{java,applications}
+      mv "build/"*.jar $out/share/java/.
+      ant
+
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      runHook preInstall
+
+      mkdir -p $out/bin
+      cp install/${module}-${version}.jar $out/share/java/.
+
+      ${installIcons pname icons}
+
+      cp "${sweethome3dItem}/share/applications/"* $out/share/applications
+
+      makeWrapper ${jdk}/bin/java $out/bin/$exec \
+        --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:${gtk3.out}/share:${gsettings-desktop-schemas}/share:$out/share:$GSETTINGS_SCHEMAS_PATH" \
+        --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libGL ]}" \
+        --add-flags "-Dsun.java2d.opengl=true -jar $out/share/java/${module}-${version}.jar -cp $out/share/java/Furniture.jar:$out/share/java/Textures.jar:$out/share/java/Help.jar -d${toString stdenv.hostPlatform.parsed.cpu.bits}"
+
+
+      # remember the store paths found inside the .jar libraries. note that
+      # which file they are in does not matter in particular, just that some
+      # file somewhere lists them in plain-text
+      mkdir -p $out/nix-support
+      cp .jar-paths $out/nix-support/depends
+
+      runHook postInstall
+    '';
+
+    dontStrip = true;
+
+    meta = {
+      homepage = "http://www.sweethome3d.com/index.jsp";
+      inherit description;
+      inherit license;
+      maintainers = [ lib.maintainers.edwtjo ];
+      platforms = lib.platforms.linux;
+      mainProgram = exec;
+    };
+  };
+
+  d2u = lib.replaceStrings ["."] ["_"];
+
+in {
+
+  application = mkSweetHome3D rec {
+    pname = lib.toLower module + "-application";
+    version = "7.2";
+    module = "SweetHome3D";
+    description = "Design and visualize your future home";
+    license = lib.licenses.gpl2Plus;
+    src = fetchurl {
+      url = "mirror://sourceforge/sweethome3d/${module}-${version}-src.zip";
+      sha256 = "sha256-Io3HfussfSy6CLHE0JCAk0gjBAla/u+pS1Gan8BxozY=";
+    };
+    desktopName = "Sweet Home 3D";
+    icons = {
+      "32x32" = fetchurl {
+        url = "http://sweethome3d.cvs.sourceforge.net/viewvc/sweethome3d/SweetHome3D/deploy/SweetHome3DIcon32x32.png";
+        sha256 = "1r2fhfg27mx00nfv0qj66rhf719s2g1vhdis7bdc9mqk9x0mb0ir";
+      };
+      "48x48" = fetchurl {
+        url = "http://sweethome3d.cvs.sourceforge.net/viewvc/sweethome3d/SweetHome3D/deploy/SweetHome3DIcon48x48.png";
+        sha256 = "1ap6d75dyqqvx21wddvn8vw2apq3v803vmbxdriwd0dw9rq3zn4g";
+      };
+    };
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/sweethome3d/editors.nix b/nixpkgs/pkgs/applications/misc/sweethome3d/editors.nix
new file mode 100644
index 000000000000..d5cdebb76282
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/sweethome3d/editors.nix
@@ -0,0 +1,113 @@
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, makeDesktopItem
+, jdk
+, ant
+, gtk3
+, gsettings-desktop-schemas
+, sweethome3dApp
+, unzip
+}:
+
+let
+
+  sweetExec = with lib;
+    m: "sweethome3d-"
+    + removeSuffix "libraryeditor" (toLower m)
+    + "-editor";
+
+  applicationSrc = stdenv.mkDerivation {
+    name = "application-src";
+    src = sweethome3dApp.src;
+    nativeBuildInputs = [ unzip ];
+    buildPhase = "";
+    installPhase = "cp -r . $out";
+  };
+
+  mkEditorProject =
+  { pname, module, version, src, license, description, desktopName }:
+
+  stdenv.mkDerivation rec {
+    application = sweethome3dApp;
+    inherit pname module version src description;
+    exec = sweetExec module;
+    editorItem = makeDesktopItem {
+      inherit exec desktopName;
+      name = pname;
+      comment =  description;
+      genericName = "Computer Aided (Interior) Design";
+      categories = [ "Graphics" "2DGraphics" "3DGraphics" ];
+    };
+
+    nativeBuildInputs = [ makeWrapper unzip ];
+    buildInputs = [ ant jdk gtk3 gsettings-desktop-schemas ];
+
+    postPatch = ''
+      sed -i -e 's,../SweetHome3D,${applicationSrc},g' build.xml
+      sed -i -e 's,lib/macosx/java3d-1.6/jogl-all.jar,lib/java3d-1.6/jogl-all.jar,g' build.xml
+    '';
+
+    buildPhase = ''
+      runHook preBuild
+
+      ant -lib ${applicationSrc}/libtest -lib ${applicationSrc}/lib -lib ${jdk}/lib
+
+      runHook postBuild
+    '';
+
+    installPhase = ''
+      mkdir -p $out/bin
+      mkdir -p $out/share/{java,applications}
+      cp ${module}-${version}.jar $out/share/java/.
+      cp "${editorItem}/share/applications/"* $out/share/applications
+      makeWrapper ${jdk}/bin/java $out/bin/$exec \
+        --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:${gtk3.out}/share:${gsettings-desktop-schemas}/share:$out/share:$GSETTINGS_SCHEMAS_PATH" \
+        --add-flags "-jar $out/share/java/${module}-${version}.jar -d${toString stdenv.hostPlatform.parsed.cpu.bits}"
+    '';
+
+    dontStrip = true;
+
+    meta = {
+      homepage = "http://www.sweethome3d.com/index.jsp";
+      inherit description;
+      inherit license;
+      maintainers = [ lib.maintainers.edwtjo ];
+      platforms = lib.platforms.linux;
+      mainProgram = exec;
+    };
+
+  };
+
+  d2u = lib.replaceStrings ["."] ["_"];
+
+in {
+
+  textures-editor = mkEditorProject rec {
+    version = "1.7";
+    module = "TexturesLibraryEditor";
+    pname = module;
+    description = "Easily create SH3T files and edit the properties of the texture images it contain";
+    license = lib.licenses.gpl2Plus;
+    src = fetchurl {
+      url = "mirror://sourceforge/sweethome3d/${module}-${version}-src.zip";
+      sha256 = "03vb9y645qzffxxdhgbjb0d98k3lafxckg2vh2s86j62b6357d0h";
+    };
+    desktopName = "Sweet Home 3D - Textures Library Editor";
+  };
+
+  furniture-editor = mkEditorProject rec {
+    version = "1.28";
+    module = "FurnitureLibraryEditor";
+    pname = module;
+    description = "Quickly create SH3F files and edit the properties of the 3D models it contain";
+    license = lib.licenses.gpl2;
+    src = fetchurl {
+      url = "mirror://sourceforge/sweethome3d/${module}-${version}-src.zip";
+      sha256 = "sha256-r5xJlUctUdcknJfm8rbz+bdzFhqgHsHpHwxEC4mItws=";
+    };
+    desktopName = "Sweet Home 3D - Furniture Library Editor";
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/synapse/default.nix b/nixpkgs/pkgs/applications/misc/synapse/default.nix
new file mode 100644
index 000000000000..1491a4e81291
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/synapse/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchurl, gettext, pkg-config, glib, libnotify, gtk3, libgee
+, keybinder3, json-glib, zeitgeist, vala, gobject-introspection
+}:
+
+let
+  version = "0.2.99.4";
+in stdenv.mkDerivation rec {
+  pname = "synapse";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://launchpad.net/synapse-project/0.3/${version}/+download/${pname}-${version}.tar.xz";
+    sha256 = "1g6x9knb4jy1d8zgssjhzkgac583137pibisy9whjs8mckaj4k1j";
+  };
+
+  nativeBuildInputs = [
+    pkg-config gettext vala
+    # For setup hook
+    gobject-introspection
+  ];
+  buildInputs = [
+    glib libnotify gtk3 libgee keybinder3 json-glib zeitgeist
+  ];
+
+  meta = with lib; {
+    longDescription = ''
+      Semantic launcher written in Vala that you can use to start applications
+      as well as find and access relevant documents and files by making use of
+      the Zeitgeist engine
+    '';
+    description = "Semantic launcher to start applications and find relevant files";
+    homepage = "https://launchpad.net/synapse-project";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ mahe ];
+    platforms = with platforms; all;
+    mainProgram = "synapse";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/syncthing-tray/default.nix b/nixpkgs/pkgs/applications/misc/syncthing-tray/default.nix
new file mode 100644
index 000000000000..e9db92df121c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/syncthing-tray/default.nix
@@ -0,0 +1,28 @@
+{ lib, fetchFromGitHub, buildGoPackage, pkg-config, libappindicator-gtk3 }:
+
+buildGoPackage rec {
+  pname = "syncthing-tray";
+  version = "0.7";
+
+  goPackagePath = "github.com/alex2108/syncthing-tray";
+
+  src = fetchFromGitHub {
+    owner = "alex2108";
+    repo = "syncthing-tray";
+    rev = "v${version}";
+    sha256 = "0869kinnsfzb8ydd0sv9fgqsi1sy5rhqg4whfdnrv82xjc71xyw3";
+  };
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libappindicator-gtk3 ];
+
+  meta = with lib; {
+    description = "Simple application tray for syncthing";
+    homepage = "https://github.com/alex2108/syncthing-tray";
+    license = licenses.mit;
+    maintainers = with maintainers; [ nickhu ];
+    mainProgram = "syncthing-tray";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/syncthing-tray/deps.nix b/nixpkgs/pkgs/applications/misc/syncthing-tray/deps.nix
new file mode 100644
index 000000000000..1103146ed1b7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/syncthing-tray/deps.nix
@@ -0,0 +1,93 @@
+# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+[
+  {
+    goPackagePath = "github.com/alex2108/systray";
+    fetch = {
+      type = "git";
+      url = "https://github.com/alex2108/systray";
+      rev = "40e874866be2dc2c57ab031bcbde27a76b90721a";
+      sha256 = "1bxnb6skb9ss0lwlwswql07ardkhm28nxglvlsxkdlmzv1dcwy1q";
+    };
+  }
+  {
+    goPackagePath = "github.com/getlantern/context";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/context";
+      rev = "624d99b1798d7c5375ea1d3ca4c5b04d58f7c775";
+      sha256 = "09yf9x6478a5z01hybr98zwa8ax3fx7l6wwsvdkxp3fdg9dqm13b";
+    };
+  }
+  {
+    goPackagePath = "github.com/getlantern/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/errors";
+      rev = "99fa440517e8f3d1e4cd8d6dbed6b41f4c1ed3d6";
+      sha256 = "08rl32l5ks67hcgjxik62nd5g558mv4101kmz1ak7d3vfgg3m6i3";
+    };
+  }
+  {
+    goPackagePath = "github.com/getlantern/golog";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/golog";
+      rev = "cca714f7feb5df8e455f409b549d384441ac4578";
+      sha256 = "0gnf30n38zkx356cqc6jdv1kbzy59ddqhqndwrxsm2n2zc3b5p7q";
+    };
+  }
+  {
+    goPackagePath = "github.com/getlantern/hex";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/hex";
+      rev = "083fba3033ad473db3dd31c9bb368473d37581a7";
+      sha256 = "18q6rypmcqmcwlfzrrdcz08nff0a289saplvd9y3ifnfcqdw3j77";
+    };
+  }
+  {
+    goPackagePath = "github.com/getlantern/hidden";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/hidden";
+      rev = "d52a649ab33af200943bb599898dbdcfdbc94cb7";
+      sha256 = "0133qmp4sjq8da5di3459vc5g5nqbpqra0f558zd95js3fdmkmsi";
+    };
+  }
+  {
+    goPackagePath = "github.com/getlantern/ops";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/ops";
+      rev = "b70875f5d689a9438bca72aefd7142a2af889b18";
+      sha256 = "0cfa2bbkykbzbskmgd2an34him72z6f3y88ag1v5ffpb0d6bnar7";
+    };
+  }
+  {
+    goPackagePath = "github.com/getlantern/stack";
+    fetch = {
+      type = "git";
+      url = "https://github.com/getlantern/stack";
+      rev = "02f928aad224fbccd50d66edd776fc9d1e9f2f2b";
+      sha256 = "0ddl5r4iw3c7p4drh4d8phl7d0ssdddsnd3xjm1lzgxylqq6r568";
+    };
+  }
+  {
+    goPackagePath = "github.com/oxtoacart/bpool";
+    fetch = {
+      type = "git";
+      url = "https://github.com/oxtoacart/bpool";
+      rev = "4e1c5567d7c2dd59fa4c7c83d34c2f3528b025d6";
+      sha256 = "01kk6dhkz96yhp3p5v2rjwq8mbrwrdsn6glqw7jp4h7g5za7yi95";
+    };
+  }
+  {
+    goPackagePath = "github.com/toqueteos/webbrowser";
+    fetch = {
+      type = "git";
+      url = "https://github.com/toqueteos/webbrowser";
+      rev = "e2ebfdc6cb1a3fdc4fc4dbd20a0cae0c2e406792";
+      sha256 = "0sgjnxrq0jgipkij8b6xiy4am9bv9zziqxxdhw15rdjc5piyk3a2";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/misc/syncthingtray/default.nix b/nixpkgs/pkgs/applications/misc/syncthingtray/default.nix
new file mode 100644
index 000000000000..0badd7997603
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/syncthingtray/default.nix
@@ -0,0 +1,112 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, qtbase
+, qtsvg
+, qtwebengine
+, qtdeclarative
+, extra-cmake-modules
+, cpp-utilities
+, qtutilities
+, qtforkawesome
+, boost
+, wrapQtAppsHook
+, cmake
+, kio
+, plasma-framework
+, qttools
+, iconv
+, cppunit
+, syncthing
+, xdg-utils
+, webviewSupport ? true
+, jsSupport ? true
+, kioPluginSupport ? stdenv.isLinux
+, plasmoidSupport  ? stdenv.isLinux
+, systemdSupport ? stdenv.isLinux
+/* It is possible to set via this option an absolute exec path that will be
+written to the `~/.config/autostart/syncthingtray.desktop` file generated
+during runtime. Alternatively, one can edit the desktop file themselves after
+it is generated See:
+https://github.com/NixOS/nixpkgs/issues/199596#issuecomment-1310136382 */
+, autostartExecPath ? "syncthingtray"
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  version = "1.4.13";
+  pname = "syncthingtray";
+
+  src = fetchFromGitHub {
+    owner = "Martchus";
+    repo = "syncthingtray";
+    rev = "v${finalAttrs.version}";
+    sha256 = "sha256-RysX2IAzhGz/L65nDEL2UQLXIjdkQRmMs7bqNQIR+eA=";
+  };
+
+  buildInputs = [
+    qtbase
+    qtsvg
+    cpp-utilities
+    qtutilities
+    boost
+    qtforkawesome
+  ] ++ lib.optionals stdenv.isDarwin [ iconv ]
+    ++ lib.optionals webviewSupport [ qtwebengine ]
+    ++ lib.optionals jsSupport [ qtdeclarative ]
+    ++ lib.optionals kioPluginSupport [ kio ]
+    ++ lib.optionals plasmoidSupport [ plasma-framework ]
+  ;
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+    cmake
+    qttools
+    # Although these are test dependencies, we add them anyway so that we test
+    # whether the test units compile. On Darwin we don't run the tests but we
+    # still build them.
+    cppunit
+    syncthing
+  ]
+    ++ lib.optionals plasmoidSupport [ extra-cmake-modules ]
+  ;
+
+  # syncthing server seems to hang on darwin, causing tests to fail.
+  doCheck = !stdenv.isDarwin;
+  preCheck = ''
+    export QT_QPA_PLATFORM=offscreen
+    export QT_PLUGIN_PATH="${lib.getBin qtbase}/${qtbase.qtPluginPrefix}"
+  '';
+  # don't test --help  on Darwin because output is .app
+  doInstallCheck = !stdenv.isDarwin;
+  installCheckPhase = ''
+    $out/bin/syncthingtray --help | grep ${finalAttrs.version}
+  '';
+
+  cmakeFlags = [
+    "-DQT_PACKAGE_PREFIX=Qt${lib.versions.major qtbase.version}"
+    "-DKF_PACKAGE_PREFIX=KF${lib.versions.major qtbase.version}"
+    "-DBUILD_TESTING=ON"
+    # See https://github.com/Martchus/syncthingtray/issues/208
+    "-DEXCLUDE_TESTS_FROM_ALL=OFF"
+    "-DAUTOSTART_EXEC_PATH=${autostartExecPath}"
+    # See https://github.com/Martchus/syncthingtray/issues/42
+    "-DQT_PLUGIN_DIR:STRING=${placeholder "out"}/${qtbase.qtPluginPrefix}"
+    "-DBUILD_SHARED_LIBS=ON"
+  ] ++ lib.optionals (!plasmoidSupport) ["-DNO_PLASMOID=ON"]
+    ++ lib.optionals (!kioPluginSupport) ["-DNO_FILE_ITEM_ACTION_PLUGIN=ON"]
+    ++ lib.optionals systemdSupport ["-DSYSTEMD_SUPPORT=ON"]
+    ++ lib.optionals (!webviewSupport) ["-DWEBVIEW_PROVIDER:STRING=none"]
+  ;
+
+  qtWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ xdg-utils ]}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/Martchus/syncthingtray";
+    description = "Tray application and Dolphin/Plasma integration for Syncthing";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ doronbehar ];
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/synergy/darwin-non-static-openssl.patch b/nixpkgs/pkgs/applications/misc/synergy/darwin-non-static-openssl.patch
new file mode 100644
index 000000000000..b886f51e725f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/synergy/darwin-non-static-openssl.patch
@@ -0,0 +1,14 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 63764a75..46db60f4 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -339,9 +339,6 @@ endif()
+ # Apple has to use static libraries because
+ # "Use of the Apple-provided OpenSSL libraries by apps is strongly discouraged."
+ # https://developer.apple.com/library/archive/documentation/Security/Conceptual/cryptoservices/SecureNetworkCommunicationAPIs/SecureNetworkCommunicationAPIs.html
+-if(APPLE OR DEFINED ENV{SYNERGY_STATIC_OPENSSL})
+-    set(OPENSSL_USE_STATIC_LIBS TRUE)
+-endif()
+ find_package(OpenSSL REQUIRED)
+
+ #
diff --git a/nixpkgs/pkgs/applications/misc/synergy/default.nix b/nixpkgs/pkgs/applications/misc/synergy/default.nix
new file mode 100644
index 000000000000..ef361fc6f14e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/synergy/default.nix
@@ -0,0 +1,147 @@
+{ withGUI ? true
+, stdenv
+, lib
+, fetchFromGitHub
+, wrapQtAppsHook
+
+, cmake
+, openssl
+, pcre
+, util-linux
+, libselinux
+, libsepol
+, pkg-config
+, gdk-pixbuf
+, libnotify
+, qttools
+, libICE
+, libSM
+, libX11
+, libxkbfile
+, libXi
+, libXtst
+, libXrandr
+, libXinerama
+, xkeyboardconfig
+, xinput
+, avahi-compat
+
+  # MacOS / darwin
+, ApplicationServices
+, Carbon
+, Cocoa
+, CoreServices
+, ScreenSaver
+, UserNotifications
+}:
+
+stdenv.mkDerivation rec {
+  pname = "synergy";
+  version = "1.14.6.19-stable";
+
+  src = fetchFromGitHub {
+    owner = "symless";
+    repo = "synergy-core";
+    rev = version;
+    sha256 = "sha256-0QqklfSsvcXh7I2jaHk82k0nY8gQOj9haA4WOjGqBqY=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    # Without this OpenSSL from nixpkgs is not detected
+    ./darwin-non-static-openssl.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace src/gui/src/SslCertificate.cpp \
+      --replace 'kUnixOpenSslCommand[] = "openssl";' 'kUnixOpenSslCommand[] = "${openssl}/bin/openssl";'
+  '' + lib.optionalString stdenv.isLinux ''
+    substituteInPlace src/lib/synergy/unix/AppUtilUnix.cpp \
+      --replace "/usr/share/X11/xkb/rules/evdev.xml" "${xkeyboardconfig}/share/X11/xkb/rules/evdev.xml"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ] ++ lib.optional withGUI wrapQtAppsHook;
+
+  buildInputs = [
+    qttools # Used for translations even when not building the GUI
+    openssl
+    pcre
+  ] ++ lib.optionals stdenv.isDarwin [
+    ApplicationServices
+    Carbon
+    Cocoa
+    CoreServices
+    ScreenSaver
+    UserNotifications
+  ] ++ lib.optionals stdenv.isLinux [
+    util-linux
+    libselinux
+    libsepol
+    libICE
+    libSM
+    libX11
+    libXi
+    libXtst
+    libXrandr
+    libXinerama
+    libxkbfile
+    xinput
+    avahi-compat
+    gdk-pixbuf
+    libnotify
+  ];
+
+  # Silences many warnings
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-Wno-inconsistent-missing-override";
+
+  cmakeFlags = lib.optional (!withGUI) "-DSYNERGY_BUILD_LEGACY_GUI=OFF"
+    # NSFilenamesPboardType is deprecated in 10.14+
+    ++ lib.optional stdenv.isDarwin "-DCMAKE_OSX_DEPLOYMENT_TARGET=${if stdenv.isAarch64 then "10.13" else stdenv.hostPlatform.darwinSdkVersion}";
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+  '' + lib.optionalString stdenv.isDarwin ''
+    # filter out tests failing with sandboxing on darwin
+    export GTEST_FILTER=-ServerConfigTests.serverconfig_will_deem_equal_configs_with_same_cell_names:NetworkAddress.hostname_valid_parsing
+  '' + ''
+    bin/unittests
+    runHook postCheck
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp bin/{synergyc,synergys,synergyd,syntool} $out/bin/
+  '' + lib.optionalString withGUI ''
+    cp bin/synergy $out/bin/
+  '' + lib.optionalString stdenv.isLinux ''
+    mkdir -p $out/share/{applications,icons/hicolor/scalable/apps}
+    cp ../res/synergy.svg $out/share/icons/hicolor/scalable/apps/
+    substitute ../res/synergy.desktop $out/share/applications/synergy.desktop \
+      --replace "/usr/bin" "$out/bin"
+  '' + lib.optionalString (stdenv.isDarwin && withGUI) ''
+    mkdir -p $out/Applications
+    cp -r bundle/Synergy.app $out/Applications
+    ln -s $out/bin $out/Applications/Synergy.app/Contents/MacOS
+  '' + ''
+    runHook postInstall
+  '';
+
+  dontWrapQtApps = lib.optional (!withGUI) true;
+
+  meta = with lib; {
+    description = "Share one mouse and keyboard between multiple computers";
+    homepage = "https://symless.com/synergy";
+    changelog = "https://github.com/symless/synergy-core/blob/${version}/ChangeLog";
+    mainProgram = lib.optionalString (!withGUI) "synergyc";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ talyz ivar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/system76-keyboard-configurator/default.nix b/nixpkgs/pkgs/applications/misc/system76-keyboard-configurator/default.nix
new file mode 100644
index 000000000000..737c713fb79c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/system76-keyboard-configurator/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, gtk3, glib, wrapGAppsHook, libusb1, hidapi, udev, pkg-config }:
+
+# system76-keyboard-configurator tries to spawn a daemon as root via pkexec, so
+# your system needs a PolicyKit authentication agent running for the
+# configurator to work.
+
+rustPlatform.buildRustPackage rec {
+  pname = "system76-keyboard-configurator";
+  version = "1.3.10";
+
+  src = fetchFromGitHub {
+    owner = "pop-os";
+    repo = "keyboard-configurator";
+    rev = "v${version}";
+    sha256 = "sha256-5U9LWFaCwszvT1reu6NflPKQUrsQkP/NdSO4LBHWm2g=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    glib # for glib-compile-resources
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    gtk3
+    hidapi
+    libusb1
+    udev
+  ];
+
+  cargoHash = "sha256-S4+cS4m69nqDN2h0vwyO35fFFBEa0Rcxx0XDBfSNLp0=";
+
+  postInstall = ''
+    install -Dm444 linux/com.system76.keyboardconfigurator.desktop -t $out/share/applications
+    cp -r data/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "Keyboard configuration application for System76 keyboards and laptops";
+    homepage = "https://github.com/pop-os/keyboard-configurator";
+    license = with licenses; [ gpl3Only ];
+    maintainers = with maintainers; [ mirrexagon ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/systembus-notify/default.nix b/nixpkgs/pkgs/applications/misc/systembus-notify/default.nix
new file mode 100644
index 000000000000..f05c8a0aa074
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/systembus-notify/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, formats
+, systemd
+}:
+
+let
+  ini = formats.ini { };
+
+  unit = ini.generate "systembus-notify.service" {
+    Unit = {
+      Description = "system bus notification daemon";
+    };
+
+    Service = {
+      Type = "exec";
+      ExecStart = "@out@/bin/systembus-notify";
+      PrivateTmp = true;
+      ProtectHome = true;
+      ProtectSystem = "strict";
+      Restart = "on-failure";
+      Slice = "background.slice";
+    };
+  };
+
+in
+stdenv.mkDerivation rec {
+  pname = "systembus-notify";
+  version = "1.1";
+
+  src = fetchFromGitHub {
+    owner = "rfjakob";
+    repo = "systembus-notify";
+    rev = "v${version}";
+    sha256 = "sha256-WzuBw7LXW54CCMgFE9BSJ2skxaz4IA2BcBny63Ihtt0=";
+  };
+
+  buildInputs = [ systemd ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm555 -t $out/bin systembus-notify
+    install -Dm444 -t $out/share/systembus-notify systembus-notify.desktop
+
+    install -d $out/lib/systemd/user
+    substitute ${unit} $out/lib/systemd/user/${unit.name} \
+      --subst-var out
+
+    runHook postInstall
+  '';
+
+  # requires a running dbus instance
+  doCheck = false;
+
+  meta = with lib; {
+    description = "System bus notification daemon";
+    homepage = "https://github.com/rfjakob/systembus-notify";
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.linux;
+    mainProgram = "systembus-notify";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tabula-java/default.nix b/nixpkgs/pkgs/applications/misc/tabula-java/default.nix
new file mode 100644
index 000000000000..ce402396c97d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tabula-java/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, maven
+, fetchFromGitHub
+, makeWrapper
+, jre
+}:
+
+maven.buildMavenPackage rec {
+  pname = "tabula-java";
+  version = "1.0.5";
+
+  src = fetchFromGitHub {
+    owner = "tabulapdf";
+    repo = "tabula-java";
+    rev = "v${version}";
+    hash = "sha256-lg8/diyGhfkUU0w7PEOlxb1WNpJZVDDllxMMsTIU/Cw=";
+  };
+
+  mvnHash = "sha256-yULCBHgctZZU3Deod+nQujssmUy+kgdFdgE3NUuFhOw=";
+  mvnParameters = "compile assembly:single -Dmaven.test.skip=true";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,lib}
+    cp target/tabula-${version}-jar-with-dependencies.jar $out/lib/tabula.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/tabula-java \
+      --add-flags "-cp $out/lib/tabula.jar" \
+      --add-flags "technology.tabula.CommandLineApp"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A library for extracting tables from PDF files.";
+    longDescription = ''
+      tabula-java is the table extraction engine that powers
+      Tabula. You can use tabula-java as a command-line tool to
+      programmatically extract tables from PDFs.
+    '';
+    homepage = "https://tabula.technology/";
+    license = licenses.mit;
+    maintainers = [ maintainers.jakewaksbaum ];
+    platforms = platforms.all;
+    mainProgram = "tabula-java";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tabula/default.nix b/nixpkgs/pkgs/applications/misc/tabula/default.nix
new file mode 100644
index 000000000000..ec2ded975fed
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tabula/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchzip, jre, makeWrapper }:
+
+
+stdenv.mkDerivation rec {
+  pname = "tabula";
+  version = "1.2.1";
+
+
+  src = fetchzip {
+    url = "https://github.com/tabulapdf/tabula/releases/download/v${version}/tabula-jar-${version}.zip";
+    sha256 = "0lkpv8hkji81fanyxm7ph8421fr9a6phqc3pbhw2bc4gljg7sgxi";
+  };
+
+
+  nativeBuildInputs = [ makeWrapper ];
+
+
+  installPhase = ''
+    mkdir -pv $out/share/tabula
+    cp -v * $out/share/tabula
+
+    makeWrapper ${jre}/bin/java $out/bin/tabula --add-flags "-jar $out/share/tabula/tabula.jar"
+  '';
+
+
+  meta = with lib; {
+    description = "A tool for liberating data tables locked inside PDF files";
+    longDescription = ''
+      If you’ve ever tried to do anything with data provided to you in PDFs, you
+      know how painful it is — there's no easy way to copy-and-paste rows of data
+      out of PDF files. Tabula allows you to extract that data into a CSV or
+      Microsoft Excel spreadsheet using a simple, easy-to-use interface.
+    '';
+    homepage = "https://tabula.technology/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
+    license = licenses.mit;
+    maintainers = [ maintainers.dpaetzel ];
+    platforms = platforms.all;
+    broken = true; # on 2022-11-23 this package builds, but produces an executable that fails immediately
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tagtime/default.nix b/nixpkgs/pkgs/applications/misc/tagtime/default.nix
new file mode 100644
index 000000000000..9ec36c26defc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tagtime/default.nix
@@ -0,0 +1,80 @@
+{ lib, stdenv, fetchFromGitHub, perl, xterm, coreutils }:
+
+stdenv.mkDerivation {
+  pname = "tagtime";
+  version = "2018-09-02";
+
+  src = fetchFromGitHub {
+    owner = "tagtime";
+    repo = "TagTime";
+    rev = "59343e2cbe451eb16109e782c194ccbd0ee4196d";
+    sha256 = "1xpmra3f9618b0gajfxqh061r4phkiklvcgpglsyx82bhmgf9n1f";
+  };
+
+  buildInputs = [
+    perl
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{libexec,bin}
+
+    # We don’t support a config file for now,
+    # since it’s not entirely clear how to split nix-set paths
+    # from the actual config options.
+    for pl in *.pl; do
+      substituteInPlace "$pl" \
+        --replace 'require "$ENV{HOME}/.tagtimerc";' \
+                  'require "${placeholder "out"}/libexec/settings.pl";'
+    done;
+
+    install tagtimed.pl $out/bin/tagtimed
+
+    substituteInPlace util.pl \
+      --replace '/usr/bin/touch' \
+                '${coreutils}/bin/touch' \
+      --replace '/bin/rm -f $lockf' \
+                '${coreutils}/bin/rm -f $lockf' \
+      --replace '$lockf = "''${path}tagtime.lock";' \
+                'mkdir "$ENV{HOME}/.cache/tagtime";
+    $lockf = "$ENV{HOME}/.cache/tagtime/tagtime.lock";'
+
+    mv *.pl $out/libexec/
+    mv template.tsk $out/libexec/
+
+
+    # set the default template arguments to sane defaults.
+    substitute settings.pl.template $out/libexec/settings.pl \
+      --replace '"__USER__"' \
+                'getlogin()' \
+      --replace '"__PATH__"' \
+                '"${placeholder "out"}/libexec/"' \
+      --replace '$logf = "$path$usr.log";' \
+                'mkdir "$ENV{HOME}/.local/share/tagtime";
+    $logf = "$ENV{HOME}/.local/share/tagtime/pings.log";' \
+      --replace '"__ED__ +"' \
+                '$ENV{"EDITOR"}' \
+      --replace '"__XT__"' \
+                '"${xterm}/bin/xterm"'
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "Stochastic Time Tracking for Space Cadets";
+    longDescription = ''
+      To determine how you spend your time, TagTime literally randomly samples
+      you. At random times it pops up and asks what you're doing right at that
+      moment. You answer with tags.
+
+      See https://messymatters.com/tagtime for the whole story.
+
+      [maintainer’s note]: This is the original perl script implementation.
+    '';
+    homepage = "http://messymatters.com/tagtime/";
+    license = lib.licenses.bsd3;
+    maintainers = [ lib.maintainers.Profpatsch ];
+    mainProgram = "tagtimed";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tailscale-systray/default.nix b/nixpkgs/pkgs/applications/misc/tailscale-systray/default.nix
new file mode 100644
index 000000000000..842b66ee7cc7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tailscale-systray/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, pkg-config
+, gtk3
+, libayatana-appindicator
+}:
+buildGoModule rec {
+  pname = "tailscale-systray";
+  version = "2022-10-19";
+
+  src = fetchFromGitHub {
+    owner = "mattn";
+    repo = pname;
+    rev = "e7f8893684e7b8779f34045ca90e5abe6df6056d";
+    sha256 = "sha256-3kozp6jq0xGllxoK2lGCNUahy/FvXyq11vNSxfDehKE=";
+  };
+
+  vendorHash = "sha256-YJ74SeZAMS+dXyoPhPTJ3L+5uL5bF8gumhMOqfvmlms=";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ gtk3 libayatana-appindicator ];
+
+  proxyVendor = true;
+
+  meta = with lib; {
+    description = "Tailscale systray";
+    homepage = "https://github.com/mattn/tailscale-systray";
+    license = licenses.mit;
+    maintainers = with maintainers; [ qbit ];
+    mainProgram = "tailscale-systray";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taizen/default.nix b/nixpkgs/pkgs/applications/misc/taizen/default.nix
new file mode 100644
index 000000000000..903de3c05c1d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taizen/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, ncurses
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "taizen";
+  version = "unstable-2023-06-05";
+
+  src = fetchFromGitHub {
+    owner = "NerdyPepper";
+    repo = pname;
+    rev = "5486cd4f4c5aa4e0abbcee180ad2ec22839abd31";
+    hash = "sha256-pGcD3+3Ds3U8NuNySaDnz0zzAvZlSDte1jRPdM5qrZA=";
+  };
+
+  cargoHash = "sha256-2X9ZhqaQ6Y+mwXTMbvBQWLR24+KYYqjIqQy/8XqGi18=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [
+    ncurses
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "curses based mediawiki browser";
+    homepage = "https://github.com/nerdypepper/taizen";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "taizen";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tandoor-recipes/common.nix b/nixpkgs/pkgs/applications/misc/tandoor-recipes/common.nix
new file mode 100644
index 000000000000..8461ed816eb9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tandoor-recipes/common.nix
@@ -0,0 +1,19 @@
+{ lib, fetchFromGitHub }:
+rec {
+  version = "1.5.12";
+
+  src = fetchFromGitHub {
+    owner = "TandoorRecipes";
+    repo = "recipes";
+    rev = version;
+    hash = "sha256-5UslXRoiq9cipGCOiqpf+rv7OPTsW4qpVTjakNeg4ug=";
+  };
+
+  yarnHash = "sha256-CresovsRh+dLHGnv49fCi/i66QXOS3SnzfFNvkVUfd8=";
+
+  meta = with lib; {
+    homepage = "https://tandoor.dev/";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ ambroisie ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tandoor-recipes/default.nix b/nixpkgs/pkgs/applications/misc/tandoor-recipes/default.nix
new file mode 100644
index 000000000000..dc36156ff4a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tandoor-recipes/default.nix
@@ -0,0 +1,163 @@
+{ callPackage
+, nixosTests
+, python3
+, fetchFromGitHub
+, fetchpatch
+}:
+let
+  python = python3.override {
+    packageOverrides = self: super: {
+      validators = super.validators.overridePythonAttrs (_: rec {
+        version = "0.20.0";
+        src = fetchFromGitHub {
+          owner = "python-validators";
+          repo = "validators";
+          rev = version;
+          hash = "sha256-ZnLyTHlsrXthGnaPzlV2ga/UTm5SSEHLTwC/tobiPak=";
+        };
+        propagatedBuildInputs = [ super.decorator super.six ];
+      });
+    };
+  };
+
+  common = callPackage ./common.nix { };
+
+  frontend = callPackage ./frontend.nix { };
+in
+python.pkgs.pythonPackages.buildPythonPackage rec {
+  pname = "tandoor-recipes";
+
+  inherit (common) version src;
+
+  format = "other";
+
+  patches = [
+    # Allow setting MEDIA_ROOT through environment variable
+    # https://github.com/TandoorRecipes/recipes/pull/2931
+    (fetchpatch {
+      url = "https://github.com/TandoorRecipes/recipes/commit/abf981792057481f1d5b7473eb1090b3901ef8fa.patch";
+      hash = "sha256-3AFf0K/BpVwPQ2NGLUsefj6HvW7ej3szd3WaxFoqMiQ=";
+    })
+  ];
+
+  propagatedBuildInputs = with python.pkgs; [
+    beautifulsoup4
+    bleach
+    bleach-allowlist
+    boto3
+    cryptography
+    django
+    django-allauth
+    django-annoying
+    django-auth-ldap
+    django-autocomplete-light
+    django-cleanup
+    django-cors-headers
+    django-crispy-forms
+    django-crispy-bootstrap4
+    django-hcaptcha
+    django-js-reverse
+    django-oauth-toolkit
+    django-prometheus
+    django-scopes
+    django-storages
+    django-tables2
+    django-webpack-loader
+    django-treebeard
+    djangorestframework
+    drf-writable-nested
+    gunicorn
+    icalendar
+    jinja2
+    lxml
+    markdown
+    microdata
+    pillow
+    psycopg2
+    pyppeteer
+    python-dotenv
+    pytube
+    pyyaml
+    recipe-scrapers
+    requests
+    six
+    uritemplate
+    validators
+    webdavclient3
+    whitenoise
+  ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    ln -sf ${frontend}/ cookbook/static/vue
+    cp ${frontend}/webpack-stats.json vue/
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    # Disable debug logging
+    export DEBUG=0
+    # Avoid dependency on django debug toolbar
+    export DEBUG_TOOLBAR=0
+
+    # See https://github.com/TandoorRecipes/recipes/issues/2043
+    mkdir cookbook/static/themes/maps/
+    touch cookbook/static/themes/maps/style.min.css.map
+    touch cookbook/static/themes/bootstrap.min.css.map
+    touch cookbook/static/css/bootstrap-vue.min.css.map
+
+    ${python.pythonOnBuildForHost.interpreter} manage.py collectstatic_js_reverse
+    ${python.pythonOnBuildForHost.interpreter} manage.py collectstatic
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/lib
+    cp -r . $out/lib/tandoor-recipes
+    chmod +x $out/lib/tandoor-recipes/manage.py
+    makeWrapper $out/lib/tandoor-recipes/manage.py $out/bin/tandoor-recipes \
+      --prefix PYTHONPATH : "$PYTHONPATH"
+
+    # usually copied during frontend build (see vue.config.js)
+    cp vue/src/sw.js $out/lib/tandoor-recipes/cookbook/templates/
+
+    runHook postInstall
+  '';
+
+  nativeCheckInputs = with python.pkgs; [
+    pytestCheckHook
+    pytest-django
+    pytest-factoryboy
+  ];
+
+  # flaky
+  disabledTests = [
+    "test_search_count"
+    "test_url_import_regex_replace"
+  ];
+
+  passthru = {
+    inherit frontend python;
+
+    updateScript = ./update.sh;
+
+    tests = {
+      inherit (nixosTests) tandoor-recipes;
+    };
+  };
+
+  meta = common.meta // {
+    description = ''
+      Application for managing recipes, planning meals, building shopping lists
+      and much much more!
+    '';
+    mainProgram = "tandoor-recipes";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tandoor-recipes/frontend.nix b/nixpkgs/pkgs/applications/misc/tandoor-recipes/frontend.nix
new file mode 100644
index 000000000000..d63c0874171e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tandoor-recipes/frontend.nix
@@ -0,0 +1,56 @@
+{ stdenv, fetchYarnDeps, prefetch-yarn-deps, callPackage, nodejs }:
+let
+  common = callPackage ./common.nix { };
+in
+stdenv.mkDerivation {
+  pname = "tandoor-recipes-frontend";
+  inherit (common) version;
+
+  src = "${common.src}/vue";
+
+  yarnOfflineCache = fetchYarnDeps {
+    yarnLock = "${common.src}/vue/yarn.lock";
+    hash = common.yarnHash;
+  };
+
+  nativeBuildInputs = [
+    prefetch-yarn-deps
+    nodejs
+    nodejs.pkgs.yarn
+  ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror "$yarnOfflineCache"
+    fixup-yarn-lock yarn.lock
+    command -v yarn
+    yarn install --frozen-lockfile --offline --no-progress --non-interactive
+    patchShebangs node_modules/
+
+    runHook postConfigure
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    yarn --offline run build
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    cp -R ../cookbook/static/vue/ $out
+    cp webpack-stats.json $out
+    echo "${common.version}" > "$out/version"
+
+    runHook postInstall
+  '';
+
+  meta = common.meta // {
+    description = "Tandoor Recipes frontend";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tandoor-recipes/update.sh b/nixpkgs/pkgs/applications/misc/tandoor-recipes/update.sh
new file mode 100755
index 000000000000..63021d76f6b7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tandoor-recipes/update.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=../../../../ -i bash -p nix wget prefetch-yarn-deps nix-prefetch-github jq
+
+# shellcheck shell=bash
+
+if [ -n "$GITHUB_TOKEN" ]; then
+    TOKEN_ARGS=(--header "Authorization: token $GITHUB_TOKEN")
+fi
+
+if [ "$#" -gt 1 ] || [[ "$1" == -* ]]; then
+    echo "Regenerates packaging data for the tandoor-recipes package."
+    echo "Usage: $0 [git release tag]"
+    exit 1
+fi
+
+version="$1"
+
+set -euo pipefail
+
+if [ -z "$version" ]; then
+    version="$(wget -O- "${TOKEN_ARGS[@]}" "https://api.github.com/repos/TandoorRecipes/recipes/releases?per_page=1" | jq -r '.[0].tag_name')"
+fi
+
+package_src="https://raw.githubusercontent.com/TandoorRecipes/recipes/$version"
+
+src_hash=$(nix-prefetch-github TandoorRecipes recipes --rev "${version}" | jq -r .hash)
+
+tmpdir=$(mktemp -d)
+trap 'rm -rf "$tmpdir"' EXIT
+
+pushd "$tmpdir"
+wget "${TOKEN_ARGS[@]}" "$package_src/vue/yarn.lock"
+yarn_hash=$(prefetch-yarn-deps yarn.lock)
+popd
+
+# Use friendlier hashes
+yarn_hash=$(nix hash to-sri --type sha256 "$yarn_hash")
+
+sed -i -E -e "s#version = \".*\"#version = \"$version\"#" common.nix
+sed -i -E -e "s#hash = \".*\"#hash = \"$src_hash\"#" common.nix
+sed -i -E -e "s#yarnHash = \".*\"#yarnHash = \"$yarn_hash\"#" common.nix
diff --git a/nixpkgs/pkgs/applications/misc/tango/default.nix b/nixpkgs/pkgs/applications/misc/tango/default.nix
new file mode 100644
index 000000000000..bd2dca9d790b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tango/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "tango";
+  version = "1.1.0";
+
+  src = fetchFromGitHub {
+    owner = "masakichi";
+    repo = "tango";
+    rev = "v${version}";
+    hash = "sha256-e/M2iRm/UwfnRVnMo1PmQTkz4IGTxnsCXNSSUkhsiHk=";
+  };
+
+  vendorHash = "sha256-83nKtiEy1na1HgAQcbTEfl+0vGg6BkCLBK1REN9fP+k=";
+
+  meta = with lib; {
+    description = "A local command-line Japanese dictionary tool using yomichan's dictionary files";
+    homepage = "https://github.com/masakichi/tango";
+    license = licenses.mit;
+    maintainers = with maintainers; [ donovanglover ];
+    mainProgram = "tango";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile b/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile
new file mode 100644
index 000000000000..f6dec6ebf490
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile
@@ -0,0 +1,3 @@
+source 'https://rubygems.org'
+gem 'taskjuggler'
+gem 'webrick'
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile.lock b/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile.lock
new file mode 100644
index 000000000000..d0578a49c759
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/Gemfile.lock
@@ -0,0 +1,39 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    date (3.3.3)
+    mail (2.8.1)
+      mini_mime (>= 0.1.1)
+      net-imap
+      net-pop
+      net-smtp
+    mini_mime (1.1.2)
+    net-imap (0.3.4)
+      date
+      net-protocol
+    net-pop (0.1.2)
+      net-protocol
+    net-protocol (0.2.1)
+      timeout
+    net-smtp (0.3.3)
+      net-protocol
+    sync (0.5.0)
+    taskjuggler (3.7.2)
+      mail (~> 2.7, >= 2.7.1)
+      term-ansicolor (~> 1.7, >= 1.7.1)
+    term-ansicolor (1.7.1)
+      tins (~> 1.0)
+    timeout (0.3.2)
+    tins (1.32.1)
+      sync
+    webrick (1.8.1)
+
+PLATFORMS
+  x86_64-linux
+
+DEPENDENCIES
+  taskjuggler
+  webrick
+
+BUNDLED WITH
+   2.4.12
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/default.nix b/nixpkgs/pkgs/applications/misc/taskjuggler/default.nix
new file mode 100644
index 000000000000..5c15748f2b8e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/default.nix
@@ -0,0 +1,21 @@
+{ lib, bundlerApp, bundlerUpdateScript }:
+
+bundlerApp {
+  pname = "taskjuggler";
+  gemdir = ./.;
+
+  exes = [
+    "tj3" "tj3client" "tj3d" "tj3man" "tj3ss_receiver" "tj3ss_sender"
+    "tj3ts_receiver" "tj3ts_sender" "tj3ts_summary" "tj3webd"
+  ];
+
+  passthru.updateScript = bundlerUpdateScript "taskjuggler";
+
+  meta = with lib; {
+    description = "A modern and powerful project management tool";
+    homepage    = "https://taskjuggler.org/";
+    license     = licenses.gpl2;
+    platforms   = platforms.unix;
+    maintainers = with maintainers; [ manveru nicknovitski ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskjuggler/gemset.nix b/nixpkgs/pkgs/applications/misc/taskjuggler/gemset.nix
new file mode 100644
index 000000000000..b782b37705a2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskjuggler/gemset.nix
@@ -0,0 +1,140 @@
+{
+  date = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "03skfikihpx37rc27vr3hwrb057gxnmdzxhmzd4bf4jpkl0r55w1";
+      type = "gem";
+    };
+    version = "3.3.3";
+  };
+  mail = {
+    dependencies = ["mini_mime" "net-imap" "net-pop" "net-smtp"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1bf9pysw1jfgynv692hhaycfxa8ckay1gjw5hz3madrbrynryfzc";
+      type = "gem";
+    };
+    version = "2.8.1";
+  };
+  mini_mime = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0lbim375gw2dk6383qirz13hgdmxlan0vc5da2l072j3qw6fqjm5";
+      type = "gem";
+    };
+    version = "1.1.2";
+  };
+  net-imap = {
+    dependencies = ["date" "net-protocol"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d996zf3g8xz244791b0qsl9vr7zg4lqnnmf9k2kshr9lki5jam8";
+      type = "gem";
+    };
+    version = "0.3.4";
+  };
+  net-pop = {
+    dependencies = ["net-protocol"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1wyz41jd4zpjn0v1xsf9j778qx1vfrl24yc20cpmph8k42c4x2w4";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  net-protocol = {
+    dependencies = ["timeout"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dxckrlw4q1lcn3qg4mimmjazmg9bma5gllv72f8js3p36fb3b91";
+      type = "gem";
+    };
+    version = "0.2.1";
+  };
+  net-smtp = {
+    dependencies = ["net-protocol"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1c6md06hm5bf6rv53sk54dl2vg038pg8kglwv3rayx0vk2mdql9x";
+      type = "gem";
+    };
+    version = "0.3.3";
+  };
+  sync = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1z9qlq4icyiv3hz1znvsq1wz2ccqjb1zwd6gkvnwg6n50z65d0v6";
+      type = "gem";
+    };
+    version = "0.5.0";
+  };
+  taskjuggler = {
+    dependencies = ["mail" "term-ansicolor"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "07fagka8nl29xwwzfhxx89gp34m5hih5vnq4sha1z814004md53j";
+      type = "gem";
+    };
+    version = "3.7.2";
+  };
+  term-ansicolor = {
+    dependencies = ["tins"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1xq5kci9215skdh27npyd3y55p812v4qb4x2hv3xsjvwqzz9ycwj";
+      type = "gem";
+    };
+    version = "1.7.1";
+  };
+  timeout = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1pfddf51n5fnj4f9ggwj3wbf23ynj0nbxlxqpz12y1gvl9g7d6r6";
+      type = "gem";
+    };
+    version = "0.3.2";
+  };
+  tins = {
+    dependencies = ["sync"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0373zn7zkllcn2q4ylbjgjx9mvm8m73ll3jwjav48dx8myplsp5p";
+      type = "gem";
+    };
+    version = "1.32.1";
+  };
+  webrick = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "13qm7s0gr2pmfcl7dxrmq38asaza4w0i2n9my4yzs499j731wh8r";
+      type = "gem";
+    };
+    version = "1.8.1";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tasknc/default.nix b/nixpkgs/pkgs/applications/misc/tasknc/default.nix
new file mode 100644
index 000000000000..5250581762b0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tasknc/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, makeWrapper, perl, ncurses5, taskwarrior }:
+
+stdenv.mkDerivation rec {
+  version = "2020-12-17";
+  pname = "tasknc";
+
+  src = fetchFromGitHub {
+    owner = "lharding";
+    repo = "tasknc";
+    rev = "a182661fbcc097a933d5e8cce3922eb1734a563e";
+    sha256 = "0jrv2k1yizfdjndbl06lmy2bb62ky2rjdk308967j31c5kqqnw56";
+  };
+
+  # Pull pending upstream inclusion for ncurses-6.3:
+  #  https://github.com/lharding/tasknc/pull/57
+  patches = [
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/lharding/tasknc/commit/f74ea0641e9bf287acf22fac9f6eeea571b01800.patch";
+      sha256 = "18a90zj85sw2zfnfcv055nvi0lx3h8lcgsyabdfk94ksn78pygrv";
+    })
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    perl # For generating the man pages with pod2man
+  ];
+
+  buildInputs = [ ncurses5 ];
+
+  hardeningDisable = [ "format" ];
+
+  buildFlags = [ "VERSION=${version}" ];
+
+  installPhase = ''
+    mkdir -p $out/bin/
+    mkdir -p $out/share/man/man1
+    mkdir -p $out/share/tasknc
+
+    DESTDIR=$out PREFIX= MANPREFIX=/share/man make install
+
+    wrapProgram $out/bin/tasknc --prefix PATH : ${taskwarrior}/bin
+  '';
+
+
+  meta = with lib; {
+    homepage = "https://github.com/lharding/tasknc";
+    description = "A ncurses wrapper around taskwarrior";
+    maintainers = with maintainers; [ matthiasbeyer infinisil ];
+    platforms = platforms.linux; # Cannot test others
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskopen/default.nix b/nixpkgs/pkgs/applications/misc/taskopen/default.nix
new file mode 100644
index 000000000000..88050d2f449d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskopen/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, which, perl, perlPackages }:
+
+stdenv.mkDerivation rec {
+  pname = "taskopen";
+  version = "1.1.5";
+
+  src = fetchFromGitHub {
+    owner = "ValiValpas";
+    repo = "taskopen";
+    rev = "v${version}";
+    sha256 = "sha256-/xf7Ph2KKiZ5lgLKk95nCgw/z9wIBmuWf3QGaNebgHg=";
+  };
+
+  postPatch = ''
+    # We don't need a DESTDIR and an empty string results in an absolute path
+    # (due to the trailing slash) which breaks the build.
+    sed 's|$(DESTDIR)/||' -i Makefile
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ which ]
+    ++ (with perlPackages; [ JSON perl ]);
+
+  installPhase = ''
+    make PREFIX=$out
+    make PREFIX=$out install
+  '';
+
+  postFixup = ''
+    wrapProgram $out/bin/taskopen \
+         --set PERL5LIB "$PERL5LIB"
+  '';
+
+  meta = with lib; {
+    description = "Script for taking notes and open urls with taskwarrior";
+    homepage = "https://github.com/ValiValpas/taskopen";
+    platforms = platforms.linux;
+    license = licenses.free;
+    maintainers = [ maintainers.winpat ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tasksh/default.nix b/nixpkgs/pkgs/applications/misc/tasksh/default.nix
new file mode 100644
index 000000000000..0e169bc998d6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tasksh/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl, cmake, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "tasksh";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://taskwarrior.org/download/${pname}-${version}.tar.gz";
+    sha256 = "1z8zw8lld62fjafjvy248dncjk0i4fwygw0ahzjdvyyppx4zjhkf";
+  };
+
+  buildInputs = [ readline ];
+  nativeBuildInputs = [ cmake ];
+
+  meta = with lib; {
+    description = "REPL for taskwarrior";
+    homepage = "http://tasktools.org";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer ];
+    platforms = platforms.unix;
+    mainProgram = "tasksh";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tasktimer/default.nix b/nixpkgs/pkgs/applications/misc/tasktimer/default.nix
new file mode 100644
index 000000000000..18439e02e2b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tasktimer/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tasktimer";
+  version = "1.11.0";
+
+  src = fetchFromGitHub {
+    owner = "caarlos0";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-CAqOsxmJxDgQRMx8cN23TajHd6BNiCFraFvhf5kKnzc=";
+  };
+
+  vendorHash = "sha256-Tk0yI/WFr0FV0AxJDStlP3XLem3v78ueuXyadhrLAog=";
+
+  postInstall = ''
+    mv $out/bin/tasktimer $out/bin/tt
+  '';
+
+  meta = with lib; {
+    description = "Task Timer (tt) is a dead simple TUI task timer";
+    homepage = "https://github.com/caarlos0/tasktimer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ abbe caarlos0 ];
+    mainProgram = "tt";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskwarrior-tui/default.nix b/nixpkgs/pkgs/applications/misc/taskwarrior-tui/default.nix
new file mode 100644
index 000000000000..44b6ccf76095
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskwarrior-tui/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, installShellFiles
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "taskwarrior-tui";
+  version = "0.25.4";
+
+  src = fetchFromGitHub {
+    owner = "kdheepak";
+    repo = "taskwarrior-tui";
+    rev = "v${version}";
+    sha256 = "sha256-M8tiEUPfP5EWfPp7i6r0lpHC5ZUsEYeEKVz5gUpe4+A=";
+  };
+
+  cargoHash = "sha256-B5peoyT/+miHXyoRGFLUv9qFzZZFsExrI46Zy0K7NL4=";
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  # Because there's a test that requires terminal access
+  doCheck = false;
+
+  postInstall = ''
+    installManPage docs/taskwarrior-tui.1
+    installShellCompletion completions/taskwarrior-tui.{bash,fish} --zsh completions/_taskwarrior-tui
+  '';
+
+  meta = with lib; {
+    description = "A terminal user interface for taskwarrior ";
+    homepage = "https://github.com/kdheepak/taskwarrior-tui";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ matthiasbeyer ];
+    mainProgram = "taskwarrior-tui";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/taskwarrior/default.nix b/nixpkgs/pkgs/applications/misc/taskwarrior/default.nix
new file mode 100644
index 000000000000..105d470d1358
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/taskwarrior/default.nix
@@ -0,0 +1,51 @@
+{ lib, stdenv, fetchFromGitHub, cmake, libuuid, gnutls, python3, xdg-utils, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "taskwarrior";
+  version = "2.6.2";
+
+  src = fetchFromGitHub {
+    owner = "GothenburgBitFactory";
+    repo = "taskwarrior";
+    rev = "v${version}";
+    sha256 = "sha256-0YveqiylXJi4cdDCfnPtwCVOJbQrZYsxnXES+9B4Yfw=";
+    fetchSubmodules = true;
+  };
+
+  postPatch = ''
+    substituteInPlace src/commands/CmdNews.cpp \
+      --replace "xdg-open" "${lib.getBin xdg-utils}/bin/xdg-open"
+  '';
+
+  nativeBuildInputs = [ cmake libuuid gnutls python3 installShellFiles ];
+
+  doCheck = true;
+  preCheck = ''
+    patchShebangs --build test
+  '';
+  checkTarget = "test";
+
+  postInstall = ''
+    # ZSH is installed automatically from some reason, only bash and fish need
+    # manual installation
+    installShellCompletion --cmd task \
+      --bash $out/share/doc/task/scripts/bash/task.sh \
+      --fish $out/share/doc/task/scripts/fish/task.fish
+    rm -r $out/share/doc/task/scripts/bash
+    rm -r $out/share/doc/task/scripts/fish
+    # Install vim and neovim plugin
+    mkdir -p $out/share/vim-plugins
+    mv $out/share/doc/task/scripts/vim $out/share/vim-plugins/task
+    mkdir -p $out/share/nvim
+    ln -s $out/share/vim-plugins/task $out/share/nvim/site
+  '';
+
+  meta = with lib; {
+    description = "Highly flexible command-line tool to manage TODO lists";
+    homepage = "https://taskwarrior.org";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marcweber oxalica ];
+    mainProgram = "task";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tdrop/default.nix b/nixpkgs/pkgs/applications/misc/tdrop/default.nix
new file mode 100644
index 000000000000..34c01a197591
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tdrop/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, lib, fetchFromGitHub, makeWrapper
+, xwininfo, xdotool, xprop, gawk, coreutils
+, gnugrep, procps }:
+
+stdenv.mkDerivation rec {
+  pname = "tdrop";
+  version = "0.5.0";
+
+  src = fetchFromGitHub {
+    owner = "noctuid";
+    repo = "tdrop";
+    rev = version;
+    sha256 = "sha256-fHvGXaZL7MMvTnkap341B79PDDo2lOVPPcOH4AX/zXo=";
+  };
+
+  dontBuild = true;
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = let
+    binPath = lib.makeBinPath [
+      xwininfo
+      xdotool
+      xprop
+      gawk
+      coreutils
+      gnugrep
+      procps
+    ];
+  in ''
+    wrapProgram $out/bin/tdrop --prefix PATH : ${binPath}
+  '';
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  meta = with lib; {
+    description = "A Glorified WM-Independent Dropdown Creator";
+    homepage = "https://github.com/noctuid/tdrop";
+    license = licenses.bsd2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/teleprompter/default.nix b/nixpkgs/pkgs/applications/misc/teleprompter/default.nix
new file mode 100644
index 000000000000..9e4f711d125c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/teleprompter/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchurl, electron_10, makeDesktopItem, makeWrapper, asar, autoPatchelfHook}:
+
+let
+  electron = electron_10;
+in
+stdenv.mkDerivation rec {
+  pname = "teleprompter";
+  version = "2.4.0";
+
+  src = fetchurl {
+    url = "https://github.com/ImaginarySense/Imaginary-Teleprompter-Electron/releases/download/${lib.versions.majorMinor version}/imaginary-teleprompter-${version}.tar.gz";
+    sha256 = "bgdtK8l5d26avv1WUw9cfOgZrIL1q/a9890Ams4yidQ=";
+  };
+
+  dontBuild = true;
+  dontStrip = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper asar ];
+  installPhase = ''
+    mkdir -p $out/bin $out/opt/teleprompter $out/share/applications
+    asar e resources/app.asar $out/opt/teleprompter/resources/app.asar.unpacked
+    ln -s ${desktopItem}/share/applications/* $out/share/applications
+  '';
+
+  postFixup = ''
+    makeWrapper ${electron}/bin/electron $out/bin/teleprompter \
+      --add-flags "$out/opt/teleprompter/resources/app.asar.unpacked --without-update"
+  '';
+
+  desktopItem = makeDesktopItem {
+     name = "teleprompter";
+     exec = "teleprompter";
+     desktopName = "Teleprompter";
+  };
+
+  meta = with lib; {
+    description = "The most complete, free, teleprompter app on the web";
+    license = [ licenses.gpl3Plus ];
+    homepage = "https://github.com/ImaginarySense/Teleprompter-Core";
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ Scriptkiddi ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/tellico/default.nix b/nixpkgs/pkgs/applications/misc/tellico/default.nix
new file mode 100644
index 000000000000..52b513b89d6d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tellico/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitLab
+, mkDerivation
+, cmake
+, exempi
+, extra-cmake-modules
+, karchive
+, kdoctools
+, kfilemetadata
+, khtml
+, kitemmodels
+, knewstuff
+, kxmlgui
+, libcdio
+, libkcddb
+, libksane
+, makeWrapper
+, poppler
+, qtcharts
+, qtwebengine
+, solid
+, taglib
+}:
+
+mkDerivation rec {
+  pname = "tellico";
+  version = "3.5.3";
+
+  src = fetchFromGitLab {
+    domain = "invent.kde.org";
+    owner = "office";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-hg2sfBEh3jjVwMFmkgu9nXuXARsPqvlxzxX7kjSI/JU=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    extra-cmake-modules
+    kdoctools
+    makeWrapper
+  ];
+
+  buildInputs = [
+    exempi
+    karchive
+    kfilemetadata
+    khtml
+    kitemmodels
+    knewstuff
+    kxmlgui
+    libcdio
+    libkcddb
+    libksane
+    poppler
+    qtcharts
+    qtwebengine
+    solid
+    taglib
+  ];
+
+  meta = with lib; {
+    description = "Collection management software, free and simple";
+    homepage = "https://tellico-project.org/";
+    license = with licenses; [ gpl2Only gpl3Only lgpl2Only ];
+    maintainers = with maintainers; [ numkem ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/termdown/default.nix b/nixpkgs/pkgs/applications/misc/termdown/default.nix
new file mode 100644
index 000000000000..f28bd665a5e1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/termdown/default.nix
@@ -0,0 +1,29 @@
+{ lib
+, fetchFromGitHub
+, buildPythonApplication
+, click
+, pyfiglet
+, python-dateutil
+, setuptools
+}:
+
+buildPythonApplication rec {
+  pname = "termdown";
+  version = "1.17.0";
+
+  src = fetchFromGitHub {
+    rev = version;
+    sha256 = "1sd9z5n2a4ir35832wgxs68vwav7wxhq39b5h8pq934mp8sl3v2k";
+    repo = "termdown";
+    owner = "trehn";
+  };
+
+  propagatedBuildInputs = [ python-dateutil click pyfiglet setuptools ];
+
+  meta = with lib; {
+    description = "Starts a countdown to or from TIMESPEC";
+    longDescription = "Countdown timer and stopwatch in your terminal";
+    homepage = "https://github.com/trehn/termdown";
+    license = licenses.gpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/terminal-colors/default.nix b/nixpkgs/pkgs/applications/misc/terminal-colors/default.nix
new file mode 100644
index 000000000000..fc196be625e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/terminal-colors/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, lib, help2man, python3, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "terminal-colors";
+  version = "3.0.2";
+  outputs = [ "out" "man" ];
+
+  src = fetchFromGitHub {
+    owner = "eikenb";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-KRoP/Reo5nDKJYG9zVTVpoYL7soAGMNk46vDoaLfnv4=";
+  };
+
+  buildInputs = [ python3 ];
+  nativeBuildInputs = [ help2man ];
+
+  postPatch =
+    # This sed command modifies output of --version command in way that
+    # makes manpage generated by help2man(1) prettier.
+    ''
+      sed -r -i "3s/([0-9.]+)/$pname - \1\\n/" ./$pname
+    ''
+    # Upstream shebang of "terminal-colors" python script uses
+    # /usr/bin/env, which is not present in Nix sandbox, so we need to
+    # patch it before running help2man, otherwise it would fail with "no
+    # such file or directory".
+    + ''
+      patchShebangs ./$pname
+    '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    help2man -n 'display terminal colors' -N ./$pname > $pname.1
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D -m755 ./$pname -t $out/bin
+    install -D -m644 ./$pname.1 -t $man/share/man/man1
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Script displaying terminal colors in various formats";
+    homepage = "https://github.com/eikenb/terminal-colors";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ kaction ];
+    mainProgram = "terminal-colors";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/terminal-notifier/default.nix b/nixpkgs/pkgs/applications/misc/terminal-notifier/default.nix
new file mode 100644
index 000000000000..19370fae0133
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/terminal-notifier/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, runtimeShell, lib, fetchzip }:
+
+stdenv.mkDerivation rec {
+  pname = "terminal-notifier";
+
+  version = "2.0.0";
+
+  src = fetchzip {
+    url = "https://github.com/alloy/terminal-notifier/releases/download/${version}/terminal-notifier-${version}.zip";
+    sha256 = "0gi54v92hi1fkryxlz3k5s5d8h0s66cc57ds0vbm1m1qk3z4xhb0";
+    stripRoot = false;
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/Applications
+    mkdir -p $out/bin
+    cp -r terminal-notifier.app $out/Applications
+    cat >$out/bin/terminal-notifier <<EOF
+    #!${runtimeShell}
+    cd $out/Applications/terminal-notifier.app
+    exec ./Contents/MacOS/terminal-notifier "\$@"
+    EOF
+    chmod +x $out/bin/terminal-notifier
+  '';
+
+  meta = with lib; {
+    maintainers = with maintainers; [ ];
+    homepage = "https://github.com/julienXX/terminal-notifier";
+    license = licenses.mit;
+    platforms  = platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/terminal-parrot/default.nix b/nixpkgs/pkgs/applications/misc/terminal-parrot/default.nix
new file mode 100644
index 000000000000..802588e8ef64
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/terminal-parrot/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "terminal-parrot";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "jmhobbs";
+    repo = "terminal-parrot";
+    rev = version;
+    hash = "sha256-Qhy5nCbuC9MmegXA48LFCDk4Lm1T5MBmcXfeHzTJm6w=";
+  };
+
+  vendorHash = "sha256-DJEoJjItusN1LTOOX1Ep+frF03yF/QmB/L66gSG0VOE=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Shows colorful, animated party parrot in your terminial";
+    homepage = "https://github.com/jmhobbs/terminal-parrot";
+    license = licenses.mit;
+    maintainers = [ maintainers.heel ];
+    mainProgram = "terminal-parrot";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/terminal-stocks/default.nix b/nixpkgs/pkgs/applications/misc/terminal-stocks/default.nix
new file mode 100644
index 000000000000..9d1ee035d81a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/terminal-stocks/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildNpmPackage, fetchFromGitHub, nix-update-script }:
+
+buildNpmPackage rec {
+  pname = "terminal-stocks";
+  version = "1.0.16";
+
+  src = fetchFromGitHub {
+    owner = "shweshi";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-tu6SKeTVEqIqDJXimoSkMK9+l0uGqWSrlIO0KHoROSQ=";
+  };
+
+  npmDepsHash = "sha256-13RiEBLhmKW04Tesg1s7c9rCYtRGOd/prnVARb6jpGQ=";
+  dontNpmBuild = true;
+
+  passthru.updateScript = nix-update-script {};
+
+  meta = with lib; {
+    description = "Terminal based application that provides stock price information";
+    homepage = "https://github.com/shweshi/terminal-stocks";
+    maintainers = with maintainers; [ mislavzanic ];
+    license = licenses.mit;
+    mainProgram = "terminal-stocks";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/terminal-typeracer/default.nix b/nixpkgs/pkgs/applications/misc/terminal-typeracer/default.nix
new file mode 100644
index 000000000000..4aee5fccfbd1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/terminal-typeracer/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, rustPlatform
+, pkg-config
+, libgit2
+, openssl
+, sqlite
+, libiconv
+, Security
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "terminal-typeracer";
+  version = "2.1.3";
+
+  src = fetchFromGitLab {
+    owner = "ttyperacer";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-S3OW6KihRd6ReTWUXRb1OWC7+YoxehjFRBxcnJVgImU=";
+  };
+
+  cargoHash = "sha256-OwbFIbKB/arj+3gq2tfEq8yTKSUPBQNYJNzrWvDv4A4=";
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libgit2 openssl sqlite ] ++ lib.optionals stdenv.isDarwin [ libiconv Security ];
+
+  OPENSSL_NO_VENDOR = 1;
+  LIBGIT2_NO_VENDOR = 1;
+
+  meta = with lib; {
+    description = "An open source terminal based version of Typeracer written in rust";
+    homepage = "https://gitlab.com/ttyperacer/terminal-typeracer";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ yoctocell ];
+    mainProgram = "typeracer";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/termpdf.py/default.nix b/nixpkgs/pkgs/applications/misc/termpdf.py/default.nix
new file mode 100644
index 000000000000..e51f7633e013
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/termpdf.py/default.nix
@@ -0,0 +1,39 @@
+{ lib, buildPythonApplication, fetchFromGitHub, bibtool, pybtex, pymupdf, pynvim
+, pyperclip, roman, pdfrw, pagelabels, setuptools }:
+
+buildPythonApplication {
+  pname = "termpdf.py";
+  version = "2022-03-28";
+
+  src = fetchFromGitHub {
+    owner = "dsanson";
+    repo = "termpdf.py";
+    rev = "e7bd0824cb7d340b8dba7d862e696dba9cb5e5e2";
+    sha256 = "HLQZBaDoZFVBs4JfJcwhrLx8pxdEI56/iTpUjT5pBhk=";
+  };
+
+  propagatedBuildInputs = [
+    bibtool
+    pybtex
+    pymupdf
+    pyperclip
+    roman
+    pagelabels
+    pdfrw
+    pynvim
+    setuptools
+  ];
+
+  # upstream doesn't contain tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = ''
+      A graphical pdf (and epub, cbz, ...) reader that works
+      inside the kitty terminal.
+    '';
+    homepage = "https://github.com/dsanson/termpdf.py";
+    maintainers = with maintainers; [ teto ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/teseq/default.nix b/nixpkgs/pkgs/applications/misc/teseq/default.nix
new file mode 100644
index 000000000000..c07cc39f84ef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/teseq/default.nix
@@ -0,0 +1,23 @@
+{ lib, stdenv, fetchurl }:
+
+let
+  version = "1.1.1";
+in
+stdenv.mkDerivation {
+  pname = "teseq";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://gnu/teseq/teseq-${version}.tar.gz";
+    sha256 = "08ln005qciy7f3jhv980kfhhfmh155naq59r5ah9crz1q4mx5yrj";
+  };
+
+  meta = {
+    homepage = "https://www.gnu.org/software/teseq/";
+    description = "Escape sequence illuminator";
+    license = lib.licenses.gpl3;
+
+    platforms = lib.platforms.unix;
+    maintainers = [ lib.maintainers.vaibhavsagar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/thedesk/default.nix b/nixpkgs/pkgs/applications/misc/thedesk/default.nix
new file mode 100644
index 000000000000..3fb11f883a2a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/thedesk/default.nix
@@ -0,0 +1,55 @@
+{ lib, stdenv, fetchurl, dpkg, autoPatchelfHook, makeWrapper, electron
+, alsa-lib, gtk3, libxshmfence, mesa, nss }:
+
+stdenv.mkDerivation rec {
+  pname = "thedesk";
+  version = "24.1.3";
+
+  src = fetchurl {
+    url = "https://github.com/cutls/TheDesk/releases/download/v${version}/${pname}_${version}_amd64.deb";
+    sha256 = "sha256-Fq+kDdNR7G0Fbi++OFGxYbgFFOnpdzxy0JVh5t/i8hs=";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    autoPatchelfHook
+    makeWrapper
+  ];
+
+  buildInputs = [ alsa-lib gtk3 libxshmfence mesa nss ];
+
+  dontBuild = true;
+  dontConfigure = true;
+
+  unpackPhase = ''
+    dpkg-deb -x ${src} ./
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mv usr $out
+    mv opt $out
+
+    # binary is not used and probably vulnerable to CVE(s)
+    rm $out/opt/TheDesk/thedesk
+
+    substituteInPlace $out/share/applications/thedesk.desktop \
+      --replace '/opt/TheDesk' $out/bin
+
+    makeWrapper ${electron}/bin/electron $out/bin/thedesk \
+      --add-flags $out/opt/TheDesk/resources/app.asar
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Mastodon/Misskey Client for PC";
+    homepage = "https://thedesk.top";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ wolfangaukang ];
+    platforms = [ "x86_64-linux" ];
+    mainProgram = "thedesk";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/themechanger/default.nix b/nixpkgs/pkgs/applications/misc/themechanger/default.nix
new file mode 100644
index 000000000000..945bd8de5420
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/themechanger/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, gobject-introspection
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook
+, desktop-file-utils
+, glib
+, gtk3
+, python3
+, gsettings-desktop-schemas
+, python3Packages
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "themechanger";
+  version = "0.11.1";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "ALEX11BR";
+    repo = "ThemeChanger";
+    rev = "v${version}";
+    sha256 = "sha256-zSbh+mqCKquOyQASwVUW6hghmUc37nTuoa8pWCHM/a8=";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook
+    desktop-file-utils
+    gtk3
+  ];
+
+  buildInputs = [
+    glib
+    gtk3
+    python3
+    gsettings-desktop-schemas
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    pygobject3
+  ];
+
+  postPatch = ''
+    patchShebangs postinstall.py
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ALEX11BR/ThemeChanger";
+    description = "A theme changing utility for Linux";
+    longDescription = ''
+      This app is a theme changing utility for Linux, BSDs, and whatnots.
+      It lets the user change GTK 2/3/4, Kvantum, icon and cursor themes, edit GTK CSS with live preview, and set some related options.
+      It also lets the user install icon and widget theme archives.
+    '';
+    maintainers = with maintainers; [ ALEX11BR ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/therion/default.nix b/nixpkgs/pkgs/applications/misc/therion/default.nix
new file mode 100644
index 000000000000..fbe734ddc1b6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/therion/default.nix
@@ -0,0 +1,97 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, pkg-config
+, perl
+, tcl
+, tcllib
+, tk
+, expat
+, bwidget
+, python3
+, texliveTeTeX
+, survex
+, makeWrapper
+, fmt
+, proj
+, wxGTK32
+, vtk
+, freetype
+, libjpeg
+, gettext
+, libGL
+, libGLU
+, sqlite
+, libtiff
+, curl
+, tkimg
+}:
+
+stdenv.mkDerivation rec {
+  pname = "therion";
+  version = "6.1.8";
+
+  src = fetchFromGitHub {
+    owner = "therion";
+    repo = "therion";
+    rev = "v${version}";
+    hash = "sha256-bmp0IZ4uAqDpe2e8UeIDUdFaaocx4OBIYuhnaHirqGc=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    perl
+    python3
+    texliveTeTeX
+    makeWrapper
+    tcl.tclPackageHook
+  ];
+
+  preConfigure = ''
+    export OUTDIR=$out
+  '';
+
+  cmakeFlags = [
+    "-DBUILD_THBOOK=OFF"
+  ];
+
+  buildInputs = [
+    expat
+    tkimg
+    proj
+    wxGTK32
+    vtk
+    tk
+    freetype
+    libjpeg
+    gettext
+    libGL
+    libGLU
+    sqlite
+    libtiff
+    curl
+    fmt
+    tcl
+    tcllib
+    bwidget
+  ];
+
+  fixupPhase = ''
+    runHook preFixup
+    wrapProgram $out/bin/therion \
+      --prefix PATH : ${lib.makeBinPath [ survex texliveTeTeX ]}
+    wrapProgram $out/bin/xtherion \
+      --prefix PATH : ${lib.makeBinPath [ tk ]}
+    runHook postFixup
+  '';
+
+  meta = with lib; {
+    description = "Therion – cave surveying software";
+    homepage = "https://therion.speleo.sk/";
+    changelog = "https://github.com/therion/therion/blob/${src.rev}/CHANGES";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ matthewcroughan ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/thinking-rock/default.nix b/nixpkgs/pkgs/applications/misc/thinking-rock/default.nix
new file mode 100644
index 000000000000..bf53848b5d38
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/thinking-rock/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchurl, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "thinkingrock-binary";
+  version = "2.2.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/thinkingrock/ThinkingRock/TR%20${version}/tr-${version}.tar.gz";
+    sha256 = "0hnwvvyc8miiz8w2g4iy7s4rgfy0kfbncgbgfzpsq6nrzq334kgm";
+  };
+
+  /* it would be a really bad idea to put thinkingrock tr executable in PATH!
+     the tr.sh script does use the coreutils tr itself
+     That's why I've renamed the wrapper and called it thinkingrock
+     However you may not rename the bin/tr script cause it will notice and throw an
+     "java.lang.IllegalArgumentException: Malformed branding token: thinkingrock"
+     exception. I hope that's fine
+  */
+
+  buildPhase = ''
+    # only keep /bin/tr
+    ls -1 bin/* | grep -ve  'bin/tr''$' | xargs rm
+    # don't keep the other .exe file either
+    find . -iname "*.exe" | xargs -n1 rm
+    mkdir -p $out/{nix-support/tr-files,bin}
+    cp -r . $out/nix-support/tr-files
+    cat >> $out/bin/thinkingrock << EOF
+    #!${runtimeShell}
+    exec $out/nix-support/tr-files/bin/tr "$@"
+    EOF
+    chmod +x $out/bin/thinkingrock
+  '';
+
+  dontInstall = true;
+
+  meta = with lib; {
+    description = "Task management system";
+    homepage = "http://www.thinkingrock.com.au/";
+    license = licenses.cddl;
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/thokr/default.nix b/nixpkgs/pkgs/applications/misc/thokr/default.nix
new file mode 100644
index 000000000000..cf82a8d6aeb8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/thokr/default.nix
@@ -0,0 +1,23 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "thokr";
+  version = "0.4.1";
+
+  src = fetchFromGitHub {
+    owner = "thatvegandev";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0aryfx9qlnjdq3iq2d823c82fhkafvibmbz58g48b8ah5x5fv3ir";
+  };
+
+  cargoSha256 = "sha256-gEpmXyLmw6bX3enA3gNVtXNMlkQl6J/8AwJQSY0RtFw=";
+
+  meta = with lib; {
+    description = "A typing tui with visualized results and historical logging";
+    homepage = "https://github.com/thatvegandev/thokr";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "thokr";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ticker/default.nix b/nixpkgs/pkgs/applications/misc/ticker/default.nix
new file mode 100644
index 000000000000..fdbc9c2a5cd4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ticker/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "ticker";
+  version = "4.5.14";
+
+  src = fetchFromGitHub {
+    owner = "achannarasappa";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-WpU0fxkdNqr8zF6eGOlbaV9dp6sZyNZ1J7Uq+yGBnUs=";
+  };
+
+  vendorHash = "sha256-c7wU9LLRlS9kOhE4yAiKAs/npQe8lvSwPcd+/D8o9rk=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X github.com/achannarasappa/ticker/cmd.Version=v${version}"
+  ];
+
+  # Tests require internet
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Terminal stock ticker with live updates and position tracking";
+    homepage = "https://github.com/achannarasappa/ticker";
+    changelog = "https://github.com/achannarasappa/ticker/releases/tag/v${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ siraben sarcasticadmin ];
+    mainProgram = "ticker";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tickrs/default.nix b/nixpkgs/pkgs/applications/misc/tickrs/default.nix
new file mode 100644
index 000000000000..a22f9da07359
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tickrs/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tickrs";
+  version = "0.14.9";
+
+  src = fetchFromGitHub {
+    owner = "tarkah";
+    repo = pname;
+    rev = "refs/tags/v${version}";
+    hash = "sha256-cN5GtU3bmsdJvfjVdWvWAshiU3Ged7L9pc8wid8GQwA=";
+  };
+
+  cargoHash = "sha256-ngDA085V3+2oBH13Fs+pJez2W2/i1pEKoWdqJ4/3Q0I=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.SystemConfiguration
+  ];
+
+  env = {
+    OPENSSL_NO_VENDOR = true;
+  };
+
+  meta = with lib; {
+    description = "Realtime ticker data in your terminal";
+    homepage = "https://github.com/tarkah/tickrs";
+    changelog = "https://github.com/tarkah/tickrs/blob/v${version}/CHANGELOG.md";
+    license = licenses.mit;
+    maintainers = with maintainers; [ mredaelli ];
+    mainProgram = "tickrs";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tilemaker/default.nix b/nixpkgs/pkgs/applications/misc/tilemaker/default.nix
new file mode 100644
index 000000000000..af4944ea8ba1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tilemaker/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, buildPackages, cmake, installShellFiles
+, boost, lua, protobuf, rapidjson, shapelib, sqlite, zlib, testers }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "tilemaker";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "systemed";
+    repo = "tilemaker";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-rB5oP03yaIzklwkGsIeS9ELbHOY9AObwjRrK9HBQFI4=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/tilemaker.cpp \
+      --replace "config.json" "$out/share/tilemaker/config-openmaptiles.json" \
+      --replace "process.lua" "$out/share/tilemaker/process-openmaptiles.lua"
+  '';
+
+  nativeBuildInputs = [ cmake installShellFiles ];
+
+  buildInputs = [ boost lua protobuf rapidjson shapelib sqlite zlib ];
+
+  cmakeFlags = lib.optional (stdenv.hostPlatform != stdenv.buildPlatform)
+    "-DPROTOBUF_PROTOC_EXECUTABLE=${buildPackages.protobuf}/bin/protoc";
+
+  env.NIX_CFLAGS_COMPILE = toString [ "-DTM_VERSION=${finalAttrs.version}" ];
+
+  postInstall = ''
+    installManPage ../docs/man/tilemaker.1
+    install -Dm644 ../resources/* -t $out/share/tilemaker
+  '';
+
+  passthru.tests.version = testers.testVersion {
+    package = finalAttrs.finalPackage;
+    command = "tilemaker --help";
+  };
+
+  meta = with lib; {
+    description = "Make OpenStreetMap vector tiles without the stack";
+    homepage = "https://tilemaker.org/";
+    changelog = "https://github.com/systemed/tilemaker/blob/v${version}/CHANGELOG.md";
+    license = licenses.free; # FTWPL
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/timew-sync-server/default.nix b/nixpkgs/pkgs/applications/misc/timew-sync-server/default.nix
new file mode 100644
index 000000000000..fefc25a48792
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/timew-sync-server/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "timew-sync-server";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "timewarrior-synchronize";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-3THRP+hydvq/dnxzUOFGeuu8//qL7pFN0RHJVxzgibI=";
+  };
+
+  vendorHash = "sha256-w7I8PDQQeICDPln2Naf6whOg9qqOniTH/xs1/9luIVc=";
+
+  meta = with lib; {
+    homepage = "https://github.com/timewarrior-synchronize/timew-sync-server";
+    description = "Server component of timewarrior synchronization application";
+    license = licenses.mit;
+    maintainers = [ maintainers.joachimschmidt557 ];
+    platforms = platforms.linux;
+    mainProgram = "timew-sync-server";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/timewarrior/default.nix b/nixpkgs/pkgs/applications/misc/timewarrior/default.nix
new file mode 100644
index 000000000000..02445a655b46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/timewarrior/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, cmake, asciidoctor, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  pname = "timewarrior";
+  version = "1.7.1";
+
+  src = fetchFromGitHub {
+    owner = "GothenburgBitFactory";
+    repo = "timewarrior";
+    rev = "v${version}";
+    sha256 = "sha256-sc4AfdXLuA9evoGU6Z97+Hq7zj9nx093+nPALRkhziQ=";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake asciidoctor installShellFiles ];
+
+  dontUseCmakeBuildDir = true;
+
+  postInstall = ''
+    installShellCompletion --cmd timew \
+      --bash completion/timew-completion.bash
+  '';
+
+  meta = with lib; {
+    description = "A command-line time tracker";
+    homepage = "https://timewarrior.net";
+    license = licenses.mit;
+    maintainers = with maintainers; [ matthiasbeyer mrVanDalo ];
+    mainProgram = "timew";
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/tint2/default.nix b/nixpkgs/pkgs/applications/misc/tint2/default.nix
new file mode 100644
index 000000000000..ac50a46fde6d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tint2/default.nix
@@ -0,0 +1,92 @@
+{ lib, stdenv
+, fetchFromGitLab
+, fetchpatch
+, pkg-config
+, cmake
+, gettext
+, cairo
+, pango
+, pcre
+, glib
+, imlib2
+, gtk3
+, libXinerama
+, libXrender
+, libXcomposite
+, libXdamage
+, libX11
+, libXrandr
+, librsvg
+, libpthreadstubs
+, libXdmcp
+, libstartup_notification
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tint2";
+  version = "17.1.3";
+
+  src = fetchFromGitLab {
+    owner = "nick87720z";
+    repo = "tint2";
+    rev = version;
+    hash = "sha256-9sEe/Gnj+FWLPbWBtfL1YlNNC12j7/KjQ40xdkaFJVQ=";
+  };
+
+  patches = [
+    # Fix crashes with glib >= 2.76
+    # https://patchespromptly.com/glib2/
+    # https://gitlab.com/nick87720z/tint2/-/issues/4
+    (fetchpatch {
+      url = "https://gitlab.com/nick87720z/tint2/uploads/7de4501a4fa4fffa5ba8bb0fa3d19f78/glib.patch";
+      hash = "sha256-K547KYlRkVl1s2THi3ZCRuM447EFJwTqUEBjKQnV8Sc=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    cmake
+    gettext
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    cairo
+    pango
+    pcre
+    glib
+    imlib2
+    gtk3
+    libXinerama
+    libXrender
+    libXcomposite
+    libXdamage
+    libX11
+    libXrandr
+    librsvg
+    libpthreadstubs
+    libXdmcp
+    libstartup_notification
+  ];
+
+  cmakeFlags = [
+    "-Ddocdir=share/doc/${pname}"
+  ];
+
+  postPatch = ''
+    for f in ./src/launcher/apps-common.c \
+             ./src/launcher/icon-theme-common.c
+    do
+      substituteInPlace $f --replace /usr/share/ /run/current-system/sw/share/
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://gitlab.com/nick87720z/tint2";
+    description = "Simple panel/taskbar unintrusive and light (memory, cpu, aestetic)";
+    license = licenses.gpl2Only;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tipp10/default.nix b/nixpkgs/pkgs/applications/misc/tipp10/default.nix
new file mode 100644
index 000000000000..76ea8fb7fc0e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tipp10/default.nix
@@ -0,0 +1,25 @@
+{ cmake, lib, mkDerivation, fetchFromGitLab,
+  qtmultimedia, qttools, ... }:
+
+mkDerivation rec {
+  pname = "tipp10";
+  version = "3.2.1";
+
+  src = fetchFromGitLab {
+    owner = "tipp10";
+    repo = "tipp10";
+    rev = "v${version}";
+    sha256 = "4cxN2AnvYhZAMuA/qfmdLVICJNk6VCpRnfelbxYRvPg=";
+  };
+
+  nativeBuildInputs = [ cmake qttools ];
+  buildInputs = [ qtmultimedia ];
+
+  meta = with lib; {
+    description = "Learn and train typing with the ten-finger system";
+    homepage = "https://gitlab.com/tipp10/tipp10";
+    license = licenses.gpl2Only;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tiramisu/default.nix b/nixpkgs/pkgs/applications/misc/tiramisu/default.nix
new file mode 100644
index 000000000000..8624bded6641
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tiramisu/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, glib, vala }:
+
+stdenv.mkDerivation rec {
+  pname = "tiramisu";
+  version = "2.0.20211107";
+
+  src = fetchFromGitHub {
+    owner = "Sweets";
+    repo = pname;
+    rev = version;
+    sha256 = "1n1x1ybbwbanibw7b90k7v4cadagl41li17hz2l8s2sapacvq3mw";
+  };
+
+  buildInputs = [ glib ];
+
+  nativeBuildInputs = [ pkg-config vala ];
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = with lib; {
+    description = "Desktop notifications, the UNIX way";
+    longDescription = ''
+      tiramisu is a notification daemon based on dunst that outputs notifications
+      to STDOUT in order to allow the user to process notifications any way they
+      prefer.
+    '';
+    homepage = "https://github.com/Sweets/tiramisu";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ wishfort36 moni ];
+    mainProgram = "tiramisu";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tiv/default.nix b/nixpkgs/pkgs/applications/misc/tiv/default.nix
new file mode 100644
index 000000000000..30117180b74c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tiv/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, imagemagick
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tiv";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "stefanhaustein";
+    repo = "TerminalImageViewer";
+    rev = "v${version}";
+    sha256 = "sha256-mCgybL4af19zqECN1pBV+WnxMq2ZtlK5GDTQO3u9CK0=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildInputs = [ imagemagick ];
+
+  makeFlags = [ "prefix=$(out)" ];
+
+  preConfigure = "cd src/main/cpp";
+
+  postFixup = ''
+    wrapProgram $out/bin/tiv \
+      --prefix PATH : ${lib.makeBinPath [ imagemagick ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/stefanhaustein/TerminalImageViewer";
+    description = "Small C++ program to display images in a (modern) terminal using RGB ANSI codes and unicode block graphics characters";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ magnetophon ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tmatrix/default.nix b/nixpkgs/pkgs/applications/misc/tmatrix/default.nix
new file mode 100644
index 000000000000..50af14380888
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tmatrix/default.nix
@@ -0,0 +1,41 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, installShellFiles
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tmatrix";
+  version = "1.4";
+
+  src = fetchFromGitHub {
+    owner = "M4444";
+    repo = "TMatrix";
+    rev = "v${version}";
+    sha256 = "sha256-G3dg0SWfBjCA66TTxkVAcVrFNJOWE9+GJXYKzCUX34w=";
+  };
+
+  nativeBuildInputs = [ cmake installShellFiles ];
+  buildInputs = [ ncurses ];
+
+  postInstall = ''
+    installManPage ../tmatrix.6
+  '';
+
+  meta = with lib; {
+    description = "Terminal based replica of the digital rain from The Matrix";
+    longDescription = ''
+      TMatrix is a program that simulates the digital rain form The Matrix.
+      It's focused on being the most accurate replica of the digital rain effect
+      achievable on a typical terminal, while also being customizable and
+      performant.
+    '';
+    homepage = "https://github.com/M4444/TMatrix";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ infinisil Br1ght0ne ];
+    mainProgram = "tmatrix";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tnef/default.nix b/nixpkgs/pkgs/applications/misc/tnef/default.nix
new file mode 100644
index 000000000000..4c4b67adf96d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tnef/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook }:
+
+stdenv.mkDerivation rec {
+  version = "1.4.18";
+  pname = "tnef";
+
+  src = fetchFromGitHub {
+    owner  = "verdammelt";
+    repo   = "tnef";
+    rev    = version;
+    sha256 = "104g48mcm00bgiyzas2vf86331w7bnw7h3bc11ib4lp7rz6zqfck";
+  };
+
+  doCheck = true;
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    description = "Unpacks MIME attachments of type application/ms-tnef";
+    longDescription = ''
+      TNEF is a program for unpacking MIME attachments of type "application/ms-tnef". This is a Microsoft only attachment.
+
+      Due to the proliferation of Microsoft Outlook and Exchange mail servers, more and more mail is encapsulated into this format.
+
+      The TNEF program allows one to unpack the attachments which were encapsulated into the TNEF attachment. Thus alleviating the need to use Microsoft Outlook to view the attachment.
+    '';
+    homepage = "https://github.com/verdammelt/tnef";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = platforms.all;
+    mainProgram = "tnef";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/todiff/default.nix b/nixpkgs/pkgs/applications/misc/todiff/default.nix
new file mode 100644
index 000000000000..b3df5f48e859
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/todiff/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "todiff";
+  version = "0.6.1";
+
+  src = fetchFromGitHub {
+    owner = "Ekleog";
+    repo = "todiff";
+    rev = version;
+    hash = "sha256-leXAmurYjsM/DLe44kLvLwWAs183K96DsRMtrKZFG/g=";
+  };
+
+  cargoHash = "sha256-+YAi41A5lOhhz4O6lQ4u567OZj0Lhyyo2UvxPNgONm8=";
+
+  checkFeatures = [ "integration_tests" ];
+
+  meta = with lib; {
+    description = "Human-readable diff for todo.txt files";
+    homepage = "https://github.com/Ekleog/todiff";
+    maintainers = with maintainers; [ ekleog ];
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/todoist-electron/default.nix b/nixpkgs/pkgs/applications/misc/todoist-electron/default.nix
new file mode 100644
index 000000000000..351df8c558ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/todoist-electron/default.nix
@@ -0,0 +1,46 @@
+{ lib, appimageTools, fetchurl, asar }: let
+  pname = "todoist-electron";
+  version = "8.10.1";
+
+  src = fetchurl {
+    url = "https://electron-dl.todoist.com/linux/Todoist-linux-x86_64-${version}.AppImage";
+    hash = "sha256-Yp4wfibymHLGlaPDzu2rhSXxanwdXoNpF/d6+S0r+1U=";
+  };
+
+  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
+      sed -i 's/async isUpdateAvailable.*/async isUpdateAvailable(updateInfo) { return false;/g' app/node_modules/electron-updater/out/AppUpdater.js
+      ${asar}/bin/asar pack app $out/resources/app.asar
+    '';
+  });
+
+in appimageTools.wrapAppImage {
+  inherit pname version;
+  src = appimageContents;
+
+  extraPkgs = { pkgs, ... }@args: [
+    pkgs.hidapi
+  ] ++ appimageTools.defaultFhsEnvArgs.multiPkgs args;
+
+  extraInstallCommands = ''
+    # Add desktop convencience stuff
+    mv $out/bin/{${pname}-*,${pname}}
+    install -Dm444 ${appimageContents}/todoist.desktop -t $out/share/applications
+    install -Dm444 ${appimageContents}/todoist.png -t $out/share/pixmaps
+    substituteInPlace $out/share/applications/todoist.desktop \
+      --replace 'Exec=AppRun' "Exec=$out/bin/${pname} --"
+  '';
+
+  meta = with lib; {
+    homepage = "https://todoist.com";
+    description = "The official Todoist electron app";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ kylesferrazza pokon548 ];
+    mainProgram = "todoist-electron";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/todoist/default.nix b/nixpkgs/pkgs/applications/misc/todoist/default.nix
new file mode 100644
index 000000000000..0145644de14f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/todoist/default.nix
@@ -0,0 +1,24 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "todoist";
+  version = "0.20.0";
+
+  src = fetchFromGitHub {
+    owner = "sachaos";
+    repo = "todoist";
+    rev = "v${version}";
+    sha256 = "sha256-mdh+DOqlxcAqWIxEiKXmtvlsaaRCnRWEvrn56IFhBwk=";
+  };
+
+  vendorHash = "sha256-fWFFWFVnLtZivlqMRIi6TjvticiKlyXF2Bx9Munos8M=";
+
+  doCheck = false;
+
+  meta = {
+    homepage = "https://github.com/sachaos/todoist";
+    description = "Todoist CLI Client";
+    license = lib.licenses.mit;
+    mainProgram = "todoist";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tofi/default.nix b/nixpkgs/pkgs/applications/misc/tofi/default.nix
new file mode 100644
index 000000000000..076a5af3cf1c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tofi/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, ninja
+, meson
+, scdoc
+, wayland-protocols
+, wayland-scanner
+, freetype
+, harfbuzz
+, cairo
+, pango
+, wayland
+, libxkbcommon
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tofi";
+  version = "0.9.1";
+
+  src = fetchFromGitHub {
+    owner = "philj56";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-lokp6Zmdt7WuAyuRnHBkKD4ydbNiQY7pEVY97Z62U90=";
+  };
+
+  depsBuildBuild = [ pkg-config ];
+  nativeBuildInputs = [
+    meson ninja pkg-config scdoc wayland-protocols wayland-scanner
+  ];
+  buildInputs = [ freetype harfbuzz cairo pango wayland libxkbcommon ];
+
+  meta = with lib; {
+    description = "Tiny dynamic menu for Wayland";
+    homepage = "https://github.com/philj56/tofi";
+    license = licenses.mit;
+    maintainers = with maintainers; [ fbergroth ];
+    platforms = platforms.linux;
+    mainProgram = "tofi";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/toipe/default.nix b/nixpkgs/pkgs/applications/misc/toipe/default.nix
new file mode 100644
index 000000000000..31a468b3bc49
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/toipe/default.nix
@@ -0,0 +1,20 @@
+{ lib, fetchCrate, rustPlatform }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "toipe";
+  version = "0.5.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    sha256 = "sha256-L4JemOxpynGYsA8FgHnMv/hrogLSRaaiIzDjxzZDqjM=";
+  };
+
+  cargoHash = "sha256-ShJ7dbd3oNo3qZJ5+ut+NfLF9j8kPPZy9yC2zl/s56k=";
+
+  meta = with lib; {
+    description = "Trusty terminal typing tester";
+    homepage = "https://github.com/Samyak2/toipe";
+    license = licenses.mit;
+    maintainers = with maintainers; [ loicreynier samyak ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tomato-c/default.nix b/nixpkgs/pkgs/applications/misc/tomato-c/default.nix
new file mode 100644
index 000000000000..9f87712399f2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tomato-c/default.nix
@@ -0,0 +1,67 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libnotify
+, makeWrapper
+, mpv
+, ncurses
+, pkg-config
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "tomato-c";
+  version = "unstable-2023-08-21";
+
+  src = fetchFromGitHub {
+    owner = "gabrielzschmitz";
+    repo = "Tomato.C";
+    rev = "6e43e85aa15f3d96811311a3950eba8ce9715634";
+    hash = "sha256-RpKkQ7xhM2XqfZdXra0ju0cTBL3Al9NMVQ/oleFydDs=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "sudo " ""
+    substituteInPlace notify.c \
+      --replace "/usr/local" "${placeholder "out"}"
+    substituteInPlace util.c \
+      --replace "/usr/local" "${placeholder "out"}"
+    substituteInPlace tomato.desktop \
+      --replace "/usr/local" "${placeholder "out"}"
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+  ];
+
+  buildInputs = [
+    libnotify
+    mpv
+    ncurses
+  ];
+
+  installFlags = [
+    "PREFIX=${placeholder "out"}"
+    "CPPFLAGS=$NIX_CFLAGS_COMPILE"
+    "LDFLAGS=$NIX_LDFLAGS"
+  ];
+
+  postFixup = ''
+    for file in $out/bin/*; do
+      wrapProgram $file \
+        --prefix PATH : ${lib.makeBinPath [ libnotify mpv ]}
+    done
+  '';
+
+  strictDeps = true;
+
+  meta = {
+    homepage = "https://github.com/gabrielzschmitz/Tomato.C";
+    description = " A pomodoro timer written in pure C";
+    license = with lib.licenses; [ gpl3Plus ];
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    mainProgram = "tomato";
+    platforms = lib.platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/toot/default.nix b/nixpkgs/pkgs/applications/misc/toot/default.nix
new file mode 100644
index 000000000000..feb9f188b10e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/toot/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, python3Packages, nixosTests }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "toot";
+  version = "0.41.1";
+
+  src = fetchFromGitHub {
+    owner  = "ihabunek";
+    repo   = "toot";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-FwxA8YJzNKEK5WjdDi8PIufHh+SRVMRiFVIQs1iZ0UY=";
+  };
+
+  nativeCheckInputs = with python3Packages; [ pytest ];
+
+  propagatedBuildInputs = with python3Packages;
+  [
+    requests beautifulsoup4 future wcwidth
+    urwid urwidgets psycopg2 tomlkit click
+  ];
+
+  checkPhase = ''
+    py.test
+  '';
+
+  passthru.tests.toot = nixosTests.pleroma;
+
+  meta = with lib; {
+    description = "Mastodon CLI interface";
+    homepage    = "https://github.com/ihabunek/toot";
+    license     = licenses.gpl3;
+    maintainers = [ maintainers.matthiasbeyer ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/topydo/default.nix b/nixpkgs/pkgs/applications/misc/topydo/default.nix
new file mode 100644
index 000000000000..9ece11043fa0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/topydo/default.nix
@@ -0,0 +1,52 @@
+{ lib, python3, fetchFromGitHub, fetchpatch, glibcLocales }:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "topydo";
+  version = "0.14";
+
+  src = fetchFromGitHub {
+    owner = "topydo";
+    repo = pname;
+    rev = version;
+    sha256 = "1lpfdai0pf90ffrzgmmkadbd86rb7250i3mglpkc82aj6prjm6yb";
+  };
+
+  patches = [
+    # fixes a failing test
+    (fetchpatch {
+      name = "update-a-test-reference-ics-file.patch";
+      url = "https://github.com/topydo/topydo/commit/9373bb4702b512b10f0357df3576c129901e3ac6.patch";
+      hash = "sha256-JpyQfryWSoJDdyzbrESWY+RmRbDw1myvTlsFK7+39iw=";
+    })
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    arrow
+    glibcLocales
+    icalendar
+    prompt-toolkit
+    urwid
+    watchdog
+  ];
+
+  nativeCheckInputs = with python3.pkgs; [
+    freezegun
+    unittestCheckHook
+  ];
+
+  # Skip test that has been reported multiple times upstream without result:
+  # bram85/topydo#271, bram85/topydo#274.
+  preCheck = ''
+    substituteInPlace test/test_revert_command.py --replace 'test_revert_ls' 'dont_test_revert_ls'
+  '';
+
+  LC_ALL = "en_US.UTF-8";
+
+  meta = with lib; {
+    description = "A cli todo application compatible with the todo.txt format";
+    homepage = "https://github.com/topydo/topydo";
+    changelog = "https://github.com/topydo/topydo/blob/${src.rev}/CHANGES.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tpmmanager/default.nix b/nixpkgs/pkgs/applications/misc/tpmmanager/default.nix
new file mode 100644
index 000000000000..48ff9675a78d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tpmmanager/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, qtbase, qmake, wrapQtAppsHook, trousers }:
+
+stdenv.mkDerivation rec {
+  version = "0.8.1";
+  pname = "tpmmanager";
+
+  src = fetchFromGitHub {
+    owner = "Rohde-Schwarz";
+    repo = "TPMManager";
+    rev = "v${version}";
+    sha256 = "sha256-UZYn4ssbvLpdB0DssT7MXqQZCu1KkLf/Bsb45Rvgm+E=";
+  };
+
+  patches = [
+    # build with Qt5
+    (fetchpatch {
+      url = "https://github.com/Rohde-Schwarz/TPMManager/commit/f62c0f2de2097af9b504c80d6193818e6e4ca84f.patch";
+      sha256 = "sha256-gMhDNN2UkX2lJf/oJEzOkCvF6+EGdIj9xwtXb1rCeys=";
+    })
+    (fetchpatch {
+      url = "https://github.com/Rohde-Schwarz/TPMManager/commit/c287a841ac6b057ed35799949211866b9f533561.patch";
+      sha256 = "sha256-2ZyUml8Q9bKQLVZWr18AzLt8VYLICXH9VDeq6B5Xfto=";
+    })
+  ];
+
+  nativeBuildInputs = [ qmake wrapQtAppsHook ];
+
+  buildInputs = [ qtbase trousers ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -Dpm755 -D bin/tpmmanager $out/bin/tpmmanager
+
+    mkdir -p $out/share/applications
+    cat > $out/share/applications/tpmmanager.desktop <<EOF
+    [Desktop Entry]
+    Type=Application
+    Version=1.0
+    Name=tpmmanager
+    Comment=TPM manager
+    Exec=$out/bin/tpmmanager
+    Terminal=false
+    EOF
+    '';
+
+  meta = {
+    homepage = "https://projects.sirrix.com/trac/tpmmanager";
+    description = "Tool for managing the TPM";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [ ];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/transifex-cli/default.nix b/nixpkgs/pkgs/applications/misc/transifex-cli/default.nix
new file mode 100644
index 000000000000..f03ea6eaed36
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/transifex-cli/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "transifex-cli";
+  version = "1.6.10";
+
+  src = fetchFromGitHub {
+    owner = "transifex";
+    repo = "cli";
+    rev = "v${version}";
+    sha256 = "sha256-76nmlZFLon9EquM7tQ/PReM1rxkzh7x1rNdaP3n4KKg=";
+  };
+
+  vendorHash = "sha256-rcimaHr3fFeHSjZXw1w23cKISCT+9t8SgtPnY/uYGAU=";
+
+  ldflags = [
+    "-s" "-w" "-X 'github.com/transifex/cli/internal/txlib.Version=${version}'"
+  ];
+
+  postInstall = ''
+    mv $out/bin/cli $out/bin/tx
+  '';
+
+  # Tests contain network calls
+  doCheck = false;
+
+  meta = with lib; {
+    description = "The Transifex command-line client";
+    homepage = "https://github.com/transifex/transifex-cli";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ thornycrackers ];
+    mainProgram = "tx";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/translate-shell/default.nix b/nixpkgs/pkgs/applications/misc/translate-shell/default.nix
new file mode 100644
index 000000000000..ff20f89574be
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/translate-shell/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, makeWrapper, curl, fribidi, rlwrap, gawk, groff, ncurses, hexdump }:
+
+stdenv.mkDerivation rec {
+  pname = "translate-shell";
+  version = "0.9.7.1";
+
+  src = fetchFromGitHub {
+    owner = "soimort";
+    repo = "translate-shell";
+    rev = "v${version}";
+    sha256 = "sha256-ILXE8cSrivYqMruE+xtNIInLdwdRfMX5dneY9Nn12Uk=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/trans \
+      --prefix PATH : ${lib.makeBinPath [
+        gawk
+        curl
+        ncurses
+        rlwrap
+        groff
+        fribidi
+        hexdump
+      ]}
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.soimort.org/translate-shell";
+    description = "Command-line translator using Google Translate, Bing Translator, Yandex.Translate, and Apertium";
+    license = licenses.unlicense;
+    maintainers = with maintainers; [ ebzzry infinisil ];
+    mainProgram = "trans";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/translatelocally/default.nix b/nixpkgs/pkgs/applications/misc/translatelocally/default.nix
new file mode 100644
index 000000000000..1ce54adedc84
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/translatelocally/default.nix
@@ -0,0 +1,78 @@
+{ lib, stdenv, fetchFromGitHub
+, cmake, qt6, libarchive, pcre2, protobuf, gperftools, blas
+, runCommand, translatelocally, translatelocally-models
+}:
+
+let
+  rev = "a210037760ca3ca9016ca1831c97531318df70fe";
+
+in stdenv.mkDerivation (finalAttrs: {
+  pname = "translatelocally";
+  version = "unstable-2023-09-20";
+
+  src = fetchFromGitHub {
+    owner = "XapaJIaMnu";
+    repo = "translateLocally";
+    inherit rev;
+    hash = "sha256-T7cZdR09yDrPTwYxvDIaKTdV4mrB+gTHYVfch5BQ+PE=";
+    fetchSubmodules = true;
+  };
+
+  patches = [
+    ./version_without_git.patch
+  ];
+
+  postPatch = ''
+    echo '#define GIT_REVISION "${rev} ${finalAttrs.version}"' > \
+      3rd_party/bergamot-translator/3rd_party/marian-dev/src/common/git_revision.h
+  '';
+
+  # https://github.com/XapaJIaMnu/translateLocally/blob/81ed8b9/.github/workflows/build.yml#L330
+  postConfigure = lib.optionalString stdenv.isAarch64 ''
+    bash ../cmake/fix_ruy_build.sh .. .
+  '';
+
+  nativeBuildInputs = [
+    cmake
+    protobuf
+    qt6.wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qt6.qttools
+    qt6.qtbase
+    qt6.qtsvg
+    libarchive
+    pcre2
+    protobuf
+    gperftools  # provides tcmalloc
+    blas
+  ];
+
+  cmakeFlags = [
+    "-DBLAS_LIBRARIES=-lblas"
+    "-DCBLAS_LIBRARIES=-lcblas"
+  ];
+
+  passthru.tests = {
+    cli-translate = runCommand "${finalAttrs.pname}-test-cli-translate" {
+      nativeBuildInputs = [
+        translatelocally
+        translatelocally-models.fr-en-tiny
+      ];
+    } ''
+      export LC_ALL="C.UTF-8"
+      echo "Bonjour" | translateLocally -m fr-en-tiny > $out
+      diff "$out" <(echo "Hello")
+    '';
+  };
+
+  meta = with lib; {
+    mainProgram = "translateLocally";
+    homepage = "https://translatelocally.com/";
+    description = "Fast and secure translation on your local machine, powered by marian and Bergamot.";
+    license = licenses.mit;
+    maintainers = with maintainers; [ pacien ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/translatelocally/version_without_git.patch b/nixpkgs/pkgs/applications/misc/translatelocally/version_without_git.patch
new file mode 100644
index 000000000000..9d7e618e3e67
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/translatelocally/version_without_git.patch
@@ -0,0 +1,66 @@
+Submodule 3rd_party/bergamot-translator contains modified content
+Submodule 3rd_party/marian-dev contains modified content
+diff --git a/3rd_party/bergamot-translator/3rd_party/marian-dev/cmake/GetVersionFromFile.cmake b/3rd_party/bergamot-translator/3rd_party/marian-dev/cmake/GetVersionFromFile.cmake
+index 31352565..d90a366d 100644
+--- a/3rd_party/bergamot-translator/3rd_party/marian-dev/cmake/GetVersionFromFile.cmake
++++ b/3rd_party/bergamot-translator/3rd_party/marian-dev/cmake/GetVersionFromFile.cmake
+@@ -22,10 +22,8 @@ else()
+ endif()
+ 
+ # Get current commit SHA from git
+-execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  OUTPUT_VARIABLE PROJECT_VERSION_GIT_SHA
+-  OUTPUT_STRIP_TRAILING_WHITESPACE)
++# (dummy value for nix package without the .git)
++set(PROJECT_VERSION_GIT_SHA 000000000000)
+ 
+ # Get partial versions into a list
+ string(REGEX MATCHALL "-.*$|[0-9]+" PROJECT_PARTIAL_VERSION_LIST
+diff --git a/3rd_party/bergamot-translator/3rd_party/marian-dev/src/CMakeLists.txt b/3rd_party/bergamot-translator/3rd_party/marian-dev/src/CMakeLists.txt
+index 76aa0e2b..ca982bd3 100644
+--- a/3rd_party/bergamot-translator/3rd_party/marian-dev/src/CMakeLists.txt
++++ b/3rd_party/bergamot-translator/3rd_party/marian-dev/src/CMakeLists.txt
+@@ -149,23 +149,8 @@ target_compile_options(marian PRIVATE ${ALL_WARNINGS})
+ #
+ # We set MARIAN_GIT_DIR to the appropriate path, depending on whether
+ # ${CMAKE_CURRENT_SOURCE_DIR}/../.git is a directory or file.
+-set(MARIAN_GIT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../.git)
+-if(NOT IS_DIRECTORY ${MARIAN_GIT_DIR}) # i.e., it's a submodule
+-  file(READ ${MARIAN_GIT_DIR} MARIAN_GIT_DIR)
+-  string(REGEX REPLACE "gitdir: (.*)\n" "\\1" MARIAN_GIT_DIR ${MARIAN_GIT_DIR})
+-  if(NOT IS_ABSOLUTE ${MARIAN_GIT_DIR})
+-    get_filename_component(MARIAN_GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../${MARIAN_GIT_DIR}" ABSOLUTE)
+-  endif()
+-endif(NOT IS_DIRECTORY ${MARIAN_GIT_DIR})
+-
+-add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/common/git_revision.h
+-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+-  COMMAND git log -1 --pretty=format:\#define\ GIT_REVISION\ \"\%h\ \%ai\" > ${CMAKE_CURRENT_SOURCE_DIR}/common/git_revision.h
+-  DEPENDS ${MARIAN_GIT_DIR}/logs/HEAD
+-  VERBATIM
+-)
+-add_custom_target(marian_version DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/common/git_revision.h)
+-add_dependencies(marian marian_version) # marian must depend on it so that it gets created first
++# (generated by nix package instead)
++
+ # make sure all local dependencies are installed first before this is built
+ add_dependencies(marian 3rd_party_installs)
+ 
+diff --git a/cmake/GetVersionFromFile.cmake b/cmake/GetVersionFromFile.cmake
+index 83b7975..71cd861 100644
+--- a/cmake/GetVersionFromFile.cmake
++++ b/cmake/GetVersionFromFile.cmake
+@@ -23,10 +23,8 @@ else()
+ endif()
+ 
+ # Get current commit SHA from git
+-execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
+-  WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+-  OUTPUT_VARIABLE PROJECT_VERSION_GIT_SHA
+-  OUTPUT_STRIP_TRAILING_WHITESPACE)
++# (dummy value for nix package without the .git)
++set(PROJECT_VERSION_GIT_SHA 000000000000)
+ 
+ # Get partial versions into a list
+ string(REGEX MATCHALL "-.*$|[0-9]+" PROJECT_PARTIAL_VERSION_LIST
diff --git a/nixpkgs/pkgs/applications/misc/trenchbroom/default.nix b/nixpkgs/pkgs/applications/misc/trenchbroom/default.nix
new file mode 100644
index 000000000000..83db22260d83
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/trenchbroom/default.nix
@@ -0,0 +1,126 @@
+{ lib, stdenv, fetchFromGitHub, writeText
+, cmake, ninja, curl, git, pandoc, pkg-config, unzip, zip
+, libGL, libGLU, freeimage, freetype, assimp
+, catch2, fmt, glew, miniz, tinyxml-2, xorg
+, qtbase, wrapQtAppsHook
+, copyDesktopItems, makeDesktopItem
+}:
+
+stdenv.mkDerivation rec {
+  pname = "TrenchBroom";
+  version = "2023.1";
+
+  src = fetchFromGitHub {
+    owner = "TrenchBroom";
+    repo = "TrenchBroom";
+    rev = "v${version}";
+    sha256 = "sha256-62xcFKSqxPS+J54+kLo/hewM+Wu/rVBGD8oiECDCJpA=";
+    fetchSubmodules = true;
+  };
+  # Manually simulate a vcpkg installation so that it can link the libraries
+  # properly.
+  postUnpack =
+    let
+      vcpkg_target = "x64-linux";
+
+      vcpkg_pkgs = [
+        "assimp"
+        "catch2"
+        "fmt"
+        "freeimage"
+        "freetype"
+        "glew"
+        "miniz"
+        "tinyxml2"
+      ];
+
+      updates_vcpkg_file = writeText "update_vcpkg_trenchbroom" (
+        lib.concatMapStringsSep "\n" (name: ''
+          Package : ${name}
+          Architecture : ${vcpkg_target}
+          Version : 1.0
+          Status : is installed
+        '') vcpkg_pkgs);
+    in ''
+      export VCPKG_ROOT="$TMP/vcpkg"
+
+      mkdir -p $VCPKG_ROOT/.vcpkg-root
+      mkdir -p $VCPKG_ROOT/installed/${vcpkg_target}/lib
+      mkdir -p $VCPKG_ROOT/installed/vcpkg/updates
+      ln -s ${updates_vcpkg_file} $VCPKG_ROOT/installed/vcpkg/status
+      mkdir -p $VCPKG_ROOT/installed/vcpkg/info
+      ${lib.concatMapStrings (name: ''
+        touch $VCPKG_ROOT/installed/vcpkg/info/${name}_1.0_${vcpkg_target}.list
+      '') vcpkg_pkgs}
+
+      ln -s ${assimp.lib}/lib/lib* $VCPKG_ROOT/installed/${vcpkg_target}/lib/
+      ln -s ${catch2}/lib/lib* $VCPKG_ROOT/installed/${vcpkg_target}/lib/
+      ln -s ${fmt}/lib/lib* $VCPKG_ROOT/installed/${vcpkg_target}/lib/
+      ln -s ${freeimage}/lib/lib* $VCPKG_ROOT/installed/${vcpkg_target}/lib/
+      ln -s ${freetype}/lib/lib* $VCPKG_ROOT/installed/${vcpkg_target}/lib/
+      ln -s ${glew.out}/lib/lib* $VCPKG_ROOT/installed/${vcpkg_target}/lib/
+      ln -s ${miniz}/lib/lib* $VCPKG_ROOT/installed/${vcpkg_target}/lib/
+      ln -s ${tinyxml-2}/lib/lib* $VCPKG_ROOT/installed/${vcpkg_target}/lib/
+    '';
+  postPatch = ''
+    substituteInPlace common/src/Version.h.in \
+      --subst-var-by APP_VERSION_YEAR ${lib.versions.major version} \
+      --subst-var-by APP_VERSION_NUMBER ${lib.versions.minor version} \
+      --subst-var-by GIT_DESCRIBE v${version}
+    substituteInPlace app/CMakeLists.txt \
+      --replace 'set(CPACK_PACKAGING_INSTALL_PREFIX "/usr")' 'set(CPACK_PACKAGING_INSTALL_PREFIX "'$out'")'
+  '';
+
+  nativeBuildInputs = [ cmake ninja curl git pandoc wrapQtAppsHook copyDesktopItems pkg-config unzip zip ];
+  buildInputs = [
+    libGL libGLU xorg.libXxf86vm xorg.libSM
+    freeimage freetype qtbase catch2 fmt
+    glew miniz tinyxml-2 assimp
+  ];
+  QT_PLUGIN_PATH = "${qtbase}/${qtbase.qtPluginPrefix}";
+  QT_QPA_PLATFORM = "offscreen";
+
+  cmakeFlags = [
+    "-DCMAKE_MAKE_PROGRAM=ninja"
+    "-DCMAKE_TOOLCHAIN_FILE=vcpkg/scripts/buildsystems/vcpkg.cmake"
+    "-DVCPKG_MANIFEST_INSTALL=OFF"
+    # https://github.com/TrenchBroom/TrenchBroom/issues/4002#issuecomment-1125390780
+    "-DCMAKE_PREFIX_PATH=cmake/packages"
+  ];
+  ninjaFlags = [
+    "TrenchBroom"
+  ];
+
+  postInstall = ''
+    pushd $out/share/TrenchBroom/icons
+
+    for F in icon_*.png; do
+      SIZE=$(echo $F|sed -e s/icon_// -e s/.png//)
+      DIR=$out/share/icons/hicolor/$SIZE"x"$SIZE/apps
+      mkdir -p $DIR
+      ln -s ../../../../TrenchBroom/icons/$F $DIR/trenchbroom.png
+    done
+
+    popd
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "TrenchBroom";
+      desktopName = "TrenchBroom level editor";
+      icon = "trenchbroom";
+      comment = meta.description;
+      categories = [ "Development" ];
+      exec = "trenchbroom";
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://trenchbroom.github.io/";
+    changelog = "https://github.com/TrenchBroom/TrenchBroom/releases/tag/v${version}";
+    description = "Level editor for Quake-engine based games";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ astro ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tsukae/default.nix b/nixpkgs/pkgs/applications/misc/tsukae/default.nix
new file mode 100644
index 000000000000..fcd211769677
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tsukae/default.nix
@@ -0,0 +1,23 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+  pname = "tsukae";
+  version = "unstable-2021-04-19";
+
+  src = fetchFromGitHub {
+    owner = "irevenko";
+    repo = pname;
+    rev = "8111dddd67e4b4f83ae4bca7d7305f6dc64e77cd";
+    sha256 = "sha256-1y/WYLW6/HMGmuaX2wOlQbwYn0LcgQCMb4qw8BtCgxQ=";
+  };
+
+  vendorHash = "sha256-Q0WOzyJGnTXTmj7ZPKyVSnWuWb4bbDjDpgftQ1Opf/I=";
+
+  meta = with lib; {
+    description = "Show off your most used shell commands.";
+    homepage = "https://github.com/irevenko/tsukae";
+    license = licenses.mit;
+    mainProgram = "tsukae";
+    maintainers = with maintainers; [ l3af ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ttdl/default.nix b/nixpkgs/pkgs/applications/misc/ttdl/default.nix
new file mode 100644
index 000000000000..cc8cb96f91cd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ttdl/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ttdl";
+  version = "4.2.0";
+
+  src = fetchFromGitHub {
+    owner = "VladimirMarkelov";
+    repo = "ttdl";
+    rev = "v${version}";
+    sha256 = "sha256-5OYOF8SvjPn/gZf/utcpv1zVvVbB1HeB1mkMiJtBjOQ=";
+  };
+
+  cargoHash = "sha256-MLypY7Dbr1/4hJ2UYmNOVp0nNWrq3DDTEidgkL0X0AU=";
+
+  meta = with lib; {
+    description = "A CLI tool to manage todo lists in todo.txt format";
+    homepage = "https://github.com/VladimirMarkelov/ttdl";
+    changelog = "https://github.com/VladimirMarkelov/ttdl/blob/v${version}/changelog";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ _3JlOy-PYCCKUi ];
+    mainProgram = "ttdl";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tthsum/default.nix b/nixpkgs/pkgs/applications/misc/tthsum/default.nix
new file mode 100644
index 000000000000..2c41c1c300f7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tthsum/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+  pname = "tthsum";
+  version = "1.3.2";
+
+  src = fetchurl {
+    url = "http://tthsum.devs.nu/pkg/tthsum-${version}.tar.bz2";
+    sha256 = "0z6jq8lbg9rasv98kxfs56936dgpgzsg3yc9k52878qfw1l2bp59";
+  };
+
+  installPhase = ''
+    mkdir -p $out/bin $out/share/man/man1
+    cp share/tthsum.1.gz $out/share/man/man1
+    cp obj-unix/tthsum $out/bin
+  '';
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "An md5sum-alike program that works with Tiger/THEX hashes";
+    longDescription = ''
+      tthsum generates or checks TTH checksums (root of the THEX hash
+      tree). The Merkle Hash Tree, invented by Ralph Merkle, is a hash
+      construct that exhibits desirable properties for verifying the
+      integrity of files and file subranges in an incremental or
+      out-of-order fashion. tthsum uses the Tiger hash algorithm for
+      both the internal and the leaf nodes.
+
+      The specification of the Tiger hash algorithm is at:
+      http://www.cs.technion.ac.il/~biham/Reports/Tiger/
+
+      The specification of the THEX algorithm is at:
+      http://adc.sourceforge.net/draft-jchapweske-thex-02.html
+    '';
+    homepage = "http://tthsum.devs.nu/";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+    mainProgram = "tthsum";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tty-share/default.nix b/nixpkgs/pkgs/applications/misc/tty-share/default.nix
new file mode 100644
index 000000000000..7f2fe8c162a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tty-share/default.nix
@@ -0,0 +1,26 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tty-share";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner = "elisescu";
+    repo = "tty-share";
+    rev = "v${version}";
+    sha256 = "sha256-7rNSBpiZslUGWw0P/Q1zRtNxo9MN8Vq6hG8pD6bJIsA=";
+  };
+
+  # Upstream has a `./vendor` directory with all deps which we rely upon.
+  vendorHash = null;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  meta = with lib; {
+    homepage = "https://tty-share.com";
+    description = "Share terminal via browser for remote work or shared sessions";
+    license = licenses.mit;
+    maintainers = with maintainers; [ andys8 ];
+    mainProgram = "tty-share";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tty-solitaire/default.nix b/nixpkgs/pkgs/applications/misc/tty-solitaire/default.nix
new file mode 100644
index 000000000000..137e5653d74f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tty-solitaire/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "tty-solitaire";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "mpereira";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-zMLNWJieHxHALFQoSkdAxGbUBGuZnznLX86lI3P21F0=";
+  };
+
+  patches = [
+    # Patch pending upstream inclusion to support ncurses-6.3:
+    #  https://github.com/mpereira/tty-solitaire/pull/61
+    (fetchpatch {
+      name = "ncurses-6.3.patch";
+      url = "https://github.com/mpereira/tty-solitaire/commit/4d066c564d086ce272b78cb8f80717a7fb83c261.patch";
+      sha256 = "sha256-E1XVG0be6JH3K1y7UPap93s8xk8Nk0dKLdKHcJ7mA8E=";
+    })
+  ];
+
+  postPatch = ''
+    sed -i -e '/^CFLAGS *?= *-g *$/d' Makefile
+  '';
+
+  buildInputs = [ ncurses ];
+
+  makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" "PREFIX=${placeholder "out"}" ];
+
+  meta = with lib; {
+    description = "Klondike Solitaire in your ncurses terminal";
+    license = licenses.mit;
+    homepage = "https://github.com/mpereira/tty-solitaire";
+    platforms = ncurses.meta.platforms;
+    maintainers = [ maintainers.AndersonTorres ];
+    mainProgram = "ttysolitaire";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ttyper/default.nix b/nixpkgs/pkgs/applications/misc/ttyper/default.nix
new file mode 100644
index 000000000000..de72638d19ff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ttyper/default.nix
@@ -0,0 +1,24 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ttyper";
+  version = "1.4.1";
+
+  src = fetchFromGitHub {
+    owner = "max-niederman";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-IvAx65b2rGsMdDUhRxTx8cyqnG7oxC+MseCFIJil1e0=";
+  };
+
+  cargoHash = "sha256-o3J2bEAV5NnWKFadJdSGTqUS8K2qpBKPQz6xAbfLtg4=";
+
+  meta = with lib; {
+    description = "Terminal-based typing test";
+    homepage = "https://github.com/max-niederman/ttyper";
+    changelog = "https://github.com/max-niederman/ttyper/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda max-niederman ];
+    mainProgram = "ttyper";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tuba/default.nix b/nixpkgs/pkgs/applications/misc/tuba/default.nix
new file mode 100644
index 000000000000..9c70ab85ae03
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tuba/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, vala
+, meson
+, ninja
+, python3
+, pkg-config
+, wrapGAppsHook4
+, desktop-file-utils
+, gtk4
+, libadwaita
+, json-glib
+, glib
+, glib-networking
+, gobject-introspection
+, gtksourceview5
+, libxml2
+, libgee
+, libsoup_3
+, libsecret
+, libwebp
+, libspelling
+, gst_all_1
+, nix-update-script
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tuba";
+  version = "0.6.3";
+  src = fetchFromGitHub {
+    owner = "GeopJr";
+    repo = "Tuba";
+    rev = "v${version}";
+    hash = "sha256-AdUXKiTMC/0R4RI9I9Y/x0mNwhtUEIBke4Mm9lu9CX8=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    vala
+    python3
+    wrapGAppsHook4
+    desktop-file-utils
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    glib
+    glib-networking
+    gtksourceview5
+    json-glib
+    libxml2
+    libgee
+    libsoup_3
+    gtk4
+    libadwaita
+    libsecret
+    libwebp
+    libspelling
+  ] ++ (with gst_all_1; [
+    gstreamer
+    gst-libav
+    gst-plugins-base
+    (gst-plugins-good.override { gtkSupport = true; })
+    gst-plugins-bad
+  ]);
+
+  env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=int-conversion";
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+  meta = with lib; {
+    description = "Browse the Fediverse";
+    homepage = "https://tuba.geopjr.dev/";
+    mainProgram = "dev.geopjr.Tuba";
+    license = licenses.gpl3Only;
+    changelog = "https://github.com/GeopJr/Tuba/releases/tag/v${version}";
+    maintainers = with maintainers; [ chuangzhu aleksana ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tuckr/default.nix b/nixpkgs/pkgs/applications/misc/tuckr/default.nix
new file mode 100644
index 000000000000..f61f7bea912d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tuckr/default.nix
@@ -0,0 +1,26 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tuckr";
+  version = "0.8.0";
+
+  src = fetchFromGitHub {
+    owner = "RaphGL";
+    repo = "Tuckr";
+    rev = version;
+    hash = "sha256-S4mHNCyK7WGYRBckxQkwA3+eu7QhUyKkOZ/KqhMJf+s=";
+  };
+
+  cargoHash = "sha256-aUhiMJUKV+Da3WLUY9Jr3oDB8yqcUm0pP05yKaITjM0=";
+
+  doCheck = false; # test result: FAILED. 5 passed; 3 failed;
+
+  meta = with lib; {
+    description = "A super powered replacement for GNU Stow";
+    homepage = "https://github.com/RaphGL/Tuckr";
+    changelog = "https://github.com/RaphGL/Tuckr/releases/tag/${version}";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ mimame ];
+    mainProgram = "tuckr";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tuhi/default.nix b/nixpkgs/pkgs/applications/misc/tuhi/default.nix
new file mode 100644
index 000000000000..1b26f455649a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tuhi/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, pkg-config
+, python3Packages
+, meson
+, ninja
+, appstream-glib
+, desktop-file-utils
+, glib
+, gtk3
+, gobject-introspection
+, wrapGAppsHook
+, fetchFromGitHub
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "tuhi";
+  version = "0.6";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "tuhiproject";
+    repo = "tuhi";
+    rev = version;
+    sha256 = "sha256-NwyG2KhOrAKRewgmU23OMO0+A9SjkQZsDL4SGnLVCvo=";
+  };
+
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  nativeBuildInputs = [
+    pkg-config meson ninja
+    appstream-glib desktop-file-utils
+    wrapGAppsHook
+    gobject-introspection
+  ];
+  buildInputs = [
+    gtk3
+    glib
+  ];
+  nativeCheckInputs = with python3Packages; [ flake8 pytest ];
+  propagatedBuildInputs = with python3Packages; [
+    svgwrite pyxdg pycairo pygobject3 setuptools-scm
+  ];
+
+  strictDeps = false;
+  preConfigure = ''
+    substituteInPlace meson_install.sh \
+      --replace "/usr/bin/env sh" "sh"
+  '';
+  postFixup = ''
+    wrapPythonProgramsIn $out/libexec "$out $pythonPath"
+  '';
+
+  meta = with lib; {
+    description = "DBus daemon to access Wacom SmartPad devices";
+    homepage = "https://github.com/tuhiproject/tuhi";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ lammermann ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tui-journal/default.nix b/nixpkgs/pkgs/applications/misc/tui-journal/default.nix
new file mode 100644
index 000000000000..639c46b9bd37
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tui-journal/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, libgit2
+, openssl
+, zlib
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "tui-journal";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "AmmarAbouZor";
+    repo = "tui-journal";
+    rev = "v${version}";
+    hash = "sha256-qHNB+jRLQoiHPuTblpCHg2+6e5j8W6YPsuygRlTidtE=";
+  };
+
+  cargoHash = "sha256-T+fXSca1u9+c305yuKOF+soxnSZ1YbBs57wco5TLpQw=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    libgit2
+    openssl
+    zlib
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.AppKit
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Your journal app if you live in a terminal";
+    homepage = "https://github.com/AmmarAbouZor/tui-journal";
+    changelog = "https://github.com/AmmarAbouZor/tui-journal/blob/${src.rev}/CHANGELOG.ron";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "tjournal";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tuir/default.nix b/nixpkgs/pkgs/applications/misc/tuir/default.nix
new file mode 100644
index 000000000000..d4188829d40b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tuir/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitLab, python3Packages }:
+
+with python3Packages;
+buildPythonApplication rec {
+  pname = "tuir";
+  version = "1.29.0";
+
+  src = fetchFromGitLab {
+    owner = "ajak";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1fqp6bvq8kzdsf3nna4mn1phdcixpx76bya43xrivxjbzsfl59ib";
+  };
+
+  # Tests try to access network
+  doCheck = false;
+
+  checkPhase = ''
+    py.test
+  '';
+
+  nativeCheckInputs = [ coverage coveralls docopt mock pylint pytest vcrpy ];
+
+  propagatedBuildInputs = [ beautifulsoup4 decorator kitchen requests six ];
+
+  meta = with lib; {
+    description = "Browse Reddit from your Terminal (fork of rtv)";
+    homepage = "https://gitlab.com/ajak/tuir/";
+    license = licenses.mit;
+    maintainers = with maintainers; [ Br1ght0ne matthiasbeyer ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tumpa/default.nix b/nixpkgs/pkgs/applications/misc/tumpa/default.nix
new file mode 100644
index 000000000000..cc73b7fa6901
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tumpa/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, python3
+, fetchFromGitHub
+, wrapQtAppsHook
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "tumpa";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "kushaldas";
+    repo = "tumpa";
+    rev = "v${version}";
+    hash = "sha256-sT+IasupBxkfYoOULRvG429ZHA94uAJoYfFd1Whs0J4=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    setuptools
+    johnnycanencrypt
+    pyside2
+  ];
+
+  nativeBuildInputs = [
+    wrapQtAppsHook
+  ];
+
+  dontWrapQtApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "OpenPGP key creation and smartcard access";
+    homepage = "https://github.com/kushaldas/tumpa";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ _0x4A6F ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tut/default.nix b/nixpkgs/pkgs/applications/misc/tut/default.nix
new file mode 100644
index 000000000000..85f2768cc715
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tut/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "tut";
+  version = "2.0.1";
+
+  src = fetchFromGitHub {
+    owner = "RasmusLindroth";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-AtwwLRZx9O8IWPFgFI/ZK0tbeshEmaKpTQxA1PepnWM=";
+  };
+
+  vendorHash = "sha256-gPF4XrUqDDJCCY1zrUr3AXDG0uoADR8LBxRP4yolcug=";
+
+  meta = with lib; {
+    description = "A TUI for Mastodon with vim inspired keys";
+    homepage = "https://github.com/RasmusLindroth/tut";
+    license = licenses.mit;
+    maintainers = with maintainers; [ equirosa ];
+    mainProgram = "tut";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tuxclocker/default.nix b/nixpkgs/pkgs/applications/misc/tuxclocker/default.nix
new file mode 100644
index 000000000000..7a47e571cee0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tuxclocker/default.nix
@@ -0,0 +1,71 @@
+{ lib
+, stdenv
+, boost
+, fetchFromGitHub
+, git
+, makeWrapper
+, meson
+, ninja
+, pkg-config
+, python3
+, qtbase
+, qtcharts
+, tuxclocker-plugins
+, tuxclocker-without-unfree
+, wrapQtAppsHook
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "tuxclocker";
+  version = "1.5.1";
+
+  src = fetchFromGitHub {
+    owner = "Lurkki14";
+    repo = "tuxclocker";
+    fetchSubmodules = true;
+    rev = finalAttrs.version;
+    hash = "sha256-QLKLqTCpVMWxlDINa8Bo1vgCDcjwovoaXUs/PdMnxv0=";
+  };
+
+  # Meson doesn't find boost without these
+  BOOST_INCLUDEDIR = "${lib.getDev boost}/include";
+  BOOST_LIBRARYDIR = "${lib.getLib boost}/lib";
+
+  nativeBuildInputs = [
+    git
+    makeWrapper
+    meson
+    ninja
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    boost
+    qtbase
+    qtcharts
+  ];
+
+  postInstall = ''
+    wrapProgram "$out/bin/tuxclockerd" \
+      --prefix "TEXTDOMAINDIR" : "${tuxclocker-plugins}/share/locale" \
+      --prefix "TUXCLOCKER_PLUGIN_PATH" : "${tuxclocker-plugins}/lib/tuxclocker/plugins" \
+      --prefix "PYTHONPATH" : "${python3.pkgs.hwdata}/${python3.sitePackages}"
+  '';
+
+  mesonFlags = [
+    "-Dplugins=false"
+  ];
+
+  passthru.tests = {
+    inherit tuxclocker-without-unfree;
+  };
+
+  meta = with lib; {
+    description = "Qt overclocking tool for GNU/Linux";
+    homepage = "https://github.com/Lurkki14/tuxclocker";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ lurkki ];
+    platforms = platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/tvbrowser/default.nix b/nixpkgs/pkgs/applications/misc/tvbrowser/default.nix
new file mode 100644
index 000000000000..384b5362a4ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tvbrowser/default.nix
@@ -0,0 +1,87 @@
+{ lib
+, fetchurl
+, stdenv
+, fetchzip
+, ant
+, jdk
+, makeWrapper
+, callPackage
+}:
+
+let
+  minimalJavaVersion = "11";
+
+  newsPlugin = fetchurl {
+    url = "https://www.tvbrowser.org/data/uploads/1372016422809_543/NewsPlugin.jar";
+    hash = "sha256-5XoypuMd2AFBE2SJ6EdECuvq6D81HLLuu9UoA9kcKAM=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "tvbrowser";
+  version = "4.2.7";
+
+  src = fetchzip {
+    url = "mirror://sourceforge/${pname}/TV-Browser%20Releases%20%28Java%20${minimalJavaVersion}%20and%20higher%29/${version}/${pname}_${version}_src.zip";
+    hash = "sha256-dmNfI6T0MU7UtMH+C/2hiAeDwZlFCB4JofQViZezoqI=";
+  };
+
+  nativeBuildInputs = [ ant jdk makeWrapper ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    ant runtime-linux -Dnewsplugin.url=file://${newsPlugin}
+    ant tvbrowser-desktop-entry
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/tvbrowser
+    cp -R runtime/tvbrowser_linux/* $out/share/tvbrowser
+
+    mkdir -p $out/share/applications
+    mv -t $out/share/applications $out/share/tvbrowser/tvbrowser.desktop
+    sed -e 's|=imgs/|='$out'/share/tvbrowser/imgs/|'  \
+        -e 's|=tvbrowser.sh|='$out'/bin/tvbrowser|'  \
+        -i $out/share/applications/tvbrowser.desktop
+
+    for i in 16 32 48 128; do
+      mkdir -p $out/share/icons/hicolor/''${i}x''${i}/apps
+      ln -s $out/share/tvbrowser/imgs/tvbrowser$i.png  \
+          $out/share/icons/hicolor/''${i}x''${i}/apps/tvbrowser.png
+    done
+
+    mkdir -p $out/bin
+    makeWrapper  \
+        $out/share/tvbrowser/tvbrowser.sh  \
+        $out/bin/tvbrowser  \
+        --prefix PATH : ${jdk}/bin  \
+        --prefix XDG_DATA_DIRS : $out/share  \
+        --set PROGRAM_DIR $out/share/tvbrowser
+
+    runHook postInstall
+  '';
+
+  passthru.tests.startwindow = callPackage ./test.nix {};
+
+  meta = with lib; {
+    description = "Electronic TV Program Guide";
+    downloadPage = "https://www.tvbrowser.org/index.php?id=tv-browser";
+    homepage = "https://www.tvbrowser.org/";
+    changelog = "https://www.tvbrowser.org/index.php?id=news";
+    sourceProvenance = with sourceTypes; [ binaryBytecode fromSource ];
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    mainProgram = "tvbrowser";
+    maintainers = with maintainers; [ yarny ];
+    longDescription = ''
+      TV-Browser shows TV program data arranged like in printed
+      TV programs after downloading it from the internet.
+      Plugins are used to download program data
+      and to provide additional functionality.
+    '';
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tvbrowser/test.nix b/nixpkgs/pkgs/applications/misc/tvbrowser/test.nix
new file mode 100644
index 000000000000..bee843ccbecc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tvbrowser/test.nix
@@ -0,0 +1,40 @@
+{ lib
+, xvfb-run
+, tvbrowser
+, runCommand
+, writeShellApplication
+, xorg
+}:
+
+let
+  testScript = writeShellApplication {
+    name = "tvbrowser-test-script";
+    runtimeInputs = [ xorg.xwininfo tvbrowser ];
+    text = ''
+      function find_tvbrowser_windows {
+        for window_name in java tvbrowser-TVBrowser 'Setup assistant' ; do
+          grep -q "$window_name" "$1"  ||  return 1
+        done
+      }
+      tvbrowser &
+      for _ in {0..900} ; do
+        xwininfo -root -tree  \
+            | sed 's/.*0x[0-9a-f]* \"\([^\"]*\)\".*/\1/; t; d'  \
+            | tee window-names
+        echo
+        if find_tvbrowser_windows window-names ; then
+          break
+        fi
+        sleep 1
+      done
+      find_tvbrowser_windows window-names
+    '';
+  };
+in
+runCommand
+"tvbrowser-test"
+{ buildInputs = [ xvfb-run ]; }
+''
+  HOME=$PWD xvfb-run ${lib.getExe testScript}
+  touch ${placeholder "out"}
+''
diff --git a/nixpkgs/pkgs/applications/misc/twitch-chat-downloader/default.nix b/nixpkgs/pkgs/applications/misc/twitch-chat-downloader/default.nix
new file mode 100644
index 000000000000..61fb05250712
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/twitch-chat-downloader/default.nix
@@ -0,0 +1,38 @@
+{ lib
+, buildPythonApplication
+, fetchPypi
+, iso8601
+, progressbar2
+, requests
+}:
+
+buildPythonApplication rec {
+  pname = "twitch-chat-downloader";
+  version = "2.5.3";
+
+  # NOTE: Using maintained fork because upstream has stopped working, and it has
+  # not been updated in a while.
+  # https://github.com/PetterKraabol/Twitch-Chat-Downloader/issues/142
+  src = fetchPypi {
+    inherit version;
+    pname = "tdh-tcd";
+    sha256 = "sha256-dvj0HoF/2n5aQGMOD8UYY4EZegQwThPy1XJFvXyRT4Q=";
+  };
+
+  propagatedBuildInputs = [
+    iso8601
+    progressbar2
+    requests
+  ];
+
+  doCheck = false; # no tests
+
+  pythonImportsCheck = [ "tcd" ];
+
+  meta = with lib; {
+    description = "Twitch Chat Downloader";
+    homepage = "https://github.com/TheDrHax/Twitch-Chat-Downloader";
+    license = licenses.mit;
+    maintainers = with maintainers; [ marsam ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/twmn/default.nix b/nixpkgs/pkgs/applications/misc/twmn/default.nix
new file mode 100644
index 000000000000..d4b4d1d9d803
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/twmn/default.nix
@@ -0,0 +1,37 @@
+{ lib, mkDerivation, fetchFromGitHub, qtbase, qtx11extras, qmake, pkg-config, boost }:
+
+mkDerivation {
+  pname = "twmn";
+  version = "unstable-2018-10-01";
+
+  src = fetchFromGitHub {
+    owner = "sboli";
+    repo = "twmn";
+    rev = "80f48834ef1a07087505b82358308ee2374b6dfb";
+    sha256 = "0mpjvp800x07lp9i3hfcc5f4bqj1fj4w3dyr0zwaxc6wqmm0fdqz";
+  };
+
+  nativeBuildInputs = [ pkg-config qmake ];
+  buildInputs = [ qtbase qtx11extras boost ];
+
+  postPatch = ''
+    sed -i s/-Werror// twmnd/twmnd.pro
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p "$out/bin"
+    cp bin/* "$out/bin"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A notification system for tiling window managers";
+    homepage = "https://github.com/sboli/twmn";
+    platforms = with lib.platforms; linux;
+    maintainers = [ lib.maintainers.matejc ];
+    license = lib.licenses.lgpl3;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/typer/default.nix b/nixpkgs/pkgs/applications/misc/typer/default.nix
new file mode 100644
index 000000000000..8d41e2168783
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/typer/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule {
+  pname = "typer";
+  version = "unstable-2023-02-08";
+
+  src = fetchFromGitHub {
+    owner = "maaslalani";
+    repo = "typer";
+    rev = "02aa80b3be8a6c2c9d08d9a56b3fe784adf00933";
+    hash = "sha256-J3wTqWxHEQz1AAt7DfUmpgc7wmfILBtyHuDrmqN96fI=";
+  };
+
+  vendorHash = "sha256-t4zim6WhqGAf1zHmmbJbpVvQcE/aoNL7ZLdjU7f3rp8=";
+
+  ldflags = [ "-s" "-w" ];
+
+  meta = with lib; {
+    description = "Typing test in your terminal";
+    homepage = "https://github.com/maaslalani/typer";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "typer";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/typioca/default.nix b/nixpkgs/pkgs/applications/misc/typioca/default.nix
new file mode 100644
index 000000000000..70becdc143bd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/typioca/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+, testers
+, typioca
+}:
+
+buildGoModule rec {
+  pname = "typioca";
+  version = "2.10.0";
+
+  src = fetchFromGitHub {
+    owner = "bloznelis";
+    repo = "typioca";
+    rev = version;
+    hash = "sha256-D6I1r+8cvUerqXR2VyBL33lapWAs5Cl5yvYOsmUBnHo=";
+  };
+
+  vendorHash = "sha256-j/nyAHNwUoNkcdNJqcaUuhQk5a2VHQw/XgYIoTR9ctQ=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=github.com/bloznelis/typioca/cmd.Version=${version}"
+  ];
+
+  passthru.tests = {
+    version = testers.testVersion {
+      package = typioca;
+    };
+  };
+
+  meta = with lib; {
+    description = "Cozy typing speed tester in terminal";
+    homepage = "https://github.com/bloznelis/typioca";
+    changelog = "https://github.com/bloznelis/typioca/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "typioca";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/tzupdate/default.nix b/nixpkgs/pkgs/applications/misc/tzupdate/default.nix
new file mode 100644
index 000000000000..7c49696141c6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/tzupdate/default.nix
@@ -0,0 +1,23 @@
+{ lib, python3, fetchPypi }:
+
+let
+  inherit (python3.pkgs) buildPythonApplication requests;
+in
+buildPythonApplication rec {
+  pname = "tzupdate";
+  version = "2.1.0";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "5b55795c390e4ccc90e649c8cc387447daaf30a21d68f7196b49824cbcba8adc";
+  };
+
+  propagatedBuildInputs = [ requests ];
+
+  meta = with lib; {
+    description = "Update timezone information based on geoip";
+    homepage = "https://github.com/cdown/tzupdate";
+    maintainers = [ maintainers.michaelpj ];
+    license = licenses.unlicense;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ubpm/default.nix b/nixpkgs/pkgs/applications/misc/ubpm/default.nix
new file mode 100644
index 000000000000..6e0d7f7f25f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ubpm/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, lib, fetchFromGitea, qmake, qttools, qtbase, qtserialport
+, qtconnectivity, qtcharts, wrapQtAppsHook }:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "ubpm";
+  version = "1.7.3";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "LazyT";
+    repo = "ubpm";
+    rev = finalAttrs.version;
+    hash = "sha256-6lvDSU0ssfs71xrac6R6qlmE0QyVcAMTUf0xmJPVzhY=";
+  };
+
+  postPatch = ''
+    substituteInPlace sources/mainapp/mainapp.pro \
+      --replace 'INSTALLDIR = /tmp/ubpm.AppDir' "INSTALLDIR = $out" \
+      --replace '/usr/bin' '/bin' \
+      --replace 'INSTALLS += target translations themes devices help lin' 'INSTALLS += target translations themes devices help'
+  '';
+
+  preConfigure = ''
+    cd ./sources/
+  '';
+
+  postInstall = ''
+    install -Dm644 ../package/lin/ubpm.desktop -t $out/share/applications/
+    install -Dm644 ../package/lin/de.lazyt.ubpm.appdata.xml -t $out/share/metainfo/
+    install -Dm644 ../sources/mainapp/res/ico/app.png $out/share/icons/hicolor/256x256/apps/ubpm.png
+  '';
+
+  postFixup = ''
+    wrapQtApp $out/bin/ubpm
+  '';
+
+  nativeBuildInputs = [ qmake qttools wrapQtAppsHook ];
+
+  # *.so plugins are being wrapped automatically which breaks them
+  dontWrapQtApps = true;
+
+  buildInputs = [ qtbase qtserialport qtconnectivity qtcharts ];
+
+  meta = with lib; {
+    homepage = "https://codeberg.org/LazyT/ubpm";
+    description = "Universal Blood Pressure Manager";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ kurnevsky ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/udevil/default.nix b/nixpkgs/pkgs/applications/misc/udevil/default.nix
new file mode 100644
index 000000000000..9c50b189cc15
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/udevil/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, acl
+, glib
+, intltool
+, pkg-config
+, udev
+, util-linux
+}:
+
+stdenv.mkDerivation rec {
+  pname = "udevil";
+  version = "0.4.4";
+
+  src = fetchFromGitHub {
+    owner = "IgnorantGuru";
+    repo = "udevil";
+    rev = version;
+    sha256 = "0nd44r8rbxifx4x4m24z5aji1c6k1fhw8cmf5s43wd5qys0bcdad";
+  };
+
+  nativeBuildInputs = [ pkg-config intltool ];
+
+  buildInputs = [
+    glib
+    udev
+  ];
+
+  preConfigure = ''
+    substituteInPlace src/Makefile.in --replace "-o root -g root" ""
+    # do not set setuid bit in nix store
+    substituteInPlace src/Makefile.in --replace 4755 0755
+  '';
+
+  configureFlags = [
+    "--with-mount-prog=${util-linux}/bin/mount"
+    "--with-umount-prog=${util-linux}/bin/umount"
+    "--with-losetup-prog=${util-linux}/bin/losetup"
+    "--with-setfacl-prog=${acl.bin}/bin/setfacl"
+    "--sysconfdir=${placeholder "out"}/etc"
+  ];
+
+  postInstall = ''
+    substituteInPlace $out/lib/systemd/system/devmon@.service \
+      --replace /usr/bin/devmon "$out/bin/devmon"
+  '';
+
+  patches = [
+    # sys/stat.h header missing on src/device-info.h
+    ./device-info-sys-stat.patch
+  ];
+
+  meta = with lib; {
+    homepage = "https://ignorantguru.github.io/udevil/";
+    description = "Mount without password";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/udevil/device-info-sys-stat.patch b/nixpkgs/pkgs/applications/misc/udevil/device-info-sys-stat.patch
new file mode 100644
index 000000000000..554682108e39
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/udevil/device-info-sys-stat.patch
@@ -0,0 +1,14 @@
+diff --git a/src/device-info.h b/src/device-info.h
+index 6cb3683..ddac24c 100644
+--- a/src/device-info.h
++++ b/src/device-info.h
+@@ -18,7 +18,8 @@
+ // intltool
+ #include <glib/gi18n.h>
+ 
+-
++// stat
++#include <sys/stat.h>
+ 
+ typedef struct device_t  {
+     struct udev_device *udevice;
diff --git a/nixpkgs/pkgs/applications/misc/udict/0001-update-version-in-lock-file.patch b/nixpkgs/pkgs/applications/misc/udict/0001-update-version-in-lock-file.patch
new file mode 100644
index 000000000000..1cd4c613e357
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/udict/0001-update-version-in-lock-file.patch
@@ -0,0 +1,25 @@
+From 4952ceece60ff2e7eabec45411b8824da6673bff Mon Sep 17 00:00:00 2001
+From: m <m@linuxistsuper.de>
+Date: Sun, 5 Mar 2023 11:25:40 +0100
+Subject: [PATCH] update version in lock file
+
+---
+ Cargo.lock | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Cargo.lock b/Cargo.lock
+index d571155..ca28bef 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -1554,7 +1554,7 @@ checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
+ 
+ [[package]]
+ name = "udict"
+-version = "0.1.1"
++version = "0.1.2"
+ dependencies = [
+  "reqwest",
+  "scraper",
+-- 
+2.38.4
+
diff --git a/nixpkgs/pkgs/applications/misc/udict/default.nix b/nixpkgs/pkgs/applications/misc/udict/default.nix
new file mode 100644
index 000000000000..62d698cc3a36
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/udict/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, stdenv
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "udict";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "lsmb";
+    repo = "udict";
+    rev = "v${version}";
+    hash = "sha256-vcyzMw2tWil4MULEkf25S6kXzqMG6JXIx6GibxxspkY=";
+  };
+
+  cargoHash = "sha256-WI+dz7FKa3kot3gWr/JK/v6Ua/u2ioZ04Jwk8t9r1ls=";
+
+  cargoPatches = [
+    ./0001-update-version-in-lock-file.patch
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  meta = with lib; {
+    description = "Urban Dictionary CLI - written in Rust";
+    homepage = "https://github.com/lsmb/udict";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    mainProgram = "udict";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/udiskie/default.nix b/nixpkgs/pkgs/applications/misc/udiskie/default.nix
new file mode 100644
index 000000000000..94ea64d3792b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/udiskie/default.nix
@@ -0,0 +1,108 @@
+{ lib
+, asciidoc
+, fetchFromGitHub
+, gobject-introspection
+, gtk3
+, installShellFiles
+, libappindicator-gtk3
+, libnotify
+, librsvg
+, python3
+, udisks2
+, wrapGAppsHook
+, testers
+, udiskie
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "udiskie";
+  version = "2.5.2";
+
+  pyproject = true;
+
+  src = fetchFromGitHub {
+    owner = "coldfix";
+    repo = "udiskie";
+    rev = "v${version}";
+    hash = "sha256-r9ppuWYY3e2thsfFh4ooOgfqNvmCVw7fS0SpJCJcysQ=";
+  };
+
+  patches = [
+    ./locale-path.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace udiskie/locale.py --subst-var out
+  '';
+
+  nativeBuildInputs = [
+    asciidoc # Man page
+    gobject-introspection
+    installShellFiles
+    python3.pkgs.setuptools
+    wrapGAppsHook
+  ];
+
+  dontWrapGApps = true;
+
+  buildInputs = [
+    gtk3
+    libappindicator-gtk3
+    libnotify
+    librsvg # SVG icons
+    udisks2
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    docopt
+    keyutils
+    pygobject3
+    pyyaml
+  ];
+
+  postBuild = ''
+    make -C doc
+  '';
+
+  postInstall = ''
+    installManPage doc/udiskie.8
+
+    installShellCompletion \
+      --bash completions/bash/* \
+      --zsh completions/zsh/*
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  nativeCheckInputs = with python3.pkgs; [
+    pytestCheckHook
+  ];
+
+  passthru.tests.version = testers.testVersion {
+    package = udiskie;
+  };
+
+  meta = with lib; {
+    homepage = "https://github.com/coldfix/udiskie";
+    changelog = "https://github.com/coldfix/udiskie/blob/${src.rev}/CHANGES.rst";
+    description = "Removable disk automounter for udisks";
+    longDescription = ''
+      udiskie is a udisks2 front-end that allows to manage removeable media such
+      as CDs or flash drives from userspace.
+
+      Its features include:
+      - automount removable media
+      - notifications
+      - tray icon
+      - command line tools for manual un-/mounting
+      - LUKS encrypted devices
+      - unlocking with keyfiles (requires udisks 2.6.4)
+      - loop devices (mounting iso archives)
+      - password caching (requires python keyutils 0.3)
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ AndersonTorres dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/udiskie/locale-path.patch b/nixpkgs/pkgs/applications/misc/udiskie/locale-path.patch
new file mode 100644
index 000000000000..f454bee467db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/udiskie/locale-path.patch
@@ -0,0 +1,17 @@
+diff --git a/udiskie/locale.py b/udiskie/locale.py
+index f12bea9..450e38b 100644
+--- a/udiskie/locale.py
++++ b/udiskie/locale.py
+@@ -10,10 +10,8 @@ from gettext import translation
+ testdirs = [
+     # manual override:
+     os.environ.get('TEXTDOMAINDIR'),
+-    # editable installation:
+-    os.path.join(os.path.dirname(__file__), '../build/locale'),
+-    # user or virtualenv installation:
+-    os.path.join(sys.prefix, 'share/locale'),
++    # Nix installation:
++    os.path.join('@out@', 'share/locale'),
+ ]
+ testfile = 'en_US/LC_MESSAGES/udiskie.mo'
+ localedir = next(
diff --git a/nixpkgs/pkgs/applications/misc/ulauncher/default.nix b/nixpkgs/pkgs/applications/misc/ulauncher/default.nix
new file mode 100644
index 000000000000..232a4456e60e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ulauncher/default.nix
@@ -0,0 +1,125 @@
+{ lib
+, fetchurl
+, nix-update-script
+, python3Packages
+, gdk-pixbuf
+, glib
+, gnome
+, gobject-introspection
+, gtk3
+, wrapGAppsHook
+, webkitgtk
+, libnotify
+, keybinder3
+, libappindicator
+, intltool
+, wmctrl
+, xvfb-run
+, librsvg
+, libX11
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "ulauncher";
+  version = "5.15.6";
+
+  src = fetchurl {
+    url = "https://github.com/Ulauncher/Ulauncher/releases/download/${version}/ulauncher_${version}.tar.gz";
+    sha256 = "sha256-WOWDekh9rcXeiN/ejiYC4BELhJwd98GkmyDOLN26ayU=";
+  };
+
+  nativeBuildInputs = with python3Packages; [
+    distutils-extra
+    gobject-introspection
+    intltool
+    wrapGAppsHook
+    gdk-pixbuf
+  ];
+
+  buildInputs = [
+    glib
+    gnome.adwaita-icon-theme
+    gtk3
+    keybinder3
+    libappindicator
+    libnotify
+    librsvg
+    webkitgtk
+    wmctrl
+  ];
+
+  propagatedBuildInputs = with python3Packages; [
+    mock
+    dbus-python
+    pygobject3
+    pyinotify
+    levenshtein
+    pyxdg
+    pycairo
+    requests
+    websocket-client
+  ];
+
+  nativeCheckInputs = with python3Packages; [
+    mock
+    pytest
+    pytest-mock
+    xvfb-run
+  ];
+
+  patches = [
+    ./fix-path.patch
+    ./fix-extensions.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py --subst-var out
+    patchShebangs bin/ulauncher-toggle
+    substituteInPlace bin/ulauncher-toggle \
+      --replace wmctrl ${wmctrl}/bin/wmctrl
+  '';
+
+  # https://github.com/Ulauncher/Ulauncher/issues/390
+  doCheck = false;
+
+  preCheck = ''
+    export PYTHONPATH=$PYTHONPATH:$out/${python3Packages.python.sitePackages}
+  '';
+
+  # Simple translation of
+  # - https://github.com/Ulauncher/Ulauncher/blob/f5a601bdca75198a6a31b9d84433496b63530e74/test
+  checkPhase = ''
+    runHook preCheck
+
+    # skip tests in invocation that handle paths that
+    # aren't nix friendly (i think)
+    xvfb-run -s '-screen 0 1024x768x16' \
+      pytest -k 'not TestPath and not test_handle_key_press_event' tests
+
+    runHook postCheck
+  '';
+
+  # do not double wrap
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=(
+     "''${gappsWrapperArgs[@]}"
+     --prefix PATH : "${lib.makeBinPath [ wmctrl ]}"
+     --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libX11 ]}"
+     --prefix WEBKIT_DISABLE_COMPOSITING_MODE : "1"
+    )
+  '';
+
+  passthru = {
+    updateScript = nix-update-script { };
+  };
+
+
+  meta = with lib; {
+    description = "A fast application launcher for Linux, written in Python, using GTK";
+    homepage = "https://ulauncher.io/";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ aaronjanse sebtm ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/ulauncher/fix-extensions.patch b/nixpkgs/pkgs/applications/misc/ulauncher/fix-extensions.patch
new file mode 100644
index 000000000000..f6d00f9fafd5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ulauncher/fix-extensions.patch
@@ -0,0 +1,13 @@
+diff --git a/ulauncher/api/server/ExtensionRunner.py b/ulauncher/api/server/ExtensionRunner.py
+index 22042bf..f7b31c8 100644
+--- a/ulauncher/api/server/ExtensionRunner.py
++++ b/ulauncher/api/server/ExtensionRunner.py
+@@ -79,7 +79,7 @@ class ExtensionRunner:
+         cmd = [sys.executable, os.path.join(self.extensions_dir, extension_id, 'main.py')]
+         env = os.environ.copy()
+         env['ULAUNCHER_WS_API'] = self.extension_server.generate_ws_url(extension_id)
+-        env['PYTHONPATH'] = ':'.join(filter(bool, [ULAUNCHER_APP_DIR, os.getenv('PYTHONPATH')]))
++        env['PYTHONPATH'] = ':'.join([ULAUNCHER_APP_DIR] + sys.path)
+ 
+         if self.verbose:
+             env['VERBOSE'] = '1'
diff --git a/nixpkgs/pkgs/applications/misc/ulauncher/fix-path.patch b/nixpkgs/pkgs/applications/misc/ulauncher/fix-path.patch
new file mode 100644
index 000000000000..bb5b8e38d331
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ulauncher/fix-path.patch
@@ -0,0 +1,12 @@
+diff --git a/setup.py b/setup.py
+index 3616104..e9bbfda 100755
+--- a/setup.py
++++ b/setup.py
+@@ -94,7 +94,7 @@
+         # Root is undefined if not installing into an alternate root
+         root = self.root or "/"
+         target_data = '/' + os.path.relpath(self.install_data, root) + '/'
+-        target_pkgdata = target_data + 'share/ulauncher/'
++        target_pkgdata = '@out@/share/ulauncher/'
+         target_scripts = '/' + os.path.relpath(self.install_scripts,
+                                                root) + '/'
diff --git a/nixpkgs/pkgs/applications/misc/ultralist/default.nix b/nixpkgs/pkgs/applications/misc/ultralist/default.nix
new file mode 100644
index 000000000000..edcc086dbb88
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ultralist/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ultralist";
+  version = "1.7.0";
+
+  src = fetchFromGitHub {
+    owner = "ultralist";
+    repo = "ultralist";
+    rev = version;
+    sha256 = "sha256-GGBW6rpwv1bVbLTD//cU8jNbq/27Ls0su7DymCJTSmY=";
+  };
+
+  vendorHash = null;
+
+  meta = with lib; {
+    description = "Simple GTD-style todo list for the command line";
+    homepage = "https://ultralist.io";
+    license = licenses.mit;
+    maintainers = with maintainers; [ uvnikita ];
+    mainProgram = "ultralist";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/uni/default.nix b/nixpkgs/pkgs/applications/misc/uni/default.nix
new file mode 100644
index 000000000000..57f88ab6eafe
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/uni/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "uni";
+  version = "2.6.0";
+
+  src = fetchFromGitHub {
+    owner = "arp242";
+    repo = "uni";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-Ij/jUbXl3GkeNZmGJ82i++6VkOW46YFI9m83otY6M7Q=";
+  };
+
+  vendorHash = "sha256-88SSrGvZSs6Opi3IKSNNqptuOWMmtTQ4ZDR7ViuGugk=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.version=${version}"
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/arp242/uni";
+    description = "Query the Unicode database from the commandline, with good support for emojis";
+    changelog = "https://github.com/arp242/uni/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ chvp ];
+    mainProgram = "uni";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/unipicker/default.nix b/nixpkgs/pkgs/applications/misc/unipicker/default.nix
new file mode 100644
index 000000000000..e13d27ce4408
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/unipicker/default.nix
@@ -0,0 +1,41 @@
+{ stdenv, fetchFromGitHub, lib, fzf, xclip }:
+
+stdenv.mkDerivation rec {
+   pname = "unipicker";
+   version = "2.0.1";
+
+   src = fetchFromGitHub {
+      owner = "jeremija";
+      repo = pname;
+      rev = "v${version}";
+      sha256 = "1k4v53pm3xivwg9vq2kndpcmah0yn4679r5jzxvg38bbkfdk86c1";
+   };
+
+   buildInputs = [
+      fzf
+      xclip
+   ];
+
+   preInstall = ''
+      substituteInPlace unipicker \
+        --replace "/etc/unipickerrc" "$out/etc/unipickerrc" \
+        --replace "fzf" "${fzf}/bin/fzf"
+      substituteInPlace unipickerrc \
+        --replace "/usr/local" "$out" \
+        --replace "fzf" "${fzf}/bin/fzf"
+   '';
+
+   makeFlags = [
+      "PREFIX=$(out)"
+      "DESTDIR=$(out)"
+   ];
+
+   meta = with lib; {
+    description = "A CLI utility for searching unicode characters by description and optionally copying them to clipboard";
+    homepage = "https://github.com/jeremija/unipicker";
+    license = licenses.mit;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+    mainProgram = "unipicker";
+   };
+}
diff --git a/nixpkgs/pkgs/applications/misc/upwork/default.nix b/nixpkgs/pkgs/applications/misc/upwork/default.nix
new file mode 100644
index 000000000000..e1cf49f61aec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/upwork/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, requireFile, dpkg, wrapGAppsHook, autoPatchelfHook
+, alsa-lib, atk, at-spi2-atk, at-spi2-core, cairo, cups, dbus, expat, fontconfig, freetype
+, gdk-pixbuf, glib, gtk3, libcxx, libdrm, libnotify, libpulseaudio, libuuid, libX11, libxcb
+, libXcomposite, libXcursor, libXdamage, libXext, libXfixes, libXi, libXrandr, libXrender
+, libXScrnSaver, libXtst, mesa, nspr, nss, openssl, pango, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "upwork";
+  version = "5.8.0.33";
+
+  src = requireFile {
+    name = "${pname}_${version}_amd64.deb";
+    url = "https://www.upwork.com/ab/downloads/os/linux/";
+    sha256 = "sha256-MU0usTAfNNMN8OYmS6dWU6Xk2o5dg5J0V7OQiv3dLug=";
+  };
+
+  nativeBuildInputs = [
+    dpkg
+    wrapGAppsHook
+    autoPatchelfHook
+  ];
+
+  buildInputs = [
+    libcxx systemd libpulseaudio
+    stdenv.cc.cc alsa-lib atk at-spi2-atk at-spi2-core cairo cups
+    dbus expat fontconfig freetype gdk-pixbuf glib gtk3 libdrm libnotify
+    libuuid libX11 libxcb libXcomposite libXcursor libXdamage libXext libXfixes
+    libXi libXrandr libXrender libXScrnSaver libXtst mesa nspr nss pango systemd
+  ];
+
+  libPath = lib.makeLibraryPath buildInputs;
+
+  dontWrapGApps = true;
+
+  unpackPhase = ''
+    dpkg-deb -x ${src} ./
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mv usr $out
+    mv opt $out
+
+    # Now it requires lib{ssl,crypto}.so.1.0.0. Fix based on Spotify pkg.
+    # https://github.com/NixOS/nixpkgs/blob/efea022d6fe0da84aa6613d4ddeafb80de713457/pkgs/applications/audio/spotify/default.nix#L129
+    mkdir -p $out/lib/upwork
+    ln -s ${lib.getLib openssl}/lib/libssl.so $out/lib/upwork/libssl.so.1.0.0
+    ln -s ${lib.getLib openssl}/lib/libcrypto.so $out/lib/upwork/libcrypto.so.1.0.0
+
+    sed -e "s|/opt/Upwork|$out/bin|g" -i $out/share/applications/upwork.desktop
+    makeWrapper $out/opt/Upwork/upwork \
+      $out/bin/upwork \
+      --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+      --prefix LD_LIBRARY_PATH : ${libPath}
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Online freelancing platform desktop application for time tracking";
+    homepage = "https://www.upwork.com/ab/downloads/";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ zakkor wolfangaukang ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/urlscan/default.nix b/nixpkgs/pkgs/applications/misc/urlscan/default.nix
new file mode 100644
index 000000000000..3715ef27524e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/urlscan/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, python3
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "urlscan";
+  version = "1.0.1";
+  format = "pyproject";
+
+  src = fetchFromGitHub {
+    owner = "firecat53";
+    repo = pname;
+    rev = "refs/tags/${version}";
+    hash = "sha256-OzcoOIgEiadWrsUPIxBJTuZQYjScJBYKyqCu1or6fz8=";
+  };
+
+  nativeBuildInputs = with python3.pkgs; [
+    hatchling
+    hatch-vcs
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    urwid
+  ];
+
+  # No tests available
+  doCheck = false;
+
+  pythonImportsCheck = [
+    "urlscan"
+  ];
+
+  meta = with lib; {
+    description = "Mutt and terminal url selector (similar to urlview)";
+    homepage = "https://github.com/firecat53/urlscan";
+    changelog = "https://github.com/firecat53/urlscan/releases/tag/${version}";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ dpaetzel ];
+    mainProgram = "urlscan";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/usb-reset/default.nix b/nixpkgs/pkgs/applications/misc/usb-reset/default.nix
new file mode 100644
index 000000000000..0e924ba5ee67
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/usb-reset/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, libusb1
+}:
+
+stdenv.mkDerivation rec {
+  pname = "usb-reset";
+  # not tagged, but changelog has this with the date of the e9a9d6c commit
+  # and no significant change occured between bumping the version in the Makefile and that
+  # and the changes since then (up to ff822d8) seem snap related
+  version = "0.3";
+
+  src = fetchFromGitHub {
+    owner = "ralight";
+    repo = pname;
+    rev = "e9a9d6c4a533430e763e111a349efbba69e7a5bb";
+    sha256 = "0k9qmhqi206gcnv3z4vwya82g5nm225972ylf67zjiikk8pn8m0s";
+  };
+
+  buildInputs = [ libusb1 ];
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace /usr/include/libusb-1.0 ${libusb1.dev}/include/libusb-1.0
+  '';
+
+  makeFlags = [
+    "DESTDIR=${placeholder "out"}"
+    "prefix="
+  ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "Perform a bus reset on a USB device using its vendor and product ID";
+    homepage = "https://github.com/ralight/usb-reset";
+    changelog = "https://github.com/ralight/usb-reset/blob/master/ChangeLog.txt";
+    license = licenses.mit;
+    maintainers = [ maintainers.evils ];
+    platforms = platforms.all;
+    mainProgram = "usb-reset";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/usync/default.nix b/nixpkgs/pkgs/applications/misc/usync/default.nix
new file mode 100644
index 000000000000..1034b3844b13
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/usync/default.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, scsh, rsync, unison }:
+
+stdenv.mkDerivation rec {
+  pname = "usync";
+  version = "0.0.3";
+
+  src = fetchFromGitHub {
+    owner = "ebzzry";
+    repo = "usync";
+    rev = "99f11b0c196a81843f55ca3456abcb85149b6d51";
+    sha256 = "16i1q8f0jmfd43rb8d70l2b383vr5ib4kh7iq3yd345q7xjz9c2j";
+  };
+
+  installPhase = ''
+    install -m 555 -Dt $out/bin $pname
+  '';
+
+  postFixup = ''
+    substituteInPlace $out/bin/$pname --replace "/usr/bin/env scsh" "${scsh}/bin/scsh"
+    substituteInPlace $out/bin/$pname --replace "(rsync " "(${rsync}/bin/rsync "
+    substituteInPlace $out/bin/$pname --replace "(unison " "(${unison}/bin/unison "
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/ebzzry/usync";
+    description = "A simple site-to-site synchronization tool";
+    license = licenses.mit;
+    maintainers = [ maintainers.ebzzry ];
+    platforms = platforms.unix;
+    mainProgram = "usync";
+  };
+
+  dontBuild = true;
+}
diff --git a/nixpkgs/pkgs/applications/misc/valent/default.nix b/nixpkgs/pkgs/applications/misc/valent/default.nix
new file mode 100644
index 000000000000..09ec8609712d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/valent/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, desktop-file-utils
+, meson
+, ninja
+, pkg-config
+, wrapGAppsHook4
+, evolution-data-server-gtk4
+, glib
+, glib-networking
+, gnutls
+, gst_all_1
+, json-glib
+, libadwaita
+, libpeas2
+, libportal-gtk4
+, pulseaudio
+, sqlite
+}:
+
+stdenv.mkDerivation rec {
+  pname = "valent";
+  version = "0-unstable-2024-02-12";
+
+  src = fetchFromGitHub {
+    owner = "andyholmes";
+    repo = "valent";
+    rev = "70ef1aa42eb2df5e9c3aa4faa014c8d539450018";
+    fetchSubmodules = true;
+    hash = "sha256-JdrkAtn21NoX+SI6PNWMdE8HLKhLc3HKFhwKydENkvg=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    evolution-data-server-gtk4
+    glib
+    glib-networking
+    gnutls
+    gst_all_1.gstreamer
+    gst_all_1.gst-plugins-base
+    json-glib
+    libadwaita
+    libpeas2
+    libportal-gtk4
+    pulseaudio
+    sqlite
+  ];
+
+  mesonFlags = [
+    "-Dplugin_bluez=true"
+    # FIXME: libpeas2 (and libpeas) not compiled with -Dvapi=true
+    "-Dvapi=false"
+  ];
+
+  meta = with lib; {
+    description = "An implementation of the KDE Connect protocol, built on GNOME platform libraries";
+    longDescription = ''
+      Note that you have to open firewall ports for other devices
+      to connect to it. Use either:
+      ```nix
+      programs.kdeconnect = {
+        enable = true;
+        package = pkgs.valent;
+      }
+      ```
+      or open corresponding firewall ports directly:
+      ```nix
+      networking.firewall = rec {
+        allowedTCPPortRanges = [ { from = 1714; to = 1764; } ];
+        allowedUDPPortRanges = allowedTCPPortRanges;
+      }
+      ```
+    '';
+    homepage = "https://valent.andyholmes.ca";
+    changelog = "https://github.com/andyholmes/valent/blob/${src.rev}/CHANGELOG.md";
+    license = with licenses; [ gpl3Plus cc0 cc-by-sa-30 ];
+    maintainers = with maintainers; [ federicoschonborn aleksana ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/valentina/default.nix b/nixpkgs/pkgs/applications/misc/valentina/default.nix
new file mode 100644
index 000000000000..e0ca06af8aa3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/valentina/default.nix
@@ -0,0 +1,50 @@
+{ lib, stdenv, fetchFromGitLab, installShellFiles
+, qmake, qttools
+, qtsvg, qtxmlpatterns
+, wrapQtAppsHook
+, autoPatchelfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "valentina";
+  version = "0.7.52";
+
+  src = fetchFromGitLab {
+    owner = "smart-pattern";
+    repo = "valentina";
+    rev = "v${version}";
+    hash = "sha256-DmNRBxqyBvDTdA7Sz9X04Dhejtxx7tOVpST+SkUNguM=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/app/translations.pri \
+      --replace '$$[QT_INSTALL_BINS]/$$LRELEASE' '${lib.getDev qttools}/bin/lrelease'
+  '';
+
+  nativeBuildInputs = [ qmake qttools wrapQtAppsHook installShellFiles autoPatchelfHook ];
+
+  buildInputs = [ qtsvg qtxmlpatterns ];
+
+  qmakeFlags = [
+    "-r"
+    "PREFIX=${placeholder "out"}"
+    "CONFIG+=noTests"
+    "CONFIG+=noRunPath"
+    "CONFIG+=no_ccache"
+    "CONFIG+=noDebugSymbols"
+  ];
+
+  postInstall = ''
+    installManPage dist/debian/*.1
+    install -Dm644 dist/debian/valentina.sharedmimeinfo $out/share/mime/packages/valentina.xml
+  '';
+
+  meta = with lib; {
+    description = "An open source sewing pattern drafting software";
+    homepage = "https://smart-pattern.com.ua/";
+    changelog = "https://gitlab.com/smart-pattern/valentina/-/blob/v${version}/ChangeLog.txt";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/variety/default.nix b/nixpkgs/pkgs/applications/misc/variety/default.nix
new file mode 100644
index 000000000000..cf0272f075e2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/variety/default.nix
@@ -0,0 +1,100 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, gexiv2
+, gobject-introspection
+, gtk3
+, hicolor-icon-theme
+, intltool
+, libnotify
+, librsvg
+, python3
+, runtimeShell
+, wrapGAppsHook
+, fehSupport ? false
+, feh
+, imagemagickSupport ? true
+, imagemagick
+, appindicatorSupport ? true
+, libayatana-appindicator
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "variety";
+  version = "0.8.12";
+
+  src = fetchFromGitHub {
+    owner = "varietywalls";
+    repo = "variety";
+    rev = "refs/tags/${version}";
+    hash = "sha256-FjnhV7vzRPVDCgUNK8CHo3arKXuwe+3xH/5AxCVgeIY=";
+  };
+
+  nativeBuildInputs = [
+    intltool
+    wrapGAppsHook
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    gexiv2
+    gtk3
+    hicolor-icon-theme
+    libnotify
+    librsvg
+  ]
+  ++ lib.optional appindicatorSupport libayatana-appindicator;
+
+  propagatedBuildInputs = with python3.pkgs; [
+    beautifulsoup4
+    configobj
+    dbus-python
+    distutils-extra
+    httplib2
+    lxml
+    pillow
+    pycairo
+    pygobject3
+    requests
+    setuptools
+  ]
+  ++ lib.optional fehSupport feh
+  ++ lib.optional imagemagickSupport imagemagick;
+
+  doCheck = false;
+
+  # Prevent double wrapping, let the Python wrapper use the args in preFixup.
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  prePatch = ''
+    substituteInPlace variety_lib/varietyconfig.py \
+      --replace "__variety_data_directory__ = \"../data\"" \
+                "__variety_data_directory__ = \"$out/share/variety\""
+    substituteInPlace variety/VarietyWindow.py \
+      --replace '[script,' '["${runtimeShell}", script,' \
+      --replace 'check_output(script)' 'check_output(["${runtimeShell}", script])'
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/varietywalls/variety";
+    description = "A wallpaper manager for Linux systems";
+    longDescription = ''
+      Variety is a wallpaper manager for Linux systems. It supports numerous
+      desktops and wallpaper sources, including local files and online services:
+      Flickr, Wallhaven, Unsplash, and more.
+
+      Where supported, Variety sits as a tray icon to allow easy pausing and
+      resuming. Otherwise, its desktop entry menu provides a similar set of
+      options.
+
+      Variety also includes a range of image effects, such as oil painting and
+      blur, as well as options to layer quotes and a clock onto the background.
+    '';
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ p3psi AndersonTorres zfnmxt ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vcal/default.nix b/nixpkgs/pkgs/applications/misc/vcal/default.nix
new file mode 100644
index 000000000000..6b882e2710a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vcal/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, lib, fetchurl, perl }:
+
+stdenv.mkDerivation rec {
+  pname = "vcal";
+  version = "2.8";
+
+  src = fetchurl {
+    url    = "https://waynemorrison.com/software/vcal";
+    sha256 = "0jrm0jzqxb1xjp24hwbzlxsh22gjssay9gj4zszljzdm68r5afvc";
+  };
+
+  nativeBuildInputs = [ perl ]; # for pod2man
+
+  dontUnpack = true;
+  dontBuild = true;
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{bin,share/man/man1}
+    substitute ${src} $out/bin/vcal \
+      --replace /usr/bin/perl ${perl}/bin/perl
+    chmod 0755 $out/bin/*
+    pod2man --name=vcal --release=${version} ${src} > $out/share/man/man1/vcal.1
+
+    runHook postInstall
+  '';
+
+  # There are no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Parser for VCalendar and ICalendar files, usable from the command line";
+    homepage = "https://waynemorrison.com/software/";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "vcal";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/veracrypt/default.nix b/nixpkgs/pkgs/applications/misc/veracrypt/default.nix
new file mode 100644
index 000000000000..66aca8645adc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/veracrypt/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, stdenv
+, fetchurl
+, pkg-config
+, makeself
+, yasm
+, fuse
+, wxGTK
+, lvm2
+, substituteAll
+, e2fsprogs
+, exfat
+, ntfs3g
+, btrfs-progs
+, pcsclite
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "veracrypt";
+  version = "1.26.7";
+
+  src = fetchurl {
+    url = "https://launchpad.net/${pname}/trunk/${lib.toLower version}/+download/VeraCrypt_${version}_Source.tar.bz2";
+    sha256 = "sha256-920nsYJBTg1P2ba1n76iiyXbb6afK7z/ouwmmxqGX2U=";
+  };
+
+  patches = [
+    (substituteAll {
+      src = ./fix-paths.patch;
+      ext2 = "${e2fsprogs}/bin/mkfs.ext2";
+      ext3 = "${e2fsprogs}/bin/mkfs.ext3";
+      ext4 = "${e2fsprogs}/bin/mkfs.ext4";
+      exfat = "${exfat}/bin/mkfs.exfat";
+      ntfs = "${ntfs3g}/bin/mkfs.ntfs";
+      btrfs = "${btrfs-progs}/bin/mkfs.btrfs";
+    })
+  ];
+
+  sourceRoot = "src";
+
+  nativeBuildInputs = [ makeself pkg-config yasm wrapGAppsHook ];
+  buildInputs = [ fuse lvm2 wxGTK pcsclite ];
+
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    install -Dm 755 Main/${pname} "$out/bin/${pname}"
+    install -Dm 444 Resources/Icons/VeraCrypt-256x256.xpm "$out/share/pixmaps/${pname}.xpm"
+    install -Dm 444 License.txt -t "$out/share/doc/${pname}/"
+    install -d $out/share/applications
+    substitute Setup/Linux/${pname}.desktop $out/share/applications/${pname}.desktop \
+      --replace "Exec=/usr/bin/veracrypt" "Exec=$out/bin/veracrypt" \
+      --replace "Icon=veracrypt" "Icon=veracrypt.xpm"
+  '';
+
+  meta = with lib; {
+    description = "Free Open-Source filesystem on-the-fly encryption";
+    homepage = "https://www.veracrypt.fr/";
+    license = with licenses; [ asl20 /* and */ unfree /* TrueCrypt License version 3.0 */ ];
+    maintainers = with maintainers; [ dsferruzza ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/veracrypt/fix-paths.patch b/nixpkgs/pkgs/applications/misc/veracrypt/fix-paths.patch
new file mode 100644
index 000000000000..56b4fc483804
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/veracrypt/fix-paths.patch
@@ -0,0 +1,22 @@
+diff --color --unified --recursive --text a/Core/VolumeCreator.h b/Core/VolumeCreator.h
+--- a/Core/VolumeCreator.h	2021-06-20 20:54:50.725210056 +0300
++++ b/Core/VolumeCreator.h	2021-06-20 20:58:46.117742419 +0300
+@@ -77,12 +77,12 @@
+ 				switch (fsType)
+ 				{
+ 	#if defined (TC_LINUX)
+-				case VolumeCreationOptions::FilesystemType::Ext2:		return "mkfs.ext2";
+-				case VolumeCreationOptions::FilesystemType::Ext3:		return "mkfs.ext3";
+-				case VolumeCreationOptions::FilesystemType::Ext4:		return "mkfs.ext4";
+-				case VolumeCreationOptions::FilesystemType::NTFS:		return "mkfs.ntfs";
+-				case VolumeCreationOptions::FilesystemType::exFAT:		return "mkfs.exfat";
+-				case VolumeCreationOptions::FilesystemType::Btrfs:		return "mkfs.btrfs";
++				case VolumeCreationOptions::FilesystemType::Ext2:		return "@ext2@";
++				case VolumeCreationOptions::FilesystemType::Ext3:		return "@ext3@";
++				case VolumeCreationOptions::FilesystemType::Ext4:		return "@ext4@";
++				case VolumeCreationOptions::FilesystemType::NTFS:		return "@ntfs@";
++				case VolumeCreationOptions::FilesystemType::exFAT:		return "@exfat@";
++				case VolumeCreationOptions::FilesystemType::Btrfs:		return "@btrfs@";
+ 	#elif defined (TC_MACOSX)
+ 				case VolumeCreationOptions::FilesystemType::MacOsExt:	return "newfs_hfs";
+ 				case VolumeCreationOptions::FilesystemType::exFAT:		return "newfs_exfat";
diff --git a/nixpkgs/pkgs/applications/misc/verbiste/default.nix b/nixpkgs/pkgs/applications/misc/verbiste/default.nix
new file mode 100644
index 000000000000..9f27f8e73d7f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/verbiste/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, pkg-config, libgnomeui, libxml2 }:
+
+stdenv.mkDerivation rec {
+  pname = "verbiste";
+
+  version = "0.1.47";
+
+  src = fetchurl {
+    url = "https://perso.b2b2c.ca/~sarrazip/dev/${pname}-${version}.tar.gz";
+    sha256 = "02kzin3pky2q2jnihrch8y0hy043kqqmzxq8j741x80kl0j1qxkm";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+
+  buildInputs = [ libgnomeui libxml2 ];
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    homepage = "http://sarrazip.com/dev/verbiste.html";
+    description = "French and Italian verb conjugator";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vhs/default.nix b/nixpkgs/pkgs/applications/misc/vhs/default.nix
new file mode 100644
index 000000000000..ae0466c1faaa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vhs/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, buildGoModule, installShellFiles, fetchFromGitHub, ffmpeg, ttyd, chromium, makeWrapper }:
+
+buildGoModule rec {
+  pname = "vhs";
+  version = "0.7.1";
+
+  src = fetchFromGitHub {
+    owner = "charmbracelet";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-4VQcIynkENScxpeM09IXrpMszqojlMuyjtXX2lbS9dg=";
+  };
+
+  vendorHash = "sha256-/XW5Gq9Yz+M7Al1hy6pow34e3Cn3q8aA0ByRdhWXUIQ=";
+
+  nativeBuildInputs = [ installShellFiles makeWrapper ];
+
+  ldflags = [ "-s" "-w" "-X=main.Version=${version}" ];
+
+  postInstall = ''
+    wrapProgram $out/bin/vhs --prefix PATH : ${lib.makeBinPath (lib.optionals stdenv.isLinux [ chromium ] ++ [ ffmpeg ttyd ])}
+    $out/bin/vhs man > vhs.1
+    installManPage vhs.1
+    installShellCompletion --cmd vhs \
+      --bash <($out/bin/vhs completion bash) \
+      --fish <($out/bin/vhs completion fish) \
+      --zsh <($out/bin/vhs completion zsh)
+  '';
+
+  meta = with lib; {
+    description = "A tool for generating terminal GIFs with code";
+    homepage = "https://github.com/charmbracelet/vhs";
+    changelog = "https://github.com/charmbracelet/vhs/releases/tag/v${version}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ maaslalani penguwin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/viking/default.nix b/nixpkgs/pkgs/applications/misc/viking/default.nix
new file mode 100644
index 000000000000..be642790f386
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/viking/default.nix
@@ -0,0 +1,81 @@
+{ lib, stdenv, fetchurl, fetchpatch
+, desktopToDarwinBundle
+, docbook_xml_dtd_45, docbook_xsl, intltool, itstool, libxslt, pkg-config, wrapGAppsHook, yelp-tools
+, curl, gdk-pixbuf, gtk3, json-glib, libxml2
+, gpsbabel
+, withGeoClue ? true, geoclue2
+, withGeoTag ? true, gexiv2
+, withMagic ? true, file
+, withMapnik ? false, mapnik
+, withMBTiles ? true, sqlite
+, withMd5Hash ? true, nettle
+, withOAuth ? true, liboauth
+, withRealtimeGPSTracking ? (!stdenv.isDarwin), gpsd
+}:
+
+stdenv.mkDerivation rec {
+  pname = "viking";
+  version = "1.10";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/viking/viking-${version}.tar.bz2";
+    sha256 = "sha256-lFXIlfmLwT3iS9ayNM0PHV7NwbBotMvG62ZE9hJuRaw=";
+  };
+
+  patches = [
+    # Fix check_md5_hash.sh on macOS
+    (fetchpatch {
+      url = "https://github.com/viking-gps/viking/pull/184/commits/b0e110a3cfefea0f1874669525eb3a220dd29f9f.patch";
+      hash = "sha256-HdkcZMV570SXOQMIZZAti2HT0gIdF/EwQCVXBaOwpqs=";
+    })
+  ];
+
+  nativeBuildInputs = [ docbook_xml_dtd_45 docbook_xsl intltool itstool libxslt pkg-config wrapGAppsHook yelp-tools ]
+    ++ lib.optional stdenv.isDarwin desktopToDarwinBundle;
+
+  buildInputs = [ curl gdk-pixbuf gtk3 json-glib libxml2 ]
+    ++ lib.optional withGeoClue geoclue2
+    ++ lib.optional withGeoTag  gexiv2
+    ++ lib.optional withMagic   file
+    ++ lib.optional withMapnik  mapnik
+    ++ lib.optional withMBTiles sqlite
+    ++ lib.optional withMd5Hash nettle
+    ++ lib.optional withOAuth   liboauth
+    ++ lib.optional withRealtimeGPSTracking gpsd;
+
+  configureFlags = [
+    (lib.enableFeature withGeoClue "geoclue")
+    (lib.enableFeature withGeoTag  "geotag")
+    (lib.enableFeature withMagic   "magic")
+    (lib.enableFeature withMapnik  "mapnik")
+    (lib.enableFeature withMBTiles "mbtiles")
+    (lib.enableFeature withMd5Hash "nettle")
+    (lib.enableFeature withOAuth   "oauth")
+    (lib.enableFeature withRealtimeGPSTracking "realtime-gps-tracking")
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  doCheck = true;
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix PATH : ${lib.makeBinPath [ gpsbabel ]}
+    )
+  '';
+
+  meta = with lib; {
+    description = "GPS data editor and analyzer";
+    longDescription = ''
+      Viking is a free/open source program to manage GPS data.  You
+      can import and plot tracks and waypoints, show Openstreetmaps
+      and/or Terraserver maps under it, download geocaches for an area
+      on the map, make new tracks and waypoints, see real-time GPS
+      position, etc.
+    '';
+    homepage = "https://sourceforge.net/projects/viking/";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ pSub sikmir ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/visidata/default.nix b/nixpkgs/pkgs/applications/misc/visidata/default.nix
new file mode 100644
index 000000000000..2e7189dc484b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/visidata/default.nix
@@ -0,0 +1,158 @@
+{ stdenv
+, lib
+, buildPythonApplication
+, fetchFromGitHub
+# python requirements
+, beautifulsoup4
+, boto3
+, faker
+, fonttools
+, h5py
+, importlib-metadata
+, lxml
+, matplotlib
+, numpy
+, odfpy
+, openpyxl
+, pandas
+, pdfminer-six
+, praw
+, psutil
+, psycopg2
+, pyarrow
+, pyshp
+, pypng
+, python-dateutil
+, pyyaml
+, requests
+, seaborn
+, setuptools
+, sh
+, tabulate
+, urllib3
+, vobject
+, wcwidth
+, xlrd
+, xlwt
+, zstandard
+, zulip
+# other
+, git
+, withPcap ? true, dpkt, dnslib
+, withXclip ? stdenv.isLinux, xclip
+, testers
+, visidata
+}:
+buildPythonApplication rec {
+  pname = "visidata";
+  version = "3.0.2";
+
+  src = fetchFromGitHub {
+    owner = "saulpw";
+    repo = "visidata";
+    rev = "v${version}";
+    hash = "sha256-gplrkrFTIP6TLvk1YazD5roDzsPvDtOXLlTOmTio52s=";
+  };
+
+  propagatedBuildInputs = [
+    # from visidata/requirements.txt
+    # packages not (yet) present in nixpkgs are commented
+    python-dateutil
+    pandas
+    requests
+    lxml
+    openpyxl
+    xlrd
+    xlwt
+    h5py
+    psycopg2
+    boto3
+    pyshp
+    #mapbox-vector-tile
+    pypng
+    #pyconll
+    fonttools
+    #sas7bdat
+    #xport
+    #savReaderWriter
+    pyyaml
+    #namestand
+    #datapackage
+    pdfminer-six
+    #tabula
+    vobject
+    tabulate
+    wcwidth
+    zstandard
+    odfpy
+    urllib3
+    pyarrow
+    seaborn
+    matplotlib
+    sh
+    psutil
+    numpy
+
+    #requests_cache
+    beautifulsoup4
+
+    faker
+    praw
+    zulip
+    #pyairtable
+
+    setuptools
+    importlib-metadata
+  ] ++ lib.optionals withPcap [ dpkt dnslib ]
+  ++ lib.optional withXclip xclip;
+
+  nativeCheckInputs = [
+    git
+  ];
+
+  # check phase uses the output bin, which is not possible when cross-compiling
+  doCheck = stdenv.buildPlatform == stdenv.hostPlatform;
+
+  checkPhase = ''
+    runHook preCheck
+
+    # disable some tests which require access to the network
+    rm -f tests/load-http.vd            # http
+    rm -f tests/graph-cursor-nosave.vd  # http
+    rm -f tests/messenger-nosave.vd     # dns
+
+    # tests to disable because we don't have a package to load such files
+    rm -f tests/load-conllu.vdj         # no 'pyconll'
+    rm -f tests/load-sav.vd             # no 'savReaderWriter'
+
+    # tests use git to compare outputs to references
+    git init -b "test-reference"
+    git config user.name "nobody"
+    git config user.email "no@where"
+    git add .
+    git commit -m "test reference"
+
+    substituteInPlace dev/test.sh --replace "bin/vd" "$out/bin/vd"
+    bash dev/test.sh
+    runHook postCheck
+  '';
+  postInstall = ''
+    python dev/zsh-completion.py
+    install -Dm644 _visidata -t $out/share/zsh/site-functions
+  '';
+
+  pythonImportsCheck = ["visidata"];
+
+  passthru.tests.version = testers.testVersion {
+    package = visidata;
+    version = "v${version}";
+  };
+
+  meta = {
+    description = "Interactive terminal multitool for tabular data";
+    license = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ raskin markus1189 ];
+    homepage = "https://visidata.org/";
+    changelog = "https://github.com/saulpw/visidata/blob/v${version}/CHANGELOG.md";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vit/default.nix b/nixpkgs/pkgs/applications/misc/vit/default.nix
new file mode 100644
index 000000000000..b7594add350a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vit/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, python3Packages
+, fetchPypi
+, taskwarrior
+, glibcLocales
+}:
+
+with python3Packages;
+
+buildPythonApplication rec {
+  pname = "vit";
+  version = "2.3.2";
+  disabled = lib.versionOlder python.version "3.7";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "sha256-qDfY6GWnDQ44Sh540xQzDwANEI+mLjpy2a7G3sfKIzw=";
+  };
+
+  propagatedBuildInputs = [
+    tasklib
+    urwid
+  ];
+
+  nativeCheckInputs = [ glibcLocales ];
+
+  makeWrapperArgs = [ "--suffix" "PATH" ":" "${taskwarrior}/bin" ];
+
+  preCheck = ''
+    export TERM=''${TERM-linux}
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/scottkosty/vit";
+    description = "Visual Interactive Taskwarrior";
+    maintainers = with maintainers; [ dtzWill arcnmx ];
+    platforms = platforms.all;
+    license = licenses.mit;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/volnoti/default.nix b/nixpkgs/pkgs/applications/misc/volnoti/default.nix
new file mode 100644
index 000000000000..b54df7e95168
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/volnoti/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, pkg-config, dbus, gdk-pixbuf, glib, libX11, gtk2, librsvg
+, dbus-glib, autoreconfHook, wrapGAppsHook }:
+
+stdenv.mkDerivation {
+  pname = "volnoti-unstable";
+  version = "2013-09-23";
+
+  src = fetchFromGitHub {
+    owner = "davidbrazdil";
+    repo = "volnoti";
+    rev = "4af7c8e54ecc499097121909f02ecb42a8a60d24";
+    sha256 = "155lb7w563dkdkdn4752hl0zjhgnq3j4cvs9z98nb25k1xpmpki7";
+  };
+
+  patches = [
+    # Fix dbus interface headers. See
+    # https://github.com/davidbrazdil/volnoti/pull/10
+    (fetchpatch {
+      url = "https://github.com/davidbrazdil/volnoti/commit/623ad8ea5c3ac8720d00a2ced4b6163aae38c119.patch";
+      sha256 = "046zfdjmvhb7jrsgh04vfgi35sgy1zkrhd3bzdby3nvds1wslfam";
+    })
+  ];
+
+  nativeBuildInputs = [ pkg-config autoreconfHook wrapGAppsHook ];
+
+  buildInputs = [
+    dbus gdk-pixbuf glib libX11 gtk2 dbus-glib librsvg
+  ];
+
+  meta = with lib; {
+    description = "Lightweight volume notification for Linux";
+    homepage = "https://github.com/davidbrazdil/volnoti";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.gilligan ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vp/default.nix b/nixpkgs/pkgs/applications/misc/vp/default.nix
new file mode 100644
index 000000000000..07dbfef2f5f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vp/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, SDL, SDL_image }:
+
+stdenv.mkDerivation rec {
+  pname = "vp";
+  version = "1.8";
+
+  src = fetchFromGitHub {
+    owner = "erikg";
+    repo = "vp";
+    rev = "v${version}";
+    sha256 = "08q6xrxsyj6vj0sz59nix9isqz84gw3x9hym63lz6v8fpacvykdq";
+  };
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  buildInputs = [ SDL SDL_image ];
+
+  env.NIX_CFLAGS_COMPILE = "-I${SDL}/include/SDL -I${SDL_image}/include/SDL";
+
+  meta = with lib; {
+    homepage = "https://brlcad.org/~erik/";
+    description = "SDL based picture viewer/slideshow";
+    platforms = platforms.unix;
+    license  = licenses.gpl3;
+    maintainers = [ maintainers.vrthra ];
+    mainProgram = "vp";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vue/default.nix b/nixpkgs/pkgs/applications/misc/vue/default.nix
new file mode 100644
index 000000000000..41ab85bbd5c5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vue/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, jre, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "vue";
+  version = "3.3.0";
+  src = fetchurl {
+    url = "http://releases.atech.tufts.edu/jenkins/job/VUE/116/deployedArtifacts/download/artifact.1";
+    sha256 = "0yfzr80pw632lkayg4qfmwzrqk02y30yz8br7isyhmgkswyp5rnx";
+  };
+
+  dontUnpack = true;
+
+  installPhase = ''
+    mkdir -p "$out"/{share/vue,bin}
+    cp ${src} "$out/share/vue/vue.jar"
+    echo '#!${runtimeShell}' >> "$out/bin/vue"
+    echo '${jre}/bin/java -jar "'"$out/share/vue/vue.jar"'" "$@"' >> "$out/bin/vue"
+    chmod a+x "$out/bin/vue"
+  '';
+
+  meta = {
+    description = "Visual Understanding Environment - mind mapping software";
+    maintainers = with lib.maintainers; [ raskin ];
+    platforms = with lib.platforms; linux;
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
+    license = lib.licenses.free; # Apache License fork, actually
+    mainProgram = "vue";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vul/default.nix b/nixpkgs/pkgs/applications/misc/vul/default.nix
new file mode 100644
index 000000000000..0e9b52e82d31
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vul/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "vul";
+  version = "unstable-2022-07-02";
+
+  src = fetchFromGitHub {
+    owner = "LukeSmithxyz";
+    repo = pname;
+    rev = "97efaedb79c9de62b6a19b04649fd8c00b85973f";
+    sha256 = "sha256-NwRUx7WVvexrCdPtckq4Szf5ISy7NVBHX8uAsRtbE+0=";
+  };
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  meta = with lib; {
+    description = "Latin Vulgate Bible on the Command Line";
+    homepage = "https://github.com/LukeSmithxyz/vul";
+    license = licenses.publicDomain;
+    maintainers = [ maintainers.j0hax maintainers.cafkafk ];
+    mainProgram = "vul";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/vym/000-fix-zip-paths.diff b/nixpkgs/pkgs/applications/misc/vym/000-fix-zip-paths.diff
new file mode 100644
index 000000000000..37512aded12f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vym/000-fix-zip-paths.diff
@@ -0,0 +1,21 @@
+diff -Naur source-old/src/main.cpp source-new/src/main.cpp
+--- source-old/src/main.cpp	1969-12-31 21:00:01.000000000 -0300
++++ source-new/src/main.cpp	2022-10-23 22:30:00.463905363 -0300
+@@ -286,13 +286,10 @@
+     // Platform specific settings
+     vymPlatform = QSysInfo::prettyProductName();
+ 
+-#if defined(Q_OS_WINDOWS)
+-    // Only Windows 10 has tar. Older windows versions not supported.
+-    zipToolPath = "tar";
+-#else
+-    zipToolPath = "/usr/bin/zip";
+-    unzipToolPath = "/usr/bin/unzip";
+-#endif
++    // Nixpkgs-specific hack
++    zipToolPath = "@zipPath@";
++    unzipToolPath = "@unzipPath@";
++
+     iconPath = vymBaseDir.path() + "/icons/";
+     flagsPath = vymBaseDir.path() + "/flags/";
+ 
diff --git a/nixpkgs/pkgs/applications/misc/vym/default.nix b/nixpkgs/pkgs/applications/misc/vym/default.nix
new file mode 100644
index 000000000000..4815a7bc10af
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/vym/default.nix
@@ -0,0 +1,72 @@
+{ lib
+, stdenv
+, cmake
+, fetchFromGitHub
+, pkg-config
+, qtbase
+, qtscript
+, qtsvg
+, substituteAll
+, unzip
+, wrapQtAppsHook
+, zip
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "vym";
+  version = "2.9.26";
+
+  src = fetchFromGitHub {
+    owner = "insilmaril";
+    repo = "vym";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-5cHhv9GDjJvSqGJ+7fI0xaWCiXw/0WP0Bem/ZRV8Y7M=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  patches = [
+    (substituteAll {
+      src = ./000-fix-zip-paths.diff;
+      zipPath = "${zip}/bin/zip";
+      unzipPath = "${unzip}/bin/unzip";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtscript
+    qtsvg
+  ];
+
+  strictDeps = true;
+
+  qtWrapperArgs = [
+    "--prefix PATH : ${lib.makeBinPath [ unzip zip ]}"
+  ];
+
+  meta = {
+    homepage = "http://www.insilmaril.de/vym/";
+    description = "A mind-mapping software";
+    longDescription = ''
+      VYM (View Your Mind) is a tool to generate and manipulate maps which show
+      your thoughts. Such maps can help you to improve your creativity and
+      effectivity. You can use them for time management, to organize tasks, to
+      get an overview over complex contexts, to sort your ideas etc.
+
+      Maps can be drawn by hand on paper or a flip chart and help to structure
+      your thoughs. While a tree like structure like shown on this page can be
+      drawn by hand or any drawing software vym offers much more features to
+      work with such maps.
+    '';
+    license = with lib.licenses; [ gpl2Plus ];
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/wallust/default.nix b/nixpkgs/pkgs/applications/misc/wallust/default.nix
new file mode 100644
index 000000000000..3e2fb300dd1e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wallust/default.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitea
+, rustPlatform
+, nix-update-script
+, imagemagick
+, makeWrapper
+}:
+let
+  version = "2.10.0";
+in
+rustPlatform.buildRustPackage {
+  pname = "wallust";
+  inherit version;
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "explosion-mental";
+    repo = "wallust";
+    rev = version;
+    hash = "sha256-0kPmr7/2uVncpCGVOeIkYlm2M0n9+ypVl7bQ9HnqLb4=";
+  };
+
+  cargoHash = "sha256-p1NKEppBYLdCsTY7FHPzaGladLv5HqIVNJxSoFJOx50=";
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postFixup = ''
+    wrapProgram $out/bin/wallust \
+      --prefix PATH : "${lib.makeBinPath [ imagemagick ]}"
+  '';
+
+  passthru.updateScript = nix-update-script { };
+
+  meta = {
+    description = "A better pywal";
+    homepage = "https://codeberg.org/explosion-mental/wallust";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ onemoresuza iynaix ];
+    downloadPage = "https://codeberg.org/explosion-mental/wallust/releases/tag/${version}";
+    mainProgram = "wallust";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/warpd/default.nix b/nixpkgs/pkgs/applications/misc/warpd/default.nix
new file mode 100644
index 000000000000..7fa28d41e37b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/warpd/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, git
+, withWayland ? true, cairo, libxkbcommon, wayland
+, withX ? true, libXi, libXinerama, libXft, libXfixes, libXtst, libX11, libXext
+}:
+
+stdenv.mkDerivation rec {
+  pname = "warpd";
+  version = "1.3.5";
+
+  src = fetchFromGitHub {
+    owner = "rvaiya";
+    repo = "warpd";
+    rev = "v${version}";
+    hash = "sha256-5B3Ec+R1vF2iI0ennYcsRlnFXJkSns0jVbyAWJA4lTU=";
+    leaveDotGit = true;
+  };
+
+  nativeBuildInputs = [ git ];
+
+  buildInputs = lib.optionals withWayland [
+    cairo
+    libxkbcommon
+    wayland
+  ] ++ lib.optionals withX [
+    libXi
+    libXinerama
+    libXft
+    libXfixes
+    libXtst
+    libX11
+    libXext
+  ];
+
+  makeFlags = [ "PREFIX=$(out)" ]
+    ++ lib.optional (!withWayland) "DISABLE_WAYLAND=y"
+    ++ lib.optional (!withX) "DISABLE_X=y";
+
+  postPatch = ''
+    substituteInPlace mk/linux.mk \
+      --replace '-m644' '-Dm644' \
+      --replace '-m755' '-Dm755' \
+      --replace 'warpd.1.gz $(DESTDIR)' 'warpd.1.gz -t $(DESTDIR)' \
+      --replace 'bin/warpd $(DESTDIR)' 'bin/warpd -t $(DESTDIR)'
+  '';
+
+  meta = with lib; {
+    description = "A modal keyboard driven interface for mouse manipulation.";
+    homepage = "https://github.com/rvaiya/warpd";
+    changelog = "https://github.com/rvaiya/warpd/blob/${src.rev}/CHANGELOG.md";
+    maintainers = with maintainers; [ hhydraa ];
+    license = licenses.mit;
+    platforms = platforms.linux;
+    mainProgram = "warpd";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/watchmate/Cargo.lock b/nixpkgs/pkgs/applications/misc/watchmate/Cargo.lock
new file mode 100644
index 000000000000..df3bf599d496
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/watchmate/Cargo.lock
@@ -0,0 +1,3072 @@
+# 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 = "aes"
+version = "0.7.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+ "opaque-debug",
+]
+
+[[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.69"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800"
+
+[[package]]
+name = "async-broadcast"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
+dependencies = [
+ "event-listener",
+ "futures-core",
+]
+
+[[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-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",
+ "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",
+ "autocfg",
+ "blocking",
+ "futures-lite",
+]
+
+[[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",
+ "futures-lite",
+ "libc",
+ "log",
+ "parking",
+ "polling",
+ "slab",
+ "socket2",
+ "waker-fn",
+ "windows-sys 0.42.0",
+]
+
+[[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-recursion"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3b015a331cc64ebd1774ba119538573603427eaace0a1950c423ab971f903796"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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.66"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "atomic-waker"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "debc29dde2e69f9e47506b525f639ed42300fc014a3e007832592448fa8e4599"
+
+[[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.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
+
+[[package]]
+name = "base64ct"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+
+[[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 = "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",
+ "futures-lite",
+]
+
+[[package]]
+name = "bluer"
+version = "0.15.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d76ba39a871348200bbbf7dbff9fbaec30f0b988420f7391bfd9fdc5f8b5144"
+dependencies = [
+ "custom_debug",
+ "dbus",
+ "dbus-crossroads",
+ "dbus-tokio",
+ "displaydoc",
+ "futures",
+ "hex",
+ "lazy_static",
+ "libc",
+ "log",
+ "macaddr",
+ "nix",
+ "num-derive",
+ "num-traits",
+ "pin-project",
+ "serde",
+ "serde_json",
+ "strum",
+ "tokio",
+ "tokio-stream",
+ "uuid",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+
+[[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 = "cairo-rs"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8af54f5d48af1226928adc1f57edd22f5df1349e7da1fc96ae15cf43db0e871"
+dependencies = [
+ "bitflags",
+ "cairo-sys-rs",
+ "glib",
+ "libc",
+ "once_cell",
+ "thiserror",
+]
+
+[[package]]
+name = "cairo-sys-rs"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f55382a01d30e5e53f185eee269124f5e21ab526595b872751278dfbb463594e"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+dependencies = [
+ "jobserver",
+]
+
+[[package]]
+name = "cfg-expr"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b0357a6402b295ca3a86bc148e84df46c02e41f41fef186bda662557ef6328aa"
+dependencies = [
+ "smallvec",
+]
+
+[[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 0.1.45",
+ "wasm-bindgen",
+ "winapi",
+]
+
+[[package]]
+name = "cipher"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
+dependencies = [
+ "generic-array",
+]
+
+[[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 = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e"
+dependencies = [
+ "crossbeam-utils",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
+
+[[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.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+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-utils"
+version = "0.8.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+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 = "custom_debug"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e89e0ae2c2a42be29595d05c50e3ce6096c0698a97e021c3289790f0750cc8e2"
+dependencies = [
+ "custom_debug_derive",
+]
+
+[[package]]
+name = "custom_debug_derive"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "08a9f3941234c9f62ceaa2782974827749de9b0a8a6487275a278da068e1baf7"
+dependencies = [
+ "proc-macro2",
+ "syn",
+ "synstructure",
+]
+
+[[package]]
+name = "cxx"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72"
+dependencies = [
+ "cc",
+ "cxxbridge-flags",
+ "cxxbridge-macro",
+ "link-cplusplus",
+]
+
+[[package]]
+name = "cxx-build"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613"
+dependencies = [
+ "cc",
+ "codespan-reporting",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "scratch",
+ "syn",
+]
+
+[[package]]
+name = "cxxbridge-flags"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97"
+
+[[package]]
+name = "cxxbridge-macro"
+version = "1.0.92"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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-crossroads"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3a4c83437187544ba5142427746835061b330446ca8902eabd70e4afb8f76de0"
+dependencies = [
+ "dbus",
+]
+
+[[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 = "derivative"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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 = "dirs"
+version = "4.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
+dependencies = [
+ "dirs-sys",
+]
+
+[[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 = "displaydoc"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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 = "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 = "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.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "winapi",
+]
+
+[[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 = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "field-offset"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3cf3a800ff6e860c863ca6d4b16fd999db8b752819c1606884047b73e468535"
+dependencies = [
+ "memoffset 0.8.0",
+ "rustc_version",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "flume"
+version = "0.10.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+ "nanorand",
+ "pin-project",
+ "spin",
+]
+
+[[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 = "fragile"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa"
+
+[[package]]
+name = "futures"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549"
+dependencies = [
+ "futures-channel",
+ "futures-core",
+ "futures-executor",
+ "futures-io",
+ "futures-sink",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-channel"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac"
+dependencies = [
+ "futures-core",
+ "futures-sink",
+]
+
+[[package]]
+name = "futures-core"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd"
+
+[[package]]
+name = "futures-executor"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83"
+dependencies = [
+ "futures-core",
+ "futures-task",
+ "futures-util",
+]
+
+[[package]]
+name = "futures-io"
+version = "0.3.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91"
+
+[[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.27"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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-channel",
+ "futures-core",
+ "futures-io",
+ "futures-macro",
+ "futures-sink",
+ "futures-task",
+ "memchr",
+ "pin-project-lite",
+ "pin-utils",
+ "slab",
+]
+
+[[package]]
+name = "gdk-pixbuf"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b023fbe0c6b407bd3d9805d107d9800da3829dc5a676653210f1d5f16d7f59bf"
+dependencies = [
+ "bitflags",
+ "gdk-pixbuf-sys",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+]
+
+[[package]]
+name = "gdk-pixbuf-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b41bd2b44ed49d99277d3925652a163038bd5ed943ec9809338ffb2f4391e3b"
+dependencies = [
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gdk4"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5042053ee765aeef08d9d7e3f0f1e36a4d37f1659b3f93ad3d6997515dbb64a"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "gdk-pixbuf",
+ "gdk4-sys",
+ "gio",
+ "glib",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gdk4-sys"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14f0fb00507af1e9299681dd09965f720e2b5ea95536d49a5681e8994ef10c7a"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "pango-sys",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "generic-array"
+version = "0.14.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+dependencies = [
+ "typenum",
+ "version_check",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+dependencies = [
+ "cfg-if",
+ "js-sys",
+ "libc",
+ "wasi 0.11.0+wasi-snapshot-preview1",
+ "wasm-bindgen",
+]
+
+[[package]]
+name = "gio"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2261a3b4e922ec676d1c27ac466218c38cf5dcb49a759129e54bb5046e442125"
+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.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6b1d43b0d7968b48455244ecafe41192871257f5740aa6b095eb19db78e362a5"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+ "winapi",
+]
+
+[[package]]
+name = "glib"
+version = "0.17.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfb53061756195d76969292c2d2e329e01259276524a9bae6c9b73af62854773"
+dependencies = [
+ "bitflags",
+ "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.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "454924cafe58d9174dc32972261fe271d6cd3c10f5e9ff505522a28dcf601a40"
+dependencies = [
+ "anyhow",
+ "heck",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "glib-sys"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49f00ad0a1bf548e61adfff15d83430941d9e1bb620e334f779edd1c745680a5"
+dependencies = [
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "gobject-sys"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15e75b0000a64632b2d8ca3cf856af9308e3a970844f6e9659bd197f026793d0"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "graphene-rs"
+version = "0.17.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21cf11565bb0e4dfc2f99d4775b6c329f0d40a2cff9c0066214d31a0e1b46256"
+dependencies = [
+ "glib",
+ "graphene-sys",
+ "libc",
+]
+
+[[package]]
+name = "graphene-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf80a4849a8d9565410a8fec6fc3678e9c617f4ac7be182ca55ab75016e07af9"
+dependencies = [
+ "glib-sys",
+ "libc",
+ "pkg-config",
+ "system-deps",
+]
+
+[[package]]
+name = "gsk4"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2fa9cd285a72a95124b65c069a9cb1b8fb8e310be71783404c39fccf3bf7774c"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "gdk4",
+ "glib",
+ "graphene-rs",
+ "gsk4-sys",
+ "libc",
+ "pango",
+]
+
+[[package]]
+name = "gsk4-sys"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a445ae1e50cbf181a1d5c61b920a7e7e8657b96e0ecdbbf8911a86fad462a32"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk4-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gtk4"
+version = "0.6.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b28a32a04cd75cef14a0983f8b0c669e0fe152a0a7725accdeb594e2c764c88b"
+dependencies = [
+ "bitflags",
+ "cairo-rs",
+ "field-offset",
+ "futures-channel",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "graphene-rs",
+ "gsk4",
+ "gtk4-macros",
+ "gtk4-sys",
+ "libc",
+ "once_cell",
+ "pango",
+]
+
+[[package]]
+name = "gtk4-macros"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db4676c4f90d8b010e88cb4558f61f47d76d6f6b8e6f6b89e62640f443907f61"
+dependencies = [
+ "anyhow",
+ "proc-macro-crate",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "gtk4-sys"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "65463dc801460e498d5e7ffa6e9ae2cfbed7d05fabd1ca5a8d024adbc89eeda6"
+dependencies = [
+ "cairo-sys-rs",
+ "gdk-pixbuf-sys",
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "graphene-sys",
+ "gsk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "gvdb"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d6fc5915836ff1779eb9455810dad729811334b1026d4316eaf89c3a415e32ea"
+dependencies = [
+ "byteorder",
+ "flate2",
+ "lazy_static",
+ "memmap2",
+ "quick-xml",
+ "safe-transmute",
+ "serde",
+ "serde_json",
+ "walkdir",
+ "zvariant",
+]
+
+[[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.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.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 = "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 = "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-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 = "infinitime"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "bluer",
+ "chrono",
+ "futures",
+ "log",
+ "mpris2-zbus",
+ "reqwest",
+ "serde",
+ "serde_json",
+ "tokio",
+ "uuid",
+ "version-compare",
+ "zbus",
+ "zip",
+]
+
+[[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-lifetimes"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3"
+dependencies = [
+ "libc",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "ipnet"
+version = "2.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146"
+
+[[package]]
+name = "is-terminal"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857"
+dependencies = [
+ "hermit-abi 0.3.1",
+ "io-lifetimes",
+ "rustix",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+
+[[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.61"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+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 = "libadwaita"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c4efd2020a4fcedbad2c4a97de97bf6045e5dc49d61d5a5d0cfd753db60700"
+dependencies = [
+ "bitflags",
+ "futures-channel",
+ "gdk-pixbuf",
+ "gdk4",
+ "gio",
+ "glib",
+ "gtk4",
+ "libadwaita-sys",
+ "libc",
+ "once_cell",
+ "pango",
+]
+
+[[package]]
+name = "libadwaita-sys"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0727b85b4fe2b1bed5ac90df6343de15cbf8118bfb96d7c3cc1512681a4b34ac"
+dependencies = [
+ "gdk4-sys",
+ "gio-sys",
+ "glib-sys",
+ "gobject-sys",
+ "gtk4-sys",
+ "libc",
+ "pango-sys",
+ "system-deps",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.140"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+
+[[package]]
+name = "libdbus-sys"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f8d7ae751e1cb825c840ae5e682f59b098cdfd213c350ac268b61449a5f58a0"
+dependencies = [
+ "pkg-config",
+]
+
+[[package]]
+name = "link-cplusplus"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
+dependencies = [
+ "cc",
+]
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
+
+[[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",
+]
+
+[[package]]
+name = "macaddr"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baee0bbc17ce759db233beb01648088061bf678383130602a298e6998eedb2d8"
+
+[[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.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+dependencies = [
+ "autocfg",
+]
+
+[[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.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
+
+[[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 0.11.0+wasi-snapshot-preview1",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "mpris2-zbus"
+version = "0.1.0"
+source = "git+https://github.com/pop-os/mpris2-zbus#a41a9b994a901cb2bb7a83424c8c21a78ba658c6"
+dependencies = [
+ "serde",
+ "thiserror",
+ "time 0.3.20",
+ "zbus",
+ "zvariant",
+]
+
+[[package]]
+name = "nanorand"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
+dependencies = [
+ "getrandom",
+]
+
+[[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.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 = "num-derive"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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.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 = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "openssl"
+version = "0.10.46"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd2523381e46256e40930512c7fd25562b9eae4812cb52078f155e87217c9d1e"
+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.81"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "176be2629957c157240f68f61f2d0053ad3a4ecfdd9ebf1e6521d18d9635cf67"
+dependencies = [
+ "autocfg",
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "ordered-stream"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+]
+
+[[package]]
+name = "pango"
+version = "0.17.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "52c280b82a881e4208afb3359a8e7fde27a1b272280981f1f34610bed5770d37"
+dependencies = [
+ "bitflags",
+ "gio",
+ "glib",
+ "libc",
+ "once_cell",
+ "pango-sys",
+]
+
+[[package]]
+name = "pango-sys"
+version = "0.17.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4293d0f0b5525eb5c24734d30b0ed02cd02aa734f216883f376b54de49625de8"
+dependencies = [
+ "glib-sys",
+ "gobject-sys",
+ "libc",
+ "system-deps",
+]
+
+[[package]]
+name = "parking"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+
+[[package]]
+name = "password-hash"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
+dependencies = [
+ "base64ct",
+ "rand_core",
+ "subtle",
+]
+
+[[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 = "percent-encoding"
+version = "2.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+
+[[package]]
+name = "pin-project"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+dependencies = [
+ "pin-project-internal",
+]
+
+[[package]]
+name = "pin-project-internal"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa"
+dependencies = [
+ "autocfg",
+ "bitflags",
+ "cfg-if",
+ "concurrent-queue",
+ "libc",
+ "log",
+ "pin-project-lite",
+ "windows-sys 0.45.0",
+]
+
+[[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",
+ "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.52"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quick-xml"
+version = "0.27.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffc053f057dd768a56f62cd7e434c42c831d296968997e9ac1f76ea7c2d14c41"
+dependencies = [
+ "memchr",
+ "serde",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+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_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.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848"
+
+[[package]]
+name = "relm4"
+version = "0.6.0-beta.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f169f698ce2e487eed2306898fcf262224a287d0e81480db4190e74cfec412cf"
+dependencies = [
+ "async-trait",
+ "flume",
+ "fragile",
+ "futures",
+ "gtk4",
+ "libadwaita",
+ "once_cell",
+ "relm4-macros",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "relm4-components"
+version = "0.6.0-beta.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "734838f188ee58954351c75175cb5ba6e9e67f90576b7fb90b928b2cb6043e1d"
+dependencies = [
+ "once_cell",
+ "relm4",
+ "tracker",
+]
+
+[[package]]
+name = "relm4-icons"
+version = "0.6.0-beta.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7123701f31271a2e33a53270a6e73010356d99cff1b97c89276299609af3303"
+dependencies = [
+ "gtk4",
+ "gvdb",
+]
+
+[[package]]
+name = "relm4-macros"
+version = "0.6.0-beta.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fa06febb3685960e7c1c44e21e44a3829325940b31d1e91391a43c32020c201"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.11.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9"
+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 = "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.36.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+
+[[package]]
+name = "ryu"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+
+[[package]]
+name = "safe-transmute"
+version = "0.11.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "98a01dab6acf992653be49205bdd549f32f17cb2803e8eacf1560bf97259aae8"
+
+[[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.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
+dependencies = [
+ "windows-sys 0.42.0",
+]
+
+[[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.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
+
+[[package]]
+name = "security-framework"
+version = "2.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+dependencies = [
+ "bitflags",
+ "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 = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "serde"
+version = "1.0.156"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "314b5b092c0ade17c00142951e50ced110ec27cea304b1037c6969246c2469a4"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.156"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d7e29c4601e36bcec74a223228dce795f4cd3616341a4af93520ca1a837c087d"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.94"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "serde_repr"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "395627de918015623b32e7669714206363a7fc00382bf477e72c1f7533e8eafc"
+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 = "sha1"
+version = "0.10.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[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 = "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.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5d6e0250b93c8427a177b849d144a96d5acc57006149479403d7861ab721e34"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "static_assertions"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "strum"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+dependencies = [
+ "strum_macros",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn",
+]
+
+[[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 = "synstructure"
+version = "0.12.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+ "unicode-xid",
+]
+
+[[package]]
+name = "system-deps"
+version = "6.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2955b1fe31e1fa2fbd1976b71cc69a606d7d4da16f6de3333d0c92d51419aeff"
+dependencies = [
+ "cfg-expr",
+ "heck",
+ "pkg-config",
+ "toml",
+ "version-compare",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95"
+dependencies = [
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys 0.42.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "thiserror"
+version = "1.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+dependencies = [
+ "serde",
+ "time-core",
+ "time-macros",
+]
+
+[[package]]
+name = "time-core"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+
+[[package]]
+name = "time-macros"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+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.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64"
+dependencies = [
+ "autocfg",
+ "bytes",
+ "libc",
+ "memchr",
+ "mio",
+ "num_cpus",
+ "pin-project-lite",
+ "socket2",
+ "tokio-macros",
+ "tracing",
+ "windows-sys 0.45.0",
+]
+
+[[package]]
+name = "tokio-macros"
+version = "1.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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-stream"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313"
+dependencies = [
+ "futures-core",
+ "pin-project-lite",
+ "tokio",
+]
+
+[[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 = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "toml_datetime"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+
+[[package]]
+name = "toml_edit"
+version = "0.19.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc18466501acd8ac6a3f615dd29a3438f8ca6bb3b19537138b3106e575621274"
+dependencies = [
+ "indexmap",
+ "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",
+ "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 = "tracker"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4948dd579c7facd8b583a8838956177740021c7bbcc1074ff49f7a5e76a150fd"
+dependencies = [
+ "tracker-macros",
+]
+
+[[package]]
+name = "tracker-macros"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32b086e6cb7f65c79bc0b132db4e468c4159133c917da44e1b97594101e9e7e0"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[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 = "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.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c"
+
+[[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 = "unicode-xid"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
+
+[[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 = "uuid"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79"
+dependencies = [
+ "getrandom",
+]
+
+[[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 = "waker-fn"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
+
+[[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 = "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.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.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",
+ "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",
+ "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 = "watchmate"
+version = "0.4.4"
+dependencies = [
+ "anyhow",
+ "env_logger",
+ "futures",
+ "infinitime",
+ "log",
+ "relm4",
+ "relm4-components",
+ "relm4-icons",
+ "version-compare",
+]
+
+[[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 = "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.42.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+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-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 = "winnow"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23d020b441f92996c80d94ae9166e8501e59c7bb56121189dc9eab3bd8216966"
+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 = "zbus"
+version = "3.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20aae5dd5b051971cd2f49f9f3b860e57b2b495ba5ba254eaec42d34ede57e97"
+dependencies = [
+ "async-broadcast",
+ "async-executor",
+ "async-fs",
+ "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",
+ "tokio",
+ "tracing",
+ "uds_windows",
+ "winapi",
+ "zbus_macros",
+ "zbus_names",
+ "zvariant",
+]
+
+[[package]]
+name = "zbus_macros"
+version = "3.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9264b3a1bcf5503d4e0348b6e7efe1da58d4f92a913c15ed9e63b52de85faaa1"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn",
+ "zvariant_utils",
+]
+
+[[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 = "zip"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef"
+dependencies = [
+ "aes",
+ "byteorder",
+ "bzip2",
+ "constant_time_eq",
+ "crc32fast",
+ "crossbeam-utils",
+ "flate2",
+ "hmac",
+ "pbkdf2",
+ "sha1",
+ "time 0.3.20",
+ "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.7+zstd.1.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "zvariant"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "46fe4914a985446d6fd287019b5fceccce38303d71407d9e6e711d44954a05d8"
+dependencies = [
+ "byteorder",
+ "enumflags2",
+ "libc",
+ "serde",
+ "static_assertions",
+ "zvariant_derive",
+]
+
+[[package]]
+name = "zvariant_derive"
+version = "3.12.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34c20260af4b28b3275d6676c7e2a6be0d4332e8e0aba4616d34007fd84e462a"
+dependencies = [
+ "proc-macro-crate",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "zvariant_utils",
+]
+
+[[package]]
+name = "zvariant_utils"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53b22993dbc4d128a17a3b6c92f1c63872dd67198537ee728d8b5d7c40640a8b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
diff --git a/nixpkgs/pkgs/applications/misc/watchmate/default.nix b/nixpkgs/pkgs/applications/misc/watchmate/default.nix
new file mode 100644
index 000000000000..b78d7f5277ca
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/watchmate/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, gtk4
+, libadwaita
+, bluez
+, dbus
+, openssl
+, wrapGAppsHook4
+, glib
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "watchmate";
+  version = "0.4.5";
+
+  src = fetchFromGitHub {
+    owner = "azymohliad";
+    repo = "watchmate";
+    rev = "v${version}";
+    hash = "sha256-4L9mfZWphwXON8VgRcGrz+k62wyPzd1phtRu9HQnVdE=";
+  };
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "mpris2-zbus-0.1.0" = "sha256-f2hth7TnA14I4UPyp0u4IfMi9WY4G3M1sEc4xNtnbr0=";
+    };
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook4
+    glib
+  ];
+  buildInputs = [
+    gtk4
+    libadwaita
+    bluez
+    dbus
+    openssl
+  ];
+
+  postInstall = ''
+    install -Dm444 assets/io.gitlab.azymohliad.WatchMate.desktop -t $out/share/applications/
+    install -Dm444 assets/io.gitlab.azymohliad.WatchMate.metainfo.xml -t $out/share/metainfo/
+    install -Dm444 assets/icons/io.gitlab.azymohliad.WatchMate.svg -t $out/share/icons/hicolor/scalable/apps/
+    install -Dm444 assets/icons/io.gitlab.azymohliad.WatchMate-symbolic.svg -t $out/share/icons/hicolor/scalable/apps/
+  '';
+
+  meta = with lib; {
+    description = "PineTime smart watch companion app for Linux phone and desktop";
+    homepage = "https://github.com/azymohliad/watchmate";
+    changelog = "https://github.com/azymohliad/watchmate/raw/v${version}/CHANGELOG.md";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ chuangzhu ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/watershot/default.nix b/nixpkgs/pkgs/applications/misc/watershot/default.nix
new file mode 100644
index 000000000000..6a6feb209d05
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/watershot/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, wayland
+, libxkbcommon
+, fontconfig
+, makeWrapper
+, grim
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "watershot";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "Kirottu";
+    repo = "watershot";
+    rev = "v${version}";
+    hash = "sha256-QX6BxK26kcrg0yKJA7M+Qlr3WwLaykBquI6UK8wVtX4=";
+  };
+
+  cargoHash = "sha256-481E5/mUeeoaZ0N//tRWCyV8/sRRP6VdB06gB1whgzU=";
+
+  nativeBuildInputs = [ pkg-config wayland makeWrapper ];
+
+  buildInputs = [ wayland fontconfig libxkbcommon ];
+
+  postInstall = ''
+    wrapProgram $out/bin/watershot \
+      --prefix PATH : ${lib.makeBinPath [ grim ]}
+  '';
+
+  meta = with lib; {
+    platforms = with platforms; linux;
+    description = "A simple wayland native screenshot tool";
+    homepage = "https://github.com/Kirottu/watershot";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ lord-valen ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/waybar/default.nix b/nixpkgs/pkgs/applications/misc/waybar/default.nix
new file mode 100644
index 000000000000..dad61b88d4ff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/waybar/default.nix
@@ -0,0 +1,195 @@
+{ lib
+, stdenv
+, bash
+, fetchFromGitHub
+, SDL2
+, alsa-lib
+, catch2_3
+, fftw
+, glib
+, gobject-introspection
+, gtk-layer-shell
+, gtkmm3
+, howard-hinnant-date
+, hyprland
+, iniparser
+, jsoncpp
+, libdbusmenu-gtk3
+, libevdev
+, libinotify-kqueue
+, libinput
+, libjack2
+, libmpdclient
+, libnl
+, libpulseaudio
+, libsigcxx
+, libxkbcommon
+, meson
+, ncurses
+, ninja
+, pipewire
+, pkg-config
+, playerctl
+, portaudio
+, python3
+, scdoc
+, sndio
+, spdlog
+, sway
+, udev
+, upower
+, wayland
+, wireplumber
+, wrapGAppsHook
+
+, cavaSupport ? true
+, evdevSupport ? true
+, experimentalPatches ? true
+, hyprlandSupport ? true
+, inputSupport ? true
+, jackSupport ? true
+, mpdSupport ? true
+, mprisSupport ? stdenv.isLinux
+, nlSupport ? true
+, pulseSupport ? true
+, rfkillSupport ? true
+, runTests ? true
+, sndioSupport ? true
+, swaySupport ? true
+, traySupport ? true
+, udevSupport ? true
+, upowerSupport ? true
+, wireplumberSupport ? true
+, withMediaPlayer ? mprisSupport && false
+}:
+
+let
+  # Derived from subprojects/cava.wrap
+  libcava.src = fetchFromGitHub {
+    owner = "LukashonakV";
+    repo = "cava";
+    rev = "0.9.1";
+    hash = "sha256-FnRJJV0poRmw+y4nt1X7Z0ipX86LRK1TJhNKHFk0rTw=";
+  };
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "waybar";
+  version = "0.9.24";
+
+  src = fetchFromGitHub {
+    owner = "Alexays";
+    repo = "Waybar";
+    rev = finalAttrs.version;
+    hash = "sha256-JhLKGzqZ8akWcyHTav2TGcGmXk9dy9Xj4+/oFCPeNU0=";
+  };
+
+  postUnpack = lib.optional cavaSupport ''
+    pushd "$sourceRoot"
+    cp -R --no-preserve=mode,ownership ${libcava.src} subprojects/cava-0.9.1
+    patchShebangs .
+    popd
+  '';
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    scdoc
+    wrapGAppsHook
+  ] ++ lib.optional withMediaPlayer gobject-introspection;
+
+  propagatedBuildInputs = lib.optionals withMediaPlayer [
+    glib
+    playerctl
+    python3.pkgs.pygobject3
+  ];
+
+  strictDeps = false;
+
+  buildInputs = [
+    gtk-layer-shell
+    gtkmm3
+    howard-hinnant-date
+    jsoncpp
+    libsigcxx
+    libxkbcommon
+    spdlog
+    wayland
+  ]
+  ++ lib.optionals cavaSupport [
+    SDL2
+    alsa-lib
+    fftw
+    iniparser
+    ncurses
+    pipewire
+    portaudio
+  ]
+  ++ lib.optional evdevSupport libevdev
+  ++ lib.optional hyprlandSupport hyprland
+  ++ lib.optional inputSupport libinput
+  ++ lib.optional jackSupport libjack2
+  ++ lib.optional mpdSupport libmpdclient
+  ++ lib.optional mprisSupport playerctl
+  ++ lib.optional nlSupport libnl
+  ++ lib.optional pulseSupport libpulseaudio
+  ++ lib.optional sndioSupport sndio
+  ++ lib.optional swaySupport sway
+  ++ lib.optional traySupport libdbusmenu-gtk3
+  ++ lib.optional udevSupport udev
+  ++ lib.optional upowerSupport upower
+  ++ lib.optional wireplumberSupport wireplumber
+  ++ lib.optional (!stdenv.isLinux) libinotify-kqueue;
+
+  nativeCheckInputs = [ catch2_3 ];
+  doCheck = runTests;
+
+  mesonFlags = (lib.mapAttrsToList lib.mesonEnable {
+    "cava" = cavaSupport;
+    "dbusmenu-gtk" = traySupport;
+    "gtk-layer-shell" = true;
+    "jack" = jackSupport;
+    "libinput" = inputSupport;
+    "libnl" = nlSupport;
+    "libudev" = udevSupport;
+    "man-pages" = true;
+    "mpd" = mpdSupport;
+    "mpris" = mprisSupport;
+    "pulseaudio" = pulseSupport;
+    "rfkill" = rfkillSupport;
+    "sndio" = sndioSupport;
+    "systemd" = false;
+    "tests" = runTests;
+    "upower_glib" = upowerSupport;
+    "wireplumber" = wireplumberSupport;
+  }) ++ lib.optional experimentalPatches (lib.mesonBool "experimental" true);
+
+  postPatch = ''
+    substituteInPlace include/util/command.hpp \
+      --replace-fail /bin/sh ${lib.getExe' bash "sh"}
+  '';
+
+  preFixup = lib.optionalString withMediaPlayer ''
+    cp $src/resources/custom_modules/mediaplayer.py $out/bin/waybar-mediaplayer.py
+
+    wrapProgram $out/bin/waybar-mediaplayer.py \
+      --prefix PYTHONPATH : "$PYTHONPATH:$out/${python3.sitePackages}"
+  '';
+
+  meta = {
+    homepage = "https://github.com/alexays/waybar";
+    description = "Highly customizable Wayland bar for Sway and Wlroots based compositors";
+    changelog = "https://github.com/alexays/waybar/releases/tag/${finalAttrs.version}";
+    license = lib.licenses.mit;
+    mainProgram = "waybar";
+    maintainers = with lib.maintainers; [
+      FlorianFranzen
+      lovesegfault
+      minijackson
+      rodrgz
+      synthetica
+      khaneliman
+    ];
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/waycorner/default.nix b/nixpkgs/pkgs/applications/misc/waycorner/default.nix
new file mode 100644
index 000000000000..66e5660042ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/waycorner/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, makeWrapper
+, rustPlatform
+, pkg-config
+, fetchFromGitHub
+, wayland
+,
+}:
+rustPlatform.buildRustPackage rec {
+  pname = "waycorner";
+  version = "0.2.1";
+  src = fetchFromGitHub {
+    owner = "AndreasBackx";
+    repo = "waycorner";
+    rev = version;
+    hash = "sha256-xvmvtn6dMqt8kUwvn5d5Nl1V84kz1eWa9BSIN/ONkSQ=";
+  };
+  cargoHash = "sha256-Dl+GhJywWhaC4QMS70klazPsFipGVRW+6jrXH2XsEAI=";
+  buildInputs = [
+    wayland
+  ];
+  nativeBuildInputs = [
+    pkg-config
+    makeWrapper
+  ];
+  postFixup = ''
+    # the program looks for libwayland-client.so at runtime
+    wrapProgram $out/bin/waycorner \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ wayland ]}
+  '';
+
+  meta = with lib; {
+    description = "Hot corners for Wayland";
+    changelog = "https://github.com/AndreasBackx/waycorner/blob/main/CHANGELOG.md";
+    homepage = "https://github.com/AndreasBackx/waycorner";
+    platforms = platforms.linux;
+    license = licenses.mit;
+    maintainers = with maintainers; [ NotAShelf ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/waylock/default.nix b/nixpkgs/pkgs/applications/misc/waylock/default.nix
new file mode 100644
index 000000000000..e07c2b7ed53c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/waylock/default.nix
@@ -0,0 +1,52 @@
+{ lib
+, stdenv
+, fetchFromGitea
+, libxkbcommon
+, pam
+, pkg-config
+, scdoc
+, wayland
+, wayland-protocols
+, zig_0_11
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "waylock";
+  version = "0.6.5";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "ifreund";
+    repo = "waylock";
+    rev = "v${finalAttrs.version}";
+    fetchSubmodules = true;
+    hash = "sha256-wvZrRPZobDh+rB3RSaRrz0xDHuYwT2eoQEu3AbYKn8Y=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    scdoc
+    wayland
+    zig_0_11.hook
+  ];
+
+  buildInputs = [
+    wayland-protocols
+    libxkbcommon
+    pam
+  ];
+
+  zigBuildFlags = [ "-Dman-pages" ];
+
+  passthru.updateScript = ./update.nu;
+
+  meta = {
+    homepage = "https://codeberg.org/ifreund/waylock";
+    changelog = "https://codeberg.org/ifreund/waylock/releases/tag/v${finalAttrs.version}";
+    description = "A small screenlocker for Wayland compositors";
+    license = lib.licenses.isc;
+    maintainers = with lib.maintainers; [ adamcstephens jordanisaacs ];
+    mainProgram = "waylock";
+    platforms = lib.platforms.linux;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/waylock/update.nu b/nixpkgs/pkgs/applications/misc/waylock/update.nu
new file mode 100755
index 000000000000..514a755db1a3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/waylock/update.nu
@@ -0,0 +1,5 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i nu -p nushell common-updater-scripts
+
+let latest_tag = list-git-tags --url=https://codeberg.org/ifreund/waylock | lines | sort --natural | str replace v '' | last
+update-source-version waylock $latest_tag
diff --git a/nixpkgs/pkgs/applications/misc/waypaper/default.nix b/nixpkgs/pkgs/applications/misc/waypaper/default.nix
new file mode 100644
index 000000000000..1b2ca4843461
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/waypaper/default.nix
@@ -0,0 +1,55 @@
+{ lib
+, python3
+, fetchFromGitHub
+, gobject-introspection
+, wrapGAppsHook
+, killall
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "waypaper";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "anufrievroman";
+    repo = "waypaper";
+    rev = "refs/tags/${version}";
+    hash = "sha256-AIOrn5I0WX8S4iaK6mVEbdn1tQiED0JYA0GXDXJ6eNE=";
+  };
+
+  nativeBuildInputs = [
+    gobject-introspection
+    wrapGAppsHook
+  ];
+
+  propagatedBuildInputs = [
+    python3.pkgs.pygobject3
+    python3.pkgs.platformdirs
+    python3.pkgs.importlib-metadata
+    python3.pkgs.pillow
+    killall
+  ];
+
+  # has no tests
+  doCheck = false;
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    changelog = "https://github.com/anufrievroman/waypaper/releases/tag/${version}";
+    description = "GUI wallpaper setter for Wayland-based window managers";
+    longDescription = ''
+      GUI wallpaper setter for Wayland-based window managers that works as a frontend for popular backends like swaybg and swww.
+
+      If wallpaper does not change, make sure that swaybg or swww is installed.
+    '';
+    homepage = "https://github.com/anufrievroman/waypaper";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ totalchaos ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wbg/default.nix b/nixpkgs/pkgs/applications/misc/wbg/default.nix
new file mode 100644
index 000000000000..4501f2c3ffeb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wbg/default.nix
@@ -0,0 +1,66 @@
+{ stdenv
+, lib
+, fetchFromGitea
+, pkg-config
+, meson
+, ninja
+, pixman
+, tllist
+, wayland
+, wayland-scanner
+, wayland-protocols
+, enablePNG ? true
+, enableJPEG ? true
+, enableWebp ? true
+# Optional dependencies
+, libpng
+, libjpeg
+, libwebp
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wbg";
+  version = "1.1.0";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "dnkl";
+    repo = "wbg";
+    rev = version;
+    sha256 = "sha256-JJIIqSc0qHgjtpGKai8p6vihXg16unsO7vW91pioAmc=";
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+    meson
+    ninja
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    pixman
+    tllist
+    wayland
+    wayland-protocols
+  ] ++ lib.optional enablePNG libpng
+    ++ lib.optional enableJPEG libjpeg
+    ++ lib.optional enableWebp libwebp;
+
+  mesonBuildType = "release";
+
+  mesonFlags = [
+    (lib.mesonEnable "png" enablePNG)
+    (lib.mesonEnable "jpeg" enableJPEG)
+    (lib.mesonEnable "webp" enableWebp)
+  ];
+
+  meta = with lib; {
+    description = "Wallpaper application for Wayland compositors";
+    homepage = "https://codeberg.org/dnkl/wbg";
+    changelog = "https://codeberg.org/dnkl/wbg/releases/tag/${version}";
+    license = licenses.isc;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; linux;
+    mainProgram = "wbg";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wcalc/default.nix b/nixpkgs/pkgs/applications/misc/wcalc/default.nix
new file mode 100644
index 000000000000..62ab0aaa05a5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wcalc/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, mpfr, readline }:
+
+stdenv.mkDerivation rec {
+  pname = "wcalc";
+  version = "2.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/w-calc/${pname}-${version}.tar.bz2";
+    sha256 = "1vi8dl6rccqiq1apmpwawyg2ywx6a1ic1d3cvkf2hlwk1z11fb0f";
+  };
+
+  buildInputs = [ mpfr readline ];
+
+  meta = with lib; {
+    description = "A command line calculator";
+    homepage = "https://w-calc.sourceforge.net";
+    license = licenses.gpl2;
+    platforms = platforms.all;
+    mainProgram = "wcalc";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/weather/default.nix b/nixpkgs/pkgs/applications/misc/weather/default.nix
new file mode 100644
index 000000000000..290de03f39ff
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/weather/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchurl, python3, installShellFiles }:
+
+stdenv.mkDerivation rec {
+  version = "2.4.4";
+  pname = "weather";
+
+  src = fetchurl {
+    url = "http://fungi.yuggoth.org/weather/src/${pname}-${version}.tar.xz";
+    sha256 = "sha256-uBwcntmLmIAztbIOHEDx0Y0/kcoJqAHqBOM2yBiRHrU=";
+  };
+
+  nativeBuildInputs = [
+    installShellFiles
+    python3.pkgs.wrapPython
+  ];
+
+  dontConfigure = true;
+  dontBuild = true;
+
+  # Upstream doesn't provide a setup.py or alike, so we follow:
+  # http://fungi.yuggoth.org/weather/doc/install.rst#id3
+  installPhase = ''
+    site_packages=$out/${python3.sitePackages}
+    install -Dt $out/bin -m 755 weather
+    install -Dt $site_packages weather.py
+    install -Dt $out/share/weather-util \
+      airports overrides.{conf,log} places slist stations \
+      zctas zlist zones
+    install -Dt $out/etc weatherrc
+
+    sed -i \
+      -e "s|/etc|$out/etc|g" \
+      -e "s|else: default_setpath = \".:~/.weather|&:$out/share/weather-util|" \
+      $site_packages/weather.py
+
+    wrapPythonPrograms
+
+    installManPage weather.1 weatherrc.5
+  '';
+
+  meta = with lib; {
+    homepage = "http://fungi.yuggoth.org/weather";
+    description = "Quick access to current weather conditions and forecasts";
+    license = licenses.isc;
+    maintainers = [ maintainers.matthiasbeyer ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/webfontkitgenerator/default.nix b/nixpkgs/pkgs/applications/misc/webfontkitgenerator/default.nix
new file mode 100644
index 000000000000..57d006a5b569
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/webfontkitgenerator/default.nix
@@ -0,0 +1,61 @@
+{ appstream-glib
+, desktop-file-utils
+, fetchFromGitHub
+, gettext
+, glib-networking
+, gobject-introspection
+, gtk4
+, gtksourceview5
+, lib
+, libadwaita
+, libsoup_3
+, meson
+, ninja
+, pkg-config
+, python3
+, stdenv
+, wrapGAppsHook4
+}:
+stdenv.mkDerivation (finalAttrs: {
+  pname = "webfont-kit-generator";
+  version = "1.0.3";
+
+  src = fetchFromGitHub {
+    owner = "rafaelmardojai";
+    repo = "webfont-kit-generator";
+    rev = finalAttrs.version;
+    hash = "sha256-aD/1moWIiU4zpLTW+VHH9n/sj10vCZ8UzB2ey3mR0/k=";
+  };
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    gettext
+    gobject-introspection
+    gtk4 # For gtk4-update-icon-cache
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    glib-networking
+    gtk4
+    gtksourceview5
+    libadwaita
+    libsoup_3
+    (python3.withPackages (ps: with ps; [
+      fonttools
+      pygobject3
+    ]))
+  ];
+
+  meta = with lib; {
+    description = "Webfont Kit Generator is a simple utility that allows you to generate woff, woff2 and the necessary CSS boilerplate from non-web font formats (otf & ttf)";
+    homepage = "https://apps.gnome.org/app/com.rafaelmardojai.WebfontKitGenerator";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ benediktbroich ];
+    platforms = platforms.unix;
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/wego/default.nix b/nixpkgs/pkgs/applications/misc/wego/default.nix
new file mode 100644
index 000000000000..3ff6a7279ad6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wego/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "wego";
+  version = "2.2";
+
+  src = fetchFromGitHub {
+    owner = "schachmat";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-bkbH3RewlYYNamAhAZGWQmzNdGB06K3m/D8ScsQP9ic=";
+  };
+
+  vendorHash = "sha256-aXrXw/7ZtSZXIKDMZuWPV2zAf0e0lU0QCBhua7tHGEY=";
+
+  meta = with lib; {
+    homepage = "https://github.com/schachmat/wego";
+    description = "Weather app for the terminal";
+    license = licenses.isc;
+    mainProgram = "wego";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/whalebird/default.nix b/nixpkgs/pkgs/applications/misc/whalebird/default.nix
new file mode 100644
index 000000000000..ce7d178f1c05
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/whalebird/default.nix
@@ -0,0 +1,100 @@
+{ lib, stdenv, fetchurl
+, autoPatchelfHook, makeDesktopItem, copyDesktopItems, makeWrapper, gnugrep, asar
+, electron, python3, alsa-lib, gtk3, libdbusmenu, libxshmfence, mesa, nss
+}:
+
+stdenv.mkDerivation rec {
+  pname = "whalebird";
+  version = "5.0.7";
+
+  src = let
+    downloads = "https://github.com/h3poteto/whalebird-desktop/releases/download/v${version}";
+  in
+    if stdenv.system == "x86_64-linux" then
+      fetchurl {
+        url = downloads + "/Whalebird-${version}-linux-x64.tar.bz2";
+        hash = "sha256-eufP038REwF2VwAxxI8R0S3fE8oJ+SX/CES5ozuut2w=";
+      }
+    else if stdenv.system == "aarch64-linux" then
+      fetchurl {
+        url = downloads + "/Whalebird-${version}-linux-arm64.tar.bz2";
+        hash = "sha256-U0xVTUUm6wsRxYc1w4vfNtVE6o8dNzXTSi+IX4mgDEE=";
+      }
+    else
+      throw "Whalebird is not supported for ${stdenv.system}";
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    makeWrapper
+    copyDesktopItems
+    gnugrep
+    asar
+  ];
+
+  buildInputs = [ alsa-lib gtk3 libdbusmenu libxshmfence mesa nss ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      desktopName = "Whalebird";
+      comment = meta.description;
+      categories = [ "Network" ];
+      exec = "whalebird";
+      icon = "whalebird";
+      name = "whalebird";
+    })
+  ];
+
+  unpackPhase = ''
+    mkdir -p opt
+    tar -xf ${src} -C opt
+    # remove the version/target suffix from the untar'd directory
+    mv opt/Whalebird-* opt/Whalebird
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    # Necessary steps to find the tray icon
+    # For aarch64-linux, we need to overwrite this symlink first as it points to
+    # /usr/bin/python3
+    if [ "${stdenv.system}" = "aarch64-linux" ]
+    then ln -sf ${python3}/bin/python3 \
+      opt/Whalebird/resources/app.asar.unpacked/node_modules/better-sqlite3/build/node_gyp_bins/python3
+    fi
+    asar extract opt/Whalebird/resources/app.asar "$TMP/work"
+    substituteInPlace "$TMP/work/dist/electron/main.js" \
+      --replace "$(grep -oE '.{2},"tray_icon.png"' "$TMP/work/dist/electron/main.js")" \
+        "\"$out/opt/Whalebird/resources/build/icons/tray_icon.png\""
+    asar pack --unpack='{*.node,*.ftz,rect-overlay}' "$TMP/work" opt/Whalebird/resources/app.asar
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir $out
+    mv opt $out
+
+    # install icons
+    for icon in $out/opt/Whalebird/resources/build/icons/*.png; do
+      mkdir -p "$out/share/icons/hicolor/$(basename $icon .png)/apps"
+      ln -s "$icon" "$out/share/icons/hicolor/$(basename $icon .png)/apps/whalebird.png"
+    done
+
+    makeWrapper ${electron}/bin/electron $out/bin/whalebird \
+      --add-flags $out/opt/Whalebird/resources/app.asar \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Electron based Mastodon, Pleroma and Misskey client for Windows, Mac and Linux";
+    homepage = "https://whalebird.social";
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ wolfangaukang colinsane weathercold ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wike/default.nix b/nixpkgs/pkgs/applications/misc/wike/default.nix
new file mode 100644
index 000000000000..03fe5587e505
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wike/default.nix
@@ -0,0 +1,74 @@
+{ lib
+, fetchFromGitHub
+, python3
+, meson
+, ninja
+, pkg-config
+, appstream-glib
+, desktop-file-utils
+, gobject-introspection
+, wrapGAppsHook4
+, glib
+, gtk4
+, librsvg
+, libadwaita
+, glib-networking
+, webkitgtk_6_0
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "wike";
+  version = "2.1.0";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "hugolabe";
+    repo = "Wike";
+    rev = version;
+    hash = "sha256-BXmLZhotQK6L4c2D8F8qF3zmOlSuzXycEN2FaC1K6/g=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    pkg-config
+    ninja
+    appstream-glib
+    desktop-file-utils
+    gobject-introspection
+    wrapGAppsHook4
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    librsvg
+    libadwaita
+    glib-networking
+    webkitgtk_6_0
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    requests
+    pygobject3
+  ];
+
+  postPatch = ''
+    patchShebangs build-aux/meson/postinstall.py
+    substituteInPlace build-aux/meson/postinstall.py \
+      --replace gtk-update-icon-cache gtk4-update-icon-cache
+  '';
+
+  # prevent double wrapping
+  dontWrapGApps = true;
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  meta = with lib; {
+    description = "Wikipedia Reader for the GNOME Desktop";
+    homepage = "https://github.com/hugolabe/Wike";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ samalws ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wikicurses/default.nix b/nixpkgs/pkgs/applications/misc/wikicurses/default.nix
new file mode 100644
index 000000000000..ec7dff141439
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wikicurses/default.nix
@@ -0,0 +1,35 @@
+{ lib, fetchFromGitHub, pythonPackages }:
+
+pythonPackages.buildPythonApplication rec {
+  version = "1.4";
+  pname = "wikicurses";
+
+  src = fetchFromGitHub {
+    owner = "ids1024";
+    repo = "wikicurses";
+    rev = "v${version}";
+    sha256 = "0f14s4qx3q5pr5vn460c34b5mbz2xs62d8ljs3kic8gmdn8x2knm";
+  };
+
+  outputs = [ "out" "man" ];
+
+  propagatedBuildInputs = with pythonPackages; [ urwid beautifulsoup4 lxml ];
+
+  postInstall = ''
+    mkdir -p $man/share/man/man{1,5}
+    cp wikicurses.1 $man/share/man/man1/
+    cp wikicurses.conf.5 $man/share/man/man5/
+  '';
+
+  doCheck = false;
+
+  meta = {
+    description = "A simple curses interface for MediaWiki sites such as Wikipedia";
+    homepage = "https://github.com/ids1024/wikicurses/";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ pSub ];
+  };
+
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/with-shell/default.nix b/nixpkgs/pkgs/applications/misc/with-shell/default.nix
new file mode 100644
index 000000000000..acfe547f1470
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/with-shell/default.nix
@@ -0,0 +1,77 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, installShellFiles
+}:
+
+stdenv.mkDerivation rec {
+  pname = "with";
+  version = "unstable-2018-03-20";
+
+  src = fetchFromGitHub {
+    owner = "mchav";
+    repo = "With";
+    rev = "28eb40bbc08d171daabf0210f420477ad75e16d6";
+    hash = "sha256-mKHsLHs9/I+NUdb1t9wZWkPxXcsBlVWSj8fgZckXFXk=";
+  };
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D with $out/bin/with
+    installShellCompletion --bash --name with.bash with.bash-completion
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/mchav/With";
+    description = "Command prefixing for continuous workflow using a single tool";
+    longDescription = ''
+      with is a Bash script that starts an interactive shell with where every
+      command is prefixed using <program>.
+
+      For example:
+
+      $ with git
+      git> add .
+      git> commit -a -m "Committed"
+      git> push
+
+      Can also be used for compound commands.
+
+      $ with java Primes
+      java Primes> 1
+      2
+      java Primes> 4
+      7
+
+      And to repeat commands:
+
+      $ with gcc -o output input.c
+      gcc -o -output input.c>
+      <enter>
+      Compiling...
+      gcc -o -output input.c>
+
+      To execute a shell command proper prefix line with :.
+
+      git> :ls
+
+      You can also drop, add, and replace different commands.
+
+      git> +add
+      git add> <some file>
+      git add> !commit
+      git commit> <arguments and message>
+      git commit> -
+      git>
+
+      To exit use either :q or :exit.
+    '';
+    license = licenses.asl20;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+    mainProgram = "with";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wlclock/default.nix b/nixpkgs/pkgs/applications/misc/wlclock/default.nix
new file mode 100644
index 000000000000..ad14b24abd29
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wlclock/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, meson
+, ninja
+, cmake
+, pkg-config
+, wayland-scanner
+, wayland-protocols
+, wayland
+, cairo
+, scdoc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wlclock";
+  version = "1.0.1";
+
+  src = fetchFromSourcehut {
+    owner = "~leon_plickat";
+    repo = "wlclock";
+    rev = "v${version}";
+    sha256 = "sha256-aHA4kXHYH+KvAJSep5X3DqsiK6WFpXr3rGQl/KNiUcY=";
+  };
+
+  depsBuildBuild = [
+    pkg-config
+  ];
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    cmake
+    pkg-config
+    scdoc
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    wayland-protocols
+    wayland
+    cairo
+  ];
+
+  meta = with lib; {
+    description = "A digital analog clock for Wayland desktops";
+    homepage = "https://git.sr.ht/~leon_plickat/wlclock";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ nomisiv ];
+    platforms = with platforms; linux;
+    mainProgram = "wlclock";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wmenu/default.nix b/nixpkgs/pkgs/applications/misc/wmenu/default.nix
new file mode 100644
index 000000000000..b0b64d86e45e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wmenu/default.nix
@@ -0,0 +1,41 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, fetchpatch
+, pkg-config
+, meson
+, ninja
+, cairo
+, pango
+, wayland
+, wayland-protocols
+, libxkbcommon
+, scdoc
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wmenu";
+  version = "0.1.6";
+
+  strictDeps = true;
+
+  src = fetchFromSourcehut {
+    owner = "~adnano";
+    repo = "wmenu";
+    rev = version;
+    hash = "sha256-Xsnf7T39up6E5kzV37sM9j3PpA2eqxItbGt+tOfjsjE=";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja ];
+  buildInputs = [ cairo pango wayland libxkbcommon wayland-protocols scdoc ];
+
+  meta = with lib; {
+    description = "An efficient dynamic menu for Sway and wlroots based Wayland compositors";
+    homepage = "https://git.sr.ht/~adnano/wmenu";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ eken ];
+    mainProgram = "wmenu";
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/wmname/default.nix b/nixpkgs/pkgs/applications/misc/wmname/default.nix
new file mode 100644
index 000000000000..b64e714e081b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wmname/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "wmname";
+  version = "0.1";
+
+  src = fetchurl {
+    url = "https://dl.suckless.org/tools/wmname-${version}.tar.gz";
+    sha256 = "559ad188b2913167dcbb37ecfbb7ed474a7ec4bbcb0129d8d5d08cb9208d02c5";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile --replace "@strip" "#@strip"
+  '';
+
+  buildInputs = [ libX11 ];
+
+  makeFlags = [ "CC:=$(CC)" ];
+
+  installFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "Prints or set the window manager name property of the root window";
+    homepage = "https://tools.suckless.org/wmname";
+    license = lib.licenses.mit;
+    platforms = lib.platforms.unix;
+    mainProgram = "wmname";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wofi-emoji/default.nix b/nixpkgs/pkgs/applications/misc/wofi-emoji/default.nix
new file mode 100644
index 000000000000..359853e6624e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wofi-emoji/default.nix
@@ -0,0 +1,55 @@
+{ stdenv, lib, fetchurl, fetchFromGitHub, jq, wofi, wtype, wl-clipboard }:
+
+let emojiJSON = fetchurl {
+  url = "https://raw.githubusercontent.com/muan/emojilib/v3.0.10/dist/emoji-en-US.json";
+  hash = "sha256-UhAB5hVp5vV2d1FjIb2TBd2FJ6OPBbiP31HGAEDQFnA=";};
+in
+stdenv.mkDerivation rec {
+  pname = "wofi-emoji";
+  version = "unstable-2023-12-22";
+
+  src = fetchFromGitHub {
+    owner = "Zeioth";
+    repo = pname;
+    rev = "2cc95880848134a3bbe0675bcb62a0dae1d0f572";
+    hash = "sha256-t9M8z8JxuvBDzNs98L7YTNUfTK23W1DYGdHDiXNQOgk=";
+  };
+
+  nativeBuildInputs = [ jq ];
+  buildInputs = [ wofi wtype wl-clipboard ];
+
+  postPatch = ''
+    substituteInPlace build.sh \
+      --replace 'curl ${emojiJSON.url}' 'cat ${emojiJSON}'
+    substituteInPlace wofi-emoji \
+      --replace 'wofi' '${wofi}/bin/wofi' \
+      --replace 'wtype' '${wtype}/bin/wtype' \
+      --replace 'wl-copy' '${wl-clipboard}/bin/wl-copy'
+  '';
+
+  buildPhase = ''
+    runHook preBuild
+
+    bash build.sh
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp wofi-emoji $out/bin
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Simple emoji selector for Wayland using wofi and wl-clipboard";
+    homepage = "https://github.com/dln/wofi-emoji";
+    license = licenses.mit;
+    maintainers = [ maintainers.ymarkus ];
+    platforms = platforms.all;
+    mainProgram = "wofi-emoji";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wofi/default.nix b/nixpkgs/pkgs/applications/misc/wofi/default.nix
new file mode 100644
index 000000000000..97aba94d1770
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wofi/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, lib
+, fetchFromSourcehut
+, pkg-config
+, meson
+, ninja
+, wayland
+, gtk3
+, wrapGAppsHook
+, installShellFiles
+}:
+stdenv.mkDerivation rec {
+  pname = "wofi";
+  version = "1.4";
+
+  src = fetchFromSourcehut {
+    repo = pname;
+    owner = "~scoopta";
+    rev = "v${version}";
+    sha256 = "sha256-zzBD1OPPlOjAUaJOlMf6k1tSai1w1ZvOwy2sSOWI7AM=";
+    vc = "hg";
+  };
+
+  nativeBuildInputs = [ pkg-config meson ninja wrapGAppsHook installShellFiles ];
+  buildInputs = [ wayland gtk3 ];
+
+  patches = [
+    # https://todo.sr.ht/~scoopta/wofi/121
+    ./do_not_follow_symlinks.patch
+  ];
+
+  postInstall = ''
+    installManPage man/wofi*
+  '';
+
+  meta = with lib; {
+    description = "A launcher/menu program for wlroots based wayland compositors such as sway";
+    homepage = "https://hg.sr.ht/~scoopta/wofi";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ ];
+    platforms = with platforms; linux;
+    mainProgram = "wofi";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wofi/do_not_follow_symlinks.patch b/nixpkgs/pkgs/applications/misc/wofi/do_not_follow_symlinks.patch
new file mode 100644
index 000000000000..f917c4c1685d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wofi/do_not_follow_symlinks.patch
@@ -0,0 +1,39 @@
+diff -r 3414ab984249 modes/run.c
+--- a/modes/run.c	Tue Aug 11 19:07:49 2020 -0700
++++ b/modes/run.c	Sat Aug 22 13:39:52 2020 +0200
+@@ -91,23 +91,10 @@
+ 
+ 	char* path = strdup(getenv("PATH"));
+ 
+-	struct map* paths = map_init();
+-
+ 	char* save_ptr;
+ 	char* str = strtok_r(path, ":", &save_ptr);
+ 	do {
+ 
+-		str = realpath(str, NULL);
+-		if(str == NULL) {
+-			continue;
+-		}
+-		if(map_contains(paths, str)) {
+-			free(str);
+-			continue;
+-		}
+-
+-		map_put(paths, str, "true");
+-
+ 		DIR* dir = opendir(str);
+ 		if(dir == NULL) {
+ 			continue;
+@@ -132,11 +119,9 @@
+ 			}
+ 			free(full_path);
+ 		}
+-		free(str);
+ 		closedir(dir);
+ 	} while((str = strtok_r(NULL, ":", &save_ptr)) != NULL);
+ 	free(path);
+-	map_free(paths);
+ 	map_free(cached);
+ 	map_free(entries);
+ }
diff --git a/nixpkgs/pkgs/applications/misc/wordbook/default.nix b/nixpkgs/pkgs/applications/misc/wordbook/default.nix
new file mode 100644
index 000000000000..757fed5265f2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wordbook/default.nix
@@ -0,0 +1,69 @@
+{ lib
+, fetchFromGitHub
+, python3
+, meson
+, ninja
+, pkg-config
+, glib
+, gtk4
+, libadwaita
+, librsvg
+, espeak-ng
+, gobject-introspection
+, wrapGAppsHook4
+, appstream-glib
+, desktop-file-utils
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "wordbook";
+  version = "unstable-2022-11-02";
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "fushinari";
+    repo = "Wordbook";
+    rev = "2d79e9e9ef21ba4b54d0b46c764a1481a06f0f1b";
+    hash = "sha256-ktusZEQ7m8P0kiH09r3XC6q9bQCWVCn543IMLKmULDo=";
+  };
+
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+    wrapGAppsHook4
+    appstream-glib
+    desktop-file-utils
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    glib
+    gtk4
+    librsvg
+    libadwaita
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    pygobject3
+    wn
+  ];
+
+  # prevent double wrapping
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      --prefix PATH ":" "${lib.makeBinPath [ espeak-ng ]}"
+      "''${gappsWrapperArgs[@]}"
+    )
+  '';
+
+  meta = with lib; {
+    description = "Offline English-English dictionary application built for GNOME";
+    homepage = "https://github.com/fushinari/Wordbook";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ zendo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wordnet/default.nix b/nixpkgs/pkgs/applications/misc/wordnet/default.nix
new file mode 100644
index 000000000000..fccd7585e41e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wordnet/default.nix
@@ -0,0 +1,57 @@
+{ lib, stdenv, fetchurl, tcl, tk, Cocoa, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  version = "3.0";
+  pname = "wordnet";
+  src = fetchurl {
+    url = "http://wordnetcode.princeton.edu/${version}/WordNet-${version}.tar.bz2";
+    sha256 = "08pgjvd2vvmqk3h641x63nxp7wqimb9r30889mkyfh2agc62sjbc";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ tcl tk ]
+    ++ lib.optionals stdenv.isDarwin [ Cocoa ];
+
+  hardeningDisable = [ "format" ];
+
+  patchPhase = ''
+    sed "13i#define USE_INTERP_RESULT 1" -i src/stubs.c
+  '';
+
+  # Fails the build on clang-16 and on upcoming gcc-14.
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=implicit-int";
+
+  # Needs the path to `tclConfig.sh' and `tkConfig.sh'.
+  configureFlags = [
+    "--with-tcl=${tcl}/lib"
+    "--with-tk=${tk}/lib"
+  ];
+
+  postInstall = ''
+    wrapProgram $out/bin/wnb    --prefix PATH : "$out/bin"
+  '';
+
+  meta = {
+    description = "Lexical database for the English language";
+
+    longDescription =
+      '' WordNet® is a large lexical database of English.  Nouns, verbs,
+         adjectives and adverbs are grouped into sets of cognitive synonyms
+         (synsets), each expressing a distinct concept.  Synsets are
+         interlinked by means of conceptual-semantic and lexical relations.
+         The resulting network of meaningfully related words and concepts can
+         be navigated with the browser.  WordNet is also freely and publicly
+         available for download.  WordNet's structure makes it a useful tool
+         for computational linguistics and natural language processing.
+      '';
+
+    homepage = "https://wordnet.princeton.edu/";
+    license = {
+      fullName = "WordNet 3.0 license";
+      url = "https://wordnet.princeton.edu/license-and-commercial-use";
+    };
+    maintainers = [ ];
+    platforms = with lib.platforms; linux ++ darwin;
+    mainProgram = "wn";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/workrave/default.nix b/nixpkgs/pkgs/applications/misc/workrave/default.nix
new file mode 100644
index 000000000000..7d85f9c7a234
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/workrave/default.nix
@@ -0,0 +1,102 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, wrapGAppsHook
+, autoconf
+, autoconf-archive
+, automake
+, gettext
+, intltool
+, libtool
+, pkg-config
+, libICE
+, libSM
+, libXScrnSaver
+, libXtst
+, gobject-introspection
+, glib
+, glibmm
+, gtkmm3
+, atk
+, pango
+, pangomm
+, cairo
+, cairomm
+, dbus
+, dbus-glib
+, gdome2
+, gstreamer
+, gst-plugins-base
+, gst-plugins-good
+, libsigcxx
+, boost
+, jinja2
+}:
+
+stdenv.mkDerivation rec {
+  pname = "workrave";
+  version = "1.10.52";
+
+  src = fetchFromGitHub {
+    repo = "workrave";
+    owner = "rcaelers";
+    rev = with lib;
+      "v" + concatStringsSep "_" (splitVersion version);
+    sha256 = "sha256-U39zr8XGIDbyY480bla2yTaRQLP3wMrL8RLWjlTa5uY=";
+  };
+
+  nativeBuildInputs = [
+    autoconf
+    autoconf-archive
+    automake
+    gettext
+    intltool
+    libtool
+    pkg-config
+    wrapGAppsHook
+    jinja2
+    gobject-introspection
+  ];
+
+  buildInputs = [
+    libICE
+    libSM
+    libXScrnSaver
+    libXtst
+    glib
+    glibmm
+    gtkmm3
+    atk
+    pango
+    pangomm
+    cairo
+    cairomm
+    dbus
+    dbus-glib
+    gdome2
+    gstreamer
+    gst-plugins-base
+    gst-plugins-good
+    libsigcxx
+    boost
+  ];
+
+  preConfigure = "./autogen.sh";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    broken = (stdenv.isLinux && stdenv.isAarch64);
+    description = "A program to help prevent Repetitive Strain Injury";
+    longDescription = ''
+      Workrave is a program that assists in the recovery and prevention of
+      Repetitive Strain Injury (RSI). The program frequently alerts you to
+      take micro-pauses, rest breaks and restricts you to your daily limit.
+    '';
+    homepage = "http://www.workrave.org/";
+    downloadPage = "https://github.com/rcaelers/workrave/releases";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ prikhi ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wpm/default.nix b/nixpkgs/pkgs/applications/misc/wpm/default.nix
new file mode 100644
index 000000000000..b6db073eb945
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wpm/default.nix
@@ -0,0 +1,28 @@
+{ lib
+, python3
+, fetchPypi
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "wpm";
+  version = "1.51.5";
+  format = "setuptools";
+
+  src = fetchPypi {
+    inherit pname version;
+    hash = "sha256-swT9E5Tto4yWnm0voowcJXtY3cIY3MNqAdfrTnuGbdg=";
+  };
+
+  propagatedBuildInputs = with python3.pkgs; [
+    setuptools
+  ];
+
+  pythonImportsCheck = [ "wpm" ];
+
+  meta = with lib; {
+    description = "Console app for measuring typing speed in words per minute (WPM)";
+    homepage = "https://pypi.org/project/wpm";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ alejandrosame ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/writefreely/default.nix b/nixpkgs/pkgs/applications/misc/writefreely/default.nix
new file mode 100644
index 000000000000..fe1d221bd274
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/writefreely/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "writefreely";
+  version = "0.14.0";
+
+  src = fetchFromGitHub {
+    owner = "writefreely";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vOoTAr33FMQaHIwpwIX0g/KJWQvDn3oVJg14kEY6FIQ=";
+  };
+
+  vendorHash = "sha256-xTo/zbz9pSjvNntr5dnytiJ7oRAdtEuyiu4mJZgwHTc=";
+
+  ldflags = [ "-s" "-w" "-X github.com/writefreely/writefreely.softwareVer=${version}" ];
+
+  tags = [ "sqlite" ];
+
+  subPackages = [ "cmd/writefreely" ];
+
+  meta = with lib; {
+    description = "Build a digital writing community";
+    homepage = "https://github.com/writefreely/writefreely";
+    license = licenses.agpl3Only;
+    maintainers = with maintainers; [ soopyc ];
+    mainProgram = "writefreely";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wtf/default.nix b/nixpkgs/pkgs/applications/misc/wtf/default.nix
new file mode 100644
index 000000000000..f604f50eb7fc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wtf/default.nix
@@ -0,0 +1,45 @@
+{ buildGoModule
+, fetchFromGitHub
+, lib
+, makeWrapper
+, ncurses
+, stdenv
+}:
+
+buildGoModule rec {
+  pname = "wtf";
+  version = "0.43.0";
+
+  src = fetchFromGitHub {
+    owner = "wtfutil";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-DFrA4bx+wSOxmt1CVA1oNiYVmcWeW6wpfR5F1tnhyDY=";
+  };
+
+  vendorHash = "sha256-9uuLidieBMoKz/FLcBnp9wenyveOIzB0IvRBRasulZk=";
+  proxyVendor = true;
+
+  doCheck = false;
+
+  ldflags = [ "-s" "-w" "-X main.version=${version}" ];
+
+  subPackages = [ "." ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postInstall = ''
+    mv "$out/bin/wtf" "$out/bin/wtfutil"
+    wrapProgram "$out/bin/wtfutil" --prefix PATH : "${ncurses.dev}/bin"
+  '';
+
+  meta = with lib; {
+    description = "The personal information dashboard for your terminal";
+    homepage = "https://wtfutil.com/";
+    changelog = "https://github.com/wtfutil/wtf/raw/v${version}/CHANGELOG.md";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ kalbasit ];
+    mainProgram = "wtfutil";
+    platforms = platforms.linux ++ platforms.darwin;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wthrr/default.nix b/nixpkgs/pkgs/applications/misc/wthrr/default.nix
new file mode 100644
index 000000000000..5b3c6d2cd17a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wthrr/default.nix
@@ -0,0 +1,48 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wthrr";
+  version = "1.1.1";
+
+  src = fetchFromGitHub {
+    owner = "tobealive";
+    repo = "wthrr-the-weathercrab";
+    rev = "v${version}";
+    hash = "sha256-djrPBmXnUC8d6lWuiHyYY2so8/5RHLFYDu6xoHn6GRg=";
+  };
+
+  cargoHash = "sha256-PGbkGoWcFlTKpnrvMzrHvjFLIuohqEhVg4DYhAZOpkw=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreFoundation
+    darwin.apple_sdk.frameworks.Security
+  ];
+
+  checkFlags = [
+    # requires internet access
+    "--skip=modules::localization::tests::translate_string"
+    "--skip=modules::location::tests::geolocation_response"
+  ];
+
+  meta = with lib; {
+    description = "Weather companion for the terminal";
+    homepage = "https://github.com/tobealive/wthrr-the-weathercrab";
+    changelog = "https://github.com/tobealive/wthrr-the-weathercrab/releases/tag/${src.rev}";
+    license = licenses.mit;
+    maintainers = with maintainers; [ figsoda ];
+    mainProgram = "wthrr";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/wttrbar/default.nix b/nixpkgs/pkgs/applications/misc/wttrbar/default.nix
new file mode 100644
index 000000000000..c2f67e83f8a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/wttrbar/default.nix
@@ -0,0 +1,30 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, rustPlatform
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "wttrbar";
+  version = "0.8.2";
+
+  src = fetchFromGitHub {
+    owner = "bjesus";
+    repo = "wttrbar";
+    rev = version;
+    hash = "sha256-XgBPZl5msKICIrUJZz2gj/hZjVAv0HpVKa69/KiLwnI=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin (with darwin.apple_sdk_11_0.frameworks; [ Security SystemConfiguration ]);
+
+  cargoHash = "sha256-JGJJ94rzHTQNR6rzFPWnFHH3t0fL1tvMeEN5NMzRtHM=";
+
+  meta = {
+    description = "A simple but detailed weather indicator for Waybar using wttr.in";
+    homepage = "https://github.com/bjesus/wttrbar";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ khaneliman ];
+    mainProgram = "wttrbar";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xastir/default.nix b/nixpkgs/pkgs/applications/misc/xastir/default.nix
new file mode 100644
index 000000000000..21990075183d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xastir/default.nix
@@ -0,0 +1,42 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config
+, curl, db, libgeotiff
+, xorg, motif, pcre
+, perl, proj, graphicsmagick, shapelib
+, libax25
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xastir";
+  version = "2.2.0";
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = pname;
+    rev = "Release-${version}";
+    hash = "sha256-EQXSfH4b5vMiprFcMXCUDNl+R1cHSj9CyhZnUPAMoCw=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    pkg-config
+  ];
+
+  buildInputs = [
+    curl db libgeotiff
+    xorg.libXpm xorg.libXt motif pcre
+    perl proj graphicsmagick shapelib
+    libax25
+  ];
+
+  configureFlags = [ "--with-motif-includes=${motif}/include" ];
+
+  postPatch = "patchShebangs .";
+
+  meta = with lib; {
+    description = "Graphical APRS client";
+    homepage = "https://xastir.org";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.ehmry ];
+    platforms   = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xautoclick/default.nix b/nixpkgs/pkgs/applications/misc/xautoclick/default.nix
new file mode 100644
index 000000000000..3429e80f0540
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xautoclick/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, xorg, pkg-config
+, cmake, libevdev
+, gtkSupport ? true, gtk3, pcre, glib, wrapGAppsHook
+, fltkSupport ? true, fltk
+, qtSupport ? true, qt5
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xautoclick";
+  version = "0.34";
+
+  src = fetchFromGitHub {
+    owner = "qarkai";
+    repo = "xautoclick";
+    rev = "v${version}";
+    sha256 = "GN3zI5LQnVmRC0KWffzUTHKrxcqnstiL55hopwTTwpE=";
+  };
+
+  nativeBuildInputs = [ cmake pkg-config ];
+  buildInputs = [ libevdev xorg.libXtst ]
+    ++ lib.optionals gtkSupport [ gtk3 pcre glib wrapGAppsHook ]
+    ++ lib.optionals fltkSupport [ fltk ]
+    ++ lib.optionals qtSupport [ qt5.qtbase qt5.wrapQtAppsHook ];
+
+  meta = with lib; {
+    description = "Autoclicker application, which enables you to automatically click the left mousebutton";
+    homepage = "https://github.com/qarkai/xautoclick";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xbattbar/default.nix b/nixpkgs/pkgs/applications/misc/xbattbar/default.nix
new file mode 100644
index 000000000000..0ddb06b62ace
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xbattbar/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchgit, libX11, perl, ... }:
+
+stdenv.mkDerivation rec {
+  pname = "xbattbar";
+  version = "1.4.9";
+
+  # The current active upstream of xbattbar seems to be the Debian source
+  # repository.
+  src = fetchgit {
+    url = "https://salsa.debian.org/debian/xbattbar.git";
+    rev = "upstream/${version}";
+    sha256 = "10w7gs0l4hzhdn38yqyr3az7n4ncmfnd6hhhly6lk5dg7k441ck6";
+  };
+
+  buildInputs =  [ libX11 ];
+
+  # The following patches are applied:
+  # - sys-by-default: remove the APM checker binary, make the sys checker
+  #   script the default. Rationale: checking battery status by /proc/apm is
+  #   extremely oldschool and does not work on NixOS, while the sysfs script
+  #   does.
+  # - perl shebang patches for acpi/sys scripts
+  # - unhardcode path to checker scripts
+  patchPhase = ''
+    patch -p1 < ${./sys-by-default.patch}
+    sed -i -e "s,/usr/lib/xbattbar/,$out/libexec/," xbattbar.c
+    sed -i -e "s,/usr/bin/perl,${perl}/bin/perl," xbattbar-check-acpi
+    sed -i -e "s,/usr/bin/perl,${perl}/bin/perl," xbattbar-check-sys
+  '';
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mkdir -p $out/libexec
+    install -m 0755 xbattbar $out/bin/
+    install -m 0755 xbattbar-check-acpi $out/libexec/
+    install -m 0755 xbattbar-check-sys $out/libexec/
+  '';
+
+  meta = with lib; {
+    description = "Display battery status in X11";
+    homepage = "https://salsa.debian.org/debian/xbattbar";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.q3k ];
+    mainProgram = "xbattbar";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xbattbar/sys-by-default.patch b/nixpkgs/pkgs/applications/misc/xbattbar/sys-by-default.patch
new file mode 100644
index 000000000000..367f7217eecb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xbattbar/sys-by-default.patch
@@ -0,0 +1,26 @@
+diff --git a/xbattbar.c b/xbattbar.c
+index 1e26019..cb3eab5 100644
+--- a/xbattbar.c
++++ b/xbattbar.c
+@@ -75,9 +75,8 @@ char *ONOUT_C  = "olive drab";
+ char *OFFIN_C  = "blue";
+ char *OFFOUT_C = "red";
+ 
+-char *EXTERNAL_CHECK = "/usr/lib/xbattbar/xbattbar-check-apm";
++char *EXTERNAL_CHECK = "/usr/lib/xbattbar/xbattbar-check-sys";
+ char *EXTERNAL_CHECK_ACPI = "/usr/lib/xbattbar/xbattbar-check-acpi";
+-char *EXTERNAL_CHECK_SYS = "/usr/lib/xbattbar/xbattbar-check-sys";
+ 
+ int alwaysontop = False;
+ 
+@@ -245,10 +244,6 @@ main(int argc, char **argv)
+       EXTERNAL_CHECK = EXTERNAL_CHECK_ACPI;
+       break;
+ 
+-    case 'r':
+-      EXTERNAL_CHECK = EXTERNAL_CHECK_SYS;
+-      break;
+-
+     case 's':
+       EXTERNAL_CHECK = optarg;
+       break;
diff --git a/nixpkgs/pkgs/applications/misc/xca/default.nix b/nixpkgs/pkgs/applications/misc/xca/default.nix
new file mode 100644
index 000000000000..f5c8e90d2703
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xca/default.nix
@@ -0,0 +1,38 @@
+{ stdenv, mkDerivation, lib, fetchFromGitHub, fetchpatch, autoreconfHook, pkg-config
+, libtool, openssl, qtbase, qttools, sphinx }:
+
+mkDerivation rec {
+  pname = "xca";
+  version = "2.4.0";
+
+  src = fetchFromGitHub {
+    owner  = "chris2511";
+    repo   = "xca";
+    rev    = "RELEASE.${version}";
+    sha256 = "04z0mmjsry72nvib4icmwh1717y4q9pf2gr68ljrzln4vv4ckpwk";
+  };
+
+  # Adaptions to stay OpenSSL 3.0 compatible
+  patches = [ (fetchpatch {
+    url = "https://github.com/chris2511/xca/commit/f5ac099e948ea354deac75ff9fa09d51453476e1.patch";
+    hash = "sha256-4rRO2y9hZq879HTsgBgbXGRYEcgfG4niJKyK3l3PMZ8=";
+  }) ];
+
+  buildInputs = [ libtool openssl qtbase ];
+
+  nativeBuildInputs = [ autoreconfHook pkg-config qttools sphinx ];
+
+  # Needed for qcollectiongenerator (see https://github.com/NixOS/nixpkgs/pull/92710)
+  QT_PLUGIN_PATH = "${qtbase}/${qtbase.qtPluginPrefix}";
+
+  enableParallelBuilding = true;
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    description = "An x509 certificate generation tool, handling RSA, DSA and EC keys, certificate signing requests (PKCS#10) and CRLs";
+    homepage    = "https://hohnstaedt.de/xca/";
+    license     = licenses.bsd3;
+    maintainers = with maintainers; [ offline peterhoeg ];
+    platforms   = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xchm/default.nix b/nixpkgs/pkgs/applications/misc/xchm/default.nix
new file mode 100644
index 000000000000..8c48388594d4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xchm/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, autoreconfHook
+, wxGTK32
+, chmlib
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xchm";
+  version = "1.36";
+
+  src = fetchFromGitHub {
+    owner = "rzvncj";
+    repo = "xCHM";
+    rev = version;
+    sha256 = "sha256-+RbFE/jOD8sofHMCFgTIfgokrXYqDbCSSnN6SdEZ/b0=";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+  ];
+
+  buildInputs = [
+    wxGTK32
+    chmlib
+  ];
+
+  configureFlags = [ "--with-wx-prefix=${wxGTK32}" ];
+
+  preConfigure = ''
+    export LDFLAGS="$LDFLAGS $(${wxGTK32}/bin/wx-config --libs | sed -e s@-pthread@@) -lwx_gtk3u_aui-3.2"
+  '';
+
+  meta = with lib; {
+    description = "A viewer for Microsoft HTML Help files";
+    homepage = "https://github.com/rzvncj/xCHM";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ sikmir ];
+    platforms = platforms.linux;
+    mainProgram = "xchm";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xcruiser/default.nix b/nixpkgs/pkgs/applications/misc/xcruiser/default.nix
new file mode 100644
index 000000000000..3f1277f24a83
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xcruiser/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, fetchurl, gccmakedep, imake, libXt, libXaw, libXpm, libXext, copyDesktopItems, makeDesktopItem }:
+
+stdenv.mkDerivation rec {
+  pname = "xcruiser";
+  version = "0.30";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/xcruiser/xcruiser/xcruiser-${version}/xcruiser-${version}.tar.gz";
+    sha256 = "1r8whva38xizqdh7jmn6wcmfmsndc67pkw22wzfzr6rq0vf6hywi";
+  };
+
+  nativeBuildInputs = [ gccmakedep imake copyDesktopItems ];
+  buildInputs = [ libXt libXaw libXpm libXext ];
+
+  makeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "CONFDIR=${placeholder "out"}/etc/X11"
+    "LIBDIR=${placeholder "out"}/lib/X11"
+    "XAPPLOADDIR=${placeholder "out"}/etc/X11/app-defaults"
+  ];
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "XCruiser";
+      exec = "xcruiser";
+      desktopName = "XCruiser";
+      comment = "filesystem visualization utility";
+      categories = [ "Utility" ];
+    })
+  ];
+
+  meta = with lib; {
+    description = "Filesystem visualization utility";
+    longDescription = ''
+      XCruiser, formerly known as XCruise, is a filesystem visualization utility.
+      It constructs a virtually 3-D formed universe from a directory
+      tree and allows you to "cruise" within a visualized filesystem.
+    '';
+    homepage = "https://xcruiser.sourceforge.net/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = with platforms; linux;
+    mainProgram = "xcruiser";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xdg-launch/default.nix b/nixpkgs/pkgs/applications/misc/xdg-launch/default.nix
new file mode 100644
index 000000000000..bf5b0484c867
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xdg-launch/default.nix
@@ -0,0 +1,57 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, autoconf
+, automake
+, gettext
+, libtool
+, perl
+, pkg-config
+, glib
+, xorg
+}:
+stdenv.mkDerivation rec {
+  pname = "xdg-launch";
+  version = "1.12";
+
+  postPatch = ''
+    # fix gettext configuration
+    echo 'AM_GNU_GETTEXT_VERSION' >> configure.ac
+    echo 'AM_GNU_GETTEXT([external])' >> configure.ac
+
+    sed -i data/*.desktop \
+      -e "s,/usr/bin,/$out/bin,g"
+  '';
+
+  src = fetchFromGitHub {
+    owner = "bbidulock";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-S/0Wn1T5MSOPN6QXkzfmygHL6XTAnnMJr5Z3fBzsHEw=";
+  };
+
+  preConfigure = "./autogen.sh";
+
+  buildInputs = [
+    xorg.libX11
+    xorg.libXrandr
+    glib # can be optional
+  ];
+
+  nativeBuildInputs = [
+    autoconf
+    automake
+    gettext
+    libtool
+    perl # pod2man
+    pkg-config
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/bbidulock/xdg-launch";
+    description = "A command line XDG compliant launcher and tools";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ck3d ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xdgmenumaker/default.nix b/nixpkgs/pkgs/applications/misc/xdgmenumaker/default.nix
new file mode 100644
index 000000000000..a9ccb2399daf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xdgmenumaker/default.nix
@@ -0,0 +1,65 @@
+{ lib
+, fetchFromGitHub
+, atk
+, gdk-pixbuf
+, gobject-introspection
+, pango
+, python3Packages
+, txt2tags
+, wrapGAppsHook
+, gitUpdater
+}:
+
+python3Packages.buildPythonApplication rec {
+  pname = "xdgmenumaker";
+  version = "2.1";
+
+  src = fetchFromGitHub {
+    owner = "gapan";
+    repo = pname;
+    rev = version;
+    sha256 = "K+IecWWRjnY/5TBJydTuEPqNRSg1OIE1t0u6HkLS9uI=";
+  };
+
+  format = "other";
+
+  strictDeps = false;
+
+  dontWrapGApps = true;
+
+  nativeBuildInputs = [
+    gobject-introspection
+    txt2tags
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    atk
+    gdk-pixbuf
+    pango
+  ];
+
+  pythonPath = with python3Packages; [
+    pygobject3
+    pyxdg
+  ];
+
+  makeFlags = [
+    "PREFIX=${placeholder "out"}"
+  ];
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  passthru.updateScript = gitUpdater { };
+
+  meta = with lib; {
+    description = "Command line tool that generates XDG menus for several window managers";
+    homepage = "https://github.com/gapan/xdgmenumaker";
+    license = licenses.gpl3Plus;
+    # NOTE: exclude darwin from platforms because Travis reports hash mismatch
+    platforms = with platforms; filter (x: !(elem x darwin)) unix;
+    maintainers = [ maintainers.romildo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xfontsel/default.nix b/nixpkgs/pkgs/applications/misc/xfontsel/default.nix
new file mode 100644
index 000000000000..ecafb9d5118c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xfontsel/default.nix
@@ -0,0 +1,39 @@
+# This program used to come with xorg releases, but now I could only find it
+# at https://www.x.org/releases/individual/.
+# That is why this expression is not inside pkgs.xorg
+
+{ lib, stdenv, fetchurl, makeWrapper, xorg, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "xfontsel";
+  version = "1.0.6";
+
+  src = fetchurl {
+    url = "mirror://xorg/individual/app/xfontsel-${version}.tar.bz2";
+    sha256 = "0700lf6hx7dg88wq1yll7zjvf9gbwh06xff20yffkxb289y0pai5";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+
+  buildInputs = [ xorg.libX11 xorg.libXaw ];
+
+  # Without this, it gets Xmu as a dependency, but without rpath entry
+  NIX_LDFLAGS = "-lXmu";
+
+  # This will not make xfontsel find its app-defaults, but at least the $out
+  # directory will contain them.
+  # hack: Copying the XFontSel app-defaults file to $HOME makes xfontsel work.
+  installPhase = ''
+    make install appdefaultdir=$out/share/X11/app-defaults
+    wrapProgram $out/bin/xfontsel \
+      --set XAPPLRESDIR $out/share/X11/app-defaults
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.x.org/";
+    description = "Allows testing the fonts available in an X server";
+    license = licenses.free;
+    maintainers = with maintainers; [ viric ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xiphos/0001-Add-dbus-glib-dependency-to-main.patch b/nixpkgs/pkgs/applications/misc/xiphos/0001-Add-dbus-glib-dependency-to-main.patch
new file mode 100644
index 000000000000..71cb57ccef18
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xiphos/0001-Add-dbus-glib-dependency-to-main.patch
@@ -0,0 +1,38 @@
+From 0e9e686c902935c0f00afdf9d0d45f9635995988 Mon Sep 17 00:00:00 2001
+From: Jan Tojnar <jtojnar@gmail.com>
+Date: Sat, 15 Jan 2022 05:00:37 +0100
+Subject: [PATCH] Add dbus-glib dependency to main
+
+It is required through the ipc header and the build will fail without it on Nix:
+
+	In file included from /build/source/src/main/search_sidebar.cc:48:
+	/build/source/src/gui/ipc.h:26:10: fatal error: dbus/dbus-glib.h: No such file or directory
+	   26 | #include <dbus/dbus-glib.h>
+	      |          ^~~~~~~~~~~~~~~~~~
+	compilation terminated.
+---
+ src/main/CMakeLists.txt | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/src/main/CMakeLists.txt b/src/main/CMakeLists.txt
+index 49b86371..bb8e4bb6 100644
+--- a/src/main/CMakeLists.txt
++++ b/src/main/CMakeLists.txt
+@@ -74,3 +74,14 @@ target_link_libraries(main
+   PkgConfig::Sword
+   PkgConfig::Biblesync
+   )
++
++IF (DBUS)
++  target_include_directories (main
++    PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
++    PkgConfig::DBus
++    )
++  target_link_libraries(main
++    PRIVATE
++    PkgConfig::DBus
++    )
++ENDIF (DBUS)
+-- 
+2.34.1
+
diff --git a/nixpkgs/pkgs/applications/misc/xiphos/default.nix b/nixpkgs/pkgs/applications/misc/xiphos/default.nix
new file mode 100644
index 000000000000..994127baca6d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xiphos/default.nix
@@ -0,0 +1,112 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, fetchpatch
+, appstream-glib
+, biblesync
+, cmake
+, dbus-glib
+, desktop-file-utils
+, docbook2x
+, docbook_xml_dtd_412
+, enchant2
+, glib
+, gtk3
+, gtkhtml
+, icu
+, intltool
+, isocodes
+, itstool
+, libuuid
+, libxslt
+, minizip
+, pkg-config
+, sword
+, webkitgtk
+, wrapGAppsHook
+, yelp-tools
+, zip
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xiphos";
+  version = "4.2.1";
+
+  src = fetchFromGitHub {
+    owner = "crosswire";
+    repo = "xiphos";
+    rev = version;
+    hash = "sha256-H5Q+azE2t3fgu77C9DxrkeUCJ7iJz3Cc91Ln4dqLvD8=";
+  };
+
+  patches = [
+    # GLIB_VERSION_MIN_REQUIRED is not defined.
+    # https://github.com/crosswire/xiphos/issues/1083#issuecomment-820304874
+    (fetchpatch {
+      name ="xiphos-glibc.patch";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/xiphos-glibc.patch?h=xiphos&id=bb816f43ba764ffac1287ab1e2a649c2443e3ce8";
+      sha256 = "he3U7phU2/QCrZidHviupA7YwzudnQ9Jbb8eMZw6/ck=";
+      extraPrefix = "";
+    })
+
+    # Fix D-Bus build
+    # https://github.com/crosswire/xiphos/pull/1103
+    ./0001-Add-dbus-glib-dependency-to-main.patch
+  ];
+
+  nativeBuildInputs = [
+    appstream-glib # for appstream-util
+    cmake
+    desktop-file-utils # for desktop-file-validate
+    docbook2x
+    docbook_xml_dtd_412
+    intltool
+    itstool
+    libxslt
+    pkg-config
+    wrapGAppsHook
+    yelp-tools # for yelp-build
+    zip # for building help epubs
+  ];
+
+  buildInputs = [
+    biblesync
+    dbus-glib
+    enchant2
+    glib
+    gtk3
+    gtkhtml
+    icu
+    isocodes
+    libuuid
+    minizip
+    sword
+    webkitgtk
+  ];
+
+  cmakeFlags = [
+    # WebKit-based editor does not build.
+    "-DGTKHTML=ON"
+  ];
+
+  preConfigure =  ''
+    # The build script won't continue without the version saved locally.
+    echo "${version}" > cmake/source_version.txt
+
+    export SWORD_HOME=${sword};
+  '';
+
+  meta = with lib; {
+    description = "A GTK Bible study tool";
+    longDescription = ''
+      Xiphos (formerly known as GnomeSword) is a Bible study tool
+      written for Linux, UNIX, and Windows using GTK, offering a rich
+      and featureful environment for reading, study, and research using
+      modules from The SWORD Project and elsewhere.
+    '';
+    homepage = "https://www.xiphos.org/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xkbd/default.nix b/nixpkgs/pkgs/applications/misc/xkbd/default.nix
new file mode 100644
index 000000000000..df7d0f0e61cc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xkbd/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, freetype, libXrender, libXft, xorgproto
+, xinput, libXi, libXext, libXtst, libXpm, libX11, autoreconfHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xkbd";
+  version = "0.8.18";
+
+  src = fetchFromGitHub {
+    owner = "mahatma-kaganovich";
+    repo = "xkbd";
+    rev = "${pname}-${version}";
+    sha256 = "05ry6q75jq545kf6p20nhfywaqf2wdkfiyp6iwdpv9jh238hf7m9";
+  };
+
+  buildInputs = [
+    freetype libXrender libXft libXext libXtst libXpm libX11
+    libXi xorgproto xinput
+  ];
+
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mahatma-kaganovich/xkbd";
+    description = "onscreen soft keyboard for X11";
+    license = licenses.gpl2Plus;
+    maintainers = [ ];
+    platforms = platforms.linux;
+    mainProgram = "xkbd";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xkblayout-state/default.nix b/nixpkgs/pkgs/applications/misc/xkblayout-state/default.nix
new file mode 100644
index 000000000000..c73ff6a60783
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xkblayout-state/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xkblayout-state";
+  version = "1b";
+
+  src = fetchFromGitHub {
+    owner = "nonpop";
+    repo = "xkblayout-state";
+    rev = "v${version}";
+    sha256 = "sha256-diorqwDEBdzcBteKvhRisQaY3bx5seaOaWSaPwBkWDo=";
+  };
+
+  buildInputs = [ libX11 ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp xkblayout-state $out/bin
+  '';
+
+  meta = with lib; {
+    description = "A small command-line program to get/set the current XKB keyboard layout";
+    homepage = "https://github.com/nonpop/xkblayout-state";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.jagajaga ];
+    platforms = platforms.linux;
+    mainProgram = "xkblayout-state";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xkbmon/default.nix b/nixpkgs/pkgs/applications/misc/xkbmon/default.nix
new file mode 100644
index 000000000000..f9394c45342c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xkbmon/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, libX11 }:
+
+stdenv.mkDerivation rec {
+  pname = "xkbmon";
+  version = "0.4";
+
+  src = fetchFromGitHub {
+    owner = "xkbmon";
+    repo = "xkbmon";
+    rev = version;
+    sha256 = "sha256-EWW6L6NojzXodDOET01LMcQT8/1JIMpOD++MCiM3j1Y=";
+  };
+
+  buildInputs = [ libX11 ];
+
+  installPhase = "install -D -t $out/bin xkbmon";
+
+  meta = with lib; {
+    homepage = "https://github.com/xkbmon/xkbmon";
+    description = "Command-line keyboard layout monitor for X11";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.romildo ];
+    mainProgram = "xkbmon";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xlights/default.nix b/nixpkgs/pkgs/applications/misc/xlights/default.nix
new file mode 100644
index 000000000000..e878039d0ede
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xlights/default.nix
@@ -0,0 +1,20 @@
+{ lib, appimageTools, fetchurl }:
+
+appimageTools.wrapType2 rec {
+  pname = "xlights";
+  version = "2023.13";
+
+  src = fetchurl {
+    url = "https://github.com/smeighan/xLights/releases/download/${version}/xLights-${version}-x86_64.AppImage";
+    hash = "sha256-vNauKG7F7AiSMZrkMPwR9C+Mshot4NOf4oIdEr5Pu3Q=";
+  };
+
+  meta = with lib; {
+    description = "xLights is a sequencer for Lights. xLights has usb and E1.31 drivers. You can create sequences in this object oriented program. You can create playlists, schedule them, test your hardware, convert between different sequencers.";
+    homepage = "https://xlights.org";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ kashw2 ];
+    platforms = platforms.linux;
+    mainProgram = "xlights-${version}";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xmenu/default.nix b/nixpkgs/pkgs/applications/misc/xmenu/default.nix
new file mode 100644
index 000000000000..ae08952af2e8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmenu/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchFromGitHub, imlib2, libX11, libXft, libXinerama }:
+
+stdenv.mkDerivation rec {
+  pname = "xmenu";
+  version = "4.5.5";
+
+  src = fetchFromGitHub {
+    owner = "phillbush";
+    repo = "xmenu";
+    rev = "v${version}";
+    sha256 = "sha256-Gg4hSBBVBOB/wlY44C5bJOuOnLoA/tPvcNZamXae/WE=";
+  };
+
+  buildInputs = [ imlib2 libX11 libXft libXinerama ];
+
+  postPatch = "sed -i \"s:/usr/local:$out:\" config.mk";
+
+  meta = with lib; {
+    description = "A menu utility for X";
+    homepage = "https://github.com/phillbush/xmenu";
+    license = licenses.mit;
+    maintainers = with maintainers; [ neonfuz ];
+    platforms = platforms.all;
+    mainProgram = "xmenu";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xmind/default.nix b/nixpkgs/pkgs/applications/misc/xmind/default.nix
new file mode 100644
index 000000000000..58b46208e510
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmind/default.nix
@@ -0,0 +1,97 @@
+{ stdenv, lib, fetchzip, fetchurl, gtk3, jre8, libXtst, makeWrapper, makeDesktopItem, runtimeShell }:
+
+stdenv.mkDerivation rec {
+  pname = "xmind";
+  version = "8-update9";
+
+  src = fetchzip {
+    url = "https://www.xmind.app/xmind/downloads/${pname}-${version}-linux.zip";
+    stripRoot = false;
+    sha256 = "9769c4a9d42d3370ed2c2d1bed5a5d78f1fc3dc5bd604b064b56101fc7f90bb4";
+  };
+
+  srcIcon = fetchurl {
+    url = "https://aur.archlinux.org/cgit/aur.git/plain/xmind.png?h=xmind&id=41936c866b244b34d7dfbee373cbb835eed7860b";
+    sha256 = "0jxq2fiq69q9ly0m6hx2qfybqad22sl42ciw636071khpqgc885f";
+  };
+
+  preferLocalBuild = true;
+
+  patches = [ ./java-env-config-fixes.patch ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  dontBuild = true;
+  dontPatchELF = true;
+  dontStrip = true;
+
+  libPath = lib.makeLibraryPath [ gtk3 libXtst ];
+
+  desktopItem = makeDesktopItem {
+    name = "XMind";
+    exec = "XMind";
+    icon = "xmind";
+    desktopName = "XMind";
+    comment = meta.description;
+    categories = [ "Office" ];
+    mimeTypes = [ "application/xmind" "x-scheme-handler/xmind" ];
+  };
+
+  installPhase = let
+    targetDir = if stdenv.hostPlatform.system == "i686-linux"
+      then "XMind_i386"
+      else "XMind_amd64";
+  in ''
+    mkdir -p $out/{bin,libexec/configuration/,share/{applications/,fonts/,icons/hicolor/scalable/apps/}}
+    cp -r ${targetDir}/{configuration,p2,XMind{,.ini}} $out/libexec
+    cp -r {plugins,features} $out/libexec/
+    cp -r fonts $out/share/fonts/
+    cp "${desktopItem}/share/applications/XMind.desktop" $out/share/applications/XMind.desktop
+    cp ${srcIcon} $out/share/icons/hicolor/scalable/apps/xmind.png
+
+    patchelf --set-interpreter $(cat ${stdenv.cc}/nix-support/dynamic-linker) \
+      $out/libexec/XMind
+
+    wrapProgram $out/libexec/XMind \
+      --prefix LD_LIBRARY_PATH : "${libPath}"
+
+    # Inspired by https://aur.archlinux.org/cgit/aur.git/tree/?h=xmind
+    cat >$out/bin/XMind <<EOF
+      #! ${runtimeShell}
+      if [ ! -d "\$HOME/.xmind" ]; then
+        mkdir -p "\$HOME/.xmind/configuration-cathy/"
+        cp -r $out/libexec/configuration/ \$HOME/.xmind/configuration-cathy/
+      fi
+
+      exec "$out/libexec/XMind" "\$@"
+    EOF
+    chmod +x $out/bin/XMind
+
+    ln -s ${jre8} $out/libexec/jre
+  '';
+
+  meta = with lib; {
+    description = "Mind-mapping software";
+    longDescription = ''
+      XMind is a mind mapping and brainstorming software. In addition
+      to the management elements, the software can capture ideas,
+      clarify thinking, manage complex information, and promote team
+      collaboration for higher productivity.
+
+      It supports mind maps, fishbone diagrams, tree diagrams,
+      organization charts, spreadsheets, etc. Normally, it is used for
+      knowledge management, meeting minutes, task management, and
+      GTD. Meanwhile, XMind can read FreeMind and MindManager files,
+      and save to Evernote.
+    '';
+    homepage = "https://www.xmind.net/";
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
+    mainProgram = "XMind";
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ michalrus ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xmind/java-env-config-fixes.patch b/nixpkgs/pkgs/applications/misc/xmind/java-env-config-fixes.patch
new file mode 100644
index 000000000000..f359a9c2ba46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmind/java-env-config-fixes.patch
@@ -0,0 +1,40 @@
+diff --git a/XMind_amd64/XMind.ini b/XMind_amd64/XMind.ini
+index bdd8a37..5f35daf 100644
+--- a/XMind_amd64/XMind.ini
++++ b/XMind_amd64/XMind.ini
+@@ -1,11 +1,11 @@
+ -configuration
+-./configuration
++@user.home/.xmind/configuration-cathy_linux_64
+ -data
+-../workspace
++@user.home/.xmind/workspace-cathy
+ -startup
+-../plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
++plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
+ --launcher.library
+-../plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.400.v20160518-1444
++plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.400.v20160518-1444
+ --launcher.defaultAction
+ openFile
+ --launcher.GTK_version
+diff --git a/XMind_i386/XMind.ini b/XMind_i386/XMind.ini
+index 4ed3225..1d74258 100644
+--- a/XMind_i386/XMind.ini
++++ b/XMind_i386/XMind.ini
+@@ -1,11 +1,11 @@
+ -configuration
+-./configuration
++@user.home/.xmind/configuration-cathy_linux_64
+ -data
+-../workspace
++@user.home/.xmind/workspace-cathy
+ -startup
+-../plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
++plugins/org.eclipse.equinox.launcher_1.3.200.v20160318-1642.jar
+ --launcher.library
+-../plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.400.v20160518-1444
++plugins/org.eclipse.equinox.launcher.gtk.linux.x86_1.1.400.v20160518-1444
+ --launcher.defaultAction
+ openFile
+ --launcher.GTK_version
diff --git a/nixpkgs/pkgs/applications/misc/xmr-stak/default.nix b/nixpkgs/pkgs/applications/misc/xmr-stak/default.nix
new file mode 100644
index 000000000000..81f35447863c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmr-stak/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, lib, fetchpatch
+, fetchFromGitHub, cmake, libmicrohttpd, openssl
+, opencl-headers, ocl-icd, hwloc
+, devDonationLevel ? "0.0"
+, openclSupport ? true
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xmr-stak";
+  version = "2.10.8";
+
+  src = fetchFromGitHub {
+    owner = "fireice-uk";
+    repo = "xmr-stak";
+    rev = version;
+    sha256 = "0ilx5mhh91ks7dwvykfyynh53l6vkkignjpwkkss8ss6b2k8gdbj";
+  };
+
+  env.NIX_CFLAGS_COMPILE = "-O3";
+
+  patches = [ (fetchpatch {
+    name = "fix-libmicrohttpd-0-9-71.patch";
+    url = "https://github.com/fireice-uk/xmr-stak/compare/06e08780eab54dbc025ce3f38c948e4eef2726a0...8adb208987f5881946992ab9cd9a45e4e2a4b870.patch";
+    excludes = [ "CMakeLists.txt.user" ];
+    hash = "sha256-Yv0U5EO1P5eikn1fKvUXEwemoUIjjeTjpP9p5J8pbC0=";
+  }) ];
+
+  cmakeFlags = [ "-DCUDA_ENABLE=OFF" ]
+    ++ lib.optional (!openclSupport) "-DOpenCL_ENABLE=OFF";
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ libmicrohttpd openssl hwloc ]
+    ++ lib.optionals openclSupport [ opencl-headers ocl-icd ];
+
+  postPatch = ''
+    substituteInPlace xmrstak/donate-level.hpp \
+      --replace 'fDevDonationLevel = 2.0' 'fDevDonationLevel = ${devDonationLevel}'
+  '';
+
+  meta = with lib; {
+    # Does not build against gcc-13. No development activity upstream
+    # for past few years.
+    broken = true;
+    description = "Unified All-in-one Monero miner";
+    homepage = "https://github.com/fireice-uk/xmr-stak";
+    license = licenses.gpl3Plus;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ bfortz ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xmrig/default.nix b/nixpkgs/pkgs/applications/misc/xmrig/default.nix
new file mode 100644
index 000000000000..b0f8562c1728
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmrig/default.nix
@@ -0,0 +1,73 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, libuv
+, libmicrohttpd
+, openssl
+, hwloc
+, donateLevel ? 0
+, darwin
+}:
+
+let
+  inherit (darwin.apple_sdk_11_0.frameworks) Carbon CoreServices OpenCL;
+in
+stdenv.mkDerivation rec {
+  pname = "xmrig";
+  version = "6.21.1";
+
+  src = fetchFromGitHub {
+    owner = "xmrig";
+    repo = "xmrig";
+    rev = "v${version}";
+    hash = "sha256-xMfNWqr43Gxu+ET8oP9l97+tBsL/b6DNuFU4j9wy0UA=";
+  };
+
+  patches = [
+    ./donate-level.patch
+  ];
+
+  postPatch = ''
+    substituteAllInPlace src/donate.h
+    substituteInPlace cmake/OpenSSL.cmake \
+      --replace "set(OPENSSL_USE_STATIC_LIBS TRUE)" "set(OPENSSL_USE_STATIC_LIBS FALSE)"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    libuv
+    libmicrohttpd
+    openssl
+    hwloc
+  ] ++ lib.optionals stdenv.isDarwin [
+    Carbon
+    CoreServices
+    OpenCL
+  ];
+
+  inherit donateLevel;
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD xmrig $out/bin/xmrig
+
+    runHook postInstall
+  '';
+
+  # https://github.com/NixOS/nixpkgs/issues/245534
+  hardeningDisable = [ "fortify" ];
+
+  meta = with lib; {
+    description = "Monero (XMR) CPU miner";
+    homepage = "https://github.com/xmrig/xmrig";
+    license = licenses.gpl3Plus;
+    mainProgram = "xmrig";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ kim0 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xmrig/donate-level.patch b/nixpkgs/pkgs/applications/misc/xmrig/donate-level.patch
new file mode 100644
index 000000000000..3aaae3e67763
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmrig/donate-level.patch
@@ -0,0 +1,12 @@
+diff --git a/src/donate.h b/src/donate.h
+--- a/src/donate.h
++++ b/src/donate.h
+@@ -46,6 +46,6 @@
+  */
+-constexpr const int kDefaultDonateLevel = 1;
+-constexpr const int kMinimumDonateLevel = 1;
++constexpr const int kDefaultDonateLevel = @donateLevel@;
++constexpr const int kMinimumDonateLevel = @donateLevel@;
+ 
+ 
+ #endif /* XMRIG_DONATE_H */
diff --git a/nixpkgs/pkgs/applications/misc/xmrig/moneroocean.nix b/nixpkgs/pkgs/applications/misc/xmrig/moneroocean.nix
new file mode 100644
index 000000000000..0e4ac69cb813
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmrig/moneroocean.nix
@@ -0,0 +1,37 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, xmrig
+}:
+
+xmrig.overrideAttrs (oldAttrs: rec {
+  pname = "xmrig-mo";
+  version = "6.21.0-mo2";
+
+  src = fetchFromGitHub {
+    owner = "MoneroOcean";
+    repo = "xmrig";
+    rev = "v${version}";
+    hash = "sha256-OKyJcmhlY8gfDKyBf83KHhokp4qA8EDyessTwKReaD8=";
+  };
+
+  patches = [
+    # Fix build against gcc-13 due to missing <stdexcept> include
+    #   https://github.com/MoneroOcean/xmrig/pull/123
+    (fetchpatch {
+      name = "gcc-13.patch";
+      url = "https://github.com/MoneroOcean/xmrig/commit/7d3ea51d68049c35e9d4c75732c751eefbc5ab29.patch";
+      hash = "sha256-iNrtZ8LxNJMzn8kXLhYGEFAy0ughfOZobDVRImpVPC0=";
+    })
+  ];
+
+  meta = with lib; {
+    description = "A fork of the XMRig CPU miner with support for algorithm switching";
+    homepage = "https://github.com/MoneroOcean/xmrig";
+    license = licenses.gpl3Plus;
+    mainProgram = "xmrig";
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ j0hax ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/xmrig/proxy.nix b/nixpkgs/pkgs/applications/misc/xmrig/proxy.nix
new file mode 100644
index 000000000000..0acaece4cc02
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xmrig/proxy.nix
@@ -0,0 +1,60 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, cmake
+, libuv
+, libmicrohttpd
+, openssl
+, darwin
+}:
+
+let
+  inherit (darwin.apple_sdk_11_0.frameworks) CoreServices IOKit;
+in
+stdenv.mkDerivation rec {
+  pname = "xmrig-proxy";
+  version = "6.21.0";
+
+  src = fetchFromGitHub {
+    owner = "xmrig";
+    repo = "xmrig-proxy";
+    rev = "v${version}";
+    hash = "sha256-ICRzd1iCm/TciVe0RqVFiiY74RK0KpEGPJ2v+wSRIEo=";
+  };
+
+  postPatch = ''
+    # Link dynamically against libraries instead of statically
+    substituteInPlace CMakeLists.txt \
+      --replace uuid.a uuid
+    substituteInPlace cmake/OpenSSL.cmake \
+      --replace "set(OPENSSL_USE_STATIC_LIBS TRUE)" "set(OPENSSL_USE_STATIC_LIBS FALSE)"
+  '';
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    libuv
+    libmicrohttpd
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    CoreServices
+    IOKit
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -vD xmrig-proxy $out/bin/xmrig-proxy
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Monero (XMR) Stratum protocol proxy";
+    homepage = "https://github.com/xmrig/xmrig-proxy";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ aij ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xneur/default.nix b/nixpkgs/pkgs/applications/misc/xneur/default.nix
new file mode 100644
index 000000000000..eab545cf0818
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xneur/default.nix
@@ -0,0 +1,75 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchpatch
+, autoreconfHook
+, intltool
+, pkg-config
+, wrapGAppsHook
+, enchant
+, gdk-pixbuf
+, glib
+, gst_all_1
+, libnotify
+, pcre
+, xorg
+, xosd
+}:
+
+stdenv.mkDerivation {
+  pname = "xneur";
+  version = "0.20.0";
+
+  src = fetchurl {
+    url = "https://github.com/AndrewCrewKuznetsov/xneur-devel/raw/f66723feb272c68f7c22a8bf0dbcafa5e3a8a5ee/dists/0.20.0/xneur_0.20.0.orig.tar.gz";
+    sha256 = "1lg3qpi9pkx9f5xvfc8yf39wwc98f769yb7i2438vqn66kla1xpr";
+  };
+
+  nativeBuildInputs = [
+    autoreconfHook
+    intltool
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    enchant
+    gdk-pixbuf
+    glib
+    gst_all_1.gst-plugins-base
+    gst_all_1.gst-plugins-good
+    gst_all_1.gstreamer
+    libnotify
+    pcre
+    xorg.libX11
+    xorg.libXext
+    xorg.libXi
+    xorg.libXtst
+    xosd
+  ];
+
+  patches = [
+    (fetchpatch {
+      name = "gcc-10.patch";
+      url = "https://salsa.debian.org/debian/xneur/-/raw/da38ad9c8e1bf4e349f5ed4ad909f810fdea44c9/debian/patches/gcc-10.patch";
+      sha256 = "0pc17a4sdrnrc4z7gz28889b9ywqsm5mzm6m41h67j2f5zh9k3fy";
+    })
+    (fetchpatch {
+      name = "enchant2.patch";
+      url = "https://salsa.debian.org/debian/xneur/-/raw/695b0fea56cde4ff6cf0f3988218c5cb9d7ff5ae/debian/patches/enchant2.patch";
+      sha256 = "02a3kkfzdvs5f8dfm6j5x3jcn5j8qah9ykfymp6ffqsf4fijp65n";
+    })
+  ];
+
+  postPatch = ''
+    sed -e 's@for xosd_dir in@for xosd_dir in ${xosd} @' -i configure.ac
+  '';
+
+  meta = with lib; {
+    description = "Utility for switching between keyboard layouts";
+    homepage = "https://xneur.ru";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xpad/default.nix b/nixpkgs/pkgs/applications/misc/xpad/default.nix
new file mode 100644
index 000000000000..2a14cbe24fb5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpad/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl
+, autoreconfHook, pkg-config, wrapGAppsHook
+, glib, intltool, gtk3, gtksourceview }:
+
+stdenv.mkDerivation rec {
+  pname = "xpad";
+  version = "5.4.0";
+
+  src = fetchurl {
+    url = "https://launchpad.net/xpad/trunk/${version}/+download/xpad-${version}.tar.bz2";
+    sha256 = "1qpmlwn0bcw1q73ag0l0fdnlzmwawfvsy4g9y5b0vyrc58lcp5d3";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config wrapGAppsHook intltool ];
+
+  buildInputs = [ glib gtk3 gtksourceview ];
+
+  meta = with lib; {
+    description = "A sticky note application for jotting down things to remember";
+    homepage = "https://launchpad.net/xpad";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ michalrus ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xpdf/default.nix b/nixpkgs/pkgs/applications/misc/xpdf/default.nix
new file mode 100644
index 000000000000..38b92eb77b9f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpdf/default.nix
@@ -0,0 +1,101 @@
+{ enableGUI ? true
+, enablePDFtoPPM ? true
+, enablePrinting ? true
+, lib, stdenv, fetchzip, cmake, makeDesktopItem
+, zlib, libpng, cups ? null, freetype ? null
+, qtbase ? null, qtsvg ? null, wrapQtAppsHook
+}:
+
+assert enableGUI -> qtbase != null && qtsvg != null && freetype != null;
+assert enablePDFtoPPM -> freetype != null;
+assert enablePrinting -> cups != null;
+
+stdenv.mkDerivation rec {
+  pname = "xpdf";
+  version = "4.05";
+
+  src = fetchzip {
+    urls = [
+      "https://dl.xpdfreader.com/xpdf-${version}.tar.gz"
+      "https://dl.xpdfreader.com/old/xpdf-${version}.tar.gz"
+    ];
+    hash = "sha256-LBxKSrXTdoulZDjPiyYMaJr63jFHHI+VCgVJx310i/w=";
+  };
+
+  # Fix "No known features for CXX compiler", see
+  # https://cmake.org/pipermail/cmake/2016-December/064733.html and the note at
+  # https://cmake.org/cmake/help/v3.10/command/cmake_minimum_required.html
+  postPatch = lib.optionalString stdenv.isDarwin ''
+    substituteInPlace CMakeLists.txt --replace \
+        'cmake_minimum_required(VERSION 2.8.12)' 'cmake_minimum_required(VERSION 3.1.0)'
+    '';
+
+  nativeBuildInputs =
+    [ cmake ]
+    ++ lib.optional enableGUI wrapQtAppsHook;
+
+  cmakeFlags = ["-DSYSTEM_XPDFRC=/etc/xpdfrc" "-DA4_PAPER=ON" "-DOPI_SUPPORT=ON"]
+    ++ lib.optional (!enablePrinting) "-DXPDFWIDGET_PRINTING=OFF";
+
+  buildInputs = [ zlib libpng ] ++
+    lib.optional enableGUI qtbase ++
+    lib.optional enablePrinting cups ++
+    lib.optional enablePDFtoPPM freetype;
+
+  desktopItem = makeDesktopItem {
+    name = "xpdf";
+    desktopName = "Xpdf";
+    comment = "Views Adobe PDF files";
+    icon = "xpdf";
+    exec = "xpdf %f";
+    categories = [ "Office" ];
+  };
+
+  postInstall = lib.optionalString (!stdenv.isDarwin) ''
+    install -Dm644 ${desktopItem}/share/applications/xpdf.desktop -t $out/share/applications
+    install -Dm644 $src/xpdf-qt/xpdf-icon.svg $out/share/pixmaps/xpdf.svg
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.xpdfreader.com";
+    description = "Viewer for Portable Document Format (PDF) files";
+    longDescription = ''
+      XPDF includes multiple tools for viewing and processing PDF files.
+        xpdf:      PDF viewer (with Graphical Interface)
+        pdftotext: converts PDF to text
+        pdftops:   converts PDF to PostScript
+        pdftoppm:  converts PDF pages to netpbm (PPM/PGM/PBM) image files
+        pdftopng:  converts PDF pages to PNG image files
+        pdftohtml: converts PDF to HTML
+        pdfinfo:   extracts PDF metadata
+        pdfimages: extracts raw images from PDF files
+        pdffonts:  lists fonts used in PDF files
+        pdfdetach: extracts attached files from PDF files
+    '';
+    license = with licenses; [ gpl2Only gpl3Only ];
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ sikmir ];
+    knownVulnerabilities = [
+      "CVE-2019-9587: loop in PDF objects"
+      "CVE-2019-9588: loop in PDF objects"
+      "CVE-2019-16088: loop in PDF objects"
+      "CVE-2022-38334"
+      "CVE-2022-38928"
+      "CVE-2022-41842"
+      "CVE-2022-41843"
+      "CVE-2022-43071"
+      "CVE-2022-43295"
+      "CVE-2022-45586"
+      "CVE-2022-45587"
+      "CVE-2023-26930"
+      "CVE-2023-26931"
+      "CVE-2023-26934"
+      "CVE-2023-26935"
+      "CVE-2023-26936"
+      "CVE-2023-26937"
+      "CVE-2023-26938"
+      "CVE-2023-27655"
+      "CVE-2023-31557"
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.nix b/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.nix
new file mode 100644
index 000000000000..61c696f1309e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchurl
+}:
+
+stdenv.mkDerivation {
+  pname = "libxpdf";
+  version = "3.02pl5";
+
+  src = fetchurl {
+    url = "https://dl.xpdfreader.com/old/xpdf-3.02.tar.gz";
+    sha256 = "000zq4ddbwyxiki4vdwpmxbnw5n9hsg9hvwra2p33hslyib7sfmk";
+  };
+
+  patches = [
+    (fetchurl {
+      url = "https://dl.xpdfreader.com/old/xpdf-3.02pl1.patch";
+      sha256 = "1wxv9l0d2kkwi961ihpdwi75whdvk7cgqxkbfym8cjj11fq17xjq";
+    })
+    (fetchurl {
+      url = "https://dl.xpdfreader.com/old/xpdf-3.02pl2.patch";
+      sha256 = "1nfrgsh9xj0vryd8h65myzd94bjz117y89gq0hzji9dqn23xihfi";
+    })
+    (fetchurl {
+      url = "https://dl.xpdfreader.com/old/xpdf-3.02pl3.patch";
+      sha256 = "0jskkv8x6dqr9zj4azaglas8cziwqqrkbbnzrpm2kzrvsbxyhk2r";
+    })
+    (fetchurl {
+      url = "https://dl.xpdfreader.com/old/xpdf-3.02pl4.patch";
+      sha256 = "1c48h7aizx0ngmzlzw0mpja1w8vqyy3pg62hyxp7c60k86al715h";
+    })
+    (fetchurl {
+      url = "https://dl.xpdfreader.com/old/xpdf-3.02pl5.patch";
+      sha256 = "1fki66pw56yr6aw38f6amrx7wxwcxbx4704pjqq7pqqr784b7z4j";
+    })
+    ./xpdf-3.02-protection.patch
+    ./libxpdf.patch
+  ];
+
+  installPhase = ''
+    mkdir -p $out/lib/goo
+    mkdir -p $out/lib/fofi
+    mkdir -p $out/lib/xpdf
+    mkdir -p $out/include
+
+    cp -v goo/libGoo.a $out/lib/goo
+    cp -v fofi/libfofi.a $out/lib/fofi
+    cp -v xpdf/libxpdf.a $out/lib/xpdf
+
+    cp -v *.h $out/include
+    cp -v goo/*.h $out/include
+    cp -v fofi/*.h $out/include
+    cp -v xpdf/*.h $out/include
+  '';
+
+  meta = with lib; {
+    platforms = platforms.unix;
+    license = licenses.gpl2Only;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.patch b/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.patch
new file mode 100644
index 000000000000..606da76c7293
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpdf/libxpdf.patch
@@ -0,0 +1,45 @@
+diff -rc xpdf-3.02/xpdf/Makefile.in xpdf-3.02-new/xpdf/Makefile.in
+*** xpdf-3.02/xpdf/Makefile.in	2007-02-27 23:05:52.000000000 +0100
+--- xpdf-3.02-new/xpdf/Makefile.in	2010-08-25 14:54:14.000000000 +0200
+***************
+*** 110,116 ****
+  	pdffonts$(EXE) pdftoppm$(EXE) pdfimages$(EXE)
+  
+  all-no-x: pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) pdffonts$(EXE) \
+! 	pdfimages$(EXE)
+  
+  #------------------------------------------------------------------------
+  
+--- 110,116 ----
+  	pdffonts$(EXE) pdftoppm$(EXE) pdfimages$(EXE)
+  
+  all-no-x: pdftops$(EXE) pdftotext$(EXE) pdfinfo$(EXE) pdffonts$(EXE) \
+! 	pdfimages$(EXE) libxpdf.a
+  
+  #------------------------------------------------------------------------
+  
+***************
+*** 248,253 ****
+--- 248,269 ----
+  
+  #------------------------------------------------------------------------
+  
++ PDFTOEPDF_OBJS = \
++         Array.o BuiltinFont.o BuiltinFontTables.o CMap.o \
++         Catalog.o CharCodeToUnicode.o Decrypt.o Dict.o Error.o \
++         FontEncodingTables.o Gfx.o GfxFont.o GfxState.o \
++         GlobalParams.o JArithmeticDecoder.o JBIG2Stream.o JPXStream.o Lexer.o Link.o \
++         NameToCharCode.o Object.o OutputDev.o Outline.o PDFDoc.o Page.o \
++         Parser.o PDFDocEncoding.o Stream.o UnicodeMap.o XRef.o Function.o \
++         PSTokenizer.o UnicodeTypeTable.o
++ 
++ libxpdf.a: $(PDFTOEPDF_OBJS)
++ 	rm -f $@
++ 	$(AR) $(ARFLAGS) $@ *.o
++ 	ranlib $@
++ 
++ #------------------------------------------------------------------------
++ 
+  depend:
+  	$(CXX) $(CXXFLAGS) -MM $(CXX_SRC) >Makefile.dep
+  
diff --git a/nixpkgs/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch b/nixpkgs/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch
new file mode 100644
index 000000000000..598fc6dbd073
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xpdf/xpdf-3.02-protection.patch
@@ -0,0 +1,74 @@
+diff -C 3 -r orig/xpdf/pdfimages.cc xpdf-3.02/xpdf/pdfimages.cc
+*** orig/xpdf/pdfimages.cc	2007-02-27 23:05:52.000000000 +0100
+--- xpdf-3.02/xpdf/pdfimages.cc	2007-10-31 20:17:22.601449943 +0100
+***************
+*** 118,130 ****
+      goto err1;
+    }
+  
+-   // check for copy permission
+-   if (!doc->okToCopy()) {
+-     error(-1, "Copying of images from this document is not allowed.");
+-     exitCode = 3;
+-     goto err1;
+-   }
+- 
+    // get page range
+    if (firstPage < 1)
+      firstPage = 1;
+--- 118,123 ----
+diff -C 3 -r orig/xpdf/pdftotext.cc xpdf-3.02/xpdf/pdftotext.cc
+*** orig/xpdf/pdftotext.cc	2007-02-27 23:05:52.000000000 +0100
+--- xpdf-3.02/xpdf/pdftotext.cc	2007-10-31 20:17:34.392224196 +0100
+***************
+*** 160,172 ****
+      goto err2;
+    }
+  
+-   // check for copy permission
+-   if (!doc->okToCopy()) {
+-     error(-1, "Copying of text from this document is not allowed.");
+-     exitCode = 3;
+-     goto err2;
+-   }
+- 
+    // construct text file name
+    if (argc == 3) {
+      textFileName = new GString(argv[2]);
+--- 160,165 ----
+diff -C 3 -r orig/xpdf/XPDFCore.cc xpdf-3.02/xpdf/XPDFCore.cc
+*** orig/xpdf/XPDFCore.cc	2007-02-27 23:05:52.000000000 +0100
+--- xpdf-3.02/xpdf/XPDFCore.cc	2007-10-31 20:18:05.370494431 +0100
+***************
+*** 384,394 ****
+  #ifndef NO_TEXT_SELECT
+        if (selectULX != selectLRX &&
+  	  selectULY != selectLRY) {
+! 	if (doc->okToCopy()) {
+! 	  copySelection();
+! 	} else {
+! 	  error(-1, "Copying of text from this document is not allowed.");
+! 	}
+        }
+  #endif
+      }
+--- 384,390 ----
+  #ifndef NO_TEXT_SELECT
+        if (selectULX != selectLRX &&
+  	  selectULY != selectLRY) {
+! 	copySelection();
+        }
+  #endif
+      }
+***************
+*** 407,415 ****
+    int pg;
+    double ulx, uly, lrx, lry;
+  
+-   if (!doc->okToCopy()) {
+-     return;
+-   }
+    if (getSelection(&pg, &ulx, &uly, &lrx, &lry)) {
+      //~ for multithreading: need a mutex here
+      if (currentSelection) {
+--- 403,408 ----
diff --git a/nixpkgs/pkgs/applications/misc/xrandr-invert-colors/default.nix b/nixpkgs/pkgs/applications/misc/xrandr-invert-colors/default.nix
new file mode 100644
index 000000000000..6fd521f3cc5c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xrandr-invert-colors/default.nix
@@ -0,0 +1,30 @@
+{ lib, stdenv, fetchFromGitHub, libXrandr}:
+
+stdenv.mkDerivation rec {
+  pname = "xrandr-invert-colors";
+  version = "0.02";
+
+  src = fetchFromGitHub {
+    owner = "zoltanp";
+    repo = "xrandr-invert-colors";
+    rev = "v${version}";
+    sha256 = "sha256-MIbHNJFDQsvjPUbperTKKbHY5GSgItvRyV5OsfpzYT4=";
+  };
+
+  buildInputs = [ libXrandr ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    mv xrandr-invert-colors.bin xrandr-invert-colors
+    install xrandr-invert-colors $out/bin
+  '';
+
+  meta = with lib; {
+    description = "Inverts the colors of your screen";
+    license = lib.licenses.gpl3Plus;
+    homepage = "https://github.com/zoltanp/xrandr-invert-colors";
+    maintainers = [lib.maintainers.magnetophon ];
+    platforms = platforms.linux;
+    mainProgram = "xrandr-invert-colors";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xrq/default.nix b/nixpkgs/pkgs/applications/misc/xrq/default.nix
new file mode 100644
index 000000000000..c37696c5f19d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xrq/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchFromGitHub, libX11 }:
+
+stdenv.mkDerivation {
+  pname = "xrq";
+  version = "unstable-2016-01-15";
+
+  src = fetchFromGitHub {
+    owner = "arianon";
+    repo = "xrq";
+    rev = "d5dc19c63881ebdd1287a02968e3a1447dde14a9";
+    sha256 = "1bxf6h3fjw3kjraz7028m7p229l423y1ngy88lqvf0xl1g3dhp36";
+  };
+
+  installPhase = ''
+    make PREFIX=$out install
+  '';
+
+  outputs = [ "out" "man" ];
+
+  buildInputs = [ libX11 ];
+
+  meta = {
+    description = "X utility for querying xrdb";
+    homepage = "https://github.com/arianon/xrq";
+    license = lib.licenses.mit;
+    platforms = with lib.platforms; unix;
+    mainProgram = "xrq";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xscope/default.nix b/nixpkgs/pkgs/applications/misc/xscope/default.nix
new file mode 100644
index 000000000000..34425345f3d4
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xscope/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, pkg-config, libXt }:
+
+stdenv.mkDerivation rec {
+  pname = "xscope";
+  version = "1.4.1";
+
+  src = fetchurl {
+    url = "mirror://xorg/individual/app/${pname}-${version}.tar.bz2";
+    sha256 = "08zl3zghvbcqy0r5dn54dim84lp52s0ygrr87jr3a942a6ypz01k";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libXt ];
+
+  meta = with lib; {
+    description = "program to monitor X11/Client conversations";
+    homepage = "https://cgit.freedesktop.org/xorg/app/xscope/";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ ];
+    platforms = with platforms; unix;
+    mainProgram = "xscope";
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/xsuspender/default.nix b/nixpkgs/pkgs/applications/misc/xsuspender/default.nix
new file mode 100644
index 000000000000..b47bbef0188f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xsuspender/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, cmake, makeWrapper, pkg-config
+, glib, libwnck, procps }:
+
+stdenv.mkDerivation rec {
+  pname = "xsuspender";
+  version = "1.3";
+
+  src = fetchFromGitHub {
+    owner = "kernc";
+    repo = "xsuspender";
+    rev = version;
+    sha256 = "1c6ab1s9bbkjbmcfv2mny273r66dlz7sgxsmzfwi0fm2vcb2lwim";
+  };
+
+  outputs = [ "out" "man" "doc" ];
+
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+  buildInputs = [ glib libwnck ];
+
+  postInstall = ''
+    wrapProgram $out/bin/xsuspender \
+      --prefix PATH : "${lib.makeBinPath [ procps ]}"
+  '';
+
+  meta = with lib; {
+    description = "Auto-suspend inactive X11 applications";
+    homepage = "https://kernc.github.io/xsuspender/";
+    license = licenses.wtfpl;
+    maintainers = with maintainers; [ offline ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xsw/default.nix b/nixpkgs/pkgs/applications/misc/xsw/default.nix
new file mode 100644
index 000000000000..fac2c6812bd2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xsw/default.nix
@@ -0,0 +1,36 @@
+{ stdenv, lib, fetchFromGitHub, pkg-config, SDL, SDL_image, SDL_ttf, SDL_gfx, flex, bison }:
+
+let
+  makeSDLFlags = map (p: "-I${lib.getDev p}/include/SDL");
+
+in stdenv.mkDerivation rec {
+  pname = "xsw";
+  version = "0.1.2";
+
+  src = fetchFromGitHub {
+    owner = "andrenho";
+    repo = "xsw";
+    rev = version;
+    sha256 = "092vp61ngd2vscsvyisi7dv6qrk5m1i81gg19hyfl5qvjq5p0p8g";
+  };
+
+  nativeBuildInputs = [ pkg-config flex bison ];
+
+  buildInputs = [ SDL SDL_image SDL_ttf SDL_gfx ];
+
+  env.NIX_CFLAGS_COMPILE = toString (makeSDLFlags [ SDL SDL_image SDL_ttf SDL_gfx ]);
+
+  patches = [
+    ./parse.patch # Fixes compilation error by avoiding redundant definitions.
+  ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "A slide show presentation tool";
+
+    platforms = platforms.unix;
+    license  = licenses.gpl3;
+    maintainers = [ maintainers.vrthra ];
+    mainProgram = "xsw";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xsw/parse.patch b/nixpkgs/pkgs/applications/misc/xsw/parse.patch
new file mode 100644
index 000000000000..6db6c14c26a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xsw/parse.patch
@@ -0,0 +1,21 @@
+The `%code` causes Color definition to be added in both parser.h and parser.c
+causing duplicate definitions error. This ensures that once it has been included
+as part of parser.h, it wont be redefined in parser.c
+
+--- xsw-0.1.2-src/src/parser.y	1969-12-31 16:00:01.000000000 -0800
++++ xsw-0.1.2-src/src/parser.y	2016-06-28 13:21:35.707027770 -0700
+@@ -38,7 +38,13 @@
+ 
+ %}
+ 
+-%code requires { typedef struct { unsigned char c; } Color; }
++%code requires
++{
++#ifndef COLORDEF
++#define COLORDEF
++typedef struct { unsigned char c; } Color;
++#endif
++}
+ 
+ %token SLIDE COLON HIFEN TEXT X Y W H IMAGE SIZE SCALE TEMPLATE BACKGROUND FONT
+ %token STYLE ALIGN EXPAND PLUS IMAGE_PATH
diff --git a/nixpkgs/pkgs/applications/misc/xteddy/default.nix b/nixpkgs/pkgs/applications/misc/xteddy/default.nix
new file mode 100644
index 000000000000..481255393472
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xteddy/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitLab, pkg-config, xorg, imlib2, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "xteddy";
+  version = "2.2-5";
+  src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "games-team";
+    repo = pname;
+    rev = "debian/${version}";
+    sha256 = "0rm7w78d6qajq4fvi4agyqm0c70f3c1i0cy2jdb6kqql2k8w78qy";
+  };
+
+  nativeBuildInputs = [ pkg-config makeWrapper ];
+  buildInputs = [ imlib2 xorg.libX11 xorg.libXext ];
+
+  patches = [ "${src}/debian/patches/10_libXext.patch" "${src}/debian/patches/wrong-man-page-section.patch" ];
+
+  postPatch = ''
+    sed -i "s:/usr/games/xteddy:$out/bin/xteddy:" xtoys
+    sed -i "s:/usr/share/xteddy:$out/share/xteddy:" xtoys
+  '';
+
+  postInstall = ''
+    cp -R images $out/share/images
+    # remove broken test script
+    rm $out/bin/xteddy_test
+  '';
+
+  postFixup = ''
+    # this is needed, because xteddy expects images to reside
+    # in the current working directory
+    wrapProgram $out/bin/xteddy --chdir "$out/share/images/"
+  '';
+
+  meta = with lib; {
+    description = "Cuddly teddy bear for your X desktop";
+    homepage = "https://weber.itn.liu.se/~stegu/xteddy/";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.xaverdh ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xxkb/default.nix b/nixpkgs/pkgs/applications/misc/xxkb/default.nix
new file mode 100644
index 000000000000..3fd9eb8a6ecb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xxkb/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchurl
+, libX11
+, libXt
+, libXext
+, libXpm
+, imake
+, gccmakedep
+, svgSupport ? false
+, librsvg
+, glib
+, gdk-pixbuf
+, pkg-config
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xxkb";
+  version = "1.11.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/xxkb/xxkb-${version}-src.tar.gz";
+    sha256 = "0hl1i38z9xnbgfjkaz04vv1n8xbgfg88g5z8fyzyb2hxv2z37anf";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep pkg-config ];
+
+  buildInputs = [
+    libX11
+    libXt
+    libXext
+    libXpm
+  ] ++ lib.optionals svgSupport [ librsvg glib gdk-pixbuf ];
+
+  outputs = [ "out" "man" ];
+
+  imakeFlags = lib.optionalString svgSupport "-DWITH_SVG_SUPPORT";
+
+  makeFlags = [
+    "BINDIR=${placeholder "out"}/bin"
+    "CONFDIR=${placeholder "out"}/etc/X11"
+    "PIXMAPDIR=${placeholder "out"}/share/xxkb"
+    "LIBDIR=${placeholder "out"}/lib/X11"
+    "XAPPLOADDIR=${placeholder "out"}/etc/X11/app-defaults"
+    "MANDIR=${placeholder "man"}/share/man"
+  ];
+
+  installTargets = [ "install" "install.man" ];
+
+  meta = with lib; {
+    description = "A keyboard layout indicator and switcher";
+    homepage = "http://xxkb.sourceforge.net/";
+    license = licenses.artistic2;
+    maintainers = with maintainers; [ rasendubi ];
+    platforms = platforms.linux;
+    mainProgram = "xxkb";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/xygrib/default.nix b/nixpkgs/pkgs/applications/misc/xygrib/default.nix
new file mode 100644
index 000000000000..f7b3f6837f7c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/xygrib/default.nix
@@ -0,0 +1,47 @@
+{ lib, stdenv, fetchFromGitHub, wrapQtAppsHook, cmake, bzip2, qtbase, qttools, libnova, proj_7, libpng, openjpeg }:
+
+stdenv.mkDerivation rec {
+  version = "unstable-2022-05-16";
+  pname = "xygrib";
+
+  src = fetchFromGitHub {
+    owner = "opengribs";
+    repo = "XyGrib";
+    rev = "88c425ca2d7f4ba5d7ab75bfa25e177bee02d310";
+    sha256 = "sha256-qMMeRYIQqJpVRE3YjbXIiXHwS/CHs9l2QihszwQIr/A=";
+  };
+
+  nativeBuildInputs = [ cmake qttools wrapQtAppsHook ];
+  buildInputs = [ bzip2 qtbase libnova proj_7 openjpeg libpng ];
+  cmakeFlags = [ "-DOPENJPEG_INCLUDE_DIR=${openjpeg.dev}/include/openjpeg-${lib.versions.majorMinor openjpeg.version}" ]
+    ++ lib.optionals stdenv.isDarwin [ "-DLIBNOVA_LIBRARY=${libnova}/lib/libnova.dylib" ];
+
+  postInstall =
+    if stdenv.isDarwin then ''
+      mkdir -p "$out/Applications" "$out/XyGrib/XyGrib.app/Contents/Resources"
+      cp "../data/img/xyGrib.icns" "$out/XyGrib/XyGrib.app/Contents/Resources/xyGrib.icns"
+      mv $out/XyGrib/XyGrib.app $out/Applications
+      wrapQtApp "$out/Applications/XyGrib.app/Contents/MacOS/XyGrib"
+    '' else ''
+      wrapQtApp $out/XyGrib/XyGrib
+      mkdir -p $out/bin
+      ln -s $out/XyGrib/XyGrib $out/bin/xygrib
+      install -Dm444 $src/debian/xygrib.png -t $out/share/icons/hicolor/32x32/apps
+      install -Dm444 $src/debian/xygrib.desktop -t $out/share/applications
+      substituteInPlace $out/share/applications/xygrib.desktop \
+        --replace 'Exec=XyGrib' 'Exec=xygrib'
+    '';
+
+  meta = with lib; {
+    homepage = "https://opengribs.org";
+    description = "Weather Forecast Visualization";
+    longDescription = ''
+      XyGrib is a leading opensource weather visualization package.
+      It interacts with OpenGribs's Grib server providing a choice
+      of global and large area atmospheric and wave models.
+    '';
+    license = licenses.gpl3;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ j03 ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/yambar-hyprland-wses/default.nix b/nixpkgs/pkgs/applications/misc/yambar-hyprland-wses/default.nix
new file mode 100644
index 000000000000..e64e8e13dec1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yambar-hyprland-wses/default.nix
@@ -0,0 +1,27 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "yambar-hyprland-wses";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "jonhoo";
+    repo = "yambar-hyprland-wses";
+    rev = "v${version}";
+    hash = "sha256-furHj1AAFgNiNHP9RBsVrIvrDckSKU8FXilzH9TQ99c=";
+  };
+
+  cargoHash = "sha256-/ewEgrBxRw5Xii5PX1GLKzBrZjgnzYc/Hz+M1pJpncQ=";
+
+  meta = {
+    description = "Enable Yambar to show Hyprland workspaces";
+    homepage = "https://github.com/jonhoo/yambar-hyprland-wses";
+    license = with lib.licenses; [ asl20 mit ];
+    maintainers = with lib.maintainers; [ ludovicopiero ];
+    mainProgram = "yambar-hyprland-wses";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/yambar/default.nix b/nixpkgs/pkgs/applications/misc/yambar/default.nix
new file mode 100644
index 000000000000..ee679a630b60
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yambar/default.nix
@@ -0,0 +1,124 @@
+{ lib
+, stdenv
+, fetchFromGitea
+, alsa-lib
+, bison
+, fcft
+, flex
+, json_c
+, libmpdclient
+, libxcb
+, libyaml
+, meson
+, ninja
+, pipewire
+, pixman
+, pkg-config
+, pulseaudio
+, scdoc
+, tllist
+, udev
+, wayland
+, wayland-protocols
+, wayland-scanner
+, xcbutil
+, xcbutilcursor
+, xcbutilerrors
+, xcbutilwm
+, waylandSupport ? true
+, x11Support ? true
+}:
+
+assert (x11Support || waylandSupport);
+stdenv.mkDerivation (finalAttrs: {
+  pname = "yambar";
+  version = "1.10.0";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "dnkl";
+    repo = "yambar";
+    rev = finalAttrs.version;
+    hash = "sha256-+bNTEPGV5xaVXhsejyK+FCcJ9J06KS6x7/qo6P2DnZI=";
+  };
+
+  outputs = [ "out" "man" ];
+
+  depsBuildBuild = [ pkg-config ];
+
+  nativeBuildInputs = [
+    bison
+    flex
+    meson
+    ninja
+    pkg-config
+    scdoc
+    wayland-scanner
+  ];
+
+  buildInputs = [
+    alsa-lib
+    fcft
+    json_c
+    libmpdclient
+    libyaml
+    pipewire
+    pixman
+    pulseaudio
+    tllist
+    udev
+  ] ++ lib.optionals (waylandSupport) [
+    wayland
+    wayland-protocols
+  ] ++ lib.optionals (x11Support) [
+    xcbutil
+    xcbutilcursor
+    xcbutilerrors
+    xcbutilwm
+  ];
+
+  strictDeps = true;
+
+  mesonBuildType = "release";
+
+  mesonFlags = [
+    (lib.mesonBool "werror" false)
+    (lib.mesonEnable "backend-x11" x11Support)
+    (lib.mesonEnable "backend-wayland" waylandSupport)
+  ];
+
+  meta = {
+    homepage = "https://codeberg.org/dnkl/yambar";
+    description = "Modular status panel for X11 and Wayland";
+    longDescription = ''
+      yambar is a lightweight and configurable status panel (bar, for short) for
+      X11 and Wayland, that goes to great lengths to be both CPU and battery
+      efficient - polling is only done when absolutely necessary.
+
+      It has a number of modules that provide information in the form of tags.
+      For example, the clock module has a date tag that contains the current
+      date.
+
+      The modules do not know how to present the information though. This is
+      instead done by particles. And the user, you, decides which particles (and
+      thus how to present the data) to use.
+
+      Furthermore, each particle can have a decoration - a background color or a
+      graphical underline, for example.
+
+      There is no support for images or icons. use an icon font (e.g. Font
+      Awesome, or Material Icons) if you want a graphical representation.
+
+      There are a number of modules and particles builtin. More can be added as
+      plugins. You can even write your own!
+
+      To summarize: a bar displays information provided by modules, using
+      particles and decorations. How is configured by you.
+    '';
+    changelog = "https://codeberg.org/dnkl/yambar/releases/tag/${finalAttrs.version}";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [ AndersonTorres ];
+    platforms = lib.platforms.linux;
+    mainProgram = "yambar";
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/yate/default.nix b/nixpkgs/pkgs/applications/misc/yate/default.nix
new file mode 100644
index 000000000000..76eb27a624cc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yate/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, lib, openssl, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "yate";
+  version = "6.4.0-1";
+
+  src = fetchurl {
+    url = "http://voip.null.ro/tarballs/yate${lib.versions.major version}/${pname}-${version}.tar.gz";
+    hash = "sha256-jCPca/+/jUeNs6hZZLUBl3HI9sms9SIPNGVRanSKA7A=";
+  };
+
+  # TODO zaptel ? postgres ?
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ];
+
+  # /dev/null is used when linking which is a impure path for the wrapper
+  postPatch =
+    ''
+      patchShebangs configure
+      substituteInPlace configure --replace ",/dev/null" ""
+    '';
+
+  enableParallelBuilding = false; # fails to build if true
+
+  # --unresolved-symbols=ignore-in-shared-libs makes ld no longer find --library=yate? Why?
+  preBuild =
+    ''
+      export NIX_LDFLAGS="-L$TMP/yate $NIX_LDFLAGS"
+      find . -type f -iname Makefile | xargs sed -i \
+        -e 's@-Wl,--unresolved-symbols=ignore-in-shared-libs@@' \
+        -e 's@-Wl,--retain-symbols-file@@'
+    '';
+
+  meta = {
+    description = "Yet another telephony engine";
+    homepage = "https://yate.ro/";
+    # Yate's license is GPL with an exception for linking with
+    # OpenH323 and PWlib (licensed under MPL).
+    license = lib.licenses.gpl2Only;
+    maintainers = [ lib.maintainers.marcweber ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/misc/ydict/default.nix b/nixpkgs/pkgs/applications/misc/ydict/default.nix
new file mode 100644
index 000000000000..1c57456f4a19
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/ydict/default.nix
@@ -0,0 +1,43 @@
+{ lib
+, fetchFromGitHub
+, buildGoModule
+, makeWrapper
+, mpg123
+}:
+
+buildGoModule rec {
+  pname = "ydict";
+  version = "2.2.2";
+
+  src = fetchFromGitHub {
+    owner = "TimothyYe";
+    repo = "ydict";
+    rev = "v${version}";
+    sha256 = "sha256-FcrkfWE1m5OveK4YPgVmUbL/jkh2NEs9bfeCHm2H9P8=";
+  };
+
+  vendorHash = "sha256-c5nQVQd4n978kFAAKcx5mX2Jz16ZOhS8iL/oxS1o5xs=";
+
+  ldflags = [
+    "-s"
+    "-w"
+    "-X=main.Version=${version}"
+  ];
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  preFixup = ''
+    wrapProgram $out/bin/${pname} \
+      --prefix PATH ":" "${lib.makeBinPath [ mpg123 ]}";
+  '';
+
+  # has no tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Yet another command-line Youdao Chinese dictionary";
+    homepage = "https://github.com/TimothyYe/ydict";
+    license = licenses.mit;
+    maintainers = with maintainers; [ zendo ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/yewtube/default.nix b/nixpkgs/pkgs/applications/misc/yewtube/default.nix
new file mode 100644
index 000000000000..14f50e3be290
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yewtube/default.nix
@@ -0,0 +1,47 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "yewtube";
+  version = "2.10.5";
+
+  src = fetchFromGitHub {
+    owner = "mps-youtube";
+    repo = "yewtube";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-a7ySRHSRHmQePaVV7HnCk8QsiAQfN4nCVRdamPMUHGo=";
+  };
+
+  postPatch = ''
+    # Don't try to detect the version at runtime with pip
+    substituteInPlace mps_youtube/__init__.py \
+      --replace "from pip._vendor import pkg_resources" "" \
+      --replace "__version__ =" "__version__ = '${version}' #"
+  '';
+
+  propagatedBuildInputs = with python3Packages; [
+    pyperclip
+    requests
+    youtube-search-python
+    yt-dlp
+    pylast
+  ];
+
+  checkInputs = with python3Packages; [
+    pytestCheckHook
+    dbus-python
+    pygobject3
+  ];
+
+  preCheck = ''
+    export XDG_CONFIG_HOME=$(mktemp -d)
+  '';
+
+  pythonImportsCheck = [ "mps_youtube" ];
+
+  meta = with lib; {
+    description = "Terminal based YouTube player and downloader, forked from mps-youtube";
+    homepage = "https://github.com/mps-youtube/yewtube";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ fgaz koral ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/yokadi/default.nix b/nixpkgs/pkgs/applications/misc/yokadi/default.nix
new file mode 100644
index 000000000000..10d519efa45c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yokadi/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchurl, buildPythonApplication, python-dateutil,
+  sqlalchemy, setproctitle, icalendar }:
+
+buildPythonApplication rec {
+  pname = "yokadi";
+  version = "1.2.0";
+
+  src = fetchurl {
+    url = "https://yokadi.github.io/download/${pname}-${version}.tar.gz";
+    sha256 = "681c8aa52b2e4b5255e1311e76b4b81dcb63ee7f6ca3a47178e684c06baf330f";
+  };
+
+  propagatedBuildInputs = [
+    python-dateutil
+    sqlalchemy
+    setproctitle
+    icalendar
+  ];
+
+  # Yokadi doesn't have any tests
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A command line oriented, sqlite powered, todo-list";
+    homepage = "https://yokadi.github.io/index.html";
+    license = licenses.gpl3Plus;
+    maintainers = [ maintainers.nkpvk ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/yubioath-flutter/default.nix b/nixpkgs/pkgs/applications/misc/yubioath-flutter/default.nix
new file mode 100644
index 000000000000..4895f749ec8d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yubioath-flutter/default.nix
@@ -0,0 +1,92 @@
+{ lib
+, flutter
+, python3
+, fetchFromGitHub
+, pcre2
+, libnotify
+, libappindicator
+, pkg-config
+, gnome
+, makeWrapper
+, removeReferencesTo
+}:
+
+flutter.buildFlutterApplication rec {
+  pname = "yubioath-flutter";
+  version = "6.4.0";
+
+  src = fetchFromGitHub {
+    owner = "Yubico";
+    repo = "yubioath-flutter";
+    rev = version;
+    hash = "sha256-aXUnmKEUCi0rsVr3HVhEk6xa1z9HMsH+0AIY531hqiU=";
+  };
+
+  passthru.helper = python3.pkgs.callPackage ./helper.nix { inherit src version meta; };
+
+  pubspecLock = lib.importJSON ./pubspec.lock.json;
+  gitHashes = {
+    window_manager = "sha256-mLX51nbWFccsAfcqLQIYDjYz69y9wAz4U1RZ8TIYSj0=";
+  };
+
+  postPatch = ''
+    rm -f pubspec.lock
+
+    substituteInPlace linux/CMakeLists.txt \
+      --replace-fail "../build/linux/helper" "${passthru.helper}/libexec/helper"
+  '';
+
+  preInstall = ''
+    # Make sure we have permission to delete things CMake has copied in to our build directory from elsewhere.
+    chmod -R +w build
+  '';
+
+  postInstall = ''
+    # Swap the authenticator-helper symlink with the correct symlink.
+    ln -fs "${passthru.helper}/bin/authenticator-helper" "$out/app/helper/authenticator-helper"
+
+    # Move the icon.
+    mkdir $out/share/icons
+    mv $out/app/linux_support/com.yubico.yubioath.png $out/share/icons
+
+    # Cleanup.
+    rm -rf \
+      "$out/app/README.adoc" \
+      "$out/app/desktop_integration.sh" \
+      "$out/app/linux_support" \
+      $out/bin/* # We will repopulate this directory later.
+
+    # Symlink binary.
+    ln -sf "$out/app/authenticator" "$out/bin/yubioath-flutter"
+
+    # Set the correct path to the binary in desktop file.
+    substituteInPlace "$out/share/applications/com.yubico.authenticator.desktop" \
+      --replace "@EXEC_PATH/authenticator" "$out/bin/yubioath-flutter" \
+      --replace "@EXEC_PATH/linux_support/com.yubico.yubioath.png" "$out/share/icons/com.yubico.yubioath.png"
+  '';
+
+  # Needed for QR scanning to work
+  extraWrapProgramArgs = ''
+    --prefix PATH : ${lib.makeBinPath [ gnome.gnome-screenshot ]}
+  '';
+
+  nativeBuildInputs = [
+    makeWrapper
+    removeReferencesTo
+    pkg-config
+  ];
+
+  buildInputs = [
+    pcre2
+    libnotify
+    libappindicator
+  ];
+
+  meta = with lib; {
+    description = "Yubico Authenticator for Desktop";
+    homepage = "https://github.com/Yubico/yubioath-flutter";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ lukegb ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/yubioath-flutter/helper.nix b/nixpkgs/pkgs/applications/misc/yubioath-flutter/helper.nix
new file mode 100644
index 000000000000..2fe6bd7904d7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yubioath-flutter/helper.nix
@@ -0,0 +1,47 @@
+{ buildPythonApplication
+, yubikey-manager
+, mss
+, zxing-cpp
+, pillow
+, poetry-core
+, pythonRelaxDepsHook
+
+, src
+, version
+, meta
+}:
+
+buildPythonApplication {
+  pname = "yubioath-flutter-helper";
+  inherit src version meta;
+
+  pyproject = true;
+
+  sourceRoot = "${src.name}/helper";
+
+  nativeBuildInputs = [
+    poetry-core
+    pythonRelaxDepsHook
+  ];
+
+  pythonRelaxDeps = true;
+
+  postPatch = ''
+    substituteInPlace pyproject.toml \
+      --replace "authenticator-helper" "yubioath-flutter-helper" \
+      --replace "0.1.0" "${version}"
+  '';
+
+  postInstall = ''
+    install -Dm 0755 authenticator-helper.py $out/bin/authenticator-helper
+    install -d $out/libexec/helper
+    ln -fs $out/bin/authenticator-helper $out/libexec/helper/authenticator-helper
+  '';
+
+  propagatedBuildInputs = [
+    yubikey-manager
+    mss
+    zxing-cpp
+    pillow
+  ];
+}
diff --git a/nixpkgs/pkgs/applications/misc/yubioath-flutter/pubspec.lock.json b/nixpkgs/pkgs/applications/misc/yubioath-flutter/pubspec.lock.json
new file mode 100644
index 000000000000..c83c6ffb1caf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/yubioath-flutter/pubspec.lock.json
@@ -0,0 +1,1354 @@
+{
+  "packages": {
+    "_fe_analyzer_shared": {
+      "dependency": "transitive",
+      "description": {
+        "name": "_fe_analyzer_shared",
+        "sha256": "eb376e9acf6938204f90eb3b1f00b578640d3188b4c8a8ec054f9f479af8d051",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "64.0.0"
+    },
+    "analyzer": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "analyzer",
+        "sha256": "69f54f967773f6c26c7dcb13e93d7ccee8b17a641689da39e878d5cf13b06893",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.2.0"
+    },
+    "analyzer_plugin": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "analyzer_plugin",
+        "sha256": "9661b30b13a685efaee9f02e5d01ed9f2b423bd889d28a304d02d704aee69161",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.11.3"
+    },
+    "archive": {
+      "dependency": "direct main",
+      "description": {
+        "name": "archive",
+        "sha256": "22600aa1e926be775fa5fe7e6894e7fb3df9efda8891c73f70fb3262399a432d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.4.10"
+    },
+    "args": {
+      "dependency": "direct main",
+      "description": {
+        "name": "args",
+        "sha256": "eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.2"
+    },
+    "async": {
+      "dependency": "direct main",
+      "description": {
+        "name": "async",
+        "sha256": "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.11.0"
+    },
+    "base32": {
+      "dependency": "direct main",
+      "description": {
+        "name": "base32",
+        "sha256": "ddad4ebfedf93d4500818ed8e61443b734ffe7cf8a45c668c9b34ef6adde02e2",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.3"
+    },
+    "boolean_selector": {
+      "dependency": "transitive",
+      "description": {
+        "name": "boolean_selector",
+        "sha256": "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.1"
+    },
+    "build": {
+      "dependency": "transitive",
+      "description": {
+        "name": "build",
+        "sha256": "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.1"
+    },
+    "build_config": {
+      "dependency": "transitive",
+      "description": {
+        "name": "build_config",
+        "sha256": "bf80fcfb46a29945b423bd9aad884590fb1dc69b330a4d4700cac476af1708d1",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.1"
+    },
+    "build_daemon": {
+      "dependency": "transitive",
+      "description": {
+        "name": "build_daemon",
+        "sha256": "0343061a33da9c5810b2d6cee51945127d8f4c060b7fbdd9d54917f0a3feaaa1",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.1"
+    },
+    "build_resolvers": {
+      "dependency": "transitive",
+      "description": {
+        "name": "build_resolvers",
+        "sha256": "339086358431fa15d7eca8b6a36e5d783728cf025e559b834f4609a1fcfb7b0a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.2"
+    },
+    "build_runner": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "build_runner",
+        "sha256": "581bacf68f89ec8792f5e5a0b2c4decd1c948e97ce659dc783688c8a88fbec21",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.8"
+    },
+    "build_runner_core": {
+      "dependency": "transitive",
+      "description": {
+        "name": "build_runner_core",
+        "sha256": "4ae8ffe5ac758da294ecf1802f2aff01558d8b1b00616aa7538ea9a8a5d50799",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "7.3.0"
+    },
+    "built_collection": {
+      "dependency": "transitive",
+      "description": {
+        "name": "built_collection",
+        "sha256": "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "5.1.1"
+    },
+    "built_value": {
+      "dependency": "transitive",
+      "description": {
+        "name": "built_value",
+        "sha256": "a3ec2e0f967bc47f69f95009bb93db936288d61d5343b9436e378b28a2f830c6",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "8.9.0"
+    },
+    "characters": {
+      "dependency": "transitive",
+      "description": {
+        "name": "characters",
+        "sha256": "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.0"
+    },
+    "checked_yaml": {
+      "dependency": "transitive",
+      "description": {
+        "name": "checked_yaml",
+        "sha256": "feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.3"
+    },
+    "ci": {
+      "dependency": "transitive",
+      "description": {
+        "name": "ci",
+        "sha256": "145d095ce05cddac4d797a158bc4cf3b6016d1fe63d8c3d2fbd7212590adca13",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.1.0"
+    },
+    "cli_util": {
+      "dependency": "transitive",
+      "description": {
+        "name": "cli_util",
+        "sha256": "c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.4.1"
+    },
+    "clock": {
+      "dependency": "transitive",
+      "description": {
+        "name": "clock",
+        "sha256": "cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.1"
+    },
+    "code_builder": {
+      "dependency": "transitive",
+      "description": {
+        "name": "code_builder",
+        "sha256": "f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.10.0"
+    },
+    "collection": {
+      "dependency": "direct main",
+      "description": {
+        "name": "collection",
+        "sha256": "ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.18.0"
+    },
+    "convert": {
+      "dependency": "direct main",
+      "description": {
+        "name": "convert",
+        "sha256": "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.1"
+    },
+    "cross_file": {
+      "dependency": "transitive",
+      "description": {
+        "name": "cross_file",
+        "sha256": "fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.3.3+8"
+    },
+    "crypto": {
+      "dependency": "direct main",
+      "description": {
+        "name": "crypto",
+        "sha256": "ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.3"
+    },
+    "custom_lint": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "custom_lint",
+        "sha256": "f89ff83efdba7c8996e86bb3bad0b759d58f9b19ae4d0e277a386ddd8b481217",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.0"
+    },
+    "custom_lint_builder": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "custom_lint_builder",
+        "sha256": "9cdd9987feaa6925ec5f98d64de4fbbb5d94248ff77bbf2489366efad6c4baef",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.0"
+    },
+    "custom_lint_core": {
+      "dependency": "transitive",
+      "description": {
+        "name": "custom_lint_core",
+        "sha256": "9003a91409c9f1db6e2e50b4870d1d5e802e5923b25f7261bf3cb3e11ea9d4fb",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.0"
+    },
+    "dart_style": {
+      "dependency": "transitive",
+      "description": {
+        "name": "dart_style",
+        "sha256": "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.4"
+    },
+    "desktop_drop": {
+      "dependency": "direct main",
+      "description": {
+        "name": "desktop_drop",
+        "sha256": "d55a010fe46c8e8fcff4ea4b451a9ff84a162217bdb3b2a0aa1479776205e15d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.4.4"
+    },
+    "fake_async": {
+      "dependency": "transitive",
+      "description": {
+        "name": "fake_async",
+        "sha256": "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.1"
+    },
+    "ffi": {
+      "dependency": "transitive",
+      "description": {
+        "name": "ffi",
+        "sha256": "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.0"
+    },
+    "file": {
+      "dependency": "transitive",
+      "description": {
+        "name": "file",
+        "sha256": "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.1.4"
+    },
+    "file_picker": {
+      "dependency": "direct main",
+      "description": {
+        "name": "file_picker",
+        "sha256": "4e42aacde3b993c5947467ab640882c56947d9d27342a5b6f2895b23956954a6",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.1.1"
+    },
+    "fixnum": {
+      "dependency": "transitive",
+      "description": {
+        "name": "fixnum",
+        "sha256": "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.0"
+    },
+    "flutter": {
+      "dependency": "direct main",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "flutter_driver": {
+      "dependency": "transitive",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "flutter_lints": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "flutter_lints",
+        "sha256": "e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.1"
+    },
+    "flutter_localizations": {
+      "dependency": "direct main",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "flutter_plugin_android_lifecycle": {
+      "dependency": "transitive",
+      "description": {
+        "name": "flutter_plugin_android_lifecycle",
+        "sha256": "b068ffc46f82a55844acfa4fdbb61fad72fa2aef0905548419d97f0f95c456da",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.17"
+    },
+    "flutter_riverpod": {
+      "dependency": "direct main",
+      "description": {
+        "name": "flutter_riverpod",
+        "sha256": "4bce556b7ecbfea26109638d5237684538d4abc509d253e6c5c4c5733b360098",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.10"
+    },
+    "flutter_test": {
+      "dependency": "direct dev",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "flutter_web_plugins": {
+      "dependency": "transitive",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "freezed": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "freezed",
+        "sha256": "57247f692f35f068cae297549a46a9a097100685c6780fe67177503eea5ed4e5",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.7"
+    },
+    "freezed_annotation": {
+      "dependency": "direct main",
+      "description": {
+        "name": "freezed_annotation",
+        "sha256": "c3fd9336eb55a38cc1bbd79ab17573113a8deccd0ecbbf926cca3c62803b5c2d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.1"
+    },
+    "frontend_server_client": {
+      "dependency": "transitive",
+      "description": {
+        "name": "frontend_server_client",
+        "sha256": "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.2.0"
+    },
+    "fuchsia_remote_debug_protocol": {
+      "dependency": "transitive",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "glob": {
+      "dependency": "transitive",
+      "description": {
+        "name": "glob",
+        "sha256": "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "graphs": {
+      "dependency": "transitive",
+      "description": {
+        "name": "graphs",
+        "sha256": "aedc5a15e78fc65a6e23bcd927f24c64dd995062bcd1ca6eda65a3cff92a4d19",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.1"
+    },
+    "hotreloader": {
+      "dependency": "transitive",
+      "description": {
+        "name": "hotreloader",
+        "sha256": "94ee21a60ea2836500799f3af035dc3212b1562027f1e0031c14e087f0231449",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.1.0"
+    },
+    "http_multi_server": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http_multi_server",
+        "sha256": "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.2.1"
+    },
+    "http_parser": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http_parser",
+        "sha256": "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.2"
+    },
+    "integration_test": {
+      "dependency": "direct dev",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "intl": {
+      "dependency": "direct main",
+      "description": {
+        "name": "intl",
+        "sha256": "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.18.1"
+    },
+    "io": {
+      "dependency": "direct main",
+      "description": {
+        "name": "io",
+        "sha256": "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "js": {
+      "dependency": "transitive",
+      "description": {
+        "name": "js",
+        "sha256": "4186c61b32f99e60f011f7160e32c89a758ae9b1d0c6d28e2c02ef0382300e2b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.7.0"
+    },
+    "json_annotation": {
+      "dependency": "direct main",
+      "description": {
+        "name": "json_annotation",
+        "sha256": "b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.8.1"
+    },
+    "json_serializable": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "json_serializable",
+        "sha256": "aa1f5a8912615733e0fdc7a02af03308933c93235bdc8d50d0b0c8a8ccb0b969",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.7.1"
+    },
+    "lint": {
+      "dependency": "direct dev",
+      "description": {
+        "path": "lint",
+        "relative": true
+      },
+      "source": "path",
+      "version": "1.0.0"
+    },
+    "lints": {
+      "dependency": "transitive",
+      "description": {
+        "name": "lints",
+        "sha256": "cbf8d4b858bb0134ef3ef87841abdf8d63bfc255c266b7bf6b39daa1085c4290",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.0"
+    },
+    "local_notifier": {
+      "dependency": "direct main",
+      "description": {
+        "name": "local_notifier",
+        "sha256": "cc855aa6362c8840e3d3b35b1c3b058a3a8becdb2b03d5a9aa3f3a1e861f0a03",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.1.5"
+    },
+    "logging": {
+      "dependency": "direct main",
+      "description": {
+        "name": "logging",
+        "sha256": "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "matcher": {
+      "dependency": "transitive",
+      "description": {
+        "name": "matcher",
+        "sha256": "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.12.16"
+    },
+    "material_color_utilities": {
+      "dependency": "transitive",
+      "description": {
+        "name": "material_color_utilities",
+        "sha256": "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.5.0"
+    },
+    "menu_base": {
+      "dependency": "transitive",
+      "description": {
+        "name": "menu_base",
+        "sha256": "820368014a171bd1241030278e6c2617354f492f5c703d7b7d4570a6b8b84405",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.1.1"
+    },
+    "meta": {
+      "dependency": "transitive",
+      "description": {
+        "name": "meta",
+        "sha256": "a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.10.0"
+    },
+    "mime": {
+      "dependency": "transitive",
+      "description": {
+        "name": "mime",
+        "sha256": "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.5"
+    },
+    "package_config": {
+      "dependency": "transitive",
+      "description": {
+        "name": "package_config",
+        "sha256": "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.0"
+    },
+    "path": {
+      "dependency": "direct main",
+      "description": {
+        "name": "path",
+        "sha256": "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.8.3"
+    },
+    "path_parsing": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path_parsing",
+        "sha256": "e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.1"
+    },
+    "path_provider": {
+      "dependency": "direct main",
+      "description": {
+        "name": "path_provider",
+        "sha256": "b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "path_provider_android": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path_provider_android",
+        "sha256": "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.2"
+    },
+    "path_provider_foundation": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path_provider_foundation",
+        "sha256": "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.2"
+    },
+    "path_provider_linux": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path_provider_linux",
+        "sha256": "f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.1"
+    },
+    "path_provider_platform_interface": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path_provider_platform_interface",
+        "sha256": "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "path_provider_windows": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path_provider_windows",
+        "sha256": "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.1"
+    },
+    "petitparser": {
+      "dependency": "transitive",
+      "description": {
+        "name": "petitparser",
+        "sha256": "c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.0.2"
+    },
+    "platform": {
+      "dependency": "transitive",
+      "description": {
+        "name": "platform",
+        "sha256": "ae68c7bfcd7383af3629daafb32fb4e8681c7154428da4febcff06200585f102",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.2"
+    },
+    "plugin_platform_interface": {
+      "dependency": "transitive",
+      "description": {
+        "name": "plugin_platform_interface",
+        "sha256": "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.8"
+    },
+    "pointycastle": {
+      "dependency": "transitive",
+      "description": {
+        "name": "pointycastle",
+        "sha256": "43ac87de6e10afabc85c445745a7b799e04de84cebaa4fd7bf55a5e1e9604d29",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.7.4"
+    },
+    "pool": {
+      "dependency": "transitive",
+      "description": {
+        "name": "pool",
+        "sha256": "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.5.1"
+    },
+    "process": {
+      "dependency": "transitive",
+      "description": {
+        "name": "process",
+        "sha256": "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.2.4"
+    },
+    "pub_semver": {
+      "dependency": "transitive",
+      "description": {
+        "name": "pub_semver",
+        "sha256": "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.4"
+    },
+    "pubspec_parse": {
+      "dependency": "transitive",
+      "description": {
+        "name": "pubspec_parse",
+        "sha256": "c63b2876e58e194e4b0828fcb080ad0e06d051cb607a6be51a9e084f47cb9367",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.3"
+    },
+    "qrscanner_zxing": {
+      "dependency": "direct main",
+      "description": {
+        "path": "android/flutter_plugins/qrscanner_zxing",
+        "relative": true
+      },
+      "source": "path",
+      "version": "1.0.0"
+    },
+    "riverpod": {
+      "dependency": "transitive",
+      "description": {
+        "name": "riverpod",
+        "sha256": "548e2192eb7aeb826eb89387f814edb76594f3363e2c0bb99dd733d795ba3589",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.5.0"
+    },
+    "rxdart": {
+      "dependency": "transitive",
+      "description": {
+        "name": "rxdart",
+        "sha256": "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.27.7"
+    },
+    "screen_retriever": {
+      "dependency": "direct main",
+      "description": {
+        "name": "screen_retriever",
+        "sha256": "6ee02c8a1158e6dae7ca430da79436e3b1c9563c8cf02f524af997c201ac2b90",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.1.9"
+    },
+    "shared_preferences": {
+      "dependency": "direct main",
+      "description": {
+        "name": "shared_preferences",
+        "sha256": "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.2"
+    },
+    "shared_preferences_android": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_android",
+        "sha256": "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.1"
+    },
+    "shared_preferences_foundation": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_foundation",
+        "sha256": "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.5"
+    },
+    "shared_preferences_linux": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_linux",
+        "sha256": "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.2"
+    },
+    "shared_preferences_platform_interface": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_platform_interface",
+        "sha256": "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.2"
+    },
+    "shared_preferences_web": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_web",
+        "sha256": "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.2"
+    },
+    "shared_preferences_windows": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_windows",
+        "sha256": "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.2"
+    },
+    "shelf": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shelf",
+        "sha256": "ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.4.1"
+    },
+    "shelf_web_socket": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shelf_web_socket",
+        "sha256": "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "shortid": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shortid",
+        "sha256": "d0b40e3dbb50497dad107e19c54ca7de0d1a274eb9b4404991e443dadb9ebedb",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.1.2"
+    },
+    "sky_engine": {
+      "dependency": "transitive",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.99"
+    },
+    "source_gen": {
+      "dependency": "transitive",
+      "description": {
+        "name": "source_gen",
+        "sha256": "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.5.0"
+    },
+    "source_helper": {
+      "dependency": "transitive",
+      "description": {
+        "name": "source_helper",
+        "sha256": "6adebc0006c37dd63fe05bca0a929b99f06402fc95aa35bf36d67f5c06de01fd",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.4"
+    },
+    "source_span": {
+      "dependency": "transitive",
+      "description": {
+        "name": "source_span",
+        "sha256": "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.10.0"
+    },
+    "stack_trace": {
+      "dependency": "transitive",
+      "description": {
+        "name": "stack_trace",
+        "sha256": "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.11.1"
+    },
+    "state_notifier": {
+      "dependency": "transitive",
+      "description": {
+        "name": "state_notifier",
+        "sha256": "b8677376aa54f2d7c58280d5a007f9e8774f1968d1fb1c096adcb4792fba29bb",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.0"
+    },
+    "stream_channel": {
+      "dependency": "transitive",
+      "description": {
+        "name": "stream_channel",
+        "sha256": "ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "stream_transform": {
+      "dependency": "transitive",
+      "description": {
+        "name": "stream_transform",
+        "sha256": "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.0"
+    },
+    "string_scanner": {
+      "dependency": "transitive",
+      "description": {
+        "name": "string_scanner",
+        "sha256": "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "sync_http": {
+      "dependency": "transitive",
+      "description": {
+        "name": "sync_http",
+        "sha256": "7f0cd72eca000d2e026bcd6f990b81d0ca06022ef4e32fb257b30d3d1014a961",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.3.1"
+    },
+    "term_glyph": {
+      "dependency": "transitive",
+      "description": {
+        "name": "term_glyph",
+        "sha256": "a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.1"
+    },
+    "test_api": {
+      "dependency": "transitive",
+      "description": {
+        "name": "test_api",
+        "sha256": "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.1"
+    },
+    "test_res": {
+      "dependency": "direct dev",
+      "description": {
+        "path": "integration_test/test_res",
+        "relative": true
+      },
+      "source": "path",
+      "version": "0.0.0"
+    },
+    "timing": {
+      "dependency": "transitive",
+      "description": {
+        "name": "timing",
+        "sha256": "70a3b636575d4163c477e6de42f247a23b315ae20e86442bebe32d3cabf61c32",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.1"
+    },
+    "tray_manager": {
+      "dependency": "direct main",
+      "description": {
+        "name": "tray_manager",
+        "sha256": "4ab709d70a4374af172f8c39e018db33a4271265549c6fc9d269a65e5f4b0225",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.2.1"
+    },
+    "typed_data": {
+      "dependency": "transitive",
+      "description": {
+        "name": "typed_data",
+        "sha256": "facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.2"
+    },
+    "url_launcher": {
+      "dependency": "direct main",
+      "description": {
+        "name": "url_launcher",
+        "sha256": "c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.2.4"
+    },
+    "url_launcher_android": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_android",
+        "sha256": "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.2.2"
+    },
+    "url_launcher_ios": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_ios",
+        "sha256": "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.2.4"
+    },
+    "url_launcher_linux": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_linux",
+        "sha256": "ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.1"
+    },
+    "url_launcher_macos": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_macos",
+        "sha256": "b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.0"
+    },
+    "url_launcher_platform_interface": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_platform_interface",
+        "sha256": "a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.1"
+    },
+    "url_launcher_web": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_web",
+        "sha256": "fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.3"
+    },
+    "url_launcher_windows": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_windows",
+        "sha256": "ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.1"
+    },
+    "uuid": {
+      "dependency": "transitive",
+      "description": {
+        "name": "uuid",
+        "sha256": "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.7"
+    },
+    "vector_graphics": {
+      "dependency": "direct main",
+      "description": {
+        "name": "vector_graphics",
+        "sha256": "18f6690295af52d081f6808f2f7c69f0eed6d7e23a71539d75f4aeb8f0062172",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.9+2"
+    },
+    "vector_graphics_codec": {
+      "dependency": "transitive",
+      "description": {
+        "name": "vector_graphics_codec",
+        "sha256": "531d20465c10dfac7f5cd90b60bbe4dd9921f1ec4ca54c83ebb176dbacb7bb2d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.9+2"
+    },
+    "vector_graphics_compiler": {
+      "dependency": "direct main",
+      "description": {
+        "name": "vector_graphics_compiler",
+        "sha256": "03012b0a33775c5530576b70240308080e1d5050f0faf000118c20e6463bc0ad",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.9+2"
+    },
+    "vector_math": {
+      "dependency": "transitive",
+      "description": {
+        "name": "vector_math",
+        "sha256": "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.4"
+    },
+    "vm_service": {
+      "dependency": "transitive",
+      "description": {
+        "name": "vm_service",
+        "sha256": "c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "11.10.0"
+    },
+    "watcher": {
+      "dependency": "transitive",
+      "description": {
+        "name": "watcher",
+        "sha256": "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.0"
+    },
+    "web": {
+      "dependency": "transitive",
+      "description": {
+        "name": "web",
+        "sha256": "afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.3.0"
+    },
+    "web_socket_channel": {
+      "dependency": "transitive",
+      "description": {
+        "name": "web_socket_channel",
+        "sha256": "d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.0"
+    },
+    "webdriver": {
+      "dependency": "transitive",
+      "description": {
+        "name": "webdriver",
+        "sha256": "3c923e918918feeb90c4c9fdf1fe39220fa4c0e8e2c0fffaded174498ef86c49",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.2"
+    },
+    "win32": {
+      "dependency": "transitive",
+      "description": {
+        "name": "win32",
+        "sha256": "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "5.2.0"
+    },
+    "window_manager": {
+      "dependency": "direct main",
+      "description": {
+        "path": ".",
+        "ref": "2272d45bcf46d7e2b452a038906fbc85df3ce83d",
+        "resolved-ref": "2272d45bcf46d7e2b452a038906fbc85df3ce83d",
+        "url": "https://github.com/fdennis/window_manager.git"
+      },
+      "source": "git",
+      "version": "0.3.8"
+    },
+    "xdg_directories": {
+      "dependency": "transitive",
+      "description": {
+        "name": "xdg_directories",
+        "sha256": "faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "xml": {
+      "dependency": "transitive",
+      "description": {
+        "name": "xml",
+        "sha256": "b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.5.0"
+    },
+    "yaml": {
+      "dependency": "transitive",
+      "description": {
+        "name": "yaml",
+        "sha256": "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.2"
+    }
+  },
+  "sdks": {
+    "dart": ">=3.2.0 <4.0.0",
+    "flutter": ">=3.16.0"
+  }
+}
diff --git a/nixpkgs/pkgs/applications/misc/zathura/cb/default.nix b/nixpkgs/pkgs/applications/misc/zathura/cb/default.nix
new file mode 100644
index 000000000000..ea2c74fda370
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/cb/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchurl, meson, ninja, pkg-config, zathura_core
+, girara, gettext, libarchive }:
+
+stdenv.mkDerivation rec {
+  pname = "zathura-cb";
+  version = "0.1.10";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    sha256 = "1j5v32f9ki35v1jc7a067anhlgqplzrp4fqvznlixfhcm0bwmc49";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config gettext ];
+  buildInputs = [ libarchive zathura_core girara ];
+
+  PKG_CONFIG_ZATHURA_PLUGINDIR = "lib/zathura";
+
+  meta = with lib; {
+    homepage = "https://pwmt.org/projects/zathura-cb/";
+    description = "A zathura CB plugin";
+    longDescription = ''
+      The zathura-cb plugin adds comic book support to zathura.
+      '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ jlesquembre ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zathura/core/default.nix b/nixpkgs/pkgs/applications/misc/zathura/core/default.nix
new file mode 100644
index 000000000000..9e3f5df6a793
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/core/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, meson, ninja, wrapGAppsHook, pkg-config
+, appstream-glib, json-glib, desktop-file-utils, python3
+, gtk, girara, gettext, libxml2, check
+, sqlite, glib, texlive, libintl, libseccomp
+, file, librsvg
+, gtk-mac-integration
+}:
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "zathura";
+  version = "0.5.4";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/zathura/download/zathura-${finalAttrs.version}.tar.xz";
+    sha256 = "0ckgamf98sydq543arp865jg1afwzhpzcsbhv6zrch2dm5x7y0x3";
+  };
+
+  outputs = [ "bin" "man" "dev" "out" ];
+
+  # Flag list:
+  # https://github.com/pwmt/zathura/blob/master/meson_options.txt
+  mesonFlags = [
+    "-Dsqlite=enabled"
+    "-Dmanpages=enabled"
+    "-Dconvert-icon=enabled"
+    "-Dsynctex=enabled"
+    "-Dtests=disabled"
+    # Make sure tests are enabled for doCheck
+    # (lib.mesonEnable "tests" finalAttrs.finalPackage.doCheck)
+    (lib.mesonEnable "seccomp" stdenv.hostPlatform.isLinux)
+  ];
+
+  nativeBuildInputs = [
+    meson ninja pkg-config desktop-file-utils python3.pythonOnBuildForHost.pkgs.sphinx
+    gettext wrapGAppsHook libxml2 appstream-glib
+  ];
+
+  buildInputs = [
+    gtk girara libintl sqlite glib file librsvg check json-glib
+    texlive.bin.core
+  ] ++ lib.optional stdenv.isLinux libseccomp
+    ++ lib.optional stdenv.isDarwin gtk-mac-integration;
+
+  doCheck = !stdenv.isDarwin;
+
+  meta = with lib; {
+    homepage = "https://git.pwmt.org/pwmt/zathura";
+    description = "A core component for zathura PDF viewer";
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ globin ];
+  };
+})
diff --git a/nixpkgs/pkgs/applications/misc/zathura/default.nix b/nixpkgs/pkgs/applications/misc/zathura/default.nix
new file mode 100644
index 000000000000..67fe3032d05c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/default.nix
@@ -0,0 +1,33 @@
+{ config, pkgs
+# zathura_pdf_mupdf fails to load _opj_create_decompress at runtime on Darwin (https://github.com/NixOS/nixpkgs/pull/61295#issue-277982980)
+, useMupdf ? config.zathura.useMupdf or (!pkgs.stdenv.isDarwin) }:
+
+let
+  callPackage = pkgs.newScope self;
+
+  self = rec {
+    gtk = pkgs.gtk3;
+
+    zathura_core = callPackage ./core { };
+
+    zathura_pdf_poppler = callPackage ./pdf-poppler { };
+
+    zathura_pdf_mupdf = callPackage ./pdf-mupdf { };
+
+    zathura_djvu = callPackage ./djvu { };
+
+    zathura_ps = callPackage ./ps { };
+
+    zathura_cb = callPackage ./cb { };
+
+    zathuraWrapper = callPackage ./wrapper.nix {
+      plugins = [
+        zathura_djvu
+        zathura_ps
+        zathura_cb
+        (if useMupdf then zathura_pdf_mupdf else zathura_pdf_poppler)
+      ];
+    };
+  };
+
+in self
diff --git a/nixpkgs/pkgs/applications/misc/zathura/djvu/default.nix b/nixpkgs/pkgs/applications/misc/zathura/djvu/default.nix
new file mode 100644
index 000000000000..f0fe09486324
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/djvu/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, meson, ninja, pkg-config, gtk, zathura_core, girara, djvulibre, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "zathura-djvu";
+  version = "0.2.9";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    sha256 = "0062n236414db7q7pnn3ccg5111ghxj3407pn9ri08skxskgirln";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+  buildInputs = [ djvulibre gettext zathura_core gtk girara ];
+
+  PKG_CONFIG_ZATHURA_PLUGINDIR = "lib/zathura";
+
+  meta = with lib; {
+    homepage = "https://pwmt.org/projects/zathura-djvu/";
+    description = "A zathura DJVU plugin";
+    longDescription = ''
+      The zathura-djvu plugin adds DjVu support to zathura by using the
+      djvulibre library.
+    '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/zathura/pdf-mupdf/default.nix b/nixpkgs/pkgs/applications/misc/zathura/pdf-mupdf/default.nix
new file mode 100644
index 000000000000..f6eb5cfd45e1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/pdf-mupdf/default.nix
@@ -0,0 +1,63 @@
+{ stdenv, lib, meson, ninja, fetchurl, cairo
+, girara
+, gtk-mac-integration
+, gumbo
+, jbig2dec
+, libjpeg
+, mupdf
+, openjpeg
+, pkg-config
+, zathura_core
+, tesseract
+, leptonica
+, mujs
+, gitUpdater
+}:
+
+stdenv.mkDerivation rec {
+  version = "0.4.1";
+  pname = "zathura-pdf-mupdf";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    hash = "sha256-+YKgHWUj+iVmk4EYTAamJe2/15YcvbBxHcz9ucQCrC8=";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config ];
+
+  buildInputs = [
+    cairo
+    girara
+    gumbo
+    jbig2dec
+    libjpeg
+    mupdf
+    openjpeg
+    zathura_core
+    tesseract
+    leptonica
+    mujs
+  ] ++ lib.optional stdenv.isDarwin gtk-mac-integration;
+
+  PKG_CONFIG_ZATHURA_PLUGINDIR= "lib/zathura";
+
+  postPatch = ''
+    sed -i -e '/^mupdfthird =/d' -e 's/, mupdfthird//g' meson.build
+  '';
+
+  passthru.updateScript = gitUpdater {
+    url = "https://git.pwmt.org/pwmt/zathura-pdf-mupdf.git";
+  };
+
+  meta = with lib; {
+    homepage = "https://pwmt.org/projects/zathura-pdf-mupdf/";
+    description = "A zathura PDF plugin (mupdf)";
+    longDescription = ''
+      The zathura-pdf-mupdf plugin adds PDF support to zathura by
+      using the mupdf rendering library.
+    '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zathura/pdf-poppler/default.nix b/nixpkgs/pkgs/applications/misc/zathura/pdf-poppler/default.nix
new file mode 100644
index 000000000000..5246705bbd8b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/pdf-poppler/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchurl, meson, ninja, pkg-config, zathura_core, girara, poppler }:
+
+stdenv.mkDerivation rec {
+  pname = "zathura-pdf-poppler";
+  version = "0.3.2";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    sha256 = "049h8m9swxni7ar6fsbm0hb3fg4ffmjc3m6vyg78ilfi3kayxavi";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config zathura_core ];
+  buildInputs = [ poppler girara ];
+
+  PKG_CONFIG_ZATHURA_PLUGINDIR = "lib/zathura";
+
+  meta = with lib; {
+    homepage = "https://pwmt.org/projects/zathura-pdf-poppler/";
+    description = "A zathura PDF plugin (poppler)";
+    longDescription = ''
+      The zathura-pdf-poppler plugin adds PDF support to zathura by
+      using the poppler rendering library.
+    '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zathura/ps/default.nix b/nixpkgs/pkgs/applications/misc/zathura/ps/default.nix
new file mode 100644
index 000000000000..180001b52aeb
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/ps/default.nix
@@ -0,0 +1,29 @@
+{ stdenv, lib, fetchurl, meson, ninja, pkg-config, zathura_core, girara, libspectre, gettext }:
+
+stdenv.mkDerivation rec {
+  pname = "zathura-ps";
+  version = "0.2.7";
+
+  src = fetchurl {
+    url = "https://pwmt.org/projects/${pname}/download/${pname}-${version}.tar.xz";
+    sha256 = "0ilf63wxn1yzis9m3qs8mxbk316yxdzwxrrv86wpiygm9hhgk5sq";
+  };
+
+  nativeBuildInputs = [ meson ninja pkg-config gettext ];
+  buildInputs = [ libspectre zathura_core girara ];
+
+  PKG_CONFIG_ZATHURA_PLUGINDIR = "lib/zathura";
+
+  meta = with lib; {
+    homepage = "https://pwmt.org/projects/zathura-ps/";
+    description = "A zathura PS plugin";
+    longDescription = ''
+      The zathura-ps plugin adds PS support to zathura by using the
+      libspectre library.
+      '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/misc/zathura/wrapper.nix b/nixpkgs/pkgs/applications/misc/zathura/wrapper.nix
new file mode 100644
index 000000000000..60ff0bd68854
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zathura/wrapper.nix
@@ -0,0 +1,38 @@
+{ symlinkJoin, lib, makeWrapper, zathura_core, file, plugins ? [] }:
+symlinkJoin {
+  name = "zathura-with-plugins-${zathura_core.version}";
+
+  paths = with zathura_core; [ man dev out ] ++ plugins;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  postBuild = let
+    fishCompletion = "share/fish/vendor_completions.d/zathura.fish";
+  in ''
+    makeWrapper ${zathura_core.bin}/bin/zathura $out/bin/zathura \
+      --prefix PATH ":" "${lib.makeBinPath [ file ]}" \
+      --prefix ZATHURA_PLUGINS_PATH : "$out/lib/zathura"
+
+    # zathura fish completion references the zathura_core derivation to
+    # check for supported plugins which live in the wrapper derivation,
+    # so we need to fix the path to reference $out instead.
+    rm "$out/${fishCompletion}"
+    substitute "${zathura_core.out}/${fishCompletion}" "$out/${fishCompletion}" \
+      --replace "${zathura_core.out}" "$out"
+  '';
+
+  meta = with lib; {
+    homepage = "https://git.pwmt.org/pwmt/zathura/";
+    description = "A highly customizable and functional PDF viewer";
+    longDescription = ''
+      Zathura is a highly customizable and functional PDF viewer based on the
+      poppler rendering library and the GTK toolkit. The idea behind zathura
+      is an application that provides a minimalistic and space saving interface
+      as well as an easy usage that mainly focuses on keyboard interaction.
+    '';
+    license = licenses.zlib;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ smironov globin TethysSvensson ];
+    mainProgram = "zathura";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zettlr/default.nix b/nixpkgs/pkgs/applications/misc/zettlr/default.nix
new file mode 100644
index 000000000000..75e310cdffec
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zettlr/default.nix
@@ -0,0 +1,8 @@
+{ callPackage, texliveMedium }:
+
+builtins.mapAttrs (pname: attrs: callPackage ./generic.nix (attrs // { inherit pname; inherit texliveMedium; })) {
+  zettlr = {
+    version = "3.0.2";
+    hash = "sha256-xwBq+kLmTth15uLiYWJOhi/YSPZVJNO6JTrKFojSDXA=";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zettlr/generic.nix b/nixpkgs/pkgs/applications/misc/zettlr/generic.nix
new file mode 100644
index 000000000000..0b26d57e7c4e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zettlr/generic.nix
@@ -0,0 +1,43 @@
+{ pname
+, version
+, hash
+, appimageTools
+, lib
+, fetchurl
+, texliveMedium
+, pandoc
+}:
+
+# Based on https://gist.github.com/msteen/96cb7df66a359b827497c5269ccbbf94 and joplin-desktop nixpkgs.
+let
+  name = "${pname}-${version}";
+  src = fetchurl {
+    url = "https://github.com/Zettlr/Zettlr/releases/download/v${version}/Zettlr-${version}-x86_64.appimage";
+    inherit hash;
+  };
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+in
+appimageTools.wrapType2 rec {
+  inherit name src;
+
+  multiArch = false; # no 32bit needed
+  extraPkgs = pkgs: (appimageTools.defaultFhsEnvArgs.multiPkgs pkgs) ++ [ texliveMedium pandoc ];
+  extraInstallCommands = ''
+    mv $out/bin/{${name},${pname}}
+    install -m 444 -D ${appimageContents}/Zettlr.desktop $out/share/applications/Zettlr.desktop
+    install -m 444 -D ${appimageContents}/Zettlr.png $out/share/icons/hicolor/512x512/apps/Zettlr.png
+    substituteInPlace $out/share/applications/Zettlr.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "A markdown editor for writing academic texts and taking notes";
+    homepage = "https://www.zettlr.com";
+    platforms = [ "x86_64-linux" ];
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ tfmoraes ];
+    mainProgram = "zettlr";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zine/default.nix b/nixpkgs/pkgs/applications/misc/zine/default.nix
new file mode 100644
index 000000000000..63675fa69abd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zine/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, fetchCrate
+, pkg-config
+, openssl
+, stdenv
+, darwin
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zine";
+  version = "0.16.0";
+
+  src = fetchCrate {
+    inherit pname version;
+    hash = "sha256-pUoMMgZQ+oDs9Yhc1rQuy9cUWiR800DlIe8wxQjnIis=";
+  };
+
+  cargoHash = "sha256-dXq8O0jVpr0xxvLTrsLJbiyyOMXXtEz7OMINqDEfG4U=";
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    openssl
+  ] ++ lib.optionals stdenv.isDarwin [
+    darwin.apple_sdk.frameworks.CoreServices
+  ];
+
+  meta = with lib; {
+    description = "A simple and opinionated tool to build your own magazine";
+    homepage = "https://github.com/zineland/zine";
+    changelog = "https://github.com/zineland/zine/releases/tag/v${version}";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dit7ya figsoda ];
+    mainProgram = "zine";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zk-shell/default.nix b/nixpkgs/pkgs/applications/misc/zk-shell/default.nix
new file mode 100644
index 000000000000..9f6816f00dda
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zk-shell/default.nix
@@ -0,0 +1,33 @@
+{ lib, fetchFromGitHub, python3Packages }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "zk-shell";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "rgs1";
+    repo = "zk_shell";
+    rev = "v${version}";
+    sha256 = "0zisvvlclsf4sdh7dpqcl1149xbxw6pi1aqcwjbqblgf8m4nm0c7";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    ansi
+    kazoo
+    nose
+    six
+    tabulate
+    twitter
+  ];
+
+  # requires a running zookeeper, don't know how to fix that for the moment
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A powerful & scriptable shell for Apache ZooKeeper";
+    homepage = "https://github.com/rgs1/zk_shell";
+    license = licenses.asl20;
+    maintainers = [ maintainers.mahe ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zktree/default.nix b/nixpkgs/pkgs/applications/misc/zktree/default.nix
new file mode 100644
index 000000000000..c9d4786f05f5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zktree/default.nix
@@ -0,0 +1,26 @@
+{ lib
+, fetchFromGitHub
+, rustPlatform
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "zktree";
+  version = "0.0.1";
+
+  src = fetchFromGitHub {
+    owner = "alirezameskin";
+    repo = "zktree";
+    rev = version;
+    sha256 = "11w86k1w5zryiq6bqr98pjhffd3l76377yz53qx0n76vc5374fk9";
+  };
+
+  cargoSha256 = "18v7agm39acnblc703278cn8py5971hm8p5kxmznpw119fjp36s5";
+
+  meta = with lib; {
+    description = "A small tool to display Znodes in Zookeeper in tree structure.";
+    homepage = "https://github.com/alirezameskin/zktree";
+    license = licenses.unlicense;
+    maintainers = with lib.maintainers; [ alirezameskin ];
+    mainProgram = "zktree";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/misc/zscroll/default.nix b/nixpkgs/pkgs/applications/misc/zscroll/default.nix
new file mode 100644
index 000000000000..bc53ade06a78
--- /dev/null
+++ b/nixpkgs/pkgs/applications/misc/zscroll/default.nix
@@ -0,0 +1,27 @@
+{ lib, python3, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "zscroll";
+  version = "2.0.1";
+
+  # don't prefix with python version
+  namePrefix = "";
+
+  src = fetchFromGitHub {
+    owner = "noctuid";
+    repo = "zscroll";
+    rev = version;
+    sha256 = "sha256-gEluWzCbztO4N1wdFab+2xH7l9w5HqZVzp2LrdjHSRM=";
+  };
+
+  doCheck = false;
+
+  propagatedBuildInputs = [ python3 ];
+
+  meta = with lib; {
+    description = "A text scroller for use with panels and shells";
+    homepage = "https://github.com/noctuid/zscroll";
+    license = licenses.gpl3Plus;
+    platforms = platforms.all;
+  };
+}