about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--maintainers/maintainer-list.nix6
-rw-r--r--nixos/doc/manual/release-notes/rl-2311.section.md2
-rw-r--r--nixos/modules/programs/git.nix9
-rw-r--r--nixos/tests/lxd/ui.nix33
-rw-r--r--pkgs/applications/audio/ekho/default.nix64
-rw-r--r--pkgs/applications/graphics/hydrus/default.nix4
-rw-r--r--pkgs/applications/misc/albert/default.nix4
-rw-r--r--pkgs/applications/misc/calibre/default.nix4
-rw-r--r--pkgs/applications/networking/asn/default.nix17
-rw-r--r--pkgs/applications/radio/limesuite/default.nix4
-rw-r--r--pkgs/applications/version-management/sapling/default.nix6
-rw-r--r--pkgs/applications/virtualization/singularity/packages.nix4
-rw-r--r--pkgs/build-support/build-graalvm-native-image/default.nix1
-rw-r--r--pkgs/by-name/ap/apt/package.nix4
-rw-r--r--pkgs/by-name/be/beekeeper-studio/package.nix52
-rw-r--r--pkgs/by-name/cy/cyanrip/package.nix (renamed from pkgs/applications/audio/cyanrip/default.nix)27
-rw-r--r--pkgs/by-name/le/lefthook/package.nix (renamed from pkgs/applications/version-management/lefthook/default.nix)4
-rw-r--r--pkgs/by-name/li/libpkgconf/package.nix (renamed from pkgs/development/tools/misc/pkgconf/default.nix)4
-rw-r--r--pkgs/by-name/pr/presenterm/package.nix9
-rw-r--r--pkgs/by-name/zx/zxtune/disable_updates.patch20
-rw-r--r--pkgs/by-name/zx/zxtune/package.nix148
-rw-r--r--pkgs/desktops/gnome/extensions/extensionOverridesPatches/pano_at_elhan.io.patch31
-rw-r--r--pkgs/development/compilers/hare/default.nix101
-rw-r--r--pkgs/development/compilers/hare/hare/config-template.mk44
-rw-r--r--pkgs/development/compilers/hare/hare/default.nix98
-rw-r--r--pkgs/development/compilers/hare/harec/default.nix45
-rw-r--r--pkgs/development/compilers/hare/setup-hook.sh (renamed from pkgs/development/compilers/hare/hare/setup-hook.sh)0
-rw-r--r--pkgs/development/compilers/harec/default.nix63
-rw-r--r--pkgs/development/python-modules/taskw/default.nix6
-rw-r--r--pkgs/development/python-modules/taskw/support-relative-path-in-taskrc.patch79
-rw-r--r--pkgs/development/ruby-modules/gem-config/default.nix40
-rw-r--r--pkgs/development/ruby-modules/with-packages/Gemfile2
-rw-r--r--pkgs/development/tools/build-managers/conan/default.nix9
-rw-r--r--pkgs/development/tools/database/beekeeper-studio/default.nix45
-rw-r--r--pkgs/development/tools/golangci-lint-langserver/default.nix3
-rw-r--r--pkgs/games/atlauncher/default.nix1
-rw-r--r--pkgs/games/classicube/default.nix1
-rw-r--r--pkgs/games/gamepad-tool/default.nix1
-rw-r--r--pkgs/games/ivan/default.nix1
-rw-r--r--pkgs/games/mudlet/default.nix1
-rw-r--r--pkgs/games/rili/default.nix1
-rw-r--r--pkgs/games/steam-tui/default.nix1
-rw-r--r--pkgs/games/stepmania/default.nix1
-rw-r--r--pkgs/games/teetertorture/default.nix1
-rw-r--r--pkgs/games/xbill/default.nix1
-rw-r--r--pkgs/games/zaz/default.nix1
-rw-r--r--pkgs/games/zoom/default.nix1
-rw-r--r--pkgs/misc/ananicy-cpp/default.nix1
-rw-r--r--pkgs/misc/ananicy/default.nix1
-rw-r--r--pkgs/misc/apulse/default.nix1
-rw-r--r--pkgs/misc/autoadb/default.nix1
-rw-r--r--pkgs/misc/autotiling-rs/default.nix1
-rw-r--r--pkgs/misc/autotiling/default.nix1
-rw-r--r--pkgs/misc/doge/default.nix1
-rw-r--r--pkgs/misc/fastly/default.nix1
-rw-r--r--pkgs/misc/frescobaldi/default.nix1
-rw-r--r--pkgs/misc/lightspark/default.nix1
-rw-r--r--pkgs/misc/long-shebang/default.nix1
-rw-r--r--pkgs/misc/lssecret/default.nix1
-rw-r--r--pkgs/misc/moonfire-nvr/default.nix1
-rw-r--r--pkgs/misc/mxt-app/default.nix1
-rw-r--r--pkgs/misc/nflz/default.nix1
-rw-r--r--pkgs/misc/opcua-client-gui/default.nix1
-rw-r--r--pkgs/misc/plasma-hud/default.nix1
-rw-r--r--pkgs/misc/present/default.nix1
-rw-r--r--pkgs/misc/ptouch-print/default.nix1
-rw-r--r--pkgs/misc/pylode/default.nix1
-rw-r--r--pkgs/misc/rich-cli/default.nix1
-rw-r--r--pkgs/misc/rivalcfg/default.nix1
-rw-r--r--pkgs/misc/rkdeveloptool-pine64/default.nix1
-rw-r--r--pkgs/misc/rkdeveloptool/default.nix1
-rw-r--r--pkgs/misc/sailsd/default.nix1
-rw-r--r--pkgs/misc/scrcpy/default.nix1
-rw-r--r--pkgs/misc/solfege/default.nix1
-rw-r--r--pkgs/misc/t-rec/default.nix1
-rw-r--r--pkgs/misc/tpm2-pkcs11/default.nix1
-rw-r--r--pkgs/misc/uq/default.nix1
-rw-r--r--pkgs/misc/urbit/default.nix1
-rw-r--r--pkgs/misc/wiki-tui/default.nix1
-rw-r--r--pkgs/misc/zeyple/default.nix1
-rw-r--r--pkgs/servers/alice-lg/default.nix1
-rw-r--r--pkgs/servers/allmark/default.nix1
-rw-r--r--pkgs/servers/antennas/default.nix1
-rw-r--r--pkgs/servers/asouldocs/default.nix1
-rw-r--r--pkgs/servers/audiobookshelf/default.nix1
-rw-r--r--pkgs/servers/authelia/default.nix1
-rw-r--r--pkgs/servers/baserow/default.nix1
-rw-r--r--pkgs/servers/binserve/default.nix1
-rw-r--r--pkgs/servers/birdwatcher/default.nix1
-rw-r--r--pkgs/servers/confluencepot/default.nix1
-rw-r--r--pkgs/servers/db-rest/default.nix1
-rw-r--r--pkgs/servers/eris-go/default.nix1
-rw-r--r--pkgs/servers/gnss-share/default.nix1
-rw-r--r--pkgs/servers/go-autoconfig/default.nix1
-rw-r--r--pkgs/servers/hiraeth/default.nix1
-rw-r--r--pkgs/servers/imaginary/default.nix1
-rw-r--r--pkgs/servers/jellyseerr/default.nix1
-rw-r--r--pkgs/servers/jitsi-excalidraw/default.nix1
-rw-r--r--pkgs/servers/komga/default.nix1
-rw-r--r--pkgs/servers/lenpaste/default.nix1
-rw-r--r--pkgs/servers/mautrix-discord/default.nix1
-rw-r--r--pkgs/servers/mautrix-googlechat/default.nix1
-rw-r--r--pkgs/servers/mautrix-telegram/default.nix1
-rw-r--r--pkgs/servers/mbusd/default.nix1
-rw-r--r--pkgs/servers/memos/default.nix1
-rw-r--r--pkgs/servers/microbin/default.nix1
-rw-r--r--pkgs/servers/miniflux/default.nix1
-rw-r--r--pkgs/servers/minio/default.nix1
-rw-r--r--pkgs/servers/mirrorbits/default.nix1
-rw-r--r--pkgs/servers/mjolnir/default.nix1
-rw-r--r--pkgs/servers/monitoring/nagios/default.nix4
-rw-r--r--pkgs/servers/moonraker/default.nix1
-rw-r--r--pkgs/servers/mpd/default.nix1
-rw-r--r--pkgs/servers/mtprotoproxy/default.nix1
-rw-r--r--pkgs/servers/mx-puppet-discord/default.nix1
-rw-r--r--pkgs/servers/mycorrhiza/default.nix1
-rw-r--r--pkgs/servers/nats-streaming-server/default.nix1
-rw-r--r--pkgs/servers/networkaudiod/default.nix1
-rw-r--r--pkgs/servers/nfs-ganesha/default.nix1
-rw-r--r--pkgs/servers/nominatim/default.nix1
-rw-r--r--pkgs/servers/nzbhydra2/default.nix1
-rw-r--r--pkgs/servers/oauth2-proxy/default.nix1
-rw-r--r--pkgs/servers/ombi/default.nix1
-rw-r--r--pkgs/servers/owncast/default.nix1
-rw-r--r--pkgs/servers/oxigraph/default.nix1
-rw-r--r--pkgs/servers/p910nd/default.nix1
-rw-r--r--pkgs/servers/persistent-evdev/default.nix1
-rw-r--r--pkgs/servers/photoprism/default.nix1
-rw-r--r--pkgs/servers/pinnwand/default.nix1
-rw-r--r--pkgs/servers/pocketbase/default.nix1
-rw-r--r--pkgs/servers/polaris/default.nix1
-rw-r--r--pkgs/servers/pr-tracker/default.nix1
-rw-r--r--pkgs/servers/psitransfer/default.nix1
-rw-r--r--pkgs/servers/redpanda/default.nix1
-rw-r--r--pkgs/servers/reproxy/default.nix1
-rw-r--r--pkgs/servers/resgate/default.nix1
-rw-r--r--pkgs/servers/rinetd/default.nix1
-rw-r--r--pkgs/servers/rippled/default.nix1
-rw-r--r--pkgs/servers/roon-bridge/default.nix1
-rw-r--r--pkgs/servers/roon-server/default.nix1
-rw-r--r--pkgs/servers/routinator/default.nix1
-rw-r--r--pkgs/servers/rpiplay/default.nix1
-rw-r--r--pkgs/servers/rustypaste/default.nix1
-rw-r--r--pkgs/servers/sabnzbd/default.nix1
-rw-r--r--pkgs/servers/scaphandre/default.nix1
-rw-r--r--pkgs/servers/search/meilisearch/Cargo.lock1536
-rw-r--r--pkgs/servers/search/meilisearch/default.nix4
-rw-r--r--pkgs/servers/ser2net/default.nix1
-rw-r--r--pkgs/servers/sftpgo/default.nix1
-rw-r--r--pkgs/servers/shairplay/default.nix1
-rw-r--r--pkgs/servers/simplehttp2server/default.nix1
-rw-r--r--pkgs/servers/skydns/default.nix1
-rw-r--r--pkgs/servers/spicedb/default.nix1
-rw-r--r--pkgs/servers/sqlpage/default.nix1
-rw-r--r--pkgs/servers/sshportal/default.nix1
-rw-r--r--pkgs/servers/static-web-server/default.nix1
-rw-r--r--pkgs/servers/stone/default.nix1
-rw-r--r--pkgs/servers/swego/default.nix1
-rw-r--r--pkgs/servers/syncstorage-rs/default.nix1
-rw-r--r--pkgs/servers/tarssh/default.nix1
-rw-r--r--pkgs/servers/telegram-bot-api/default.nix1
-rw-r--r--pkgs/servers/tidb/default.nix1
-rw-r--r--pkgs/servers/tmate-ssh-server/default.nix1
-rw-r--r--pkgs/servers/traefik/default.nix1
-rw-r--r--pkgs/servers/ttyd/default.nix1
-rw-r--r--pkgs/servers/tvheadend/default.nix1
-rw-r--r--pkgs/servers/u9fs/default.nix1
-rw-r--r--pkgs/servers/ucarp/default.nix1
-rw-r--r--pkgs/servers/ums/default.nix1
-rw-r--r--pkgs/servers/unpackerr/default.nix1
-rw-r--r--pkgs/servers/unpfs/default.nix1
-rw-r--r--pkgs/servers/uwsgi/default.nix1
-rw-r--r--pkgs/servers/uxplay/default.nix1
-rw-r--r--pkgs/servers/vouch-proxy/default.nix1
-rw-r--r--pkgs/servers/web-apps/changedetection-io/default.nix16
-rw-r--r--pkgs/servers/webdav-server-rs/default.nix1
-rw-r--r--pkgs/servers/webdav/default.nix1
-rw-r--r--pkgs/servers/webmetro/default.nix1
-rw-r--r--pkgs/servers/wesher/default.nix1
-rw-r--r--pkgs/servers/wishlist/default.nix1
-rw-r--r--pkgs/servers/wsdd/default.nix1
-rw-r--r--pkgs/servers/xandikos/default.nix1
-rw-r--r--pkgs/servers/xteve/default.nix1
-rw-r--r--pkgs/servers/zigbee2mqtt/default.nix1
-rw-r--r--pkgs/tools/X11/alttab/default.nix1
-rw-r--r--pkgs/tools/X11/autocutsel/default.nix1
-rw-r--r--pkgs/tools/X11/bgs/default.nix1
-rw-r--r--pkgs/tools/X11/ckbcomp/default.nix1
-rw-r--r--pkgs/tools/X11/devour/default.nix1
-rw-r--r--pkgs/tools/X11/dex/default.nix1
-rw-r--r--pkgs/tools/X11/dispad/default.nix1
-rw-r--r--pkgs/tools/X11/ffcast/default.nix1
-rw-r--r--pkgs/tools/X11/find-cursor/default.nix1
-rw-r--r--pkgs/tools/X11/gobble/default.nix1
-rw-r--r--pkgs/tools/X11/grobi/default.nix1
-rw-r--r--pkgs/tools/X11/icon-slicer/default.nix1
-rw-r--r--pkgs/tools/X11/imwheel/default.nix1
-rw-r--r--pkgs/tools/X11/inputplug/default.nix1
-rw-r--r--pkgs/tools/X11/kdocker/default.nix1
-rw-r--r--pkgs/tools/X11/keynav/default.nix1
-rw-r--r--pkgs/tools/X11/ksuperkey/default.nix1
-rw-r--r--pkgs/tools/X11/nitrogen/default.nix1
-rw-r--r--pkgs/tools/X11/obconf/default.nix1
-rw-r--r--pkgs/tools/X11/paperview/default.nix1
-rw-r--r--pkgs/tools/X11/pmenu/default.nix1
-rw-r--r--pkgs/tools/X11/ratmen/default.nix1
-rw-r--r--pkgs/tools/X11/run-scaled/default.nix1
-rw-r--r--pkgs/tools/X11/sbs/default.nix1
-rw-r--r--pkgs/tools/X11/setroot/default.nix1
-rw-r--r--pkgs/tools/X11/smart-wallpaper/default.nix1
-rw-r--r--pkgs/tools/X11/srandrd/default.nix1
-rw-r--r--pkgs/tools/X11/sselp/default.nix1
-rw-r--r--pkgs/tools/X11/sx/default.nix1
-rw-r--r--pkgs/tools/X11/vdpauinfo/default.nix1
-rw-r--r--pkgs/tools/X11/wayv/default.nix1
-rw-r--r--pkgs/tools/X11/wmctrl/default.nix1
-rw-r--r--pkgs/tools/X11/x11vnc/default.nix1
-rw-r--r--pkgs/tools/X11/x2vnc/default.nix1
-rw-r--r--pkgs/tools/X11/x2x/default.nix1
-rw-r--r--pkgs/tools/X11/xannotate/default.nix1
-rw-r--r--pkgs/tools/X11/xbanish/default.nix1
-rw-r--r--pkgs/tools/X11/xbindkeys-config/default.nix1
-rw-r--r--pkgs/tools/X11/xborders/default.nix1
-rw-r--r--pkgs/tools/X11/xbrightness/default.nix1
-rw-r--r--pkgs/tools/X11/xcalib/default.nix1
-rw-r--r--pkgs/tools/X11/xcape/default.nix1
-rw-r--r--pkgs/tools/X11/xchainkeys/default.nix1
-rw-r--r--pkgs/tools/X11/xcwd/default.nix1
-rw-r--r--pkgs/tools/X11/xdotool/default.nix1
-rw-r--r--pkgs/tools/X11/xgeometry-select/default.nix1
-rw-r--r--pkgs/tools/X11/xinput_calibrator/default.nix1
-rw-r--r--pkgs/tools/X11/xkb-switch-i3/default.nix1
-rw-r--r--pkgs/tools/X11/xkb-switch/default.nix1
-rw-r--r--pkgs/tools/X11/xkbset/default.nix1
-rw-r--r--pkgs/tools/X11/xkbvalidate/default.nix1
-rw-r--r--pkgs/tools/X11/xlayoutdisplay/default.nix1
-rw-r--r--pkgs/tools/X11/xlogo/default.nix1
-rw-r--r--pkgs/tools/X11/xmcp/default.nix1
-rw-r--r--pkgs/tools/X11/xmousepasteblock/default.nix1
-rw-r--r--pkgs/tools/X11/xnotify/default.nix1
-rw-r--r--pkgs/tools/X11/xob/default.nix1
-rw-r--r--pkgs/tools/X11/xplugd/default.nix1
-rw-r--r--pkgs/tools/X11/xpointerbarrier/default.nix1
-rw-r--r--pkgs/tools/X11/xprintidle-ng/default.nix1
-rw-r--r--pkgs/tools/X11/xprintidle/default.nix1
-rw-r--r--pkgs/tools/X11/xprompt/default.nix1
-rw-r--r--pkgs/tools/X11/xrectsel/default.nix1
-rw-r--r--pkgs/tools/X11/xrestop/default.nix1
-rw-r--r--pkgs/tools/X11/xtrace/default.nix1
-rw-r--r--pkgs/tools/X11/xtruss/default.nix1
-rw-r--r--pkgs/tools/X11/xvkbd/default.nix1
-rw-r--r--pkgs/tools/X11/xwallpaper/default.nix1
-rw-r--r--pkgs/tools/X11/xwinmosaic/default.nix1
-rw-r--r--pkgs/tools/X11/xwinwrap/default.nix1
-rw-r--r--pkgs/tools/X11/xzoom/default.nix1
-rw-r--r--pkgs/tools/admin/lxd/package.json104
-rw-r--r--pkgs/tools/admin/lxd/ui.nix46
-rw-r--r--pkgs/tools/audio/abcm2ps/default.nix1
-rw-r--r--pkgs/tools/audio/accuraterip-checksum/default.nix1
-rw-r--r--pkgs/tools/audio/acousticbrainz-client/default.nix1
-rw-r--r--pkgs/tools/audio/audiowaveform/default.nix1
-rw-r--r--pkgs/tools/audio/bark/default.nix1
-rw-r--r--pkgs/tools/audio/botamusique/default.nix1
-rw-r--r--pkgs/tools/audio/catnip-gtk4/default.nix1
-rw-r--r--pkgs/tools/audio/catnip/default.nix1
-rw-r--r--pkgs/tools/audio/dsp/default.nix1
-rw-r--r--pkgs/tools/audio/essentia-extractor/default.nix1
-rw-r--r--pkgs/tools/audio/gvolicon/default.nix1
-rw-r--r--pkgs/tools/audio/headset-charge-indicator/default.nix1
-rw-r--r--pkgs/tools/audio/linuxwave/default.nix1
-rw-r--r--pkgs/tools/audio/mictray/default.nix1
-rw-r--r--pkgs/tools/audio/midimonster/default.nix1
-rw-r--r--pkgs/tools/audio/mp3cat/default.nix1
-rw-r--r--pkgs/tools/audio/mpd-discord-rpc/default.nix1
-rw-r--r--pkgs/tools/audio/mpd-mpris/default.nix1
-rw-r--r--pkgs/tools/audio/mpd-notification/default.nix1
-rw-r--r--pkgs/tools/audio/mpd-sima/default.nix1
-rw-r--r--pkgs/tools/audio/mpdas/default.nix1
-rw-r--r--pkgs/tools/audio/mpdris2/default.nix1
-rw-r--r--pkgs/tools/audio/nanotts/default.nix1
-rw-r--r--pkgs/tools/audio/pasystray/default.nix1
-rw-r--r--pkgs/tools/audio/patray/default.nix1
-rw-r--r--pkgs/tools/audio/picotts/default.nix1
-rw-r--r--pkgs/tools/audio/piper/default.nix1
-rw-r--r--pkgs/tools/audio/pnmixer/default.nix1
-rw-r--r--pkgs/tools/audio/pw-volume/default.nix1
-rw-r--r--pkgs/tools/audio/stt/default.nix1
-rw-r--r--pkgs/tools/audio/tidal-dl/default.nix1
-rw-r--r--pkgs/tools/audio/unflac/default.nix1
-rw-r--r--pkgs/tools/audio/video2midi/default.nix1
-rw-r--r--pkgs/tools/audio/volctl/default.nix1
-rw-r--r--pkgs/tools/audio/volumeicon/default.nix1
-rw-r--r--pkgs/tools/audio/whisper-ctranslate2/default.nix1
-rw-r--r--pkgs/tools/audio/yabridgectl/default.nix1
-rw-r--r--pkgs/tools/filesystems/dupe-krill/default.nix1
-rw-r--r--pkgs/tools/filesystems/dysk/default.nix1
-rw-r--r--pkgs/tools/filesystems/eiciel/default.nix1
-rw-r--r--pkgs/tools/filesystems/ext4magic/default.nix1
-rw-r--r--pkgs/tools/filesystems/extundelete/default.nix1
-rw-r--r--pkgs/tools/filesystems/fatresize/default.nix1
-rw-r--r--pkgs/tools/filesystems/fatsort/default.nix1
-rw-r--r--pkgs/tools/filesystems/file-rename/default.nix1
-rw-r--r--pkgs/tools/filesystems/fuse-7z-ng/default.nix1
-rw-r--r--pkgs/tools/filesystems/fuse-archive/default.nix1
-rw-r--r--pkgs/tools/filesystems/fuse-overlayfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/fuseiso/default.nix1
-rw-r--r--pkgs/tools/filesystems/fwanalyzer/default.nix1
-rw-r--r--pkgs/tools/filesystems/garage/default.nix1
-rw-r--r--pkgs/tools/filesystems/genext2fs/default.nix1
-rw-r--r--pkgs/tools/filesystems/genimage/default.nix1
-rw-r--r--pkgs/tools/filesystems/genromfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/gitfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/go-mtpfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/goofys/default.nix1
-rw-r--r--pkgs/tools/filesystems/gpart/default.nix1
-rw-r--r--pkgs/tools/filesystems/grive2/default.nix1
-rw-r--r--pkgs/tools/filesystems/httm/default.nix1
-rw-r--r--pkgs/tools/filesystems/httpdirfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/ifuse/default.nix1
-rw-r--r--pkgs/tools/filesystems/ioztat/default.nix1
-rw-r--r--pkgs/tools/filesystems/jefferson/default.nix1
-rw-r--r--pkgs/tools/filesystems/jmtpfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/kdiskmark/default.nix1
-rw-r--r--pkgs/tools/filesystems/mhddfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/mkspiffs/default.nix1
-rw-r--r--pkgs/tools/filesystems/mount-zip/default.nix1
-rw-r--r--pkgs/tools/filesystems/mp3fs/default.nix1
-rw-r--r--pkgs/tools/filesystems/mtpfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/rdfind/default.nix1
-rw-r--r--pkgs/tools/filesystems/rmfuse/default.nix1
-rw-r--r--pkgs/tools/filesystems/rmount/default.nix1
-rw-r--r--pkgs/tools/filesystems/rnm/default.nix1
-rw-r--r--pkgs/tools/filesystems/romdirfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/s3backer/default.nix1
-rw-r--r--pkgs/tools/filesystems/sandboxfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/sasquatch/default.nix1
-rw-r--r--pkgs/tools/filesystems/sdat2img/default.nix1
-rw-r--r--pkgs/tools/filesystems/securefs/default.nix1
-rw-r--r--pkgs/tools/filesystems/sftpman/default.nix1
-rw-r--r--pkgs/tools/filesystems/simple-mtpfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/smbnetfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/snapraid/default.nix1
-rw-r--r--pkgs/tools/filesystems/stratis-cli/default.nix1
-rw-r--r--pkgs/tools/filesystems/svnfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/tar2ext4/default.nix1
-rw-r--r--pkgs/tools/filesystems/u3-tool/default.nix1
-rw-r--r--pkgs/tools/filesystems/ubidump/default.nix1
-rw-r--r--pkgs/tools/filesystems/wdfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/wipefreespace/default.nix1
-rw-r--r--pkgs/tools/filesystems/yandex-disk/default.nix1
-rw-r--r--pkgs/tools/filesystems/zerofree/default.nix1
-rw-r--r--pkgs/tools/filesystems/zkfuse/default.nix1
-rw-r--r--pkgs/tools/filesystems/zpool-auto-expand-partitions/default.nix1
-rw-r--r--pkgs/tools/filesystems/zpool-iostat-viz/default.nix1
-rw-r--r--pkgs/tools/misc/tailspin/default.nix6
-rw-r--r--pkgs/tools/networking/netbird/default.nix6
-rw-r--r--pkgs/tools/networking/wg-friendly-peer-names/default.nix6
-rw-r--r--pkgs/tools/package-management/rpm/default.nix36
-rw-r--r--pkgs/tools/text/ugrep/default.nix4
-rw-r--r--pkgs/tools/virtualization/alpine-make-vm-image/default.nix1
-rw-r--r--pkgs/tools/virtualization/amazon-ecs-cli/default.nix1
-rw-r--r--pkgs/tools/virtualization/distrobuilder/default.nix1
-rw-r--r--pkgs/tools/virtualization/extra-container/default.nix1
-rw-r--r--pkgs/tools/virtualization/govc/default.nix1
-rw-r--r--pkgs/tools/virtualization/jumppad/default.nix1
-rw-r--r--pkgs/tools/virtualization/kubevirt/default.nix1
-rw-r--r--pkgs/tools/virtualization/lxd-image-server/default.nix1
-rw-r--r--pkgs/tools/virtualization/marathonctl/default.nix1
-rw-r--r--pkgs/tools/virtualization/mininet/default.nix1
-rw-r--r--pkgs/tools/virtualization/nixos-shell/default.nix1
-rw-r--r--pkgs/tools/virtualization/onmetal-image/default.nix1
-rw-r--r--pkgs/tools/virtualization/ovftool/default.nix1
-rw-r--r--pkgs/tools/virtualization/reg/default.nix1
-rw-r--r--pkgs/tools/virtualization/supermin/default.nix1
-rw-r--r--pkgs/tools/virtualization/udocker/default.nix1
-rw-r--r--pkgs/tools/virtualization/uefi-run/default.nix1
-rw-r--r--pkgs/tools/virtualization/vpsfree-client/default.nix1
-rw-r--r--pkgs/tools/virtualization/xva-img/default.nix1
-rw-r--r--pkgs/top-level/aliases.nix1
-rw-r--r--pkgs/top-level/all-packages.nix17
-rw-r--r--pkgs/top-level/hare-packages.nix10
-rw-r--r--pkgs/top-level/ruby-packages.nix18
382 files changed, 2274 insertions, 864 deletions
diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix
index 55bec9bd9c64..4c46dd00caac 100644
--- a/maintainers/maintainer-list.nix
+++ b/maintainers/maintainer-list.nix
@@ -4976,6 +4976,12 @@
     githubId = 424946;
     name = "James Earl Douglas";
   };
+  EBADBEEF = {
+    name = "EBADBEEF";
+    email = "errno@ebadf.com";
+    github = "EBADBEEF";
+    githubId = 4167946;
+  };
   ebbertd = {
     email = "daniel@ebbert.nrw";
     github = "ebbertd";
diff --git a/nixos/doc/manual/release-notes/rl-2311.section.md b/nixos/doc/manual/release-notes/rl-2311.section.md
index b5e58801fced..a6a3a946c7ba 100644
--- a/nixos/doc/manual/release-notes/rl-2311.section.md
+++ b/nixos/doc/manual/release-notes/rl-2311.section.md
@@ -333,6 +333,8 @@
 
 - The `woodpecker-*` CI packages have been updated to 1.0.0. This release is wildly incompatible with the 0.15.X versions that were previously packaged. Please read [upstream's documentation](https://woodpecker-ci.org/docs/next/migrations#100) to learn how to update your CI configurations.
 
+- Meilisearch was updated from 1.3.1 to 1.5.0. The update has breaking changes about backslashes and filtering. See the [release announcement](https://blog.meilisearch.com/v1-4-release/) for more information.
+
 - The Caddy module gained a new option named `services.caddy.enableReload` which is enabled by default. It allows reloading the service instead of restarting it, if only a config file has changed. This option must be disabled if you have turned off the [Caddy admin API](https://caddyserver.com/docs/caddyfile/options#admin). If you keep this option enabled, you should consider setting [`grace_period`](https://caddyserver.com/docs/caddyfile/options#grace-period) to a non-infinite value to prevent Caddy from delaying the reload indefinitely.
 
 - mdraid support is now optional. This reduces initramfs size and prevents the potentially undesired automatic detection and activation of software RAID pools. It is disabled by default in new configurations (determined by `stateVersion`), but the appropriate settings will be generated by `nixos-generate-config` when installing to a software RAID device, so the standard installation procedure should be unaffected. If you have custom configs relying on mdraid, ensure that you use `stateVersion` correctly or set `boot.swraid.enable` manually. On systems with an updated `stateVersion` we now also emit warnings if `mdadm.conf` does not contain the minimum required configuration necessary to run the dynamically enabled monitoring daemons.
diff --git a/nixos/modules/programs/git.nix b/nixos/modules/programs/git.nix
index 4e271a8c134b..710dee349d59 100644
--- a/nixos/modules/programs/git.nix
+++ b/nixos/modules/programs/git.nix
@@ -58,6 +58,10 @@ in
         '';
       };
 
+      prompt = {
+        enable = mkEnableOption "automatically sourcing git-prompt.sh. This does not change $PS1; it simply provides relevant utility functions";
+      };
+
       lfs = {
         enable = mkEnableOption (lib.mdDoc "git-lfs");
 
@@ -89,6 +93,11 @@ in
         };
       };
     })
+    (mkIf (cfg.enable && cfg.prompt.enable) {
+      environment.interactiveShellInit = ''
+        source ${cfg.package}/share/bash-completion/completions/git-prompt.sh
+      '';
+    })
   ];
 
   meta.maintainers = with maintainers; [ figsoda ];
diff --git a/nixos/tests/lxd/ui.nix b/nixos/tests/lxd/ui.nix
index 86cb30d8c2b6..ff651725ba70 100644
--- a/nixos/tests/lxd/ui.nix
+++ b/nixos/tests/lxd/ui.nix
@@ -11,9 +11,37 @@ import ../make-test-python.nix ({ pkgs, lib, ... }: {
       lxd.ui.enable = true;
     };
 
-    environment.systemPackages = [ pkgs.curl ];
+    environment.systemPackages =
+      let
+        seleniumScript = pkgs.writers.writePython3Bin "selenium-script"
+          {
+            libraries = with pkgs.python3Packages; [ selenium ];
+          } ''
+          from selenium import webdriver
+          from selenium.webdriver.common.by import By
+          from selenium.webdriver.firefox.options import Options
+          from selenium.webdriver.support.ui import WebDriverWait
+
+          options = Options()
+          options.add_argument("--headless")
+          service = webdriver.FirefoxService(executable_path="${lib.getExe pkgs.geckodriver}")  # noqa: E501
+
+          driver = webdriver.Firefox(options=options, service=service)
+          driver.implicitly_wait(10)
+          driver.get("https://localhost:8443/ui")
+
+          wait = WebDriverWait(driver, 60)
+
+          assert len(driver.find_elements(By.CLASS_NAME, "l-application")) > 0
+          assert len(driver.find_elements(By.CLASS_NAME, "l-navigation__drawer")) > 0
+
+          driver.close()
+        '';
+      in
+      with pkgs; [ curl firefox-unwrapped geckodriver seleniumScript ];
   };
 
+
   testScript = ''
     machine.wait_for_unit("sockets.target")
     machine.wait_for_unit("lxd.service")
@@ -31,5 +59,8 @@ import ../make-test-python.nix ({ pkgs, lib, ... }: {
 
     # Ensure the endpoint returns an HTML page with 'LXD UI' in the title
     machine.succeed("curl -kLs https://localhost:8443/ui | grep '<title>LXD UI</title>'")
+
+    # Ensure the application is actually rendered by the Javascript
+    machine.succeed("PYTHONUNBUFFERED=1 selenium-script")
   '';
 })
diff --git a/pkgs/applications/audio/ekho/default.nix b/pkgs/applications/audio/ekho/default.nix
index 25ed8a71aa1d..c0cde8aaf9a1 100644
--- a/pkgs/applications/audio/ekho/default.nix
+++ b/pkgs/applications/audio/ekho/default.nix
@@ -1,16 +1,46 @@
-{ lib, stdenv, fetchurl, pkg-config
-, libsndfile, libpulseaudio
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, autoconf
+, automake
+, libtool
+, libsndfile
+, libpulseaudio
+, espeak-ng
+, sonic
+, utf8cpp
+, AudioUnit
 }:
 
-let
-  version = "5.8.2";
-in stdenv.mkDerivation rec {
+stdenv.mkDerivation rec {
   pname = "ekho";
-  inherit version;
+  version = "9.0";
+
+  src = fetchFromGitHub {
+    owner = "hgneng";
+    repo = "ekho";
+    rev = "v${version}";
+    hash = "sha256-VYN9tR3BJXd3UA0V5vqQJNItJe1e1knZ+S7tLeaeYYk=";
+  };
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  CXXFLAGS = [
+    "-O0"
+    "-I${lib.getDev utf8cpp}/include/utf8cpp"
+  ];
+
+  nativeBuildInputs = [ pkg-config autoconf automake libtool ];
+
+  buildInputs = [ libsndfile libpulseaudio espeak-ng sonic utf8cpp ]
+    ++ lib.optionals stdenv.isDarwin [ AudioUnit ];
 
   meta = with lib; {
     description = "Chinese text-to-speech software";
-    homepage    = "http://www.eguidedog.net/ekho.php";
+    homepage = "http://www.eguidedog.net/ekho.php";
     longDescription = ''
       Ekho (余音) is a free, open source and multilingual text-to-speech (TTS)
       software. It supports Cantonese (Chinese dialect spoken in Hong Kong and
@@ -18,22 +48,8 @@ in stdenv.mkDerivation rec {
       (a dialect in Taiwan), Tibetan, Ngangien (an ancient Chinese before
       Yuan Dynasty) and Korean (in trial).
     '';
-    license        = licenses.gpl2Plus;
-    platforms      = platforms.linux;
-    hydraPlatforms = [];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ aaronjheng ];
   };
-
-  src = fetchurl {
-    url = "mirror://sourceforge/e-guidedog/Ekho/${version}/${pname}-${version}.tar.xz";
-    sha256 = "0ym6lpcpsvwvsiwlzkl1509a2hljwcw7synngrmqjq1n49ww00nj";
-  };
-
-  preConfigure = with lib; ''
-    NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE ${optionalString stdenv.is64bit "-D_x86_64"}"
-    NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -DEKHO_DATA_PATH=\"$out/share/ekho-data\""
-  '';
-
-  nativeBuildInputs = [ pkg-config ];
-
-  buildInputs = [ libsndfile libpulseaudio ];
 }
diff --git a/pkgs/applications/graphics/hydrus/default.nix b/pkgs/applications/graphics/hydrus/default.nix
index 8bddaa96abd5..84b750f93971 100644
--- a/pkgs/applications/graphics/hydrus/default.nix
+++ b/pkgs/applications/graphics/hydrus/default.nix
@@ -12,14 +12,14 @@
 
 python3Packages.buildPythonPackage rec {
   pname = "hydrus";
-  version = "552";
+  version = "553";
   format = "other";
 
   src = fetchFromGitHub {
     owner = "hydrusnetwork";
     repo = "hydrus";
     rev = "refs/tags/v${version}";
-    hash = "sha256-MaS9WxYlbQ7V/2mrETKS0UyWb5IzCrSwDcp4UlVS3zk=";
+    hash = "sha256-AQq5ljaxNzh0ZsoUqKgzz5kZKZMav99Jj8fI+e0wv7s=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/applications/misc/albert/default.nix b/pkgs/applications/misc/albert/default.nix
index d76231ee8c16..0d61c8ac37d5 100644
--- a/pkgs/applications/misc/albert/default.nix
+++ b/pkgs/applications/misc/albert/default.nix
@@ -19,13 +19,13 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "albert";
-  version = "0.22.14";
+  version = "0.22.16";
 
   src = fetchFromGitHub {
     owner = "albertlauncher";
     repo = "albert";
     rev = "v${finalAttrs.version}";
-    sha256 = "sha256-cAxdCjaCqEkwjL+OXW7ONkS7OpKfey3bUYmGzJyV+g8=";
+    sha256 = "sha256-Cx3DCTBsJLk0PZhGhkqLN7U8VeIVrv3Hj1OUYoHBvKA=";
     fetchSubmodules = true;
   };
 
diff --git a/pkgs/applications/misc/calibre/default.nix b/pkgs/applications/misc/calibre/default.nix
index 7b4ec4bd774b..7779480fa08a 100644
--- a/pkgs/applications/misc/calibre/default.nix
+++ b/pkgs/applications/misc/calibre/default.nix
@@ -32,11 +32,11 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "calibre";
-  version = "7.0.0";
+  version = "7.1.0";
 
   src = fetchurl {
     url = "https://download.calibre-ebook.com/${finalAttrs.version}/calibre-${finalAttrs.version}.tar.xz";
-    hash = "sha256-VAnzacz/8LYCVMCjHXqd4B+NUFmiMqdxQqpyap+UMNc=";
+    hash = "sha256-cKUV+tBZ5ZdXkoLdJPdURKnWP5B5gzCUQQehVQIRgko=";
   };
 
   patches = [
diff --git a/pkgs/applications/networking/asn/default.nix b/pkgs/applications/networking/asn/default.nix
index e2a62c1f8b10..7b8caee04bc9 100644
--- a/pkgs/applications/networking/asn/default.nix
+++ b/pkgs/applications/networking/asn/default.nix
@@ -15,16 +15,18 @@
 
 stdenv.mkDerivation rec {
   pname = "asn";
-  version = "0.74";
+  version = "0.75";
 
   src = fetchFromGitHub {
     owner = "nitefood";
     repo = "asn";
-    rev = "v${version}";
-    sha256 = "sha256-400I8aWQaPE7qCV/HqyPzuMmKpUyLc+RK7GCVgbt7JQ=";
+    rev = "refs/tags/v${version}";
+    hash = "sha256-XqP0Nx5pfYtM1xXxEDGooONj7nQ9UngJ9/AOZefnPV8=";
   };
 
-  nativeBuildInputs = [ makeWrapper ];
+  nativeBuildInputs = [
+    makeWrapper
+  ];
 
   installPhase = ''
     install -Dv asn "$out/bin/asn"
@@ -33,7 +35,7 @@ stdenv.mkDerivation rec {
       --prefix PATH : "${lib.makeBinPath [ curl whois bind mtr jq ipcalc grepcidr nmap aha ]}"
   '';
 
-  meta = {
+  meta = with lib; {
     description = "OSINT command line tool for investigating network data";
     longDescription = ''
       ASN / RPKI validity / BGP stats / IPv4v6 / Prefix / URL / ASPath / Organization /
@@ -41,7 +43,8 @@ stdenv.mkDerivation rec {
       lookup API server / Web traceroute server
     '';
     homepage = "https://github.com/nitefood/asn";
-    license = with lib.licenses; [ mit ];
-    maintainers = with lib.maintainers; [ devhell ];
+    changelog = "https://github.com/nitefood/asn/releases/tag/v${version}";
+    license = with licenses; [ mit ];
+    maintainers = with maintainers; [ devhell ];
   };
 }
diff --git a/pkgs/applications/radio/limesuite/default.nix b/pkgs/applications/radio/limesuite/default.nix
index c7f1891e2c54..f92b63a9ba98 100644
--- a/pkgs/applications/radio/limesuite/default.nix
+++ b/pkgs/applications/radio/limesuite/default.nix
@@ -7,13 +7,13 @@
 
 stdenv.mkDerivation rec {
   pname = "limesuite";
-  version = "23.10.0";
+  version = "23.11.0";
 
   src = fetchFromGitHub {
     owner = "myriadrf";
     repo = "LimeSuite";
     rev = "v${version}";
-    sha256 = "sha256-o58UNc4r+MQbH00727YTV17M7D29BbH8CgUXCORKk7E=";
+    sha256 = "sha256-f1cXrkVCIc1MqTvlCUBFqzHLhIVueybVxipNZRlF2gE=";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/applications/version-management/sapling/default.nix b/pkgs/applications/version-management/sapling/default.nix
index 3a51d280db56..8e77f2d3cc6c 100644
--- a/pkgs/applications/version-management/sapling/default.nix
+++ b/pkgs/applications/version-management/sapling/default.nix
@@ -13,7 +13,7 @@
 , fetchYarnDeps
 , yarn
 , nodejs
-, fixup_yarn_lock
+, prefetch-yarn-deps
 , glibcLocales
 , libiconv
 , Cocoa
@@ -66,7 +66,7 @@ let
     inherit version;
 
     nativeBuildInputs = [
-      fixup_yarn_lock
+      prefetch-yarn-deps
       nodejs
       yarn
     ];
@@ -75,7 +75,7 @@ let
       runHook preBuild
 
       export HOME=$(mktemp -d)
-      fixup_yarn_lock yarn.lock
+      fixup-yarn-lock yarn.lock
       yarn config --offline set yarn-offline-mirror ${yarnOfflineCache}
       yarn install --offline --frozen-lockfile --ignore-engines --ignore-scripts --no-progress
       patchShebangs node_modules
diff --git a/pkgs/applications/virtualization/singularity/packages.nix b/pkgs/applications/virtualization/singularity/packages.nix
index 8a86f06785b4..80e7d2c2a39f 100644
--- a/pkgs/applications/virtualization/singularity/packages.nix
+++ b/pkgs/applications/virtualization/singularity/packages.nix
@@ -7,14 +7,14 @@ let
   apptainer = callPackage
     (import ./generic.nix rec {
       pname = "apptainer";
-      version = "1.2.4";
+      version = "1.2.5";
       projectName = "apptainer";
 
       src = fetchFromGitHub {
         owner = "apptainer";
         repo = "apptainer";
         rev = "refs/tags/v${version}";
-        hash = "sha256-VaVOepfjMBf8F56S1Clpn8HPw65MNQMoZsQguKQ4Sg0=";
+        hash = "sha256-1XuqyNXyYrmIfqp8450z8+qET15hKVfj2v2iN9QPmDk=";
       };
 
       # Update by running
diff --git a/pkgs/build-support/build-graalvm-native-image/default.nix b/pkgs/build-support/build-graalvm-native-image/default.nix
index 6a5e82427f7b..4b4d5770a1f8 100644
--- a/pkgs/build-support/build-graalvm-native-image/default.nix
+++ b/pkgs/build-support/build-graalvm-native-image/default.nix
@@ -11,6 +11,7 @@
   # except in special cases. In most cases, use extraNativeBuildArgs instead
 , nativeImageBuildArgs ? [
     (lib.optionalString stdenv.isDarwin "-H:-CheckToolchain")
+    (lib.optionalString (stdenv.isLinux && stdenv.isAarch64) "-H:PageSize=64K")
     "-H:Name=${executable}"
     "-march=compatibility"
     "--verbose"
diff --git a/pkgs/by-name/ap/apt/package.nix b/pkgs/by-name/ap/apt/package.nix
index 05e14338a630..934c17eeac12 100644
--- a/pkgs/by-name/ap/apt/package.nix
+++ b/pkgs/by-name/ap/apt/package.nix
@@ -33,11 +33,11 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "apt";
-  version = "2.7.6";
+  version = "2.7.7";
 
   src = fetchurl {
     url = "mirror://debian/pool/main/a/apt/apt_${finalAttrs.version}.tar.xz";
-    hash = "sha256-hoP1Tv8L9U5R4CWzSL0HdND9Q3eZYW9IUSlWzxXAX2c=";
+    hash = "sha256-07PztwFPblYbhsBZuJBA0MdCy6vFdlk8bvqg3Xsk3nc=";
   };
 
   # cycle detection; lib can't be split
diff --git a/pkgs/by-name/be/beekeeper-studio/package.nix b/pkgs/by-name/be/beekeeper-studio/package.nix
new file mode 100644
index 000000000000..6d7353ab9b43
--- /dev/null
+++ b/pkgs/by-name/be/beekeeper-studio/package.nix
@@ -0,0 +1,52 @@
+{ appimageTools
+, fetchurl
+, lib
+, makeWrapper
+, stdenv
+}:
+
+let
+  pname = "beekeeper-studio";
+  version = "4.0.3";
+
+  plat = {
+    aarch64-linux = "-arm64";
+    x86_64-linux = "";
+  }.${stdenv.hostPlatform.system};
+
+  hash = {
+    aarch64-linux = "sha256-PdRGZedNMZtGPI6Za2T94yKXvk6JoMoAot/kFKsBqQs=";
+    x86_64-linux = "sha256-P2HlCb0dai4cJlKcT9LLQ+njViD+oHS3KI2YdR5jR44=";
+  }.${stdenv.hostPlatform.system};
+
+  src = fetchurl {
+    url = "https://github.com/beekeeper-studio/beekeeper-studio/releases/download/v${version}/Beekeeper-Studio-${version}${plat}.AppImage";
+    inherit hash;
+  };
+
+  appimageContents = appimageTools.extractType2 { inherit pname version src; };
+in
+appimageTools.wrapType2 {
+  inherit pname version src;
+
+  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-hint=auto --enable-features=WaylandWindowDecorations}}"
+    install -Dm444 ${appimageContents}/${pname}.desktop -t $out/share/applications/
+    install -Dm444 ${appimageContents}/${pname}.png -t $out/share/pixmaps/
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun --no-sandbox' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "Modern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows";
+    homepage = "https://www.beekeeperstudio.io";
+    changelog = "https://github.com/beekeeper-studio/beekeeper-studio/releases/tag/v${version}";
+    license = licenses.gpl3Only;
+    mainProgram = "beekeeper-studio";
+    maintainers = with maintainers; [ milogert alexnortung ];
+    platforms = [ "aarch64-linux" "x86_64-linux" ];
+  };
+}
diff --git a/pkgs/applications/audio/cyanrip/default.nix b/pkgs/by-name/cy/cyanrip/package.nix
index 1828858b3cdb..9626224b4f99 100644
--- a/pkgs/applications/audio/cyanrip/default.nix
+++ b/pkgs/by-name/cy/cyanrip/package.nix
@@ -10,19 +10,30 @@
 , libmusicbrainz5
 , curl
 }:
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "cyanrip";
-  version = "0.9.0";
+  version = "0.9.2";
 
   src = fetchFromGitHub {
     owner = "cyanreg";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "sha256-gH/rWTRYX10Q2Y9oSaMu0bOy3SMbcSNmH3dkXHFAw90";
+    repo = "cyanrip";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-sWgHf8S4GZDAIvMUf5KvGy2y0JcUbRS53IjArdgokqc=";
   };
 
-  nativeBuildInputs = [ meson ninja pkg-config ];
-  buildInputs = [ ffmpeg-headless libcdio libcdio-paranoia libmusicbrainz5 curl ];
+  nativeBuildInputs = [
+    meson
+    ninja
+    pkg-config
+  ];
+
+  buildInputs = [
+    ffmpeg-headless
+    libcdio
+    libcdio-paranoia
+    libmusicbrainz5
+    curl
+  ];
 
   meta = with lib; {
     homepage = "https://github.com/cyanreg/cyanrip";
@@ -31,4 +42,4 @@ stdenv.mkDerivation rec {
     platforms = platforms.all;
     maintainers = [ maintainers.zane ];
   };
-}
+})
diff --git a/pkgs/applications/version-management/lefthook/default.nix b/pkgs/by-name/le/lefthook/package.nix
index 62ea51f5e73e..877f69ccbf2c 100644
--- a/pkgs/applications/version-management/lefthook/default.nix
+++ b/pkgs/by-name/le/lefthook/package.nix
@@ -6,7 +6,7 @@
 
 let
   pname = "lefthook";
-  version = "1.5.2";
+  version = "1.5.3";
 in
 buildGoModule rec {
   inherit pname version;
@@ -15,7 +15,7 @@ buildGoModule rec {
     owner = "evilmartians";
     repo = "lefthook";
     rev = "v${version}";
-    hash = "sha256-9lAgKHcUAhg3Z8fMNYu3JrjfSd0HaT7YhvjKlpLMi0E=";
+    hash = "sha256-pC6kEDOXNcuMfDvXomPZVMWpS/aHR4P4pIhqNkXAGuc=";
   };
 
   vendorHash = "sha256-/VLS7+nPERjIU7V2CzqXH69Z3/y+GKZbAFn+KcRKRuA=";
diff --git a/pkgs/development/tools/misc/pkgconf/default.nix b/pkgs/by-name/li/libpkgconf/package.nix
index 68f8f525823a..f58bcd4b5edf 100644
--- a/pkgs/development/tools/misc/pkgconf/default.nix
+++ b/pkgs/by-name/li/libpkgconf/package.nix
@@ -6,11 +6,11 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "pkgconf";
-  version = "2.0.3";
+  version = "2.1.0";
 
   src = fetchurl {
     url = "https://distfiles.dereferenced.org/pkgconf/pkgconf-${finalAttrs.version}.tar.xz";
-    hash = "sha256-yr3zxHRSmFT3zM6Fc8WsaK00p+YhA3U1y8OYH2sjg2w=";
+    hash = "sha256-Jm1YYe5RxSvHECk6HTZiKuFtBI1x7FYDSgLrnPlnd2E=";
   };
 
   outputs = [ "out" "lib" "dev" "man" "doc" ];
diff --git a/pkgs/by-name/pr/presenterm/package.nix b/pkgs/by-name/pr/presenterm/package.nix
index 6e09e86f2059..df5342311cd1 100644
--- a/pkgs/by-name/pr/presenterm/package.nix
+++ b/pkgs/by-name/pr/presenterm/package.nix
@@ -2,16 +2,19 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "presenterm";
-  version = "0.2.1";
+  version = "0.3.0";
 
   src = fetchFromGitHub {
     owner = "mfontanini";
     repo = "presenterm";
     rev = "v${version}";
-    hash = "sha256-sXVMVU34gxZKGNye6hoyv07a7N7f6UbivA6thbSOeZA=";
+    hash = "sha256-uwLVg/bURz2jLAQZgLujDR2Zewu5pcE9bwEBg/DQ4Iw=";
   };
 
-  cargoHash = "sha256-PsDaXMws/8hEvAZwClQ4okGuryg1iKg0IBr7Xp2QYBE=";
+  cargoHash = "sha256-tEgXqvSyScO/J/56ykCda3ERrTDQj5jCxlMEDof/fCA=";
+
+  # Skip test that currently doesn't work
+  checkFlags = [ "--skip=execute::test::shell_code_execution" ];
 
   meta = with lib; {
     description = "A terminal based slideshow tool";
diff --git a/pkgs/by-name/zx/zxtune/disable_updates.patch b/pkgs/by-name/zx/zxtune/disable_updates.patch
new file mode 100644
index 000000000000..f25921d83b12
--- /dev/null
+++ b/pkgs/by-name/zx/zxtune/disable_updates.patch
@@ -0,0 +1,20 @@
+--- ./apps/zxtune-qt/ui/desktop/mainwindow.cpp.orig	2023-11-03 10:58:54.073651511 -0700
++++ ./apps/zxtune-qt/ui/desktop/mainwindow.cpp	2023-11-03 10:59:08.900608850 -0700
+@@ -106,14 +106,9 @@
+       Require(connect(actionReportBug, &QAction::triggered, this, &DesktopMainWindowImpl::ReportIssue));
+       Require(connect(actionAboutQt, &QAction::triggered, this, &DesktopMainWindowImpl::ShowAboutQt));
+       Require(connect(actionPreferences, &QAction::triggered, this, &DesktopMainWindowImpl::ShowPreferences));
+-      if (Update::CheckOperation* op = Update::CheckOperation::Create(*this))
+-      {
+-        Require(connect(actionCheckUpdates, &QAction::triggered, op, &Update::CheckOperation::Execute));
+-      }
+-      else
+-      {
+-        actionCheckUpdates->setEnabled(false);
+-      }
++
++      // Nix: disable update checks completely
++      actionCheckUpdates->setEnabled(false);
+ 
+       Require(connect(Controls, &PlaybackControls::OnPrevious, MultiPlaylist, &Playlist::UI::ContainerView::Prev));
+       Require(connect(Controls, &PlaybackControls::OnNext, MultiPlaylist, &Playlist::UI::ContainerView::Next));
diff --git a/pkgs/by-name/zx/zxtune/package.nix b/pkgs/by-name/zx/zxtune/package.nix
new file mode 100644
index 000000000000..959b80952c1e
--- /dev/null
+++ b/pkgs/by-name/zx/zxtune/package.nix
@@ -0,0 +1,148 @@
+{ lib
+, stdenv
+, fetchFromBitbucket
+, nix-update-script
+, boost
+, zlib
+# File backends (for decoding and encoding)
+, withMp3 ? true
+, lame
+, withOgg ? true
+, libvorbis
+, withFlac ? true
+, flac
+# Audio backends (for playback)
+, withOpenal ? false
+, openal
+, withSDL ? false
+, SDL
+, withOss ? false
+, withAlsa ? stdenv.hostPlatform.isLinux
+, alsa-lib
+, withPulse ? stdenv.hostPlatform.isLinux
+, libpulseaudio
+# GUI audio player
+, withQt ? true
+, qt5
+, zip
+}:
+let
+  dlopenBuildInputs = []
+    ++ lib.optional withMp3 lame
+    ++ lib.optional withOgg libvorbis
+    ++ lib.optional withFlac flac
+    ++ lib.optional withOpenal openal
+    ++ lib.optional withSDL SDL
+    ++ lib.optional withAlsa alsa-lib
+    ++ lib.optional withPulse libpulseaudio;
+  supportWayland = (!stdenv.hostPlatform.isDarwin);
+  platformName = "linux";
+  staticBuildInputs = [ boost zlib ]
+    ++ lib.optional withQt (if (supportWayland) then qt5.qtwayland else qt5.qtbase);
+in stdenv.mkDerivation rec {
+  pname = "zxtune";
+  version = "5055";
+
+  outputs = [ "out" ];
+
+  src = fetchFromBitbucket {
+    owner = "zxtune";
+    repo = "zxtune";
+    rev = "r${version}";
+    hash = "sha256-ABXGbzjdsPUuQnwZQOho4s2xRSDGzbZdA6/hCkBb7zE=";
+  };
+
+  passthru.updateScript = nix-update-script {
+    extraArgs = [ "--version-regex" "r([0-9]+)" ];
+  };
+
+  strictDeps = true;
+
+  nativeBuildInputs = lib.optionals withQt [ zip qt5.wrapQtAppsHook ];
+
+  buildInputs = staticBuildInputs ++ dlopenBuildInputs;
+
+  patches = [
+    ./disable_updates.patch
+  ];
+
+  # Fix use of old OpenAL header path
+  postPatch = ''
+    substituteInPlace src/sound/backends/gates/openal_api.h \
+      --replace "#include <OpenAL/" "#include <AL/"
+  '';
+
+  buildPhase = let
+    setOptionalSupport = name: var:
+      "support_${name}=" + (if (var) then "1" else "");
+    makeOptsCommon = [
+      ''-j$NIX_BUILD_CORES''
+      ''root.version=${src.rev}''
+      ''system.zlib=1''
+      ''platform=${platformName}''
+      ''includes.dirs.${platformName}="${lib.makeSearchPathOutput "dev" "include" buildInputs}"''
+      ''libraries.dirs.${platformName}="${lib.makeLibraryPath staticBuildInputs}"''
+      ''ld_flags="-Wl,-rpath=\"${lib.makeLibraryPath dlopenBuildInputs}\""''
+      (setOptionalSupport "mp3" withMp3)
+      (setOptionalSupport "ogg" withOgg)
+      (setOptionalSupport "flac" withFlac)
+      (setOptionalSupport "openal" withOpenal)
+      (setOptionalSupport "sdl" withSDL)
+      (setOptionalSupport "oss" withOss)
+      (setOptionalSupport "alsa" withAlsa)
+      (setOptionalSupport "pulseaudio" withPulse)
+    ];
+    makeOptsQt = [
+      ''tools.uic=${qt5.qtbase.dev}/bin/uic''
+      ''tools.moc=${qt5.qtbase.dev}/bin/moc''
+      ''tools.rcc=${qt5.qtbase.dev}/bin/rcc''
+    ];
+  in ''
+    runHook preBuild
+    make ${builtins.toString makeOptsCommon} -C apps/xtractor
+    make ${builtins.toString makeOptsCommon} -C apps/zxtune123
+  '' + lib.optionalString withQt ''
+    make ${builtins.toString (makeOptsCommon ++ makeOptsQt)} -C apps/zxtune-qt
+  '' + ''
+    runHook postBuild
+  '';
+
+  # Libs from dlopenBuildInputs are found with dlopen. Do not shrink rpath. Can
+  # check output of 'out/bin/zxtune123 --list-backends' to verify all plugins
+  # load ("Status: Available" or "Status: Failed to load dynamic library...").
+  dontPatchELF = true;
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 bin/linux/release/xtractor -t $out/bin
+    install -Dm755 bin/linux/release/zxtune123 -t $out/bin
+  '' + lib.optionalString withQt ''
+    install -Dm755 bin/linux/release/zxtune-qt -t $out/bin
+  '' + ''
+    runHook postInstall
+  '';
+
+  # Only wrap the gui
+  dontWrapQtApps = true;
+  preFixup = lib.optionalString withQt ''
+    wrapQtApp "$out/bin/zxtune-qt"
+  '';
+
+  meta = with lib; {
+    description = "Crossplatform chiptunes player";
+    longDescription = ''
+      Chiptune music player with truly extensive format support. Supported
+      formats/chips include AY/YM, ZX Spectrum, PC, Amiga, Atari, Acorn, Philips
+      SAA1099, MOS6581 (Commodore 64), NES, SNES, GameBoy, Atari, TurboGrafX,
+      Nintendo DS, Sega Master System, and more. Powered by vgmstream, OpenMPT,
+      sidplay, and many other libraries.
+    '';
+    homepage = "https://zxtune.bitbucket.io/";
+    license = licenses.gpl3;
+    # zxtune supports mac and windows, but more work will be needed to
+    # integrate with the custom make system (see platformName above)
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ EBADBEEF ];
+    mainProgram = if withQt then "zxtune-qt" else "zxtune123";
+  };
+}
diff --git a/pkgs/desktops/gnome/extensions/extensionOverridesPatches/pano_at_elhan.io.patch b/pkgs/desktops/gnome/extensions/extensionOverridesPatches/pano_at_elhan.io.patch
index 448418d573ca..d5b61dba99aa 100644
--- a/pkgs/desktops/gnome/extensions/extensionOverridesPatches/pano_at_elhan.io.patch
+++ b/pkgs/desktops/gnome/extensions/extensionOverridesPatches/pano_at_elhan.io.patch
@@ -1,10 +1,27 @@
+diff --git a/__nix-prepend-search-paths.js b/__nix-prepend-search-paths.js
+new file mode 100644
+index 0000000..bf3071b
+--- /dev/null
++++ b/__nix-prepend-search-paths.js
+@@ -0,0 +1,3 @@
++import GIRepository from 'gi://GIRepository';
++GIRepository.Repository.prepend_search_path('@gsound@/lib/girepository-1.0');
++GIRepository.Repository.prepend_search_path('@libgda@/lib/girepository-1.0');
 diff --git a/extension.js b/extension.js
-index 26561f2..01209e7 100644
+index a3d6741..6a38850 100644
 --- a/extension.js
 +++ b/extension.js
-@@ -1,3 +1,5 @@
-+imports.gi.GIRepository.Repository.prepend_search_path('@gsound@/lib/girepository-1.0')
-+imports.gi.GIRepository.Repository.prepend_search_path('@libgda@/lib/girepository-1.0')
- 
- try {
- 
+@@ -1,3 +1,4 @@
++import './__nix-prepend-search-paths.js';
+ import Gio from 'gi://Gio';
+ import GLib from 'gi://GLib';
+ import Shell from 'gi://Shell';
+diff --git a/prefs.js b/prefs.js
+index 5dd94eb..634b2ef 100644
+--- a/prefs.js
++++ b/prefs.js
+@@ -1,3 +1,4 @@
++import './__nix-prepend-search-paths.js';
+ import Gdk from 'gi://Gdk';
+ import Gtk from 'gi://Gtk';
+ import { ExtensionPreferences } from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
diff --git a/pkgs/development/compilers/hare/default.nix b/pkgs/development/compilers/hare/default.nix
index 121365320812..a78b3706f678 100644
--- a/pkgs/development/compilers/hare/default.nix
+++ b/pkgs/development/compilers/hare/default.nix
@@ -1,7 +1,100 @@
-{ config, lib, pkgs }:
+{ lib
+, stdenv
+, fetchFromSourcehut
+, binutils-unwrapped
+, harec
+, makeWrapper
+, qbe
+, scdoc
+}:
 
-lib.makeScope pkgs.newScope (self: {
+let
+  # We use harec's override of qbe until 1.2 is released, but the `qbe` argument
+  # is kept to avoid breakage.
+  qbe = harec.qbeUnstable;
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "hare";
+  version = "unstable-2023-10-23";
 
-  harec = pkgs.callPackage ./harec { };
-  hare = pkgs.callPackage ./hare { };
+  src = fetchFromSourcehut {
+    owner = "~sircmpwn";
+    repo = "hare";
+    rev = "1048620a7a25134db370bf24736efff1ffcb2483";
+    hash = "sha256-slQPIhrcM+KAVAvjuRnqNdEAEr4Xa4iQNVEpI7Wl+Ks=";
+  };
+
+  nativeBuildInputs = [
+    binutils-unwrapped
+    harec
+    makeWrapper
+    qbe
+    scdoc
+  ];
+
+  buildInputs = [
+    binutils-unwrapped
+    harec
+    qbe
+  ];
+
+  # Append the distribution name to the version
+  env.LOCALVER = "nix";
+
+  configurePhase =
+    let
+      # https://harelang.org/platforms/
+      arch =
+        if stdenv.isx86_64 then "x86_64"
+        else if stdenv.isAarch64 then "aarch64"
+        else if stdenv.hostPlatform.isRiscV && stdenv.is64bit then "riscv64"
+        else "unsupported";
+      platform =
+        if stdenv.isLinux then "linux"
+        else if stdenv.isFreeBSD then "freebsd"
+        else "unsupported";
+    in
+    ''
+      runHook preConfigure
+
+      cp config.example.mk config.mk
+      makeFlagsArray+=(
+        PREFIX="${builtins.placeholder "out"}"
+        HARECACHE="$(mktemp -d --tmpdir harecache.XXXXXXXX)"
+        BINOUT="$(mktemp -d --tmpdir bin.XXXXXXXX)"
+        PLATFORM="${platform}"
+        ARCH="${arch}"
+      )
+
+      runHook postConfigure
+    '';
+
+  doCheck = true;
+
+  postFixup =
+    let
+      binPath = lib.makeBinPath [
+        binutils-unwrapped
+        harec
+        qbe
+      ];
+    in
+    ''
+      wrapProgram $out/bin/hare --prefix PATH : ${binPath}
+    '';
+
+  setupHook = ./setup-hook.sh;
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  meta = {
+    homepage = "https://harelang.org/";
+    description =
+      "A systems programming language designed to be simple, stable, and robust";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ onemoresuza ];
+    mainProgram = "hare";
+    inherit (harec.meta) platforms badPlatforms;
+  };
 })
diff --git a/pkgs/development/compilers/hare/hare/config-template.mk b/pkgs/development/compilers/hare/hare/config-template.mk
deleted file mode 100644
index b3b0f535915a..000000000000
--- a/pkgs/development/compilers/hare/hare/config-template.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-## Template to generate config.mk via substitute-all
-
-# set PREFIX externally
-BINDIR = $(PREFIX)/bin
-MANDIR = $(PREFIX)/share/man
-SRCDIR = $(PREFIX)/src
-STDLIB = $(SRCDIR)/hare/stdlib
-
-HAREPATH = $(SRCDIR)/hare/stdlib:$(SRCDIR)/hare/third-party
-
-## Build configuration
-
-# Platform to build for
-PLATFORM = @platform@
-ARCH = @arch@
-
-# External tools and flags
-HAREC = harec
-HAREFLAGS = @hareflags@
-QBE = qbe
-AS = as
-LD = ld
-AR = ar
-SCDOC = scdoc
-
-# Where to store build artifacts
-# set HARECACHE externally
-
-# Cross-compiler toolchains
-# # TODO: fixup this
-AARCH64_AS=aarch64-as
-AARCH64_AR=aarch64-ar
-AARCH64_CC=aarch64-cc
-AARCH64_LD=aarch64-ld
-
-RISCV64_AS=riscv64-as
-RISCV64_AR=riscv64-ar
-RISCV64_CC=riscv64-cc
-RISCV64_LD=riscv64-ld
-
-X86_64_AS=as
-X86_64_AR=ar
-X86_64_CC=cc
-X86_64_LD=ld
diff --git a/pkgs/development/compilers/hare/hare/default.nix b/pkgs/development/compilers/hare/hare/default.nix
deleted file mode 100644
index f95bff23f612..000000000000
--- a/pkgs/development/compilers/hare/hare/default.nix
+++ /dev/null
@@ -1,98 +0,0 @@
-{ lib
-, stdenv
-, fetchFromSourcehut
-, binutils-unwrapped
-, harePackages
-, makeWrapper
-, qbe
-, scdoc
-, substituteAll
-}:
-
-let
-  inherit (harePackages) harec;
-in
-stdenv.mkDerivation (finalAttrs: {
-  pname = "hare";
-  version = "unstable-2023-04-23";
-
-  src = fetchFromSourcehut {
-    owner = "~sircmpwn";
-    repo = "hare";
-    rev = "464ec7a660b12ab1ef8e4dcc9d00604cec996c6e";
-    hash = "sha256-5/ObckDxosqUkFfDVhGA/0kwjFzDUxu420nkfa97vqM=";
-  };
-
-  nativeBuildInputs = [
-    binutils-unwrapped
-    harec
-    makeWrapper
-    qbe
-    scdoc
-  ];
-
-  buildInputs = [
-    binutils-unwrapped
-    harec
-    qbe
-  ];
-
-  strictDeps = true;
-
-  configurePhase =
-    let
-      # https://harelang.org/platforms/
-      arch =
-        if stdenv.isx86_64 then "x86_64"
-        else if stdenv.isAarch64 then "aarch64"
-        else if stdenv.hostPlatform.isRiscV && stdenv.is64bit then "riscv64"
-        else "unsupported";
-      platform =
-        if stdenv.isLinux then "linux"
-        else if stdenv.isFreeBSD then "freebsd"
-        else "unsupported";
-      hareflags = "";
-      config-file = substituteAll {
-        src = ./config-template.mk;
-        inherit arch platform hareflags;
-      };
-    in
-    ''
-      runHook preConfigure
-
-      export HARECACHE="$NIX_BUILD_TOP/.harecache"
-      export BINOUT="$NIX_BUILD_TOP/.bin"
-      cat ${config-file} > config.mk
-
-      runHook postConfigure
-    '';
-
-  makeFlags = [
-    "PREFIX=${placeholder "out"}"
-  ];
-
-  doCheck = true;
-
-  postInstall =
-    let
-      binPath = lib.makeBinPath [
-        binutils-unwrapped
-        harec
-        qbe
-      ];
-    in
-    ''
-      wrapProgram $out/bin/hare --prefix PATH : ${binPath}
-    '';
-
-  setupHook = ./setup-hook.sh;
-
-  meta = {
-    homepage = "http://harelang.org/";
-    description =
-      "A systems programming language designed to be simple, stable, and robust";
-    license = lib.licenses.gpl3Only;
-    maintainers = with lib.maintainers; [ onemoresuza ];
-    inherit (harec.meta) platforms badPlatforms;
-  };
-})
diff --git a/pkgs/development/compilers/hare/harec/default.nix b/pkgs/development/compilers/hare/harec/default.nix
deleted file mode 100644
index 6b71e0df0252..000000000000
--- a/pkgs/development/compilers/hare/harec/default.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ lib
-, stdenv
-, fetchFromSourcehut
-, qbe
-}:
-
-stdenv.mkDerivation (finalAttrs: {
-  pname = "harec";
-  version = "unstable-2023-04-25";
-
-  src = fetchFromSourcehut {
-    owner = "~sircmpwn";
-    repo = "harec";
-    rev = "068e8da091f9053726251bc221abf40fdea630ff";
-    hash = "sha256-PPR0d+6JJRzPURW7AznloBSrtylMJExNCGCxFMl2LsA=";
-  };
-
-  nativeBuildInputs = [
-    qbe
-  ];
-
-  buildInputs = [
-    qbe
-  ];
-
-  # TODO: report upstream
-  hardeningDisable = [ "fortify" ];
-
-  strictDeps = true;
-
-  doCheck = true;
-
-  meta = {
-    homepage = "http://harelang.org/";
-    description = "Bootstrapping Hare compiler written in C for POSIX systems";
-    license = lib.licenses.gpl3Only;
-    maintainers = with lib.maintainers; [ onemoresuza ];
-    # The upstream developers do not like proprietary operating systems; see
-    # https://harelang.org/platforms/
-    # UPDATE: https://github.com/hshq/harelang provides a MacOS port
-    platforms = with lib.platforms;
-      lib.intersectLists (freebsd ++ linux) (aarch64 ++ x86_64 ++ riscv64);
-    badPlatforms = lib.platforms.darwin;
-  };
-})
diff --git a/pkgs/development/compilers/hare/hare/setup-hook.sh b/pkgs/development/compilers/hare/setup-hook.sh
index d2d2c34354d6..d2d2c34354d6 100644
--- a/pkgs/development/compilers/hare/hare/setup-hook.sh
+++ b/pkgs/development/compilers/hare/setup-hook.sh
diff --git a/pkgs/development/compilers/harec/default.nix b/pkgs/development/compilers/harec/default.nix
new file mode 100644
index 000000000000..6ddb5ff1f01c
--- /dev/null
+++ b/pkgs/development/compilers/harec/default.nix
@@ -0,0 +1,63 @@
+{ lib
+, stdenv
+, fetchFromSourcehut
+, qbe
+, fetchgit
+}:
+let
+  # harec needs the dbgfile and dbgloc features implemented up to this commit.
+  # This can be dropped once 1.2 is released, for a possible release date see:
+  # https://lists.sr.ht/~mpu/qbe/%3CZPkmHE9KLohoEohE%40cloudsdale.the-delta.net.eu.org%3E
+  qbe' = qbe.overrideAttrs (_old: {
+    version = "1.1-unstable-2023-08-18";
+    src = fetchgit {
+      url = "git://c9x.me/qbe.git";
+      rev = "36946a5142c40b733d25ea5ca469f7949ee03439";
+      hash = "sha256-bqxWFP3/aw7kRoD6ictbFcjzijktHvh4AgWAXBIODW8=";
+    };
+  });
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "harec";
+  version = "unstable-2023-10-22";
+
+  src = fetchFromSourcehut {
+    owner = "~sircmpwn";
+    repo = "harec";
+    rev = "64dea196ce040fbf3417e1b4fb11331688672aca";
+    hash = "sha256-2Aeb+OZ/hYUyyxx6aTw+Oxiac+p+SClxtg0h68ZBSHc=";
+  };
+
+  nativeBuildInputs = [
+    qbe'
+  ];
+
+  buildInputs = [
+    qbe'
+  ];
+
+  strictDeps = true;
+  enableParallelBuilding = true;
+
+  doCheck = true;
+
+  passthru = {
+    # We create this attribute so that the `hare` package can access the
+    # overwritten `qbe`.
+    qbeUnstable = qbe';
+  };
+
+  meta = {
+    homepage = "https://harelang.org/";
+    description = "Bootstrapping Hare compiler written in C for POSIX systems";
+    license = lib.licenses.gpl3Only;
+    maintainers = with lib.maintainers; [ onemoresuza ];
+    mainProgram = "harec";
+    # The upstream developers do not like proprietary operating systems; see
+    # https://harelang.org/platforms/
+    # UPDATE: https://github.com/hshq/harelang provides a MacOS port
+    platforms = with lib.platforms;
+      lib.intersectLists (freebsd ++ linux) (aarch64 ++ x86_64 ++ riscv64);
+    badPlatforms = lib.platforms.darwin;
+  };
+})
diff --git a/pkgs/development/python-modules/taskw/default.nix b/pkgs/development/python-modules/taskw/default.nix
index 32e40801c6ea..5e9b2f3269e1 100644
--- a/pkgs/development/python-modules/taskw/default.nix
+++ b/pkgs/development/python-modules/taskw/default.nix
@@ -20,7 +20,11 @@ buildPythonPackage rec {
     hash = "sha256-EQm9+b3nqbMqUAejAsh4MD/2UYi2QiWsdKMomkxUi90=";
   };
 
-  patches = [ ./use-template-for-taskwarrior-install-path.patch ];
+  patches = [
+    ./use-template-for-taskwarrior-install-path.patch
+    # Remove when https://github.com/ralphbean/taskw/pull/151 is merged.
+    ./support-relative-path-in-taskrc.patch
+  ];
   postPatch = ''
     substituteInPlace taskw/warrior.py \
       --replace '@@taskwarrior@@' '${pkgs.taskwarrior}'
diff --git a/pkgs/development/python-modules/taskw/support-relative-path-in-taskrc.patch b/pkgs/development/python-modules/taskw/support-relative-path-in-taskrc.patch
new file mode 100644
index 000000000000..25b1b28eff5c
--- /dev/null
+++ b/pkgs/development/python-modules/taskw/support-relative-path-in-taskrc.patch
@@ -0,0 +1,79 @@
+From 958b63ceec02b179482141cfb846ddbcae711a1b Mon Sep 17 00:00:00 2001
+From: Scott Mcdermott <scott@smemsh.net>
+Date: Sat, 28 Aug 2021 21:12:38 -0700
+Subject: [PATCH] RcFile: _read: try taskrc directory when trying to load
+ includes
+
+Taskwarrior itself tries includes as absolute path, then cwd, then
+relative to rcfile, then in various search paths (see
+GothenburgBitFactory/libshared -> src/Configuration.cpp ->
+Configuration::parse()).
+
+We won't try to duplicate that whole arrangement here, but at least look
+relative to the rcfile in addition to cwd/absolute, like taskwarrior
+does.  This will allow specification as relative path in most cases.
+Otherwise, we'd have to chdir anyways because includes are always tried
+as-is by taskw.  They would only work if specified as absolute paths or
+if in cwd
+
+We use a TaskRc() class variable to store the rcdir because there could
+be an include chain and all the instances will need to know the same
+one, but will be processing different paths, so we have to capture the
+directory of the first one processed, ie the base rcfile.
+
+Fixes #150
+
+Co-authored-by: Raito Bezarius <masterancpp@gmail.com>
+---
+ taskw/taskrc.py | 15 +++++++++++++++
+ 1 file changed, 15 insertions(+)
+
+diff --git a/taskw/taskrc.py b/taskw/taskrc.py
+index 1b6f8e5..b72dee6 100644
+--- a/taskw/taskrc.py
++++ b/taskw/taskrc.py
+@@ -1,5 +1,6 @@
+ import logging
+ import os
++import os.path
+ 
+ from taskw.fields import (
+     ChoiceField,
+@@ -39,6 +40,7 @@ class TaskRc(dict):
+ 
+     """
+ 
++    rcdir = None
+     UDA_TYPE_MAP = {
+         'date': DateField,
+         'duration': DurationField,
+@@ -54,6 +56,8 @@ class TaskRc(dict):
+                     path
+                 )
+             )
++            if not self.rcdir:
++                TaskRc.rcdir = os.path.dirname(os.path.realpath(self.path))
+             config = self._read(self.path)
+         else:
+             self.path = None
+@@ -92,6 +96,17 @@ class TaskRc(dict):
+ 
+     def _read(self, path):
+         config = {}
++        if not os.path.exists(path) and TaskRc.rcdir is not None:
++            # include path may be given relative to dir of rcfile
++            oldpath = path
++            path = os.path.join(TaskRc.rcdir, oldpath)
++            if not os.path.exists(path):
++                logger.error(
++                    "rcfile does not exist, tried %s and %s",
++                    oldpath, path
++                )
++                raise FileNotFoundError
++
+         with open(path, 'r') as config_file:
+             for raw_line in config_file.readlines():
+                 line = sanitize(raw_line)
+-- 
+2.42.0
+
diff --git a/pkgs/development/ruby-modules/gem-config/default.nix b/pkgs/development/ruby-modules/gem-config/default.nix
index a380f9734bfd..5a3ec1f68469 100644
--- a/pkgs/development/ruby-modules/gem-config/default.nix
+++ b/pkgs/development/ruby-modules/gem-config/default.nix
@@ -21,12 +21,12 @@
 , libiconv, postgresql, v8, clang, sqlite, zlib, imagemagick, lasem
 , pkg-config , ncurses, xapian, gpgme, util-linux, tzdata, icu, libffi
 , cmake, libssh2, openssl, openssl_1_1, libmysqlclient, git, perl, pcre, pcre2, gecode_3, curl
-, msgpack, libsodium, snappy, libossp_uuid, lxc, libpcap, xorg, gtk2, buildRubyGem
+, msgpack, libsodium, snappy, libossp_uuid, lxc, libpcap, xorg, gtk2, gtk3, buildRubyGem
 , cairo, expat, re2, rake, gobject-introspection, gdk-pixbuf, zeromq, czmq, graphicsmagick, libcxx
 , file, libvirt, glib, vips, taglib, libopus, linux-pam, libidn, protobuf, fribidi, harfbuzz
 , bison, flex, pango, python3, patchelf, binutils, freetds, wrapGAppsHook, atk
 , bundler, libsass, dart-sass, libexif, libselinux, libsepol, shared-mime-info, libthai, libdatrie
-, CoreServices, DarwinTools, cctools, libtool, discount, exiv2, libmaxminddb, libyaml
+, CoreServices, DarwinTools, cctools, libtool, discount, exiv2, libepoxy, libxkbcommon, libmaxminddb, libyaml
 , autoSignDarwinBinariesHook, fetchpatch
 }@args:
 
@@ -232,6 +232,12 @@ in
     propagatedBuildInputs = [ gobject-introspection wrapGAppsHook gdk-pixbuf ];
   };
 
+  gdk3 = attrs: {
+    nativeBuildInputs = [ pkg-config bundler rake ]
+      ++ lib.optionals stdenv.isDarwin [ DarwinTools ];
+    propagatedBuildInputs = [ gobject-introspection wrapGAppsHook gdk-pixbuf cairo ];
+  };
+
   gpgme = attrs: {
     buildInputs = [ gpgme ];
     nativeBuildInputs = [ pkg-config ];
@@ -320,6 +326,36 @@ in
     dontStrip = stdenv.isDarwin;
   };
 
+  gtk3 = attrs: {
+    nativeBuildInputs = [
+      binutils
+      pkg-config
+    ] ++ lib.optionals stdenv.isLinux [
+      util-linux
+      libselinux
+      libsepol
+    ] ++ lib.optionals stdenv.isDarwin [ DarwinTools ];
+    propagatedBuildInputs = [
+      atk
+      gdk-pixbuf
+      fribidi
+      gobject-introspection
+      gtk3
+      cairo
+      harfbuzz
+      libdatrie
+      libthai
+      pcre
+      pcre2
+      xorg.libpthreadstubs
+      xorg.libXdmcp
+      xorg.libXtst
+      libxkbcommon
+      libepoxy
+    ];
+    dontStrip = stdenv.isDarwin;
+  };
+
   gobject-introspection = attrs: {
     nativeBuildInputs = [ pkg-config pcre2 ]
       ++ lib.optionals stdenv.isDarwin [ DarwinTools ];
diff --git a/pkgs/development/ruby-modules/with-packages/Gemfile b/pkgs/development/ruby-modules/with-packages/Gemfile
index ebc5d4c0b8e7..86b8618c92d3 100644
--- a/pkgs/development/ruby-modules/with-packages/Gemfile
+++ b/pkgs/development/ruby-modules/with-packages/Gemfile
@@ -66,7 +66,7 @@ gem 'glib2'
 # gem 'gobject-introspection' fails on require
 gem 'gpgme'
 # gem 'grpc' fails to build
-gem 'gtk2'
+gem 'gtk3'
 gem 'hashie'
 gem 'highline'
 gem 'hike'
diff --git a/pkgs/development/tools/build-managers/conan/default.nix b/pkgs/development/tools/build-managers/conan/default.nix
index 9ea57a27f027..a0069cdfda5d 100644
--- a/pkgs/development/tools/build-managers/conan/default.nix
+++ b/pkgs/development/tools/build-managers/conan/default.nix
@@ -9,14 +9,14 @@
 
 python3.pkgs.buildPythonApplication rec {
   pname = "conan";
-  version = "2.0.5";
+  version = "2.0.14";
   format = "setuptools";
 
   src = fetchFromGitHub {
     owner = "conan-io";
     repo = "conan";
     rev = "refs/tags/${version}";
-    hash = "sha256-+ohUOQ9WBER/X0TDklf/qZCm9LhM1I1QRmED4FnkweM=";
+    hash = "sha256-zPN6OlEWYc/OvUb7LHF1/mZYrieG8n2bLcZ/IzwlvtE=";
   };
 
   nativeBuildInputs = with python3.pkgs; [
@@ -45,11 +45,6 @@ python3.pkgs.buildPythonApplication rec {
     pyopenssl
   ];
 
-  pythonRelaxDeps = [
-    # This can be removed once conan is updated to 2.0.7+
-    "PyYAML"
-  ];
-
   nativeCheckInputs = [
     git
     pkg-config
diff --git a/pkgs/development/tools/database/beekeeper-studio/default.nix b/pkgs/development/tools/database/beekeeper-studio/default.nix
deleted file mode 100644
index 6070b5bc32b6..000000000000
--- a/pkgs/development/tools/database/beekeeper-studio/default.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ lib, fetchurl, appimageTools, pkgs, makeWrapper }:
-
-let
-  pname = "beekeeper-studio";
-  version = "3.6.2";
-  name = "${pname}-${version}";
-
-  src = fetchurl {
-    url = "https://github.com/beekeeper-studio/beekeeper-studio/releases/download/v${version}/Beekeeper-Studio-${version}.AppImage";
-    name = "${pname}-${version}.AppImage";
-    hash = "sha512-an4Gqx2mx/rnkLe/LUAz3qRdrqWBcrWcdCiNi8Hz1OKBp1SWN3acU8RppIM0uwlrcBkjnigbbM5DZ2o+svA23A==";
-  };
-
-  appimageContents = appimageTools.extractType2 {
-    inherit name src;
-  };
-in
-appimageTools.wrapType2 {
-  inherit name src;
-
-  multiArch = false; # no 32bit needed
-  extraPkgs = pkgs: appimageTools.defaultFhsEnvArgs.multiPkgs pkgs ++ [ pkgs.bash ];
-
-  extraInstallCommands = ''
-    ln -s $out/bin/${name} $out/bin/${pname}
-    source "${makeWrapper}/nix-support/setup-hook"
-    wrapProgram $out/bin/${pname} \
-        --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--enable-features=UseOzonePlatform --ozone-platform=wayland}}"
-    install -m 444 -D ${appimageContents}/${pname}.desktop $out/share/applications/${pname}.desktop
-    install -m 444 -D ${appimageContents}/${pname}.png \
-      $out/share/icons/hicolor/512x512/apps/${pname}.png
-    substituteInPlace $out/share/applications/${pname}.desktop \
-      --replace 'Exec=AppRun' 'Exec=${pname}'
-
-  '';
-
-  meta = with lib; {
-    description = "Modern and easy to use SQL client for MySQL, Postgres, SQLite, SQL Server, and more. Linux, MacOS, and Windows";
-    homepage = "https://www.beekeeperstudio.io";
-    changelog = "https://github.com/beekeeper-studio/beekeeper-studio/releases/tag/v${version}";
-    license = licenses.mit;
-    maintainers = with maintainers; [ milogert alexnortung ];
-    platforms = [ "x86_64-linux" ];
-  };
-}
diff --git a/pkgs/development/tools/golangci-lint-langserver/default.nix b/pkgs/development/tools/golangci-lint-langserver/default.nix
index be7d55639daa..81b367591a66 100644
--- a/pkgs/development/tools/golangci-lint-langserver/default.nix
+++ b/pkgs/development/tools/golangci-lint-langserver/default.nix
@@ -22,6 +22,7 @@ buildGoModule rec {
     description = "Language server for golangci-lint";
     homepage = "https://github.com/nametake/golangci-lint-langserver";
     license = licenses.mit;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ kirillrdy ];
+    mainProgram = "golangci-lint-langserver";
   };
 }
diff --git a/pkgs/games/atlauncher/default.nix b/pkgs/games/atlauncher/default.nix
index d6e3dc05a802..da98159cde9e 100644
--- a/pkgs/games/atlauncher/default.nix
+++ b/pkgs/games/atlauncher/default.nix
@@ -54,5 +54,6 @@ stdenv.mkDerivation (finalAttrs: {
     license = licenses.gpl3;
     maintainers = [ maintainers.getpsyched ];
     platforms = platforms.all;
+    mainProgram = "atlauncher";
   };
 })
diff --git a/pkgs/games/classicube/default.nix b/pkgs/games/classicube/default.nix
index 96b941490b01..c6805cc58343 100644
--- a/pkgs/games/classicube/default.nix
+++ b/pkgs/games/classicube/default.nix
@@ -97,5 +97,6 @@ stdenv.mkDerivation rec {
     license = licenses.bsd3;
     platforms = platforms.linux;
     maintainers = with maintainers; [ _360ied ];
+    mainProgram = "ClassiCube";
   };
 }
diff --git a/pkgs/games/gamepad-tool/default.nix b/pkgs/games/gamepad-tool/default.nix
index b73a1d4f3c0d..11da7ab16d52 100644
--- a/pkgs/games/gamepad-tool/default.nix
+++ b/pkgs/games/gamepad-tool/default.nix
@@ -42,5 +42,6 @@ stdenvNoCC.mkDerivation (finalAttrs: {
     license = licenses.unfree;
     platforms = [ "x86_64-linux" ];
     maintainers = with maintainers; [ gador ];
+    mainProgram = "gamepad-tool";
   };
 })
diff --git a/pkgs/games/ivan/default.nix b/pkgs/games/ivan/default.nix
index 21f071af379b..30620bea710b 100644
--- a/pkgs/games/ivan/default.nix
+++ b/pkgs/games/ivan/default.nix
@@ -65,5 +65,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [];
+    mainProgram = "ivan";
   };
 }
diff --git a/pkgs/games/mudlet/default.nix b/pkgs/games/mudlet/default.nix
index 52990a2d5eab..39faa5d4fb9b 100644
--- a/pkgs/games/mudlet/default.nix
+++ b/pkgs/games/mudlet/default.nix
@@ -130,5 +130,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ wyvie pstn cpu ];
     platforms = platforms.linux;
     license = licenses.gpl2Plus;
+    mainProgram = "mudlet";
   };
 }
diff --git a/pkgs/games/rili/default.nix b/pkgs/games/rili/default.nix
index 7c47166eab56..b02cf7e5dea0 100644
--- a/pkgs/games/rili/default.nix
+++ b/pkgs/games/rili/default.nix
@@ -37,5 +37,6 @@ to win.
     '';
     maintainers = with lib.maintainers; [ jcumming ];
     platforms = with lib.platforms; linux;
+    mainProgram = "Ri_li";
   };
 }
diff --git a/pkgs/games/steam-tui/default.nix b/pkgs/games/steam-tui/default.nix
index 63deb3b969ce..769553a69422 100644
--- a/pkgs/games/steam-tui/default.nix
+++ b/pkgs/games/steam-tui/default.nix
@@ -41,5 +41,6 @@ rustPlatform.buildRustPackage rec {
     maintainers = with maintainers; [ lom ];
     # steam only supports that platform
     platforms = [ "x86_64-linux" ];
+    mainProgram = "steam-tui";
   };
 }
diff --git a/pkgs/games/stepmania/default.nix b/pkgs/games/stepmania/default.nix
index 3ba39fde9c6c..65b9bfff189e 100644
--- a/pkgs/games/stepmania/default.nix
+++ b/pkgs/games/stepmania/default.nix
@@ -48,5 +48,6 @@ stdenv.mkDerivation rec {
     maintainers = [ ];
     # never built on aarch64-linux since first introduction in nixpkgs
     broken = stdenv.isLinux && stdenv.isAarch64;
+    mainProgram = "stepmania";
   };
 }
diff --git a/pkgs/games/teetertorture/default.nix b/pkgs/games/teetertorture/default.nix
index 6e18dbae07b2..b87faf6cea0b 100644
--- a/pkgs/games/teetertorture/default.nix
+++ b/pkgs/games/teetertorture/default.nix
@@ -29,5 +29,6 @@ stdenv.mkDerivation rec {
     description = "Simple shooting game with your cannon is sitting atop a teeter totter";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
+    mainProgram = "teetertorture";
   };
 }
diff --git a/pkgs/games/xbill/default.nix b/pkgs/games/xbill/default.nix
index ac387a4a8c02..05314e6911b9 100644
--- a/pkgs/games/xbill/default.nix
+++ b/pkgs/games/xbill/default.nix
@@ -44,5 +44,6 @@ stdenv.mkDerivation rec {
       Wingdows [TM], a virus cleverly designed to resemble a popular
       operating system.
     '';
+    mainProgram = "xbill";
   };
 }
diff --git a/pkgs/games/zaz/default.nix b/pkgs/games/zaz/default.nix
index 84db2a1356c6..3b6c7244507c 100644
--- a/pkgs/games/zaz/default.nix
+++ b/pkgs/games/zaz/default.nix
@@ -54,6 +54,7 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3;
     maintainers = with maintainers; [ fgaz ];
     platforms = platforms.all;
+    mainProgram = "zaz";
   };
 }
 
diff --git a/pkgs/games/zoom/default.nix b/pkgs/games/zoom/default.nix
index 8524ea601b47..275aca235209 100644
--- a/pkgs/games/zoom/default.nix
+++ b/pkgs/games/zoom/default.nix
@@ -45,5 +45,6 @@ stdenv.mkDerivation rec {
     '';
     license = licenses.gpl3;
     platforms = platforms.linux;
+    mainProgram = "zoom";
   };
 }
diff --git a/pkgs/misc/ananicy-cpp/default.nix b/pkgs/misc/ananicy-cpp/default.nix
index 6d21f219c463..9a771a470339 100644
--- a/pkgs/misc/ananicy-cpp/default.nix
+++ b/pkgs/misc/ananicy-cpp/default.nix
@@ -65,5 +65,6 @@ clangStdenv.mkDerivation rec {
     license = licenses.gpl3Only;
     platforms = platforms.linux;
     maintainers = with maintainers; [ artturin ];
+    mainProgram = "ananicy-cpp";
   };
 }
diff --git a/pkgs/misc/ananicy/default.nix b/pkgs/misc/ananicy/default.nix
index 62daaad2c604..9567f2d4d0f7 100644
--- a/pkgs/misc/ananicy/default.nix
+++ b/pkgs/misc/ananicy/default.nix
@@ -48,5 +48,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Only;
     platforms = platforms.linux;
     maintainers = with maintainers; [ artturin ];
+    mainProgram = "ananicy";
   };
 }
diff --git a/pkgs/misc/apulse/default.nix b/pkgs/misc/apulse/default.nix
index 95beb8bcdf3f..00b53851b829 100644
--- a/pkgs/misc/apulse/default.nix
+++ b/pkgs/misc/apulse/default.nix
@@ -29,5 +29,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = [ maintainers.jagajaga ];
+    mainProgram = "apulse";
   };
 }
diff --git a/pkgs/misc/autoadb/default.nix b/pkgs/misc/autoadb/default.nix
index 25043e9d45d6..8832d314df85 100644
--- a/pkgs/misc/autoadb/default.nix
+++ b/pkgs/misc/autoadb/default.nix
@@ -18,5 +18,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/rom1v/autoadb";
     license = licenses.asl20;
     maintainers = with maintainers; [ shawn8901 ];
+    mainProgram = "autoadb";
   };
 }
diff --git a/pkgs/misc/autotiling-rs/default.nix b/pkgs/misc/autotiling-rs/default.nix
index 6e0ffebf0323..094694016679 100644
--- a/pkgs/misc/autotiling-rs/default.nix
+++ b/pkgs/misc/autotiling-rs/default.nix
@@ -19,5 +19,6 @@ rustPlatform.buildRustPackage rec {
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = with maintainers; [ dit7ya ];
+    mainProgram = "autotiling-rs";
   };
 }
diff --git a/pkgs/misc/autotiling/default.nix b/pkgs/misc/autotiling/default.nix
index a24095759f02..301712a1f1df 100644
--- a/pkgs/misc/autotiling/default.nix
+++ b/pkgs/misc/autotiling/default.nix
@@ -20,6 +20,7 @@ buildPythonApplication rec {
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ artturin ];
+    mainProgram = "autotiling";
   };
 }
 
diff --git a/pkgs/misc/doge/default.nix b/pkgs/misc/doge/default.nix
index c82456d8ee53..3fbf5992ade7 100644
--- a/pkgs/misc/doge/default.nix
+++ b/pkgs/misc/doge/default.nix
@@ -14,5 +14,6 @@ python3Packages.buildPythonPackage rec {
     description = "wow very terminal doge";
     license = licenses.mit;
     maintainers = with maintainers; [ Gonzih ];
+    mainProgram = "doge";
   };
 }
diff --git a/pkgs/misc/fastly/default.nix b/pkgs/misc/fastly/default.nix
index ca191319243f..1bed7e8ab2e1 100644
--- a/pkgs/misc/fastly/default.nix
+++ b/pkgs/misc/fastly/default.nix
@@ -78,5 +78,6 @@ buildGoModule rec {
     changelog = "https://github.com/fastly/cli/blob/v${version}/CHANGELOG.md";
     license = licenses.asl20;
     maintainers = with maintainers; [ ereslibre shyim ];
+    mainProgram = "fastly";
   };
 }
diff --git a/pkgs/misc/frescobaldi/default.nix b/pkgs/misc/frescobaldi/default.nix
index 57baeb7fe828..2c49c5779752 100644
--- a/pkgs/misc/frescobaldi/default.nix
+++ b/pkgs/misc/frescobaldi/default.nix
@@ -57,5 +57,6 @@ buildPythonApplication rec {
     maintainers = with maintainers; [ sepi ];
     platforms = platforms.all;
     broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/frescobaldi.x86_64-darwin
+    mainProgram = "frescobaldi";
   };
 }
diff --git a/pkgs/misc/lightspark/default.nix b/pkgs/misc/lightspark/default.nix
index 29baa653d3f1..904028feddaa 100644
--- a/pkgs/misc/lightspark/default.nix
+++ b/pkgs/misc/lightspark/default.nix
@@ -30,5 +30,6 @@ stdenv.mkDerivation rec {
     license = licenses.lgpl3Plus;
     maintainers = with maintainers; [ jchw ];
     platforms = platforms.linux;
+    mainProgram = "lightspark";
   };
 }
diff --git a/pkgs/misc/long-shebang/default.nix b/pkgs/misc/long-shebang/default.nix
index 6ad7c8496ed5..34ad0350771f 100644
--- a/pkgs/misc/long-shebang/default.nix
+++ b/pkgs/misc/long-shebang/default.nix
@@ -17,5 +17,6 @@ in stdenv.mkDerivation {
     license = lib.licenses.mit;
 
     platforms = lib.platforms.unix;
+    mainProgram = "long-shebang";
   };
 }
diff --git a/pkgs/misc/lssecret/default.nix b/pkgs/misc/lssecret/default.nix
index f27bb538d19a..2e5169974fc1 100644
--- a/pkgs/misc/lssecret/default.nix
+++ b/pkgs/misc/lssecret/default.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.unlicense;
     maintainers = with lib.maintainers; [ genericnerdyusername ];
     platforms = lib.platforms.unix;
+    mainProgram = "lssecret";
   };
 }
diff --git a/pkgs/misc/moonfire-nvr/default.nix b/pkgs/misc/moonfire-nvr/default.nix
index 8c9de0e7da9d..0946161ce52f 100644
--- a/pkgs/misc/moonfire-nvr/default.nix
+++ b/pkgs/misc/moonfire-nvr/default.nix
@@ -76,5 +76,6 @@ in rustPlatform.buildRustPackage {
     changelog = "https://github.com/scottlamb/moonfire-nvr/releases/tag/v${version}";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ gaelreyrol ];
+    mainProgram = "moonfire-nvr";
   };
 }
diff --git a/pkgs/misc/mxt-app/default.nix b/pkgs/misc/mxt-app/default.nix
index 7695f3cebefd..0f231bfd2f54 100644
--- a/pkgs/misc/mxt-app/default.nix
+++ b/pkgs/misc/mxt-app/default.nix
@@ -22,5 +22,6 @@ stdenv.mkDerivation rec {
     license = licenses.bsd2;
     maintainers = [ maintainers.colemickens ];
     platforms = platforms.linux;
+    mainProgram = "mxt-app";
   };
 }
diff --git a/pkgs/misc/nflz/default.nix b/pkgs/misc/nflz/default.nix
index 10a87f85b117..3d455d908073 100644
--- a/pkgs/misc/nflz/default.nix
+++ b/pkgs/misc/nflz/default.nix
@@ -30,5 +30,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/phip1611/nflz";
     license = with lib.licenses; [ mit ];
     maintainers = with lib.maintainers; [ phip1611 ];
+    mainProgram = "nflz";
   };
 }
diff --git a/pkgs/misc/opcua-client-gui/default.nix b/pkgs/misc/opcua-client-gui/default.nix
index 361b2627c973..962d48be8f8e 100644
--- a/pkgs/misc/opcua-client-gui/default.nix
+++ b/pkgs/misc/opcua-client-gui/default.nix
@@ -56,5 +56,6 @@ python3Packages.buildPythonApplication rec {
     platforms = platforms.unix;
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ janik ];
+    mainProgram = "opcua-client";
   };
 }
diff --git a/pkgs/misc/plasma-hud/default.nix b/pkgs/misc/plasma-hud/default.nix
index 4116751f4fec..c0cf771da849 100644
--- a/pkgs/misc/plasma-hud/default.nix
+++ b/pkgs/misc/plasma-hud/default.nix
@@ -37,5 +37,6 @@ python3.pkgs.buildPythonApplication rec{
     platforms = platforms.unix;
     description = "Run menubar commands, much like the Unity 7 Heads-Up Display (HUD)";
     maintainers = with maintainers; [ pasqui23 ];
+    mainProgram = "plasma-hud";
   };
 }
diff --git a/pkgs/misc/present/default.nix b/pkgs/misc/present/default.nix
index 7ecf61837c59..6ed15f03e6e4 100644
--- a/pkgs/misc/present/default.nix
+++ b/pkgs/misc/present/default.nix
@@ -27,5 +27,6 @@ python3Packages.buildPythonPackage rec {
     homepage = "https://github.com/vinayak-mehta/present";
     license = licenses.asl20;
     maintainers = with maintainers; [ lom ];
+    mainProgram = "present";
   };
 }
diff --git a/pkgs/misc/ptouch-print/default.nix b/pkgs/misc/ptouch-print/default.nix
index f9889cfe4bef..da0d3c8c97d3 100644
--- a/pkgs/misc/ptouch-print/default.nix
+++ b/pkgs/misc/ptouch-print/default.nix
@@ -30,5 +30,6 @@ stdenv.mkDerivation rec {
     homepage = "https://mockmoon-cybernetics.ch/computer/p-touch2430pc/";
     maintainers = with maintainers; [ shamilton ];
     platforms = platforms.linux;
+    mainProgram = "ptouch-print";
   };
 }
diff --git a/pkgs/misc/pylode/default.nix b/pkgs/misc/pylode/default.nix
index 581baf0e9c80..7212da7b867f 100644
--- a/pkgs/misc/pylode/default.nix
+++ b/pkgs/misc/pylode/default.nix
@@ -45,5 +45,6 @@ python3.pkgs.buildPythonApplication rec {
     # Next release will move to BSD3
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ koslambrou ];
+    mainProgram = "pylode";
   };
 }
diff --git a/pkgs/misc/rich-cli/default.nix b/pkgs/misc/rich-cli/default.nix
index a7fb03e11ad4..9d03cfc66917 100644
--- a/pkgs/misc/rich-cli/default.nix
+++ b/pkgs/misc/rich-cli/default.nix
@@ -75,5 +75,6 @@ python3.pkgs.buildPythonApplication rec {
     changelog = "https://github.com/Textualize/rich-cli/releases/tag/v${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ joelkoen ];
+    mainProgram = "rich";
   };
 }
diff --git a/pkgs/misc/rivalcfg/default.nix b/pkgs/misc/rivalcfg/default.nix
index 737a3839d7a0..f6b45af3af34 100644
--- a/pkgs/misc/rivalcfg/default.nix
+++ b/pkgs/misc/rivalcfg/default.nix
@@ -36,5 +36,6 @@ python3Packages.buildPythonPackage rec {
     homepage = "https://github.com/flozz/rivalcfg";
     license = licenses.wtfpl;
     maintainers = with maintainers; [ ornxka ];
+    mainProgram = "rivalcfg";
   };
 }
diff --git a/pkgs/misc/rkdeveloptool-pine64/default.nix b/pkgs/misc/rkdeveloptool-pine64/default.nix
index d9de20bcf447..b70298ded96a 100644
--- a/pkgs/misc/rkdeveloptool-pine64/default.nix
+++ b/pkgs/misc/rkdeveloptool-pine64/default.nix
@@ -40,5 +40,6 @@ stdenv.mkDerivation {
       description = "A tool from Rockchip to communicate with Rockusb devices (pine64 fork)";
       license = lib.licenses.gpl2;
       maintainers = [ maintainers.adisbladis ];
+      mainProgram = "rkdeveloptool";
     };
 }
diff --git a/pkgs/misc/rkdeveloptool/default.nix b/pkgs/misc/rkdeveloptool/default.nix
index a07748fbe263..341232e8cf19 100644
--- a/pkgs/misc/rkdeveloptool/default.nix
+++ b/pkgs/misc/rkdeveloptool/default.nix
@@ -23,5 +23,6 @@ stdenv.mkDerivation {
     description = "A tool from Rockchip to communicate with Rockusb devices";
     license = licenses.gpl2;
     maintainers = [ maintainers.lopsided98 ];
+    mainProgram = "rkdeveloptool";
   };
 }
diff --git a/pkgs/misc/sailsd/default.nix b/pkgs/misc/sailsd/default.nix
index d2f91c42638a..50eb8e61ca32 100644
--- a/pkgs/misc/sailsd/default.nix
+++ b/pkgs/misc/sailsd/default.nix
@@ -44,5 +44,6 @@ stdenv.mkDerivation rec {
       boat'';
     maintainers = with maintainers; [ kragniz ];
     platforms = platforms.all;
+    mainProgram = "sailsd";
   };
 }
diff --git a/pkgs/misc/scrcpy/default.nix b/pkgs/misc/scrcpy/default.nix
index 78479199b140..8630cc859917 100644
--- a/pkgs/misc/scrcpy/default.nix
+++ b/pkgs/misc/scrcpy/default.nix
@@ -74,5 +74,6 @@ stdenv.mkDerivation rec {
     license = licenses.asl20;
     platforms = platforms.unix;
     maintainers = with maintainers; [ deltaevo msfjarvis ];
+    mainProgram = "scrcpy";
   };
 }
diff --git a/pkgs/misc/solfege/default.nix b/pkgs/misc/solfege/default.nix
index 64ddfae7b326..63606078abad 100644
--- a/pkgs/misc/solfege/default.nix
+++ b/pkgs/misc/solfege/default.nix
@@ -69,5 +69,6 @@ buildPythonApplication rec {
     license = licenses.gpl3Only;
     platforms = platforms.linux;
     maintainers = with maintainers; [ bjornfor orivej anthonyroussel ];
+    mainProgram = "solfege";
   };
 }
diff --git a/pkgs/misc/t-rec/default.nix b/pkgs/misc/t-rec/default.nix
index 3d6317f71c0d..ac99abb7e5cd 100644
--- a/pkgs/misc/t-rec/default.nix
+++ b/pkgs/misc/t-rec/default.nix
@@ -33,5 +33,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/sassman/t-rec-rs";
     license = with licenses; [ gpl3Only ];
     maintainers = with maintainers; [ hoverbear matthiasbeyer ];
+    mainProgram = "t-rec";
   };
 }
diff --git a/pkgs/misc/tpm2-pkcs11/default.nix b/pkgs/misc/tpm2-pkcs11/default.nix
index 91b7c31eb323..3898c9880c53 100644
--- a/pkgs/misc/tpm2-pkcs11/default.nix
+++ b/pkgs/misc/tpm2-pkcs11/default.nix
@@ -81,5 +81,6 @@ stdenv.mkDerivation rec {
     license = licenses.bsd2;
     platforms = platforms.linux;
     maintainers = with maintainers; [ matthiasbeyer ];
+    mainProgram = "tpm2_ptool";
   };
 }
diff --git a/pkgs/misc/uq/default.nix b/pkgs/misc/uq/default.nix
index 81c09685be8b..a4c9a7d92fb4 100644
--- a/pkgs/misc/uq/default.nix
+++ b/pkgs/misc/uq/default.nix
@@ -21,5 +21,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/lostutils/uq";
     license = licenses.mit;
     maintainers = with maintainers; [ doronbehar matthiasbeyer ];
+    mainProgram = "uq";
   };
 }
diff --git a/pkgs/misc/urbit/default.nix b/pkgs/misc/urbit/default.nix
index 3a9488a5951a..fe31ca17f6aa 100644
--- a/pkgs/misc/urbit/default.nix
+++ b/pkgs/misc/urbit/default.nix
@@ -35,5 +35,6 @@ stdenv.mkDerivation rec {
     maintainers = [ maintainers.matthew-levan ];
     license = licenses.mit;
     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+    mainProgram = "urbit";
   };
 }
diff --git a/pkgs/misc/wiki-tui/default.nix b/pkgs/misc/wiki-tui/default.nix
index fcc93c4b5c7b..e3c6a4f2bb10 100644
--- a/pkgs/misc/wiki-tui/default.nix
+++ b/pkgs/misc/wiki-tui/default.nix
@@ -38,5 +38,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/Builditluc/wiki-tui/releases/tag/v${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ lom builditluc matthiasbeyer ];
+    mainProgram = "wiki-tui";
   };
 }
diff --git a/pkgs/misc/zeyple/default.nix b/pkgs/misc/zeyple/default.nix
index 18c938453715..fd5f628676ae 100644
--- a/pkgs/misc/zeyple/default.nix
+++ b/pkgs/misc/zeyple/default.nix
@@ -23,5 +23,6 @@ python3Packages.buildPythonApplication rec {
     homepage = "https://infertux.com/labs/zeyple/";
     maintainers = with maintainers; [ ettom ];
     license = licenses.agpl3Plus;
+    mainProgram = "zeyple";
   };
 }
diff --git a/pkgs/servers/alice-lg/default.nix b/pkgs/servers/alice-lg/default.nix
index c81ca8f5c121..09412bb2ccf8 100644
--- a/pkgs/servers/alice-lg/default.nix
+++ b/pkgs/servers/alice-lg/default.nix
@@ -83,5 +83,6 @@ buildGoModule rec {
     changelog = "https://github.com/alice-lg/alice-lg/blob/main/CHANGELOG.md";
     license = licenses.bsd3;
     maintainers = with maintainers; [ janik ];
+    mainProgram = "alice-lg";
   };
 }
diff --git a/pkgs/servers/allmark/default.nix b/pkgs/servers/allmark/default.nix
index 1e5b58dc6b19..be87468b3a95 100644
--- a/pkgs/servers/allmark/default.nix
+++ b/pkgs/servers/allmark/default.nix
@@ -23,5 +23,6 @@ buildGoPackage rec {
     changelog = "https://github.com/andreaskoch/allmark/-/releases/v${version}";
     license = licenses.bsd3;
     maintainers = with maintainers; [ urandom ];
+    mainProgram = "allmark";
   };
 }
diff --git a/pkgs/servers/antennas/default.nix b/pkgs/servers/antennas/default.nix
index c381cde64879..f9db26ab93e4 100644
--- a/pkgs/servers/antennas/default.nix
+++ b/pkgs/servers/antennas/default.nix
@@ -33,5 +33,6 @@ buildNpmPackage rec {
     homepage = "https://github.com/jfarseneau/antennas";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ bachp ];
+    mainProgram = "antennas";
   };
 }
diff --git a/pkgs/servers/asouldocs/default.nix b/pkgs/servers/asouldocs/default.nix
index cf0c5f48e007..df6a5e3012fd 100644
--- a/pkgs/servers/asouldocs/default.nix
+++ b/pkgs/servers/asouldocs/default.nix
@@ -18,5 +18,6 @@ buildGoModule rec {
     homepage = "https://asouldocs.dev/";
     license = licenses.mit;
     maintainers = with maintainers; [ ivar anthonyroussel ];
+    mainProgram = "asouldocs";
   };
 }
diff --git a/pkgs/servers/audiobookshelf/default.nix b/pkgs/servers/audiobookshelf/default.nix
index 500f0882796e..626f5639adc6 100644
--- a/pkgs/servers/audiobookshelf/default.nix
+++ b/pkgs/servers/audiobookshelf/default.nix
@@ -72,5 +72,6 @@ in buildNpmPackage {
     license = licenses.gpl3;
     maintainers = [ maintainers.jvanbruegge ];
     platforms = platforms.linux;
+    mainProgram = "audiobookshelf";
   };
 }
diff --git a/pkgs/servers/authelia/default.nix b/pkgs/servers/authelia/default.nix
index 4a2ed9bd5729..2eb1b4f6ac78 100644
--- a/pkgs/servers/authelia/default.nix
+++ b/pkgs/servers/authelia/default.nix
@@ -73,5 +73,6 @@ buildGoModule rec {
     '';
     license = licenses.asl20;
     maintainers = with maintainers; [ jk raitobezarius dit7ya ];
+    mainProgram = "authelia";
   };
 }
diff --git a/pkgs/servers/baserow/default.nix b/pkgs/servers/baserow/default.nix
index 34fba145c9c4..dfb5ea5bf91f 100644
--- a/pkgs/servers/baserow/default.nix
+++ b/pkgs/servers/baserow/default.nix
@@ -154,5 +154,6 @@ with python.pkgs; buildPythonApplication rec {
     homepage = "https://baserow.io";
     license = licenses.mit;
     maintainers = with maintainers; [ onny ];
+    mainProgram = "baserow";
   };
 }
diff --git a/pkgs/servers/binserve/default.nix b/pkgs/servers/binserve/default.nix
index 23ebe0c270f8..b8732b51587a 100644
--- a/pkgs/servers/binserve/default.nix
+++ b/pkgs/servers/binserve/default.nix
@@ -33,5 +33,6 @@ rustPlatform.buildRustPackage rec {
     license = licenses.mit;
     maintainers = with maintainers; [ snapdgn ];
     platforms = platforms.unix;
+    mainProgram = "binserve";
   };
 }
diff --git a/pkgs/servers/birdwatcher/default.nix b/pkgs/servers/birdwatcher/default.nix
index 38a53e89ffe4..f3b816a7a2c3 100644
--- a/pkgs/servers/birdwatcher/default.nix
+++ b/pkgs/servers/birdwatcher/default.nix
@@ -24,5 +24,6 @@ buildGoModule rec {
     changelog = "https://github.com/alice-lg/birdwatcher/blob/master/CHANGELOG";
     license = licenses.bsd3;
     maintainers = with maintainers; [ janik ];
+    mainProgram = "birdwatcher";
   };
 }
diff --git a/pkgs/servers/confluencepot/default.nix b/pkgs/servers/confluencepot/default.nix
index 4b807401a299..d1aa0031f20f 100644
--- a/pkgs/servers/confluencepot/default.nix
+++ b/pkgs/servers/confluencepot/default.nix
@@ -40,5 +40,6 @@ buildGoModule rec {
     '';
     license = with licenses; [ agpl3Plus ];
     maintainers = with maintainers; [ fab ];
+    mainProgram = "confluencepot";
   };
 }
diff --git a/pkgs/servers/db-rest/default.nix b/pkgs/servers/db-rest/default.nix
index 7fda8f978f1d..8eab440e523b 100644
--- a/pkgs/servers/db-rest/default.nix
+++ b/pkgs/servers/db-rest/default.nix
@@ -40,5 +40,6 @@ buildNpmPackage rec {
     homepage = "https://v6.db.transport.rest/";
     license = lib.licenses.isc;
     maintainers = with lib.maintainers; [ marie ];
+    mainProgram = "db-rest";
   };
 }
diff --git a/pkgs/servers/eris-go/default.nix b/pkgs/servers/eris-go/default.nix
index dc6d72bba342..a215a59d547a 100644
--- a/pkgs/servers/eris-go/default.nix
+++ b/pkgs/servers/eris-go/default.nix
@@ -24,5 +24,6 @@ buildGoModule rec {
     license = lib.licenses.bsd3;
     maintainers = with lib.maintainers; [ ehmry ];
     broken = stdenv.isDarwin;
+    mainProgram = "eris-go";
   };
 }
diff --git a/pkgs/servers/gnss-share/default.nix b/pkgs/servers/gnss-share/default.nix
index 14aa294da503..8b24964ae824 100644
--- a/pkgs/servers/gnss-share/default.nix
+++ b/pkgs/servers/gnss-share/default.nix
@@ -22,5 +22,6 @@ buildGoModule rec {
     '';
     license = licenses.gpl3;
     maintainers = with maintainers; [ balsoft ];
+    mainProgram = "gnss-share";
   };
 }
diff --git a/pkgs/servers/go-autoconfig/default.nix b/pkgs/servers/go-autoconfig/default.nix
index 73a809613c9d..1fe09a03a0dd 100644
--- a/pkgs/servers/go-autoconfig/default.nix
+++ b/pkgs/servers/go-autoconfig/default.nix
@@ -25,5 +25,6 @@ buildGoModule rec {
     homepage = "https://github.com/L11R/go-autoconfig";
     license = licenses.mit;
     maintainers = with maintainers; [ onny ];
+    mainProgram = "go-autoconfig";
   };
 }
diff --git a/pkgs/servers/hiraeth/default.nix b/pkgs/servers/hiraeth/default.nix
index c31b8c464152..c69ec6ac34fa 100644
--- a/pkgs/servers/hiraeth/default.nix
+++ b/pkgs/servers/hiraeth/default.nix
@@ -20,5 +20,6 @@ buildGoModule rec {
     description = "Share files with an expiration date";
     license = lib.licenses.agpl3Plus;
     maintainers = [ lib.maintainers.lukaswrz ];
+    mainProgram = "hiraeth";
   };
 }
diff --git a/pkgs/servers/imaginary/default.nix b/pkgs/servers/imaginary/default.nix
index 8ab50dc957a6..4632647ed93e 100644
--- a/pkgs/servers/imaginary/default.nix
+++ b/pkgs/servers/imaginary/default.nix
@@ -47,5 +47,6 @@ buildGoModule rec {
     description = "Fast, simple, scalable, Docker-ready HTTP microservice for high-level image processing";
     license = licenses.mit;
     maintainers = with maintainers; [ dotlambda urandom ];
+    mainProgram = "imaginary";
   };
 }
diff --git a/pkgs/servers/jellyseerr/default.nix b/pkgs/servers/jellyseerr/default.nix
index 7c361f580d89..ca8e93753e69 100644
--- a/pkgs/servers/jellyseerr/default.nix
+++ b/pkgs/servers/jellyseerr/default.nix
@@ -85,5 +85,6 @@ mkYarnPackage rec {
     license = licenses.mit;
     maintainers = with maintainers; [ camillemndn ];
     platforms = platforms.linux;
+    mainProgram = "jellyseerr";
   };
 }
diff --git a/pkgs/servers/jitsi-excalidraw/default.nix b/pkgs/servers/jitsi-excalidraw/default.nix
index bb8bb6c2dfa7..4fa9a55e2082 100644
--- a/pkgs/servers/jitsi-excalidraw/default.nix
+++ b/pkgs/servers/jitsi-excalidraw/default.nix
@@ -36,5 +36,6 @@ buildNpmPackage rec {
     homepage = "https://github.com/jitsi/excalidraw-backend";
     license = licenses.mit;
     maintainers = with maintainers; [ camillemndn ];
+    mainProgram = "jitsi-excalidraw-backend";
   };
 }
diff --git a/pkgs/servers/komga/default.nix b/pkgs/servers/komga/default.nix
index fbb8b38d5ee0..f29a9b5f701e 100644
--- a/pkgs/servers/komga/default.nix
+++ b/pkgs/servers/komga/default.nix
@@ -33,6 +33,7 @@ stdenvNoCC.mkDerivation rec {
     license = licenses.mit;
     platforms = jdk17_headless.meta.platforms;
     maintainers = with maintainers; [ govanify ];
+    mainProgram = "komga";
   };
 
 }
diff --git a/pkgs/servers/lenpaste/default.nix b/pkgs/servers/lenpaste/default.nix
index 50e950e98a03..d9e4aa9b5ed9 100644
--- a/pkgs/servers/lenpaste/default.nix
+++ b/pkgs/servers/lenpaste/default.nix
@@ -31,5 +31,6 @@ buildGoModule rec {
     homepage = "https://git.lcomrade.su/root/lenpaste";
     license = licenses.agpl3Plus;
     maintainers = with maintainers; [ vector1dev ];
+    mainProgram = "lenpaste";
   };
 }
diff --git a/pkgs/servers/mautrix-discord/default.nix b/pkgs/servers/mautrix-discord/default.nix
index 32e4e20b62c7..4ddb9abe9ecd 100644
--- a/pkgs/servers/mautrix-discord/default.nix
+++ b/pkgs/servers/mautrix-discord/default.nix
@@ -40,5 +40,6 @@ buildGoModule rec {
     changelog = "https://github.com/mautrix/discord/blob/${src.rev}/CHANGELOG.md";
     license = licenses.agpl3Only;
     maintainers = with maintainers; [ MoritzBoehme ];
+    mainProgram = "mautrix-discord";
   };
 }
diff --git a/pkgs/servers/mautrix-googlechat/default.nix b/pkgs/servers/mautrix-googlechat/default.nix
index 41a72eec0595..3c5861f16647 100644
--- a/pkgs/servers/mautrix-googlechat/default.nix
+++ b/pkgs/servers/mautrix-googlechat/default.nix
@@ -68,5 +68,6 @@
     license = licenses.agpl3Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ arcnmx ];
+    mainProgram = "mautrix-googlechat";
   };
 }
diff --git a/pkgs/servers/mautrix-telegram/default.nix b/pkgs/servers/mautrix-telegram/default.nix
index 4ce5ce1c1c45..b82475fa07ae 100644
--- a/pkgs/servers/mautrix-telegram/default.nix
+++ b/pkgs/servers/mautrix-telegram/default.nix
@@ -78,5 +78,6 @@ python.pkgs.buildPythonPackage rec {
     license = licenses.agpl3Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ nyanloutre ma27 nickcao ];
+    mainProgram = "mautrix-telegram";
   };
 }
diff --git a/pkgs/servers/mbusd/default.nix b/pkgs/servers/mbusd/default.nix
index 7db22dab8e34..51441f6514cd 100644
--- a/pkgs/servers/mbusd/default.nix
+++ b/pkgs/servers/mbusd/default.nix
@@ -20,5 +20,6 @@ stdenv.mkDerivation rec {
     license = licenses.bsd3;
     maintainers = with maintainers; [ sikmir ];
     platforms = platforms.unix;
+    mainProgram = "mbusd";
   };
 }
diff --git a/pkgs/servers/memos/default.nix b/pkgs/servers/memos/default.nix
index 191db9358329..1e8b53fe96dc 100644
--- a/pkgs/servers/memos/default.nix
+++ b/pkgs/servers/memos/default.nix
@@ -49,5 +49,6 @@ buildGoModule rec {
     description = "A lightweight, self-hosted memo hub";
     maintainers = with maintainers; [ indexyz ];
     license = licenses.mit;
+    mainProgram = "memos";
   };
 }
diff --git a/pkgs/servers/microbin/default.nix b/pkgs/servers/microbin/default.nix
index 163b4ba7d800..d829f14bb5c4 100644
--- a/pkgs/servers/microbin/default.nix
+++ b/pkgs/servers/microbin/default.nix
@@ -82,5 +82,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/szabodanika/microbin/releases/tag/v${version}";
     license = licenses.bsd3;
     maintainers = with maintainers; [ dit7ya figsoda ];
+    mainProgram = "microbin";
   };
 }
diff --git a/pkgs/servers/miniflux/default.nix b/pkgs/servers/miniflux/default.nix
index 85038a616450..e71a8fa4c577 100644
--- a/pkgs/servers/miniflux/default.nix
+++ b/pkgs/servers/miniflux/default.nix
@@ -45,5 +45,6 @@ in buildGo121Module {
     homepage = "https://miniflux.app/";
     license = licenses.asl20;
     maintainers = with maintainers; [ rvolosatovs benpye ];
+    mainProgram = "miniflux";
   };
 }
diff --git a/pkgs/servers/minio/default.nix b/pkgs/servers/minio/default.nix
index 5d572c18e253..bc61b99f0453 100644
--- a/pkgs/servers/minio/default.nix
+++ b/pkgs/servers/minio/default.nix
@@ -57,5 +57,6 @@ buildGoModule rec {
     changelog = "https://github.com/minio/minio/releases/tag/RELEASE.${version}";
     maintainers = with maintainers; [ eelco bachp ];
     license = licenses.agpl3Plus;
+    mainProgram = "minio";
   };
 }
diff --git a/pkgs/servers/mirrorbits/default.nix b/pkgs/servers/mirrorbits/default.nix
index c7b29036a416..3bd72b0e7dad 100644
--- a/pkgs/servers/mirrorbits/default.nix
+++ b/pkgs/servers/mirrorbits/default.nix
@@ -48,5 +48,6 @@ buildGoModule rec {
     '';
     license = licenses.mit;
     maintainers = with maintainers; [ fpletz ];
+    mainProgram = "mirrorbits";
   };
 }
diff --git a/pkgs/servers/mjolnir/default.nix b/pkgs/servers/mjolnir/default.nix
index 562a6c83ae3f..4b450a8450f4 100644
--- a/pkgs/servers/mjolnir/default.nix
+++ b/pkgs/servers/mjolnir/default.nix
@@ -72,5 +72,6 @@ mkYarnPackage rec {
     '';
     license = licenses.asl20;
     maintainers = with maintainers; [ jojosch ];
+    mainProgram = "mjolnir";
   };
 }
diff --git a/pkgs/servers/monitoring/nagios/default.nix b/pkgs/servers/monitoring/nagios/default.nix
index 6f357ccb08c8..442eed82478e 100644
--- a/pkgs/servers/monitoring/nagios/default.nix
+++ b/pkgs/servers/monitoring/nagios/default.nix
@@ -14,13 +14,13 @@
 
 stdenv.mkDerivation rec {
   pname = "nagios";
-  version = "4.4.14";
+  version = "4.5.0";
 
   src = fetchFromGitHub {
     owner = "NagiosEnterprises";
     repo = "nagioscore";
     rev = "refs/tags/nagios-${version}";
-    hash = "sha256-EJKMgU3Nzfefq2VXxBrfDDrQZWZvj7HqKnWR9j75fGI=";
+    hash = "sha256-km0vB/bopysS7eejDFDKaonXzTzBonIqiw1T+C2lKiQ=";
   };
 
   patches = [ ./nagios.patch ];
diff --git a/pkgs/servers/moonraker/default.nix b/pkgs/servers/moonraker/default.nix
index 8d33402d7d34..b9435de2aeba 100644
--- a/pkgs/servers/moonraker/default.nix
+++ b/pkgs/servers/moonraker/default.nix
@@ -52,5 +52,6 @@ in stdenvNoCC.mkDerivation rec {
     homepage = "https://github.com/Arksine/moonraker";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ zhaofengli ];
+    mainProgram = "moonraker";
   };
 }
diff --git a/pkgs/servers/mpd/default.nix b/pkgs/servers/mpd/default.nix
index df166ad0ff04..11ea7716c630 100644
--- a/pkgs/servers/mpd/default.nix
+++ b/pkgs/servers/mpd/default.nix
@@ -190,6 +190,7 @@ let
         license     = licenses.gpl2Only;
         maintainers = with maintainers; [ astsmtl ehmry tobim ];
         platforms   = platforms.unix;
+        mainProgram = "mpd";
 
         longDescription = ''
           Music Player Daemon (MPD) is a flexible, powerful daemon for playing
diff --git a/pkgs/servers/mtprotoproxy/default.nix b/pkgs/servers/mtprotoproxy/default.nix
index 04ea4d10fe8a..44ecc6481ecd 100644
--- a/pkgs/servers/mtprotoproxy/default.nix
+++ b/pkgs/servers/mtprotoproxy/default.nix
@@ -25,5 +25,6 @@ stdenv.mkDerivation rec {
     homepage    = "https://github.com/alexbers/mtprotoproxy";
     platforms   = python.meta.platforms;
     maintainers = with maintainers; [ abbradar ];
+    mainProgram = "mtprotoproxy";
   };
 }
diff --git a/pkgs/servers/mx-puppet-discord/default.nix b/pkgs/servers/mx-puppet-discord/default.nix
index b0ccb03a8f9c..7100a5bd271b 100644
--- a/pkgs/servers/mx-puppet-discord/default.nix
+++ b/pkgs/servers/mx-puppet-discord/default.nix
@@ -48,5 +48,6 @@ in myNodePackages.package.override {
     platforms = platforms.unix;
     # never built on aarch64-darwin since first introduction in nixpkgs
     broken = stdenv.isDarwin && stdenv.isAarch64;
+    mainProgram = "mx-puppet-discord";
   };
 }
diff --git a/pkgs/servers/mycorrhiza/default.nix b/pkgs/servers/mycorrhiza/default.nix
index bb930ab2756d..3eb3c731aad3 100644
--- a/pkgs/servers/mycorrhiza/default.nix
+++ b/pkgs/servers/mycorrhiza/default.nix
@@ -30,5 +30,6 @@ buildGoModule rec {
     license = licenses.agpl3Only;
     maintainers = with maintainers; [ chekoopa ];
     platforms = platforms.linux;
+    mainProgram = "mycorrhiza";
   };
 }
diff --git a/pkgs/servers/nats-streaming-server/default.nix b/pkgs/servers/nats-streaming-server/default.nix
index 566e3f0802bd..d43bbc2fdc54 100644
--- a/pkgs/servers/nats-streaming-server/default.nix
+++ b/pkgs/servers/nats-streaming-server/default.nix
@@ -23,5 +23,6 @@ buildGoModule rec {
     license = licenses.asl20;
     maintainers = [ maintainers.swdunlop ];
     homepage = "https://nats.io/";
+    mainProgram = "nats-streaming-server";
   };
 }
diff --git a/pkgs/servers/networkaudiod/default.nix b/pkgs/servers/networkaudiod/default.nix
index dacd315aba34..a6a858637fe3 100644
--- a/pkgs/servers/networkaudiod/default.nix
+++ b/pkgs/servers/networkaudiod/default.nix
@@ -68,5 +68,6 @@ stdenv.mkDerivation rec {
     license = licenses.unfree;
     maintainers = with maintainers; [ lovesegfault ];
     platforms = platforms.linux;
+    mainProgram = "networkaudiod";
   };
 }
diff --git a/pkgs/servers/nfs-ganesha/default.nix b/pkgs/servers/nfs-ganesha/default.nix
index 7c46ba346143..5f32437970c9 100644
--- a/pkgs/servers/nfs-ganesha/default.nix
+++ b/pkgs/servers/nfs-ganesha/default.nix
@@ -53,5 +53,6 @@ stdenv.mkDerivation rec {
     maintainers = [ maintainers.markuskowa ];
     platforms = platforms.linux;
     license = licenses.lgpl3Plus;
+    mainProgram = "ganesha.nfsd";
   };
 }
diff --git a/pkgs/servers/nominatim/default.nix b/pkgs/servers/nominatim/default.nix
index 8c0410b87ac3..a666da35f4ca 100644
--- a/pkgs/servers/nominatim/default.nix
+++ b/pkgs/servers/nominatim/default.nix
@@ -63,5 +63,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     platforms = platforms.unix;
     maintainers = [ maintainers.mausch ];
+    mainProgram = "nominatim";
   };
 }
diff --git a/pkgs/servers/nzbhydra2/default.nix b/pkgs/servers/nzbhydra2/default.nix
index fa6234a34eba..7c70857585cc 100644
--- a/pkgs/servers/nzbhydra2/default.nix
+++ b/pkgs/servers/nzbhydra2/default.nix
@@ -39,5 +39,6 @@ stdenv.mkDerivation rec {
     license = licenses.asl20;
     maintainers = with maintainers; [jamiemagee];
     platforms = with platforms; linux;
+    mainProgram = "nzbhydra2";
   };
 }
diff --git a/pkgs/servers/oauth2-proxy/default.nix b/pkgs/servers/oauth2-proxy/default.nix
index b9e457006c6c..152b3a31d85e 100644
--- a/pkgs/servers/oauth2-proxy/default.nix
+++ b/pkgs/servers/oauth2-proxy/default.nix
@@ -21,5 +21,6 @@ buildGoModule rec {
     homepage = "https://github.com/oauth2-proxy/oauth2-proxy/";
     license = licenses.mit;
     maintainers = teams.serokell.members;
+    mainProgram = "oauth2-proxy";
   };
 }
diff --git a/pkgs/servers/ombi/default.nix b/pkgs/servers/ombi/default.nix
index d1a74eb4d136..2fb76c1fc947 100644
--- a/pkgs/servers/ombi/default.nix
+++ b/pkgs/servers/ombi/default.nix
@@ -53,5 +53,6 @@ in stdenv.mkDerivation rec {
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ woky ];
     platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" ];
+    mainProgram = "Ombi";
   };
 }
diff --git a/pkgs/servers/owncast/default.nix b/pkgs/servers/owncast/default.nix
index e5c0a8fbaf2b..2740e19dbff2 100644
--- a/pkgs/servers/owncast/default.nix
+++ b/pkgs/servers/owncast/default.nix
@@ -44,6 +44,7 @@ in buildGoModule {
     license = licenses.mit;
     platforms = platforms.unix;
     maintainers = with maintainers; [ MayNiklas ];
+    mainProgram = "owncast";
   };
 
 }
diff --git a/pkgs/servers/oxigraph/default.nix b/pkgs/servers/oxigraph/default.nix
index e11167000dfc..35148cb0932a 100644
--- a/pkgs/servers/oxigraph/default.nix
+++ b/pkgs/servers/oxigraph/default.nix
@@ -36,5 +36,6 @@ rustPlatform.buildRustPackage rec {
     platforms = [ "x86_64-linux" "aarch64-linux" "aarch64-darwin" ];
     maintainers = with maintainers; [ astro ];
     license = with licenses; [ asl20 mit ];
+    mainProgram = "oxigraph_server";
   };
 }
diff --git a/pkgs/servers/p910nd/default.nix b/pkgs/servers/p910nd/default.nix
index b6ba368d90d4..094194d59a03 100644
--- a/pkgs/servers/p910nd/default.nix
+++ b/pkgs/servers/p910nd/default.nix
@@ -46,5 +46,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ peterhoeg ];
     platforms = platforms.unix;
+    mainProgram = "p910nd";
   };
 }
diff --git a/pkgs/servers/persistent-evdev/default.nix b/pkgs/servers/persistent-evdev/default.nix
index 97f0ea01219c..83518b904a50 100644
--- a/pkgs/servers/persistent-evdev/default.nix
+++ b/pkgs/servers/persistent-evdev/default.nix
@@ -39,5 +39,6 @@ buildPythonPackage rec {
     license = licenses.mit;
     maintainers = [ maintainers.lodi ];
     platforms = platforms.linux;
+    mainProgram = "persistent-evdev.py";
   };
 }
diff --git a/pkgs/servers/photoprism/default.nix b/pkgs/servers/photoprism/default.nix
index 0a2c2d3a4ffc..8ad37a8aa387 100644
--- a/pkgs/servers/photoprism/default.nix
+++ b/pkgs/servers/photoprism/default.nix
@@ -83,5 +83,6 @@ stdenv.mkDerivation {
     inherit (libtensorflow.meta) platforms;
     license = licenses.agpl3Only;
     maintainers = with maintainers; [ benesim ];
+    mainProgram = "photoprism";
   };
 }
diff --git a/pkgs/servers/pinnwand/default.nix b/pkgs/servers/pinnwand/default.nix
index 302dbe62b0c6..86e05cfed45a 100644
--- a/pkgs/servers/pinnwand/default.nix
+++ b/pkgs/servers/pinnwand/default.nix
@@ -50,6 +50,7 @@ with python3.pkgs; buildPythonApplication rec {
     homepage = "https://supakeen.com/project/pinnwand/";
     license = licenses.mit;
     maintainers = with maintainers; [ hexa ];
+    mainProgram = "pinnwand";
   };
 }
 
diff --git a/pkgs/servers/pocketbase/default.nix b/pkgs/servers/pocketbase/default.nix
index fb70c7747e41..747102fd2e82 100644
--- a/pkgs/servers/pocketbase/default.nix
+++ b/pkgs/servers/pocketbase/default.nix
@@ -37,5 +37,6 @@ buildGoModule rec {
     homepage = "https://github.com/pocketbase/pocketbase";
     license = licenses.mit;
     maintainers = with maintainers; [ dit7ya thilobillerbeck ];
+    mainProgram = "pocketbase";
   };
 }
diff --git a/pkgs/servers/polaris/default.nix b/pkgs/servers/polaris/default.nix
index fc3141d46447..68a767bb03ab 100644
--- a/pkgs/servers/polaris/default.nix
+++ b/pkgs/servers/polaris/default.nix
@@ -76,5 +76,6 @@ rustPlatform.buildRustPackage rec {
     license = licenses.mit;
     maintainers = with maintainers; [ pbsds ];
     platforms = platforms.unix;
+    mainProgram = "polaris";
   };
 }
diff --git a/pkgs/servers/pr-tracker/default.nix b/pkgs/servers/pr-tracker/default.nix
index 2f99d6f56232..750ac015c061 100644
--- a/pkgs/servers/pr-tracker/default.nix
+++ b/pkgs/servers/pr-tracker/default.nix
@@ -31,5 +31,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://git.qyliss.net/pr-tracker";
     license = licenses.agpl3Plus;
     maintainers = with maintainers; [ qyliss sumnerevans ];
+    mainProgram = "pr-tracker";
   };
 }
diff --git a/pkgs/servers/psitransfer/default.nix b/pkgs/servers/psitransfer/default.nix
index 2bb4f03eb333..e39ae107217e 100644
--- a/pkgs/servers/psitransfer/default.nix
+++ b/pkgs/servers/psitransfer/default.nix
@@ -45,5 +45,6 @@ in buildNpmPackage {
     description = "Simple open source self-hosted file sharing solution";
     license = lib.licenses.bsd2;
     maintainers = with lib.maintainers; [ hyshka ];
+    mainProgram = "psitransfer";
   };
 }
diff --git a/pkgs/servers/redpanda/default.nix b/pkgs/servers/redpanda/default.nix
index c8f2d8061840..3387ef3c6f11 100644
--- a/pkgs/servers/redpanda/default.nix
+++ b/pkgs/servers/redpanda/default.nix
@@ -48,5 +48,6 @@ buildGoModule rec {
     license = licenses.bsl11;
     maintainers = with maintainers; [ avakhrenev happysalada ];
     platforms = platforms.all;
+    mainProgram = "rpk";
   };
 }
diff --git a/pkgs/servers/reproxy/default.nix b/pkgs/servers/reproxy/default.nix
index 6192a492f2b8..21077aa83d1c 100644
--- a/pkgs/servers/reproxy/default.nix
+++ b/pkgs/servers/reproxy/default.nix
@@ -40,5 +40,6 @@ buildGoModule rec {
     homepage = "https://reproxy.io/";
     license = licenses.mit;
     maintainers = with maintainers; [ sikmir ];
+    mainProgram = "reproxy";
   };
 }
diff --git a/pkgs/servers/resgate/default.nix b/pkgs/servers/resgate/default.nix
index 1650dcd81955..92b55c7c03da 100644
--- a/pkgs/servers/resgate/default.nix
+++ b/pkgs/servers/resgate/default.nix
@@ -21,5 +21,6 @@ buildGoModule rec {
     homepage = "https://resgate.io";
     license = licenses.mit;
     maintainers = with maintainers; [ farcaller ];
+    mainProgram = "resgate";
   };
 }
diff --git a/pkgs/servers/rinetd/default.nix b/pkgs/servers/rinetd/default.nix
index 07611bba54a5..23f1e89a780f 100644
--- a/pkgs/servers/rinetd/default.nix
+++ b/pkgs/servers/rinetd/default.nix
@@ -36,5 +36,6 @@ stdenv.mkDerivation rec {
     changelog = "https://github.com/samhocevar/rinetd/blob/${src.rev}/CHANGES.md";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ janik ];
+    mainProgram = "rinetd";
   };
 }
diff --git a/pkgs/servers/rippled/default.nix b/pkgs/servers/rippled/default.nix
index 18a1e91ea4d6..e1ad55a41d38 100644
--- a/pkgs/servers/rippled/default.nix
+++ b/pkgs/servers/rippled/default.nix
@@ -139,5 +139,6 @@ in stdenv.mkDerivation rec {
     maintainers = with maintainers; [ offline RaghavSood ];
     license = licenses.isc;
     platforms = platforms.linux;
+    mainProgram = "rippled";
   };
 }
diff --git a/pkgs/servers/roon-bridge/default.nix b/pkgs/servers/roon-bridge/default.nix
index 865dbd63f7af..7a4b582ea687 100644
--- a/pkgs/servers/roon-bridge/default.nix
+++ b/pkgs/servers/roon-bridge/default.nix
@@ -78,5 +78,6 @@ stdenv.mkDerivation {
     license = licenses.unfree;
     maintainers = with maintainers; [ lovesegfault ];
     platforms = [ "aarch64-linux" "x86_64-linux" ];
+    mainProgram = "RoonBridge";
   };
 }
diff --git a/pkgs/servers/roon-server/default.nix b/pkgs/servers/roon-server/default.nix
index d46be38781de..767eb9e3631d 100644
--- a/pkgs/servers/roon-server/default.nix
+++ b/pkgs/servers/roon-server/default.nix
@@ -95,5 +95,6 @@ stdenv.mkDerivation {
     license = licenses.unfree;
     maintainers = with maintainers; [ lovesegfault steell ];
     platforms = [ "x86_64-linux" ];
+    mainProgram = "RoonServer";
   };
 }
diff --git a/pkgs/servers/routinator/default.nix b/pkgs/servers/routinator/default.nix
index 3ab45831389b..6864556fd55d 100644
--- a/pkgs/servers/routinator/default.nix
+++ b/pkgs/servers/routinator/default.nix
@@ -29,5 +29,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/NLnetLabs/routinator/blob/v${version}/Changelog.md";
     license = licenses.bsd3;
     maintainers = with maintainers; [ _0x4A6F ];
+    mainProgram = "routinator";
   };
 }
diff --git a/pkgs/servers/rpiplay/default.nix b/pkgs/servers/rpiplay/default.nix
index 5bcb9267f484..cc9369f9ea29 100644
--- a/pkgs/servers/rpiplay/default.nix
+++ b/pkgs/servers/rpiplay/default.nix
@@ -46,5 +46,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ];
     platforms = platforms.unix;
+    mainProgram = "rpiplay";
   };
 }
diff --git a/pkgs/servers/rustypaste/default.nix b/pkgs/servers/rustypaste/default.nix
index 0dc72f74bb2d..0986abe374ca 100644
--- a/pkgs/servers/rustypaste/default.nix
+++ b/pkgs/servers/rustypaste/default.nix
@@ -33,5 +33,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/orhun/rustypaste/blob/v${version}/CHANGELOG.md";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda seqizz ];
+    mainProgram = "rustypaste";
   };
 }
diff --git a/pkgs/servers/sabnzbd/default.nix b/pkgs/servers/sabnzbd/default.nix
index 07c2ebe13b49..96b183c2fe73 100644
--- a/pkgs/servers/sabnzbd/default.nix
+++ b/pkgs/servers/sabnzbd/default.nix
@@ -83,5 +83,6 @@ in stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
     maintainers = with lib.maintainers; [ fridh jojosch adamcstephens ];
+    mainProgram = "sabnzbd";
   };
 }
diff --git a/pkgs/servers/scaphandre/default.nix b/pkgs/servers/scaphandre/default.nix
index 21b72c031be2..07aee5a715b3 100644
--- a/pkgs/servers/scaphandre/default.nix
+++ b/pkgs/servers/scaphandre/default.nix
@@ -66,5 +66,6 @@ rustPlatform.buildRustPackage rec {
     license = licenses.asl20;
     platforms = [ "x86_64-linux" ];
     maintainers = with maintainers; [ gaelreyrol ];
+    mainProgram = "scaphandre";
   };
 }
diff --git a/pkgs/servers/search/meilisearch/Cargo.lock b/pkgs/servers/search/meilisearch/Cargo.lock
index 23cc7c290405..01725751243c 100644
--- a/pkgs/servers/search/meilisearch/Cargo.lock
+++ b/pkgs/servers/search/meilisearch/Cargo.lock
@@ -71,17 +71,16 @@ dependencies = [
  "tokio",
  "tokio-util",
  "tracing",
- "zstd 0.12.3+zstd.1.5.2",
 ]
 
 [[package]]
 name = "actix-macros"
-version = "0.2.3"
+version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6"
+checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb"
 dependencies = [
  "quote",
- "syn 1.0.109",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -232,9 +231,9 @@ dependencies = [
 
 [[package]]
 name = "addr2line"
-version = "0.19.0"
+version = "0.20.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
 dependencies = [
  "gimli",
 ]
@@ -247,9 +246,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
 
 [[package]]
 name = "aes"
-version = "0.8.2"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
 dependencies = [
  "cfg-if",
  "cipher",
@@ -281,9 +280,9 @@ dependencies = [
 
 [[package]]
 name = "aho-corasick"
-version = "1.0.1"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
 dependencies = [
  "memchr",
 ]
@@ -326,15 +325,15 @@ dependencies = [
 
 [[package]]
 name = "anstyle"
-version = "1.0.0"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41ed9a86bf92ae6580e0a31281f65a1b1d867c0cc68d5346e2ae128dddfa6a7d"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
 
 [[package]]
 name = "anstyle-parse"
-version = "0.2.0"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e765fd216e48e067936442276d1d57399e37bce53c264d6fefbe298080cb57ee"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
 dependencies = [
  "utf8parse",
 ]
@@ -360,9 +359,9 @@ dependencies = [
 
 [[package]]
 name = "anyhow"
-version = "1.0.71"
+version = "1.0.75"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
 dependencies = [
  "backtrace",
 ]
@@ -405,18 +404,18 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
 name = "async-trait"
-version = "0.1.68"
+version = "0.1.72"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
+checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -436,15 +435,15 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
 [[package]]
 name = "backtrace"
-version = "0.3.67"
+version = "0.3.68"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
 dependencies = [
  "addr2line",
  "cc",
  "cfg-if",
  "libc",
- "miniz_oxide 0.6.2",
+ "miniz_oxide",
  "object",
  "rustc-demangle",
 ]
@@ -469,7 +468,7 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
 
 [[package]]
 name = "benchmarks"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "anyhow",
  "bytes",
@@ -554,13 +553,12 @@ dependencies = [
 
 [[package]]
 name = "bstr"
-version = "1.5.0"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5"
+checksum = "6798148dccfbff0fae41c7574d2fa8f1ef3492fba0face179de5d8d447d67b05"
 dependencies = [
  "memchr",
- "once_cell",
- "regex-automata",
+ "regex-automata 0.3.6",
  "serde",
 ]
 
@@ -603,7 +601,7 @@ checksum = "fdde5c9cd29ebd706ce1b35600920a33550e402fc998a2e53ad3b42c3c47a192"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -649,10 +647,20 @@ dependencies = [
 ]
 
 [[package]]
+name = "calendrical_calculations"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8dfe3bc6a50b4667fafdb6d9cf26731c5418c457e317d8166c972014facf9a5d"
+dependencies = [
+ "core_maths",
+ "displaydoc",
+]
+
+[[package]]
 name = "cargo_toml"
-version = "0.15.2"
+version = "0.15.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f83bc2e401ed041b7057345ebc488c005efa0341d5541ce7004d30458d0090b"
+checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838"
 dependencies = [
  "serde",
  "toml",
@@ -666,11 +674,12 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
 
 [[package]]
 name = "cc"
-version = "1.0.79"
+version = "1.0.82"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
 dependencies = [
  "jobserver",
+ "libc",
 ]
 
 [[package]]
@@ -700,9 +709,9 @@ dependencies = [
 
 [[package]]
 name = "charabia"
-version = "0.8.2"
+version = "0.8.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57aa1b4a8dda126c03ebf2f7e31d16cfc8781c2fe80dedd1a33459efc3e07578"
+checksum = "ffb924701d850fbf0331302e7f9715c04e494b4b9bebb38ac48bdd30924e1936"
 dependencies = [
  "aho-corasick",
  "cow-utils",
@@ -710,11 +719,15 @@ dependencies = [
  "deunicode",
  "either",
  "fst",
+ "icu",
+ "icu_provider",
+ "icu_provider_blob",
  "irg-kvariants",
  "jieba-rs",
  "lindera-core",
  "lindera-dictionary",
  "lindera-tokenizer",
+ "litemap 0.6.1",
  "once_cell",
  "pinyin",
  "serde",
@@ -722,6 +735,7 @@ dependencies = [
  "unicode-normalization",
  "wana_kana",
  "whatlang",
+ "zerovec 0.9.6",
 ]
 
 [[package]]
@@ -763,9 +777,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "4.3.0"
+version = "4.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93aae7a4192245f70fe75dd9157fc7b4a5bf53e88d30bd4396f7d8f9284d5acc"
+checksum = "c27cdf28c0f604ba3f512b0c9a409f8de8513e4816705deb0498b627e7c3a3fd"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -774,27 +788,26 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.3.0"
+version = "4.3.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f423e341edefb78c9caba2d9c7f7687d0e72e89df3ce3394554754393ac3990"
+checksum = "08a9f1ab5e9f01a9b81f202e8562eb9a10de70abf9eaeac1be465c28b75aa4aa"
 dependencies = [
  "anstream",
  "anstyle",
- "bitflags 1.3.2",
  "clap_lex",
  "strsim",
 ]
 
 [[package]]
 name = "clap_derive"
-version = "4.3.0"
+version = "4.3.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "191d9573962933b4027f932c600cd252ce27a8ad5979418fe78e43c07996f27b"
+checksum = "54a9bb5758fc5dfe728d1019941681eccaf0cf8a4189b692a0ee2f2ecf90a050"
 dependencies = [
  "heck",
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -804,6 +817,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
 
 [[package]]
+name = "cobs"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15"
+
+[[package]]
 name = "colorchoice"
 version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -877,6 +896,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
 
 [[package]]
+name = "core_maths"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3b02505ccb8c50b0aa21ace0fc08c3e53adebd4e58caa18a36152803c7709a3"
+dependencies = [
+ "libm",
+]
+
+[[package]]
 name = "cow-utils"
 version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -884,9 +912,9 @@ checksum = "79bb3adfaf5f75d24b01aee375f7555907840fa2800e5ec8fa3b9e2031830173"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.7"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
 dependencies = [
  "libc",
 ]
@@ -912,7 +940,7 @@ dependencies = [
  "clap",
  "criterion-plot",
  "is-terminal",
- "itertools",
+ "itertools 0.10.5",
  "num-traits",
  "once_cell",
  "oorandom",
@@ -933,7 +961,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
 dependencies = [
  "cast",
- "itertools",
+ "itertools 0.10.5",
 ]
 
 [[package]]
@@ -979,9 +1007,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.9.14"
+version = "0.9.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
 dependencies = [
  "autocfg",
  "cfg-if",
@@ -1002,9 +1030,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.15"
+version = "0.8.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
 dependencies = [
  "cfg-if",
 ]
@@ -1076,14 +1104,33 @@ dependencies = [
 ]
 
 [[package]]
+name = "deduplicating_array"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a636096586ca093a10ac0175bfb384d024089dca0dae54e3e69bc1c1596358e8"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "deranged"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+dependencies = [
+ "powerfmt",
+ "serde",
+]
+
+[[package]]
 name = "derive_arbitrary"
-version = "1.3.0"
+version = "1.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3cdeb9ec472d588e539a818b2dee436825730da08ad0017c4b1a17676bdc8b7"
+checksum = "53e0efad4403bfc52dc201159c4b842a246a14b98c64b55dfd0f2d89729dfeb8"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -1132,9 +1179,9 @@ dependencies = [
 
 [[package]]
 name = "deserr"
-version = "0.5.0"
+version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c71c14985c842bf1e520b1ebcd22daff6aeece32f510e11f063cecf9b308c04b"
+checksum = "61d55a63aabcb2f7893231e6b8ddf8acc00814d20a64463e52cf9b603ec326ee"
 dependencies = [
  "actix-http",
  "actix-utils",
@@ -1149,9 +1196,9 @@ dependencies = [
 
 [[package]]
 name = "deserr-internal"
-version = "0.5.0"
+version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cae1c51b191528c9e4e5d6cff671de94f61fcda1c206cc891251e0cf438c941a"
+checksum = "8c4d5c86e5d887d880c7a3572a8041bfb3011acc81df86318855ea2cae66f3ef"
 dependencies = [
  "convert_case 0.5.0",
  "proc-macro2",
@@ -1198,8 +1245,19 @@ dependencies = [
 ]
 
 [[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.28",
+]
+
+[[package]]
 name = "dump"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "anyhow",
  "big_s",
@@ -1219,19 +1277,25 @@ dependencies = [
  "tempfile",
  "thiserror",
  "time",
- "uuid 1.3.3",
+ "uuid 1.5.0",
 ]
 
 [[package]]
 name = "either"
-version = "1.8.1"
+version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
 dependencies = [
  "serde",
 ]
 
 [[package]]
+name = "embedded-io"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef1a6892d9eef45c8fa6b9e0086428a2cca8491aca8f787c534a3d6d0bcb3ced"
+
+[[package]]
 name = "encode_unicode"
 version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1336,7 +1400,7 @@ checksum = "eecf8589574ce9b895052fa12d69af7a233f99e6107f5cb8dd1044f2a17bfdcb"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -1360,9 +1424,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
 
 [[package]]
 name = "errno"
-version = "0.3.1"
+version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
 dependencies = [
  "errno-dragonfly",
  "libc",
@@ -1381,12 +1445,9 @@ dependencies = [
 
 [[package]]
 name = "fastrand"
-version = "1.9.0"
+version = "2.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
-dependencies = [
- "instant",
-]
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
 
 [[package]]
 name = "faux"
@@ -1413,33 +1474,45 @@ dependencies = [
 
 [[package]]
 name = "file-store"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "faux",
  "tempfile",
  "thiserror",
- "uuid 1.3.3",
+ "uuid 1.5.0",
 ]
 
 [[package]]
 name = "filetime"
-version = "0.2.21"
+version = "0.2.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
 dependencies = [
  "cfg-if",
  "libc",
- "redox_syscall 0.2.16",
+ "redox_syscall 0.3.5",
  "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "filter-parser"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "insta",
  "nom",
  "nom_locate",
+ "unescaper",
+]
+
+[[package]]
+name = "fixed_decimal"
+version = "0.5.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5287d527037d0f35c8801880361eb38bb9bce194805350052c2a79538388faeb"
+dependencies = [
+ "displaydoc",
+ "smallvec",
+ "writeable",
 ]
 
 [[package]]
@@ -1449,12 +1522,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
 dependencies = [
  "crc32fast",
- "miniz_oxide 0.7.1",
+ "miniz_oxide",
 ]
 
 [[package]]
 name = "flatten-serde-json"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "criterion",
  "serde_json",
@@ -1468,9 +1541,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 
 [[package]]
 name = "form_urlencoded"
-version = "1.1.0"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
 dependencies = [
  "percent-encoding",
 ]
@@ -1537,7 +1610,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -1572,7 +1645,7 @@ dependencies = [
 
 [[package]]
 name = "fuzzers"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "arbitrary",
  "clap",
@@ -1610,9 +1683,9 @@ checksum = "36d244a08113319b5ebcabad2b8b7925732d15eec46d7e7ac3c11734f3b7a6ad"
 
 [[package]]
 name = "getrandom"
-version = "0.2.9"
+version = "0.2.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
 dependencies = [
  "cfg-if",
  "libc",
@@ -1633,9 +1706,9 @@ dependencies = [
 
 [[package]]
 name = "gimli"
-version = "0.27.2"
+version = "0.27.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
 
 [[package]]
 name = "git2"
@@ -1669,9 +1742,9 @@ dependencies = [
 
 [[package]]
 name = "h2"
-version = "0.3.19"
+version = "0.3.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782"
+checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
 dependencies = [
  "bytes",
  "fnv",
@@ -1771,18 +1844,9 @@ dependencies = [
 
 [[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"
+version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
 
 [[package]]
 name = "hex"
@@ -1841,9 +1905,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
 
 [[package]]
 name = "hyper"
-version = "0.14.26"
+version = "0.14.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
 dependencies = [
  "bytes",
  "futures-channel",
@@ -1865,15 +1929,497 @@ dependencies = [
 
 [[package]]
 name = "hyper-rustls"
-version = "0.24.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7"
+checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97"
 dependencies = [
+ "futures-util",
  "http",
  "hyper",
- "rustls 0.21.1",
+ "rustls 0.21.6",
  "tokio",
- "tokio-rustls 0.24.0",
+ "tokio-rustls 0.24.1",
+]
+
+[[package]]
+name = "icu"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "30f75f394ebee8d539bef8f6f02ad7b5f41c33de74c9eae1a50337b382a5aab1"
+dependencies = [
+ "icu_calendar",
+ "icu_casemap",
+ "icu_collator",
+ "icu_collections",
+ "icu_compactdecimal",
+ "icu_datetime",
+ "icu_decimal",
+ "icu_displaynames",
+ "icu_list",
+ "icu_locid",
+ "icu_locid_transform",
+ "icu_normalizer",
+ "icu_plurals",
+ "icu_properties",
+ "icu_provider",
+ "icu_relativetime",
+ "icu_segmenter",
+ "icu_timezone",
+ "icu_transliterate",
+]
+
+[[package]]
+name = "icu_calendar"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b520c5675775e3838447c33fc55bf558148c6824ef0d20ff7a9e0df7345a281c"
+dependencies = [
+ "calendrical_calculations",
+ "displaydoc",
+ "icu_calendar_data",
+ "icu_locid",
+ "icu_locid_transform",
+ "icu_provider",
+ "serde",
+ "tinystr",
+ "writeable",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_calendar_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "75d8d1a514ca7e6dc547be930f2fd661d578909c07cf1c1adade81c3f7a78840"
+
+[[package]]
+name = "icu_casemap"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "976068d7759293cbd9daa0d1669618bb9094c7ee54e546cd8b877dd4fe59007a"
+dependencies = [
+ "displaydoc",
+ "icu_casemap_data",
+ "icu_collections",
+ "icu_locid",
+ "icu_properties",
+ "icu_provider",
+ "serde",
+ "writeable",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_casemap_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1251070c14d5b94cd00f97025e9cedce6a6eeb39485e2a226c58432cc4f72ffd"
+
+[[package]]
+name = "icu_collator"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be493c81154545a00fc5196e814cae0e1470bc696d518b5df877049aa6bcefe1"
+dependencies = [
+ "displaydoc",
+ "icu_collator_data",
+ "icu_collections",
+ "icu_locid",
+ "icu_locid_transform",
+ "icu_normalizer",
+ "icu_properties",
+ "icu_provider",
+ "serde",
+ "smallvec",
+ "utf16_iter",
+ "utf8_iter",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_collator_data"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4dbe9abe5ce570ad4707026f37bc21ef95c36b945c3c4564b9aa4e2e1c043126"
+
+[[package]]
+name = "icu_collections"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3907b2246e8dd5a29ead8a965e7c0c8a90e9b928e614a4279257d45c5e553e91"
+dependencies = [
+ "displaydoc",
+ "serde",
+ "yoke",
+ "zerofrom",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_compactdecimal"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a8bb9143e7681fd5f5877c76f7b6365e173545d00d0e12ef23ba1888a996baa"
+dependencies = [
+ "displaydoc",
+ "fixed_decimal",
+ "icu_compactdecimal_data",
+ "icu_decimal",
+ "icu_locid_transform",
+ "icu_plurals",
+ "icu_provider",
+ "writeable",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_compactdecimal_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2e9b7585f26db531ea5aaedaa68cb66cd2be37fe698b33a289849ff3129545b"
+
+[[package]]
+name = "icu_datetime"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f5bf2e6dd961b59ee5935070220915db6cf0ab5137de362964f800c2b7d14fa"
+dependencies = [
+ "displaydoc",
+ "either",
+ "fixed_decimal",
+ "icu_calendar",
+ "icu_datetime_data",
+ "icu_decimal",
+ "icu_locid",
+ "icu_locid_transform",
+ "icu_plurals",
+ "icu_provider",
+ "icu_timezone",
+ "litemap 0.7.1",
+ "serde",
+ "smallvec",
+ "tinystr",
+ "writeable",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_datetime_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "078b2ed516a2f5054ee7f55b1fe970b92e90ae4cace8a0fe1e5f9fc2e94be609"
+
+[[package]]
+name = "icu_decimal"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1986a0b7df834aaddb911b4593c990950ac5606fc83ce9aad4311be80f51e81a"
+dependencies = [
+ "displaydoc",
+ "fixed_decimal",
+ "icu_decimal_data",
+ "icu_locid",
+ "icu_locid_transform",
+ "icu_provider",
+ "serde",
+ "writeable",
+]
+
+[[package]]
+name = "icu_decimal_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c064b3828953151f8c610bfff6fec776f958641249ebfd1cf36f073f0654e77"
+
+[[package]]
+name = "icu_displaynames"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c98329d348e918ac7e88e6d6613a46bef09ca8a65db4ddf70d86e6eaac0e2ec3"
+dependencies = [
+ "icu_displaynames_data",
+ "icu_locid",
+ "icu_locid_transform",
+ "icu_provider",
+ "serde",
+ "tinystr",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_displaynames_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "60f9f56c427f1e80383667e8fb13c07707f6561839283115617cc67307a5d020"
+
+[[package]]
+name = "icu_list"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc1a44bbed77a7e7b555f9d7dd4b43f75ec1402b438a901d20451943d50cbd90"
+dependencies = [
+ "deduplicating_array",
+ "displaydoc",
+ "icu_list_data",
+ "icu_locid_transform",
+ "icu_provider",
+ "regex-automata 0.2.0",
+ "serde",
+ "writeable",
+]
+
+[[package]]
+name = "icu_list_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3237583f0cb7feafabb567c4492fe9ef1d2d4113f6a8798a923273ea5de996d"
+
+[[package]]
+name = "icu_locid"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f284eb342dc49d3e9d9f3b188489d76b5d22dfb1d1a5e0d1941811253bac625c"
+dependencies = [
+ "displaydoc",
+ "litemap 0.7.1",
+ "serde",
+ "tinystr",
+ "writeable",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_locid_transform"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6551daf80882d8e68eee186cc19e132d8bde1b1f059a79b93384a5ca0e8fc5e7"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_locid_transform_data",
+ "icu_provider",
+ "serde",
+ "tinystr",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_locid_transform_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a741eba5431f75eb2f1f9022d3cffabcadda6771e54fb4e77c8ba8653e4da44"
+
+[[package]]
+name = "icu_normalizer"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "080fc33a720d50a7342b0c58df010fbcfb842d6f78ef81555f8b1ac6bba57d3c"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_normalizer_data",
+ "icu_properties",
+ "icu_provider",
+ "serde",
+ "smallvec",
+ "utf16_iter",
+ "utf8_iter",
+ "write16",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_normalizer_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f8d22f74066c2e6442db2a9aa14950278e86719e811e304e48bae03094b369d"
+
+[[package]]
+name = "icu_plurals"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20556516b8be2b2f5dc3d6b23884b65c5c59ed8be0b44c419e4808c9b0792fce"
+dependencies = [
+ "displaydoc",
+ "fixed_decimal",
+ "icu_locid",
+ "icu_locid_transform",
+ "icu_plurals_data",
+ "icu_provider",
+ "serde",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_plurals_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fdc552215224997aaaa4e05d95981386d3c52042acebfcc732137d5d9be96a21"
+
+[[package]]
+name = "icu_properties"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3477ae70f8ca8dc08ff7574b5398ed0a2f2e4e6b66bdff2558a92ed67e262be1"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_locid_transform",
+ "icu_properties_data",
+ "icu_provider",
+ "serde",
+ "tinystr",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_properties_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7c8bb3b67a8347e94d580434369e5c7ee89999b9309d04b7cfc88dfaa0f31b59"
+
+[[package]]
+name = "icu_provider"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68acdef80034b5e35d8524e9817479d389a4f9774f3f0cbe1bf3884d80fd5934"
+dependencies = [
+ "displaydoc",
+ "icu_locid",
+ "icu_provider_macros",
+ "postcard",
+ "serde",
+ "stable_deref_trait",
+ "tinystr",
+ "writeable",
+ "yoke",
+ "zerofrom",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_provider_blob"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c31326d28c7f95a964a4f0ee86c24002da5f6db907e3bcb079949b4ff103b6a9"
+dependencies = [
+ "icu_provider",
+ "postcard",
+ "serde",
+ "writeable",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_provider_macros"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2060258edfcfe32ca7058849bf0f146cb5c59aadbedf480333c0d0002f97bc99"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+]
+
+[[package]]
+name = "icu_relativetime"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4e6c1b531ab35f5b0cb552d3fb8dab1cb49f98e68e12bdc2169ca15e805207c"
+dependencies = [
+ "displaydoc",
+ "fixed_decimal",
+ "icu_decimal",
+ "icu_locid_transform",
+ "icu_plurals",
+ "icu_provider",
+ "icu_relativetime_data",
+ "serde",
+ "writeable",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_relativetime_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "71ec2ca0aff8c6865075c6257bc91d21a77acb6465635306a280af89208bed24"
+
+[[package]]
+name = "icu_segmenter"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bcb3c1981ce2187a745f391a741cb14e77453325acb3b2e014b05da51c0a39f2"
+dependencies = [
+ "core_maths",
+ "displaydoc",
+ "icu_collections",
+ "icu_locid",
+ "icu_provider",
+ "icu_segmenter_data",
+ "serde",
+ "utf8_iter",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_segmenter_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9703f6713044d1c0a1335a6d78ffece4c9380582416ace6feeb608e84d279fc7"
+
+[[package]]
+name = "icu_timezone"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19e6401cd210ccda98b2e7fc707831b29c6efe319efbbec460f957b6f331f626"
+dependencies = [
+ "displaydoc",
+ "icu_calendar",
+ "icu_locid",
+ "icu_provider",
+ "icu_timezone_data",
+ "serde",
+ "tinystr",
+ "zerotrie",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_timezone_data"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d7e214a653bac59b768c42f82d252f13af95e8a9cb07b6108b8bc723c561b43"
+
+[[package]]
+name = "icu_transliterate"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d4bdf006774b5a5898d97af6c95b148d34cd5c87cbed00610ff873e5b5885e28"
+dependencies = [
+ "displaydoc",
+ "icu_collections",
+ "icu_locid",
+ "icu_normalizer",
+ "icu_properties",
+ "icu_provider",
+ "icu_unicodeset_parse",
+ "litemap 0.7.1",
+ "serde",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "icu_unicodeset_parse"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2c3c1ab072cb9ec2dfb377ed7be07bf1bdce055b8324ba6392323f588c38c5a"
+dependencies = [
+ "icu_collections",
+ "icu_properties",
+ "icu_provider",
+ "tinystr",
+ "zerovec 0.10.0",
 ]
 
 [[package]]
@@ -1884,9 +2430,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
 
 [[package]]
 name = "idna"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
 dependencies = [
  "unicode-bidi",
  "unicode-normalization",
@@ -1894,7 +2440,7 @@ dependencies = [
 
 [[package]]
 name = "index-scheduler"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "anyhow",
  "big_s",
@@ -1912,6 +2458,7 @@ dependencies = [
  "meilisearch-types",
  "nelson",
  "page_size 0.5.0",
+ "puffin",
  "roaring",
  "serde",
  "serde_json",
@@ -1919,7 +2466,7 @@ dependencies = [
  "tempfile",
  "thiserror",
  "time",
- "uuid 1.3.3",
+ "uuid 1.5.0",
 ]
 
 [[package]]
@@ -1930,7 +2477,6 @@ checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
 dependencies = [
  "autocfg",
  "hashbrown 0.12.3",
- "serde",
 ]
 
 [[package]]
@@ -1941,6 +2487,7 @@ checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
 dependencies = [
  "equivalent",
  "hashbrown 0.14.0",
+ "serde",
 ]
 
 [[package]]
@@ -1954,9 +2501,9 @@ dependencies = [
 
 [[package]]
 name = "insta"
-version = "1.29.0"
+version = "1.31.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a28d25139df397cbca21408bb742cf6837e04cdbebf1b07b760caf971d6a972"
+checksum = "a0770b0a3d4c70567f0d58331f3088b0e4c4f56c9b8d764efe654b4a5d46de3a"
 dependencies = [
  "console",
  "lazy_static",
@@ -1998,16 +2545,16 @@ version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
 dependencies = [
- "hermit-abi 0.3.1",
+ "hermit-abi",
  "libc",
  "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "ipnet"
-version = "2.7.2"
+version = "2.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
 
 [[package]]
 name = "irg-kvariants"
@@ -2022,12 +2569,12 @@ dependencies = [
 
 [[package]]
 name = "is-terminal"
-version = "0.4.8"
+version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24fddda5af7e54bf7da53067d6e802dbcc381d0a8eef629df528e3ebf68755cb"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
 dependencies = [
- "hermit-abi 0.3.1",
- "rustix 0.38.2",
+ "hermit-abi",
+ "rustix 0.38.7",
  "windows-sys 0.48.0",
 ]
 
@@ -2041,20 +2588,29 @@ dependencies = [
 ]
 
 [[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
 name = "itoa"
-version = "1.0.6"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
+checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
 
 [[package]]
 name = "jieba-rs"
-version = "0.6.7"
+version = "0.6.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37228e06c75842d1097432d94d02f37fe3ebfca9791c2e8fef6e9db17ed128c1"
+checksum = "93f0c1347cd3ac8d7c6e3a2dc33ac496d365cf09fc0831aa61111e1a6738983e"
 dependencies = [
  "cedarwood",
  "fxhash",
- "hashbrown 0.12.3",
+ "hashbrown 0.14.0",
  "lazy_static",
  "phf",
  "phf_codegen",
@@ -2072,16 +2628,16 @@ dependencies = [
 
 [[package]]
 name = "js-sys"
-version = "0.3.63"
+version = "0.3.64"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
 dependencies = [
  "wasm-bindgen",
 ]
 
 [[package]]
 name = "json-depth-checker"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "criterion",
  "serde_json",
@@ -2158,9 +2714,9 @@ dependencies = [
 
 [[package]]
 name = "libz-sys"
-version = "1.1.9"
+version = "1.1.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db"
+checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
 dependencies = [
  "cc",
  "libc",
@@ -2170,9 +2726,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-cc-cedict-builder"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d2e8f2ca97ddf952fe340642511b9c14b373cb2eef711d526bb8ef2ca0969b8"
+checksum = "6f567a47e47b5420908424de2c6c5e424e3cafe588d0146bd128c0f3755758a3"
 dependencies = [
  "anyhow",
  "bincode",
@@ -2189,9 +2745,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-compress"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f72b460559bcbe8a9cee85ea4a5056133ed3abf373031191589236e656d65b59"
+checksum = "49f3e553d55ebe9881fa5e5de588b0a153456e93564d17dfbef498912caf63a2"
 dependencies = [
  "anyhow",
  "flate2",
@@ -2200,9 +2756,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-core"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f586eb8a9393c32d5525e0e9336a3727bd1329674740097126f3b0bff8a1a1ea"
+checksum = "a9a2440cc156a4a911a174ec68203543d1efb10df3a700a59b6bf581e453c726"
 dependencies = [
  "anyhow",
  "bincode",
@@ -2217,9 +2773,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-decompress"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1fb1facd8da698072fcc7338bd757730db53d59f313f44dd583fa03681dcc0e1"
+checksum = "e077a410e61c962cb526f71b7effd62ffc607488a8f61869c937582d2ccb529b"
 dependencies = [
  "anyhow",
  "flate2",
@@ -2228,9 +2784,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-dictionary"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec7be7410b1da7017a8948986b87af67082f605e9a716f0989790d795d677f0c"
+checksum = "d9f57491adf7b311a3ee87f5e4a36454df16a2ec73de4ef28b2106fac80bd782"
 dependencies = [
  "anyhow",
  "bincode",
@@ -2248,9 +2804,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-ipadic-builder"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "705d07f8a45d04fd95149f7ad41a26d1f9e56c9c00402be6f9dd05e3d88b99c6"
+checksum = "a3476ec7748aebd2eb23d496ddfce5e7e0a5c031cffcd214451043e02d029f11"
 dependencies = [
  "anyhow",
  "bincode",
@@ -2269,9 +2825,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-ipadic-neologd-builder"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "633a93983ba13fba42328311a501091bd4a7aff0c94ae9eaa9d4733dd2b0468a"
+checksum = "7b1c7576a02d5e4af2bf62de51790a01bc4b8bc0d0b6a6b86a46b157f5cb306d"
 dependencies = [
  "anyhow",
  "bincode",
@@ -2290,9 +2846,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-ko-dic"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a428e0d316b6c86f51bd919479692bc41ad840dba266ebc044663970f431ea18"
+checksum = "b713ecd5b827d7d448c3c5eb3c6d5899ecaf22cd17087599996349a02c76828d"
 dependencies = [
  "bincode",
  "byteorder",
@@ -2307,9 +2863,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-ko-dic-builder"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a5288704c6b8a069c0a1705c38758e836497698b50453373ab3d56c6f9a7ef8"
+checksum = "3e545752f6487be87b572529ad594cb3b48d2ef20821516f598b2d152d23277b"
 dependencies = [
  "anyhow",
  "bincode",
@@ -2327,9 +2883,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-tokenizer"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "106ba439b2e87529d9bbedbb88d69f635baba1195c26502b308f55a85885fc81"
+checksum = "24a2d4606a5a4da62ac4a3680ee884a75da7f0c892dc967fc9cb983ceba39a8f"
 dependencies = [
  "bincode",
  "byteorder",
@@ -2342,9 +2898,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-unidic"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3399b6dcfe1701333451d184ff3c677f433b320153427b146360c9e4bd8cb816"
+checksum = "388b1bdf81794b5d5b8057ce0321c58ff4b90d676b637948ccc7863ae2f43d28"
 dependencies = [
  "bincode",
  "byteorder",
@@ -2359,9 +2915,9 @@ dependencies = [
 
 [[package]]
 name = "lindera-unidic-builder"
-version = "0.27.0"
+version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b698227fdaeac32289173ab389b990d4eb00a40cbc9912020f69a0c491dabf55"
+checksum = "cdfa3e29a22c047da57fadd960ff674b720de15a1e2fb35b5ed67f3408afb469"
 dependencies = [
  "anyhow",
  "bincode",
@@ -2391,15 +2947,24 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
 
 [[package]]
 name = "linux-raw-sys"
-version = "0.3.8"
+version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
 
 [[package]]
-name = "linux-raw-sys"
-version = "0.4.3"
+name = "litemap"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
+checksum = "575d8a551c59104b4df91269921e5eab561aa1b77c618dac0414b5d44a4617de"
+
+[[package]]
+name = "litemap"
+version = "0.7.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "77a1a2647d5b7134127971a6de0d533c49de2159167e7f259c427195f87168a1"
+dependencies = [
+ "serde",
+]
 
 [[package]]
 name = "lmdb-rkv-sys"
@@ -2431,9 +2996,9 @@ checksum = "e34f76eb3611940e0e7d53a9aaa4e6a3151f69541a282fd0dad5571420c53ff1"
 
 [[package]]
 name = "lock_api"
-version = "0.4.9"
+version = "0.4.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
 dependencies = [
  "autocfg",
  "scopeguard",
@@ -2468,6 +3033,12 @@ dependencies = [
 ]
 
 [[package]]
+name = "lz4_flex"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b8c72594ac26bfd34f2d99dfced2edfaddfe8a476e3ff2ca0eb293d925c4f83"
+
+[[package]]
 name = "manifest-dir-macros"
 version = "0.1.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2476,7 +3047,7 @@ dependencies = [
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -2493,7 +3064,7 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771"
 
 [[package]]
 name = "meili-snap"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "insta",
  "md5",
@@ -2502,7 +3073,7 @@ dependencies = [
 
 [[package]]
 name = "meilisearch"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "actix-cors",
  "actix-http",
@@ -2533,10 +3104,10 @@ dependencies = [
  "hex",
  "http",
  "index-scheduler",
- "indexmap 1.9.3",
+ "indexmap 2.0.0",
  "insta",
  "is-terminal",
- "itertools",
+ "itertools 0.11.0",
  "jsonwebtoken",
  "lazy_static",
  "log",
@@ -2556,6 +3127,7 @@ dependencies = [
  "pin-project-lite",
  "platform-dirs",
  "prometheus",
+ "puffin",
  "rand",
  "rayon",
  "regex",
@@ -2582,7 +3154,7 @@ dependencies = [
  "tokio-stream",
  "toml",
  "urlencoding",
- "uuid 1.3.3",
+ "uuid 1.5.0",
  "vergen",
  "walkdir",
  "yaup",
@@ -2591,7 +3163,7 @@ dependencies = [
 
 [[package]]
 name = "meilisearch-auth"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "base64 0.21.2",
  "enum-iterator",
@@ -2605,12 +3177,12 @@ dependencies = [
  "sha2",
  "thiserror",
  "time",
- "uuid 1.3.3",
+ "uuid 1.5.0",
 ]
 
 [[package]]
 name = "meilisearch-types"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "actix-web",
  "anyhow",
@@ -2635,7 +3207,21 @@ dependencies = [
  "thiserror",
  "time",
  "tokio",
- "uuid 1.3.3",
+ "uuid 1.5.0",
+]
+
+[[package]]
+name = "meilitool"
+version = "1.5.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "dump",
+ "file-store",
+ "meilisearch-auth",
+ "meilisearch-types",
+ "time",
+ "uuid 1.5.0",
 ]
 
 [[package]]
@@ -2646,25 +3232,25 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 
 [[package]]
 name = "memmap2"
-version = "0.5.10"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327"
+checksum = "f49388d20533534cd19360ad3d6a7dadc885944aa802ba3995040c5ec11288c6"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "memoffset"
-version = "0.8.0"
+version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
 dependencies = [
  "autocfg",
 ]
 
 [[package]]
 name = "milli"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "big_s",
  "bimap",
@@ -2685,10 +3271,10 @@ dependencies = [
  "geoutils",
  "grenad",
  "heed",
- "indexmap 1.9.3",
+ "indexmap 2.0.0",
  "insta",
  "instant-distance",
- "itertools",
+ "itertools 0.11.0",
  "json-depth-checker",
  "levenshtein_automata",
  "log",
@@ -2700,6 +3286,7 @@ dependencies = [
  "obkv",
  "once_cell",
  "ordered-float",
+ "puffin",
  "rand",
  "rand_pcg",
  "rayon",
@@ -2714,7 +3301,7 @@ dependencies = [
  "tempfile",
  "thiserror",
  "time",
- "uuid 1.3.3",
+ "uuid 1.5.0",
 ]
 
 [[package]]
@@ -2750,15 +3337,6 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
 
 [[package]]
 name = "miniz_oxide"
-version = "0.6.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
-dependencies = [
- "adler",
-]
-
-[[package]]
-name = "miniz_oxide"
 version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
@@ -2768,9 +3346,9 @@ dependencies = [
 
 [[package]]
 name = "mio"
-version = "0.8.7"
+version = "0.8.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eebffdb73fe72e917997fad08bdbf31ac50b0fa91cec93e69a0662e4264d454c"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
 dependencies = [
  "libc",
  "log",
@@ -2836,9 +3414,9 @@ dependencies = [
 
 [[package]]
 name = "num-traits"
-version = "0.2.15"
+version = "0.2.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
+checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
 dependencies = [
  "autocfg",
  "libm",
@@ -2846,19 +3424,19 @@ dependencies = [
 
 [[package]]
 name = "num_cpus"
-version = "1.15.0"
+version = "1.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
 dependencies = [
- "hermit-abi 0.2.6",
+ "hermit-abi",
  "libc",
 ]
 
 [[package]]
 name = "object"
-version = "0.30.3"
+version = "0.31.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
 dependencies = [
  "memchr",
 ]
@@ -2922,15 +3500,15 @@ dependencies = [
 
 [[package]]
 name = "parking_lot_core"
-version = "0.9.7"
+version = "0.9.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
 dependencies = [
  "cfg-if",
  "libc",
- "redox_syscall 0.2.16",
+ "redox_syscall 0.3.5",
  "smallvec",
- "windows-sys 0.45.0",
+ "windows-targets 0.48.1",
 ]
 
 [[package]]
@@ -2946,9 +3524,9 @@ dependencies = [
 
 [[package]]
 name = "paste"
-version = "1.0.12"
+version = "1.0.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79"
+checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
 
 [[package]]
 name = "path-matchers"
@@ -2988,13 +3566,13 @@ dependencies = [
 
 [[package]]
 name = "percent-encoding"
-version = "2.2.0"
+version = "2.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
 
 [[package]]
 name = "permissive-json-pointer"
-version = "1.3.1"
+version = "1.5.0"
 dependencies = [
  "big_s",
  "serde_json",
@@ -3002,9 +3580,9 @@ dependencies = [
 
 [[package]]
 name = "pest"
-version = "2.6.0"
+version = "2.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e68e84bfb01f0507134eac1e9b410a12ba379d064eab48c50ba4ce329a527b70"
+checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a"
 dependencies = [
  "thiserror",
  "ucd-trie",
@@ -3012,9 +3590,9 @@ dependencies = [
 
 [[package]]
 name = "pest_derive"
-version = "2.6.0"
+version = "2.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b79d4c71c865a25a4322296122e3924d30bc8ee0834c8bfc8b95f7f054afbfb"
+checksum = "666d00490d4ac815001da55838c500eafb0320019bbaa44444137c48b443a853"
 dependencies = [
  "pest",
  "pest_generator",
@@ -3022,22 +3600,22 @@ dependencies = [
 
 [[package]]
 name = "pest_generator"
-version = "2.6.0"
+version = "2.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c435bf1076437b851ebc8edc3a18442796b30f1728ffea6262d59bbe28b077e"
+checksum = "68ca01446f50dbda87c1786af8770d535423fa8a53aec03b8f4e3d7eb10e0929"
 dependencies = [
  "pest",
  "pest_meta",
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
 name = "pest_meta"
-version = "2.6.0"
+version = "2.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "745a452f8eb71e39ffd8ee32b3c5f51d03845f99786fa9b68db6ff509c505411"
+checksum = "56af0a30af74d0445c0bf6d9d051c979b516a1a5af790d251daee76005420a48"
 dependencies = [
  "once_cell",
  "pest",
@@ -3046,18 +3624,18 @@ dependencies = [
 
 [[package]]
 name = "phf"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
 dependencies = [
  "phf_shared",
 ]
 
 [[package]]
 name = "phf_codegen"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a56ac890c5e3ca598bbdeaa99964edb5b0258a583a9eb6ef4e89fc85d9224770"
+checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a"
 dependencies = [
  "phf_generator",
  "phf_shared",
@@ -3065,9 +3643,9 @@ dependencies = [
 
 [[package]]
 name = "phf_generator"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
 dependencies = [
  "phf_shared",
  "rand",
@@ -3075,18 +3653,18 @@ dependencies = [
 
 [[package]]
 name = "phf_shared"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
 dependencies = [
  "siphasher",
 ]
 
 [[package]]
 name = "pin-project-lite"
-version = "0.2.9"
+version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
+checksum = "2c516611246607d0c04186886dbb3a754368ef82c79e9827a802c6d836dd111c"
 
 [[package]]
 name = "pin-utils"
@@ -3117,9 +3695,9 @@ dependencies = [
 
 [[package]]
 name = "plotters"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
+checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45"
 dependencies = [
  "num-traits",
  "plotters-backend",
@@ -3130,20 +3708,37 @@ dependencies = [
 
 [[package]]
 name = "plotters-backend"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
+checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609"
 
 [[package]]
 name = "plotters-svg"
-version = "0.3.3"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f"
+checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab"
 dependencies = [
  "plotters-backend",
 ]
 
 [[package]]
+name = "postcard"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a55c51ee6c0db07e68448e336cf8ea4131a620edefebf9893e759b2d793420f8"
+dependencies = [
+ "cobs",
+ "embedded-io",
+ "serde",
+]
+
+[[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"
@@ -3192,7 +3787,7 @@ dependencies = [
  "byteorder",
  "hex",
  "lazy_static",
- "rustix 0.36.14",
+ "rustix 0.36.16",
 ]
 
 [[package]]
@@ -3219,10 +3814,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "106dd99e98437432fed6519dedecfade6a06a73bb7b2a1e019fdd2bee5778d94"
 
 [[package]]
+name = "puffin"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "76425abd4e1a0ad4bd6995dd974b52f414fca9974171df8e3708b3e660d05a21"
+dependencies = [
+ "anyhow",
+ "bincode",
+ "byteorder",
+ "cfg-if",
+ "instant",
+ "lz4_flex",
+ "once_cell",
+ "parking_lot",
+ "serde",
+]
+
+[[package]]
 name = "quote"
-version = "1.0.31"
+version = "1.0.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
 dependencies = [
  "proc-macro2",
 ]
@@ -3320,26 +3932,41 @@ dependencies = [
 
 [[package]]
 name = "regex"
-version = "1.8.3"
+version = "1.9.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81ca098a9821bd52d6b24fd8b10bd081f47d39c22778cafaa75a2857a62c6390"
+checksum = "81bc1d4caf89fac26a70747fe603c130093b53c773888797a6329091246d651a"
 dependencies = [
  "aho-corasick",
  "memchr",
+ "regex-automata 0.3.6",
  "regex-syntax",
 ]
 
 [[package]]
 name = "regex-automata"
-version = "0.1.10"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e9368763f5a9b804326f3af749e16f9abf378d227bcdee7634b13d8f17793782"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
+checksum = "fed1ceff11a1dddaee50c9dc8e4938bd106e9d89ae372f192311e7da498e3b69"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
 
 [[package]]
 name = "regex-syntax"
-version = "0.7.2"
+version = "0.7.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
 
 [[package]]
 name = "reqwest"
@@ -3364,13 +3991,13 @@ dependencies = [
  "once_cell",
  "percent-encoding",
  "pin-project-lite",
- "rustls 0.21.1",
+ "rustls 0.21.6",
  "rustls-pemfile",
  "serde",
  "serde_json",
  "serde_urlencoded",
  "tokio",
- "tokio-rustls 0.24.0",
+ "tokio-rustls 0.24.1",
  "tower-service",
  "url",
  "wasm-bindgen",
@@ -3403,9 +4030,9 @@ dependencies = [
 
 [[package]]
 name = "roaring"
-version = "0.10.1"
+version = "0.10.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef0fb5e826a8bde011ecae6a8539dd333884335c57ff0f003fbe27c25bbe8f71"
+checksum = "6106b5cf8587f5834158895e9715a3c6c9716c8aefab57f1f7680917191c7873"
 dependencies = [
  "bytemuck",
  "byteorder",
@@ -3415,9 +4042,9 @@ dependencies = [
 
 [[package]]
 name = "rstar"
-version = "0.10.0"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f39465655a1e3d8ae79c6d9e007f4953bfc5d55297602df9dc38f9ae9f1359a"
+checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6"
 dependencies = [
  "heapless",
  "num-traits",
@@ -3442,9 +4069,9 @@ dependencies = [
 
 [[package]]
 name = "rustix"
-version = "0.36.14"
+version = "0.36.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14e4d67015953998ad0eb82887a0eb0129e18a7e2f3b7b0f6c422fddcd503d62"
+checksum = "6da3636faa25820d8648e0e31c5d519bbb01f72fdf57131f0f5f7da5fed36eab"
 dependencies = [
  "bitflags 1.3.2",
  "errno",
@@ -3456,28 +4083,14 @@ dependencies = [
 
 [[package]]
 name = "rustix"
-version = "0.37.19"
+version = "0.38.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d"
-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.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aabcb0461ebd01d6b79945797c27f8529082226cb630a9865a71870ff63532a4"
+checksum = "172891ebdceb05aa0005f533a6cbfca599ddd7d966f6f5d4d9b2e70478e70399"
 dependencies = [
  "bitflags 2.3.3",
  "errno",
  "libc",
- "linux-raw-sys 0.4.3",
+ "linux-raw-sys 0.4.5",
  "windows-sys 0.48.0",
 ]
 
@@ -3495,30 +4108,40 @@ dependencies = [
 
 [[package]]
 name = "rustls"
-version = "0.21.1"
+version = "0.21.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c911ba11bc8433e811ce56fde130ccf32f5127cab0e0194e9c68c5a5b671791e"
+checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb"
 dependencies = [
  "log",
  "ring",
- "rustls-webpki",
+ "rustls-webpki 0.101.3",
  "sct",
 ]
 
 [[package]]
 name = "rustls-pemfile"
-version = "1.0.2"
+version = "1.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
 dependencies = [
  "base64 0.21.2",
 ]
 
 [[package]]
 name = "rustls-webpki"
-version = "0.100.1"
+version = "0.100.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e98ff011474fa39949b7e5c0428f9b4937eda7da7848bbb947786b7be0b27dab"
+dependencies = [
+ "ring",
+ "untrusted",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.101.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
+checksum = "261e9e0888cba427c3316e6322805653c9425240b6fd96cee7cb671ab70ab8d0"
 dependencies = [
  "ring",
  "untrusted",
@@ -3526,15 +4149,15 @@ dependencies = [
 
 [[package]]
 name = "rustversion"
-version = "1.0.12"
+version = "1.0.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
+checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4"
 
 [[package]]
 name = "ryu"
-version = "1.0.13"
+version = "1.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
+checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
 
 [[package]]
 name = "same-file"
@@ -3547,9 +4170,9 @@ dependencies = [
 
 [[package]]
 name = "scopeguard"
-version = "1.1.0"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
 
 [[package]]
 name = "sct"
@@ -3577,15 +4200,15 @@ dependencies = [
 
 [[package]]
 name = "semver"
-version = "1.0.17"
+version = "1.0.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
 
 [[package]]
 name = "serde"
-version = "1.0.171"
+version = "1.0.190"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30e27d1e4fd7659406c492fd6cfaf2066ba8773de45ca75e855590f856dc34a9"
+checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7"
 dependencies = [
  "serde_derive",
 ]
@@ -3610,20 +4233,20 @@ dependencies = [
 
 [[package]]
 name = "serde_derive"
-version = "1.0.171"
+version = "1.0.190"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "389894603bd18c46fa56231694f8d827779c0951a667087194cf9de94ed24682"
+checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.103"
+version = "1.0.104"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
+checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c"
 dependencies = [
  "indexmap 2.0.0",
  "itoa",
@@ -3633,9 +4256,9 @@ dependencies = [
 
 [[package]]
 name = "serde_spanned"
-version = "0.6.2"
+version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93107647184f6027e3b7dcb2e11034cf95ffa1e3a682c67951963ac69c1c007d"
+checksum = "96426c9936fd7a0124915f9185ea1d20aa9445cc9821142f0a73bc9207a2e186"
 dependencies = [
  "serde",
 ]
@@ -3676,9 +4299,9 @@ dependencies = [
 
 [[package]]
 name = "sha2"
-version = "0.10.6"
+version = "0.10.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -3745,9 +4368,12 @@ dependencies = [
 
 [[package]]
 name = "smallvec"
-version = "1.10.0"
+version = "1.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
+checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9"
+dependencies = [
+ "serde",
+]
 
 [[package]]
 name = "smartstring"
@@ -3833,9 +4459,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.26"
+version = "2.0.28"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970"
+checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3864,10 +4490,22 @@ dependencies = [
 ]
 
 [[package]]
+name = "synstructure"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "285ba80e733fac80aa4270fbcdf83772a79b80aa35c97075320abfee4a915b06"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+ "unicode-xid",
+]
+
+[[package]]
 name = "sysinfo"
-version = "0.28.4"
+version = "0.29.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4c2f3ca6693feb29a89724516f016488e9aafc7f37264f898593ee4b942f31b"
+checksum = "165d6d8539689e3d3bc8b98ac59541e1f21c7de7c85d60dc80e43ae0ed2113db"
 dependencies = [
  "cfg-if",
  "core-foundation-sys",
@@ -3880,9 +4518,9 @@ dependencies = [
 
 [[package]]
 name = "tar"
-version = "0.4.38"
+version = "0.4.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
 dependencies = [
  "filetime",
  "libc",
@@ -3900,15 +4538,15 @@ dependencies = [
 
 [[package]]
 name = "tempfile"
-version = "3.5.0"
+version = "3.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+checksum = "dc02fddf48964c42031a0b3fe0428320ecf3a73c401040fc0096f97794310651"
 dependencies = [
  "cfg-if",
  "fastrand",
  "redox_syscall 0.3.5",
- "rustix 0.37.19",
- "windows-sys 0.45.0",
+ "rustix 0.38.7",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -3922,31 +4560,33 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "1.0.43"
+version = "1.0.44"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a35fc5b8971143ca348fa6df4f024d4d55264f3468c71ad1c2f365b0a4d58c42"
+checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.43"
+version = "1.0.44"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "463fe12d7993d3b327787537ce8dd4dfa058de32fc2b195ef3cde03dc4771e8f"
+checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
 name = "time"
-version = "0.3.21"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f3403384eaacbca9923fa06940178ac13e4edb725486d70e8e15881d0c836cc"
+checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
 dependencies = [
+ "deranged",
  "itoa",
+ "powerfmt",
  "serde",
  "time-core",
  "time-macros",
@@ -3954,20 +4594,31 @@ dependencies = [
 
 [[package]]
 name = "time-core"
-version = "0.1.1"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
 
 [[package]]
 name = "time-macros"
-version = "0.2.9"
+version = "0.2.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
+checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
 dependencies = [
  "time-core",
 ]
 
 [[package]]
+name = "tinystr"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5d0e245e80bdc9b4e5356fc45a72184abbc3861992603f515270e9340f5a219"
+dependencies = [
+ "displaydoc",
+ "serde",
+ "zerovec 0.10.0",
+]
+
+[[package]]
 name = "tinytemplate"
 version = "1.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3994,11 +4645,12 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
 
 [[package]]
 name = "tokio"
-version = "1.28.2"
+version = "1.29.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2"
+checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
 dependencies = [
  "autocfg",
+ "backtrace",
  "bytes",
  "libc",
  "mio",
@@ -4019,7 +4671,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -4035,11 +4687,11 @@ dependencies = [
 
 [[package]]
 name = "tokio-rustls"
-version = "0.24.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e0d409377ff5b1e3ca6437aa86c1eb7d40c134bfec254e44c830defa92669db5"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 dependencies = [
- "rustls 0.21.1",
+ "rustls 0.21.6",
  "tokio",
 ]
 
@@ -4070,9 +4722,9 @@ dependencies = [
 
 [[package]]
 name = "toml"
-version = "0.7.4"
+version = "0.7.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6135d499e69981f9ff0ef2167955a5333c35e36f6937d382974566b3d5b94ec"
+checksum = "c17e963a819c331dcacd7ab957d80bc2b9a9c1e71c804826d2f283dd65306542"
 dependencies = [
  "serde",
  "serde_spanned",
@@ -4082,20 +4734,20 @@ dependencies = [
 
 [[package]]
 name = "toml_datetime"
-version = "0.6.2"
+version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a76a9312f5ba4c2dec6b9161fdf25d87ad8a09256ccea5a556fef03c706a10f"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "toml_edit"
-version = "0.19.10"
+version = "0.19.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739"
+checksum = "f8123f27e969974a3dfba720fdb560be359f57b44302d280ba72e76a74480e8a"
 dependencies = [
- "indexmap 1.9.3",
+ "indexmap 2.0.0",
  "serde",
  "serde_spanned",
  "toml_datetime",
@@ -4143,9 +4795,18 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
 
 [[package]]
 name = "ucd-trie"
-version = "0.1.5"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9"
+
+[[package]]
+name = "unescaper"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81"
+checksum = "a96a44ae11e25afb520af4534fd7b0bd8cd613e35a78def813b8cf41631fa3c8"
+dependencies = [
+ "thiserror",
+]
 
 [[package]]
 name = "unicase"
@@ -4164,9 +4825,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.9"
+version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
 
 [[package]]
 name = "unicode-normalization"
@@ -4204,17 +4865,17 @@ dependencies = [
  "base64 0.21.2",
  "log",
  "once_cell",
- "rustls 0.21.1",
- "rustls-webpki",
+ "rustls 0.21.6",
+ "rustls-webpki 0.100.2",
  "url",
  "webpki-roots 0.23.1",
 ]
 
 [[package]]
 name = "url"
-version = "2.3.1"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
 dependencies = [
  "form_urlencoded",
  "idna",
@@ -4223,9 +4884,15 @@ dependencies = [
 
 [[package]]
 name = "urlencoding"
-version = "2.1.2"
+version = "2.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
+
+[[package]]
+name = "utf16_iter"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9"
+checksum = "52df8b7fb78e7910d776fccf2e42ceaf3604d55e8e7eb2dbd183cb1441d8a692"
 
 [[package]]
 name = "utf8-width"
@@ -4234,6 +4901,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5190c9442dcdaf0ddd50f37420417d219ae5261bbf5db120d0f9bab996c9cba1"
 
 [[package]]
+name = "utf8_iter"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "64a8922555b9500e3d865caed19330172cd67cbf82203f1a3311d8c305cc9f33"
+
+[[package]]
 name = "utf8parse"
 version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4250,9 +4923,9 @@ dependencies = [
 
 [[package]]
 name = "uuid"
-version = "1.3.3"
+version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2"
+checksum = "88ad59a7560b41a70d191093a945f0b87bc1deeda46fb237479708a1d6b6cdfc"
 dependencies = [
  "getrandom",
  "serde",
@@ -4303,17 +4976,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "477976a5c56fb7b014795df5a2ce08d2de8bcd4d5980844c5bd3978a7fd1c30b"
 dependencies = [
  "fnv",
- "itertools",
+ "itertools 0.10.5",
  "lazy_static",
 ]
 
 [[package]]
 name = "want"
-version = "0.3.0"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
 dependencies = [
- "log",
  "try-lock",
 ]
 
@@ -4325,9 +4997,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.86"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
 dependencies = [
  "cfg-if",
  "wasm-bindgen-macro",
@@ -4335,24 +5007,24 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.86"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
 dependencies = [
  "bumpalo",
  "log",
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.36"
+version = "0.4.37"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
 dependencies = [
  "cfg-if",
  "js-sys",
@@ -4362,9 +5034,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.86"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -4372,28 +5044,28 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.86"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.26",
+ "syn 2.0.28",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.86"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
 
 [[package]]
 name = "web-sys"
-version = "0.3.63"
+version = "0.3.64"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
@@ -4401,9 +5073,9 @@ dependencies = [
 
 [[package]]
 name = "webpki"
-version = "0.22.0"
+version = "0.22.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd"
+checksum = "07ecc0cd7cac091bf682ec5efa18b1cff79d617b84181f38b3951dbe135f607f"
 dependencies = [
  "ring",
  "untrusted",
@@ -4424,7 +5096,7 @@ version = "0.23.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b03058f88386e5ff5310d9111d53f48b17d732b401aeb83a8d5190f2ac459338"
 dependencies = [
- "rustls-webpki",
+ "rustls-webpki 0.100.2",
 ]
 
 [[package]]
@@ -4483,7 +5155,7 @@ version = "0.48.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
 dependencies = [
- "windows-targets 0.48.0",
+ "windows-targets 0.48.1",
 ]
 
 [[package]]
@@ -4503,9 +5175,9 @@ dependencies = [
 
 [[package]]
 name = "windows-targets"
-version = "0.48.0"
+version = "0.48.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
 dependencies = [
  "windows_aarch64_gnullvm 0.48.0",
  "windows_aarch64_msvc 0.48.0",
@@ -4602,9 +5274,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
 
 [[package]]
 name = "winnow"
-version = "0.4.6"
+version = "0.5.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699"
+checksum = "acaaa1190073b2b101e15083c38ee8ec891b5e05cbee516521e94ec008f61e64"
 dependencies = [
  "memchr",
 ]
@@ -4619,10 +5291,22 @@ dependencies = [
 ]
 
 [[package]]
+name = "write16"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
+
+[[package]]
+name = "writeable"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0af0c3d13faebf8dda0b5256fa7096a2d5ccb662f7b9f54a40fe201077ab1c2"
+
+[[package]]
 name = "xattr"
-version = "0.2.3"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
 dependencies = [
  "libc",
 ]
@@ -4653,6 +5337,30 @@ dependencies = [
 ]
 
 [[package]]
+name = "yoke"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61e38c508604d6bbbd292dadb3c02559aa7fff6b654a078a36217cad871636e4"
+dependencies = [
+ "serde",
+ "stable_deref_trait",
+ "yoke-derive",
+ "zerofrom",
+]
+
+[[package]]
+name = "yoke-derive"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5e19fb6ed40002bab5403ffa37e53e0e56f914a4450c8765f533018db1db35f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+ "synstructure 0.13.0",
+]
+
+[[package]]
 name = "zerocopy"
 version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -4670,7 +5378,74 @@ checksum = "d498dbd1fd7beb83c86709ae1c33ca50942889473473d287d56ce4770a18edfb"
 dependencies = [
  "proc-macro2",
  "syn 1.0.109",
- "synstructure",
+ "synstructure 0.12.6",
+]
+
+[[package]]
+name = "zerofrom"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "655b0814c5c0b19ade497851070c640773304939a6c0fd5f5fb43da0696d05b7"
+dependencies = [
+ "zerofrom-derive",
+]
+
+[[package]]
+name = "zerofrom-derive"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6a647510471d372f2e6c2e6b7219e44d8c574d24fdc11c610a61455782f18c3"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
+ "synstructure 0.13.0",
+]
+
+[[package]]
+name = "zerotrie"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9685bb4deb98dab812e87c296a9631fc00d7ca4bc5c2c5f304f375bbed711a8a"
+dependencies = [
+ "displaydoc",
+ "litemap 0.7.1",
+ "serde",
+ "yoke",
+ "zerofrom",
+ "zerovec 0.10.0",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "591691014119b87047ead4dcf3e6adfbf73cb7c38ab6980d4f18a32138f35d46"
+dependencies = [
+ "zerofrom",
+]
+
+[[package]]
+name = "zerovec"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1194130c5b155bf8ae50ab16c86ab758cd695cf9ad176d2f870b744cbdbb572e"
+dependencies = [
+ "serde",
+ "yoke",
+ "zerofrom",
+ "zerovec-derive",
+]
+
+[[package]]
+name = "zerovec-derive"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "acabf549809064225ff8878baedc4ce3732ac3b07e7c7ce6e5c2ccdbc485c324"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -4690,7 +5465,7 @@ dependencies = [
  "pbkdf2",
  "sha1",
  "time",
- "zstd 0.11.2+zstd.1.5.2",
+ "zstd",
 ]
 
 [[package]]
@@ -4699,16 +5474,7 @@ 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.3+zstd.1.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
-dependencies = [
- "zstd-safe 6.0.5+zstd.1.5.4",
+ "zstd-safe",
 ]
 
 [[package]]
@@ -4722,16 +5488,6 @@ dependencies = [
 ]
 
 [[package]]
-name = "zstd-safe"
-version = "6.0.5+zstd.1.5.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
-dependencies = [
- "libc",
- "zstd-sys",
-]
-
-[[package]]
 name = "zstd-sys"
 version = "2.0.8+zstd.1.5.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
diff --git a/pkgs/servers/search/meilisearch/default.nix b/pkgs/servers/search/meilisearch/default.nix
index 6dc77b86271f..2846ebbf46b1 100644
--- a/pkgs/servers/search/meilisearch/default.nix
+++ b/pkgs/servers/search/meilisearch/default.nix
@@ -7,7 +7,7 @@
 , nix-update-script
 }:
 
-let version = "1.3.1";
+let version = "1.5.0";
 in
 rustPlatform.buildRustPackage {
   pname = "meilisearch";
@@ -17,7 +17,7 @@ rustPlatform.buildRustPackage {
     owner = "meilisearch";
     repo = "MeiliSearch";
     rev = "refs/tags/v${version}";
-    hash = "sha256-jttT4qChoqwTnjjoW0Zc15ZieZN7KD1Us64Tk0eDG3Y=";
+    hash = "sha256-UP5i89hXmbATbHwN4wu42L6zX2fnd/hF4NEGK5VwmiM=";
   };
 
   cargoBuildFlags = [
diff --git a/pkgs/servers/ser2net/default.nix b/pkgs/servers/ser2net/default.nix
index 7ca94e4e402c..43d6527d3aa5 100644
--- a/pkgs/servers/ser2net/default.nix
+++ b/pkgs/servers/ser2net/default.nix
@@ -33,5 +33,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ emantor ];
     platforms = with platforms; linux;
+    mainProgram = "ser2net";
   };
 }
diff --git a/pkgs/servers/sftpgo/default.nix b/pkgs/servers/sftpgo/default.nix
index 085f0fb8cc9f..1aa4323cda6f 100644
--- a/pkgs/servers/sftpgo/default.nix
+++ b/pkgs/servers/sftpgo/default.nix
@@ -60,5 +60,6 @@ buildGoModule rec {
     '';
     license = licenses.agpl3Only;
     maintainers = with maintainers; [ thenonameguy yayayayaka ];
+    mainProgram = "sftpgo";
   };
 }
diff --git a/pkgs/servers/shairplay/default.nix b/pkgs/servers/shairplay/default.nix
index 90db957d3c01..2a7e643b60fd 100644
--- a/pkgs/servers/shairplay/default.nix
+++ b/pkgs/servers/shairplay/default.nix
@@ -31,5 +31,6 @@ stdenv.mkDerivation rec {
     license     = licenses.mit;
     maintainers = with maintainers; [ peterhoeg ];
     platforms   = platforms.unix;
+    mainProgram = "shairplay";
   };
 }
diff --git a/pkgs/servers/simplehttp2server/default.nix b/pkgs/servers/simplehttp2server/default.nix
index d673a201646d..b14056f5adca 100644
--- a/pkgs/servers/simplehttp2server/default.nix
+++ b/pkgs/servers/simplehttp2server/default.nix
@@ -20,6 +20,7 @@ buildGoPackage rec {
      description = "HTTP/2 server for development purposes";
      license = licenses.asl20;
      maintainers = with maintainers; [ yrashk ];
+     mainProgram = "simplehttp2server";
   };
 
 }
diff --git a/pkgs/servers/skydns/default.nix b/pkgs/servers/skydns/default.nix
index 2ae2efbbb759..6d23a42abb14 100644
--- a/pkgs/servers/skydns/default.nix
+++ b/pkgs/servers/skydns/default.nix
@@ -30,5 +30,6 @@ buildGoModule rec {
     homepage = "https://github.com/skynetservices/skydns";
     license = lib.licenses.mit;
     maintainers = with maintainers; [ ];
+    mainProgram = "skydns";
   };
 }
diff --git a/pkgs/servers/spicedb/default.nix b/pkgs/servers/spicedb/default.nix
index e776805d8e5d..9095335d1b80 100644
--- a/pkgs/servers/spicedb/default.nix
+++ b/pkgs/servers/spicedb/default.nix
@@ -28,5 +28,6 @@ buildGoModule rec {
     homepage = "https://authzed.com/";
     license = licenses.asl20;
     maintainers = with maintainers; [ thoughtpolice ];
+    mainProgram = "spicedb";
   };
 }
diff --git a/pkgs/servers/sqlpage/default.nix b/pkgs/servers/sqlpage/default.nix
index cefa00d41634..d68ad9ddcace 100644
--- a/pkgs/servers/sqlpage/default.nix
+++ b/pkgs/servers/sqlpage/default.nix
@@ -95,5 +95,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/lovasoa/SQLpage/blob/${src.rev}/CHANGELOG.md";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ dit7ya ];
+    mainProgram = "sqlpage";
   };
 }
diff --git a/pkgs/servers/sshportal/default.nix b/pkgs/servers/sshportal/default.nix
index 307b945eba1c..58c0b5a2077f 100644
--- a/pkgs/servers/sshportal/default.nix
+++ b/pkgs/servers/sshportal/default.nix
@@ -20,5 +20,6 @@ buildGoModule rec {
     homepage = "https://manfred.life/sshportal";
     license = licenses.asl20;
     maintainers = with maintainers; [ zaninime ];
+    mainProgram = "sshportal";
   };
 }
diff --git a/pkgs/servers/static-web-server/default.nix b/pkgs/servers/static-web-server/default.nix
index a8057cac7e7d..4c7b8d46638c 100644
--- a/pkgs/servers/static-web-server/default.nix
+++ b/pkgs/servers/static-web-server/default.nix
@@ -37,5 +37,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/static-web-server/static-web-server/blob/v${version}/CHANGELOG.md";
     license = with licenses; [ mit /* or */ asl20 ];
     maintainers = with maintainers; [ figsoda ];
+    mainProgram = "static-web-server";
   };
 }
diff --git a/pkgs/servers/stone/default.nix b/pkgs/servers/stone/default.nix
index 65ddb92da7a1..a565a609e12b 100644
--- a/pkgs/servers/stone/default.nix
+++ b/pkgs/servers/stone/default.nix
@@ -29,5 +29,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Only;
     platforms = platforms.linux;
     maintainers = with maintainers; [ corngood ];
+    mainProgram = "stone";
   };
 }
diff --git a/pkgs/servers/swego/default.nix b/pkgs/servers/swego/default.nix
index 99f238c46d05..eb4bcccbbf9d 100644
--- a/pkgs/servers/swego/default.nix
+++ b/pkgs/servers/swego/default.nix
@@ -33,5 +33,6 @@ buildGoModule rec {
     # darwin crashes with:
     # src/controllers/parsingArgs.go:130:4: undefined: PrintEmbeddedFiles
     broken = stdenv.isDarwin;
+    mainProgram = "swego";
   };
 }
diff --git a/pkgs/servers/syncstorage-rs/default.nix b/pkgs/servers/syncstorage-rs/default.nix
index 399c56376ecf..96b1945df51f 100644
--- a/pkgs/servers/syncstorage-rs/default.nix
+++ b/pkgs/servers/syncstorage-rs/default.nix
@@ -62,5 +62,6 @@ rustPlatform.buildRustPackage rec {
     license = lib.licenses.mpl20;
     maintainers = with lib.maintainers; [ pennae ];
     platforms = lib.platforms.linux;
+    mainProgram = "syncserver";
   };
 }
diff --git a/pkgs/servers/tarssh/default.nix b/pkgs/servers/tarssh/default.nix
index 051ebe964ee2..4886b2f72cd9 100644
--- a/pkgs/servers/tarssh/default.nix
+++ b/pkgs/servers/tarssh/default.nix
@@ -19,5 +19,6 @@ rustPlatform.buildRustPackage rec {
     license = [ licenses.mit ];
     maintainers = with maintainers; [ sohalt ];
     platforms = platforms.unix ;
+    mainProgram = "tarssh";
   };
 }
diff --git a/pkgs/servers/telegram-bot-api/default.nix b/pkgs/servers/telegram-bot-api/default.nix
index 3d52ccc96f83..d8dc668fb69b 100644
--- a/pkgs/servers/telegram-bot-api/default.nix
+++ b/pkgs/servers/telegram-bot-api/default.nix
@@ -21,5 +21,6 @@ stdenv.mkDerivation {
     license = licenses.boost;
     maintainers = with maintainers; [ Anillc ];
     platforms = platforms.all;
+    mainProgram = "telegram-bot-api";
   };
 }
diff --git a/pkgs/servers/tidb/default.nix b/pkgs/servers/tidb/default.nix
index 605ebdf3a711..5d929dfe348e 100644
--- a/pkgs/servers/tidb/default.nix
+++ b/pkgs/servers/tidb/default.nix
@@ -27,5 +27,6 @@ buildGoModule rec {
     homepage = "https://pingcap.com";
     license = licenses.asl20;
     maintainers = [];
+    mainProgram = "tidb-server";
   };
 }
diff --git a/pkgs/servers/tmate-ssh-server/default.nix b/pkgs/servers/tmate-ssh-server/default.nix
index dff7f050fbf9..09cd26090e14 100644
--- a/pkgs/servers/tmate-ssh-server/default.nix
+++ b/pkgs/servers/tmate-ssh-server/default.nix
@@ -58,5 +58,6 @@ stdenv.mkDerivation {
     license = licenses.mit;
     platforms = platforms.unix;
     maintainers = with maintainers; [ ck3d ];
+    mainProgram = "tmate-ssh-server";
   };
 }
diff --git a/pkgs/servers/traefik/default.nix b/pkgs/servers/traefik/default.nix
index 41b6ae78a878..7abbdc5c8403 100644
--- a/pkgs/servers/traefik/default.nix
+++ b/pkgs/servers/traefik/default.nix
@@ -35,5 +35,6 @@ buildGoModule rec {
     changelog = "https://github.com/traefik/traefik/raw/v${version}/CHANGELOG.md";
     license = licenses.mit;
     maintainers = with maintainers; [ vdemeester ];
+    mainProgram = "traefik";
   };
 }
diff --git a/pkgs/servers/ttyd/default.nix b/pkgs/servers/ttyd/default.nix
index 435e872d332f..9741a23f9851 100644
--- a/pkgs/servers/ttyd/default.nix
+++ b/pkgs/servers/ttyd/default.nix
@@ -26,5 +26,6 @@ stdenv.mkDerivation rec {
     license     = lib.licenses.mit;
     maintainers = [ lib.maintainers.thoughtpolice ];
     platforms   = lib.platforms.all;
+    mainProgram = "ttyd";
   };
 }
diff --git a/pkgs/servers/tvheadend/default.nix b/pkgs/servers/tvheadend/default.nix
index 573a857becd7..7c7b3124ceba 100644
--- a/pkgs/servers/tvheadend/default.nix
+++ b/pkgs/servers/tvheadend/default.nix
@@ -131,5 +131,6 @@ in stdenv.mkDerivation {
     license = licenses.gpl3Only;
     platforms = platforms.unix;
     maintainers = with maintainers; [ simonvandel ];
+    mainProgram = "tvheadend";
   };
 }
diff --git a/pkgs/servers/u9fs/default.nix b/pkgs/servers/u9fs/default.nix
index 0f50b1e18dd7..9056b4791672 100644
--- a/pkgs/servers/u9fs/default.nix
+++ b/pkgs/servers/u9fs/default.nix
@@ -22,5 +22,6 @@ stdenv.mkDerivation {
     license = licenses.free;
     maintainers = [ maintainers.ehmry ];
     platforms = platforms.unix;
+    mainProgram = "u9fs";
   };
 }
diff --git a/pkgs/servers/ucarp/default.nix b/pkgs/servers/ucarp/default.nix
index b9a8bbea4804..90cbc562d382 100644
--- a/pkgs/servers/ucarp/default.nix
+++ b/pkgs/servers/ucarp/default.nix
@@ -30,5 +30,6 @@ stdenv.mkDerivation rec {
     '';
     license = with licenses; [ isc bsdOriginal bsd2 gpl2Plus ];
     maintainers = with maintainers; [ oxzi ];
+    mainProgram = "ucarp";
   };
 }
diff --git a/pkgs/servers/ums/default.nix b/pkgs/servers/ums/default.nix
index 48398a5ba6e1..e862884a457b 100644
--- a/pkgs/servers/ums/default.nix
+++ b/pkgs/servers/ums/default.nix
@@ -38,5 +38,6 @@ stdenv.mkDerivation rec {
       license = lib.licenses.gpl2;
       platforms = lib.platforms.linux;
       maintainers = with lib.maintainers; [ thall snicket2100 ];
+      mainProgram = "ums";
   };
 }
diff --git a/pkgs/servers/unpackerr/default.nix b/pkgs/servers/unpackerr/default.nix
index 140f4ddfa793..5ed52a37f62c 100644
--- a/pkgs/servers/unpackerr/default.nix
+++ b/pkgs/servers/unpackerr/default.nix
@@ -22,5 +22,6 @@ buildGoModule rec {
     homepage = "https://github.com/davidnewhall/unpackerr";
     maintainers = with maintainers; [ nullx76 ];
     license = licenses.mit;
+    mainProgram = "unpackerr";
   };
 }
diff --git a/pkgs/servers/unpfs/default.nix b/pkgs/servers/unpfs/default.nix
index f71263469744..b67cf7ce0549 100644
--- a/pkgs/servers/unpfs/default.nix
+++ b/pkgs/servers/unpfs/default.nix
@@ -30,5 +30,6 @@ rustPlatform.buildRustPackage rec {
 
     # macOS build fails: https://github.com/pfpacket/rust-9p/issues/7
     platforms = with platforms; linux;
+    mainProgram = "unpfs";
   };
 }
diff --git a/pkgs/servers/uwsgi/default.nix b/pkgs/servers/uwsgi/default.nix
index 2c7563fe03c0..beeca756d867 100644
--- a/pkgs/servers/uwsgi/default.nix
+++ b/pkgs/servers/uwsgi/default.nix
@@ -168,5 +168,6 @@ stdenv.mkDerivation (finalAttrs: {
     license = lib.licenses.gpl2;
     maintainers = with lib.maintainers; [ abbradar schneefux globin ];
     platforms = lib.platforms.unix;
+    mainProgram = "uwsgi";
   };
 })
diff --git a/pkgs/servers/uxplay/default.nix b/pkgs/servers/uxplay/default.nix
index d5d150bd0f2c..63a02f6828c8 100644
--- a/pkgs/servers/uxplay/default.nix
+++ b/pkgs/servers/uxplay/default.nix
@@ -53,5 +53,6 @@ stdenv.mkDerivation (finalAttrs: {
     license = lib.licenses.gpl3Plus;
     maintainers = [ lib.maintainers.azuwis ];
     platforms = lib.platforms.unix;
+    mainProgram = "uxplay";
   };
 })
diff --git a/pkgs/servers/vouch-proxy/default.nix b/pkgs/servers/vouch-proxy/default.nix
index 535ef7192d84..cfb22c85dbec 100644
--- a/pkgs/servers/vouch-proxy/default.nix
+++ b/pkgs/servers/vouch-proxy/default.nix
@@ -33,5 +33,6 @@ buildGoModule rec {
     license = licenses.mit;
     maintainers = with maintainers; [ leona erictapen ];
     platforms = platforms.linux;
+    mainProgram = "vouch-proxy";
   };
 }
diff --git a/pkgs/servers/web-apps/changedetection-io/default.nix b/pkgs/servers/web-apps/changedetection-io/default.nix
index 29d8eb1fdfc5..142e83edbfe0 100644
--- a/pkgs/servers/web-apps/changedetection-io/default.nix
+++ b/pkgs/servers/web-apps/changedetection-io/default.nix
@@ -5,25 +5,25 @@
 
 python3.pkgs.buildPythonApplication rec {
   pname = "changedetection-io";
-  version = "0.45.3";
+  version = "0.45.7.3";
   format = "setuptools";
 
   src = fetchFromGitHub {
     owner = "dgtlmoon";
     repo = "changedetection.io";
-    rev = "refs/tags/${version}";
-    hash = "sha256-QTkkMFGyEGSakvFCiJ36Xr3IiG9K7GDy2dpNGWjUngs=";
+    rev = version;
+    hash = "sha256-axj23LEZgSNpwkVtXQ/2QZVbbV+xTpkf57ajYnqTGFA=";
   };
 
   postPatch = ''
     substituteInPlace requirements.txt \
-      --replace "apprise~=1.5.0" "apprise" \
+      --replace "apprise~=1.6.0" "apprise" \
       --replace "cryptography~=3.4" "cryptography" \
-      --replace "dnspython<2.3.0" "dnspython" \
+      --replace "dnspython~=2.4" "dnspython" \
       --replace "pytest ~=7.2" "" \
       --replace "pytest-flask ~=1.2" "" \
-      --replace "selenium~=4.1.0" "selenium" \
-      --replace "werkzeug~=2.0.0" "werkzeug"
+      --replace "selenium~=4.14.0" "selenium" \
+      --replace "werkzeug~=3.0" "werkzeug"
   '';
 
   propagatedBuildInputs = with python3.pkgs; [
@@ -75,6 +75,6 @@ python3.pkgs.buildPythonApplication rec {
     homepage = "https://github.com/dgtlmoon/changedetection.io";
     changelog = "https://github.com/dgtlmoon/changedetection.io/releases/tag/${version}";
     license = licenses.asl20;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ mikaelfangel ];
   };
 }
diff --git a/pkgs/servers/webdav-server-rs/default.nix b/pkgs/servers/webdav-server-rs/default.nix
index 06c8716ba877..695ab41dea62 100644
--- a/pkgs/servers/webdav-server-rs/default.nix
+++ b/pkgs/servers/webdav-server-rs/default.nix
@@ -43,5 +43,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/miquels/webdav-server-rs";
     license = licenses.asl20;
     maintainers = with maintainers; [ pmy ];
+    mainProgram = "webdav-server";
   };
 }
diff --git a/pkgs/servers/webdav/default.nix b/pkgs/servers/webdav/default.nix
index f6380337e864..248c5e882cce 100644
--- a/pkgs/servers/webdav/default.nix
+++ b/pkgs/servers/webdav/default.nix
@@ -18,5 +18,6 @@ buildGoModule rec {
     homepage = "https://github.com/hacdias/webdav";
     license = licenses.mit;
     maintainers = with maintainers; [ pmy ];
+    mainProgram = "webdav";
   };
 }
diff --git a/pkgs/servers/webmetro/default.nix b/pkgs/servers/webmetro/default.nix
index 2cae2887e9fb..11cbfa5adbf2 100644
--- a/pkgs/servers/webmetro/default.nix
+++ b/pkgs/servers/webmetro/default.nix
@@ -25,5 +25,6 @@ rustPlatform.buildRustPackage rec {
     '';
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ leenaars ];
+    mainProgram = "webmetro";
   };
 }
diff --git a/pkgs/servers/wesher/default.nix b/pkgs/servers/wesher/default.nix
index 5ab8edd17381..e9b243e325e4 100644
--- a/pkgs/servers/wesher/default.nix
+++ b/pkgs/servers/wesher/default.nix
@@ -26,5 +26,6 @@ buildGoModule rec {
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ tylerjl ];
     platforms   = platforms.linux;
+    mainProgram = "wesher";
   };
 }
diff --git a/pkgs/servers/wishlist/default.nix b/pkgs/servers/wishlist/default.nix
index cc9bc6cfd89e..19ce2c32e220 100644
--- a/pkgs/servers/wishlist/default.nix
+++ b/pkgs/servers/wishlist/default.nix
@@ -23,5 +23,6 @@ buildGoModule rec {
     changelog = "https://github.com/charmbracelet/wishlist/releases/tag/v${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ caarlos0 penguwin ];
+    mainProgram = "wishlist";
   };
 }
diff --git a/pkgs/servers/wsdd/default.nix b/pkgs/servers/wsdd/default.nix
index 8e1f61dc5dd3..6b99e6c59373 100644
--- a/pkgs/servers/wsdd/default.nix
+++ b/pkgs/servers/wsdd/default.nix
@@ -39,5 +39,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ izorkin ];
     license = licenses.mit;
     platforms = platforms.all;
+    mainProgram = "wsdd";
   };
 }
diff --git a/pkgs/servers/xandikos/default.nix b/pkgs/servers/xandikos/default.nix
index e5238b90814f..f61d5c1a02c5 100644
--- a/pkgs/servers/xandikos/default.nix
+++ b/pkgs/servers/xandikos/default.nix
@@ -44,5 +44,6 @@ python3Packages.buildPythonApplication rec {
     license = licenses.gpl3Plus;
     changelog = "https://github.com/jelmer/xandikos/blob/v${version}/NEWS";
     maintainers = with maintainers; [ _0x4A6F ];
+    mainProgram = "xandikos";
   };
 }
diff --git a/pkgs/servers/xteve/default.nix b/pkgs/servers/xteve/default.nix
index 47302d6e9d49..75591ddfbc14 100644
--- a/pkgs/servers/xteve/default.nix
+++ b/pkgs/servers/xteve/default.nix
@@ -18,5 +18,6 @@ buildGoModule rec {
     homepage = "https://github.com/xteve-project/xTeVe";
     license = licenses.mit;
     maintainers = with maintainers; [ nrhelmi ];
+    mainProgram = "xteve";
   };
 }
diff --git a/pkgs/servers/zigbee2mqtt/default.nix b/pkgs/servers/zigbee2mqtt/default.nix
index 1b8ae2e31787..010112dff80b 100644
--- a/pkgs/servers/zigbee2mqtt/default.nix
+++ b/pkgs/servers/zigbee2mqtt/default.nix
@@ -39,5 +39,6 @@ buildNpmPackage rec {
     '';
     maintainers = with maintainers; [ sweber hexa ];
     platforms = platforms.linux;
+    mainProgram = "zigbee2mqtt";
   };
 }
diff --git a/pkgs/tools/X11/alttab/default.nix b/pkgs/tools/X11/alttab/default.nix
index 7e675c250175..99619bd88d2c 100644
--- a/pkgs/tools/X11/alttab/default.nix
+++ b/pkgs/tools/X11/alttab/default.nix
@@ -53,5 +53,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     platforms = platforms.all;
     maintainers = [ ];
+    mainProgram = "alttab";
   };
 }
diff --git a/pkgs/tools/X11/autocutsel/default.nix b/pkgs/tools/X11/autocutsel/default.nix
index 61a80bcbcdd6..e1b9a3c1c73a 100644
--- a/pkgs/tools/X11/autocutsel/default.nix
+++ b/pkgs/tools/X11/autocutsel/default.nix
@@ -20,5 +20,6 @@ stdenv.mkDerivation rec {
     description = "Tracks changes in the server's cutbuffer and CLIPBOARD selection";
     license = lib.licenses.gpl2Plus;
     platforms = with lib.platforms; all;
+    mainProgram = "autocutsel";
   };
 }
diff --git a/pkgs/tools/X11/bgs/default.nix b/pkgs/tools/X11/bgs/default.nix
index f0150e931551..b50f15a1929c 100644
--- a/pkgs/tools/X11/bgs/default.nix
+++ b/pkgs/tools/X11/bgs/default.nix
@@ -23,5 +23,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = with maintainers; [ pSub ];
+    mainProgram = "bgs";
   };
 }
diff --git a/pkgs/tools/X11/ckbcomp/default.nix b/pkgs/tools/X11/ckbcomp/default.nix
index f78e43dbcc8e..1b50b2456d0a 100644
--- a/pkgs/tools/X11/ckbcomp/default.nix
+++ b/pkgs/tools/X11/ckbcomp/default.nix
@@ -32,5 +32,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     maintainers = with lib.maintainers; [ dezgeg ];
     platforms = platforms.unix;
+    mainProgram = "ckbcomp";
   };
 }
diff --git a/pkgs/tools/X11/devour/default.nix b/pkgs/tools/X11/devour/default.nix
index 016ffa6215db..861eaf905f9d 100644
--- a/pkgs/tools/X11/devour/default.nix
+++ b/pkgs/tools/X11/devour/default.nix
@@ -24,5 +24,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ mazurel ];
     platforms = platforms.unix;
+    mainProgram = "devour";
   };
 }
diff --git a/pkgs/tools/X11/dex/default.nix b/pkgs/tools/X11/dex/default.nix
index 5e0ef6002ce0..c194e1543f29 100644
--- a/pkgs/tools/X11/dex/default.nix
+++ b/pkgs/tools/X11/dex/default.nix
@@ -28,5 +28,6 @@ stdenv.mkDerivation rec {
     platforms = platforms.linux;
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ nickcao ];
+    mainProgram = "dex";
   };
 }
diff --git a/pkgs/tools/X11/dispad/default.nix b/pkgs/tools/X11/dispad/default.nix
index fbb7b117d298..11d46bf24cb6 100644
--- a/pkgs/tools/X11/dispad/default.nix
+++ b/pkgs/tools/X11/dispad/default.nix
@@ -19,5 +19,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2;
     maintainers = with maintainers; [ zimbatm ];
     platforms = platforms.linux;
+    mainProgram = "dispad";
   };
 }
diff --git a/pkgs/tools/X11/ffcast/default.nix b/pkgs/tools/X11/ffcast/default.nix
index 9723ef69b850..9b2611dde210 100644
--- a/pkgs/tools/X11/ffcast/default.nix
+++ b/pkgs/tools/X11/ffcast/default.nix
@@ -36,5 +36,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ sikmir ];
     platforms = platforms.linux;
+    mainProgram = "ffcast";
   };
 }
diff --git a/pkgs/tools/X11/find-cursor/default.nix b/pkgs/tools/X11/find-cursor/default.nix
index 44a7c7662152..3b9862a47dea 100644
--- a/pkgs/tools/X11/find-cursor/default.nix
+++ b/pkgs/tools/X11/find-cursor/default.nix
@@ -22,5 +22,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = [ maintainers.yanganto ];
+    mainProgram = "find-cursor";
   };
 }
diff --git a/pkgs/tools/X11/gobble/default.nix b/pkgs/tools/X11/gobble/default.nix
index 46b1b2c4b482..b61cf78f9921 100644
--- a/pkgs/tools/X11/gobble/default.nix
+++ b/pkgs/tools/X11/gobble/default.nix
@@ -33,5 +33,6 @@ rustPlatform.buildRustPackage rec {
     license = lib.licenses.gpl3Only;
     maintainers = with lib.maintainers; [ vuimuich ];
     platforms = lib.platforms.linux;
+    mainProgram = "gobble";
   };
 }
diff --git a/pkgs/tools/X11/grobi/default.nix b/pkgs/tools/X11/grobi/default.nix
index 08b037972970..cea5fad51e55 100644
--- a/pkgs/tools/X11/grobi/default.nix
+++ b/pkgs/tools/X11/grobi/default.nix
@@ -26,5 +26,6 @@ buildGoModule rec {
     description = "Automatically configure monitors/outputs for Xorg via RANDR";
     license = with licenses; [ bsd2 ];
     platforms   = platforms.linux;
+    mainProgram = "grobi";
   };
 }
diff --git a/pkgs/tools/X11/icon-slicer/default.nix b/pkgs/tools/X11/icon-slicer/default.nix
index 37b309c54b76..514b39496ffa 100644
--- a/pkgs/tools/X11/icon-slicer/default.nix
+++ b/pkgs/tools/X11/icon-slicer/default.nix
@@ -25,5 +25,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     maintainers = with maintainers; [ zaninime ];
     platforms = platforms.linux;
+    mainProgram = "icon-slicer";
   };
 }
diff --git a/pkgs/tools/X11/imwheel/default.nix b/pkgs/tools/X11/imwheel/default.nix
index 79fbe65af1f2..bab363583a6c 100644
--- a/pkgs/tools/X11/imwheel/default.nix
+++ b/pkgs/tools/X11/imwheel/default.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ jhillyerd ];
     platforms = platforms.linux;
     license = licenses.gpl2;
+    mainProgram = "imwheel";
   };
 }
diff --git a/pkgs/tools/X11/inputplug/default.nix b/pkgs/tools/X11/inputplug/default.nix
index e6bf334cf4c0..80d97190a0ce 100644
--- a/pkgs/tools/X11/inputplug/default.nix
+++ b/pkgs/tools/X11/inputplug/default.nix
@@ -34,6 +34,7 @@ rustPlatform.buildRustPackage rec {
     # `daemon(3)` is deprecated on macOS and `pidfile-rs` needs updating
     broken = stdenv.isDarwin;
     maintainers = with maintainers; [ jecaro ];
+    mainProgram = "inputplug";
   };
 }
 
diff --git a/pkgs/tools/X11/kdocker/default.nix b/pkgs/tools/X11/kdocker/default.nix
index 21a11f8fa31a..e8c08e4c3832 100644
--- a/pkgs/tools/X11/kdocker/default.nix
+++ b/pkgs/tools/X11/kdocker/default.nix
@@ -50,5 +50,6 @@ stdenv.mkDerivation (finalAttrs: {
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ hexclover ];
     platforms = platforms.linux;
+    mainProgram = "kdocker";
   };
 })
diff --git a/pkgs/tools/X11/keynav/default.nix b/pkgs/tools/X11/keynav/default.nix
index 4a2a0e8b5904..63732f478cba 100644
--- a/pkgs/tools/X11/keynav/default.nix
+++ b/pkgs/tools/X11/keynav/default.nix
@@ -58,5 +58,6 @@ stdenv.mkDerivation {
     license = licenses.bsd3;
     maintainers = with maintainers; [ pSub ];
     platforms = platforms.linux;
+    mainProgram = "keynav";
   };
 }
diff --git a/pkgs/tools/X11/ksuperkey/default.nix b/pkgs/tools/X11/ksuperkey/default.nix
index 8b77ae550300..733022948dbd 100644
--- a/pkgs/tools/X11/ksuperkey/default.nix
+++ b/pkgs/tools/X11/ksuperkey/default.nix
@@ -22,5 +22,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3;
     maintainers = [ ];
     platforms = platforms.linux;
+    mainProgram = "ksuperkey";
   };
 }
diff --git a/pkgs/tools/X11/nitrogen/default.nix b/pkgs/tools/X11/nitrogen/default.nix
index deefddf23cea..6097948a7cd3 100644
--- a/pkgs/tools/X11/nitrogen/default.nix
+++ b/pkgs/tools/X11/nitrogen/default.nix
@@ -29,5 +29,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.gpl2;
     platforms = lib.platforms.linux;
     maintainers = [ lib.maintainers.auntie ];
+    mainProgram = "nitrogen";
   };
 }
diff --git a/pkgs/tools/X11/obconf/default.nix b/pkgs/tools/X11/obconf/default.nix
index efd8b60419be..f4f9fd433fde 100644
--- a/pkgs/tools/X11/obconf/default.nix
+++ b/pkgs/tools/X11/obconf/default.nix
@@ -48,5 +48,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.gpl2Plus;
     maintainers = [ lib.maintainers.sfrijters ];
     platforms = lib.platforms.linux;
+    mainProgram = "obconf";
   };
 }
diff --git a/pkgs/tools/X11/paperview/default.nix b/pkgs/tools/X11/paperview/default.nix
index 790eaed53ab5..30f04702708a 100644
--- a/pkgs/tools/X11/paperview/default.nix
+++ b/pkgs/tools/X11/paperview/default.nix
@@ -31,5 +31,6 @@ stdenv.mkDerivation rec {
     platforms = platforms.linux;
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ _3JlOy-PYCCKUi ];
+    mainProgram = "paperview";
   };
 }
diff --git a/pkgs/tools/X11/pmenu/default.nix b/pkgs/tools/X11/pmenu/default.nix
index c5f6274d988e..278a181f5c92 100644
--- a/pkgs/tools/X11/pmenu/default.nix
+++ b/pkgs/tools/X11/pmenu/default.nix
@@ -56,5 +56,6 @@ stdenv.mkDerivation (finalAttrs: {
     '';
     maintainers = [ lib.maintainers.azahi ];
     platforms = lib.platforms.unix;
+    mainProgram = "pmenu";
   };
 })
diff --git a/pkgs/tools/X11/ratmen/default.nix b/pkgs/tools/X11/ratmen/default.nix
index 8a07b41ac371..0fe85a9ae452 100644
--- a/pkgs/tools/X11/ratmen/default.nix
+++ b/pkgs/tools/X11/ratmen/default.nix
@@ -22,5 +22,6 @@ stdenv.mkDerivation rec {
     platforms = platforms.linux;
     homepage = "http://www.update.uu.se/~zrajm/programs/";
     downloadPage = "http://www.update.uu.se/~zrajm/programs/ratmen/";
+    mainProgram = "ratmen";
   };
 }
diff --git a/pkgs/tools/X11/run-scaled/default.nix b/pkgs/tools/X11/run-scaled/default.nix
index d62b38bdf287..b9cdc20f78aa 100644
--- a/pkgs/tools/X11/run-scaled/default.nix
+++ b/pkgs/tools/X11/run-scaled/default.nix
@@ -26,5 +26,6 @@ stdenv.mkDerivation {
     maintainers = [ maintainers.snaar ];
     license = licenses.bsd3;
     platforms = platforms.unix;
+    mainProgram = "run_scaled";
   };
 }
diff --git a/pkgs/tools/X11/sbs/default.nix b/pkgs/tools/X11/sbs/default.nix
index 02a25ba467fb..8f16729cd256 100644
--- a/pkgs/tools/X11/sbs/default.nix
+++ b/pkgs/tools/X11/sbs/default.nix
@@ -23,5 +23,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2;
     platforms = platforms.linux;
     maintainers = with maintainers; [ onur-ozkan ];
+    mainProgram = "sbs";
   };
 }
diff --git a/pkgs/tools/X11/setroot/default.nix b/pkgs/tools/X11/setroot/default.nix
index bc7b468caaf8..2c7729eab3ad 100644
--- a/pkgs/tools/X11/setroot/default.nix
+++ b/pkgs/tools/X11/setroot/default.nix
@@ -35,5 +35,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.vyp ];
     platforms = platforms.unix;
+    mainProgram = "setroot";
   };
 }
diff --git a/pkgs/tools/X11/smart-wallpaper/default.nix b/pkgs/tools/X11/smart-wallpaper/default.nix
index f992838935c7..8f41bb7a78af 100644
--- a/pkgs/tools/X11/smart-wallpaper/default.nix
+++ b/pkgs/tools/X11/smart-wallpaper/default.nix
@@ -34,5 +34,6 @@ stdenvNoCC.mkDerivation {
     license = licenses.bsd2;
     maintainers = with maintainers; [ baitinq ];
     platforms = platforms.linux;
+    mainProgram = "smart-wallpaper";
   };
 }
diff --git a/pkgs/tools/X11/srandrd/default.nix b/pkgs/tools/X11/srandrd/default.nix
index 84f43301bbd7..0d51bf4785ec 100644
--- a/pkgs/tools/X11/srandrd/default.nix
+++ b/pkgs/tools/X11/srandrd/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = [ maintainers.utdemir ];
+    mainProgram = "srandrd";
   };
 
 }
diff --git a/pkgs/tools/X11/sselp/default.nix b/pkgs/tools/X11/sselp/default.nix
index d22884270dd4..de083a32028d 100644
--- a/pkgs/tools/X11/sselp/default.nix
+++ b/pkgs/tools/X11/sselp/default.nix
@@ -23,5 +23,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.mit;
     maintainers = [lib.maintainers.magnetophon ];
     platforms = lib.platforms.linux;
+    mainProgram = "sselp";
   };
 }
diff --git a/pkgs/tools/X11/sx/default.nix b/pkgs/tools/X11/sx/default.nix
index f48e59c753eb..d408af8245bc 100644
--- a/pkgs/tools/X11/sx/default.nix
+++ b/pkgs/tools/X11/sx/default.nix
@@ -35,5 +35,6 @@ stdenvNoCC.mkDerivation rec {
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = with maintainers; [ figsoda thiagokokada ];
+    mainProgram = "sx";
   };
 }
diff --git a/pkgs/tools/X11/vdpauinfo/default.nix b/pkgs/tools/X11/vdpauinfo/default.nix
index a5fc87aaf6f2..0ca3354433dc 100644
--- a/pkgs/tools/X11/vdpauinfo/default.nix
+++ b/pkgs/tools/X11/vdpauinfo/default.nix
@@ -19,5 +19,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit; # expat version
     platforms = platforms.unix;
     maintainers = with maintainers; [ vcunat ];
+    mainProgram = "vdpauinfo";
   };
 }
diff --git a/pkgs/tools/X11/wayv/default.nix b/pkgs/tools/X11/wayv/default.nix
index 2bdeff6a5790..eae930de1dd9 100644
--- a/pkgs/tools/X11/wayv/default.nix
+++ b/pkgs/tools/X11/wayv/default.nix
@@ -37,5 +37,6 @@ stdenv.mkDerivation rec {
     maintainers = [lib.maintainers.raskin];
     platforms = lib.platforms.linux;
     homepage = "https://github.com/mikemb/wayV";
+    mainProgram = "wayv";
   };
 }
diff --git a/pkgs/tools/X11/wmctrl/default.nix b/pkgs/tools/X11/wmctrl/default.nix
index 19a464aff72a..08a3e9c365f4 100644
--- a/pkgs/tools/X11/wmctrl/default.nix
+++ b/pkgs/tools/X11/wmctrl/default.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation rec {
     license = lib.licenses.gpl2;
     platforms = with lib.platforms; all;
     maintainers = [ lib.maintainers.Anton-Latukha ];
+    mainProgram = "wmctrl";
   };
 
 }
diff --git a/pkgs/tools/X11/x11vnc/default.nix b/pkgs/tools/X11/x11vnc/default.nix
index e9e9e4b4daba..8c48951b2d42 100644
--- a/pkgs/tools/X11/x11vnc/default.nix
+++ b/pkgs/tools/X11/x11vnc/default.nix
@@ -57,5 +57,6 @@ stdenv.mkDerivation rec {
     platforms = platforms.linux;
     license = licenses.gpl2;
     maintainers = with maintainers; [ OPNA2608 ];
+    mainProgram = "x11vnc";
   };
 }
diff --git a/pkgs/tools/X11/x2vnc/default.nix b/pkgs/tools/X11/x2vnc/default.nix
index ed4a83fc8de0..8c9648e71d37 100644
--- a/pkgs/tools/X11/x2vnc/default.nix
+++ b/pkgs/tools/X11/x2vnc/default.nix
@@ -20,5 +20,6 @@ stdenv.mkDerivation rec {
     description = "A program to control a remote VNC server";
     platforms = platforms.unix;
     license = licenses.gpl2;
+    mainProgram = "x2vnc";
   };
 }
diff --git a/pkgs/tools/X11/x2x/default.nix b/pkgs/tools/X11/x2x/default.nix
index 3a766d63ba97..061f1d190318 100644
--- a/pkgs/tools/X11/x2x/default.nix
+++ b/pkgs/tools/X11/x2x/default.nix
@@ -19,5 +19,6 @@ stdenv.mkDerivation rec {
     homepage = "https://github.com/dottedmag/x2x";
     license = licenses.bsd3;
     platforms = platforms.linux;
+    mainProgram = "x2x";
   };
 }
diff --git a/pkgs/tools/X11/xannotate/default.nix b/pkgs/tools/X11/xannotate/default.nix
index fe6d5cae6ee1..148bbcfe7af4 100644
--- a/pkgs/tools/X11/xannotate/default.nix
+++ b/pkgs/tools/X11/xannotate/default.nix
@@ -28,5 +28,6 @@ stdenv.mkDerivation rec {
     maintainers = [lib.maintainers.raskin];
     platforms = lib.platforms.linux;
     homepage = "https://github.com/blais/xannotate";
+    mainProgram = "xannotate";
   };
 }
diff --git a/pkgs/tools/X11/xbanish/default.nix b/pkgs/tools/X11/xbanish/default.nix
index 9aa7e4f5b023..9a8780324b84 100644
--- a/pkgs/tools/X11/xbanish/default.nix
+++ b/pkgs/tools/X11/xbanish/default.nix
@@ -38,5 +38,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.bsd3;
     maintainers = [lib.maintainers.choochootrain];
     platforms = lib.platforms.linux;
+    mainProgram = "xbanish";
   };
 }
diff --git a/pkgs/tools/X11/xbindkeys-config/default.nix b/pkgs/tools/X11/xbindkeys-config/default.nix
index e9d6d42b0689..8a5c07ef96ec 100644
--- a/pkgs/tools/X11/xbindkeys-config/default.nix
+++ b/pkgs/tools/X11/xbindkeys-config/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
     license = lib.licenses.gpl2Plus;
     maintainers = with lib.maintainers; [benley];
     platforms = with lib.platforms; linux;
+    mainProgram = "xbindkeys-config";
   };
 
   patches = [ ./xbindkeys-config-patch1.patch ];
diff --git a/pkgs/tools/X11/xborders/default.nix b/pkgs/tools/X11/xborders/default.nix
index f9e78034c3c0..379f976acf45 100644
--- a/pkgs/tools/X11/xborders/default.nix
+++ b/pkgs/tools/X11/xborders/default.nix
@@ -53,5 +53,6 @@ python3Packages.buildPythonPackage rec {
     license = licenses.unlicense;
     maintainers = with maintainers; [ elnudev ];
     platforms = platforms.linux;
+    mainProgram = "xborders";
   };
 }
diff --git a/pkgs/tools/X11/xbrightness/default.nix b/pkgs/tools/X11/xbrightness/default.nix
index 1445c60ccb19..c022371c01d9 100644
--- a/pkgs/tools/X11/xbrightness/default.nix
+++ b/pkgs/tools/X11/xbrightness/default.nix
@@ -21,5 +21,6 @@ stdenv.mkDerivation rec {
     homepage = "http://shallowsky.com/software";
     license = lib.licenses.mit;
     platforms = lib.platforms.linux;
+    mainProgram = "xbrightness";
   };
 }
diff --git a/pkgs/tools/X11/xcalib/default.nix b/pkgs/tools/X11/xcalib/default.nix
index 09d5cde88fe6..4960aff0f7b0 100644
--- a/pkgs/tools/X11/xcalib/default.nix
+++ b/pkgs/tools/X11/xcalib/default.nix
@@ -24,5 +24,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2;
     maintainers = [];
     platforms = platforms.linux;
+    mainProgram = "xcalib";
   };
 }
diff --git a/pkgs/tools/X11/xcape/default.nix b/pkgs/tools/X11/xcape/default.nix
index f8d4376017bd..c62e29cedc15 100644
--- a/pkgs/tools/X11/xcape/default.nix
+++ b/pkgs/tools/X11/xcape/default.nix
@@ -37,5 +37,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3 ;
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
+    mainProgram = "xcape";
   };
 }
diff --git a/pkgs/tools/X11/xchainkeys/default.nix b/pkgs/tools/X11/xchainkeys/default.nix
index 5c154f8a1116..7a251b30a47b 100644
--- a/pkgs/tools/X11/xchainkeys/default.nix
+++ b/pkgs/tools/X11/xchainkeys/default.nix
@@ -16,5 +16,6 @@ stdenv.mkDerivation rec {
     description = "A standalone X11 program to create chained key bindings";
     license = lib.licenses.gpl3;
     platforms = lib.platforms.unix;
+    mainProgram = "xchainkeys";
   };
 }
diff --git a/pkgs/tools/X11/xcwd/default.nix b/pkgs/tools/X11/xcwd/default.nix
index 6dbd8606485a..d60390952dd7 100644
--- a/pkgs/tools/X11/xcwd/default.nix
+++ b/pkgs/tools/X11/xcwd/default.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation rec {
     maintainers = [ maintainers.grburst ];
     license = licenses.bsd3;
     platforms = platforms.linux;
+    mainProgram = "xcwd";
   };
 }
diff --git a/pkgs/tools/X11/xdotool/default.nix b/pkgs/tools/X11/xdotool/default.nix
index 736c05c7c7db..bcb48ac44fac 100644
--- a/pkgs/tools/X11/xdotool/default.nix
+++ b/pkgs/tools/X11/xdotool/default.nix
@@ -26,5 +26,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.bsd3;
     maintainers = with lib.maintainers; [viric];
     platforms = with lib.platforms; linux;
+    mainProgram = "xdotool";
   };
 }
diff --git a/pkgs/tools/X11/xgeometry-select/default.nix b/pkgs/tools/X11/xgeometry-select/default.nix
index 9f9b50feab90..005bf302cc34 100644
--- a/pkgs/tools/X11/xgeometry-select/default.nix
+++ b/pkgs/tools/X11/xgeometry-select/default.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation rec {
     homepage    = "https://bbs.archlinux.org/viewtopic.php?pid=660837";
     maintainers = with maintainers; [ obadz ];
     platforms   = platforms.linux;
+    mainProgram = "xgeometry-select";
   };
 }
diff --git a/pkgs/tools/X11/xinput_calibrator/default.nix b/pkgs/tools/X11/xinput_calibrator/default.nix
index 25b419ade4e3..d8afb3e4a896 100644
--- a/pkgs/tools/X11/xinput_calibrator/default.nix
+++ b/pkgs/tools/X11/xinput_calibrator/default.nix
@@ -22,5 +22,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.mit;
     maintainers = [ lib.maintainers.flosse ];
     platforms = lib.platforms.linux;
+    mainProgram = "xinput_calibrator";
   };
 }
diff --git a/pkgs/tools/X11/xkb-switch-i3/default.nix b/pkgs/tools/X11/xkb-switch-i3/default.nix
index 6333c1abc740..975eeb986614 100644
--- a/pkgs/tools/X11/xkb-switch-i3/default.nix
+++ b/pkgs/tools/X11/xkb-switch-i3/default.nix
@@ -30,5 +30,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ewok ];
     platforms = platforms.linux;
+    mainProgram = "xkb-switch";
   };
 }
diff --git a/pkgs/tools/X11/xkb-switch/default.nix b/pkgs/tools/X11/xkb-switch/default.nix
index e2f15d969edd..7db592532234 100644
--- a/pkgs/tools/X11/xkb-switch/default.nix
+++ b/pkgs/tools/X11/xkb-switch/default.nix
@@ -20,5 +20,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ smironov ];
     platforms = platforms.linux;
+    mainProgram = "xkb-switch";
   };
 }
diff --git a/pkgs/tools/X11/xkbset/default.nix b/pkgs/tools/X11/xkbset/default.nix
index 645770f7e015..9c4bc81744fa 100644
--- a/pkgs/tools/X11/xkbset/default.nix
+++ b/pkgs/tools/X11/xkbset/default.nix
@@ -30,5 +30,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ drets ];
     platforms = platforms.linux;
     license = licenses.bsd3;
+    mainProgram = "xkbset";
   };
 }
diff --git a/pkgs/tools/X11/xkbvalidate/default.nix b/pkgs/tools/X11/xkbvalidate/default.nix
index 92a47aa65638..b39e697f7741 100644
--- a/pkgs/tools/X11/xkbvalidate/default.nix
+++ b/pkgs/tools/X11/xkbvalidate/default.nix
@@ -7,6 +7,7 @@ runCommandCC "xkbvalidate" {
     license = lib.licenses.mit;
     platforms = lib.platforms.unix;
     maintainers = [ lib.maintainers.aszlig ];
+    mainProgram = "xkbvalidate";
   };
 } ''
   mkdir -p "$out/bin"
diff --git a/pkgs/tools/X11/xlayoutdisplay/default.nix b/pkgs/tools/X11/xlayoutdisplay/default.nix
index 593b40a2ade7..499bd4694592 100644
--- a/pkgs/tools/X11/xlayoutdisplay/default.nix
+++ b/pkgs/tools/X11/xlayoutdisplay/default.nix
@@ -31,5 +31,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ dtzWill ];
     license = licenses.asl20;
     platforms = platforms.linux;
+    mainProgram = "xlayoutdisplay";
   };
 }
diff --git a/pkgs/tools/X11/xlogo/default.nix b/pkgs/tools/X11/xlogo/default.nix
index 8c30b34eca75..7b8e9bf52212 100644
--- a/pkgs/tools/X11/xlogo/default.nix
+++ b/pkgs/tools/X11/xlogo/default.nix
@@ -32,5 +32,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ raboof ];
     platforms = platforms.unix;
     license = licenses.mit;
+    mainProgram = "xlogo";
   };
 }
diff --git a/pkgs/tools/X11/xmcp/default.nix b/pkgs/tools/X11/xmcp/default.nix
index 178861d63724..228d502c4b7c 100644
--- a/pkgs/tools/X11/xmcp/default.nix
+++ b/pkgs/tools/X11/xmcp/default.nix
@@ -29,5 +29,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ azahi ];
     platforms = platforms.linux;
+    mainProgram = "xmcp";
   };
 }
diff --git a/pkgs/tools/X11/xmousepasteblock/default.nix b/pkgs/tools/X11/xmousepasteblock/default.nix
index ec6a5b0b8e11..121ec93b2242 100644
--- a/pkgs/tools/X11/xmousepasteblock/default.nix
+++ b/pkgs/tools/X11/xmousepasteblock/default.nix
@@ -17,5 +17,6 @@ stdenv.mkDerivation rec {
     homepage = "https://github.com/milaq/XMousePasteBlock";
     license = lib.licenses.gpl2;
     maintainers = [ maintainers.petercommand ];
+    mainProgram = "xmousepasteblock";
   };
 }
diff --git a/pkgs/tools/X11/xnotify/default.nix b/pkgs/tools/X11/xnotify/default.nix
index e5c6c31e7dbb..cdd7d54b5294 100644
--- a/pkgs/tools/X11/xnotify/default.nix
+++ b/pkgs/tools/X11/xnotify/default.nix
@@ -50,5 +50,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     maintainers = with maintainers; [ azahi ];
     platforms = platforms.unix;
+    mainProgram = "xnotify";
   };
 }
diff --git a/pkgs/tools/X11/xob/default.nix b/pkgs/tools/X11/xob/default.nix
index 71e50248df97..e6e2fc273020 100644
--- a/pkgs/tools/X11/xob/default.nix
+++ b/pkgs/tools/X11/xob/default.nix
@@ -31,5 +31,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     platforms = platforms.unix;
     maintainers = with maintainers; [ florentc ];
+    mainProgram = "xob";
   };
 }
diff --git a/pkgs/tools/X11/xplugd/default.nix b/pkgs/tools/X11/xplugd/default.nix
index aa07c7f37b1b..f5b81571ef2d 100644
--- a/pkgs/tools/X11/xplugd/default.nix
+++ b/pkgs/tools/X11/xplugd/default.nix
@@ -26,5 +26,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = with maintainers; [ akho ];
+    mainProgram = "xplugd";
   };
 }
diff --git a/pkgs/tools/X11/xpointerbarrier/default.nix b/pkgs/tools/X11/xpointerbarrier/default.nix
index 33271090678f..8621e7644365 100644
--- a/pkgs/tools/X11/xpointerbarrier/default.nix
+++ b/pkgs/tools/X11/xpointerbarrier/default.nix
@@ -34,5 +34,6 @@ stdenv.mkDerivation (finalAttrs: {
     license = licenses.mit;
     maintainers = with maintainers; [ AndersonTorres xzfc ];
     platforms = platforms.linux;
+    mainProgram = "xpointerbarrier";
   };
 })
diff --git a/pkgs/tools/X11/xprintidle-ng/default.nix b/pkgs/tools/X11/xprintidle-ng/default.nix
index ec8a2ed459d3..ebe3d2a61992 100644
--- a/pkgs/tools/X11/xprintidle-ng/default.nix
+++ b/pkgs/tools/X11/xprintidle-ng/default.nix
@@ -67,5 +67,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.gpl2Only;
     maintainers = [ lib.maintainers.raskin ];
     platforms = lib.platforms.linux;
+    mainProgram = "xprintidle-ng";
   };
 }
diff --git a/pkgs/tools/X11/xprintidle/default.nix b/pkgs/tools/X11/xprintidle/default.nix
index 400306db6efd..4a0d371a7fd6 100644
--- a/pkgs/tools/X11/xprintidle/default.nix
+++ b/pkgs/tools/X11/xprintidle/default.nix
@@ -36,5 +36,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ fgaz ];
     platforms = platforms.linux;
+    mainProgram = "xprintidle";
   };
 }
diff --git a/pkgs/tools/X11/xprompt/default.nix b/pkgs/tools/X11/xprompt/default.nix
index 191b0316fa80..15f7b337c879 100644
--- a/pkgs/tools/X11/xprompt/default.nix
+++ b/pkgs/tools/X11/xprompt/default.nix
@@ -50,5 +50,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     maintainers = with maintainers; [ azahi ];
     platforms = platforms.unix;
+    mainProgram = "xprompt";
   };
 }
diff --git a/pkgs/tools/X11/xrectsel/default.nix b/pkgs/tools/X11/xrectsel/default.nix
index 8b37a6792424..7eef352aea53 100644
--- a/pkgs/tools/X11/xrectsel/default.nix
+++ b/pkgs/tools/X11/xrectsel/default.nix
@@ -20,5 +20,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ sikmir ];
     platforms = platforms.linux;
+    mainProgram = "xrectsel";
   };
 }
diff --git a/pkgs/tools/X11/xrestop/default.nix b/pkgs/tools/X11/xrestop/default.nix
index dd3766160c01..2837d2a83d73 100644
--- a/pkgs/tools/X11/xrestop/default.nix
+++ b/pkgs/tools/X11/xrestop/default.nix
@@ -18,5 +18,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ qyliss ];
     platforms = platforms.unix;
     license = licenses.gpl2Plus;
+    mainProgram = "xrestop";
   };
 }
diff --git a/pkgs/tools/X11/xtrace/default.nix b/pkgs/tools/X11/xtrace/default.nix
index dfd834e67b80..de1ea88266e2 100644
--- a/pkgs/tools/X11/xtrace/default.nix
+++ b/pkgs/tools/X11/xtrace/default.nix
@@ -26,5 +26,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2;
     maintainers = with maintainers; [ viric ];
     platforms = with platforms; linux;
+    mainProgram = "xtrace";
   };
 }
diff --git a/pkgs/tools/X11/xtruss/default.nix b/pkgs/tools/X11/xtruss/default.nix
index 9e2ee94efa4a..790312335ab2 100644
--- a/pkgs/tools/X11/xtruss/default.nix
+++ b/pkgs/tools/X11/xtruss/default.nix
@@ -16,5 +16,6 @@ stdenv.mkDerivation rec {
     homepage = "https://www.chiark.greenend.org.uk/~sgtatham/xtruss";
     license = licenses.mit;
     maintainers = with maintainers; [ dtzWill ];
+    mainProgram = "xtruss";
   };
 }
diff --git a/pkgs/tools/X11/xvkbd/default.nix b/pkgs/tools/X11/xvkbd/default.nix
index 32355205d59a..7ed6b355a799 100644
--- a/pkgs/tools/X11/xvkbd/default.nix
+++ b/pkgs/tools/X11/xvkbd/default.nix
@@ -34,5 +34,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     maintainers = [ maintainers.bennofs ];
     platforms = platforms.linux;
+    mainProgram = "xvkbd";
   };
 }
diff --git a/pkgs/tools/X11/xwallpaper/default.nix b/pkgs/tools/X11/xwallpaper/default.nix
index 051a3a0d0fe7..df93e10fe194 100644
--- a/pkgs/tools/X11/xwallpaper/default.nix
+++ b/pkgs/tools/X11/xwallpaper/default.nix
@@ -36,5 +36,6 @@ stdenv.mkDerivation rec {
     license = licenses.isc;
     maintainers = with maintainers; [ ivar ];
     platforms = platforms.linux;
+    mainProgram = "xwallpaper";
   };
 }
diff --git a/pkgs/tools/X11/xwinmosaic/default.nix b/pkgs/tools/X11/xwinmosaic/default.nix
index 51ba815f1de4..1189fd8f86aa 100644
--- a/pkgs/tools/X11/xwinmosaic/default.nix
+++ b/pkgs/tools/X11/xwinmosaic/default.nix
@@ -29,5 +29,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.bsd2 ;
     maintainers = [lib.maintainers.raskin];
     platforms = lib.platforms.linux;
+    mainProgram = "xwinmosaic";
   };
 }
diff --git a/pkgs/tools/X11/xwinwrap/default.nix b/pkgs/tools/X11/xwinwrap/default.nix
index e5bc5743c28d..d36d2c51de5e 100644
--- a/pkgs/tools/X11/xwinwrap/default.nix
+++ b/pkgs/tools/X11/xwinwrap/default.nix
@@ -50,5 +50,6 @@ stdenv.mkDerivation rec {
     homepage = "https://shantanugoel.com/2008/09/03/shantz-xwinwrap/";
     maintainers = with maintainers; [ infinisil ];
     platforms = platforms.linux;
+    mainProgram = "xwinwrap";
   };
 }
diff --git a/pkgs/tools/X11/xzoom/default.nix b/pkgs/tools/X11/xzoom/default.nix
index 7ba6bbee223d..0e368651000d 100644
--- a/pkgs/tools/X11/xzoom/default.nix
+++ b/pkgs/tools/X11/xzoom/default.nix
@@ -32,5 +32,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.free ;
     maintainers = [lib.maintainers.raskin];
     platforms = lib.platforms.linux;
+    mainProgram = "xzoom";
   };
 }
diff --git a/pkgs/tools/admin/lxd/package.json b/pkgs/tools/admin/lxd/package.json
deleted file mode 100644
index e30b269605ee..000000000000
--- a/pkgs/tools/admin/lxd/package.json
+++ /dev/null
@@ -1,104 +0,0 @@
-{
-  "name": "lxd-ui",
-  "version": "0.0.1",
-  "author": "Canonical Webteam",
-  "license": "LGPL-3.0-only",
-  "scripts": {
-    "clean": "rm -rf node_modules yarn-error.log *.log build/ .jekyll-metadata .bundle playwright-report test-results haproxy-local.cfg",
-    "build-html": "cp build/ui/index.html build/index.html",
-    "build": "npx vite build && yarn build-html",
-    "format-js-eslint": "eslint 'src/**/*.{json,jsx,tsx,ts}' 'tests/**/*.ts' --fix",
-    "format-js-prettier": "prettier 'src/**/*.{json,jsx,tsx,ts}' 'tests/**/*.ts' --write",
-    "format-js": "yarn format-js-eslint && yarn format-js-prettier",
-    "lint-scss": "stylelint 'src/**/*.scss'",
-    "lint-js-eslint": "eslint 'src/**/*.{json,tsx,ts}' 'tests/**/*.ts' .eslintrc.js babel.config.js",
-    "lint-js-prettier": "prettier 'src/**/*.{json,tsx,ts}' 'tests/**/*.ts' .eslintrc.js babel.config.js --check",
-    "lint-js": "yarn lint-js-eslint && yarn lint-js-prettier",
-    "hooks-add": "husky install",
-    "hooks-remove": "husky uninstall",
-    "start": "concurrently --kill-others --raw 'vite | grep -v localhost' 'yarn serve'",
-    "serve": "./entrypoint",
-    "test-js": "react-scripts test src/ --watchAll=false"},
-  "dependencies": {
-    "@canonical/react-components": "0.47.0",
-    "@monaco-editor/react": "^4.4.6",
-    "@tanstack/react-query": "^4.14.5",
-    "@use-it/event-listener": "^0.1.7",
-    "axios": "1.3.2",
-    "cytoscape": "3.23.0",
-    "cytoscape-popper": "2.0.0",
-    "formik": "2.2.9",
-    "js-yaml": "4.1.0",
-    "lodash.isequal": "4.5.0",
-    "node-forge": "1.3.1",
-    "parse-prometheus-text-format": "1.1.1",
-    "react": "18.2.0",
-    "react-cytoscapejs": "2.0.0",
-    "react-dom": "18.2.0",
-    "react-router-dom": "6.6.1",
-    "react-scripts": "5.0.1",
-    "react-useportal": "^1.0.17",
-    "serve": "14.1.2",
-    "vanilla-framework": "4.3.0",
-    "xterm-addon-fit": "0.6.0",
-    "xterm-for-react": "1.0.4",
-    "yup": "0.32.11"
-  },
-  "devDependencies": {
-    "@babel/core": "7.20.7",
-    "@babel/eslint-parser": "7.19.1",
-    "@babel/preset-env": "7.20.2",
-    "@babel/preset-react": "7.18.6",
-    "@babel/preset-typescript": "7.18.6",
-    "@playwright/test": "^1.29.1",
-    "@types/cytoscape-popper": "2.0.0",
-    "@types/node-forge": "1.3.1",
-    "@types/react": "18.0.26",
-    "@types/react-cytoscapejs": "1.2.2",
-    "@types/react-dom": "18.0.10",
-    "@types/react-router-dom": "5.3.3",
-    "@types/websocket": "1.0.5",
-    "@typescript-eslint/eslint-plugin": "5.48.0",
-    "@typescript-eslint/parser": "5.48.0",
-    "@vitejs/plugin-react": "^3.1.0",
-    "autoprefixer": "10.4.13",
-    "babel-loader": "9.1.0",
-    "babel-plugin-transform-es2015-modules-commonjs": "6.26.2",
-    "concurrently": "7.6.0",
-    "css-loader": "6.7.3",
-    "eslint": "8.31.0",
-    "eslint-config-prettier": "8.6.0",
-    "eslint-plugin-prettier": "4.2.1",
-    "eslint-plugin-react": "7.31.11",
-    "husky": "8.0.0",
-    "lint-staged": "13.1.1",
-    "monaco-editor": "0.36.1",
-    "postcss": "8.4.20",
-    "postcss-cli": "10.1.0",
-    "prettier": "2.8.1",
-    "sass": "1.57.1",
-    "sass-loader": "13.2.0",
-    "style-loader": "3.3.1",
-    "stylelint": "15.10.1",
-    "stylelint-config-prettier": "9.0.4",
-    "stylelint-config-standard-scss": "6.1.0",
-    "stylelint-order": "5.0.0",
-    "stylelint-prettier": "2.0.0",
-    "stylelint-scss": "4.3.0",
-    "ts-loader": "9.4.2",
-    "typescript": "4.9.4",
-    "vite": "^4.1.0",
-    "vite-tsconfig-paths": "4.0.5"
-  },
-  "lint-staged": {
-    "src/**/*.{json,jsx,ts,tsx}": [
-      "eslint",
-      "prettier --check"
-    ],
-    "tests/**/*.{json,jsx,ts,tsx}": [
-      "eslint",
-      "prettier --check"
-    ],
-    "src/**/*.scss": "stylelint"
-  }
-}
diff --git a/pkgs/tools/admin/lxd/ui.nix b/pkgs/tools/admin/lxd/ui.nix
index b0582ef99969..c248199b4ad7 100644
--- a/pkgs/tools/admin/lxd/ui.nix
+++ b/pkgs/tools/admin/lxd/ui.nix
@@ -1,35 +1,61 @@
-{ mkYarnPackage
+{ lib
+, stdenv
 , fetchFromGitHub
 , fetchYarnDeps
-, lib
+, nodejs
+, prefetch-yarn-deps
+, yarn
 }:
 
-mkYarnPackage rec {
+stdenv.mkDerivation rec {
   pname = "lxd-ui";
-  version = "0.2";
+  version = "0.4";
 
   src = fetchFromGitHub {
     owner = "canonical";
     repo = "lxd-ui";
     rev = "refs/tags/${version}";
-    sha256 = "sha256-DygWNktangFlAqinBm6wWsRLGmX6yjhmRJ2iU0yjcgk=";
+    hash = "sha256-l9Fp/Vm7NxMCp5QcM8+frFyfahhPG7TyF6NhfU1SEaA=";
   };
 
-  packageJSON = ./package.json;
   offlineCache = fetchYarnDeps {
     yarnLock = "${src}/yarn.lock";
-    sha256 = "sha256-B1SVCViX1LEFoBLMdFk9qaoayku7Y+zU5c4JEJkLmwE=";
+    hash = "sha256-R6OeaBC6xBHa229YGyc2LDjjenwvS805PW8ueU/o99I=";
   };
 
+  nativeBuildInputs = [
+    nodejs
+    prefetch-yarn-deps
+    yarn
+  ];
+
+  configurePhase = ''
+    runHook preConfigure
+
+    export HOME=$(mktemp -d)
+    yarn config --offline set yarn-offline-mirror "$offlineCache"
+    fixup-yarn-lock yarn.lock
+    yarn --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive install
+    patchShebangs node_modules
+
+    runHook postConfigure
+  '';
+
   buildPhase = ''
+    runHook preBuild
+
     yarn --offline build
+
+    runHook postBuild
   '';
 
   installPhase = ''
-    cp -rv deps/lxd-ui/build/ui/ $out
-  '';
+    runHook preInstall
 
-  doDist = false;
+    cp -r build/ui/ $out
+
+    runHook postInstall
+  '';
 
   meta = {
     description = "Web user interface for LXD.";
diff --git a/pkgs/tools/audio/abcm2ps/default.nix b/pkgs/tools/audio/abcm2ps/default.nix
index 249b4ba1706c..c91457231716 100644
--- a/pkgs/tools/audio/abcm2ps/default.nix
+++ b/pkgs/tools/audio/abcm2ps/default.nix
@@ -32,5 +32,6 @@ stdenv.mkDerivation rec {
     description = "A command line program which converts ABC to music sheet in PostScript or SVG format";
     platforms = platforms.unix;
     maintainers = [ maintainers.dotlambda ];
+    mainProgram = "abcm2ps";
   };
 }
diff --git a/pkgs/tools/audio/accuraterip-checksum/default.nix b/pkgs/tools/audio/accuraterip-checksum/default.nix
index 161e9848bea6..8658dfb5a7aa 100644
--- a/pkgs/tools/audio/accuraterip-checksum/default.nix
+++ b/pkgs/tools/audio/accuraterip-checksum/default.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3;
     maintainers = with maintainers; [ ];
     platforms = with platforms; linux;
+    mainProgram = "accuraterip-checksum";
   };
 }
diff --git a/pkgs/tools/audio/acousticbrainz-client/default.nix b/pkgs/tools/audio/acousticbrainz-client/default.nix
index 651605679684..1d4b59ed2c92 100644
--- a/pkgs/tools/audio/acousticbrainz-client/default.nix
+++ b/pkgs/tools/audio/acousticbrainz-client/default.nix
@@ -37,5 +37,6 @@ python3Packages.buildPythonApplication rec {
     # essentia-extractor is only available for those platforms
     platforms = [ "x86_64-linux" "i686-linux" ];
     maintainers = with maintainers; [ ];
+    mainProgram = "abzsubmit";
   };
 }
diff --git a/pkgs/tools/audio/audiowaveform/default.nix b/pkgs/tools/audio/audiowaveform/default.nix
index 11dc8541c5b9..a5fff36322e4 100644
--- a/pkgs/tools/audio/audiowaveform/default.nix
+++ b/pkgs/tools/audio/audiowaveform/default.nix
@@ -33,5 +33,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     platforms = platforms.all;
     maintainers = with maintainers; [ edbentley ];
+    mainProgram = "audiowaveform";
   };
 }
diff --git a/pkgs/tools/audio/bark/default.nix b/pkgs/tools/audio/bark/default.nix
index f943b555b010..e866b1a18a3b 100644
--- a/pkgs/tools/audio/bark/default.nix
+++ b/pkgs/tools/audio/bark/default.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage {
     license = lib.licenses.agpl3Only;
     maintainers = with lib.maintainers; [ samw ];
     platforms = lib.platforms.linux;
+    mainProgram = "bark";
   };
 }
 
diff --git a/pkgs/tools/audio/botamusique/default.nix b/pkgs/tools/audio/botamusique/default.nix
index 02460f61d93b..85c707bda90c 100644
--- a/pkgs/tools/audio/botamusique/default.nix
+++ b/pkgs/tools/audio/botamusique/default.nix
@@ -152,5 +152,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     platforms = platforms.all;
     maintainers = with maintainers; [ infinisil ];
+    mainProgram = "botamusique";
   };
 }
diff --git a/pkgs/tools/audio/catnip-gtk4/default.nix b/pkgs/tools/audio/catnip-gtk4/default.nix
index 2175edb0c523..da677d71bc03 100644
--- a/pkgs/tools/audio/catnip-gtk4/default.nix
+++ b/pkgs/tools/audio/catnip-gtk4/default.nix
@@ -39,5 +39,6 @@ buildGoModule {
     homepage = "https://github.com/diamondburned/catnip-gtk4";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ figsoda ];
+    mainProgram = "catnip-gtk4";
   };
 }
diff --git a/pkgs/tools/audio/catnip/default.nix b/pkgs/tools/audio/catnip/default.nix
index de299738242e..de8a609dfd61 100644
--- a/pkgs/tools/audio/catnip/default.nix
+++ b/pkgs/tools/audio/catnip/default.nix
@@ -46,5 +46,6 @@ buildGoModule rec {
     changelog = "https://github.com/noriah/catnip/releases/tag/${src.rev}";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda ];
+    mainProgram = "catnip";
   };
 }
diff --git a/pkgs/tools/audio/dsp/default.nix b/pkgs/tools/audio/dsp/default.nix
index e17e211d3402..8c218ab70e8e 100644
--- a/pkgs/tools/audio/dsp/default.nix
+++ b/pkgs/tools/audio/dsp/default.nix
@@ -48,5 +48,6 @@ stdenv.mkDerivation (finalAttrs: {
     license = licenses.isc;
     maintainers = with maintainers; [ aaronjheng ];
     platforms = platforms.linux;
+    mainProgram = "dsp";
   };
 })
diff --git a/pkgs/tools/audio/essentia-extractor/default.nix b/pkgs/tools/audio/essentia-extractor/default.nix
index 4fbdd02e4404..de3bf45d10c5 100644
--- a/pkgs/tools/audio/essentia-extractor/default.nix
+++ b/pkgs/tools/audio/essentia-extractor/default.nix
@@ -35,5 +35,6 @@ stdenv.mkDerivation rec {
     license = licenses.agpl3Plus;
     maintainers = with maintainers; [ lovesegfault ];
     platforms = [ "x86_64-linux" "i686-linux" ];
+    mainProgram = "streaming_extractor_music";
   };
 }
diff --git a/pkgs/tools/audio/gvolicon/default.nix b/pkgs/tools/audio/gvolicon/default.nix
index e15a048b991c..1e552d64cfaa 100644
--- a/pkgs/tools/audio/gvolicon/default.nix
+++ b/pkgs/tools/audio/gvolicon/default.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation {
     platforms = lib.platforms.linux;
     license = lib.licenses.gpl3Plus;
     maintainers = [ lib.maintainers.bennofs ];
+    mainProgram = "gvolicon";
   };
 }
diff --git a/pkgs/tools/audio/headset-charge-indicator/default.nix b/pkgs/tools/audio/headset-charge-indicator/default.nix
index bed9c415c83b..40005ea9a6e1 100644
--- a/pkgs/tools/audio/headset-charge-indicator/default.nix
+++ b/pkgs/tools/audio/headset-charge-indicator/default.nix
@@ -58,5 +58,6 @@ stdenv.mkDerivation rec {
     platforms = platforms.linux;
     maintainers = with maintainers; [ zebreus ];
     license = licenses.bsd2;
+    mainProgram = "headset-charge-indicator.py";
   };
 }
diff --git a/pkgs/tools/audio/linuxwave/default.nix b/pkgs/tools/audio/linuxwave/default.nix
index 98860675dafc..4d86b31c854e 100644
--- a/pkgs/tools/audio/linuxwave/default.nix
+++ b/pkgs/tools/audio/linuxwave/default.nix
@@ -33,5 +33,6 @@ stdenv.mkDerivation (finalAttrs: {
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ figsoda ];
     inherit (zig_0_10.meta) platforms;
+    mainProgram = "linuxwave";
   };
 })
diff --git a/pkgs/tools/audio/mictray/default.nix b/pkgs/tools/audio/mictray/default.nix
index e757bac96682..d93423e66b49 100644
--- a/pkgs/tools/audio/mictray/default.nix
+++ b/pkgs/tools/audio/mictray/default.nix
@@ -49,5 +49,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3;
     platforms = platforms.linux;
     maintainers = [ maintainers.anpryl ];
+    mainProgram = "mictray";
   };
 }
diff --git a/pkgs/tools/audio/midimonster/default.nix b/pkgs/tools/audio/midimonster/default.nix
index ec55367474f5..8ff97968b000 100644
--- a/pkgs/tools/audio/midimonster/default.nix
+++ b/pkgs/tools/audio/midimonster/default.nix
@@ -52,5 +52,6 @@ stdenv.mkDerivation {
     license = licenses.bsd2;
     platforms = platforms.unix;
     maintainers = with maintainers; [keldu];
+    mainProgram = "midimonster";
   };
 }
diff --git a/pkgs/tools/audio/mp3cat/default.nix b/pkgs/tools/audio/mp3cat/default.nix
index dbcc458164de..5819eb281b2f 100644
--- a/pkgs/tools/audio/mp3cat/default.nix
+++ b/pkgs/tools/audio/mp3cat/default.nix
@@ -30,5 +30,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2;
     maintainers = [ maintainers.omnipotententity ];
     platforms = platforms.all;
+    mainProgram = "mp3cat";
   };
 }
diff --git a/pkgs/tools/audio/mpd-discord-rpc/default.nix b/pkgs/tools/audio/mpd-discord-rpc/default.nix
index 786f5c062daa..17bc6c6e419f 100644
--- a/pkgs/tools/audio/mpd-discord-rpc/default.nix
+++ b/pkgs/tools/audio/mpd-discord-rpc/default.nix
@@ -36,5 +36,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/JakeStanger/mpd-discord-rpc/blob/${src.rev}/CHANGELOG.md";
     license = licenses.mit;
     maintainers = with maintainers; [ kranzes ];
+    mainProgram = "mpd-discord-rpc";
   };
 }
diff --git a/pkgs/tools/audio/mpd-mpris/default.nix b/pkgs/tools/audio/mpd-mpris/default.nix
index f530ffc5d664..dcf1e467300e 100644
--- a/pkgs/tools/audio/mpd-mpris/default.nix
+++ b/pkgs/tools/audio/mpd-mpris/default.nix
@@ -39,5 +39,6 @@ buildGoModule rec {
     homepage = "https://github.com/natsukagami/mpd-mpris";
     license = licenses.mit;
     maintainers = with maintainers; [ doronbehar ];
+    mainProgram = "mpd-mpris";
   };
 }
diff --git a/pkgs/tools/audio/mpd-notification/default.nix b/pkgs/tools/audio/mpd-notification/default.nix
index 03b632ae7e0e..845056c61414 100644
--- a/pkgs/tools/audio/mpd-notification/default.nix
+++ b/pkgs/tools/audio/mpd-notification/default.nix
@@ -56,5 +56,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ CaitlinDavitt ];
     platforms = platforms.unix;
+    mainProgram = "mpd-notification";
   };
 }
diff --git a/pkgs/tools/audio/mpd-sima/default.nix b/pkgs/tools/audio/mpd-sima/default.nix
index 0da82ea0b9aa..b123d2828c4c 100644
--- a/pkgs/tools/audio/mpd-sima/default.nix
+++ b/pkgs/tools/audio/mpd-sima/default.nix
@@ -34,5 +34,6 @@ buildPythonApplication rec {
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
     maintainers = with lib.maintainers; [ apfelkuchen6 ];
+    mainProgram = "mpd-sima";
   };
 }
diff --git a/pkgs/tools/audio/mpdas/default.nix b/pkgs/tools/audio/mpdas/default.nix
index 8b12b6fc16d7..04251854d48d 100644
--- a/pkgs/tools/audio/mpdas/default.nix
+++ b/pkgs/tools/audio/mpdas/default.nix
@@ -29,5 +29,6 @@ stdenv.mkDerivation rec {
     license = licenses.bsd3;
     maintainers = [ maintainers.taketwo ];
     platforms = platforms.all;
+    mainProgram = "mpdas";
   };
 }
diff --git a/pkgs/tools/audio/mpdris2/default.nix b/pkgs/tools/audio/mpdris2/default.nix
index fd8618d6243d..fd4b60f13e05 100644
--- a/pkgs/tools/audio/mpdris2/default.nix
+++ b/pkgs/tools/audio/mpdris2/default.nix
@@ -50,5 +50,6 @@ python3.pkgs.buildPythonApplication rec {
     license = licenses.gpl3;
     maintainers = with maintainers; [ ];
     platforms = platforms.unix;
+    mainProgram = "mpDris2";
   };
 }
diff --git a/pkgs/tools/audio/nanotts/default.nix b/pkgs/tools/audio/nanotts/default.nix
index a68f1593b646..41214ffe9206 100644
--- a/pkgs/tools/audio/nanotts/default.nix
+++ b/pkgs/tools/audio/nanotts/default.nix
@@ -33,5 +33,6 @@ stdenv.mkDerivation {
     license = lib.licenses.asl20;
     maintainers = [ lib.maintainers.strikerlulu ];
     platforms = lib.platforms.linux;
+    mainProgram = "nanotts";
   };
 }
diff --git a/pkgs/tools/audio/pasystray/default.nix b/pkgs/tools/audio/pasystray/default.nix
index c01088466599..20708e82729d 100644
--- a/pkgs/tools/audio/pasystray/default.nix
+++ b/pkgs/tools/audio/pasystray/default.nix
@@ -42,5 +42,6 @@ stdenv.mkDerivation rec {
     license = licenses.lgpl21Plus;
     maintainers = with maintainers; [ exlevan kamilchm ];
     platforms = platforms.linux;
+    mainProgram = "pasystray";
   };
 }
diff --git a/pkgs/tools/audio/patray/default.nix b/pkgs/tools/audio/patray/default.nix
index ff7b55689b8f..e6800d943725 100644
--- a/pkgs/tools/audio/patray/default.nix
+++ b/pkgs/tools/audio/patray/default.nix
@@ -38,5 +38,6 @@ python3.pkgs.buildPythonApplication rec {
     homepage = "https://github.com/pohmelie/patray";
     license = licenses.mit;
     maintainers = with maintainers; [ domenkozar ];
+    mainProgram = "patray";
   };
 }
diff --git a/pkgs/tools/audio/picotts/default.nix b/pkgs/tools/audio/picotts/default.nix
index 137fa838c629..0b470aca5f94 100644
--- a/pkgs/tools/audio/picotts/default.nix
+++ b/pkgs/tools/audio/picotts/default.nix
@@ -20,5 +20,6 @@ stdenv.mkDerivation (finalAttrs: {
     license = lib.licenses.asl20;
     maintainers = [ lib.maintainers.canndrew ];
     platforms = lib.platforms.linux;
+    mainProgram = "pico2wave";
   };
 })
diff --git a/pkgs/tools/audio/piper/default.nix b/pkgs/tools/audio/piper/default.nix
index ec55b78c4f8b..1f565b747529 100644
--- a/pkgs/tools/audio/piper/default.nix
+++ b/pkgs/tools/audio/piper/default.nix
@@ -70,5 +70,6 @@ stdenv.mkDerivation (finalAttrs: {
     homepage = "https://github.com/rhasspy/piper";
     license = licenses.mit;
     maintainers = with maintainers; [ hexa ];
+    mainProgram = "piper";
   };
 })
diff --git a/pkgs/tools/audio/pnmixer/default.nix b/pkgs/tools/audio/pnmixer/default.nix
index da4654a3e5fc..a65cad09b47d 100644
--- a/pkgs/tools/audio/pnmixer/default.nix
+++ b/pkgs/tools/audio/pnmixer/default.nix
@@ -21,5 +21,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3;
     platforms = platforms.linux;
     maintainers = with maintainers; [ campadrenalin romildo ];
+    mainProgram = "pnmixer";
   };
 }
diff --git a/pkgs/tools/audio/pw-volume/default.nix b/pkgs/tools/audio/pw-volume/default.nix
index 1a7b6c21a502..13e39484b577 100644
--- a/pkgs/tools/audio/pw-volume/default.nix
+++ b/pkgs/tools/audio/pw-volume/default.nix
@@ -23,5 +23,6 @@ rustPlatform.buildRustPackage rec {
     license = licenses.mit;
     maintainers = with maintainers; [ astro figsoda ];
     platforms = platforms.linux;
+    mainProgram = "pw-volume";
   };
 }
diff --git a/pkgs/tools/audio/stt/default.nix b/pkgs/tools/audio/stt/default.nix
index 9f3fcf05b5fa..89ed5f983973 100644
--- a/pkgs/tools/audio/stt/default.nix
+++ b/pkgs/tools/audio/stt/default.nix
@@ -36,5 +36,6 @@ stdenv.mkDerivation rec {
     license = licenses.mpl20;
     platforms = [ "x86_64-linux" ];
     maintainers = with maintainers; [ rvolosatovs ];
+    mainProgram = "stt";
   };
 }
diff --git a/pkgs/tools/audio/tidal-dl/default.nix b/pkgs/tools/audio/tidal-dl/default.nix
index 2e8ba35e8ce4..eb23a4da3ccd 100644
--- a/pkgs/tools/audio/tidal-dl/default.nix
+++ b/pkgs/tools/audio/tidal-dl/default.nix
@@ -21,5 +21,6 @@ buildPythonApplication rec {
     license = lib.licenses.asl20;
     maintainers = [ lib.maintainers.misterio77 ];
     platforms = lib.platforms.all;
+    mainProgram = "tidal-dl";
   };
 }
diff --git a/pkgs/tools/audio/unflac/default.nix b/pkgs/tools/audio/unflac/default.nix
index 9fc44469fec9..41068d479706 100644
--- a/pkgs/tools/audio/unflac/default.nix
+++ b/pkgs/tools/audio/unflac/default.nix
@@ -30,5 +30,6 @@ buildGoModule rec {
     license = licenses.mit;
     platforms = platforms.all;
     maintainers = with maintainers; [ felipeqq2 ];
+    mainProgram = "unflac";
   };
 }
diff --git a/pkgs/tools/audio/video2midi/default.nix b/pkgs/tools/audio/video2midi/default.nix
index 2c2ea77de6e7..3d8661da3cab 100644
--- a/pkgs/tools/audio/video2midi/default.nix
+++ b/pkgs/tools/audio/video2midi/default.nix
@@ -31,5 +31,6 @@ in pythonPackages.buildPythonApplication rec {
     license = licenses.gpl3Only;
     maintainers = [ ];
     platforms = platforms.linux;
+    mainProgram = "v2m.py";
   };
 }
diff --git a/pkgs/tools/audio/volctl/default.nix b/pkgs/tools/audio/volctl/default.nix
index e0a80f90a719..0d33c586ed37 100644
--- a/pkgs/tools/audio/volctl/default.nix
+++ b/pkgs/tools/audio/volctl/default.nix
@@ -53,5 +53,6 @@ python3Packages.buildPythonApplication rec {
     license = licenses.gpl2;
     platforms = platforms.linux;
     maintainers = [ maintainers.romildo ];
+    mainProgram = "volctl";
   };
 }
diff --git a/pkgs/tools/audio/volumeicon/default.nix b/pkgs/tools/audio/volumeicon/default.nix
index 00690d016329..cabd145cc6e0 100644
--- a/pkgs/tools/audio/volumeicon/default.nix
+++ b/pkgs/tools/audio/volumeicon/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
     platforms = platforms.linux;
     maintainers = with maintainers; [ bobvanderlinden ];
     license = licenses.gpl3;
+    mainProgram = "volumeicon";
   };
 }
 
diff --git a/pkgs/tools/audio/whisper-ctranslate2/default.nix b/pkgs/tools/audio/whisper-ctranslate2/default.nix
index dd928ab3e418..452af0a18b40 100644
--- a/pkgs/tools/audio/whisper-ctranslate2/default.nix
+++ b/pkgs/tools/audio/whisper-ctranslate2/default.nix
@@ -45,5 +45,6 @@ python3.pkgs.buildPythonApplication {
     changelog = "https://github.com/Softcatala/whisper-ctranslate2/releases/tag/${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ happysalada ];
+    mainProgram = "whisper-ctranslate2";
   };
 }
diff --git a/pkgs/tools/audio/yabridgectl/default.nix b/pkgs/tools/audio/yabridgectl/default.nix
index 06bca00fc5b0..41d32cd282a5 100644
--- a/pkgs/tools/audio/yabridgectl/default.nix
+++ b/pkgs/tools/audio/yabridgectl/default.nix
@@ -43,5 +43,6 @@ rustPlatform.buildRustPackage {
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ kira-bruneau ];
     platforms = yabridge.meta.platforms;
+    mainProgram = "yabridgectl";
   };
 }
diff --git a/pkgs/tools/filesystems/dupe-krill/default.nix b/pkgs/tools/filesystems/dupe-krill/default.nix
index d825c1b0fb09..ee81db5c8707 100644
--- a/pkgs/tools/filesystems/dupe-krill/default.nix
+++ b/pkgs/tools/filesystems/dupe-krill/default.nix
@@ -21,5 +21,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/kornelski/dupe-krill";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ urbas ];
+    mainProgram = "dupe-krill";
   };
 }
diff --git a/pkgs/tools/filesystems/dysk/default.nix b/pkgs/tools/filesystems/dysk/default.nix
index 7ab7d544ab08..2dc4698f8172 100644
--- a/pkgs/tools/filesystems/dysk/default.nix
+++ b/pkgs/tools/filesystems/dysk/default.nix
@@ -32,5 +32,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/Canop/dysk/blob/${src.rev}/CHANGELOG.md";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda koral ];
+    mainProgram = "dysk";
   };
 }
diff --git a/pkgs/tools/filesystems/eiciel/default.nix b/pkgs/tools/filesystems/eiciel/default.nix
index dff1700d73fc..a3f7378c205c 100644
--- a/pkgs/tools/filesystems/eiciel/default.nix
+++ b/pkgs/tools/filesystems/eiciel/default.nix
@@ -52,5 +52,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ sersorrel ];
     platforms = platforms.linux;
+    mainProgram = "eiciel";
   };
 }
diff --git a/pkgs/tools/filesystems/ext4magic/default.nix b/pkgs/tools/filesystems/ext4magic/default.nix
index ed9fa6df969b..bb23f58c38c6 100644
--- a/pkgs/tools/filesystems/ext4magic/default.nix
+++ b/pkgs/tools/filesystems/ext4magic/default.nix
@@ -36,5 +36,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2;
     platforms = platforms.linux;
     maintainers = [ maintainers.rkoe ];
+    mainProgram = "ext4magic";
   };
 }
diff --git a/pkgs/tools/filesystems/extundelete/default.nix b/pkgs/tools/filesystems/extundelete/default.nix
index 276f6139b794..0c3062fb11ca 100644
--- a/pkgs/tools/filesystems/extundelete/default.nix
+++ b/pkgs/tools/filesystems/extundelete/default.nix
@@ -25,5 +25,6 @@ stdenv.mkDerivation {
     license = licenses.gpl2;
     platforms = platforms.linux;
     maintainers = [ maintainers.domenkozar ];
+    mainProgram = "extundelete";
   };
 }
diff --git a/pkgs/tools/filesystems/fatresize/default.nix b/pkgs/tools/filesystems/fatresize/default.nix
index 8f258a79f7de..80f7e5ecd4ae 100644
--- a/pkgs/tools/filesystems/fatresize/default.nix
+++ b/pkgs/tools/filesystems/fatresize/default.nix
@@ -22,5 +22,6 @@ stdenv.mkDerivation rec {
     homepage = "https://github.com/ya-mouse/fatresize";
     platforms = platforms.linux;
     license = licenses.gpl3;
+    mainProgram = "fatresize";
   };
 }
diff --git a/pkgs/tools/filesystems/fatsort/default.nix b/pkgs/tools/filesystems/fatsort/default.nix
index ef7111dd72ff..d1604e49a32e 100644
--- a/pkgs/tools/filesystems/fatsort/default.nix
+++ b/pkgs/tools/filesystems/fatsort/default.nix
@@ -39,5 +39,6 @@ stdenv.mkDerivation rec {
     maintainers = [ maintainers.kovirobi ];
     license = licenses.gpl2Plus;
     platforms = platforms.unix;
+    mainProgram = "fatsort";
   };
 }
diff --git a/pkgs/tools/filesystems/file-rename/default.nix b/pkgs/tools/filesystems/file-rename/default.nix
index 133f446f8a98..8bc7a899cd3b 100644
--- a/pkgs/tools/filesystems/file-rename/default.nix
+++ b/pkgs/tools/filesystems/file-rename/default.nix
@@ -26,5 +26,6 @@ perlPackages.buildPerlPackage {
     description = "Perl extension for renaming multiple files";
     license = licenses.artistic1;
     maintainers = with maintainers; [ peterhoeg ];
+    mainProgram = "rename";
   };
 }
diff --git a/pkgs/tools/filesystems/fuse-7z-ng/default.nix b/pkgs/tools/filesystems/fuse-7z-ng/default.nix
index dad5d2dd9e6c..86db1f4872a4 100644
--- a/pkgs/tools/filesystems/fuse-7z-ng/default.nix
+++ b/pkgs/tools/filesystems/fuse-7z-ng/default.nix
@@ -44,5 +44,6 @@ stdenv.mkDerivation rec {
     '';
     platforms = platforms.linux;
     license = licenses.gpl3Plus;
+    mainProgram = "fuse-7z-ng";
   };
 }
diff --git a/pkgs/tools/filesystems/fuse-archive/default.nix b/pkgs/tools/filesystems/fuse-archive/default.nix
index 031232acbe38..58f48a264498 100644
--- a/pkgs/tools/filesystems/fuse-archive/default.nix
+++ b/pkgs/tools/filesystems/fuse-archive/default.nix
@@ -38,6 +38,7 @@ stdenv.mkDerivation rec {
     changelog = "https://github.com/google/fuse-archive/releases/tag/v${version}";
     license = licenses.asl20;
     maintainers = with maintainers; [ icyrockcom ];
+    mainProgram = "fuse-archive";
   };
 
   inherit (fuse.meta) platforms;
diff --git a/pkgs/tools/filesystems/fuse-overlayfs/default.nix b/pkgs/tools/filesystems/fuse-overlayfs/default.nix
index b417c9654292..6afbda9f27cd 100644
--- a/pkgs/tools/filesystems/fuse-overlayfs/default.nix
+++ b/pkgs/tools/filesystems/fuse-overlayfs/default.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ ma9e ] ++ teams.podman.members;
     platforms = platforms.linux;
     inherit (src.meta) homepage;
+    mainProgram = "fuse-overlayfs";
   };
 }
diff --git a/pkgs/tools/filesystems/fuseiso/default.nix b/pkgs/tools/filesystems/fuseiso/default.nix
index 7e44e7c15f9c..b731e9c7cc96 100644
--- a/pkgs/tools/filesystems/fuseiso/default.nix
+++ b/pkgs/tools/filesystems/fuseiso/default.nix
@@ -51,5 +51,6 @@ stdenv.mkDerivation rec {
     homepage = "https://sourceforge.net/projects/fuseiso";
     license = licenses.gpl2;
     platforms = platforms.linux;
+    mainProgram = "fuseiso";
   };
 }
diff --git a/pkgs/tools/filesystems/fwanalyzer/default.nix b/pkgs/tools/filesystems/fwanalyzer/default.nix
index a0b1d2df1435..26fd45fa90ea 100644
--- a/pkgs/tools/filesystems/fwanalyzer/default.nix
+++ b/pkgs/tools/filesystems/fwanalyzer/default.nix
@@ -35,5 +35,6 @@ buildGoModule rec {
     homepage = "https://github.com/cruise-automation/fwanalyzer";
     license = with licenses; [ asl20 ];
     maintainers = with maintainers; [ fab ];
+    mainProgram = "fwanalyzer";
   };
 }
diff --git a/pkgs/tools/filesystems/garage/default.nix b/pkgs/tools/filesystems/garage/default.nix
index fe72905d0fbe..894840d2dd04 100644
--- a/pkgs/tools/filesystems/garage/default.nix
+++ b/pkgs/tools/filesystems/garage/default.nix
@@ -73,6 +73,7 @@ let
       maintainers = with lib.maintainers; [ nickcao _0x4A6F teutat3s raitobezarius ];
       knownVulnerabilities = (lib.optional eol "Garage version ${version} is EOL");
       inherit broken;
+      mainProgram = "garage";
     };
   };
 in
diff --git a/pkgs/tools/filesystems/genext2fs/default.nix b/pkgs/tools/filesystems/genext2fs/default.nix
index ecd77781d39b..b640c99dc82f 100644
--- a/pkgs/tools/filesystems/genext2fs/default.nix
+++ b/pkgs/tools/filesystems/genext2fs/default.nix
@@ -31,5 +31,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2;
     platforms = platforms.all;
     maintainers = [ maintainers.bjornfor ];
+    mainProgram = "genext2fs";
   };
 }
diff --git a/pkgs/tools/filesystems/genimage/default.nix b/pkgs/tools/filesystems/genimage/default.nix
index 0961ad904f3f..ab93f4233d8f 100644
--- a/pkgs/tools/filesystems/genimage/default.nix
+++ b/pkgs/tools/filesystems/genimage/default.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     platforms = platforms.all;
     maintainers = [ maintainers.bjornfor ];
+    mainProgram = "genimage";
   };
 }
diff --git a/pkgs/tools/filesystems/genromfs/default.nix b/pkgs/tools/filesystems/genromfs/default.nix
index 3427ce54a172..6c40c4ad94cd 100644
--- a/pkgs/tools/filesystems/genromfs/default.nix
+++ b/pkgs/tools/filesystems/genromfs/default.nix
@@ -21,5 +21,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2;
     maintainers = with maintainers; [ ];
     platforms = platforms.all;
+    mainProgram = "genromfs";
   };
 }
diff --git a/pkgs/tools/filesystems/gitfs/default.nix b/pkgs/tools/filesystems/gitfs/default.nix
index f49f555983f3..c5e388fc5ffb 100644
--- a/pkgs/tools/filesystems/gitfs/default.nix
+++ b/pkgs/tools/filesystems/gitfs/default.nix
@@ -39,5 +39,6 @@ python3Packages.buildPythonApplication rec {
     license = lib.licenses.asl20;
     platforms = lib.platforms.unix;
     maintainers = [ lib.maintainers.robbinch ];
+    mainProgram = "gitfs";
   };
 }
diff --git a/pkgs/tools/filesystems/go-mtpfs/default.nix b/pkgs/tools/filesystems/go-mtpfs/default.nix
index f82e5b7c362a..f3ed4fb6ab98 100644
--- a/pkgs/tools/filesystems/go-mtpfs/default.nix
+++ b/pkgs/tools/filesystems/go-mtpfs/default.nix
@@ -30,5 +30,6 @@ buildGoModule rec {
     license = licenses.bsd3;
     maintainers = with maintainers; [ ];
     broken = stdenv.isDarwin;
+    mainProgram = "go-mtpfs";
   };
 }
diff --git a/pkgs/tools/filesystems/goofys/default.nix b/pkgs/tools/filesystems/goofys/default.nix
index 0c250eaeb4f4..30c78ad31993 100644
--- a/pkgs/tools/filesystems/goofys/default.nix
+++ b/pkgs/tools/filesystems/goofys/default.nix
@@ -31,6 +31,7 @@ buildGoModule {
     license = [ lib.licenses.mit ];
     maintainers = [ lib.maintainers.adisbladis ];
     broken = stdenv.isDarwin; # needs to update gopsutil to at least v3.21.3 to include https://github.com/shirou/gopsutil/pull/1042
+    mainProgram = "goofys";
   };
 
 }
diff --git a/pkgs/tools/filesystems/gpart/default.nix b/pkgs/tools/filesystems/gpart/default.nix
index eafbe066ac94..a8466d3462e8 100644
--- a/pkgs/tools/filesystems/gpart/default.nix
+++ b/pkgs/tools/filesystems/gpart/default.nix
@@ -29,5 +29,6 @@ stdenv.mkDerivation rec {
     '';
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
+    mainProgram = "gpart";
   };
 }
diff --git a/pkgs/tools/filesystems/grive2/default.nix b/pkgs/tools/filesystems/grive2/default.nix
index d5a19f42f3f0..41afc98e7f94 100644
--- a/pkgs/tools/filesystems/grive2/default.nix
+++ b/pkgs/tools/filesystems/grive2/default.nix
@@ -42,5 +42,6 @@ stdenv.mkDerivation rec {
     homepage = "https://github.com/vitalif/grive2";
     license = licenses.gpl2;
     platforms = platforms.linux;
+    mainProgram = "grive";
   };
 }
diff --git a/pkgs/tools/filesystems/httm/default.nix b/pkgs/tools/filesystems/httm/default.nix
index 31ea85532462..3a36af72462e 100644
--- a/pkgs/tools/filesystems/httm/default.nix
+++ b/pkgs/tools/filesystems/httm/default.nix
@@ -37,5 +37,6 @@ rustPlatform.buildRustPackage rec {
     changelog = "https://github.com/kimono-koans/httm/releases/tag/${version}";
     license = licenses.mpl20;
     maintainers = with maintainers; [ wyndon ];
+    mainProgram = "httm";
   };
 }
diff --git a/pkgs/tools/filesystems/httpdirfs/default.nix b/pkgs/tools/filesystems/httpdirfs/default.nix
index e027d5dd8df5..6163e1a0158a 100644
--- a/pkgs/tools/filesystems/httpdirfs/default.nix
+++ b/pkgs/tools/filesystems/httpdirfs/default.nix
@@ -22,5 +22,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ sbruder schnusch ];
     platforms = platforms.unix;
+    mainProgram = "httpdirfs";
   };
 }
diff --git a/pkgs/tools/filesystems/ifuse/default.nix b/pkgs/tools/filesystems/ifuse/default.nix
index 010aeaefabf3..8f2e1f2a6ffb 100644
--- a/pkgs/tools/filesystems/ifuse/default.nix
+++ b/pkgs/tools/filesystems/ifuse/default.nix
@@ -42,5 +42,6 @@ stdenv.mkDerivation rec {
     license = licenses.lgpl21Plus;
     platforms = platforms.unix;
     maintainers = with maintainers; [ infinisil ];
+    mainProgram = "ifuse";
   };
 }
diff --git a/pkgs/tools/filesystems/ioztat/default.nix b/pkgs/tools/filesystems/ioztat/default.nix
index b28f0a36661b..b5f949ad4f2c 100644
--- a/pkgs/tools/filesystems/ioztat/default.nix
+++ b/pkgs/tools/filesystems/ioztat/default.nix
@@ -54,5 +54,6 @@ stdenv.mkDerivation rec {
     license = licenses.bsd2;
     platforms = with platforms; linux ++ freebsd;
     maintainers = with maintainers; [ numinit ];
+    mainProgram = "ioztat";
   };
 }
diff --git a/pkgs/tools/filesystems/jefferson/default.nix b/pkgs/tools/filesystems/jefferson/default.nix
index 762541f8d27a..948de453ec18 100644
--- a/pkgs/tools/filesystems/jefferson/default.nix
+++ b/pkgs/tools/filesystems/jefferson/default.nix
@@ -37,5 +37,6 @@ python3.pkgs.buildPythonApplication rec {
     homepage = "https://github.com/onekey-sec/jefferson";
     license = licenses.mit;
     maintainers = with maintainers; [ tnias vlaci ];
+    mainProgram = "jefferson";
   };
 }
diff --git a/pkgs/tools/filesystems/jmtpfs/default.nix b/pkgs/tools/filesystems/jmtpfs/default.nix
index 2754d223a6ba..6c5dd3d30c70 100644
--- a/pkgs/tools/filesystems/jmtpfs/default.nix
+++ b/pkgs/tools/filesystems/jmtpfs/default.nix
@@ -28,5 +28,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Only;
     platforms = platforms.unix;
     maintainers = [ maintainers.coconnor ];
+    mainProgram = "jmtpfs";
   };
 }
diff --git a/pkgs/tools/filesystems/kdiskmark/default.nix b/pkgs/tools/filesystems/kdiskmark/default.nix
index 6712b96f7fdd..200705098409 100644
--- a/pkgs/tools/filesystems/kdiskmark/default.nix
+++ b/pkgs/tools/filesystems/kdiskmark/default.nix
@@ -49,6 +49,7 @@ stdenv.mkDerivation rec {
     maintainers = [ maintainers.symphorien ];
     license = licenses.gpl3Only;
     platforms = platforms.linux;
+    mainProgram = "kdiskmark";
   };
 }
 
diff --git a/pkgs/tools/filesystems/mhddfs/default.nix b/pkgs/tools/filesystems/mhddfs/default.nix
index 2cc6f69bb0ba..58986c25dbf2 100644
--- a/pkgs/tools/filesystems/mhddfs/default.nix
+++ b/pkgs/tools/filesystems/mhddfs/default.nix
@@ -31,5 +31,6 @@ stdenv.mkDerivation rec {
     description = "Combines a several mount points into the single one";
     license = lib.licenses.gpl3;
     maintainers = [ lib.maintainers.makefu ];
+    mainProgram = "mhddfs";
   };
 }
diff --git a/pkgs/tools/filesystems/mkspiffs/default.nix b/pkgs/tools/filesystems/mkspiffs/default.nix
index 30312ec7dc7b..2b0e2cdadb37 100644
--- a/pkgs/tools/filesystems/mkspiffs/default.nix
+++ b/pkgs/tools/filesystems/mkspiffs/default.nix
@@ -28,5 +28,6 @@ stdenv.mkDerivation rec {
     homepage = "https://github.com/igrr/mkspiffs";
     maintainers = with maintainers; [ haslersn ];
     platforms = platforms.linux;
+    mainProgram = "mkspiffs";
   };
 }
diff --git a/pkgs/tools/filesystems/mount-zip/default.nix b/pkgs/tools/filesystems/mount-zip/default.nix
index 74d9b1d370b8..c3fea94f42f5 100644
--- a/pkgs/tools/filesystems/mount-zip/default.nix
+++ b/pkgs/tools/filesystems/mount-zip/default.nix
@@ -28,5 +28,6 @@ stdenv.mkDerivation (finalAttrs: {
     license = licenses.gpl3;
     maintainers = with maintainers; [ arti5an ];
     platforms = platforms.linux;
+    mainProgram = "mount-zip";
   };
 })
diff --git a/pkgs/tools/filesystems/mp3fs/default.nix b/pkgs/tools/filesystems/mp3fs/default.nix
index 6f872500e6b1..0412a99beee0 100644
--- a/pkgs/tools/filesystems/mp3fs/default.nix
+++ b/pkgs/tools/filesystems/mp3fs/default.nix
@@ -46,5 +46,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3Plus;
     platforms = platforms.unix;
     maintainers = with maintainers; [ Luflosi ];
+    mainProgram = "mp3fs";
   };
 }
diff --git a/pkgs/tools/filesystems/mtpfs/default.nix b/pkgs/tools/filesystems/mtpfs/default.nix
index 0a6623bfdc4a..d84f9cc9b9b1 100644
--- a/pkgs/tools/filesystems/mtpfs/default.nix
+++ b/pkgs/tools/filesystems/mtpfs/default.nix
@@ -19,5 +19,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3;
     maintainers = [ maintainers.qknight ];
     broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/mtpfs.x86_64-darwin
+    mainProgram = "mtpfs";
   };
 }
diff --git a/pkgs/tools/filesystems/rdfind/default.nix b/pkgs/tools/filesystems/rdfind/default.nix
index c363ee561374..59724c0c7c52 100644
--- a/pkgs/tools/filesystems/rdfind/default.nix
+++ b/pkgs/tools/filesystems/rdfind/default.nix
@@ -25,5 +25,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     maintainers = [ maintainers.wmertens ];
     platforms = platforms.all;
+    mainProgram = "rdfind";
   };
 }
diff --git a/pkgs/tools/filesystems/rmfuse/default.nix b/pkgs/tools/filesystems/rmfuse/default.nix
index ace05d061665..5d3a6a340dbb 100644
--- a/pkgs/tools/filesystems/rmfuse/default.nix
+++ b/pkgs/tools/filesystems/rmfuse/default.nix
@@ -45,5 +45,6 @@ python3.pkgs.buildPythonApplication rec {
       system.
     '';
     maintainers = with lib.maintainers; [ adisbladis ];
+    mainProgram = "rmfuse";
   };
 }
diff --git a/pkgs/tools/filesystems/rmount/default.nix b/pkgs/tools/filesystems/rmount/default.nix
index 1d8ced17aae0..ec4bb1392712 100644
--- a/pkgs/tools/filesystems/rmount/default.nix
+++ b/pkgs/tools/filesystems/rmount/default.nix
@@ -28,5 +28,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     maintainers = [ maintainers.luis ];
     platforms = platforms.linux;
+    mainProgram = "rmount";
   };
 }
diff --git a/pkgs/tools/filesystems/rnm/default.nix b/pkgs/tools/filesystems/rnm/default.nix
index 69ba0270ecc0..479feabb8ebc 100644
--- a/pkgs/tools/filesystems/rnm/default.nix
+++ b/pkgs/tools/filesystems/rnm/default.nix
@@ -29,5 +29,6 @@ stdenv.mkDerivation rec {
     changelog = "https://github.com/neurobin/rnm/blob/${version}/ChangeLog";
     platforms = lib.platforms.all;
     license = licenses.gpl3Only;
+    mainProgram = "rnm";
   };
 }
diff --git a/pkgs/tools/filesystems/romdirfs/default.nix b/pkgs/tools/filesystems/romdirfs/default.nix
index 0304508d41eb..cc711e57cdb6 100644
--- a/pkgs/tools/filesystems/romdirfs/default.nix
+++ b/pkgs/tools/filesystems/romdirfs/default.nix
@@ -20,5 +20,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl3;
     platforms = platforms.unix;
     maintainers = with maintainers; [ ];
+    mainProgram = "romdirfs";
   };
 }
diff --git a/pkgs/tools/filesystems/s3backer/default.nix b/pkgs/tools/filesystems/s3backer/default.nix
index bfe9f2274756..3585408a2f7d 100644
--- a/pkgs/tools/filesystems/s3backer/default.nix
+++ b/pkgs/tools/filesystems/s3backer/default.nix
@@ -33,5 +33,6 @@ stdenv.mkDerivation rec {
     description = "FUSE-based single file backing store via Amazon S3";
     license = licenses.gpl2Plus;
     platforms = platforms.unix;
+    mainProgram = "s3backer";
   };
 }
diff --git a/pkgs/tools/filesystems/sandboxfs/default.nix b/pkgs/tools/filesystems/sandboxfs/default.nix
index bafa39272727..76eb667bceaa 100644
--- a/pkgs/tools/filesystems/sandboxfs/default.nix
+++ b/pkgs/tools/filesystems/sandboxfs/default.nix
@@ -30,5 +30,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/bazelbuild/sandboxfs";
     license = with licenses; [ asl20 ];
     maintainers = with maintainers; [ jeremyschlatter ];
+    mainProgram = "sandboxfs";
   };
 }
diff --git a/pkgs/tools/filesystems/sasquatch/default.nix b/pkgs/tools/filesystems/sasquatch/default.nix
index 258814b8905b..f8d66683fccb 100644
--- a/pkgs/tools/filesystems/sasquatch/default.nix
+++ b/pkgs/tools/filesystems/sasquatch/default.nix
@@ -71,5 +71,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     maintainers = [ maintainers.pamplemousse ];
     platforms = platforms.linux;
+    mainProgram = "sasquatch";
   };
 }
diff --git a/pkgs/tools/filesystems/sdat2img/default.nix b/pkgs/tools/filesystems/sdat2img/default.nix
index 4176eabad401..93493356eb51 100644
--- a/pkgs/tools/filesystems/sdat2img/default.nix
+++ b/pkgs/tools/filesystems/sdat2img/default.nix
@@ -22,5 +22,6 @@ python3Packages.buildPythonApplication {
     license = lib.licenses.mit;
     maintainers = [ lib.maintainers.xaverdh ];
     platforms = lib.platforms.unix;
+    mainProgram = "sdat2img";
   };
 }
diff --git a/pkgs/tools/filesystems/securefs/default.nix b/pkgs/tools/filesystems/securefs/default.nix
index 791c01d8eed8..fe148e955cb2 100644
--- a/pkgs/tools/filesystems/securefs/default.nix
+++ b/pkgs/tools/filesystems/securefs/default.nix
@@ -35,5 +35,6 @@ stdenv.mkDerivation rec {
     '';
     license = with licenses; [ bsd2 mit ];
     platforms = platforms.unix;
+    mainProgram = "securefs";
   };
 }
diff --git a/pkgs/tools/filesystems/sftpman/default.nix b/pkgs/tools/filesystems/sftpman/default.nix
index 267b2b649c30..579c03992dde 100644
--- a/pkgs/tools/filesystems/sftpman/default.nix
+++ b/pkgs/tools/filesystems/sftpman/default.nix
@@ -21,5 +21,6 @@ python3Packages.buildPythonApplication rec {
     license = licenses.gpl3;
     platforms = platforms.unix;
     maintainers = with maintainers; [ contrun ];
+    mainProgram = "sftpman";
   };
 }
diff --git a/pkgs/tools/filesystems/simple-mtpfs/default.nix b/pkgs/tools/filesystems/simple-mtpfs/default.nix
index 3cb2aa97007b..994b785c444e 100644
--- a/pkgs/tools/filesystems/simple-mtpfs/default.nix
+++ b/pkgs/tools/filesystems/simple-mtpfs/default.nix
@@ -27,5 +27,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ laalsaas ];
+    mainProgram = "simple-mtpfs";
   };
 }
diff --git a/pkgs/tools/filesystems/smbnetfs/default.nix b/pkgs/tools/filesystems/smbnetfs/default.nix
index a1831d44ada4..120b30cbb1d1 100644
--- a/pkgs/tools/filesystems/smbnetfs/default.nix
+++ b/pkgs/tools/filesystems/smbnetfs/default.nix
@@ -18,5 +18,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2;
     downloadPage = "https://sourceforge.net/projects/smbnetfs/files/smbnetfs";
     homepage = "https://sourceforge.net/projects/smbnetfs/";
+    mainProgram = "smbnetfs";
   };
 }
diff --git a/pkgs/tools/filesystems/snapraid/default.nix b/pkgs/tools/filesystems/snapraid/default.nix
index d945a4a40094..3afabf8cd643 100644
--- a/pkgs/tools/filesystems/snapraid/default.nix
+++ b/pkgs/tools/filesystems/snapraid/default.nix
@@ -24,5 +24,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.gpl3;
     maintainers = [ lib.maintainers.makefu ];
     platforms = lib.platforms.unix;
+    mainProgram = "snapraid";
   };
 }
diff --git a/pkgs/tools/filesystems/stratis-cli/default.nix b/pkgs/tools/filesystems/stratis-cli/default.nix
index e927f2daf256..3a1838ef303e 100644
--- a/pkgs/tools/filesystems/stratis-cli/default.nix
+++ b/pkgs/tools/filesystems/stratis-cli/default.nix
@@ -44,5 +44,6 @@ python3Packages.buildPythonApplication rec {
     homepage = "https://stratis-storage.github.io";
     license = licenses.asl20;
     maintainers = with maintainers; [ nickcao ];
+    mainProgram = "stratis";
   };
 }
diff --git a/pkgs/tools/filesystems/svnfs/default.nix b/pkgs/tools/filesystems/svnfs/default.nix
index e892d89dc3b3..8aa66de8da3f 100644
--- a/pkgs/tools/filesystems/svnfs/default.nix
+++ b/pkgs/tools/filesystems/svnfs/default.nix
@@ -40,5 +40,6 @@ stdenv.mkDerivation rec {
     license = lib.licenses.gpl2Only;
     maintainers = [lib.maintainers.marcweber];
     platforms = lib.platforms.unix;
+    mainProgram = "svnfs";
   };
 }
diff --git a/pkgs/tools/filesystems/tar2ext4/default.nix b/pkgs/tools/filesystems/tar2ext4/default.nix
index 2168bc1aa312..2d5a5f2ef9ff 100644
--- a/pkgs/tools/filesystems/tar2ext4/default.nix
+++ b/pkgs/tools/filesystems/tar2ext4/default.nix
@@ -18,5 +18,6 @@ buildGoModule rec {
     description = "Convert a tar archive to an ext4 image";
     maintainers = with maintainers; [ qyliss ];
     license = licenses.mit;
+    mainProgram = "tar2ext4";
   };
 }
diff --git a/pkgs/tools/filesystems/u3-tool/default.nix b/pkgs/tools/filesystems/u3-tool/default.nix
index 6abab83b0fd0..e666c893b798 100644
--- a/pkgs/tools/filesystems/u3-tool/default.nix
+++ b/pkgs/tools/filesystems/u3-tool/default.nix
@@ -17,5 +17,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2;
     platforms = with platforms; linux;
     maintainers = with maintainers; [ makefu ];
+    mainProgram = "u3-tool";
   };
 }
diff --git a/pkgs/tools/filesystems/ubidump/default.nix b/pkgs/tools/filesystems/ubidump/default.nix
index 623cef884476..c038042b6871 100644
--- a/pkgs/tools/filesystems/ubidump/default.nix
+++ b/pkgs/tools/filesystems/ubidump/default.nix
@@ -36,6 +36,7 @@ python3.pkgs.buildPythonApplication rec {
     homepage = "https://github.com/nlitsme/ubidump";
     license = licenses.mit;
     maintainers = with maintainers; [ sgo ];
+    mainProgram = "ubidump";
   };
 }
 
diff --git a/pkgs/tools/filesystems/wdfs/default.nix b/pkgs/tools/filesystems/wdfs/default.nix
index 29d8b4c2887b..3f8897c091bc 100644
--- a/pkgs/tools/filesystems/wdfs/default.nix
+++ b/pkgs/tools/filesystems/wdfs/default.nix
@@ -23,5 +23,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     description = "User-space filesystem that allows to mount a webdav share";
     platforms = platforms.unix;
+    mainProgram = "wdfs";
   };
 }
diff --git a/pkgs/tools/filesystems/wipefreespace/default.nix b/pkgs/tools/filesystems/wipefreespace/default.nix
index f9d586d91d68..bf2ddb391c86 100644
--- a/pkgs/tools/filesystems/wipefreespace/default.nix
+++ b/pkgs/tools/filesystems/wipefreespace/default.nix
@@ -49,5 +49,6 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ catap ];
+    mainProgram = "wipefreespace";
   };
 }
diff --git a/pkgs/tools/filesystems/yandex-disk/default.nix b/pkgs/tools/filesystems/yandex-disk/default.nix
index 109781f612a2..94907ee4fd2f 100644
--- a/pkgs/tools/filesystems/yandex-disk/default.nix
+++ b/pkgs/tools/filesystems/yandex-disk/default.nix
@@ -67,5 +67,6 @@ stdenv.mkDerivation rec {
        * faster syncing with Disk's server;
        * no need to be constantly connected to work with files.
     '';
+    mainProgram = "yandex-disk";
   };
 }
diff --git a/pkgs/tools/filesystems/zerofree/default.nix b/pkgs/tools/filesystems/zerofree/default.nix
index 1447ca36a136..d44e92a33c46 100644
--- a/pkgs/tools/filesystems/zerofree/default.nix
+++ b/pkgs/tools/filesystems/zerofree/default.nix
@@ -29,5 +29,6 @@ in stdenv.mkDerivation rec {
     platforms = lib.platforms.linux;
     license = lib.licenses.gpl2;
     maintainers = [ lib.maintainers.theuni ];
+    mainProgram = "zerofree";
   };
 }
diff --git a/pkgs/tools/filesystems/zkfuse/default.nix b/pkgs/tools/filesystems/zkfuse/default.nix
index 320ccde4cc53..00d78af0146f 100644
--- a/pkgs/tools/filesystems/zkfuse/default.nix
+++ b/pkgs/tools/filesystems/zkfuse/default.nix
@@ -37,5 +37,6 @@ stdenv.mkDerivation rec {
     platforms = platforms.linux;
     maintainers = with maintainers; [ ztzg ];
     license = licenses.asl20;
+    mainProgram = "zkfuse";
   };
 }
diff --git a/pkgs/tools/filesystems/zpool-auto-expand-partitions/default.nix b/pkgs/tools/filesystems/zpool-auto-expand-partitions/default.nix
index 9af487b59c4e..8fced13e93db 100644
--- a/pkgs/tools/filesystems/zpool-auto-expand-partitions/default.nix
+++ b/pkgs/tools/filesystems/zpool-auto-expand-partitions/default.nix
@@ -46,5 +46,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/DeterminateSystems/zpool-auto-expand-partitions";
     license = licenses.asl20;
     maintainers = teams.determinatesystems.members;
+    mainProgram = "zpool_part_disks";
   };
 }
diff --git a/pkgs/tools/filesystems/zpool-iostat-viz/default.nix b/pkgs/tools/filesystems/zpool-iostat-viz/default.nix
index a9e4dfe8ab74..4f546e544e66 100644
--- a/pkgs/tools/filesystems/zpool-iostat-viz/default.nix
+++ b/pkgs/tools/filesystems/zpool-iostat-viz/default.nix
@@ -37,5 +37,6 @@ python3Packages.buildPythonApplication rec {
     homepage = "https://github.com/chadmiller/zpool-iostat-viz";
     license = licenses.bsd2;
     maintainers = with maintainers; [ julm ];
+    mainProgram = "zpool-iostat-viz";
   };
 }
diff --git a/pkgs/tools/misc/tailspin/default.nix b/pkgs/tools/misc/tailspin/default.nix
index f6360061a5be..b46b25979a51 100644
--- a/pkgs/tools/misc/tailspin/default.nix
+++ b/pkgs/tools/misc/tailspin/default.nix
@@ -5,16 +5,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "tailspin";
-  version = "2.1.0";
+  version = "2.2.0";
 
   src = fetchFromGitHub {
     owner = "bensadeh";
     repo = "tailspin";
     rev = version;
-    hash = "sha256-WsQpMmFTlAPg+9uEecMKfpys29cQ642IZ8yvsPxmCfo=";
+    hash = "sha256-ggh0y50yzqWQbjdP/weboEmo4CpfAGZmtt1WWLokpZ8=";
   };
 
-  cargoHash = "sha256-sttQ8fGRGdq7nDiG3/z/YEg2NA+miTwahGNv3yNnnds=";
+  cargoHash = "sha256-R67bHDGFxCStKKHTR820r0CjbrqjQ6evtnBMaqCDRYM=";
 
   meta = with lib; {
     description = "A log file highlighter";
diff --git a/pkgs/tools/networking/netbird/default.nix b/pkgs/tools/networking/netbird/default.nix
index b9a9aa78d6fc..0cd954cca380 100644
--- a/pkgs/tools/networking/netbird/default.nix
+++ b/pkgs/tools/networking/netbird/default.nix
@@ -30,16 +30,16 @@ let
 in
 buildGoModule rec {
   pname = "netbird";
-  version = "0.24.2";
+  version = "0.24.3";
 
   src = fetchFromGitHub {
     owner = "netbirdio";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-/gSQiBlcOeQQud8rXPIjY88+jjC0/6S+OTmFqhQxQVM=";
+    hash = "sha256-r/2P0QeILO0t5GIXD6yrqdUdOpPzNfBIniPhKdlJ+0g=";
   };
 
-  vendorHash = "sha256-mSK5qQqPd6pTDLIBUa2MK8nNdi1VzNRU+GEaW+lGLpY=";
+  vendorHash = "sha256-FTr36gndWTrpEKo7KXdZJIR7aM0jrEOTFm1JlxokRaw=";
 
   nativeBuildInputs = [ installShellFiles ] ++ lib.optional ui pkg-config;
 
diff --git a/pkgs/tools/networking/wg-friendly-peer-names/default.nix b/pkgs/tools/networking/wg-friendly-peer-names/default.nix
index eaa8efbcebdb..ebbd898576d3 100644
--- a/pkgs/tools/networking/wg-friendly-peer-names/default.nix
+++ b/pkgs/tools/networking/wg-friendly-peer-names/default.nix
@@ -6,13 +6,13 @@
 
 stdenv.mkDerivation {
   pname = "wg-friendly-peer-names";
-  version = "unstable-2021-11-08";
+  version = "unstable-2021-12-10";
 
   src = fetchFromGitHub {
     owner = "FlyveHest";
     repo = "wg-friendly-peer-names";
-    rev = "66b9b6b74ec77b9fec69b2a58296635321d4f5f1";
-    sha256 = "pH/b5rCHIqLxz/Fnx+Dm0m005qAUWBsczSU9vGEQ2RQ=";
+    rev = "b0c3e1a95c843dc9c6432895105b839ef9b362fc";
+    hash = "sha256-aGxrABmR+aQO35RYo/zI2037clnGOW0Tr16p7M1fQqc=";
   };
 
   installPhase = ''
diff --git a/pkgs/tools/package-management/rpm/default.nix b/pkgs/tools/package-management/rpm/default.nix
index 9418244212ac..541787942a0e 100644
--- a/pkgs/tools/package-management/rpm/default.nix
+++ b/pkgs/tools/package-management/rpm/default.nix
@@ -1,7 +1,28 @@
-{ stdenv, lib
-, pkg-config, autoreconfHook, pandoc
-, fetchurl, cpio, zlib, bzip2, file, elfutils, libbfd, libgcrypt, libarchive, nspr, nss, popt, db, xz, python, lua, llvmPackages
-, sqlite, zstd, libcap
+{ stdenv
+, lib
+, pkg-config
+, autoreconfHook
+, pandoc
+, fetchurl
+, cpio
+, zlib
+, bzip2
+, file
+, elfutils
+, libbfd
+, libgcrypt
+, libarchive
+, nspr
+, nss
+, popt
+, db
+, xz
+, python
+, lua
+, llvmPackages
+, sqlite
+, zstd
+, libcap
 }:
 
 stdenv.mkDerivation rec {
@@ -18,8 +39,8 @@ stdenv.mkDerivation rec {
 
   nativeBuildInputs = [ autoreconfHook pkg-config pandoc ];
   buildInputs = [ cpio zlib zstd bzip2 file libarchive libgcrypt nspr nss db xz python lua sqlite ]
-                ++ lib.optional stdenv.cc.isClang llvmPackages.openmp
-                ++ lib.optional stdenv.isLinux libcap;
+    ++ lib.optional stdenv.cc.isClang llvmPackages.openmp
+    ++ lib.optional stdenv.isLinux libcap;
 
   # rpm/rpmlib.h includes popt.h, and then the pkg-config file mentions these as linkage requirements
   propagatedBuildInputs = [ popt nss db bzip2 libarchive libbfd ]
@@ -72,5 +93,8 @@ stdenv.mkDerivation rec {
     description = "The RPM Package Manager";
     maintainers = with maintainers; [ copumpkin ];
     platforms = platforms.linux;
+    # Support for darwin was removed in https://github.com/NixOS/nixpkgs/pull/196350.
+    # This can be re-enables for apple_sdk.version >= 13.0.
+    badPlatforms = platforms.darwin;
   };
 }
diff --git a/pkgs/tools/text/ugrep/default.nix b/pkgs/tools/text/ugrep/default.nix
index a8acf6f1aa42..ff034c853a7a 100644
--- a/pkgs/tools/text/ugrep/default.nix
+++ b/pkgs/tools/text/ugrep/default.nix
@@ -14,13 +14,13 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "ugrep";
-  version = "4.3.3";
+  version = "4.3.4";
 
   src = fetchFromGitHub {
     owner = "Genivia";
     repo = "ugrep";
     rev = "v${finalAttrs.version}";
-    hash = "sha256-GYqIunSApnBfct+olre0eGy8KuOtbaiPvW0tQIcBRLQ=";
+    hash = "sha256-rA6qgjzlR7a7bf5v2q1vMx1QXcKgnK5wK1Ix9CfbPro=";
   };
 
   buildInputs = [
diff --git a/pkgs/tools/virtualization/alpine-make-vm-image/default.nix b/pkgs/tools/virtualization/alpine-make-vm-image/default.nix
index 95cfaea90e43..c06efa3617f0 100644
--- a/pkgs/tools/virtualization/alpine-make-vm-image/default.nix
+++ b/pkgs/tools/virtualization/alpine-make-vm-image/default.nix
@@ -32,5 +32,6 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ qyliss ];
     license = licenses.mit;
     platforms = platforms.unix;
+    mainProgram = "alpine-make-vm-image";
   };
 }
diff --git a/pkgs/tools/virtualization/amazon-ecs-cli/default.nix b/pkgs/tools/virtualization/amazon-ecs-cli/default.nix
index fa74aa26cec3..16b43012e260 100644
--- a/pkgs/tools/virtualization/amazon-ecs-cli/default.nix
+++ b/pkgs/tools/virtualization/amazon-ecs-cli/default.nix
@@ -34,5 +34,6 @@ stdenv.mkDerivation rec {
     license = licenses.asl20;
     maintainers = with maintainers; [ Scriptkiddi ];
     platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    mainProgram = "ecs-cli";
   };
 }
diff --git a/pkgs/tools/virtualization/distrobuilder/default.nix b/pkgs/tools/virtualization/distrobuilder/default.nix
index 3619d2f25a14..a1a0cfde0fe7 100644
--- a/pkgs/tools/virtualization/distrobuilder/default.nix
+++ b/pkgs/tools/virtualization/distrobuilder/default.nix
@@ -69,5 +69,6 @@ buildGoModule rec {
     license = licenses.asl20;
     maintainers = with maintainers; [ megheaiulian ];
     platforms = platforms.linux;
+    mainProgram = "distrobuilder";
   };
 }
diff --git a/pkgs/tools/virtualization/extra-container/default.nix b/pkgs/tools/virtualization/extra-container/default.nix
index 894622d74eb0..71ba276f4bd4 100644
--- a/pkgs/tools/virtualization/extra-container/default.nix
+++ b/pkgs/tools/virtualization/extra-container/default.nix
@@ -35,5 +35,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     platforms = platforms.linux;
     maintainers = [ maintainers.erikarvstedt ];
+    mainProgram = "extra-container";
   };
 }
diff --git a/pkgs/tools/virtualization/govc/default.nix b/pkgs/tools/virtualization/govc/default.nix
index a2c37dfb679e..18d5a83a591d 100644
--- a/pkgs/tools/virtualization/govc/default.nix
+++ b/pkgs/tools/virtualization/govc/default.nix
@@ -26,5 +26,6 @@ buildGoModule rec {
     homepage = "https://github.com/vmware/govmomi/tree/master/govc";
     license = lib.licenses.asl20;
     maintainers = with lib.maintainers; [ nicknovitski ];
+    mainProgram = "govc";
   };
 }
diff --git a/pkgs/tools/virtualization/jumppad/default.nix b/pkgs/tools/virtualization/jumppad/default.nix
index 174fe292f459..c10b6887aeec 100644
--- a/pkgs/tools/virtualization/jumppad/default.nix
+++ b/pkgs/tools/virtualization/jumppad/default.nix
@@ -25,5 +25,6 @@ buildGoModule rec {
     homepage = "https://jumppad.dev";
     license = licenses.mpl20;
     maintainers = with maintainers; [ cpcloud ];
+    mainProgram = "jumppad";
   };
 }
diff --git a/pkgs/tools/virtualization/kubevirt/default.nix b/pkgs/tools/virtualization/kubevirt/default.nix
index a9e49cc75c34..67027dc4bd28 100644
--- a/pkgs/tools/virtualization/kubevirt/default.nix
+++ b/pkgs/tools/virtualization/kubevirt/default.nix
@@ -49,5 +49,6 @@ buildGoModule rec {
     homepage = "https://kubevirt.io/";
     license = licenses.asl20;
     maintainers = with maintainers; [ haslersn ];
+    mainProgram = "virtctl";
   };
 }
diff --git a/pkgs/tools/virtualization/lxd-image-server/default.nix b/pkgs/tools/virtualization/lxd-image-server/default.nix
index aeb6ac336932..43f46a8a72fc 100644
--- a/pkgs/tools/virtualization/lxd-image-server/default.nix
+++ b/pkgs/tools/virtualization/lxd-image-server/default.nix
@@ -46,5 +46,6 @@ python3.pkgs.buildPythonApplication rec {
     license = licenses.asl20;
     platforms = platforms.unix;
     maintainers = with maintainers; [ mkg20001 ];
+    mainProgram = "lxd-image-server";
   };
 }
diff --git a/pkgs/tools/virtualization/marathonctl/default.nix b/pkgs/tools/virtualization/marathonctl/default.nix
index e8f27e00d851..85576b4f6640 100644
--- a/pkgs/tools/virtualization/marathonctl/default.nix
+++ b/pkgs/tools/virtualization/marathonctl/default.nix
@@ -20,5 +20,6 @@ buildGoModule rec {
     description = "CLI tool for Marathon";
     license = licenses.mit;
     maintainers = with maintainers; [ manveru ];
+    mainProgram = "marathonctl";
   };
 }
diff --git a/pkgs/tools/virtualization/mininet/default.nix b/pkgs/tools/virtualization/mininet/default.nix
index ccc79d36c8f6..7372d51a62fa 100644
--- a/pkgs/tools/virtualization/mininet/default.nix
+++ b/pkgs/tools/virtualization/mininet/default.nix
@@ -47,5 +47,6 @@ stdenv.mkDerivation rec {
     platforms = platforms.linux;
     homepage = "https://github.com/mininet/mininet";
     maintainers = with maintainers; [ teto ];
+    mainProgram = "mnexec";
   };
 }
diff --git a/pkgs/tools/virtualization/nixos-shell/default.nix b/pkgs/tools/virtualization/nixos-shell/default.nix
index 59225a5162e3..6f7340835523 100644
--- a/pkgs/tools/virtualization/nixos-shell/default.nix
+++ b/pkgs/tools/virtualization/nixos-shell/default.nix
@@ -26,5 +26,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     maintainers = with maintainers; [ mic92 ];
     platforms = platforms.unix;
+    mainProgram = "nixos-shell";
   };
 }
diff --git a/pkgs/tools/virtualization/onmetal-image/default.nix b/pkgs/tools/virtualization/onmetal-image/default.nix
index 7e324fc03cc3..2b535dfb6d93 100644
--- a/pkgs/tools/virtualization/onmetal-image/default.nix
+++ b/pkgs/tools/virtualization/onmetal-image/default.nix
@@ -35,5 +35,6 @@ buildGoModule rec {
     homepage = "https://github.com/onmetal/onmetal-image";
     license = licenses.asl20;
     maintainers = with maintainers; [ ];
+    mainProgram = "onmetal-image";
   };
 }
diff --git a/pkgs/tools/virtualization/ovftool/default.nix b/pkgs/tools/virtualization/ovftool/default.nix
index 5cc8fb01b41b..9bdf4429ff16 100644
--- a/pkgs/tools/virtualization/ovftool/default.nix
+++ b/pkgs/tools/virtualization/ovftool/default.nix
@@ -145,5 +145,6 @@ stdenv.mkDerivation rec {
     license = licenses.unfree;
     maintainers = with maintainers; [ numinit wolfangaukang ];
     platforms = builtins.attrNames ovftoolSystems;
+    mainProgram = "ovftool";
   };
 }
diff --git a/pkgs/tools/virtualization/reg/default.nix b/pkgs/tools/virtualization/reg/default.nix
index 84aecc3ff671..545b208035b3 100644
--- a/pkgs/tools/virtualization/reg/default.nix
+++ b/pkgs/tools/virtualization/reg/default.nix
@@ -37,5 +37,6 @@ buildGoModule rec {
     homepage = "https://github.com/genuinetools/reg";
     license = licenses.mit;
     maintainers = with maintainers; [ ereslibre ];
+    mainProgram = "reg";
   };
 }
diff --git a/pkgs/tools/virtualization/supermin/default.nix b/pkgs/tools/virtualization/supermin/default.nix
index b970b66a8f64..b7600f6bb898 100644
--- a/pkgs/tools/virtualization/supermin/default.nix
+++ b/pkgs/tools/virtualization/supermin/default.nix
@@ -26,5 +26,6 @@ stdenv.mkDerivation (finalAttrs: {
     maintainers = with maintainers; [ qyliss ];
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
+    mainProgram = "supermin";
   };
 })
diff --git a/pkgs/tools/virtualization/udocker/default.nix b/pkgs/tools/virtualization/udocker/default.nix
index 4fbccf813f2f..e13376211a89 100644
--- a/pkgs/tools/virtualization/udocker/default.nix
+++ b/pkgs/tools/virtualization/udocker/default.nix
@@ -53,6 +53,7 @@ python3Packages.buildPythonApplication rec {
     license = licenses.asl20;
     maintainers = [ maintainers.bzizou ];
     platforms = platforms.linux;
+    mainProgram = "udocker";
   };
 
 }
diff --git a/pkgs/tools/virtualization/uefi-run/default.nix b/pkgs/tools/virtualization/uefi-run/default.nix
index 9486995538ce..9d954d9ed03d 100644
--- a/pkgs/tools/virtualization/uefi-run/default.nix
+++ b/pkgs/tools/virtualization/uefi-run/default.nix
@@ -21,5 +21,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/Richard-W/uefi-run";
     license = licenses.mit;
     maintainers = with maintainers; [ ];
+    mainProgram = "uefi-run";
   };
 }
diff --git a/pkgs/tools/virtualization/vpsfree-client/default.nix b/pkgs/tools/virtualization/vpsfree-client/default.nix
index 749f6820320b..cffdc267e53c 100644
--- a/pkgs/tools/virtualization/vpsfree-client/default.nix
+++ b/pkgs/tools/virtualization/vpsfree-client/default.nix
@@ -13,5 +13,6 @@ bundlerApp {
     maintainers = with maintainers; [ aither64 zimbatm ];
     license = licenses.gpl3;
     platforms = platforms.unix;
+    mainProgram = "vpsfreectl";
   };
 }
diff --git a/pkgs/tools/virtualization/xva-img/default.nix b/pkgs/tools/virtualization/xva-img/default.nix
index e4f75c8ad3ca..bb5c9d5a5992 100644
--- a/pkgs/tools/virtualization/xva-img/default.nix
+++ b/pkgs/tools/virtualization/xva-img/default.nix
@@ -20,5 +20,6 @@ stdenv.mkDerivation rec {
     description = "Tool for converting Xen images to raw and back";
     license = lib.licenses.gpl2;
     platforms = lib.platforms.unix;
+    mainProgram = "xva-img";
   };
 }
diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix
index e67c8ece527c..d0da3c05db7d 100644
--- a/pkgs/top-level/aliases.nix
+++ b/pkgs/top-level/aliases.nix
@@ -357,7 +357,6 @@ mapAliases ({
 
   ### H ###
 
-  inherit (harePackages) hare harec; # Added 2022-08-10
   haxe_3_2 = throw "'haxe_3_2' has been removed because it is old and no longer used by any packages in nixpkgs"; # Added 2023-03-15
   haxe_3_4 = throw "'haxe_3_4' has been removed because it is old and no longer used by any packages in nixpkgs"; # Added 2023-03-15
   hepmc = throw "'hepmc' has been renamed to/replaced by 'hepmc2'"; # Converted to throw 2023-09-10
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index ceb5ff5180b7..e3b70de5f064 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -2533,8 +2533,6 @@ with pkgs;
     buildGoModule = buildGo120Module;
   };
 
-  lefthook = callPackage ../applications/version-management/lefthook { };
-
   legit = callPackage ../applications/version-management/legit { };
 
   legit-web = callPackage ../applications/version-management/legit-web { };
@@ -9128,7 +9126,8 @@ with pkgs;
     llvmPackages = llvmPackages_14;
   };
 
-  harePackages = recurseIntoAttrs (callPackage ../development/compilers/hare { });
+  harePackages = recurseIntoAttrs (callPackage ./hare-packages.nix { });
+  inherit (harePackages) hare harec;
 
   ham = pkgs.perlPackages.ham;
 
@@ -15568,8 +15567,6 @@ with pkgs;
     openjdk = openjdk17_headless;
   };
 
-  beekeeper-studio = callPackage ../development/tools/database/beekeeper-studio { };
-
   bfc = callPackage ../development/compilers/bfc { };
 
   bigloo = callPackage ../development/compilers/bigloo { };
@@ -19775,12 +19772,12 @@ with pkgs;
 
   pmccabe = callPackage ../development/tools/misc/pmccabe { };
 
-  pkgconf-unwrapped = callPackage ../development/tools/misc/pkgconf { };
+  pkgconf-unwrapped = libpkgconf;
+
   pkgconf = callPackage ../build-support/pkg-config-wrapper {
     pkg-config = pkgconf-unwrapped;
     baseBinName = "pkgconf";
   };
-  libpkgconf = pkgconf-unwrapped;
 
   pkg-config-unwrapped = callPackage ../development/tools/misc/pkg-config { };
   pkg-config = callPackage ../build-support/pkg-config-wrapper {
@@ -30863,8 +30860,6 @@ with pkgs;
 
   cyan = callPackage ../applications/graphics/cyan { };
 
-  cyanrip = callPackage ../applications/audio/cyanrip { };
-
   centerim = callPackage ../applications/networking/instant-messengers/centerim { };
 
   chatty = callPackage ../applications/networking/instant-messengers/chatty { };
@@ -31315,7 +31310,9 @@ with pkgs;
 
   oed = callPackage ../applications/editors/oed { };
 
-  ekho = callPackage ../applications/audio/ekho { };
+  ekho = callPackage ../applications/audio/ekho {
+    inherit (darwin.apple_sdk.frameworks) AudioUnit;
+  };
 
   electron-cash = libsForQt5.callPackage ../applications/misc/electron-cash { };
 
diff --git a/pkgs/top-level/hare-packages.nix b/pkgs/top-level/hare-packages.nix
new file mode 100644
index 000000000000..c40cce493090
--- /dev/null
+++ b/pkgs/top-level/hare-packages.nix
@@ -0,0 +1,10 @@
+{ lib, newScope }:
+
+lib.makeScope newScope (self:
+let
+  inherit (self) callPackage;
+in
+{
+  harec = callPackage ../development/compilers/harec { };
+  hare = callPackage ../development/compilers/hare { };
+})
diff --git a/pkgs/top-level/ruby-packages.nix b/pkgs/top-level/ruby-packages.nix
index 247cbfc21e6c..58b673e50dbc 100644
--- a/pkgs/top-level/ruby-packages.nix
+++ b/pkgs/top-level/ruby-packages.nix
@@ -1168,6 +1168,17 @@
     };
     version = "2.0.4";
   };
+  gdk3 = {
+    dependencies = ["cairo-gobject" "gdk_pixbuf2" "pango"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0dpqlsfv44bxzixh386qwz28wfynhwkp9qz97b6zjx4wjh4fg4gj";
+      type = "gem";
+    };
+    version = "4.2.0";
+  };
   gdk_pixbuf2 = {
     dependencies = ["gio2"];
     groups = ["default"];
@@ -1297,15 +1308,16 @@
     };
     version = "2.0.23";
   };
-  gtk2 = {
+  gtk3 = {
+    dependencies = ["atk" "gdk3"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "09n8gz5h0d0wwrifr8c8z0b4vrd64xdi4lws8p6gpz0j0pxm5fzh";
+      sha256 = "15jk1q82g6jfswmz4b20kg2nxq4yc8wpidn9si9j7n0haxph3vxy";
       type = "gem";
     };
-    version = "3.2.6";
+    version = "4.2.0";
   };
   haml = {
     dependencies = ["temple" "thor" "tilt"];