about summary refs log tree commit diff
path: root/pkgs/tools
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/tools')
-rw-r--r--pkgs/tools/admin/ansible/doctor.nix1
-rw-r--r--pkgs/tools/admin/ansible/later.nix1
-rw-r--r--pkgs/tools/admin/ansible/lint.nix1
-rw-r--r--pkgs/tools/admin/aws-google-auth/default.nix1
-rw-r--r--pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix1
-rw-r--r--pkgs/tools/admin/aws-mfa/default.nix1
-rw-r--r--pkgs/tools/admin/aws-vault/default.nix1
-rw-r--r--pkgs/tools/admin/awslimitchecker/default.nix1
-rw-r--r--pkgs/tools/admin/awslogs/default.nix1
-rw-r--r--pkgs/tools/admin/chkcrontab/default.nix1
-rw-r--r--pkgs/tools/admin/dehydrated/default.nix1
-rw-r--r--pkgs/tools/admin/gam/default.nix1
-rw-r--r--pkgs/tools/admin/gimme-aws-creds/default.nix1
-rw-r--r--pkgs/tools/admin/gixy/default.nix1
-rw-r--r--pkgs/tools/admin/mycli/default.nix1
-rw-r--r--pkgs/tools/admin/proxmove/default.nix1
-rw-r--r--pkgs/tools/admin/pulumi-packages/pulumi-aws-native.nix1
-rw-r--r--pkgs/tools/admin/pulumi-packages/pulumi-azure-native.nix1
-rw-r--r--pkgs/tools/admin/pulumi-packages/pulumi-command.nix1
-rw-r--r--pkgs/tools/admin/pulumi-packages/pulumi-language-go.nix1
-rw-r--r--pkgs/tools/admin/pulumi-packages/pulumi-random.nix1
-rw-r--r--pkgs/tools/admin/s3bro/default.nix1
-rw-r--r--pkgs/tools/admin/ssl-cert-check/default.nix1
-rw-r--r--pkgs/tools/admin/try/default.nix1
-rw-r--r--pkgs/tools/archivers/zpaq/zpaqd.nix1
-rw-r--r--pkgs/tools/audio/liquidsoap/full.nix1
-rw-r--r--pkgs/tools/audio/pa-applet/default.nix1
-rw-r--r--pkgs/tools/audio/spotdl/default.nix1
-rw-r--r--pkgs/tools/audio/wyoming/piper.nix1
-rw-r--r--pkgs/tools/backup/android-backup-extractor/default.nix1
-rw-r--r--pkgs/tools/backup/automysqlbackup/default.nix1
-rw-r--r--pkgs/tools/backup/bakelite/default.nix1
-rw-r--r--pkgs/tools/backup/btar/default.nix1
-rw-r--r--pkgs/tools/backup/bup/default.nix1
-rw-r--r--pkgs/tools/backup/chunksync/default.nix1
-rw-r--r--pkgs/tools/backup/diskrsync/default.nix1
-rw-r--r--pkgs/tools/backup/duply/default.nix1
-rw-r--r--pkgs/tools/backup/flockit/default.nix1
-rw-r--r--pkgs/tools/backup/gh2md/default.nix1
-rw-r--r--pkgs/tools/backup/gphotos-sync/default.nix1
-rw-r--r--pkgs/tools/backup/httrack/qt.nix1
-rw-r--r--pkgs/tools/backup/kopia/default.nix1
-rw-r--r--pkgs/tools/backup/lvmsync/default.nix1
-rw-r--r--pkgs/tools/backup/mastodon-archive/default.nix1
-rw-r--r--pkgs/tools/backup/monolith/default.nix1
-rw-r--r--pkgs/tools/backup/mylvmbackup/default.nix1
-rw-r--r--pkgs/tools/backup/pyznap/default.nix1
-rw-r--r--pkgs/tools/backup/rdedup/default.nix1
-rw-r--r--pkgs/tools/backup/restic/rest-server.nix1
-rw-r--r--pkgs/tools/backup/rotate-backups/default.nix1
-rw-r--r--pkgs/tools/backup/sigtop/default.nix1
-rw-r--r--pkgs/tools/backup/stenc/default.nix1
-rw-r--r--pkgs/tools/backup/ugarit-manifest-maker/default.nix1
-rw-r--r--pkgs/tools/backup/wal-e/default.nix1
-rw-r--r--pkgs/tools/backup/wal-g/default.nix1
-rw-r--r--pkgs/tools/backup/zbackup/default.nix1
-rw-r--r--pkgs/tools/backup/zfs-prune-snapshots/default.nix1
-rw-r--r--pkgs/tools/backup/zfs-replicate/default.nix1
-rw-r--r--pkgs/tools/backup/zfsnap/default.nix1
-rw-r--r--pkgs/tools/compression/lzham/default.nix1
-rw-r--r--pkgs/tools/filesystems/9pfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/archivemount/default.nix1
-rw-r--r--pkgs/tools/filesystems/btrfs-heatmap/default.nix1
-rw-r--r--pkgs/tools/filesystems/btrfs-snap/default.nix1
-rw-r--r--pkgs/tools/filesystems/catcli/default.nix1
-rw-r--r--pkgs/tools/filesystems/ceph-csi/default.nix1
-rw-r--r--pkgs/tools/filesystems/cpcfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/curlftpfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/darling-dmg/default.nix1
-rw-r--r--pkgs/tools/filesystems/dduper/default.nix1
-rw-r--r--pkgs/tools/filesystems/disorderfs/default.nix1
-rw-r--r--pkgs/tools/filesystems/djmount/default.nix1
-rw-r--r--pkgs/tools/filesystems/duff/default.nix1
-rw-r--r--pkgs/tools/filesystems/httpfs/default.nix1
-rw-r--r--pkgs/tools/games/ajour/default.nix1
-rw-r--r--pkgs/tools/games/joystickwake/default.nix1
-rw-r--r--pkgs/tools/games/minecraft/amidst/default.nix1
-rw-r--r--pkgs/tools/games/minecraft/fabric-installer/default.nix1
-rw-r--r--pkgs/tools/games/minecraft/mcaselector/default.nix1
-rw-r--r--pkgs/tools/games/minecraft/minecraft-server-hibernation/default.nix1
-rw-r--r--pkgs/tools/games/mymcplus/default.nix1
-rw-r--r--pkgs/tools/games/pokefinder/default.nix1
-rw-r--r--pkgs/tools/games/steamback/default.nix1
-rw-r--r--pkgs/tools/games/steamtinkerlaunch/default.nix1
-rw-r--r--pkgs/tools/games/ukmm/default.nix1
-rw-r--r--pkgs/tools/graphics/rocket/default.nix1
-rw-r--r--pkgs/tools/inputmethods/emote/default.nix1
-rw-r--r--pkgs/tools/inputmethods/evdevremapkeys/default.nix1
-rw-r--r--pkgs/tools/inputmethods/evscript/default.nix1
-rw-r--r--pkgs/tools/inputmethods/evsieve/default.nix1
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix1
-rw-r--r--pkgs/tools/inputmethods/gebaar-libinput/default.nix1
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-cangjie/default.nix1
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix1
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix1
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix1
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix1
-rw-r--r--pkgs/tools/inputmethods/interception-tools/caps2esc.nix1
-rw-r--r--pkgs/tools/inputmethods/keyfuzz/default.nix1
-rw-r--r--pkgs/tools/inputmethods/libinput-gestures/default.nix1
-rw-r--r--pkgs/tools/inputmethods/lisgd/default.nix1
-rw-r--r--pkgs/tools/inputmethods/m17n-db/default.nix1
-rw-r--r--pkgs/tools/inputmethods/nabi/default.nix1
-rw-r--r--pkgs/tools/inputmethods/remote-touchpad/default.nix1
-rw-r--r--pkgs/tools/inputmethods/touchegg/default.nix1
-rw-r--r--pkgs/tools/inputmethods/xlibinput_calibrator/default.nix1
-rw-r--r--pkgs/tools/misc/0x/default.nix1
-rw-r--r--pkgs/tools/misc/3mux/default.nix1
-rw-r--r--pkgs/tools/misc/autojump/default.nix1
-rw-r--r--pkgs/tools/misc/domine/default.nix1
-rw-r--r--pkgs/tools/misc/eludris/default.nix1
-rw-r--r--pkgs/tools/misc/fclones/gui.nix1
-rw-r--r--pkgs/tools/misc/gosu/default.nix1
-rw-r--r--pkgs/tools/misc/i3minator/default.nix1
-rw-r--r--pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix1
-rw-r--r--pkgs/tools/misc/linux-logo/default.nix1
-rw-r--r--pkgs/tools/misc/map/default.nix1
-rw-r--r--pkgs/tools/misc/plantuml/plantuml-c4.nix1
-rw-r--r--pkgs/tools/misc/pubs/default.nix1
-rw-r--r--pkgs/tools/misc/qrscan/default.nix1
-rw-r--r--pkgs/tools/misc/r3ctl/default.nix1
-rw-r--r--pkgs/tools/misc/riemann-c-client/default.nix1
-rw-r--r--pkgs/tools/misc/tkman/default.nix1
-rw-r--r--pkgs/tools/misc/ttfautohint/default.nix1
-rw-r--r--pkgs/tools/misc/turbo/default.nix1
-rw-r--r--pkgs/tools/misc/upower-notify/default.nix1
-rw-r--r--pkgs/tools/misc/wacomtablet/default.nix1
-rw-r--r--pkgs/tools/misc/wv2/default.nix1
-rw-r--r--pkgs/tools/networking/6tunnel/default.nix1
-rw-r--r--pkgs/tools/networking/airgeddon/default.nix1
-rw-r--r--pkgs/tools/networking/bwm-ng/default.nix1
-rw-r--r--pkgs/tools/networking/cantoolz/default.nix1
-rw-r--r--pkgs/tools/networking/carddav-util/default.nix1
-rw-r--r--pkgs/tools/networking/cloud-custodian/default.nix1
-rw-r--r--pkgs/tools/networking/cmst/default.nix1
-rw-r--r--pkgs/tools/networking/dd-agent/datadog-process-agent.nix1
-rw-r--r--pkgs/tools/networking/decode-spam-headers/default.nix1
-rw-r--r--pkgs/tools/networking/discord-sh/default.nix1
-rw-r--r--pkgs/tools/networking/dnschef/default.nix1
-rw-r--r--pkgs/tools/networking/dnstwist/default.nix1
-rw-r--r--pkgs/tools/networking/dnsviz/default.nix1
-rw-r--r--pkgs/tools/networking/evillimiter/default.nix1
-rw-r--r--pkgs/tools/networking/flannel/plugin.nix1
-rw-r--r--pkgs/tools/networking/gandi-cli/default.nix1
-rw-r--r--pkgs/tools/networking/gmrender-resurrect/default.nix1
-rw-r--r--pkgs/tools/networking/gnirehtet/default.nix1
-rw-r--r--pkgs/tools/networking/gp-saml-gui/default.nix1
-rw-r--r--pkgs/tools/networking/haguichi/default.nix1
-rw-r--r--pkgs/tools/networking/hblock/default.nix1
-rw-r--r--pkgs/tools/networking/http-prompt/default.nix1
-rw-r--r--pkgs/tools/networking/httplz/default.nix1
-rw-r--r--pkgs/tools/networking/httpstat/default.nix1
-rw-r--r--pkgs/tools/networking/ifwifi/default.nix1
-rw-r--r--pkgs/tools/networking/imapsync/default.nix1
-rw-r--r--pkgs/tools/networking/iperf3d/default.nix1
-rw-r--r--pkgs/tools/networking/ipfetch/default.nix1
-rw-r--r--pkgs/tools/networking/ipgrep/default.nix1
-rw-r--r--pkgs/tools/networking/linkchecker/default.nix1
-rw-r--r--pkgs/tools/networking/moodle-dl/default.nix1
-rw-r--r--pkgs/tools/networking/mozillavpn/default.nix1
-rw-r--r--pkgs/tools/networking/mutt-ics/default.nix1
-rw-r--r--pkgs/tools/networking/networkd-dispatcher/default.nix1
-rw-r--r--pkgs/tools/networking/networkd-notify/default.nix1
-rw-r--r--pkgs/tools/networking/networkmanager/dmenu/default.nix1
-rw-r--r--pkgs/tools/networking/networkmanager/tray.nix1
-rw-r--r--pkgs/tools/networking/nikto/default.nix1
-rw-r--r--pkgs/tools/networking/nxdomain/default.nix1
-rw-r--r--pkgs/tools/networking/nyx/default.nix1
-rw-r--r--pkgs/tools/networking/openresolv/default.nix1
-rw-r--r--pkgs/tools/networking/p2p/gtk-gnutella/default.nix1
-rw-r--r--pkgs/tools/networking/p2p/tahoe-lafs/default.nix1
-rw-r--r--pkgs/tools/networking/persepolis/default.nix1
-rw-r--r--pkgs/tools/networking/picosnitch/default.nix1
-rw-r--r--pkgs/tools/networking/pirate-get/default.nix1
-rw-r--r--pkgs/tools/networking/polygon-cli/default.nix1
-rw-r--r--pkgs/tools/networking/s3cmd/default.nix1
-rw-r--r--pkgs/tools/networking/sockdump/default.nix1
-rw-r--r--pkgs/tools/networking/sshoogr/default.nix1
-rw-r--r--pkgs/tools/networking/swaks/default.nix1
-rw-r--r--pkgs/tools/networking/telepresence/default.nix1
-rw-r--r--pkgs/tools/networking/termshark/default.nix1
-rw-r--r--pkgs/tools/networking/tinystatus/default.nix1
-rw-r--r--pkgs/tools/networking/tuntox/default.nix1
-rw-r--r--pkgs/tools/networking/udp2raw/default.nix1
-rw-r--r--pkgs/tools/networking/uget-integrator/default.nix1
-rw-r--r--pkgs/tools/networking/updog/default.nix1
-rw-r--r--pkgs/tools/networking/urlwatch/default.nix1
-rw-r--r--pkgs/tools/networking/v2ray/default.nix1
-rw-r--r--pkgs/tools/networking/vpn-slice/default.nix1
-rw-r--r--pkgs/tools/networking/vpnc-scripts/default.nix1
-rw-r--r--pkgs/tools/networking/whatip/default.nix1
-rw-r--r--pkgs/tools/networking/wifish/default.nix1
-rw-r--r--pkgs/tools/networking/xray/default.nix1
-rw-r--r--pkgs/tools/nix/cached-nix-shell/default.nix1
-rw-r--r--pkgs/tools/nix/dnadd/default.nix1
-rw-r--r--pkgs/tools/nix/nar-serve/default.nix1
-rw-r--r--pkgs/tools/nix/nix-init/default.nix1
-rw-r--r--pkgs/tools/nix/nix-melt/default.nix1
-rw-r--r--pkgs/tools/nix/nix-query-tree-viewer/default.nix1
-rw-r--r--pkgs/tools/nix/nix-store-gcs-proxy/default.nix1
-rw-r--r--pkgs/tools/nix/nixdoc/default.nix1
-rw-r--r--pkgs/tools/nix/nixel/default.nix1
-rw-r--r--pkgs/tools/nix/nixos-render-docs/default.nix1
-rw-r--r--pkgs/tools/nix/nixpkgs-lint/default.nix1
-rw-r--r--pkgs/tools/nix/npins/default.nix1
-rw-r--r--pkgs/tools/nix/rnix-hashes/default.nix1
-rw-r--r--pkgs/tools/nix/zon2nix/default.nix1
-rw-r--r--pkgs/tools/package-management/conda/default.nix1
-rw-r--r--pkgs/tools/package-management/disnix/DisnixWebService/default.nix1
-rw-r--r--pkgs/tools/package-management/gx/go/default.nix1
-rw-r--r--pkgs/tools/package-management/wapm/cli/default.nix1
-rw-r--r--pkgs/tools/security/2fa/default.nix1
-rw-r--r--pkgs/tools/security/acltoolkit/default.nix1
-rw-r--r--pkgs/tools/security/adenum/default.nix1
-rw-r--r--pkgs/tools/security/aesfix/default.nix1
-rw-r--r--pkgs/tools/security/aeskeyfind/default.nix1
-rw-r--r--pkgs/tools/security/afl/libdislocator.nix1
-rw-r--r--pkgs/tools/security/age-plugin-ledger/default.nix1
-rw-r--r--pkgs/tools/security/age-plugin-tpm/default.nix1
-rw-r--r--pkgs/tools/security/age-plugin-yubikey/default.nix1
-rw-r--r--pkgs/tools/security/aide/default.nix1
-rw-r--r--pkgs/tools/security/aiodnsbrute/default.nix1
-rw-r--r--pkgs/tools/security/alterx/default.nix1
-rw-r--r--pkgs/tools/security/amoco/default.nix1
-rw-r--r--pkgs/tools/security/apachetomcatscanner/default.nix1
-rw-r--r--pkgs/tools/security/argocd-vault-plugin/default.nix1
-rw-r--r--pkgs/tools/security/arti/default.nix1
-rw-r--r--pkgs/tools/security/arubaotp-seed-extractor/default.nix1
-rw-r--r--pkgs/tools/security/asc-key-to-qr-code-gif/default.nix1
-rw-r--r--pkgs/tools/security/asnmap/default.nix1
-rw-r--r--pkgs/tools/security/atomic-operator/default.nix1
-rw-r--r--pkgs/tools/security/authz0/default.nix1
-rw-r--r--pkgs/tools/security/aws-iam-authenticator/default.nix1
-rw-r--r--pkgs/tools/security/b2sum/default.nix1
-rw-r--r--pkgs/tools/security/b3sum/default.nix1
-rw-r--r--pkgs/tools/security/badchars/default.nix1
-rw-r--r--pkgs/tools/security/badrobot/default.nix1
-rw-r--r--pkgs/tools/security/binbloom/default.nix1
-rw-r--r--pkgs/tools/security/bmrsa/11.nix1
-rw-r--r--pkgs/tools/security/boofuzz/default.nix1
-rw-r--r--pkgs/tools/security/browserpass/default.nix1
-rw-r--r--pkgs/tools/security/bruteforce-luks/default.nix1
-rw-r--r--pkgs/tools/security/brutespray/default.nix1
-rw-r--r--pkgs/tools/security/buttercup-desktop/default.nix1
-rw-r--r--pkgs/tools/security/cariddi/default.nix1
-rw-r--r--pkgs/tools/security/certdump/default.nix1
-rw-r--r--pkgs/tools/security/certgraph/default.nix1
-rw-r--r--pkgs/tools/security/certinfo/default.nix1
-rw-r--r--pkgs/tools/security/certstrap/default.nix1
-rw-r--r--pkgs/tools/security/cewl/default.nix1
-rw-r--r--pkgs/tools/security/cfripper/default.nix1
-rw-r--r--pkgs/tools/security/chain-bench/default.nix1
-rw-r--r--pkgs/tools/security/chainsaw/default.nix1
-rw-r--r--pkgs/tools/security/cherrybomb/default.nix1
-rw-r--r--pkgs/tools/security/chrome-token-signing/default.nix1
-rw-r--r--pkgs/tools/security/cirrusgo/default.nix1
-rw-r--r--pkgs/tools/security/clairvoyance/default.nix1
-rw-r--r--pkgs/tools/security/cliam/default.nix1
-rw-r--r--pkgs/tools/security/cloudbrute/default.nix1
-rw-r--r--pkgs/tools/security/cloudfox/default.nix1
-rw-r--r--pkgs/tools/security/cloudhunter/default.nix1
-rw-r--r--pkgs/tools/security/cloudlist/default.nix1
-rw-r--r--pkgs/tools/security/cmospwd/default.nix1
-rw-r--r--pkgs/tools/security/coercer/default.nix1
-rw-r--r--pkgs/tools/security/commix/default.nix1
-rw-r--r--pkgs/tools/security/cosign/default.nix1
-rw-r--r--pkgs/tools/security/coze/default.nix1
-rw-r--r--pkgs/tools/security/crackql/default.nix1
-rw-r--r--pkgs/tools/security/crackxls/default.nix1
-rw-r--r--pkgs/tools/security/credential-detector/default.nix1
-rw-r--r--pkgs/tools/security/creds/default.nix1
-rw-r--r--pkgs/tools/security/credslayer/default.nix1
-rw-r--r--pkgs/tools/security/crlfsuite/default.nix1
-rw-r--r--pkgs/tools/security/crlfuzz/default.nix1
-rw-r--r--pkgs/tools/security/crowbar/default.nix1
-rw-r--r--pkgs/tools/security/crunch/default.nix1
-rw-r--r--pkgs/tools/security/cryptomator/default.nix1
-rw-r--r--pkgs/tools/security/decoder/default.nix1
-rw-r--r--pkgs/tools/security/deepsecrets/default.nix1
-rw-r--r--pkgs/tools/security/dieharder/default.nix1
-rw-r--r--pkgs/tools/security/dirstalk/default.nix1
-rw-r--r--pkgs/tools/security/dismap/default.nix1
-rw-r--r--pkgs/tools/security/dnsenum/default.nix1
-rw-r--r--pkgs/tools/security/dnspeep/default.nix1
-rw-r--r--pkgs/tools/security/dnsrecon/default.nix1
-rw-r--r--pkgs/tools/security/doas/default.nix1
-rw-r--r--pkgs/tools/security/dontgo403/default.nix1
-rw-r--r--pkgs/tools/security/doona/default.nix1
-rw-r--r--pkgs/tools/security/doppler/default.nix1
-rw-r--r--pkgs/tools/security/dorkscout/default.nix1
-rw-r--r--pkgs/tools/security/earlybird/default.nix1
-rw-r--r--pkgs/tools/security/ec2stepshell/default.nix1
-rw-r--r--pkgs/tools/security/ecdsatool/default.nix1
-rw-r--r--pkgs/tools/security/enc/default.nix1
-rw-r--r--pkgs/tools/security/enchive/default.nix1
-rw-r--r--pkgs/tools/security/enum4linux-ng/default.nix1
-rw-r--r--pkgs/tools/security/enum4linux/default.nix1
-rw-r--r--pkgs/tools/security/enumerepo/default.nix1
-rw-r--r--pkgs/tools/security/evil-winrm/default.nix1
-rw-r--r--pkgs/tools/security/evtx/default.nix1
-rw-r--r--pkgs/tools/security/expliot/default.nix1
-rw-r--r--pkgs/tools/security/extrude/default.nix1
-rw-r--r--pkgs/tools/security/faraday-agent-dispatcher/default.nix1
-rw-r--r--pkgs/tools/security/faraday-cli/default.nix1
-rw-r--r--pkgs/tools/security/ffuf/default.nix1
-rw-r--r--pkgs/tools/security/fierce/default.nix1
-rw-r--r--pkgs/tools/security/fingerprintx/default.nix1
-rw-r--r--pkgs/tools/security/firefox_decrypt/default.nix1
-rw-r--r--pkgs/tools/security/fpm2/default.nix1
-rw-r--r--pkgs/tools/security/freeze/default.nix1
-rw-r--r--pkgs/tools/security/fulcio/default.nix1
-rw-r--r--pkgs/tools/security/galer/default.nix1
-rw-r--r--pkgs/tools/security/gau/default.nix1
-rw-r--r--pkgs/tools/security/gencfsm/default.nix1
-rw-r--r--pkgs/tools/security/genpass/default.nix1
-rw-r--r--pkgs/tools/security/ggshield/default.nix1
-rw-r--r--pkgs/tools/security/ghauri/default.nix1
-rw-r--r--pkgs/tools/security/ghdorker/default.nix1
-rw-r--r--pkgs/tools/security/ghidra/build.nix1
-rw-r--r--pkgs/tools/security/ghidra/default.nix1
-rw-r--r--pkgs/tools/security/ghost/default.nix1
-rw-r--r--pkgs/tools/security/gitjacker/default.nix1
-rw-r--r--pkgs/tools/security/gnupg-pkcs11-scd/default.nix1
-rw-r--r--pkgs/tools/security/go-cve-search/default.nix1
-rw-r--r--pkgs/tools/security/go-exploitdb/default.nix1
-rw-r--r--pkgs/tools/security/goblob/default.nix1
-rw-r--r--pkgs/tools/security/gobuster/default.nix1
-rw-r--r--pkgs/tools/security/gomapenum/default.nix1
-rw-r--r--pkgs/tools/security/gorilla-bin/default.nix1
-rw-r--r--pkgs/tools/security/gospider/default.nix1
-rw-r--r--pkgs/tools/security/gotestwaf/default.nix1
-rw-r--r--pkgs/tools/security/gotrue/default.nix1
-rw-r--r--pkgs/tools/security/gotrue/supabase.nix1
-rw-r--r--pkgs/tools/security/goverview/default.nix1
-rw-r--r--pkgs/tools/security/govulncheck/default.nix1
-rw-r--r--pkgs/tools/security/gowitness/default.nix1
-rw-r--r--pkgs/tools/security/graphinder/default.nix1
-rw-r--r--pkgs/tools/security/graphqlmap/default.nix1
-rw-r--r--pkgs/tools/security/graphw00f/default.nix1
-rw-r--r--pkgs/tools/security/grype/default.nix1
-rw-r--r--pkgs/tools/security/hakrawler/default.nix1
-rw-r--r--pkgs/tools/security/hash_extender/default.nix1
-rw-r--r--pkgs/tools/security/hashcat/default.nix1
-rw-r--r--pkgs/tools/security/hashrat/default.nix1
-rw-r--r--pkgs/tools/security/haveged/default.nix1
-rw-r--r--pkgs/tools/security/hfinger/default.nix1
-rw-r--r--pkgs/tools/security/holehe/default.nix1
-rw-r--r--pkgs/tools/security/honeytrap/default.nix1
-rw-r--r--pkgs/tools/security/hstsparser/default.nix1
-rw-r--r--pkgs/tools/security/httpdump/default.nix1
-rw-r--r--pkgs/tools/security/httpx/default.nix1
-rw-r--r--pkgs/tools/security/iaito/default.nix1
-rw-r--r--pkgs/tools/security/ibm-sw-tpm2/default.nix1
-rw-r--r--pkgs/tools/security/ifdnfc/default.nix1
-rw-r--r--pkgs/tools/security/imdshift/default.nix1
-rw-r--r--pkgs/tools/security/inql/default.nix1
-rw-r--r--pkgs/tools/security/ioccheck/default.nix1
-rw-r--r--pkgs/tools/security/ipscan/default.nix1
-rw-r--r--pkgs/tools/security/isolate/default.nix1
-rw-r--r--pkgs/tools/security/jaeles/default.nix1
-rw-r--r--pkgs/tools/security/jd-gui/default.nix1
-rw-r--r--pkgs/tools/security/joincap/default.nix1
-rw-r--r--pkgs/tools/security/jsubfinder/default.nix1
-rw-r--r--pkgs/tools/security/jwx/default.nix1
-rw-r--r--pkgs/tools/security/katana/default.nix1
-rw-r--r--pkgs/tools/security/kbs2/default.nix1
-rw-r--r--pkgs/tools/security/kdigger/default.nix1
-rw-r--r--pkgs/tools/security/keepwn/default.nix1
-rw-r--r--pkgs/tools/security/kerbrute/default.nix1
-rw-r--r--pkgs/tools/security/kestrel/default.nix1
-rw-r--r--pkgs/tools/security/keybase/gui.nix1
-rw-r--r--pkgs/tools/security/keycard-cli/default.nix1
-rw-r--r--pkgs/tools/security/keyscope/default.nix1
-rw-r--r--pkgs/tools/security/kiterunner/default.nix1
-rw-r--r--pkgs/tools/security/knockpy/default.nix1
-rw-r--r--pkgs/tools/security/knowsmore/default.nix1
-rw-r--r--pkgs/tools/security/kpcli/default.nix1
-rw-r--r--pkgs/tools/security/kube-bench/default.nix1
-rw-r--r--pkgs/tools/security/kubeaudit/default.nix1
-rw-r--r--pkgs/tools/security/kubeclarity/default.nix1
-rw-r--r--pkgs/tools/security/kubernetes-polaris/default.nix1
-rw-r--r--pkgs/tools/security/kubescape/default.nix1
-rw-r--r--pkgs/tools/security/kubesec/default.nix1
-rw-r--r--pkgs/tools/security/ldapmonitor/default.nix1
-rw-r--r--pkgs/tools/security/ldeep/default.nix1
-rw-r--r--pkgs/tools/security/lesspass-cli/default.nix1
-rw-r--r--pkgs/tools/security/lil-pwny/default.nix1
-rw-r--r--pkgs/tools/security/linux-exploit-suggester/default.nix1
-rw-r--r--pkgs/tools/security/log4j-scan/default.nix1
-rw-r--r--pkgs/tools/security/log4j-sniffer/default.nix1
-rw-r--r--pkgs/tools/security/lynis/default.nix1
-rw-r--r--pkgs/tools/security/masscan/default.nix1
-rw-r--r--pkgs/tools/security/medusa/default.nix1
-rw-r--r--pkgs/tools/security/melt/default.nix1
-rw-r--r--pkgs/tools/security/mfcuk/default.nix1
-rw-r--r--pkgs/tools/security/mfoc/default.nix1
-rw-r--r--pkgs/tools/security/minica/default.nix1
-rw-r--r--pkgs/tools/security/mitm6/default.nix1
-rw-r--r--pkgs/tools/security/mitmproxy2swagger/default.nix1
-rw-r--r--pkgs/tools/security/mkpasswd/default.nix1
-rw-r--r--pkgs/tools/security/mkrand/default.nix1
-rw-r--r--pkgs/tools/security/mktemp/default.nix1
-rw-r--r--pkgs/tools/security/mokutil/default.nix1
-rw-r--r--pkgs/tools/security/monsoon/default.nix1
-rw-r--r--pkgs/tools/security/mpw/default.nix1
-rw-r--r--pkgs/tools/security/msfpc/default.nix1
-rw-r--r--pkgs/tools/security/mx-takeover/default.nix1
-rw-r--r--pkgs/tools/security/naabu/default.nix1
-rw-r--r--pkgs/tools/security/nasty/default.nix1
-rw-r--r--pkgs/tools/security/nbtscanner/default.nix1
-rw-r--r--pkgs/tools/security/ncrack/default.nix1
-rw-r--r--pkgs/tools/security/nitrokey-app/default.nix1
-rw-r--r--pkgs/tools/security/nmap-formatter/default.nix1
-rw-r--r--pkgs/tools/security/nmap/qt.nix1
-rw-r--r--pkgs/tools/security/noseyparker/default.nix1
-rw-r--r--pkgs/tools/security/nosqli/default.nix1
-rw-r--r--pkgs/tools/security/notary/default.nix1
-rw-r--r--pkgs/tools/security/ntlmrecon/default.nix1
-rw-r--r--pkgs/tools/security/nwipe/default.nix1
-rw-r--r--pkgs/tools/security/oauth2c/default.nix1
-rw-r--r--pkgs/tools/security/octosuite/default.nix1
-rw-r--r--pkgs/tools/security/onioncircuits/default.nix1
-rw-r--r--pkgs/tools/security/onlykey-cli/default.nix1
-rw-r--r--pkgs/tools/security/open-ecard/default.nix1
-rw-r--r--pkgs/tools/security/openrisk/default.nix1
-rw-r--r--pkgs/tools/security/orjail/default.nix1
-rw-r--r--pkgs/tools/security/osv-detector/default.nix1
-rw-r--r--pkgs/tools/security/osv-scanner/default.nix1
-rw-r--r--pkgs/tools/security/otpauth/default.nix1
-rw-r--r--pkgs/tools/security/ots/default.nix1
-rw-r--r--pkgs/tools/security/pamtester/default.nix1
-rw-r--r--pkgs/tools/security/paperkey/default.nix1
-rw-r--r--pkgs/tools/security/pass/extensions/import.nix1
-rw-r--r--pkgs/tools/security/pass/rofi-pass.nix1
-rw-r--r--pkgs/tools/security/pass2csv/default.nix1
-rw-r--r--pkgs/tools/security/passphrase2pgp/default.nix1
-rw-r--r--pkgs/tools/security/pcsc-cyberjack/default.nix1
-rw-r--r--pkgs/tools/security/pdfcrack/default.nix1
-rw-r--r--pkgs/tools/security/pgpdump/default.nix1
-rw-r--r--pkgs/tools/security/plecost/default.nix1
-rw-r--r--pkgs/tools/security/pomerium-cli/default.nix1
-rw-r--r--pkgs/tools/security/posteid-seed-extractor/default.nix1
-rw-r--r--pkgs/tools/security/pretender/default.nix1
-rw-r--r--pkgs/tools/security/pwdsafety/default.nix1
-rw-r--r--pkgs/tools/security/pwncat/default.nix1
-rw-r--r--pkgs/tools/security/qdigidoc/default.nix1
-rw-r--r--pkgs/tools/security/quill-qr/default.nix1
-rw-r--r--pkgs/tools/security/quill/default.nix1
-rw-r--r--pkgs/tools/security/radamsa/default.nix1
-rw-r--r--pkgs/tools/security/redwax-tool/default.nix1
-rw-r--r--pkgs/tools/security/regpg/default.nix1
-rw-r--r--pkgs/tools/security/responder/default.nix1
-rw-r--r--pkgs/tools/security/ripasso/cursive.nix1
-rw-r--r--pkgs/tools/security/rustscan/default.nix1
-rw-r--r--pkgs/tools/security/s5/default.nix1
-rw-r--r--pkgs/tools/security/safe/default.nix1
-rw-r--r--pkgs/tools/security/saml2aws/default.nix1
-rw-r--r--pkgs/tools/security/sammler/default.nix1
-rw-r--r--pkgs/tools/security/sbctl/default.nix1
-rw-r--r--pkgs/tools/security/scilla/default.nix1
-rw-r--r--pkgs/tools/security/scorecard/default.nix1
-rw-r--r--pkgs/tools/security/scrypt/default.nix1
-rw-r--r--pkgs/tools/security/sdlookup/default.nix1
-rw-r--r--pkgs/tools/security/secretscanner/default.nix1
-rw-r--r--pkgs/tools/security/semgrep/semgrep-core.nix1
-rw-r--r--pkgs/tools/security/shc/default.nix1
-rw-r--r--pkgs/tools/security/shisho/default.nix1
-rw-r--r--pkgs/tools/security/signify/default.nix1
-rw-r--r--pkgs/tools/security/slsa-verifier/default.nix1
-rw-r--r--pkgs/tools/security/smbmap/default.nix1
-rw-r--r--pkgs/tools/security/snallygaster/default.nix1
-rw-r--r--pkgs/tools/security/snow/default.nix1
-rw-r--r--pkgs/tools/security/snowcat/default.nix1
-rw-r--r--pkgs/tools/security/spectre-meltdown-checker/default.nix1
-rw-r--r--pkgs/tools/security/spyre/default.nix1
-rw-r--r--pkgs/tools/security/ssdeep/default.nix1
-rw-r--r--pkgs/tools/security/ssh-audit/default.nix1
-rw-r--r--pkgs/tools/security/ssh-to-pgp/default.nix1
-rw-r--r--pkgs/tools/security/sshchecker/default.nix1
-rw-r--r--pkgs/tools/security/sshguard/default.nix1
-rw-r--r--pkgs/tools/security/sshocker/default.nix1
-rw-r--r--pkgs/tools/security/sshuttle/default.nix1
-rw-r--r--pkgs/tools/security/sslscan/default.nix1
-rw-r--r--pkgs/tools/security/stacs/default.nix1
-rw-r--r--pkgs/tools/security/su-exec/default.nix1
-rw-r--r--pkgs/tools/security/subjs/default.nix1
-rw-r--r--pkgs/tools/security/swaggerhole/default.nix1
-rw-r--r--pkgs/tools/security/teler/default.nix1
-rw-r--r--pkgs/tools/security/tell-me-your-secrets/default.nix1
-rw-r--r--pkgs/tools/security/terrascan/default.nix1
-rw-r--r--pkgs/tools/security/threatest/default.nix1
-rw-r--r--pkgs/tools/security/tor/torsocks.nix1
-rw-r--r--pkgs/tools/security/tpm2-abrmd/default.nix1
-rw-r--r--pkgs/tools/security/tracee/default.nix1
-rw-r--r--pkgs/tools/security/trousers/default.nix1
-rw-r--r--pkgs/tools/security/truecrack/default.nix1
-rw-r--r--pkgs/tools/security/trueseeing/default.nix1
-rw-r--r--pkgs/tools/security/trustymail/default.nix1
-rw-r--r--pkgs/tools/security/uddup/default.nix1
-rw-r--r--pkgs/tools/security/udpx/default.nix1
-rw-r--r--pkgs/tools/security/urlhunter/default.nix1
-rw-r--r--pkgs/tools/security/usbrip/default.nix1
-rw-r--r--pkgs/tools/security/vals/default.nix1
-rw-r--r--pkgs/tools/security/vault-medusa/default.nix1
-rw-r--r--pkgs/tools/security/vault-ssh-plus/default.nix1
-rw-r--r--pkgs/tools/security/verifpal/default.nix1
-rw-r--r--pkgs/tools/security/vexctl/default.nix1
-rw-r--r--pkgs/tools/security/vulnix/default.nix1
-rw-r--r--pkgs/tools/security/wad/default.nix1
-rw-r--r--pkgs/tools/security/waf-tester/default.nix1
-rw-r--r--pkgs/tools/security/wafw00f/default.nix1
-rw-r--r--pkgs/tools/security/web-eid-app/default.nix1
-rw-r--r--pkgs/tools/security/whatweb/default.nix1
-rw-r--r--pkgs/tools/security/wipe/default.nix1
-rw-r--r--pkgs/tools/security/xcat/default.nix1
-rw-r--r--pkgs/tools/security/xorex/default.nix1
-rw-r--r--pkgs/tools/security/xsser/default.nix1
-rw-r--r--pkgs/tools/security/xsubfind3r/default.nix1
-rw-r--r--pkgs/tools/security/yarGen/default.nix1
-rw-r--r--pkgs/tools/security/yersinia/default.nix1
-rw-r--r--pkgs/tools/security/yubikey-agent/default.nix1
-rw-r--r--pkgs/tools/security/zdns/default.nix1
-rw-r--r--pkgs/tools/security/zgrab2/default.nix1
-rw-r--r--pkgs/tools/system/goreman/default.nix1
-rw-r--r--pkgs/tools/system/journalwatch/default.nix1
-rw-r--r--pkgs/tools/system/netdata/go.d.plugin.nix1
-rw-r--r--pkgs/tools/system/rsyslog/default.nix1
-rw-r--r--pkgs/tools/system/zenith/default.nix1
-rw-r--r--pkgs/tools/text/abbreviate/default.nix1
-rw-r--r--pkgs/tools/text/agrep/default.nix1
-rw-r--r--pkgs/tools/text/aha/default.nix1
-rw-r--r--pkgs/tools/text/align/default.nix1
-rw-r--r--pkgs/tools/text/anew/default.nix1
-rw-r--r--pkgs/tools/text/anewer/default.nix1
-rw-r--r--pkgs/tools/text/ansifilter/default.nix1
-rw-r--r--pkgs/tools/text/ascii/default.nix1
-rw-r--r--pkgs/tools/text/asciigraph/default.nix1
-rw-r--r--pkgs/tools/text/autocorrect/default.nix1
-rw-r--r--pkgs/tools/text/base16384/default.nix1
-rw-r--r--pkgs/tools/text/bashblog/default.nix1
-rw-r--r--pkgs/tools/text/book-summary/default.nix1
-rw-r--r--pkgs/tools/text/boxes/default.nix1
-rw-r--r--pkgs/tools/text/catdocx/default.nix1
-rw-r--r--pkgs/tools/text/cconv/default.nix1
-rw-r--r--pkgs/tools/text/chars/default.nix1
-rw-r--r--pkgs/tools/text/choose/default.nix1
-rw-r--r--pkgs/tools/text/cidrgrep/default.nix1
-rw-r--r--pkgs/tools/text/cmigemo/default.nix1
-rw-r--r--pkgs/tools/text/coloursum/default.nix1
-rw-r--r--pkgs/tools/text/comrak/default.nix1
-rw-r--r--pkgs/tools/text/convertlit/default.nix1
-rw-r--r--pkgs/tools/text/copyright-update/default.nix1
-rw-r--r--pkgs/tools/text/csvdiff/default.nix1
-rw-r--r--pkgs/tools/text/csview/default.nix1
-rw-r--r--pkgs/tools/text/dadadodo/default.nix1
-rw-r--r--pkgs/tools/text/dfmt/default.nix1
-rw-r--r--pkgs/tools/text/diffr/default.nix1
-rw-r--r--pkgs/tools/text/diffstat/default.nix1
-rw-r--r--pkgs/tools/text/dirdiff/default.nix1
-rw-r--r--pkgs/tools/text/each/default.nix1
-rw-r--r--pkgs/tools/text/epubcheck/default.nix1
-rw-r--r--pkgs/tools/text/esh/default.nix1
-rw-r--r--pkgs/tools/text/fanficfare/default.nix1
-rw-r--r--pkgs/tools/text/fastmod/default.nix1
-rw-r--r--pkgs/tools/text/frangipanni/default.nix1
-rw-r--r--pkgs/tools/text/frawk/default.nix1
-rw-r--r--pkgs/tools/text/frogmouth/default.nix1
-rw-r--r--pkgs/tools/text/fst/default.nix1
-rw-r--r--pkgs/tools/text/gawk/gawkextlib.nix1
-rw-r--r--pkgs/tools/text/gjo/default.nix1
-rw-r--r--pkgs/tools/text/glogg/default.nix1
-rw-r--r--pkgs/tools/text/gnupatch/default.nix1
-rw-r--r--pkgs/tools/text/gtranslator/default.nix1
-rw-r--r--pkgs/tools/text/gtree/default.nix1
-rw-r--r--pkgs/tools/text/gucci/default.nix1
-rw-r--r--pkgs/tools/text/hcledit/default.nix1
-rw-r--r--pkgs/tools/text/highlight/default.nix1
-rw-r--r--pkgs/tools/text/html2text/default.nix1
-rw-r--r--pkgs/tools/text/huniq/default.nix1
-rw-r--r--pkgs/tools/text/hyx/default.nix1
-rw-r--r--pkgs/tools/text/invoice2data/default.nix1
-rw-r--r--pkgs/tools/text/jen/default.nix1
-rw-r--r--pkgs/tools/text/jotdown/default.nix1
-rw-r--r--pkgs/tools/text/jsawk/default.nix1
-rw-r--r--pkgs/tools/text/jumanpp/default.nix1
-rw-r--r--pkgs/tools/text/kdiff3/default.nix1
-rw-r--r--pkgs/tools/text/l2md/default.nix1
-rw-r--r--pkgs/tools/text/mairix/default.nix1
-rw-r--r--pkgs/tools/text/mark/default.nix1
-rw-r--r--pkgs/tools/text/markscribe/default.nix1
-rw-r--r--pkgs/tools/text/math-review/default.nix1
-rw-r--r--pkgs/tools/text/mawk/default.nix1
-rw-r--r--pkgs/tools/text/mb2md/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-admonish/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-cmdrun/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-d2/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-emojicodes/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-epub/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-footnote/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-graphviz/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-katex/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-kroki-preprocessor/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-linkcheck/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-man/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-mermaid/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-open-on-gh/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-pagetoc/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-pdf/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-plantuml/default.nix1
-rw-r--r--pkgs/tools/text/mdbook-toc/default.nix1
-rw-r--r--pkgs/tools/text/mdbook/default.nix1
-rw-r--r--pkgs/tools/text/mir-qualia/default.nix1
-rw-r--r--pkgs/tools/text/mmdoc/default.nix1
-rw-r--r--pkgs/tools/text/morsel/default.nix1
-rw-r--r--pkgs/tools/text/mpage/default.nix1
-rw-r--r--pkgs/tools/text/multitran/mtutils/default.nix1
-rw-r--r--pkgs/tools/text/nerdfix/default.nix1
-rw-r--r--pkgs/tools/text/nkf/default.nix1
-rw-r--r--pkgs/tools/text/odt2txt/default.nix1
-rw-r--r--pkgs/tools/text/papeer/default.nix1
-rw-r--r--pkgs/tools/text/paperoni/default.nix1
-rw-r--r--pkgs/tools/text/papertrail/default.nix1
-rw-r--r--pkgs/tools/text/par/default.nix1
-rw-r--r--pkgs/tools/text/pbgopy/default.nix1
-rw-r--r--pkgs/tools/text/peco/default.nix1
-rw-r--r--pkgs/tools/text/pinyin-tool/default.nix1
-rw-r--r--pkgs/tools/text/platinum-searcher/default.nix1
-rw-r--r--pkgs/tools/text/pn/default.nix1
-rw-r--r--pkgs/tools/text/podiff/default.nix1
-rw-r--r--pkgs/tools/text/poedit/default.nix1
-rw-r--r--pkgs/tools/text/pomsky/default.nix1
-rw-r--r--pkgs/tools/text/proselint/default.nix1
-rw-r--r--pkgs/tools/text/qprint/default.nix1
-rw-r--r--pkgs/tools/text/reckon/default.nix1
-rw-r--r--pkgs/tools/text/recode/default.nix1
-rw-r--r--pkgs/tools/text/reveal-md/default.nix1
-rw-r--r--pkgs/tools/text/rgxg/default.nix1
-rw-r--r--pkgs/tools/text/rnr/default.nix1
-rw-r--r--pkgs/tools/text/rosie/default.nix1
-rw-r--r--pkgs/tools/text/rpl/default.nix1
-rw-r--r--pkgs/tools/text/runiq/default.nix1
-rw-r--r--pkgs/tools/text/ruplacer/default.nix1
-rw-r--r--pkgs/tools/text/sad/default.nix1
-rw-r--r--pkgs/tools/text/scraper/default.nix1
-rw-r--r--pkgs/tools/text/sd/default.nix1
-rw-r--r--pkgs/tools/text/sgml/openjade/default.nix1
-rw-r--r--pkgs/tools/text/sgrep/default.nix1
-rw-r--r--pkgs/tools/text/shab/default.nix1
-rw-r--r--pkgs/tools/text/shocco/default.nix1
-rw-r--r--pkgs/tools/text/sift/default.nix1
-rw-r--r--pkgs/tools/text/smu/default.nix1
-rw-r--r--pkgs/tools/text/sorted-grep/default.nix1
-rw-r--r--pkgs/tools/text/subedit/default.nix1
-rw-r--r--pkgs/tools/text/tab/default.nix1
-rw-r--r--pkgs/tools/text/teip/default.nix1
-rw-r--r--pkgs/tools/text/termbook/default.nix1
-rw-r--r--pkgs/tools/text/tidy-viewer/default.nix1
-rw-r--r--pkgs/tools/text/tml/default.nix1
-rw-r--r--pkgs/tools/text/to-html/default.nix1
-rw-r--r--pkgs/tools/text/tuc/default.nix1
-rw-r--r--pkgs/tools/text/tv/default.nix1
-rw-r--r--pkgs/tools/text/txt2tags/default.nix1
-rw-r--r--pkgs/tools/text/unfurl/default.nix1
-rw-r--r--pkgs/tools/text/uniscribe/default.nix1
-rw-r--r--pkgs/tools/text/unrtf/default.nix1
-rw-r--r--pkgs/tools/text/untex/default.nix1
-rw-r--r--pkgs/tools/text/uwc/default.nix1
-rw-r--r--pkgs/tools/text/vgrep/default.nix1
-rw-r--r--pkgs/tools/text/wdiff/default.nix1
-rw-r--r--pkgs/tools/text/wgetpaste/default.nix1
-rw-r--r--pkgs/tools/text/xidel/default.nix1
-rw-r--r--pkgs/tools/text/xml/xmlformat/default.nix1
-rw-r--r--pkgs/tools/text/xml/xmloscopy/default.nix1
-rw-r--r--pkgs/tools/text/xml/xq/default.nix1
-rw-r--r--pkgs/tools/text/xpaste/default.nix1
-rw-r--r--pkgs/tools/text/xsv/default.nix1
-rw-r--r--pkgs/tools/text/yaml-merge/default.nix1
-rw-r--r--pkgs/tools/text/zet/default.nix1
-rw-r--r--pkgs/tools/typesetting/bibtex-tidy/default.nix1
-rw-r--r--pkgs/tools/typesetting/tex/dblatex/default.nix1
-rw-r--r--pkgs/tools/typesetting/tex/gladtex/default.nix1
-rw-r--r--pkgs/tools/typesetting/tex/latexrun/default.nix1
-rw-r--r--pkgs/tools/typesetting/tex/pplatex/default.nix1
-rw-r--r--pkgs/tools/typesetting/tex/tex-match/default.nix1
-rw-r--r--pkgs/tools/virtualization/nixos-container/default.nix1
685 files changed, 685 insertions, 0 deletions
diff --git a/pkgs/tools/admin/ansible/doctor.nix b/pkgs/tools/admin/ansible/doctor.nix
index ef7ef6aabb85b..8a14a049893ba 100644
--- a/pkgs/tools/admin/ansible/doctor.nix
+++ b/pkgs/tools/admin/ansible/doctor.nix
@@ -59,6 +59,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Annotation based documentation for your Ansible roles";
+    mainProgram = "ansible-doctor";
     homepage = "https://github.com/thegeeklab/ansible-doctor";
     changelog = "https://github.com/thegeeklab/ansible-doctor/releases/tag/v${version}";
     license = licenses.lgpl3Only;
diff --git a/pkgs/tools/admin/ansible/later.nix b/pkgs/tools/admin/ansible/later.nix
index 733981ecd9288..f620024ab152e 100644
--- a/pkgs/tools/admin/ansible/later.nix
+++ b/pkgs/tools/admin/ansible/later.nix
@@ -79,6 +79,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Best practice scanner for Ansible roles and playbooks";
+    mainProgram = "ansible-later";
     homepage = "https://github.com/thegeeklab/ansible-later";
     changelog = "https://github.com/thegeeklab/ansible-later/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/admin/ansible/lint.nix b/pkgs/tools/admin/ansible/lint.nix
index 4f05f0471af21..2c746ae69bd2b 100644
--- a/pkgs/tools/admin/ansible/lint.nix
+++ b/pkgs/tools/admin/ansible/lint.nix
@@ -88,6 +88,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Best practices checker for Ansible";
+    mainProgram = "ansible-lint";
     homepage = "https://github.com/ansible/ansible-lint";
     changelog = "https://github.com/ansible/ansible-lint/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/admin/aws-google-auth/default.nix b/pkgs/tools/admin/aws-google-auth/default.nix
index 545e22f6b58a3..84b9d3fd8c993 100644
--- a/pkgs/tools/admin/aws-google-auth/default.nix
+++ b/pkgs/tools/admin/aws-google-auth/default.nix
@@ -76,6 +76,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Acquire AWS STS (temporary) credentials via Google Apps SAML Single Sign On";
+    mainProgram = "aws-google-auth";
     homepage = "https://github.com/cevoaustralia/aws-google-auth";
     maintainers = [ maintainers.marsam ];
     license = licenses.mit;
diff --git a/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix b/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix
index 01d5b9479aa7e..19e125d57c94a 100644
--- a/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix
+++ b/pkgs/tools/admin/aws-lambda-runtime-interface-emulator/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Locally test Lambda functions packaged as container images";
+    mainProgram = "aws-lambda-rie";
     homepage = "https://github.com/aws/aws-lambda-runtime-interface-emulator";
     license = licenses.asl20;
     maintainers = with maintainers; [ teto ];
diff --git a/pkgs/tools/admin/aws-mfa/default.nix b/pkgs/tools/admin/aws-mfa/default.nix
index 53b3a8d4a4743..6e58574ee2ba0 100644
--- a/pkgs/tools/admin/aws-mfa/default.nix
+++ b/pkgs/tools/admin/aws-mfa/default.nix
@@ -39,6 +39,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Manage AWS MFA Security Credentials";
+    mainProgram = "aws-mfa";
     homepage = "https://github.com/broamski/aws-mfa";
     license = licenses.mit;
     maintainers = [ ];
diff --git a/pkgs/tools/admin/aws-vault/default.nix b/pkgs/tools/admin/aws-vault/default.nix
index 99255f568fa9d..20d0667b70e2e 100644
--- a/pkgs/tools/admin/aws-vault/default.nix
+++ b/pkgs/tools/admin/aws-vault/default.nix
@@ -50,6 +50,7 @@ buildGoModule rec {
   meta = with lib; {
     description =
       "A vault for securely storing and accessing AWS credentials in development environments";
+    mainProgram = "aws-vault";
     homepage = "https://github.com/99designs/aws-vault";
     license = licenses.mit;
     maintainers = with maintainers; [ zimbatm ];
diff --git a/pkgs/tools/admin/awslimitchecker/default.nix b/pkgs/tools/admin/awslimitchecker/default.nix
index 0a67e5a4e4e20..cc492ed065d30 100644
--- a/pkgs/tools/admin/awslimitchecker/default.nix
+++ b/pkgs/tools/admin/awslimitchecker/default.nix
@@ -52,6 +52,7 @@ python3Packages.buildPythonApplication rec {
     homepage = "http://awslimitchecker.readthedocs.org";
     changelog = "https://github.com/jantman/awslimitchecker/blob/${version}/CHANGES.rst";
     description = "A script and python package to check your AWS service limits and usage via boto3";
+    mainProgram = "awslimitchecker";
     license = licenses.agpl3Plus;
     maintainers = with maintainers; [ zakame ];
   };
diff --git a/pkgs/tools/admin/awslogs/default.nix b/pkgs/tools/admin/awslogs/default.nix
index ff4924c1cce53..153da049ac168 100644
--- a/pkgs/tools/admin/awslogs/default.nix
+++ b/pkgs/tools/admin/awslogs/default.nix
@@ -45,6 +45,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "AWS CloudWatch logs for Humans";
+    mainProgram = "awslogs";
     homepage = "https://github.com/jorgebastida/awslogs";
     license = licenses.bsd3;
     maintainers = with maintainers; [ dbrock ];
diff --git a/pkgs/tools/admin/chkcrontab/default.nix b/pkgs/tools/admin/chkcrontab/default.nix
index 7d24270f8d536..e8133ae65d2f4 100644
--- a/pkgs/tools/admin/chkcrontab/default.nix
+++ b/pkgs/tools/admin/chkcrontab/default.nix
@@ -13,6 +13,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "A tool to detect crontab errors";
+    mainProgram = "chkcrontab";
     license = licenses.asl20;
     maintainers = with maintainers; [ ];
     homepage = "https://github.com/lyda/chkcrontab";
diff --git a/pkgs/tools/admin/dehydrated/default.nix b/pkgs/tools/admin/dehydrated/default.nix
index d36028e3b227f..93a4c4f740d7d 100644
--- a/pkgs/tools/admin/dehydrated/default.nix
+++ b/pkgs/tools/admin/dehydrated/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     inherit (src.meta) homepage;
     description = "Letsencrypt/acme client implemented as a shell-script";
+    mainProgram = "dehydrated";
     license = licenses.mit;
     platforms = platforms.all;
     maintainers = [ maintainers.pstn ];
diff --git a/pkgs/tools/admin/gam/default.nix b/pkgs/tools/admin/gam/default.nix
index 5847bcf00d510..795256d218901 100644
--- a/pkgs/tools/admin/gam/default.nix
+++ b/pkgs/tools/admin/gam/default.nix
@@ -64,6 +64,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Command line management for Google Workspace";
+    mainProgram = "gam";
     homepage = "https://github.com/GAM-team/GAM/wiki";
     changelog = "https://github.com/GAM-team/GAM/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/tools/admin/gimme-aws-creds/default.nix b/pkgs/tools/admin/gimme-aws-creds/default.nix
index 82081a68af436..f4a2e496b0564 100644
--- a/pkgs/tools/admin/gimme-aws-creds/default.nix
+++ b/pkgs/tools/admin/gimme-aws-creds/default.nix
@@ -95,6 +95,7 @@ python.pkgs.buildPythonApplication rec {
     homepage = "https://github.com/Nike-Inc/gimme-aws-creds";
     changelog = "https://github.com/Nike-Inc/gimme-aws-creds/releases";
     description = "A CLI that utilizes Okta IdP via SAML to acquire temporary AWS credentials";
+    mainProgram = "gimme-aws-creds";
     license = licenses.asl20;
     maintainers = with maintainers; [ jbgosselin ];
   };
diff --git a/pkgs/tools/admin/gixy/default.nix b/pkgs/tools/admin/gixy/default.nix
index 31c2e88dd8258..541bcb42f905c 100644
--- a/pkgs/tools/admin/gixy/default.nix
+++ b/pkgs/tools/admin/gixy/default.nix
@@ -50,6 +50,7 @@ python.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Nginx configuration static analyzer";
+    mainProgram = "gixy";
     longDescription = ''
       Gixy is a tool to analyze Nginx configuration.
       The main goal of Gixy is to prevent security misconfiguration and automate flaw detection.
diff --git a/pkgs/tools/admin/mycli/default.nix b/pkgs/tools/admin/mycli/default.nix
index 8a67139bb5764..58f1236db037a 100644
--- a/pkgs/tools/admin/mycli/default.nix
+++ b/pkgs/tools/admin/mycli/default.nix
@@ -57,6 +57,7 @@ buildPythonApplication rec {
   meta = with lib; {
     inherit version;
     description = "Command-line interface for MySQL";
+    mainProgram = "mycli";
     longDescription = ''
       Rich command-line interface for MySQL with auto-completion and
       syntax highlighting.
diff --git a/pkgs/tools/admin/proxmove/default.nix b/pkgs/tools/admin/proxmove/default.nix
index 6f20e5fe603fe..21055de12b6c7 100644
--- a/pkgs/tools/admin/proxmove/default.nix
+++ b/pkgs/tools/admin/proxmove/default.nix
@@ -34,6 +34,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "The Proxmox VM migrator: migrates VMs between different Proxmox VE clusters";
+    mainProgram = "proxmove";
     homepage = "https://github.com/ossobv/proxmove";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
diff --git a/pkgs/tools/admin/pulumi-packages/pulumi-aws-native.nix b/pkgs/tools/admin/pulumi-packages/pulumi-aws-native.nix
index 2a0582ecb805f..51971963fc378 100644
--- a/pkgs/tools/admin/pulumi-packages/pulumi-aws-native.nix
+++ b/pkgs/tools/admin/pulumi-packages/pulumi-aws-native.nix
@@ -27,6 +27,7 @@ mkPulumiPackage rec {
 
   meta = with lib; {
     description = "Native AWS Pulumi Provider";
+    mainProgram = "pulumi-resource-aws-native";
     homepage = "https://github.com/pulumi/pulumi-aws-native";
     license = licenses.asl20;
     maintainers = with maintainers; [ veehaitch trundle ];
diff --git a/pkgs/tools/admin/pulumi-packages/pulumi-azure-native.nix b/pkgs/tools/admin/pulumi-packages/pulumi-azure-native.nix
index 76a5eff2973ef..7b37577da5661 100644
--- a/pkgs/tools/admin/pulumi-packages/pulumi-azure-native.nix
+++ b/pkgs/tools/admin/pulumi-packages/pulumi-azure-native.nix
@@ -32,6 +32,7 @@ mkPulumiPackage rec {
   __darwinAllowLocalNetworking = true;
   meta = with lib; {
     description = "Native Azure Pulumi Provider";
+    mainProgram = "pulumi-resource-azure-native";
     homepage = "https://github.com/pulumi/pulumi-azure-native";
     license = licenses.asl20;
     maintainers = with maintainers; [ veehaitch trundle ];
diff --git a/pkgs/tools/admin/pulumi-packages/pulumi-command.nix b/pkgs/tools/admin/pulumi-packages/pulumi-command.nix
index d53e9593feecd..e74a36fd5ef37 100644
--- a/pkgs/tools/admin/pulumi-packages/pulumi-command.nix
+++ b/pkgs/tools/admin/pulumi-packages/pulumi-command.nix
@@ -26,6 +26,7 @@ mkPulumiPackage rec {
 
   meta = with lib; {
     description = "A Pulumi provider to execute commands and scripts either locally or remotely as part of the Pulumi resource model";
+    mainProgram = "pulumi-resource-command";
     homepage = "https://github.com/pulumi/pulumi-command";
     license = licenses.asl20;
     maintainers = with maintainers; [ veehaitch trundle ];
diff --git a/pkgs/tools/admin/pulumi-packages/pulumi-language-go.nix b/pkgs/tools/admin/pulumi-packages/pulumi-language-go.nix
index 88da6f0d33f43..5a5e9ec7397d5 100644
--- a/pkgs/tools/admin/pulumi-packages/pulumi-language-go.nix
+++ b/pkgs/tools/admin/pulumi-packages/pulumi-language-go.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Golang language host plugin for Pulumi";
+    mainProgram = "pulumi-language-go";
     homepage = "https://github.com/pulumi/pulumi/tree/master/sdk/go";
     license = licenses.asl20;
   };
diff --git a/pkgs/tools/admin/pulumi-packages/pulumi-random.nix b/pkgs/tools/admin/pulumi-packages/pulumi-random.nix
index af704eac192d8..4f87818115199 100644
--- a/pkgs/tools/admin/pulumi-packages/pulumi-random.nix
+++ b/pkgs/tools/admin/pulumi-packages/pulumi-random.nix
@@ -16,6 +16,7 @@ mkPulumiPackage rec {
   __darwinAllowLocalNetworking = true;
   meta = with lib; {
     description = "A Pulumi provider that safely enables randomness for resources";
+    mainProgram = "pulumi-resource-random";
     homepage = "https://github.com/pulumi/pulumi-random";
     license = licenses.asl20;
     maintainers = with maintainers; [ veehaitch trundle ];
diff --git a/pkgs/tools/admin/s3bro/default.nix b/pkgs/tools/admin/s3bro/default.nix
index 47b458e9cc025..ee35c619fb745 100644
--- a/pkgs/tools/admin/s3bro/default.nix
+++ b/pkgs/tools/admin/s3bro/default.nix
@@ -34,6 +34,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "s3 CLI tool";
+    mainProgram = "s3bro";
     homepage = "https://github.com/rsavordelli/s3bro";
     license = licenses.mit;
     maintainers = with maintainers; [ psyanticy ];
diff --git a/pkgs/tools/admin/ssl-cert-check/default.nix b/pkgs/tools/admin/ssl-cert-check/default.nix
index c314c304aec8d..857fc096e06d3 100644
--- a/pkgs/tools/admin/ssl-cert-check/default.nix
+++ b/pkgs/tools/admin/ssl-cert-check/default.nix
@@ -51,6 +51,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Bourne shell script that can be used to report on expiring SSL certificates";
+    mainProgram = "ssl-cert-check";
     homepage = "https://github.com/Matty9191/ssl-cert-check";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ ryantm ];
diff --git a/pkgs/tools/admin/try/default.nix b/pkgs/tools/admin/try/default.nix
index 697a192d156e6..a5a6c760a010b 100644
--- a/pkgs/tools/admin/try/default.nix
+++ b/pkgs/tools/admin/try/default.nix
@@ -18,6 +18,7 @@ stdenvNoCC.mkDerivation rec {
   meta = with lib;{
     homepage = "https://github.com/binpash/try";
     description = "Lets you run a command and inspect its effects before changing your live system";
+    mainProgram = "try";
     maintainers = with maintainers; [ pasqui23 ];
     license = with licenses; [ mit ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/archivers/zpaq/zpaqd.nix b/pkgs/tools/archivers/zpaq/zpaqd.nix
index 6896897be3b15..07ef4db4d6b05 100644
--- a/pkgs/tools/archivers/zpaq/zpaqd.nix
+++ b/pkgs/tools/archivers/zpaq/zpaqd.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "ZPAQ archive (de)compressor and algorithm development tool";
+    mainProgram = "zpaqd";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/audio/liquidsoap/full.nix b/pkgs/tools/audio/liquidsoap/full.nix
index b4c4af7d457d1..f4fac11df2207 100644
--- a/pkgs/tools/audio/liquidsoap/full.nix
+++ b/pkgs/tools/audio/liquidsoap/full.nix
@@ -131,6 +131,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Swiss-army knife for multimedia streaming";
+    mainProgram = "liquidsoap";
     homepage = "https://www.liquidsoap.info/";
     maintainers = with maintainers; [ dandellion ehmry ];
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/audio/pa-applet/default.nix b/pkgs/tools/audio/pa-applet/default.nix
index 0a82f37e04d32..ef5cde192baf5 100644
--- a/pkgs/tools/audio/pa-applet/default.nix
+++ b/pkgs/tools/audio/pa-applet/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "";
+    mainProgram = "pa-applet";
     license = licenses.gpl2;
     maintainers = with maintainers; [ domenkozar ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/audio/spotdl/default.nix b/pkgs/tools/audio/spotdl/default.nix
index a825fd2e1e399..f4a7e207bef3e 100644
--- a/pkgs/tools/audio/spotdl/default.nix
+++ b/pkgs/tools/audio/spotdl/default.nix
@@ -91,6 +91,7 @@ in python.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Download your Spotify playlists and songs along with album art and metadata";
+    mainProgram = "spotdl";
     homepage = "https://github.com/spotDL/spotify-downloader";
     changelog = "https://github.com/spotDL/spotify-downloader/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/audio/wyoming/piper.nix b/pkgs/tools/audio/wyoming/piper.nix
index dc69c907ee2a4..82d8c003348e5 100644
--- a/pkgs/tools/audio/wyoming/piper.nix
+++ b/pkgs/tools/audio/wyoming/piper.nix
@@ -38,6 +38,7 @@ python3Packages.buildPythonApplication rec {
   meta = with lib; {
     changelog = "https://github.com/rhasspy/wyoming-openwakeword/v${version}/master/CHANGELOG.md";
     description = "Wyoming Server for Piper";
+    mainProgram = "wyoming-piper";
     homepage = "https://github.com/rhasspy/wyoming-openwakeword";
     license = licenses.mit;
     maintainers = with maintainers; [ hexa ];
diff --git a/pkgs/tools/backup/android-backup-extractor/default.nix b/pkgs/tools/backup/android-backup-extractor/default.nix
index 5411b70c77a28..3ecbce8555cde 100644
--- a/pkgs/tools/backup/android-backup-extractor/default.nix
+++ b/pkgs/tools/backup/android-backup-extractor/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Utility to extract and repack Android backups created with adb backup";
+    mainProgram = "abe";
     homepage = "https://github.com/nelenkov/android-backup-extractor";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.asl20;
diff --git a/pkgs/tools/backup/automysqlbackup/default.nix b/pkgs/tools/backup/automysqlbackup/default.nix
index f103149a83d70..2a36e3a2a275c 100644
--- a/pkgs/tools/backup/automysqlbackup/default.nix
+++ b/pkgs/tools/backup/automysqlbackup/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A script to run daily, weekly and monthly backups for your MySQL database";
+    mainProgram = "automysqlbackup";
     homepage = "https://github.com/sixhop/AutoMySQLBackup";
     platforms = platforms.linux;
     maintainers = [ maintainers.aanderse ];
diff --git a/pkgs/tools/backup/bakelite/default.nix b/pkgs/tools/backup/bakelite/default.nix
index c67741b068690..9270be408d2dd 100644
--- a/pkgs/tools/backup/bakelite/default.nix
+++ b/pkgs/tools/backup/bakelite/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/richfelker/bakelite";
     description = "Incremental backup with strong cryptographic confidentality";
+    mainProgram = "bakelite";
     license = licenses.gpl2;
     maintainers = with maintainers; [ mvs ];
     # no support for Darwin (yet: https://github.com/richfelker/bakelite/pull/5)
diff --git a/pkgs/tools/backup/btar/default.nix b/pkgs/tools/backup/btar/default.nix
index f1033d275aab8..7d9f257f72b8b 100644
--- a/pkgs/tools/backup/btar/default.nix
+++ b/pkgs/tools/backup/btar/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Tar-compatible block-based archiver";
+    mainProgram = "btar";
     license = lib.licenses.gpl3Plus;
     homepage = "https://viric.name/cgi-bin/btar";
     platforms = platforms.all;
diff --git a/pkgs/tools/backup/bup/default.nix b/pkgs/tools/backup/bup/default.nix
index c2b7b048bce27..07ae258a675f3 100644
--- a/pkgs/tools/backup/bup/default.nix
+++ b/pkgs/tools/backup/bup/default.nix
@@ -48,6 +48,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://github.com/bup/bup";
     description = "Efficient file backup system based on the git packfile format";
+    mainProgram = "bup";
     license = licenses.gpl2Plus;
 
     longDescription = ''
diff --git a/pkgs/tools/backup/chunksync/default.nix b/pkgs/tools/backup/chunksync/default.nix
index 2bab8d5ea22e6..5a2ec9e5db7c4 100644
--- a/pkgs/tools/backup/chunksync/default.nix
+++ b/pkgs/tools/backup/chunksync/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Space-efficient incremental backups of large files or block devices";
+    mainProgram = "chunksync";
     homepage = "http://chunksync.florz.de/";
     license = lib.licenses.gpl2;
     platforms = with lib.platforms; linux;
diff --git a/pkgs/tools/backup/diskrsync/default.nix b/pkgs/tools/backup/diskrsync/default.nix
index 9154451a24413..5506a197fd1d1 100644
--- a/pkgs/tools/backup/diskrsync/default.nix
+++ b/pkgs/tools/backup/diskrsync/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Rsync for block devices and disk images";
+    mainProgram = "diskrsync";
     homepage = "https://github.com/dop251/diskrsync";
     license = licenses.mit;
     maintainers = with maintainers; [ jluttine ];
diff --git a/pkgs/tools/backup/duply/default.nix b/pkgs/tools/backup/duply/default.nix
index 66c31ddd0e167..d69980cb94b56 100644
--- a/pkgs/tools/backup/duply/default.nix
+++ b/pkgs/tools/backup/duply/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Shell front end for the duplicity backup tool";
+    mainProgram = "duply";
     longDescription = ''
       Duply is a shell front end for the duplicity backup tool
       https://www.nongnu.org/duplicity. It greatly simplifies its usage by
diff --git a/pkgs/tools/backup/flockit/default.nix b/pkgs/tools/backup/flockit/default.nix
index cd17f8e2438c4..c1df7f368043e 100644
--- a/pkgs/tools/backup/flockit/default.nix
+++ b/pkgs/tools/backup/flockit/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "LD_PRELOAD shim to add file locking to programs that don't do it (I'm looking at you, rsync!)";
+    mainProgram = "flockit";
     longDescription = ''
       This library and tool exists solely because rsync doesn't have file locking.
 
diff --git a/pkgs/tools/backup/gh2md/default.nix b/pkgs/tools/backup/gh2md/default.nix
index 047b838859a4c..035139b58022a 100644
--- a/pkgs/tools/backup/gh2md/default.nix
+++ b/pkgs/tools/backup/gh2md/default.nix
@@ -21,6 +21,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Export Github repository issues to markdown files";
+    mainProgram = "gh2md";
     homepage = "https://github.com/mattduck/gh2md";
     license = licenses.mit;
     maintainers = with maintainers; [ artturin ];
diff --git a/pkgs/tools/backup/gphotos-sync/default.nix b/pkgs/tools/backup/gphotos-sync/default.nix
index 9fefd79c3c62b..461931b1b991f 100644
--- a/pkgs/tools/backup/gphotos-sync/default.nix
+++ b/pkgs/tools/backup/gphotos-sync/default.nix
@@ -54,6 +54,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Google Photos and Albums backup with Google Photos Library API";
+    mainProgram = "gphotos-sync";
     homepage = "https://github.com/gilesknap/gphotos-sync";
     license = licenses.asl20;
     maintainers = with maintainers; [ dnr ];
diff --git a/pkgs/tools/backup/httrack/qt.nix b/pkgs/tools/backup/httrack/qt.nix
index ed1a75c974aa2..061c8b2ad6de3 100644
--- a/pkgs/tools/backup/httrack/qt.nix
+++ b/pkgs/tools/backup/httrack/qt.nix
@@ -31,6 +31,7 @@ mkDerivation rec {
   meta = with lib; {
     broken = stdenv.isDarwin;
     description = "Easy-to-use offline browser / website mirroring utility - QT frontend";
+    mainProgram = "httraqt";
     homepage    = "http://www.httrack.com";
     license     = licenses.gpl3;
     maintainers = with maintainers; [ peterhoeg ];
diff --git a/pkgs/tools/backup/kopia/default.nix b/pkgs/tools/backup/kopia/default.nix
index 3709040490b05..8a68cfd5ba928 100644
--- a/pkgs/tools/backup/kopia/default.nix
+++ b/pkgs/tools/backup/kopia/default.nix
@@ -25,6 +25,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://kopia.io";
     description = "Cross-platform backup tool with fast, incremental backups, client-side end-to-end encryption, compression and data deduplication";
+    mainProgram = "kopia";
     license = licenses.asl20;
     maintainers = [ maintainers.bbigras ];
   };
diff --git a/pkgs/tools/backup/lvmsync/default.nix b/pkgs/tools/backup/lvmsync/default.nix
index 00a03cda7149e..bbea71b7f370d 100644
--- a/pkgs/tools/backup/lvmsync/default.nix
+++ b/pkgs/tools/backup/lvmsync/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Optimised synchronisation of LVM snapshots over a network";
+    mainProgram = "lvmsync";
     homepage = "https://theshed.hezmatt.org/lvmsync/";
     license = licenses.gpl3;
     platforms = platforms.all;
diff --git a/pkgs/tools/backup/mastodon-archive/default.nix b/pkgs/tools/backup/mastodon-archive/default.nix
index 88d05022d4376..92498c529ca19 100644
--- a/pkgs/tools/backup/mastodon-archive/default.nix
+++ b/pkgs/tools/backup/mastodon-archive/default.nix
@@ -25,6 +25,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Utility for backing up your Mastodon content";
+    mainProgram = "mastodon-archive";
     homepage = "https://alexschroeder.ch/software/Mastodon_Archive";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ julm ];
diff --git a/pkgs/tools/backup/monolith/default.nix b/pkgs/tools/backup/monolith/default.nix
index 10859512ef80e..b43e97e1ba958 100644
--- a/pkgs/tools/backup/monolith/default.nix
+++ b/pkgs/tools/backup/monolith/default.nix
@@ -29,6 +29,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Bundle any web page into a single HTML file";
+    mainProgram = "monolith";
     homepage = "https://github.com/Y2Z/monolith";
     license = licenses.unlicense;
     maintainers = with maintainers; [ Br1ght0ne ];
diff --git a/pkgs/tools/backup/mylvmbackup/default.nix b/pkgs/tools/backup/mylvmbackup/default.nix
index 6c87fca05672f..ad1fcf6969446 100644
--- a/pkgs/tools/backup/mylvmbackup/default.nix
+++ b/pkgs/tools/backup/mylvmbackup/default.nix
@@ -43,6 +43,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://www.lenzg.net/mylvmbackup/";
     description = "a tool for quickly creating full physical backups of a MySQL server's data files";
+    mainProgram = "mylvmbackup";
     license = lib.licenses.gpl2Only;
     maintainers = with lib.maintainers; [ ryantm ];
     platforms = with lib.platforms; linux;
diff --git a/pkgs/tools/backup/pyznap/default.nix b/pkgs/tools/backup/pyznap/default.nix
index 81f3a99ecd917..fcb3ee17cb5a4 100644
--- a/pkgs/tools/backup/pyznap/default.nix
+++ b/pkgs/tools/backup/pyznap/default.nix
@@ -23,6 +23,7 @@ buildPythonApplication rec {
   meta = {
     homepage = "https://github.com/yboetz/pyznap";
     description = "ZFS snapshot tool written in python";
+    mainProgram = "pyznap";
     license = with lib.licenses; [ gpl3 ];
     maintainers = with lib.maintainers; [ rbrewer ];
   };
diff --git a/pkgs/tools/backup/rdedup/default.nix b/pkgs/tools/backup/rdedup/default.nix
index c9b59782a5850..0c8d4afb522d6 100644
--- a/pkgs/tools/backup/rdedup/default.nix
+++ b/pkgs/tools/backup/rdedup/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Data deduplication with compression and public key encryption";
+    mainProgram = "rdedup";
     homepage = "https://github.com/dpc/rdedup";
     license = licenses.mpl20;
     maintainers = with maintainers; [ dywedir ];
diff --git a/pkgs/tools/backup/restic/rest-server.nix b/pkgs/tools/backup/restic/rest-server.nix
index 9af1151518b69..62c31cd64ea76 100644
--- a/pkgs/tools/backup/restic/rest-server.nix
+++ b/pkgs/tools/backup/restic/rest-server.nix
@@ -16,6 +16,7 @@ buildGoModule rec {
   meta = with lib; {
     changelog = "https://github.com/restic/rest-server/blob/${src.rev}/CHANGELOG.md";
     description = "A high performance HTTP server that implements restic's REST backend API";
+    mainProgram = "rest-server";
     homepage = "https://github.com/restic/rest-server";
     license = licenses.bsd2;
     maintainers = with maintainers; [ dotlambda ];
diff --git a/pkgs/tools/backup/rotate-backups/default.nix b/pkgs/tools/backup/rotate-backups/default.nix
index d64b0dee50a83..08f1c3ff3bc8f 100644
--- a/pkgs/tools/backup/rotate-backups/default.nix
+++ b/pkgs/tools/backup/rotate-backups/default.nix
@@ -31,6 +31,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Simple command line interface for backup rotation";
+    mainProgram = "rotate-backups";
     homepage = "https://github.com/xolox/python-rotate-backups";
     license = licenses.mit;
     maintainers = with maintainers; [ eyjhb ];
diff --git a/pkgs/tools/backup/sigtop/default.nix b/pkgs/tools/backup/sigtop/default.nix
index b83dd061efe44..9c503be790d98 100644
--- a/pkgs/tools/backup/sigtop/default.nix
+++ b/pkgs/tools/backup/sigtop/default.nix
@@ -19,6 +19,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Utility to export messages, attachments and other data from Signal Desktop";
+    mainProgram = "sigtop";
     license = licenses.isc;
     platforms = platforms.all;
     maintainers = with maintainers; [ fricklerhandwerk ];
diff --git a/pkgs/tools/backup/stenc/default.nix b/pkgs/tools/backup/stenc/default.nix
index fb8d71c73119c..96e7ed5eca8d4 100644
--- a/pkgs/tools/backup/stenc/default.nix
+++ b/pkgs/tools/backup/stenc/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "SCSI Tape Encryption Manager";
+    mainProgram = "stenc";
     homepage = "https://github.com/scsitape/stenc";
     license = lib.licenses.gpl2;
     maintainers = with lib.maintainers; [ woffs ];
diff --git a/pkgs/tools/backup/ugarit-manifest-maker/default.nix b/pkgs/tools/backup/ugarit-manifest-maker/default.nix
index 8c37a7b72ac73..10f397df6b2a6 100644
--- a/pkgs/tools/backup/ugarit-manifest-maker/default.nix
+++ b/pkgs/tools/backup/ugarit-manifest-maker/default.nix
@@ -24,6 +24,7 @@ in with pkgs; eggDerivation rec {
   meta = with lib; {
     homepage = "https://www.kitten-technologies.co.uk/project/ugarit-manifest-maker/";
     description = "A tool for generating import manifests for Ugarit";
+    mainProgram = "ugarit-manifest-maker";
     license = licenses.bsd3;
     maintainers = [ maintainers.ebzzry ];
     platforms = platforms.unix;
diff --git a/pkgs/tools/backup/wal-e/default.nix b/pkgs/tools/backup/wal-e/default.nix
index 544f61918de99..3e77d5c3087f2 100644
--- a/pkgs/tools/backup/wal-e/default.nix
+++ b/pkgs/tools/backup/wal-e/default.nix
@@ -28,6 +28,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = {
     description = "A Postgres WAL-shipping disaster recovery and replication toolkit";
+    mainProgram = "wal-e";
     homepage = "https://github.com/wal-e/wal-e";
     maintainers = [ ];
     license = lib.licenses.bsd3;
diff --git a/pkgs/tools/backup/wal-g/default.nix b/pkgs/tools/backup/wal-g/default.nix
index d81e28fd46e27..fe6a1bd2cdbdb 100644
--- a/pkgs/tools/backup/wal-g/default.nix
+++ b/pkgs/tools/backup/wal-g/default.nix
@@ -34,6 +34,7 @@ buildGoModule rec {
     homepage = "https://github.com/wal-g/wal-g";
     license = licenses.asl20;
     description = "An archival restoration tool for PostgreSQL";
+    mainProgram = "wal-g";
     maintainers = with maintainers; [ marsam ];
   };
 }
diff --git a/pkgs/tools/backup/zbackup/default.nix b/pkgs/tools/backup/zbackup/default.nix
index 021c85707a609..c43a3d52af815 100644
--- a/pkgs/tools/backup/zbackup/default.nix
+++ b/pkgs/tools/backup/zbackup/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A versatile deduplicating backup tool";
+    mainProgram = "zbackup";
     homepage = "http://zbackup.org/";
     platforms = lib.platforms.linux;
     license = lib.licenses.gpl2Plus;
diff --git a/pkgs/tools/backup/zfs-prune-snapshots/default.nix b/pkgs/tools/backup/zfs-prune-snapshots/default.nix
index 2c9e4a2fdf8ac..18ddacd4d55fd 100644
--- a/pkgs/tools/backup/zfs-prune-snapshots/default.nix
+++ b/pkgs/tools/backup/zfs-prune-snapshots/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Remove snapshots from one or more zpools that match given criteria";
+    mainProgram = "zfs-prune-snapshots";
     homepage = "https://github.com/bahamas10/zfs-prune-snapshots";
     license = licenses.mit;
     maintainers = [ maintainers.ymarkus ];
diff --git a/pkgs/tools/backup/zfs-replicate/default.nix b/pkgs/tools/backup/zfs-replicate/default.nix
index bdaf5c6dc6dee..0c9e2b0998a83 100644
--- a/pkgs/tools/backup/zfs-replicate/default.nix
+++ b/pkgs/tools/backup/zfs-replicate/default.nix
@@ -43,6 +43,7 @@ buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/alunduil/zfs-replicate";
     description = "ZFS Snapshot Replication";
+    mainProgram = "zfs-replicate";
     license = licenses.bsd2;
     maintainers = with maintainers; [ alunduil ];
   };
diff --git a/pkgs/tools/backup/zfsnap/default.nix b/pkgs/tools/backup/zfsnap/default.nix
index 36e369b4f30ae..6e71f38e4e63f 100644
--- a/pkgs/tools/backup/zfsnap/default.nix
+++ b/pkgs/tools/backup/zfsnap/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A portable, performant script to make rolling ZFS snapshots easy";
+    mainProgram = "zfsnap";
     homepage = "https://github.com/zfsnap/zfsnap";
     license = licenses.bsd3;
     maintainers = with maintainers; [ woffs ];
diff --git a/pkgs/tools/compression/lzham/default.nix b/pkgs/tools/compression/lzham/default.nix
index 5915d1439dff5..7d2879f63cd86 100644
--- a/pkgs/tools/compression/lzham/default.nix
+++ b/pkgs/tools/compression/lzham/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Lossless data compression codec with LZMA-like ratios but 1.5x-8x faster decompression speed";
+    mainProgram = "lzhamtest";
     homepage = "https://github.com/richgel999/lzham_codec";
     license = with licenses; [ mit ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/filesystems/9pfs/default.nix b/pkgs/tools/filesystems/9pfs/default.nix
index 7b652bd68aa09..51238e97f42a4 100644
--- a/pkgs/tools/filesystems/9pfs/default.nix
+++ b/pkgs/tools/filesystems/9pfs/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://github.com/ftrvxmtrx/9pfs";
     description = "FUSE-based client of the 9P network filesystem protocol";
+    mainProgram = "9pfs";
     maintainers = [ lib.maintainers.eelco ];
     platforms = lib.platforms.unix;
     license = with lib.licenses; [ lpl-102 bsd2 ];
diff --git a/pkgs/tools/filesystems/archivemount/default.nix b/pkgs/tools/filesystems/archivemount/default.nix
index 22e41611aef82..6c0566153a9f5 100644
--- a/pkgs/tools/filesystems/archivemount/default.nix
+++ b/pkgs/tools/filesystems/archivemount/default.nix
@@ -14,6 +14,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Gateway between FUSE and libarchive: allows mounting of cpio, .tar.gz, .tar.bz2 archives";
+    mainProgram = "archivemount";
     license = lib.licenses.gpl2;
     platforms = lib.platforms.unix;
   };
diff --git a/pkgs/tools/filesystems/btrfs-heatmap/default.nix b/pkgs/tools/filesystems/btrfs-heatmap/default.nix
index 9de91738e74d4..ee09a25ceb146 100644
--- a/pkgs/tools/filesystems/btrfs-heatmap/default.nix
+++ b/pkgs/tools/filesystems/btrfs-heatmap/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Visualize the layout of a mounted btrfs";
+    mainProgram = "btrfs-heatmap";
     homepage = "https://github.com/knorrie/btrfs-heatmap";
     license = licenses.mit;
     platforms = platforms.linux;
diff --git a/pkgs/tools/filesystems/btrfs-snap/default.nix b/pkgs/tools/filesystems/btrfs-snap/default.nix
index efc2ddafa4191..40838c1fed62e 100644
--- a/pkgs/tools/filesystems/btrfs-snap/default.nix
+++ b/pkgs/tools/filesystems/btrfs-snap/default.nix
@@ -24,6 +24,7 @@ stdenvNoCC.mkDerivation rec {
   '';
   meta = with lib; {
     description = "Create and maintain the history of snapshots of btrfs filesystems";
+    mainProgram = "btrfs-snap";
     homepage = "https://github.com/jf647/btrfs-snap";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ lionello ];
diff --git a/pkgs/tools/filesystems/catcli/default.nix b/pkgs/tools/filesystems/catcli/default.nix
index a2f5402dca25a..b8668a43c0cee 100644
--- a/pkgs/tools/filesystems/catcli/default.nix
+++ b/pkgs/tools/filesystems/catcli/default.nix
@@ -31,6 +31,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "The command line catalog tool for your offline data";
+    mainProgram = "catcli";
     homepage = "https://github.com/deadc0de6/catcli";
     changelog = "https://github.com/deadc0de6/catcli/releases/tag/v${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/filesystems/ceph-csi/default.nix b/pkgs/tools/filesystems/ceph-csi/default.nix
index 7ee65616e0b14..29224aba38b78 100644
--- a/pkgs/tools/filesystems/ceph-csi/default.nix
+++ b/pkgs/tools/filesystems/ceph-csi/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://ceph.com/";
     description = "Container Storage Interface (CSI) driver for Ceph RBD and CephFS";
+    mainProgram = "cephcsi";
     license = [ licenses.asl20 ];
     maintainers = with maintainers; [ johanot ];
     platforms = [ "x86_64-linux" "aarch64-linux" ];
diff --git a/pkgs/tools/filesystems/cpcfs/default.nix b/pkgs/tools/filesystems/cpcfs/default.nix
index 93bfdd8d23fae..3b1d54ba427cd 100644
--- a/pkgs/tools/filesystems/cpcfs/default.nix
+++ b/pkgs/tools/filesystems/cpcfs/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Manipulating CPC dsk images and files";
+    mainProgram = "cpcfs";
     homepage = "https://github.com/derikz/cpcfs/" ;
     license = licenses.bsd2;
     maintainers = [ ];
diff --git a/pkgs/tools/filesystems/curlftpfs/default.nix b/pkgs/tools/filesystems/curlftpfs/default.nix
index 1263ccb8565ef..7b3760ba5aa2e 100644
--- a/pkgs/tools/filesystems/curlftpfs/default.nix
+++ b/pkgs/tools/filesystems/curlftpfs/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Filesystem for accessing FTP hosts based on FUSE and libcurl";
+    mainProgram = "curlftpfs";
     homepage = "https://curlftpfs.sourceforge.net";
     license = licenses.gpl2Only;
     platforms = platforms.unix;
diff --git a/pkgs/tools/filesystems/darling-dmg/default.nix b/pkgs/tools/filesystems/darling-dmg/default.nix
index 54d23e770db16..8884ef2f63d54 100644
--- a/pkgs/tools/filesystems/darling-dmg/default.nix
+++ b/pkgs/tools/filesystems/darling-dmg/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://www.darlinghq.org/";
     description = "Darling lets you open macOS dmgs on Linux";
+    mainProgram = "darling-dmg";
     platforms = platforms.unix;
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ Luflosi ];
diff --git a/pkgs/tools/filesystems/dduper/default.nix b/pkgs/tools/filesystems/dduper/default.nix
index 7f876df37ee1f..c63846e2c46a2 100644
--- a/pkgs/tools/filesystems/dduper/default.nix
+++ b/pkgs/tools/filesystems/dduper/default.nix
@@ -41,6 +41,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Fast block-level out-of-band BTRFS deduplication tool";
+    mainProgram = "dduper";
     homepage = "https://github.com/Lakshmipathi/dduper";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ thesola10 ];
diff --git a/pkgs/tools/filesystems/disorderfs/default.nix b/pkgs/tools/filesystems/disorderfs/default.nix
index 27dc55fb92630..14106cfd4ba94 100644
--- a/pkgs/tools/filesystems/disorderfs/default.nix
+++ b/pkgs/tools/filesystems/disorderfs/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "An overlay FUSE filesystem that introduces non-determinism into filesystem metadata";
+    mainProgram = "disorderfs";
     license = licenses.gpl3;
     platforms = platforms.linux;
     maintainers = with maintainers; [ pSub ];
diff --git a/pkgs/tools/filesystems/djmount/default.nix b/pkgs/tools/filesystems/djmount/default.nix
index d3a75e420db91..52a89013ced61 100644
--- a/pkgs/tools/filesystems/djmount/default.nix
+++ b/pkgs/tools/filesystems/djmount/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://djmount.sourceforge.net/";
     description = "UPnP AV client, mounts as a Linux filesystem the media content of compatible UPnP AV devices";
+    mainProgram = "djmount";
     platforms = lib.platforms.linux;
     maintainers = [ lib.maintainers.jagajaga ];
     license = lib.licenses.gpl2;
diff --git a/pkgs/tools/filesystems/duff/default.nix b/pkgs/tools/filesystems/duff/default.nix
index f980c76133326..4c6f3caff79a0 100644
--- a/pkgs/tools/filesystems/duff/default.nix
+++ b/pkgs/tools/filesystems/duff/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Quickly find duplicate files";
+    mainProgram = "duff";
     longDescription = ''
       Duff is a Unix command-line utility for quickly finding duplicates in
       a given set of files.
diff --git a/pkgs/tools/filesystems/httpfs/default.nix b/pkgs/tools/filesystems/httpfs/default.nix
index f7a42f192eef2..4cf618826b8fb 100644
--- a/pkgs/tools/filesystems/httpfs/default.nix
+++ b/pkgs/tools/filesystems/httpfs/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "FUSE-based HTTP filesystem for Linux";
+    mainProgram = "httpfs2";
 
     homepage = "https://httpfs.sourceforge.net/";
 
diff --git a/pkgs/tools/games/ajour/default.nix b/pkgs/tools/games/ajour/default.nix
index 0f90a794987e6..7416d4f717ab9 100644
--- a/pkgs/tools/games/ajour/default.nix
+++ b/pkgs/tools/games/ajour/default.nix
@@ -83,6 +83,7 @@ in rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "World of Warcraft addon manager written in Rust";
+    mainProgram = "ajour";
     longDescription = ''
       Ajour is a World of Warcraft addon manager written in Rust with a
       strong focus on performance and simplicity. The project is
diff --git a/pkgs/tools/games/joystickwake/default.nix b/pkgs/tools/games/joystickwake/default.nix
index 9b2012857db25..e321daf2dd8fd 100644
--- a/pkgs/tools/games/joystickwake/default.nix
+++ b/pkgs/tools/games/joystickwake/default.nix
@@ -19,6 +19,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "A joystick-aware screen waker";
+    mainProgram = "joystickwake";
     longDescription = ''
       Linux gamers often find themselves unexpectedly staring at a blank screen, because their display server fails to recognize game controllers as input devices, allowing the screen blanker to activate during gameplay.
       This program works around the problem by temporarily disabling screen blankers when joystick activity is detected.
diff --git a/pkgs/tools/games/minecraft/amidst/default.nix b/pkgs/tools/games/minecraft/amidst/default.nix
index 5e6a79e1cba14..3dae625071068 100644
--- a/pkgs/tools/games/minecraft/amidst/default.nix
+++ b/pkgs/tools/games/minecraft/amidst/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/toolbox4minecraft/amidst";
     description = "Advanced Minecraft Interface and Data/Structure Tracking";
+    mainProgram = "amidst";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.gpl3Only;
     maintainers = [ maintainers.ivar ];
diff --git a/pkgs/tools/games/minecraft/fabric-installer/default.nix b/pkgs/tools/games/minecraft/fabric-installer/default.nix
index 27c70d38a06cf..4a11a08a42e6e 100644
--- a/pkgs/tools/games/minecraft/fabric-installer/default.nix
+++ b/pkgs/tools/games/minecraft/fabric-installer/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://fabricmc.net/";
     description = "A lightweight, experimental modding toolchain for Minecraft";
+    mainProgram = "fabric-installer";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.asl20;
     maintainers = [ maintainers.ivar ];
diff --git a/pkgs/tools/games/minecraft/mcaselector/default.nix b/pkgs/tools/games/minecraft/mcaselector/default.nix
index 395be450f65c5..a2099c4e382e8 100644
--- a/pkgs/tools/games/minecraft/mcaselector/default.nix
+++ b/pkgs/tools/games/minecraft/mcaselector/default.nix
@@ -33,6 +33,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "https://github.com/Querz/mcaselector";
     description = "A tool to select chunks from Minecraft worlds for deletion or export";
+    mainProgram = "mcaselector";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.mit;
     maintainers = [ maintainers.Scrumplex ];
diff --git a/pkgs/tools/games/minecraft/minecraft-server-hibernation/default.nix b/pkgs/tools/games/minecraft/minecraft-server-hibernation/default.nix
index ff0e7873827b9..3837b890632bd 100644
--- a/pkgs/tools/games/minecraft/minecraft-server-hibernation/default.nix
+++ b/pkgs/tools/games/minecraft/minecraft-server-hibernation/default.nix
@@ -29,6 +29,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Autostart and stop minecraft-server when players join/leave";
+    mainProgram = "msh";
     homepage = "https://github.com/gekware/minecraft-server-hibernation";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ squarepear ];
diff --git a/pkgs/tools/games/mymcplus/default.nix b/pkgs/tools/games/mymcplus/default.nix
index 0e5abb1e8994a..c94ef8768c07e 100644
--- a/pkgs/tools/games/mymcplus/default.nix
+++ b/pkgs/tools/games/mymcplus/default.nix
@@ -27,6 +27,7 @@ pythonPackages.buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://git.sr.ht/~thestr4ng3r/mymcplus";
     description = "A PlayStation 2 memory card manager";
+    mainProgram = "mymcplus";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ];
   };
diff --git a/pkgs/tools/games/pokefinder/default.nix b/pkgs/tools/games/pokefinder/default.nix
index 16439309b413a..de53fb839af9a 100644
--- a/pkgs/tools/games/pokefinder/default.nix
+++ b/pkgs/tools/games/pokefinder/default.nix
@@ -66,6 +66,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/Admiral-Fish/PokeFinder";
     description = "Cross platform Pokémon RNG tool";
+    mainProgram = "PokeFinder";
     license = licenses.gpl3Only;
     platforms = platforms.all;
     maintainers = with maintainers; [ leo60228 ];
diff --git a/pkgs/tools/games/steamback/default.nix b/pkgs/tools/games/steamback/default.nix
index 42e5ec3b2ef9f..bb91fa41c618d 100644
--- a/pkgs/tools/games/steamback/default.nix
+++ b/pkgs/tools/games/steamback/default.nix
@@ -58,6 +58,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "A Decky plugin to add versioned save-game snapshots to Steam-cloud enabled games";
+    mainProgram = "steamback";
     homepage = "https://github.com/geeksville/steamback";
     license = licenses.gpl3;
     maintainers = with maintainers; [ AngryAnt ];
diff --git a/pkgs/tools/games/steamtinkerlaunch/default.nix b/pkgs/tools/games/steamtinkerlaunch/default.nix
index 4f37109f54373..f9db253534996 100644
--- a/pkgs/tools/games/steamtinkerlaunch/default.nix
+++ b/pkgs/tools/games/steamtinkerlaunch/default.nix
@@ -53,6 +53,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Linux wrapper tool for use with the Steam client for custom launch options and 3rd party programs";
+    mainProgram = "steamtinkerlaunch";
     homepage = "https://github.com/sonic2kk/steamtinkerlaunch";
     license = licenses.gpl3;
     maintainers = with maintainers; [ urandom ];
diff --git a/pkgs/tools/games/ukmm/default.nix b/pkgs/tools/games/ukmm/default.nix
index 5f2d366e7f9b5..389b7486b8b98 100644
--- a/pkgs/tools/games/ukmm/default.nix
+++ b/pkgs/tools/games/ukmm/default.nix
@@ -71,6 +71,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A new mod manager for The Legend of Zelda: Breath of the Wild";
+    mainProgram = "ukmm";
     homepage = "https://github.com/NiceneNerd/ukmm";
     changelog = "https://github.com/NiceneNerd/ukmm/blob/${src.rev}/CHANGELOG.md";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/graphics/rocket/default.nix b/pkgs/tools/graphics/rocket/default.nix
index 070e359fe1c52..5dcd40b4d5ec7 100644
--- a/pkgs/tools/graphics/rocket/default.nix
+++ b/pkgs/tools/graphics/rocket/default.nix
@@ -23,6 +23,7 @@ mkDerivation {
 
   meta = with lib; {
     description = "A tool for synchronizing music and visuals in demoscene productions";
+    mainProgram = "editor";
     homepage = "https://github.com/rocket/rocket";
     license = licenses.zlib;
     platforms = platforms.linux;
diff --git a/pkgs/tools/inputmethods/emote/default.nix b/pkgs/tools/inputmethods/emote/default.nix
index 8e3d7227d1bd9..6c2e4962a9965 100644
--- a/pkgs/tools/inputmethods/emote/default.nix
+++ b/pkgs/tools/inputmethods/emote/default.nix
@@ -53,6 +53,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Modern emoji picker for Linux";
+    mainProgram = "emote";
     homepage = "https://github.com/tom-james-watson/emote";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ emilytrau SuperSandro2000 ];
diff --git a/pkgs/tools/inputmethods/evdevremapkeys/default.nix b/pkgs/tools/inputmethods/evdevremapkeys/default.nix
index 497a4abc5956e..2dcc169c64449 100644
--- a/pkgs/tools/inputmethods/evdevremapkeys/default.nix
+++ b/pkgs/tools/inputmethods/evdevremapkeys/default.nix
@@ -27,6 +27,7 @@ python3Packages.buildPythonPackage rec {
   meta = with lib; {
     homepage = "https://github.com/philipl/evdevremapkeys";
     description = "Daemon to remap events on linux input devices";
+    mainProgram = "evdevremapkeys";
     license = licenses.mit;
     maintainers = [ maintainers.q3k ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/inputmethods/evscript/default.nix b/pkgs/tools/inputmethods/evscript/default.nix
index d1440bea357fd..1de971b7cea2e 100644
--- a/pkgs/tools/inputmethods/evscript/default.nix
+++ b/pkgs/tools/inputmethods/evscript/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     homepage = "https://codeberg.org/valpackett/evscript";
     description = "A tiny sandboxed Dyon scripting environment for evdev input devices";
+    mainProgram = "evscript";
     license = licenses.unlicense;
     maintainers = with maintainers; [ milesbreslin ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/inputmethods/evsieve/default.nix b/pkgs/tools/inputmethods/evsieve/default.nix
index de18668e74753..c8c6752b823db 100644
--- a/pkgs/tools/inputmethods/evsieve/default.nix
+++ b/pkgs/tools/inputmethods/evsieve/default.nix
@@ -23,6 +23,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A utility for mapping events from Linux event devices";
+    mainProgram = "evsieve";
     homepage = "https://github.com/KarsMulder/evsieve";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ tsowell ];
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix
index 0699f23e3aabe..4aac06dc1aded 100644
--- a/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-chinese-addons.nix
@@ -71,6 +71,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Addons related to Chinese, including IME previous bundled inside fcitx4";
+    mainProgram = "scel2org5";
     homepage = "https://github.com/fcitx/fcitx5-chinese-addons";
     license = with licenses; [ gpl2Plus lgpl21Plus ];
     maintainers = with maintainers; [ poscat ];
diff --git a/pkgs/tools/inputmethods/gebaar-libinput/default.nix b/pkgs/tools/inputmethods/gebaar-libinput/default.nix
index 9a808535fe04f..533d4ddc8ee72 100644
--- a/pkgs/tools/inputmethods/gebaar-libinput/default.nix
+++ b/pkgs/tools/inputmethods/gebaar-libinput/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Gebaar, A Super Simple WM Independent Touchpad Gesture Daemon for libinput";
+    mainProgram = "gebaard";
     homepage = "https://github.com/Coffee2CodeNL/gebaar-libinput";
     license = licenses.gpl3;
     platforms = platforms.linux;
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-cangjie/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-cangjie/default.nix
index 0d7f06039a09c..0e5233ad8b6f7 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-cangjie/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-cangjie/default.nix
@@ -66,6 +66,7 @@ stdenv.mkDerivation {
   meta = {
     isIbusEngine = true;
     description = "An IBus engine for users of the Cangjie and Quick input methods";
+    mainProgram = "ibus-setup-cangjie";
     homepage = "https://github.com/Cangjians/ibus-cangjie";
     license = lib.licenses.gpl3Plus;
     platforms = lib.platforms.linux;
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix
index af3e1edd63996..9c338f71698eb 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-hangul/default.nix
@@ -47,6 +47,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     isIbusEngine = true;
     description = "Ibus Hangul engine";
+    mainProgram = "ibus-setup-hangul";
     homepage = "https://github.com/choehwanjin/ibus-hangul";
     license = licenses.gpl2;
     maintainers = with maintainers; [ ericsagnes ];
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix
index 220c89ca175d9..d0199bdbed4a0 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-mozc/default.nix
@@ -78,6 +78,7 @@ buildBazelPackage rec {
   meta = with lib; {
     isIbusEngine = true;
     description = "Japanese input method from Google";
+    mainProgram = "mozc_emacs_helper";
     homepage = "https://github.com/google/mozc";
     license = licenses.free;
     platforms = platforms.linux;
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix
index c5f02f4c8a227..7b277e76ecb50 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-table/default.nix
@@ -59,6 +59,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     isIbusEngine = true;
     description  = "An IBus framework for table-based input methods";
+    mainProgram = "ibus-table-createdb";
     homepage     = "https://github.com/kaio/ibus-table/wiki";
     license      = licenses.lgpl21;
     platforms    = platforms.linux;
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix
index 47262be28d5c0..7f1131f092b88 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-typing-booster/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
     homepage = "https://mike-fabian.github.io/ibus-typing-booster/";
     license = licenses.gpl3Plus;
     description = "A completion input method for faster typing";
+    mainProgram = "emoji-picker";
     maintainers = with maintainers; [ ncfavier ];
     isIbusEngine = true;
   };
diff --git a/pkgs/tools/inputmethods/interception-tools/caps2esc.nix b/pkgs/tools/inputmethods/interception-tools/caps2esc.nix
index 933a731828fb0..ef8c4b17baf17 100644
--- a/pkgs/tools/inputmethods/interception-tools/caps2esc.nix
+++ b/pkgs/tools/inputmethods/interception-tools/caps2esc.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://gitlab.com/interception/linux/plugins/caps2esc";
     description = "Transforming the most useless key ever into the most useful one";
+    mainProgram = "caps2esc";
     license = licenses.mit;
     maintainers = [ maintainers.vyp ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/inputmethods/keyfuzz/default.nix b/pkgs/tools/inputmethods/keyfuzz/default.nix
index 8980abba2f628..f92993cfe7547 100644
--- a/pkgs/tools/inputmethods/keyfuzz/default.nix
+++ b/pkgs/tools/inputmethods/keyfuzz/default.nix
@@ -6,6 +6,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Manipulate the scancode/keycode translation tables of keyboard drivers";
+    mainProgram = "keyfuzz";
     homepage    = "http://0pointer.de/lennart/projects/keyfuzz/";
     license     = licenses.gpl2Plus;
     platforms   = platforms.linux;
diff --git a/pkgs/tools/inputmethods/libinput-gestures/default.nix b/pkgs/tools/inputmethods/libinput-gestures/default.nix
index b9384469e9630..bb466e38ba53a 100644
--- a/pkgs/tools/inputmethods/libinput-gestures/default.nix
+++ b/pkgs/tools/inputmethods/libinput-gestures/default.nix
@@ -48,6 +48,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/bulletmark/libinput-gestures";
     description = "Gesture mapper for libinput";
+    mainProgram = "libinput-gestures";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ teozkr ];
diff --git a/pkgs/tools/inputmethods/lisgd/default.nix b/pkgs/tools/inputmethods/lisgd/default.nix
index dd57f61de9d62..23e677144945a 100644
--- a/pkgs/tools/inputmethods/lisgd/default.nix
+++ b/pkgs/tools/inputmethods/lisgd/default.nix
@@ -43,6 +43,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Bind gestures via libinput touch events";
+    mainProgram = "lisgd";
     homepage = "https://git.sr.ht/~mil/lisgd";
     license = licenses.mit;
     platforms = platforms.linux;
diff --git a/pkgs/tools/inputmethods/m17n-db/default.nix b/pkgs/tools/inputmethods/m17n-db/default.nix
index dc0ed25a3efe0..558d59d0ca94d 100644
--- a/pkgs/tools/inputmethods/m17n-db/default.nix
+++ b/pkgs/tools/inputmethods/m17n-db/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://www.nongnu.org/m17n/";
     description = "Multilingual text processing library (database)";
+    mainProgram = "m17n-db";
     changelog = "https://git.savannah.nongnu.org/cgit/m17n/m17n-db.git/plain/NEWS?h=REL-${lib.replaceStrings [ "." ] [ "-" ] version}";
     license = lib.licenses.lgpl21Plus;
     platforms = lib.platforms.linux;
diff --git a/pkgs/tools/inputmethods/nabi/default.nix b/pkgs/tools/inputmethods/nabi/default.nix
index 72f13d4eb2dc8..61a948529f4db 100644
--- a/pkgs/tools/inputmethods/nabi/default.nix
+++ b/pkgs/tools/inputmethods/nabi/default.nix
@@ -14,6 +14,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "The Easy Hangul XIM";
+    mainProgram = "nabi";
     homepage = "https://github.com/choehwanjin/nabi";
     license = licenses.gpl2;
     maintainers = [ maintainers.ianwookim ];
diff --git a/pkgs/tools/inputmethods/remote-touchpad/default.nix b/pkgs/tools/inputmethods/remote-touchpad/default.nix
index eef3ddfe835ad..88c6db4842efd 100644
--- a/pkgs/tools/inputmethods/remote-touchpad/default.nix
+++ b/pkgs/tools/inputmethods/remote-touchpad/default.nix
@@ -25,6 +25,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Control mouse and keyboard from the web browser of a smartphone";
+    mainProgram = "remote-touchpad";
     homepage = "https://github.com/unrud/remote-touchpad";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ schnusch ];
diff --git a/pkgs/tools/inputmethods/touchegg/default.nix b/pkgs/tools/inputmethods/touchegg/default.nix
index de30b853670a0..32a1b059f2c59 100644
--- a/pkgs/tools/inputmethods/touchegg/default.nix
+++ b/pkgs/tools/inputmethods/touchegg/default.nix
@@ -74,6 +74,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/JoseExposito/touchegg";
     description = "Linux multi-touch gesture recognizer";
+    mainProgram = "touchegg";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
     maintainers = teams.pantheon.members;
diff --git a/pkgs/tools/inputmethods/xlibinput_calibrator/default.nix b/pkgs/tools/inputmethods/xlibinput_calibrator/default.nix
index 2b6585c92513c..3d5faba1c63c2 100644
--- a/pkgs/tools/inputmethods/xlibinput_calibrator/default.nix
+++ b/pkgs/tools/inputmethods/xlibinput_calibrator/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Touch calibrator for libinput";
+    mainProgram = "xlibinput_calibrator";
     homepage = "https://github.com/kreijack/xlibinput_calibrator";
     changelog = "https://github.com/kreijack/xlibinput_calibrator/blob/${src.rev}/Changelog";
     license = with licenses; [ mit ];
diff --git a/pkgs/tools/misc/0x/default.nix b/pkgs/tools/misc/0x/default.nix
index b76c13e662873..2f1493d23452e 100644
--- a/pkgs/tools/misc/0x/default.nix
+++ b/pkgs/tools/misc/0x/default.nix
@@ -25,6 +25,7 @@ rustPlatform.buildRustPackage {
   meta = with lib; {
     homepage = "https://github.com/mcy/0x";
     description = "A colorful, configurable xxd";
+    mainProgram = "0x";
     license = licenses.asl20;
     maintainers = with maintainers; [ AndersonTorres ];
   };
diff --git a/pkgs/tools/misc/3mux/default.nix b/pkgs/tools/misc/3mux/default.nix
index 9ec4572328e7e..0a16b853943d9 100644
--- a/pkgs/tools/misc/3mux/default.nix
+++ b/pkgs/tools/misc/3mux/default.nix
@@ -46,6 +46,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Terminal multiplexer inspired by i3";
+    mainProgram = "3mux";
     longDescription = ''
       Terminal multiplexer with out-of-the-box support for search,
       mouse-controlled scrollback, and i3-like keybindings
diff --git a/pkgs/tools/misc/autojump/default.nix b/pkgs/tools/misc/autojump/default.nix
index e1bb2f0841108..977e339d7ef55 100644
--- a/pkgs/tools/misc/autojump/default.nix
+++ b/pkgs/tools/misc/autojump/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A `cd' command that learns";
+    mainProgram = "autojump";
     longDescription = ''
       One of the most used shell commands is “cd”.  A quick survey
       among my friends revealed that between 10 and 20% of all
diff --git a/pkgs/tools/misc/domine/default.nix b/pkgs/tools/misc/domine/default.nix
index 3d193ba2a06f7..a85275acab0e8 100644
--- a/pkgs/tools/misc/domine/default.nix
+++ b/pkgs/tools/misc/domine/default.nix
@@ -12,4 +12,5 @@ buildDartApplication rec {
   };
 
   pubspecLock = lib.importJSON ./pubspec.lock.json;
+  meta.mainProgram = "domine";
 }
diff --git a/pkgs/tools/misc/eludris/default.nix b/pkgs/tools/misc/eludris/default.nix
index ac3ecc2e5a6cb..e3fc67fcacb0e 100644
--- a/pkgs/tools/misc/eludris/default.nix
+++ b/pkgs/tools/misc/eludris/default.nix
@@ -27,6 +27,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A simple CLI to help you with setting up and managing your Eludris instance";
+    mainProgram = "eludris";
     homepage = "https://github.com/eludris/eludris/tree/main/cli";
     license = licenses.mit;
     maintainers = with maintainers; [ ooliver1 ];
diff --git a/pkgs/tools/misc/fclones/gui.nix b/pkgs/tools/misc/fclones/gui.nix
index 7b2d063d45b73..8dff1eec4928b 100644
--- a/pkgs/tools/misc/fclones/gui.nix
+++ b/pkgs/tools/misc/fclones/gui.nix
@@ -47,6 +47,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Interactive duplicate file remover";
+    mainProgram = "fclones-gui";
     homepage = "https://github.com/pkolaczk/fclones-gui";
     changelog = "https://github.com/pkolaczk/fclones-gui/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/pkgs/tools/misc/gosu/default.nix b/pkgs/tools/misc/gosu/default.nix
index bd3ba4c930d7e..8b5a5fb88d333 100644
--- a/pkgs/tools/misc/gosu/default.nix
+++ b/pkgs/tools/misc/gosu/default.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool that avoids TTY and signal-forwarding behavior of sudo and su";
+    mainProgram = "gosu";
     homepage = "https://github.com/tianon/gosu";
     license = licenses.asl20;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/tools/misc/i3minator/default.nix b/pkgs/tools/misc/i3minator/default.nix
index 4db029ef8fa2c..d56ee6eadc7ad 100644
--- a/pkgs/tools/misc/i3minator/default.nix
+++ b/pkgs/tools/misc/i3minator/default.nix
@@ -20,6 +20,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "i3 project manager similar to tmuxinator";
+    mainProgram = "i3minator";
     longDescription = ''
       A simple "workspace manager" for i3. It allows to quickly
       manage workspaces defining windows and their layout. The
diff --git a/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix b/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
index 48c8e9a4f7213..5f56291f26f7b 100644
--- a/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
+++ b/pkgs/tools/misc/libbitcoin/libbitcoin-explorer.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Bitcoin command line tool";
+    mainProgram = "bx";
     homepage = "https://github.com/libbitcoin/libbitcoin-explorer";
     platforms = platforms.linux ++ platforms.darwin;
     maintainers = with maintainers; [ asymmetric ];
diff --git a/pkgs/tools/misc/linux-logo/default.nix b/pkgs/tools/misc/linux-logo/default.nix
index ad7dd7227a900..5b12f75b72973 100644
--- a/pkgs/tools/misc/linux-logo/default.nix
+++ b/pkgs/tools/misc/linux-logo/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Prints an ASCII logo and some system info";
+    mainProgram = "linux_logo";
     homepage = "http://www.deater.net/weave/vmwprod/linux_logo";
     changelog = "https://github.com/deater/linux_logo/blob/${src.rev}/CHANGES";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/misc/map/default.nix b/pkgs/tools/misc/map/default.nix
index b6049904dc62f..6416e12e9c195 100644
--- a/pkgs/tools/misc/map/default.nix
+++ b/pkgs/tools/misc/map/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Map lines from stdin to commands";
+    mainProgram = "map";
     homepage = "https://github.com/soveran/map";
     license = licenses.bsd2;
     maintainers = with maintainers; [ pogobanane ];
diff --git a/pkgs/tools/misc/plantuml/plantuml-c4.nix b/pkgs/tools/misc/plantuml/plantuml-c4.nix
index 2829d0a31eabc..77cfa82e894fc 100644
--- a/pkgs/tools/misc/plantuml/plantuml-c4.nix
+++ b/pkgs/tools/misc/plantuml/plantuml-c4.nix
@@ -65,6 +65,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "PlantUML bundled with C4-Plantuml and plantuml sprites library";
+    mainProgram = "plantuml";
     homepage = "https://github.com/plantuml-stdlib/C4-PlantUML";
     license = licenses.mit;
     maintainers = with maintainers; [ tfc ];
diff --git a/pkgs/tools/misc/pubs/default.nix b/pkgs/tools/misc/pubs/default.nix
index b02aeb8aefb6a..1dcd011f0aced 100644
--- a/pkgs/tools/misc/pubs/default.nix
+++ b/pkgs/tools/misc/pubs/default.nix
@@ -72,6 +72,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Command-line bibliography manager";
+    mainProgram = "pubs";
     homepage = "https://github.com/pubs/pubs";
     changelog = "https://github.com/pubs/pubs/blob/v${version}/changelog.md";
     license = licenses.lgpl3Only;
diff --git a/pkgs/tools/misc/qrscan/default.nix b/pkgs/tools/misc/qrscan/default.nix
index 6ac80bb7f746d..1ad4c526e7528 100644
--- a/pkgs/tools/misc/qrscan/default.nix
+++ b/pkgs/tools/misc/qrscan/default.nix
@@ -30,6 +30,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Scan a QR code in the terminal using the system camera or a given image";
+    mainProgram = "qrscan";
     homepage = "https://github.com/sayanarijit/qrscan";
     license = licenses.mit;
     broken = stdenv.isDarwin;
diff --git a/pkgs/tools/misc/r3ctl/default.nix b/pkgs/tools/misc/r3ctl/default.nix
index f76f704fc2a78..8af95a4630cf6 100644
--- a/pkgs/tools/misc/r3ctl/default.nix
+++ b/pkgs/tools/misc/r3ctl/default.nix
@@ -40,6 +40,7 @@ qt5.mkDerivation {
 
   meta = with lib; {
     description = "A cmdline tool to control the r3 hackerspace lights";
+    mainProgram = "r3ctl";
     homepage = "https://github.com/0xfeedc0de64/r3ctl";
     maintainers = with maintainers; [ mkg20001 ];
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/misc/riemann-c-client/default.nix b/pkgs/tools/misc/riemann-c-client/default.nix
index 7c744935064f6..9ce23873aa270 100644
--- a/pkgs/tools/misc/riemann-c-client/default.nix
+++ b/pkgs/tools/misc/riemann-c-client/default.nix
@@ -36,6 +36,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://git.madhouse-project.org/algernon/riemann-c-client";
     description = "A C client library for the Riemann monitoring system";
+    mainProgram = "riemann-client";
     license = licenses.lgpl3Plus;
     maintainers = with maintainers; [ pradeepchhetri ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/misc/tkman/default.nix b/pkgs/tools/misc/tkman/default.nix
index 4df680fb6b8cf..c51c3564fef8a 100644
--- a/pkgs/tools/misc/tkman/default.nix
+++ b/pkgs/tools/misc/tkman/default.nix
@@ -67,6 +67,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Graphical, hypertext manual page and Texinfo browser for UNIX";
+    mainProgram = "tkman";
     longDescription = ''
       TkMan is a graphical, hypertext manual page and Texinfo browser for UNIX.
       TkMan boasts hypertext links, unmatched online text formatting and display
diff --git a/pkgs/tools/misc/ttfautohint/default.nix b/pkgs/tools/misc/ttfautohint/default.nix
index 9d2036b97f783..14572d12a781d 100644
--- a/pkgs/tools/misc/ttfautohint/default.nix
+++ b/pkgs/tools/misc/ttfautohint/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "An automatic hinter for TrueType fonts";
+    mainProgram = "ttfautohint";
     longDescription = ''
       A library and two programs which take a TrueType font as the
       input, remove its bytecode instructions (if any), and return a
diff --git a/pkgs/tools/misc/turbo/default.nix b/pkgs/tools/misc/turbo/default.nix
index c891ad5d0da2a..05d2f7d1a0f66 100644
--- a/pkgs/tools/misc/turbo/default.nix
+++ b/pkgs/tools/misc/turbo/default.nix
@@ -62,6 +62,7 @@ rustPlatform.buildRustPackage rec{
 
   meta = with lib; {
     description = "High-performance build system for JavaScript and TypeScript codebases";
+    mainProgram = "turbo";
     homepage = "https://turbo.build/";
     maintainers = with maintainers; [ dlip ];
     license = licenses.mpl20;
diff --git a/pkgs/tools/misc/upower-notify/default.nix b/pkgs/tools/misc/upower-notify/default.nix
index c46ad10a40af0..8033a91ecf51a 100644
--- a/pkgs/tools/misc/upower-notify/default.nix
+++ b/pkgs/tools/misc/upower-notify/default.nix
@@ -23,6 +23,7 @@ buildGoPackage rec {
 
   meta = with lib; {
     description = "simple tool to give you Desktop Notifications about your battery";
+    mainProgram = "upower-notify";
     homepage = "https://github.com/omeid/upower-notify";
     maintainers = with maintainers; [ kamilchm ];
   };
diff --git a/pkgs/tools/misc/wacomtablet/default.nix b/pkgs/tools/misc/wacomtablet/default.nix
index 5ff2800496a73..f10ccd698cb99 100644
--- a/pkgs/tools/misc/wacomtablet/default.nix
+++ b/pkgs/tools/misc/wacomtablet/default.nix
@@ -24,6 +24,7 @@ mkDerivation rec {
 
   meta = {
     description = "KDE Configuration Module for Wacom Graphics Tablets";
+    mainProgram = "kde_wacom_tabletfinder";
     longDescription = ''
       This module implements a GUI for the Wacom Linux Drivers and extends it
       with profile support to handle different button / pen layouts per profile.
diff --git a/pkgs/tools/misc/wv2/default.nix b/pkgs/tools/misc/wv2/default.nix
index d570014494042..14420c1c39081 100644
--- a/pkgs/tools/misc/wv2/default.nix
+++ b/pkgs/tools/misc/wv2/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Excellent MS Word filter lib, used in most Office suites";
+    mainProgram = "wv2-config";
     license = lib.licenses.lgpl2;
     homepage = "https://wvware.sourceforge.net";
   };
diff --git a/pkgs/tools/networking/6tunnel/default.nix b/pkgs/tools/networking/6tunnel/default.nix
index fbdd23f754ef9..50259f827321f 100644
--- a/pkgs/tools/networking/6tunnel/default.nix
+++ b/pkgs/tools/networking/6tunnel/default.nix
@@ -15,6 +15,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Tunnelling for application that don't speak IPv6";
+    mainProgram = "6tunnel";
     homepage = "https://github.com/wojtekka/6tunnel";
     license = licenses.gpl2;
     maintainers = with maintainers; [ Br1ght0ne ];
diff --git a/pkgs/tools/networking/airgeddon/default.nix b/pkgs/tools/networking/airgeddon/default.nix
index cba25cae74f01..2bfe38203e8ad 100644
--- a/pkgs/tools/networking/airgeddon/default.nix
+++ b/pkgs/tools/networking/airgeddon/default.nix
@@ -158,6 +158,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Multi-use TUI to audit wireless networks";
+    mainProgram = "airgeddon";
     homepage = "https://github.com/v1s1t0r1sh3r3/airgeddon";
     changelog = "https://github.com/v1s1t0r1sh3r3/airgeddon/blob/v${version}/CHANGELOG.md";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/networking/bwm-ng/default.nix b/pkgs/tools/networking/bwm-ng/default.nix
index cfe0d4176a6f6..e594e1bae7784 100644
--- a/pkgs/tools/networking/bwm-ng/default.nix
+++ b/pkgs/tools/networking/bwm-ng/default.nix
@@ -36,6 +36,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A small and simple console-based live network and disk io bandwidth monitor";
+    mainProgram = "bwm-ng";
     homepage = "http://www.gropp.org/?id=projects&sub=bwm-ng";
     license = licenses.gpl2Plus;
     platforms = platforms.unix;
diff --git a/pkgs/tools/networking/cantoolz/default.nix b/pkgs/tools/networking/cantoolz/default.nix
index 1f9308b741b4b..9da4923400071 100644
--- a/pkgs/tools/networking/cantoolz/default.nix
+++ b/pkgs/tools/networking/cantoolz/default.nix
@@ -52,6 +52,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Black-box CAN network analysis framework";
+    mainProgram = "cantoolz";
     longDescription = ''
       CANToolz is a framework for analysing CAN networks and devices. It
       provides multiple modules that can be chained using CANToolz's pipe
diff --git a/pkgs/tools/networking/carddav-util/default.nix b/pkgs/tools/networking/carddav-util/default.nix
index e788de13df810..76e1b2656628d 100644
--- a/pkgs/tools/networking/carddav-util/default.nix
+++ b/pkgs/tools/networking/carddav-util/default.nix
@@ -37,6 +37,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://github.com/ljanyst/carddav-util";
     description = "A CardDAV import/export utility";
+    mainProgram = "carddav-util.py";
     platforms = platforms.unix;
     license = licenses.isc;
   };
diff --git a/pkgs/tools/networking/cloud-custodian/default.nix b/pkgs/tools/networking/cloud-custodian/default.nix
index c5e1f7527dac7..01e9d9a857221 100644
--- a/pkgs/tools/networking/cloud-custodian/default.nix
+++ b/pkgs/tools/networking/cloud-custodian/default.nix
@@ -41,6 +41,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Rules engine for cloud security, cost optimization, and governance";
+    mainProgram = "custodian";
     homepage = "https://cloudcustodian.io";
     license = licenses.asl20;
     maintainers = with maintainers; [ bhipple ];
diff --git a/pkgs/tools/networking/cmst/default.nix b/pkgs/tools/networking/cmst/default.nix
index e86ffeed95761..fd484798677c3 100644
--- a/pkgs/tools/networking/cmst/default.nix
+++ b/pkgs/tools/networking/cmst/default.nix
@@ -27,6 +27,7 @@ mkDerivation rec {
 
   meta = with lib; {
     description = "QT GUI for Connman with system tray icon";
+    mainProgram = "cmst";
     homepage = "https://github.com/andrew-bibb/cmst";
     maintainers = with maintainers; [ matejc romildo ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/dd-agent/datadog-process-agent.nix b/pkgs/tools/networking/dd-agent/datadog-process-agent.nix
index 4d1334505f32b..45088be9e29b5 100644
--- a/pkgs/tools/networking/dd-agent/datadog-process-agent.nix
+++ b/pkgs/tools/networking/dd-agent/datadog-process-agent.nix
@@ -4,6 +4,7 @@ datadog-agent.overrideAttrs (attrs: {
   meta = with lib;
     attrs.meta // {
       description = "Live process collector for the DataDog Agent v7";
+      mainProgram = "process-agent";
       maintainers = with maintainers; [ domenkozar ];
     };
   subPackages = [ "cmd/process-agent" ];
diff --git a/pkgs/tools/networking/decode-spam-headers/default.nix b/pkgs/tools/networking/decode-spam-headers/default.nix
index 8f18658b52c52..0294a45be78bd 100644
--- a/pkgs/tools/networking/decode-spam-headers/default.nix
+++ b/pkgs/tools/networking/decode-spam-headers/default.nix
@@ -37,6 +37,7 @@ python3Packages.buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/mgeeky/decode-spam-headers/";
     description = "A script that helps you understand why your E-Mail ended up in Spam";
+    mainProgram = "decode-spam-headers";
     longDescription = ''
       Whether you are trying to understand why a specific e-mail ended up in
       SPAM/Junk for your daily Administrative duties or for your Red-Team
diff --git a/pkgs/tools/networking/discord-sh/default.nix b/pkgs/tools/networking/discord-sh/default.nix
index 50e84034428d0..cb6821ab4bc88 100644
--- a/pkgs/tools/networking/discord-sh/default.nix
+++ b/pkgs/tools/networking/discord-sh/default.nix
@@ -42,6 +42,7 @@ stdenvNoCC.mkDerivation rec {
 
   meta = with lib; {
     description = "Write-only command-line Discord webhook integration written in 100% Bash script";
+    mainProgram = "discord.sh";
     homepage = "https://github.com/ChaoticWeg/discord.sh";
     license = licenses.gpl3;
     platforms = platforms.unix;
diff --git a/pkgs/tools/networking/dnschef/default.nix b/pkgs/tools/networking/dnschef/default.nix
index 5dbb8980f063a..2907a0f578e5a 100644
--- a/pkgs/tools/networking/dnschef/default.nix
+++ b/pkgs/tools/networking/dnschef/default.nix
@@ -21,6 +21,7 @@ buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/iphelix/dnschef";
     description = "Highly configurable DNS proxy for penetration testers and malware analysts";
+    mainProgram = "dnschef";
     license = licenses.bsd3;
     maintainers = [ maintainers.gfrascadorio ];
   };
diff --git a/pkgs/tools/networking/dnstwist/default.nix b/pkgs/tools/networking/dnstwist/default.nix
index 1d075a75de249..9165c550eaecb 100644
--- a/pkgs/tools/networking/dnstwist/default.nix
+++ b/pkgs/tools/networking/dnstwist/default.nix
@@ -37,6 +37,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Domain name permutation engine for detecting homograph phishing attacks";
+    mainProgram = "dnstwist";
     homepage = "https://github.com/elceef/dnstwist";
     changelog = "https://github.com/elceef/dnstwist/releases/tag/${version}";
     license = with licenses; [ gpl3Only ];
diff --git a/pkgs/tools/networking/dnsviz/default.nix b/pkgs/tools/networking/dnsviz/default.nix
index aebf7e3cd14fd..b275734f8889a 100644
--- a/pkgs/tools/networking/dnsviz/default.nix
+++ b/pkgs/tools/networking/dnsviz/default.nix
@@ -39,6 +39,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool suite for analyzing and visualizing DNS and DNSSEC behavior";
+    mainProgram = "dnsviz";
     longDescription = ''
       DNSViz is a tool suite for analysis and visualization of Domain Name System (DNS) behavior,
       including its security extensions (DNSSEC).
diff --git a/pkgs/tools/networking/evillimiter/default.nix b/pkgs/tools/networking/evillimiter/default.nix
index 20cc10728d609..a96151a3355f4 100644
--- a/pkgs/tools/networking/evillimiter/default.nix
+++ b/pkgs/tools/networking/evillimiter/default.nix
@@ -40,6 +40,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool that monitors, analyzes and limits the bandwidth";
+    mainProgram = "evillimiter";
     longDescription = ''
       A tool to monitor, analyze and limit the bandwidth (upload/download) of
       devices on your local network without physical or administrative access.
diff --git a/pkgs/tools/networking/flannel/plugin.nix b/pkgs/tools/networking/flannel/plugin.nix
index db8b89fa0bfef..0ff8e600ff44f 100644
--- a/pkgs/tools/networking/flannel/plugin.nix
+++ b/pkgs/tools/networking/flannel/plugin.nix
@@ -35,6 +35,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "flannel CNI plugin";
+    mainProgram = "flannel";
     homepage = "https://github.com/flannel-io/cni-plugin/";
     license = licenses.asl20;
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/gandi-cli/default.nix b/pkgs/tools/networking/gandi-cli/default.nix
index d7394ac94d881..8f703320f253b 100644
--- a/pkgs/tools/networking/gandi-cli/default.nix
+++ b/pkgs/tools/networking/gandi-cli/default.nix
@@ -31,6 +31,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Command-line interface to the public Gandi.net API";
+    mainProgram = "gandi";
     homepage = "https://cli.gandi.net/";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/tools/networking/gmrender-resurrect/default.nix b/pkgs/tools/networking/gmrender-resurrect/default.nix
index 70ad352a6aad7..70c07b4eac9bf 100644
--- a/pkgs/tools/networking/gmrender-resurrect/default.nix
+++ b/pkgs/tools/networking/gmrender-resurrect/default.nix
@@ -28,6 +28,7 @@ in
 
     meta = with lib; {
       description = "Resource efficient UPnP/DLNA renderer, optimal for Raspberry Pi, CuBox or a general MediaServer";
+      mainProgram = "gmediarender";
       homepage = "https://github.com/hzeller/gmrender-resurrect";
       license = licenses.gpl2Plus;
       platforms = platforms.linux;
diff --git a/pkgs/tools/networking/gnirehtet/default.nix b/pkgs/tools/networking/gnirehtet/default.nix
index be511c7565873..2281822d2e778 100644
--- a/pkgs/tools/networking/gnirehtet/default.nix
+++ b/pkgs/tools/networking/gnirehtet/default.nix
@@ -49,6 +49,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Reverse tethering over adb for Android";
+    mainProgram = "gnirehtet";
     longDescription = ''
       This project provides reverse tethering over adb for Android: it allows devices to use the internet connection of the computer they are plugged on. It does not require any root access (neither on the device nor on the computer).
 
diff --git a/pkgs/tools/networking/gp-saml-gui/default.nix b/pkgs/tools/networking/gp-saml-gui/default.nix
index 8a7ad11a2fe79..348d47b667f66 100644
--- a/pkgs/tools/networking/gp-saml-gui/default.nix
+++ b/pkgs/tools/networking/gp-saml-gui/default.nix
@@ -39,6 +39,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "Interactively authenticate to GlobalProtect VPNs that require SAML";
+    mainProgram = "gp-saml-gui";
     homepage = "https://github.com/dlenski/gp-saml-gui";
     license = licenses.gpl3Only;
     maintainers = [ maintainers.pallix ];
diff --git a/pkgs/tools/networking/haguichi/default.nix b/pkgs/tools/networking/haguichi/default.nix
index fd228c141b5d3..a921884dda064 100644
--- a/pkgs/tools/networking/haguichi/default.nix
+++ b/pkgs/tools/networking/haguichi/default.nix
@@ -48,6 +48,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Graphical frontend for Hamachi on Linux";
+    mainProgram = "haguichi";
     homepage = "https://haguichi.net/";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/hblock/default.nix b/pkgs/tools/networking/hblock/default.nix
index 19e7dde77c85a..6615c27fe6298 100644
--- a/pkgs/tools/networking/hblock/default.nix
+++ b/pkgs/tools/networking/hblock/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Improve your security and privacy by blocking ads, tracking and malware domains";
+    mainProgram = "hblock";
     homepage = "https://github.com/hectorm/hblock";
     license = licenses.mit;
     maintainers = with maintainers; [ alanpearce ];
diff --git a/pkgs/tools/networking/http-prompt/default.nix b/pkgs/tools/networking/http-prompt/default.nix
index 8fce232cdb172..02bb42800abf3 100644
--- a/pkgs/tools/networking/http-prompt/default.nix
+++ b/pkgs/tools/networking/http-prompt/default.nix
@@ -27,6 +27,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "An interactive command-line HTTP client featuring autocomplete and syntax highlighting";
+    mainProgram = "http-prompt";
     homepage = "https://github.com/eliangcs/http-prompt";
     license = licenses.mit;
     maintainers = with maintainers; [ matthiasbeyer ];
diff --git a/pkgs/tools/networking/httplz/default.nix b/pkgs/tools/networking/httplz/default.nix
index 2a0f665f863ae..c85c763635d30 100644
--- a/pkgs/tools/networking/httplz/default.nix
+++ b/pkgs/tools/networking/httplz/default.nix
@@ -45,6 +45,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A basic http server for hosting a folder fast and simply";
+    mainProgram = "httplz";
     homepage = "https://github.com/thecoshman/http";
     changelog = "https://github.com/thecoshman/http/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/networking/httpstat/default.nix b/pkgs/tools/networking/httpstat/default.nix
index be4a8f2a168d4..971c973ada21a 100644
--- a/pkgs/tools/networking/httpstat/default.nix
+++ b/pkgs/tools/networking/httpstat/default.nix
@@ -17,6 +17,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = {
     description = "curl statistics made simple";
+    mainProgram = "httpstat";
     homepage = "https://github.com/reorx/httpstat";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ nequissimus ];
diff --git a/pkgs/tools/networking/ifwifi/default.nix b/pkgs/tools/networking/ifwifi/default.nix
index f04c3369bacf9..8777df72b5e16 100644
--- a/pkgs/tools/networking/ifwifi/default.nix
+++ b/pkgs/tools/networking/ifwifi/default.nix
@@ -31,6 +31,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A simple wrapper over nmcli using wifiscanner made in rust";
+    mainProgram = "ifwifi";
     longDescription = ''
       In the author's words:
 
diff --git a/pkgs/tools/networking/imapsync/default.nix b/pkgs/tools/networking/imapsync/default.nix
index 0fb519ad5af7d..4c2b4a36e064e 100644
--- a/pkgs/tools/networking/imapsync/default.nix
+++ b/pkgs/tools/networking/imapsync/default.nix
@@ -64,6 +64,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Mail folder synchronizer between IMAP servers";
+    mainProgram = "imapsync";
     homepage = "https://imapsync.lamiral.info/";
     license = licenses.nlpl;
     maintainers = with maintainers; [ pSub ];
diff --git a/pkgs/tools/networking/iperf3d/default.nix b/pkgs/tools/networking/iperf3d/default.nix
index 1edcaf86ed2ea..eb1fa052131be 100644
--- a/pkgs/tools/networking/iperf3d/default.nix
+++ b/pkgs/tools/networking/iperf3d/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A iperf3 client and server wrapper for dynamic server ports";
+    mainProgram = "iperf3d";
     homepage = "https://github.com/wobcom/iperf3d";
     license = licenses.mit;
     maintainers = with maintainers; [ netali ] ++ teams.wdz.members;
diff --git a/pkgs/tools/networking/ipfetch/default.nix b/pkgs/tools/networking/ipfetch/default.nix
index f264deaa8a356..38d1e309bc972 100644
--- a/pkgs/tools/networking/ipfetch/default.nix
+++ b/pkgs/tools/networking/ipfetch/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Neofetch but for ip addresses";
+    mainProgram = "ipfetch";
     homepage = "https://github.com/trakBan/ipfetch";
     license = licenses.gpl3Only;
     platforms = platforms.all;
diff --git a/pkgs/tools/networking/ipgrep/default.nix b/pkgs/tools/networking/ipgrep/default.nix
index d1f5316c27b40..04f39f8d28fb4 100644
--- a/pkgs/tools/networking/ipgrep/default.nix
+++ b/pkgs/tools/networking/ipgrep/default.nix
@@ -27,6 +27,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Extract, defang, resolve names and IPs from text";
+    mainProgram = "ipgrep.py";
     longDescription = ''
       ipgrep extracts possibly obfuscated host names and IP addresses
       from text, resolves host names, and prints them, sorted by ASN.
diff --git a/pkgs/tools/networking/linkchecker/default.nix b/pkgs/tools/networking/linkchecker/default.nix
index 018da51f77018..2adf2c8f82d10 100644
--- a/pkgs/tools/networking/linkchecker/default.nix
+++ b/pkgs/tools/networking/linkchecker/default.nix
@@ -54,6 +54,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Check websites for broken links";
+    mainProgram = "linkchecker";
     homepage = "https://linkcheck.github.io/linkchecker/";
     changelog = "https://github.com/linkchecker/linkchecker/releases/tag/v${version}";
     license = licenses.gpl2Plus;
diff --git a/pkgs/tools/networking/moodle-dl/default.nix b/pkgs/tools/networking/moodle-dl/default.nix
index f819fe819284a..76c3e4b1a20a4 100644
--- a/pkgs/tools/networking/moodle-dl/default.nix
+++ b/pkgs/tools/networking/moodle-dl/default.nix
@@ -26,6 +26,7 @@ python3Packages.buildPythonApplication rec {
     homepage = "https://github.com/C0D3D3V/Moodle-Downloader-2";
     maintainers = [ maintainers.kmein ];
     description = "A Moodle downloader that downloads course content fast from Moodle";
+    mainProgram = "moodle-dl";
     license = licenses.gpl3Plus;
   };
 }
diff --git a/pkgs/tools/networking/mozillavpn/default.nix b/pkgs/tools/networking/mozillavpn/default.nix
index 194ac57d2cbfe..4974c873894c3 100644
--- a/pkgs/tools/networking/mozillavpn/default.nix
+++ b/pkgs/tools/networking/mozillavpn/default.nix
@@ -147,6 +147,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Client for the Mozilla VPN service";
+    mainProgram = "mozillavpn";
     homepage = "https://vpn.mozilla.org/";
     license = lib.licenses.mpl20;
     maintainers = with lib.maintainers; [ andersk ];
diff --git a/pkgs/tools/networking/mutt-ics/default.nix b/pkgs/tools/networking/mutt-ics/default.nix
index f56e688b4110a..a8f3ca9d2ae6e 100644
--- a/pkgs/tools/networking/mutt-ics/default.nix
+++ b/pkgs/tools/networking/mutt-ics/default.nix
@@ -15,6 +15,7 @@ with python3.pkgs; buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/dmedvinsky/mutt-ics";
     description = "A tool to show calendar event details in Mutt";
+    mainProgram = "mutt-ics";
     license = licenses.mit;
     maintainers = with maintainers; [ mh182 ];
   };
diff --git a/pkgs/tools/networking/networkd-dispatcher/default.nix b/pkgs/tools/networking/networkd-dispatcher/default.nix
index 8f9cece271690..a2a03d1f84049 100644
--- a/pkgs/tools/networking/networkd-dispatcher/default.nix
+++ b/pkgs/tools/networking/networkd-dispatcher/default.nix
@@ -79,6 +79,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Dispatcher service for systemd-networkd connection status changes";
+    mainProgram = "networkd-dispatcher";
     homepage = "https://gitlab.com/craftyguy/networkd-dispatcher";
     license = licenses.gpl3Only;
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/networkd-notify/default.nix b/pkgs/tools/networking/networkd-notify/default.nix
index b80a7d4509665..8a58b894d9bd2 100644
--- a/pkgs/tools/networking/networkd-notify/default.nix
+++ b/pkgs/tools/networking/networkd-notify/default.nix
@@ -41,6 +41,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Desktop notification integration for systemd-networkd";
+    mainProgram = "networkd-notify";
     homepage = "https://gitlab.com/wavexx/networkd-notify";
     maintainers = with maintainers; [ danc86 ];
     license = licenses.gpl3;
diff --git a/pkgs/tools/networking/networkmanager/dmenu/default.nix b/pkgs/tools/networking/networkmanager/dmenu/default.nix
index d64985adbce20..56c651b68ab23 100644
--- a/pkgs/tools/networking/networkmanager/dmenu/default.nix
+++ b/pkgs/tools/networking/networkmanager/dmenu/default.nix
@@ -36,6 +36,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description  = "Small script to manage NetworkManager connections with dmenu instead of nm-applet";
+    mainProgram = "networkmanager_dmenu";
     homepage     = "https://github.com/firecat53/networkmanager-dmenu";
     license      = lib.licenses.mit;
     maintainers  = [ lib.maintainers.jensbin ];
diff --git a/pkgs/tools/networking/networkmanager/tray.nix b/pkgs/tools/networking/networkmanager/tray.nix
index 69b1e3023b045..01725b1fb381b 100644
--- a/pkgs/tools/networking/networkmanager/tray.nix
+++ b/pkgs/tools/networking/networkmanager/tray.nix
@@ -23,6 +23,7 @@ mkDerivation rec {
 
   meta = with lib; {
     description = "Simple Network Manager frontend written in Qt";
+    mainProgram = "nm-tray";
     homepage = "https://github.com/palinek/nm-tray";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ dtzWill ];
diff --git a/pkgs/tools/networking/nikto/default.nix b/pkgs/tools/networking/nikto/default.nix
index df03cc8c3ce77..098171de09df1 100644
--- a/pkgs/tools/networking/nikto/default.nix
+++ b/pkgs/tools/networking/nikto/default.nix
@@ -57,6 +57,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Web server scanner";
+    mainProgram = "nikto";
     license = licenses.gpl2Plus;
     homepage = "https://cirt.net/Nikto2";
     changelog = "https://github.com/sullo/nikto/releases/tag/${version}";
diff --git a/pkgs/tools/networking/nxdomain/default.nix b/pkgs/tools/networking/nxdomain/default.nix
index a90c7f0c23ae6..2a23230ce778f 100644
--- a/pkgs/tools/networking/nxdomain/default.nix
+++ b/pkgs/tools/networking/nxdomain/default.nix
@@ -22,6 +22,7 @@ buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/zopieux/nxdomain";
     description = "A domain (ad) block list creator";
+    mainProgram = "nxdomain";
     platforms = platforms.all;
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ zopieux ];
diff --git a/pkgs/tools/networking/nyx/default.nix b/pkgs/tools/networking/nyx/default.nix
index 844d692425b99..cb697e0f5e669 100644
--- a/pkgs/tools/networking/nyx/default.nix
+++ b/pkgs/tools/networking/nyx/default.nix
@@ -18,6 +18,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Command-line monitor for Tor";
+    mainProgram = "nyx";
     homepage = "https://nyx.torproject.org/";
     license = licenses.gpl3;
     maintainers = with maintainers; [ offline ];
diff --git a/pkgs/tools/networking/openresolv/default.nix b/pkgs/tools/networking/openresolv/default.nix
index e937c6bcdf60f..956584bfae9ab 100644
--- a/pkgs/tools/networking/openresolv/default.nix
+++ b/pkgs/tools/networking/openresolv/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A program to manage /etc/resolv.conf";
+    mainProgram = "resolvconf";
     homepage = "https://roy.marples.name/projects/openresolv";
     license = lib.licenses.bsd2;
     maintainers = [ lib.maintainers.eelco ];
diff --git a/pkgs/tools/networking/p2p/gtk-gnutella/default.nix b/pkgs/tools/networking/p2p/gtk-gnutella/default.nix
index a9708dd4713c7..53622d30db489 100644
--- a/pkgs/tools/networking/p2p/gtk-gnutella/default.nix
+++ b/pkgs/tools/networking/p2p/gtk-gnutella/default.nix
@@ -58,6 +58,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "A GTK Gnutella client, optimized for speed and scalability";
+    mainProgram = "gtk-gnutella";
     homepage = "https://gtk-gnutella.sourceforge.net/"; # Code: https://github.com/gtk-gnutella/gtk-gnutella
     changelog = "https://raw.githubusercontent.com/gtk-gnutella/gtk-gnutella/v${version}/ChangeLog";
     maintainers = [ maintainers.doronbehar ];
diff --git a/pkgs/tools/networking/p2p/tahoe-lafs/default.nix b/pkgs/tools/networking/p2p/tahoe-lafs/default.nix
index 3d2298e8b70ed..abeabc337a15a 100644
--- a/pkgs/tools/networking/p2p/tahoe-lafs/default.nix
+++ b/pkgs/tools/networking/p2p/tahoe-lafs/default.nix
@@ -89,6 +89,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tahoe-LAFS, a decentralized, fault-tolerant, distributed storage system";
+    mainProgram = "tahoe";
     longDescription = ''
       Tahoe-LAFS is a secure, decentralized, fault-tolerant filesystem.
       This filesystem is encrypted and spread over multiple peers in
diff --git a/pkgs/tools/networking/persepolis/default.nix b/pkgs/tools/networking/persepolis/default.nix
index 35727c13e6940..28d5b113c3363 100644
--- a/pkgs/tools/networking/persepolis/default.nix
+++ b/pkgs/tools/networking/persepolis/default.nix
@@ -84,6 +84,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Persepolis Download Manager is a GUI for aria2";
+    mainProgram = "persepolis";
     homepage = "https://persepolisdm.github.io/";
     license = licenses.gpl3;
     maintainers = with maintainers; [ iFreilicht ];
diff --git a/pkgs/tools/networking/picosnitch/default.nix b/pkgs/tools/networking/picosnitch/default.nix
index 6007d3ec227f0..c874fbf80c1b3 100644
--- a/pkgs/tools/networking/picosnitch/default.nix
+++ b/pkgs/tools/networking/picosnitch/default.nix
@@ -33,6 +33,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Monitor network traffic per executable with hashing";
+    mainProgram = "picosnitch";
     homepage = "https://github.com/elesiuta/picosnitch";
     changelog = "https://github.com/elesiuta/picosnitch/releases";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/networking/pirate-get/default.nix b/pkgs/tools/networking/pirate-get/default.nix
index c1b43a00f52f3..5a28858621b06 100644
--- a/pkgs/tools/networking/pirate-get/default.nix
+++ b/pkgs/tools/networking/pirate-get/default.nix
@@ -15,6 +15,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "A command line interface for The Pirate Bay";
+    mainProgram = "pirate-get";
     homepage = "https://github.com/vikstrous/pirate-get";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ rnhmjoj ];
diff --git a/pkgs/tools/networking/polygon-cli/default.nix b/pkgs/tools/networking/polygon-cli/default.nix
index 75c80bd12b7d6..07bfa97045571 100644
--- a/pkgs/tools/networking/polygon-cli/default.nix
+++ b/pkgs/tools/networking/polygon-cli/default.nix
@@ -25,6 +25,7 @@ python3.pkgs.buildPythonPackage rec {
 
   meta = {
     description = "Command-line tool for polygon.codeforces.com";
+    mainProgram = "polygon-cli";
     homepage = "https://github.com/kunyavskiy/polygon-cli";
     changelog = "https://github.com/kunyavskiy/polygon-cli/releases/tag/${version}";
     license = lib.licenses.mit;
diff --git a/pkgs/tools/networking/s3cmd/default.nix b/pkgs/tools/networking/s3cmd/default.nix
index b07ea24abf9d0..18aed13013553 100644
--- a/pkgs/tools/networking/s3cmd/default.nix
+++ b/pkgs/tools/networking/s3cmd/default.nix
@@ -18,6 +18,7 @@ buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://s3tools.org/s3cmd";
     description = "Command line tool for managing Amazon S3 and CloudFront services";
+    mainProgram = "s3cmd";
     license = licenses.gpl2;
     maintainers = [ ];
   };
diff --git a/pkgs/tools/networking/sockdump/default.nix b/pkgs/tools/networking/sockdump/default.nix
index 95920a91eef35..daedb3a7cbcce 100644
--- a/pkgs/tools/networking/sockdump/default.nix
+++ b/pkgs/tools/networking/sockdump/default.nix
@@ -19,6 +19,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = src.meta // {
     description = "Dump unix domain socket traffic with bpf";
+    mainProgram = "sockdump";
     license = lib.licenses.unlicense;
     maintainers = with lib.maintainers; [ ehmry ];
   };
diff --git a/pkgs/tools/networking/sshoogr/default.nix b/pkgs/tools/networking/sshoogr/default.nix
index e20978c277d90..abd42dcb5aa42 100644
--- a/pkgs/tools/networking/sshoogr/default.nix
+++ b/pkgs/tools/networking/sshoogr/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
     description = ''
       A Groovy-based DSL for working with remote SSH servers
     '';
+    mainProgram = "sshoogr";
     longDescription = ''
       The sshoogr (pronounced [ʃʊgə]) is a Groovy-based DSL library for working
       with remote servers through SSH. The DSL allows: connecting, executing
diff --git a/pkgs/tools/networking/swaks/default.nix b/pkgs/tools/networking/swaks/default.nix
index 471cc74d9d7fc..1ca00b6beaea4 100644
--- a/pkgs/tools/networking/swaks/default.nix
+++ b/pkgs/tools/networking/swaks/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://www.jetmore.org/john/code/swaks/";
     description = "A featureful, flexible, scriptable, transaction-oriented SMTP test tool";
+    mainProgram = "swaks";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [];
     platforms = platforms.all;
diff --git a/pkgs/tools/networking/telepresence/default.nix b/pkgs/tools/networking/telepresence/default.nix
index 4866cfea41ee1..dee55ad5687c4 100644
--- a/pkgs/tools/networking/telepresence/default.nix
+++ b/pkgs/tools/networking/telepresence/default.nix
@@ -38,6 +38,7 @@ in pythonPackages.buildPythonPackage rec {
   meta = {
     homepage = "https://www.telepresence.io/";
     description = "Local development against a remote Kubernetes or OpenShift cluster";
+    mainProgram = "telepresence";
     license = with lib.licenses; [ asl20 ];
     maintainers = with lib.maintainers; [ offline ];
   };
diff --git a/pkgs/tools/networking/termshark/default.nix b/pkgs/tools/networking/termshark/default.nix
index 84dbf7ed3311b..bdca008cc94c2 100644
--- a/pkgs/tools/networking/termshark/default.nix
+++ b/pkgs/tools/networking/termshark/default.nix
@@ -29,6 +29,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://termshark.io/";
     description = "A terminal UI for wireshark-cli, inspired by Wireshark";
+    mainProgram = "termshark";
     license = licenses.mit;
     maintainers = with maintainers; [ winpat ];
   };
diff --git a/pkgs/tools/networking/tinystatus/default.nix b/pkgs/tools/networking/tinystatus/default.nix
index e4e930e799a80..d58d853b5e109 100644
--- a/pkgs/tools/networking/tinystatus/default.nix
+++ b/pkgs/tools/networking/tinystatus/default.nix
@@ -50,6 +50,7 @@ stdenvNoCC.mkDerivation rec {
 
   meta = with lib; {
     description = "A static HTML status page generator written in pure shell";
+    mainProgram = "tinystatus";
     homepage = "https://github.com/bderenzo/tinystatus";
     license = licenses.mit;
     platforms = platforms.unix;
diff --git a/pkgs/tools/networking/tuntox/default.nix b/pkgs/tools/networking/tuntox/default.nix
index 64a13e99669ae..e59a615e26275 100644
--- a/pkgs/tools/networking/tuntox/default.nix
+++ b/pkgs/tools/networking/tuntox/default.nix
@@ -71,6 +71,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Tunnel TCP connections over the Tox protocol";
+    mainProgram = "tuntox";
     homepage = "https://github.com/gjedeer/tuntox";
     license = licenses.gpl3;
     maintainers = with maintainers; [
diff --git a/pkgs/tools/networking/udp2raw/default.nix b/pkgs/tools/networking/udp2raw/default.nix
index b6466ce0be57b..e10db84eb49f8 100644
--- a/pkgs/tools/networking/udp2raw/default.nix
+++ b/pkgs/tools/networking/udp2raw/default.nix
@@ -45,6 +45,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/wangyu-/udp2raw";
     description = "A tunnel which turns UDP traffic into encrypted UDP/FakeTCP/ICMP traffic by using a raw socket";
+    mainProgram = "udp2raw";
     license = licenses.mit;
     changelog = "https://github.com/wangyu-/udp2raw/releases/tag/${version}";
     maintainers = with maintainers; [ chvp ];
diff --git a/pkgs/tools/networking/uget-integrator/default.nix b/pkgs/tools/networking/uget-integrator/default.nix
index 2d069ea07f02c..3ab9a0bafef4d 100644
--- a/pkgs/tools/networking/uget-integrator/default.nix
+++ b/pkgs/tools/networking/uget-integrator/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Native messaging host to integrate uGet Download Manager with web browsers";
+    mainProgram = "uget-integrator";
     homepage = "https://github.com/ugetdm/uget-integrator";
     license = licenses.gpl3;
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/updog/default.nix b/pkgs/tools/networking/updog/default.nix
index 7fb8e0bfec374..c5cccac026ba8 100644
--- a/pkgs/tools/networking/updog/default.nix
+++ b/pkgs/tools/networking/updog/default.nix
@@ -19,6 +19,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Updog is a replacement for Python's SimpleHTTPServer";
+    mainProgram = "updog";
     homepage = "https://github.com/sc0tfree/updog";
     license = licenses.mit;
     maintainers = with maintainers; [ ethancedwards8 ];
diff --git a/pkgs/tools/networking/urlwatch/default.nix b/pkgs/tools/networking/urlwatch/default.nix
index 36ad0ba77ce75..0335ed765479d 100644
--- a/pkgs/tools/networking/urlwatch/default.nix
+++ b/pkgs/tools/networking/urlwatch/default.nix
@@ -46,6 +46,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "A tool for monitoring webpages for updates";
+    mainProgram = "urlwatch";
     homepage = "https://thp.io/2008/urlwatch/";
     license = licenses.bsd3;
     maintainers = with maintainers; [ kmein tv ];
diff --git a/pkgs/tools/networking/v2ray/default.nix b/pkgs/tools/networking/v2ray/default.nix
index aa398dfcb9f3a..a578056256115 100644
--- a/pkgs/tools/networking/v2ray/default.nix
+++ b/pkgs/tools/networking/v2ray/default.nix
@@ -55,6 +55,7 @@ buildGoModule rec {
   meta = {
     homepage = "https://www.v2fly.org/en_US/";
     description = "A platform for building proxies to bypass network restrictions";
+    mainProgram = "v2ray";
     license = with lib.licenses; [ mit ];
     maintainers = with lib.maintainers; [ servalcatty ];
   };
diff --git a/pkgs/tools/networking/vpn-slice/default.nix b/pkgs/tools/networking/vpn-slice/default.nix
index 75cfe2bba0e94..0cde0170b78f7 100644
--- a/pkgs/tools/networking/vpn-slice/default.nix
+++ b/pkgs/tools/networking/vpn-slice/default.nix
@@ -41,6 +41,7 @@ buildPythonApplication rec {
     homepage = "https://github.com/dlenski/vpn-slice";
     description =
       "vpnc-script replacement for easy and secure split-tunnel VPN setup";
+    mainProgram = "vpn-slice";
     license = licenses.gpl3;
     maintainers = with maintainers; [ liketechnik ];
   };
diff --git a/pkgs/tools/networking/vpnc-scripts/default.nix b/pkgs/tools/networking/vpnc-scripts/default.nix
index 7b6a760f5f009..e0319ed4bf14b 100644
--- a/pkgs/tools/networking/vpnc-scripts/default.nix
+++ b/pkgs/tools/networking/vpnc-scripts/default.nix
@@ -43,6 +43,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://www.infradead.org/openconnect/";
     description = "Script for vpnc to configure the network routing and name service";
+    mainProgram = "vpnc-script";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ jerith666 ];
     platforms = platforms.linux ++ platforms.darwin;
diff --git a/pkgs/tools/networking/whatip/default.nix b/pkgs/tools/networking/whatip/default.nix
index 08979e71e35ed..85a2fdf3f7b37 100644
--- a/pkgs/tools/networking/whatip/default.nix
+++ b/pkgs/tools/networking/whatip/default.nix
@@ -55,6 +55,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Info on your IP";
+    mainProgram = "whatip";
     homepage = "https://gitlab.gnome.org/GabMus/whatip";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
diff --git a/pkgs/tools/networking/wifish/default.nix b/pkgs/tools/networking/wifish/default.nix
index a9e30710c1a21..7f474bc984424 100644
--- a/pkgs/tools/networking/wifish/default.nix
+++ b/pkgs/tools/networking/wifish/default.nix
@@ -40,6 +40,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/bougyman/wifish";
     description = "Simple wifi shell script for linux";
+    mainProgram = "wifish";
     license = licenses.wtfpl;
     maintainers = with maintainers; [ AndersonTorres ];
     platforms = with platforms; linux;
diff --git a/pkgs/tools/networking/xray/default.nix b/pkgs/tools/networking/xray/default.nix
index 2c2fce54e6082..285b29f228851 100644
--- a/pkgs/tools/networking/xray/default.nix
+++ b/pkgs/tools/networking/xray/default.nix
@@ -52,6 +52,7 @@ buildGoModule rec {
 
   meta = {
     description = "A platform for building proxies to bypass network restrictions. A replacement for v2ray-core, with XTLS support and fully compatible configuration";
+    mainProgram = "xray";
     homepage = "https://github.com/XTLS/Xray-core";
     license = with lib.licenses; [ mpl20 ];
     maintainers = with lib.maintainers; [ iopq ];
diff --git a/pkgs/tools/nix/cached-nix-shell/default.nix b/pkgs/tools/nix/cached-nix-shell/default.nix
index 0cbf0f6b106dc..84672a8e96a39 100644
--- a/pkgs/tools/nix/cached-nix-shell/default.nix
+++ b/pkgs/tools/nix/cached-nix-shell/default.nix
@@ -38,6 +38,7 @@ in rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Instant startup time for nix-shell";
+    mainProgram = "cached-nix-shell";
     homepage = "https://github.com/xzfc/cached-nix-shell";
     license = with licenses; [ unlicense /* or */ mit ];
     maintainers = with maintainers; [ xzfc ];
diff --git a/pkgs/tools/nix/dnadd/default.nix b/pkgs/tools/nix/dnadd/default.nix
index 59a0516629e1a..eccda0bd7c5ff 100644
--- a/pkgs/tools/nix/dnadd/default.nix
+++ b/pkgs/tools/nix/dnadd/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/joelancaster/dnadd";
     description = "Adds packages declaratively on the command line";
+    mainProgram = "dnadd";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ joelancaster ];
   };
diff --git a/pkgs/tools/nix/nar-serve/default.nix b/pkgs/tools/nix/nar-serve/default.nix
index f2c709a2e3127..98e480d4fdb92 100644
--- a/pkgs/tools/nix/nar-serve/default.nix
+++ b/pkgs/tools/nix/nar-serve/default.nix
@@ -19,6 +19,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Serve NAR file contents via HTTP";
+    mainProgram = "nar-serve";
     homepage = "https://github.com/numtide/nar-serve";
     license = licenses.mit;
     maintainers = with maintainers; [ rizary zimbatm ];
diff --git a/pkgs/tools/nix/nix-init/default.nix b/pkgs/tools/nix/nix-init/default.nix
index 1e1ef3c0d0f68..95164ba3963dc 100644
--- a/pkgs/tools/nix/nix-init/default.nix
+++ b/pkgs/tools/nix/nix-init/default.nix
@@ -88,6 +88,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Command line tool to generate Nix packages from URLs";
+    mainProgram = "nix-init";
     homepage = "https://github.com/nix-community/nix-init";
     changelog = "https://github.com/nix-community/nix-init/blob/${src.rev}/CHANGELOG.md";
     license = licenses.mpl20;
diff --git a/pkgs/tools/nix/nix-melt/default.nix b/pkgs/tools/nix/nix-melt/default.nix
index 3a0b15c8c97f8..50f830cf42a09 100644
--- a/pkgs/tools/nix/nix-melt/default.nix
+++ b/pkgs/tools/nix/nix-melt/default.nix
@@ -32,6 +32,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A ranger-like flake.lock viewer";
+    mainProgram = "nix-melt";
     homepage = "https://github.com/nix-community/nix-melt";
     changelog = "https://github.com/nix-community/nix-melt/blob/${src.rev}/CHANGELOG.md";
     license = licenses.mpl20;
diff --git a/pkgs/tools/nix/nix-query-tree-viewer/default.nix b/pkgs/tools/nix/nix-query-tree-viewer/default.nix
index a27aa8d3c3bd6..03fa64545f182 100644
--- a/pkgs/tools/nix/nix-query-tree-viewer/default.nix
+++ b/pkgs/tools/nix/nix-query-tree-viewer/default.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "GTK viewer for the output of `nix store --query --tree`";
+    mainProgram = "nix-query-tree-viewer";
     homepage    = "https://github.com/cdepillabout/nix-query-tree-viewer";
     license     = with licenses; [ mit ];
     maintainers = with maintainers; [ cdepillabout ];
diff --git a/pkgs/tools/nix/nix-store-gcs-proxy/default.nix b/pkgs/tools/nix/nix-store-gcs-proxy/default.nix
index 166fe75766dee..c83d44101b5ba 100644
--- a/pkgs/tools/nix/nix-store-gcs-proxy/default.nix
+++ b/pkgs/tools/nix/nix-store-gcs-proxy/default.nix
@@ -16,6 +16,7 @@ buildGoModule rec {
 
   meta = {
     description = "A HTTP nix store that proxies requests to Google Storage";
+    mainProgram = "nix-store-gcs-proxy";
     homepage = "https://github.com/tweag/nix-store-gcs-proxy";
     license = lib.licenses.asl20;
     maintainers = with lib.maintainers; [ zimbatm ];
diff --git a/pkgs/tools/nix/nixdoc/default.nix b/pkgs/tools/nix/nixdoc/default.nix
index 671e4891d8b12..616ee90d9a3fd 100644
--- a/pkgs/tools/nix/nixdoc/default.nix
+++ b/pkgs/tools/nix/nixdoc/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Generate documentation for Nix functions";
+    mainProgram = "nixdoc";
     homepage    = "https://github.com/nix-community/nixdoc";
     license     = [ licenses.gpl3 ];
     maintainers = with maintainers; [
diff --git a/pkgs/tools/nix/nixel/default.nix b/pkgs/tools/nix/nixel/default.nix
index 5ce14a8d312fe..70a0d92101d2b 100644
--- a/pkgs/tools/nix/nixel/default.nix
+++ b/pkgs/tools/nix/nixel/default.nix
@@ -29,6 +29,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Lexer, Parser, Abstract Syntax Tree and Concrete Syntax Tree for the Nix Expressions Language";
+    mainProgram = "nixel";
     homepage = "https://github.com/kamadorueda/nixel";
     license = licenses.agpl3Only;
     maintainers = with maintainers; [ kamadorueda ];
diff --git a/pkgs/tools/nix/nixos-render-docs/default.nix b/pkgs/tools/nix/nixos-render-docs/default.nix
index b08abfe069f76..43a953f76d9c0 100644
--- a/pkgs/tools/nix/nixos-render-docs/default.nix
+++ b/pkgs/tools/nix/nixos-render-docs/default.nix
@@ -61,6 +61,7 @@ python.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Renderer for NixOS manual and option docs";
+    mainProgram = "nixos-render-docs";
     license = licenses.mit;
     maintainers = [ ];
   };
diff --git a/pkgs/tools/nix/nixpkgs-lint/default.nix b/pkgs/tools/nix/nixpkgs-lint/default.nix
index 16e7582d3a92e..d5e17cd46b37e 100644
--- a/pkgs/tools/nix/nixpkgs-lint/default.nix
+++ b/pkgs/tools/nix/nixpkgs-lint/default.nix
@@ -18,6 +18,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A fast semantic linter for Nix using tree-sitter";
+    mainProgram = "nixpkgs-lint";
     homepage = "https://github.com/nix-community/nixpkgs-lint";
     changelog = "https://github.com/nix-community/nixpkgs-lint/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/pkgs/tools/nix/npins/default.nix b/pkgs/tools/nix/npins/default.nix
index e83617da91e4e..02ec39094ddf3 100644
--- a/pkgs/tools/nix/npins/default.nix
+++ b/pkgs/tools/nix/npins/default.nix
@@ -33,6 +33,7 @@ in rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Simple and convenient dependency pinning for Nix";
+    mainProgram = "npins";
     homepage = "https://github.com/andir/npins";
     license = licenses.eupl12;
     maintainers = with maintainers; [ piegames ];
diff --git a/pkgs/tools/nix/rnix-hashes/default.nix b/pkgs/tools/nix/rnix-hashes/default.nix
index 4aebb35bc9356..b9a98b184fb86 100644
--- a/pkgs/tools/nix/rnix-hashes/default.nix
+++ b/pkgs/tools/nix/rnix-hashes/default.nix
@@ -23,6 +23,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Nix Hash Converter";
+    mainProgram = "rnix-hashes";
     homepage = "https://github.com/numtide/rnix-hashes";
     license = licenses.asl20;
     maintainers = with maintainers; [ rizary SuperSandro2000 ];
diff --git a/pkgs/tools/nix/zon2nix/default.nix b/pkgs/tools/nix/zon2nix/default.nix
index 78b7d601906cc..d3f0bd6ce54a2 100644
--- a/pkgs/tools/nix/zon2nix/default.nix
+++ b/pkgs/tools/nix/zon2nix/default.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Convert the dependencies in `build.zig.zon` to a Nix expression";
+    mainProgram = "zon2nix";
     homepage = "https://github.com/nix-community/zon2nix";
     changelog = "https://github.com/nix-community/zon2nix/blob/${src.rev}/CHANGELOG.md";
     license = licenses.mpl20;
diff --git a/pkgs/tools/package-management/conda/default.nix b/pkgs/tools/package-management/conda/default.nix
index 5638676838f76..57317416651a6 100644
--- a/pkgs/tools/package-management/conda/default.nix
+++ b/pkgs/tools/package-management/conda/default.nix
@@ -88,6 +88,7 @@ in
 
     meta = {
       description = "Conda is a package manager for Python";
+      mainProgram = "conda-shell";
       homepage = "https://conda.io/";
       platforms = lib.platforms.linux;
       license = lib.licenses.bsd3;
diff --git a/pkgs/tools/package-management/disnix/DisnixWebService/default.nix b/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
index 461c0cacc06a6..38aa1c2e261df 100644
--- a/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
+++ b/pkgs/tools/package-management/disnix/DisnixWebService/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A SOAP interface and client for Disnix";
+    mainProgram = "disnix-soap-client";
     homepage = "https://github.com/svanderburg/DisnixWebService";
     changelog = "https://github.com/svanderburg/DisnixWebService/blob/DisnixWebService-${version}/NEWS.txt";
     license = lib.licenses.mit;
diff --git a/pkgs/tools/package-management/gx/go/default.nix b/pkgs/tools/package-management/gx/go/default.nix
index 22f7d07537a54..dee8861d65d6e 100644
--- a/pkgs/tools/package-management/gx/go/default.nix
+++ b/pkgs/tools/package-management/gx/go/default.nix
@@ -17,6 +17,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A tool for importing go packages into gx";
+    mainProgram = "gx-go";
     homepage = "https://github.com/whyrusleeping/gx-go";
     license = licenses.mit;
     maintainers = with maintainers; [ zimbatm ];
diff --git a/pkgs/tools/package-management/wapm/cli/default.nix b/pkgs/tools/package-management/wapm/cli/default.nix
index f1feebdbb0c44..bd345ca6940d1 100644
--- a/pkgs/tools/package-management/wapm/cli/default.nix
+++ b/pkgs/tools/package-management/wapm/cli/default.nix
@@ -31,6 +31,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A package manager for WebAssembly modules";
+    mainProgram = "wapm";
     homepage = "https://docs.wasmer.io/ecosystem/wapm";
     license = with licenses; [ mit ];
     maintainers = [ maintainers.lucperkins ];
diff --git a/pkgs/tools/security/2fa/default.nix b/pkgs/tools/security/2fa/default.nix
index d1d4cc42a1ffc..7261eb605c088 100644
--- a/pkgs/tools/security/2fa/default.nix
+++ b/pkgs/tools/security/2fa/default.nix
@@ -19,6 +19,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://rsc.io/2fa";
     description = "Two-factor authentication on the command line";
+    mainProgram = "2fa";
     license = licenses.bsd3;
     maintainers = with maintainers; [ rvolosatovs ];
   };
diff --git a/pkgs/tools/security/acltoolkit/default.nix b/pkgs/tools/security/acltoolkit/default.nix
index 14b19e3cd7b87..b7c42c2a2574a 100644
--- a/pkgs/tools/security/acltoolkit/default.nix
+++ b/pkgs/tools/security/acltoolkit/default.nix
@@ -38,6 +38,7 @@ python3.pkgs.buildPythonPackage rec {
 
   meta = with lib; {
     description = "ACL abuse swiss-knife";
+    mainProgram = "acltoolkit";
     homepage = "https://github.com/zblurx/acltoolkit";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/adenum/default.nix b/pkgs/tools/security/adenum/default.nix
index 018fd0e263fcb..d547bd5c9ebcf 100644
--- a/pkgs/tools/security/adenum/default.nix
+++ b/pkgs/tools/security/adenum/default.nix
@@ -40,6 +40,7 @@ python3.pkgs.buildPythonApplication {
 
   meta = with lib; {
     description = "Tool to find misconfiguration through LDAP";
+    mainProgram = "adenum";
     homepage = "https://github.com/SecuProject/ADenum";
     license = with licenses; [ gpl3Only ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/aesfix/default.nix b/pkgs/tools/security/aesfix/default.nix
index b2eb2e0e96ca6..fed9ace264c46 100644
--- a/pkgs/tools/security/aesfix/default.nix
+++ b/pkgs/tools/security/aesfix/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Correct bit errors in an AES key schedules";
+    mainProgram = "aesfix";
     homepage = "https://citp.princeton.edu/our-work/memory/";
     maintainers = with maintainers; [ fedx-sudo ];
   };
diff --git a/pkgs/tools/security/aeskeyfind/default.nix b/pkgs/tools/security/aeskeyfind/default.nix
index 08b2481ff00da..4ce27f5eca660 100644
--- a/pkgs/tools/security/aeskeyfind/default.nix
+++ b/pkgs/tools/security/aeskeyfind/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Locates 128-bit and 256-bit AES keys in a captured memory image";
+    mainProgram = "aeskeyfind";
     homepage = "https://citp.princeton.edu/our-work/memory/";
     license = licenses.bsd3;
     maintainers = with maintainers; [ fedx-sudo ];
diff --git a/pkgs/tools/security/afl/libdislocator.nix b/pkgs/tools/security/afl/libdislocator.nix
index 400464c005673..1030ffaf9eb85 100644
--- a/pkgs/tools/security/afl/libdislocator.nix
+++ b/pkgs/tools/security/afl/libdislocator.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation {
       the odds of bumping into heap-related security bugs in
       several ways.
     '';
+    mainProgram = "get-libdislocator-so";
     license = lib.licenses.asl20;
     maintainers = with maintainers; [ ris ];
   };
diff --git a/pkgs/tools/security/age-plugin-ledger/default.nix b/pkgs/tools/security/age-plugin-ledger/default.nix
index 6ed6b526b65da..d3e1e49904ef1 100644
--- a/pkgs/tools/security/age-plugin-ledger/default.nix
+++ b/pkgs/tools/security/age-plugin-ledger/default.nix
@@ -37,6 +37,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A Ledger Nano plugin for age";
+    mainProgram = "age-plugin-ledger";
     homepage = "https://github.com/Ledger-Donjon/age-plugin-ledger";
     license = with licenses; [ mit asl20 ];
     maintainers = with maintainers; [ erdnaxe ];
diff --git a/pkgs/tools/security/age-plugin-tpm/default.nix b/pkgs/tools/security/age-plugin-tpm/default.nix
index 4885aa326ddae..3eef366f8ea89 100644
--- a/pkgs/tools/security/age-plugin-tpm/default.nix
+++ b/pkgs/tools/security/age-plugin-tpm/default.nix
@@ -35,6 +35,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "TPM 2.0 plugin for age (This software is experimental, use it at your own risk)";
+    mainProgram = "age-plugin-tpm";
     homepage = "https://github.com/Foxboron/age-plugin-tpm";
     license = licenses.mit;
     platforms = platforms.linux;
diff --git a/pkgs/tools/security/age-plugin-yubikey/default.nix b/pkgs/tools/security/age-plugin-yubikey/default.nix
index 7a3364c8420b6..0942848e02e5c 100644
--- a/pkgs/tools/security/age-plugin-yubikey/default.nix
+++ b/pkgs/tools/security/age-plugin-yubikey/default.nix
@@ -39,6 +39,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "YubiKey plugin for age";
+    mainProgram = "age-plugin-yubikey";
     homepage = "https://github.com/str4d/age-plugin-yubikey";
     changelog = "https://github.com/str4d/age-plugin-yubikey/blob/${src.rev}/CHANGELOG.md";
     license = with licenses; [ mit asl20 ];
diff --git a/pkgs/tools/security/aide/default.nix b/pkgs/tools/security/aide/default.nix
index 0168ddc4cc902..104b5d11217ad 100644
--- a/pkgs/tools/security/aide/default.nix
+++ b/pkgs/tools/security/aide/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://aide.github.io/";
     description = "A file and directory integrity checker";
+    mainProgram = "aide";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ happysalada ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/security/aiodnsbrute/default.nix b/pkgs/tools/security/aiodnsbrute/default.nix
index c11255e6ab802..0c2f6512d878f 100644
--- a/pkgs/tools/security/aiodnsbrute/default.nix
+++ b/pkgs/tools/security/aiodnsbrute/default.nix
@@ -31,6 +31,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "DNS brute force utility";
+    mainProgram = "aiodnsbrute";
     homepage = "https://github.com/blark/aiodnsbrute";
     changelog = "https://github.com/blark/aiodnsbrute/releases/tag/v${version}";
     license = with licenses; [ gpl3Only ];
diff --git a/pkgs/tools/security/alterx/default.nix b/pkgs/tools/security/alterx/default.nix
index 9fcdb7378b706..a81d83d2ae312 100644
--- a/pkgs/tools/security/alterx/default.nix
+++ b/pkgs/tools/security/alterx/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Fast and customizable subdomain wordlist generator using DSL";
+    mainProgram = "alterx";
     homepage = "https://github.com/projectdiscovery/alterx";
     changelog = "https://github.com/projectdiscovery/alterx/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/amoco/default.nix b/pkgs/tools/security/amoco/default.nix
index fe16ad9596dd5..c78cc8a605763 100644
--- a/pkgs/tools/security/amoco/default.nix
+++ b/pkgs/tools/security/amoco/default.nix
@@ -65,6 +65,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool for analysing binaries";
+    mainProgram = "amoco";
     homepage = "https://github.com/bdcht/amoco";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/apachetomcatscanner/default.nix b/pkgs/tools/security/apachetomcatscanner/default.nix
index 41c68aa797928..2249247216203 100644
--- a/pkgs/tools/security/apachetomcatscanner/default.nix
+++ b/pkgs/tools/security/apachetomcatscanner/default.nix
@@ -36,6 +36,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to scan for Apache Tomcat server vulnerabilities";
+    mainProgram = "ApacheTomcatScanner";
     homepage = "https://github.com/p0dalirius/ApacheTomcatScanner";
     changelog = "https://github.com/p0dalirius/ApacheTomcatScanner/releases/tag/${version}";
     license = with licenses; [ gpl2Only ];
diff --git a/pkgs/tools/security/argocd-vault-plugin/default.nix b/pkgs/tools/security/argocd-vault-plugin/default.nix
index 934be7d099428..b80a67792e5be 100644
--- a/pkgs/tools/security/argocd-vault-plugin/default.nix
+++ b/pkgs/tools/security/argocd-vault-plugin/default.nix
@@ -39,6 +39,7 @@ buildGoModule rec {
     homepage = "https://argocd-vault-plugin.readthedocs.io";
     changelog = "https://github.com/argoproj-labs/argocd-vault-plugin/releases/tag/v${version}";
     description = "An Argo CD plugin to retrieve secrets from Secret Management tools and inject them into Kubernetes secrets";
+    mainProgram = "argocd-vault-plugin";
     license = licenses.asl20;
     maintainers = with maintainers; [ urandom ];
   };
diff --git a/pkgs/tools/security/arti/default.nix b/pkgs/tools/security/arti/default.nix
index ef202fb69eb14..c1e1ae120f971 100644
--- a/pkgs/tools/security/arti/default.nix
+++ b/pkgs/tools/security/arti/default.nix
@@ -35,6 +35,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "An implementation of Tor in Rust";
+    mainProgram = "arti";
     homepage = "https://arti.torproject.org/";
     changelog = "https://gitlab.torproject.org/tpo/core/arti/-/blob/${src.rev}/CHANGELOG.md";
     license = with licenses; [ asl20 /* or */ mit ];
diff --git a/pkgs/tools/security/arubaotp-seed-extractor/default.nix b/pkgs/tools/security/arubaotp-seed-extractor/default.nix
index c2ffef83635de..cd13f891cecc7 100644
--- a/pkgs/tools/security/arubaotp-seed-extractor/default.nix
+++ b/pkgs/tools/security/arubaotp-seed-extractor/default.nix
@@ -40,6 +40,7 @@ python3Packages.buildPythonApplication {
   meta = with lib; {
     homepage = "https://github.com/andry08/ArubaOTP-seed-extractor";
     description = "Extract TOTP seed instead of using ArubaOTP app";
+    mainProgram = "arubaotp-seed-extractor";
     license = licenses.mit;
     maintainers = with maintainers; [ fgaz ];
   };
diff --git a/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix b/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix
index 28913c685778b..3091a8c915545 100644
--- a/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix
+++ b/pkgs/tools/security/asc-key-to-qr-code-gif/default.nix
@@ -39,6 +39,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://github.com/yishilin14/asc-key-to-qr-code-gif";
     description = "Convert ASCII-armored PGP keys to animated QR code";
+    mainProgram = "asc-to-gif.sh";
     platforms = platforms.unix;
     maintainers = with maintainers; [ asymmetric ];
   };
diff --git a/pkgs/tools/security/asnmap/default.nix b/pkgs/tools/security/asnmap/default.nix
index 984f5340eeebe..1c2c52fd00984 100644
--- a/pkgs/tools/security/asnmap/default.nix
+++ b/pkgs/tools/security/asnmap/default.nix
@@ -26,6 +26,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to gather network ranges using ASN information";
+    mainProgram = "asnmap";
     homepage = "https://github.com/projectdiscovery/asnmap";
     changelog = "https://github.com/projectdiscovery/asnmap/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/atomic-operator/default.nix b/pkgs/tools/security/atomic-operator/default.nix
index 6db7f0ecdd088..b93b2f809ccdc 100644
--- a/pkgs/tools/security/atomic-operator/default.nix
+++ b/pkgs/tools/security/atomic-operator/default.nix
@@ -52,6 +52,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to execute Atomic Red Team tests (Atomics)";
+    mainProgram = "atomic-operator";
     homepage = "https://www.atomic-operator.com/";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/authz0/default.nix b/pkgs/tools/security/authz0/default.nix
index 04d2598fd5219..2230fe2e518d9 100644
--- a/pkgs/tools/security/authz0/default.nix
+++ b/pkgs/tools/security/authz0/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Automated authorization test tool";
+    mainProgram = "authz0";
     homepage = "https://github.com/hahwul/authz0";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/aws-iam-authenticator/default.nix b/pkgs/tools/security/aws-iam-authenticator/default.nix
index 73750ce03e084..3019a2593640e 100644
--- a/pkgs/tools/security/aws-iam-authenticator/default.nix
+++ b/pkgs/tools/security/aws-iam-authenticator/default.nix
@@ -29,6 +29,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/kubernetes-sigs/aws-iam-authenticator";
     description = "AWS IAM credentials for Kubernetes authentication";
+    mainProgram = "aws-iam-authenticator";
     changelog = "https://github.com/kubernetes-sigs/aws-iam-authenticator/releases/tag/v${version}";
     license = licenses.asl20;
     maintainers = with maintainers; [ srhb ];
diff --git a/pkgs/tools/security/b2sum/default.nix b/pkgs/tools/security/b2sum/default.nix
index 581feb28ce087..1ce14a55b079e 100644
--- a/pkgs/tools/security/b2sum/default.nix
+++ b/pkgs/tools/security/b2sum/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "The b2sum utility is similar to the md5sum or shasum utilities but for BLAKE2";
+    mainProgram = "b2sum";
     homepage = "https://blake2.net";
     license = with licenses; [ asl20 cc0 openssl ];
     maintainers = with maintainers; [ kirelagin ];
diff --git a/pkgs/tools/security/b3sum/default.nix b/pkgs/tools/security/b3sum/default.nix
index 94e83b5db39e8..20136f377c504 100644
--- a/pkgs/tools/security/b3sum/default.nix
+++ b/pkgs/tools/security/b3sum/default.nix
@@ -13,6 +13,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = {
     description = "BLAKE3 cryptographic hash function";
+    mainProgram = "b3sum";
     homepage = "https://github.com/BLAKE3-team/BLAKE3/";
     maintainers = with lib.maintainers; [ fpletz ivan ];
     license = with lib.licenses; [ cc0 asl20 ];
diff --git a/pkgs/tools/security/badchars/default.nix b/pkgs/tools/security/badchars/default.nix
index 3125ff0c28c94..a6e5666c189f8 100644
--- a/pkgs/tools/security/badchars/default.nix
+++ b/pkgs/tools/security/badchars/default.nix
@@ -21,6 +21,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "HEX badchar generator for different programming languages";
+    mainProgram = "badchars";
     longDescription = ''
       A HEX bad char generator to instruct encoders such as shikata-ga-nai to
       transform those to other chars.
diff --git a/pkgs/tools/security/badrobot/default.nix b/pkgs/tools/security/badrobot/default.nix
index e25e18b5ead23..ad2a0bd29750f 100644
--- a/pkgs/tools/security/badrobot/default.nix
+++ b/pkgs/tools/security/badrobot/default.nix
@@ -31,6 +31,7 @@ buildGoModule rec {
     homepage = "https://github.com/controlplaneio/badrobot";
     changelog = "https://github.com/controlplaneio/badrobot/blob/v${version}/CHANGELOG.md";
     description = "Operator Security Audit Tool";
+    mainProgram = "badrobot";
     longDescription = ''
       Badrobot is a Kubernetes Operator audit tool. It statically analyses
       manifests for high risk configurations such as lack of security
diff --git a/pkgs/tools/security/binbloom/default.nix b/pkgs/tools/security/binbloom/default.nix
index 0805e7b988d4f..ce99de997cc0b 100644
--- a/pkgs/tools/security/binbloom/default.nix
+++ b/pkgs/tools/security/binbloom/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Raw binary firmware analysis software";
+    mainProgram = "binbloom";
     homepage = "https://github.com/quarkslab/binbloom";
     license = licenses.asl20;
     maintainers = with maintainers; [ erdnaxe ];
diff --git a/pkgs/tools/security/bmrsa/11.nix b/pkgs/tools/security/bmrsa/11.nix
index 932566c650604..3ac41d2da482f 100644
--- a/pkgs/tools/security/bmrsa/11.nix
+++ b/pkgs/tools/security/bmrsa/11.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "RSA utility";
+    mainProgram = "bmrsa";
     homepage = "http://bmrsa.sourceforge.net/";
     license = licenses.gpl2Only;
     platforms = platforms.linux;
diff --git a/pkgs/tools/security/boofuzz/default.nix b/pkgs/tools/security/boofuzz/default.nix
index 39b35d6944ded..5c2418cad6655 100644
--- a/pkgs/tools/security/boofuzz/default.nix
+++ b/pkgs/tools/security/boofuzz/default.nix
@@ -56,6 +56,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Network protocol fuzzing tool";
+    mainProgram = "boo";
     homepage = "https://github.com/jtpereyda/boofuzz";
     changelog = "https://github.com/jtpereyda/boofuzz/blob/v${version}/CHANGELOG.rst";
     license = with licenses; [ gpl2Plus ];
diff --git a/pkgs/tools/security/browserpass/default.nix b/pkgs/tools/security/browserpass/default.nix
index 1dd2a27f1ec31..b80b513b3d4be 100644
--- a/pkgs/tools/security/browserpass/default.nix
+++ b/pkgs/tools/security/browserpass/default.nix
@@ -66,6 +66,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Browserpass native client app";
+    mainProgram = "browserpass";
     homepage = "https://github.com/browserpass/browserpass-native";
     license = licenses.isc;
     maintainers = with maintainers; [ rvolosatovs infinisil ];
diff --git a/pkgs/tools/security/bruteforce-luks/default.nix b/pkgs/tools/security/bruteforce-luks/default.nix
index a6e0f3cc104b6..56f827a09a4a5 100644
--- a/pkgs/tools/security/bruteforce-luks/default.nix
+++ b/pkgs/tools/security/bruteforce-luks/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     inherit (src.meta) homepage;
     description = "Cracks passwords of LUKS encrypted volumes";
+    mainProgram = "bruteforce-luks";
     longDescription = ''
       The program tries to decrypt at least one of the key slots by trying
       all the possible passwords. It is especially useful if you know
diff --git a/pkgs/tools/security/brutespray/default.nix b/pkgs/tools/security/brutespray/default.nix
index 9b7ad8c1a666b..74f49fbab41e7 100644
--- a/pkgs/tools/security/brutespray/default.nix
+++ b/pkgs/tools/security/brutespray/default.nix
@@ -40,6 +40,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/x90skysn3k/brutespray";
     description = "Tool to do brute-forcing from Nmap output";
+    mainProgram = "brutespray";
     longDescription = ''
       This tool automatically attempts default credentials on found services
       directly from Nmap output.
diff --git a/pkgs/tools/security/buttercup-desktop/default.nix b/pkgs/tools/security/buttercup-desktop/default.nix
index bd83baa6db535..e38aaea42a4b2 100644
--- a/pkgs/tools/security/buttercup-desktop/default.nix
+++ b/pkgs/tools/security/buttercup-desktop/default.nix
@@ -24,6 +24,7 @@ in appimageTools.wrapType2 {
 
   meta = with lib; {
     description = "Cross-Platform Passwords & Secrets Vault";
+    mainProgram = "buttercup-desktop";
     homepage = "https://buttercup.pw";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ wolfangaukang ];
diff --git a/pkgs/tools/security/cariddi/default.nix b/pkgs/tools/security/cariddi/default.nix
index 6a41ce214d1d7..76a81a85431e7 100644
--- a/pkgs/tools/security/cariddi/default.nix
+++ b/pkgs/tools/security/cariddi/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Crawler for URLs and endpoints";
+    mainProgram = "cariddi";
     homepage = "https://github.com/edoardottt/cariddi";
     changelog = "https://github.com/edoardottt/cariddi/releases/tag/v${version}";
     license = with licenses; [ gpl3Plus ];
diff --git a/pkgs/tools/security/certdump/default.nix b/pkgs/tools/security/certdump/default.nix
index 7b5b6744b345a..789f4fd573706 100644
--- a/pkgs/tools/security/certdump/default.nix
+++ b/pkgs/tools/security/certdump/default.nix
@@ -33,6 +33,7 @@ buildDotnetModule rec {
 
   meta = with lib; {
     description = "Dump certificates from PE files in different formats";
+    mainProgram = "CertDump";
     homepage = "https://github.com/secana/CertDump";
     longDescription = ''
       Cross-Platform tool to dump the signing certificate from a Portable Executable (PE) file.
diff --git a/pkgs/tools/security/certgraph/default.nix b/pkgs/tools/security/certgraph/default.nix
index da8f8358d7996..3af3078d6b8b1 100644
--- a/pkgs/tools/security/certgraph/default.nix
+++ b/pkgs/tools/security/certgraph/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Intelligence tool to crawl the graph of certificate alternate names";
+    mainProgram = "certgraph";
     homepage = "https://github.com/lanrat/certgraph";
     license = with licenses; [ gpl2Only ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/certinfo/default.nix b/pkgs/tools/security/certinfo/default.nix
index e0d2a3998a25c..ea94ff3762b77 100644
--- a/pkgs/tools/security/certinfo/default.nix
+++ b/pkgs/tools/security/certinfo/default.nix
@@ -22,6 +22,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Print x509 certificate info";
+    mainProgram = "certinfo";
     homepage = "https://github.com/pete911/certinfo";
     license = licenses.mit;
     maintainers = with maintainers; [ jakuzure ];
diff --git a/pkgs/tools/security/certstrap/default.nix b/pkgs/tools/security/certstrap/default.nix
index 8808b98985f85..5761763553927 100644
--- a/pkgs/tools/security/certstrap/default.nix
+++ b/pkgs/tools/security/certstrap/default.nix
@@ -22,6 +22,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tools to bootstrap CAs, certificate requests, and signed certificates";
+    mainProgram = "certstrap";
     longDescription = ''
       A simple certificate manager written in Go, to bootstrap your own
       certificate authority and public key infrastructure. Adapted from etcd-ca.
diff --git a/pkgs/tools/security/cewl/default.nix b/pkgs/tools/security/cewl/default.nix
index 06d983c14e36f..dc1ad37513daa 100644
--- a/pkgs/tools/security/cewl/default.nix
+++ b/pkgs/tools/security/cewl/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Custom wordlist generator";
+    mainProgram = "cewl";
     homepage = "https://digi.ninja/projects/cewl.php/";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ elohmeier ];
diff --git a/pkgs/tools/security/cfripper/default.nix b/pkgs/tools/security/cfripper/default.nix
index 51fa61067425c..edacd10e8b050 100644
--- a/pkgs/tools/security/cfripper/default.nix
+++ b/pkgs/tools/security/cfripper/default.nix
@@ -65,6 +65,7 @@ in python.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool for analysing CloudFormation templates";
+    mainProgram = "cfripper";
     homepage = "https://github.com/Skyscanner/cfripper";
     changelog = "https://github.com/Skyscanner/cfripper/releases/tag/v${version}";
     license = with licenses; [ asl20 ];
diff --git a/pkgs/tools/security/chain-bench/default.nix b/pkgs/tools/security/chain-bench/default.nix
index 9705440dfdf87..883674951b14f 100644
--- a/pkgs/tools/security/chain-bench/default.nix
+++ b/pkgs/tools/security/chain-bench/default.nix
@@ -43,6 +43,7 @@ buildGoModule rec {
     homepage = "https://github.com/aquasecurity/chain-bench";
     changelog = "https://github.com/aquasecurity/chain-bench/releases/tag/v${version}";
     description = "An open-source tool for auditing your software supply chain stack for security compliance based on a new CIS Software Supply Chain benchmark";
+    mainProgram = "chain-bench";
     longDescription = ''
       Chain-bench is an open-source tool for auditing your software supply chain
       stack for security compliance based on a new CIS Software Supply Chain
diff --git a/pkgs/tools/security/chainsaw/default.nix b/pkgs/tools/security/chainsaw/default.nix
index b939e15263da9..2bc06428e7815 100644
--- a/pkgs/tools/security/chainsaw/default.nix
+++ b/pkgs/tools/security/chainsaw/default.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Rapidly Search and Hunt through Windows Forensic Artefacts";
+    mainProgram = "chainsaw";
     homepage = "https://github.com/WithSecureLabs/chainsaw";
     changelog = "https://github.com/WithSecureLabs/chainsaw/releases/tag/v${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/cherrybomb/default.nix b/pkgs/tools/security/cherrybomb/default.nix
index 4bb975d3394c5..6f8fc1d2a8e34 100644
--- a/pkgs/tools/security/cherrybomb/default.nix
+++ b/pkgs/tools/security/cherrybomb/default.nix
@@ -22,6 +22,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A CLI tool that helps you avoid undefined user behavior by validating your API specifications";
+    mainProgram = "cherrybomb";
     homepage = "https://github.com/blst-security/cherrybomb";
     changelog = "https://github.com/blst-security/cherrybomb/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/chrome-token-signing/default.nix b/pkgs/tools/security/chrome-token-signing/default.nix
index 8081c7ef6eb50..5f9618d0f177a 100644
--- a/pkgs/tools/security/chrome-token-signing/default.nix
+++ b/pkgs/tools/security/chrome-token-signing/default.nix
@@ -31,6 +31,7 @@ mkDerivation rec {
 
   meta = with lib; {
     description = "Chrome and Firefox extension for signing with your eID on the web";
+    mainProgram = "chrome-token-signing";
     homepage = "https://github.com/open-eid/chrome-token-signing/wiki";
     license = licenses.lgpl21;
     maintainers = [ maintainers.mmahut ];
diff --git a/pkgs/tools/security/cirrusgo/default.nix b/pkgs/tools/security/cirrusgo/default.nix
index 61c8e6b8b28f9..d7301dd604bda 100644
--- a/pkgs/tools/security/cirrusgo/default.nix
+++ b/pkgs/tools/security/cirrusgo/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to scan SAAS and PAAS applications";
+    mainProgram = "cirrusgo";
     homepage = "https://github.com/Ph33rr/cirrusgo";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/clairvoyance/default.nix b/pkgs/tools/security/clairvoyance/default.nix
index ba88338347fca..ca30860474943 100644
--- a/pkgs/tools/security/clairvoyance/default.nix
+++ b/pkgs/tools/security/clairvoyance/default.nix
@@ -45,6 +45,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to obtain GraphQL API schemas";
+    mainProgram = "clairvoyance";
     homepage = "https://github.com/nikitastupin/clairvoyance";
     changelog = "https://github.com/nikitastupin/clairvoyance/releases/tag/v${version}";
     license = with licenses; [ asl20 ];
diff --git a/pkgs/tools/security/cliam/default.nix b/pkgs/tools/security/cliam/default.nix
index 400cf8b7e7c52..1089a352d54cb 100644
--- a/pkgs/tools/security/cliam/default.nix
+++ b/pkgs/tools/security/cliam/default.nix
@@ -41,6 +41,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Cloud agnostic IAM permissions enumerator";
+    mainProgram = "cliam";
     homepage = "https://github.com/securisec/cliam";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/cloudbrute/default.nix b/pkgs/tools/security/cloudbrute/default.nix
index 677c14021509f..cae471ce9aec8 100644
--- a/pkgs/tools/security/cloudbrute/default.nix
+++ b/pkgs/tools/security/cloudbrute/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Cloud enumeration tool";
+    mainProgram = "cloudbrute";
     longDescription = ''
       A tool to find a company (target) infrastructure, files, and apps on
       the top cloud providers (Amazon, Google, Microsoft, DigitalOcean,
diff --git a/pkgs/tools/security/cloudfox/default.nix b/pkgs/tools/security/cloudfox/default.nix
index 85777c91be09a..995ee7a326a99 100644
--- a/pkgs/tools/security/cloudfox/default.nix
+++ b/pkgs/tools/security/cloudfox/default.nix
@@ -26,6 +26,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool for situational awareness of cloud penetration tests";
+    mainProgram = "cloudfox";
     homepage = "https://github.com/BishopFox/cloudfox";
     changelog = "https://github.com/BishopFox/cloudfox/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/cloudhunter/default.nix b/pkgs/tools/security/cloudhunter/default.nix
index 206879d537592..7fdfa44031d1b 100644
--- a/pkgs/tools/security/cloudhunter/default.nix
+++ b/pkgs/tools/security/cloudhunter/default.nix
@@ -43,6 +43,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Cloud bucket scanner";
+    mainProgram = "cloudhunter";
     homepage = "https://github.com/belane/CloudHunter";
     changelog = "https://github.com/belane/CloudHunter/releases/tag/v${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/cloudlist/default.nix b/pkgs/tools/security/cloudlist/default.nix
index fa41327a8cf58..ab849a688a297 100644
--- a/pkgs/tools/security/cloudlist/default.nix
+++ b/pkgs/tools/security/cloudlist/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool for listing assets from multiple cloud providers";
+    mainProgram = "cloudlist";
     homepage = "https://github.com/projectdiscovery/cloudlist";
     changelog = "https://github.com/projectdiscovery/cloudlist/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/cmospwd/default.nix b/pkgs/tools/security/cmospwd/default.nix
index e80b7256e50c9..9243afa1aad75 100644
--- a/pkgs/tools/security/cmospwd/default.nix
+++ b/pkgs/tools/security/cmospwd/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Decrypt password stored in cmos used to access BIOS SETUP";
+    mainProgram = "cmospwd";
     homepage = "https://www.cgsecurity.org/wiki/CmosPwd";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ t4ccer ];
diff --git a/pkgs/tools/security/coercer/default.nix b/pkgs/tools/security/coercer/default.nix
index f380d130bb07f..e0d921e62e2d7 100644
--- a/pkgs/tools/security/coercer/default.nix
+++ b/pkgs/tools/security/coercer/default.nix
@@ -41,6 +41,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to automatically coerce a Windows server";
+    mainProgram = "coercer";
     homepage = "https://github.com/p0dalirius/Coercer";
     license = with licenses; [ gpl2Only ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/commix/default.nix b/pkgs/tools/security/commix/default.nix
index b4c16376d8dad..6197b59172ca1 100644
--- a/pkgs/tools/security/commix/default.nix
+++ b/pkgs/tools/security/commix/default.nix
@@ -36,6 +36,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Automated Command Injection Exploitation Tool";
+    mainProgram = "commix";
     homepage = "https://github.com/commixproject/commix";
     changelog = "https://github.com/commixproject/commix/releases/tag/v${version}";
     license = with licenses; [ gpl3Plus ];
diff --git a/pkgs/tools/security/cosign/default.nix b/pkgs/tools/security/cosign/default.nix
index 072b8e4ffb529..f2b9a5ed254d2 100644
--- a/pkgs/tools/security/cosign/default.nix
+++ b/pkgs/tools/security/cosign/default.nix
@@ -72,6 +72,7 @@ buildGoModule rec {
     homepage = "https://github.com/sigstore/cosign";
     changelog = "https://github.com/sigstore/cosign/releases/tag/v${version}";
     description = "Container Signing CLI with support for ephemeral keys and Sigstore signing";
+    mainProgram = "cosign";
     license = licenses.asl20;
     maintainers = with maintainers; [ lesuisse jk developer-guy ];
   };
diff --git a/pkgs/tools/security/coze/default.nix b/pkgs/tools/security/coze/default.nix
index 5fbd906fd87ef..ca7b8f3d1d7e4 100644
--- a/pkgs/tools/security/coze/default.nix
+++ b/pkgs/tools/security/coze/default.nix
@@ -19,6 +19,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "CLI client for Coze, a cryptographic JSON messaging specification";
+    mainProgram = "coze";
     homepage = "https://github.com/Cyphrme/coze_cli";
     license = with licenses; [ bsd3 ];
     maintainers = with maintainers; [ qbit ];
diff --git a/pkgs/tools/security/crackql/default.nix b/pkgs/tools/security/crackql/default.nix
index 6a8e95ec57f2d..cb3ecc1cb0a74 100644
--- a/pkgs/tools/security/crackql/default.nix
+++ b/pkgs/tools/security/crackql/default.nix
@@ -35,6 +35,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "GraphQL password brute-force and fuzzing utility";
+    mainProgram = "crackql";
     homepage = "https://github.com/nicholasaleks/CrackQL";
     license = with licenses; [ bsd3 ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/crackxls/default.nix b/pkgs/tools/security/crackxls/default.nix
index f3c1745321eb6..7ff6de5deff0c 100644
--- a/pkgs/tools/security/crackxls/default.nix
+++ b/pkgs/tools/security/crackxls/default.nix
@@ -37,6 +37,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/GavinSmith0123/crackxls2003/";
     description = "Used to break the encryption on old Microsoft Excel and Microsoft Word files";
+    mainProgram = "crackxls2003";
     platforms = platforms.linux;
     license = licenses.gpl3;
   };
diff --git a/pkgs/tools/security/credential-detector/default.nix b/pkgs/tools/security/credential-detector/default.nix
index fd3e40b6536cc..1297d158efe58 100644
--- a/pkgs/tools/security/credential-detector/default.nix
+++ b/pkgs/tools/security/credential-detector/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to detect potentially hard-coded credentials";
+    mainProgram = "credential-detector";
     homepage = "https://github.com/ynori7/credential-detector";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/creds/default.nix b/pkgs/tools/security/creds/default.nix
index 2f2962616d7c1..ed34ad0df7c2e 100644
--- a/pkgs/tools/security/creds/default.nix
+++ b/pkgs/tools/security/creds/default.nix
@@ -35,6 +35,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to search a collection of default credentials";
+    mainProgram = "creds";
     homepage = "https://github.com/ihebski/DefaultCreds-cheat-sheet";
     changelog = "https://github.com/ihebski/DefaultCreds-cheat-sheet/releases/tag/creds-${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/credslayer/default.nix b/pkgs/tools/security/credslayer/default.nix
index 7d9d675779301..f09a86bc613a2 100644
--- a/pkgs/tools/security/credslayer/default.nix
+++ b/pkgs/tools/security/credslayer/default.nix
@@ -51,6 +51,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Extract credentials and other useful info from network captures";
+    mainProgram = "credslayer";
     homepage = "https://github.com/ShellCode33/CredSLayer";
     license = with licenses; [ gpl3Only ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/crlfsuite/default.nix b/pkgs/tools/security/crlfsuite/default.nix
index bc375f03c0c4f..dfd1c7098c2f9 100644
--- a/pkgs/tools/security/crlfsuite/default.nix
+++ b/pkgs/tools/security/crlfsuite/default.nix
@@ -29,6 +29,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "CRLF injection (HTTP Response Splitting) scanner";
+    mainProgram = "crlfsuite";
     homepage = "https://github.com/Nefcore/CRLFsuite";
     license = licenses.mit;
     maintainers = with maintainers; [ c0bw3b fab ];
diff --git a/pkgs/tools/security/crlfuzz/default.nix b/pkgs/tools/security/crlfuzz/default.nix
index f28f96e5f4cdc..ab2ee1e7a46ef 100644
--- a/pkgs/tools/security/crlfuzz/default.nix
+++ b/pkgs/tools/security/crlfuzz/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to scan for CRLF vulnerability";
+    mainProgram = "crlfuzz";
     homepage = "https://github.com/dwisiswant0/crlfuzz";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/crowbar/default.nix b/pkgs/tools/security/crowbar/default.nix
index e58f77457de28..095004ab76df1 100644
--- a/pkgs/tools/security/crowbar/default.nix
+++ b/pkgs/tools/security/crowbar/default.nix
@@ -36,6 +36,7 @@ python3Packages.buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/galkan/crowbar";
     description = "A brute forcing tool that can be used during penetration tests";
+    mainProgram = "crowbar";
     license = licenses.mit;
     maintainers = with maintainers; [ pamplemousse ];
   };
diff --git a/pkgs/tools/security/crunch/default.nix b/pkgs/tools/security/crunch/default.nix
index d287fb32fb670..146a67605847f 100644
--- a/pkgs/tools/security/crunch/default.nix
+++ b/pkgs/tools/security/crunch/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Wordlist generator";
+    mainProgram = "crunch";
     homepage = "https://sourceforge.net/projects/crunch-wordlist/";
     platforms = platforms.unix;
     license = with licenses; [ gpl2Only ];
diff --git a/pkgs/tools/security/cryptomator/default.nix b/pkgs/tools/security/cryptomator/default.nix
index 85ce0c8797924..39654ae0ceafe 100644
--- a/pkgs/tools/security/cryptomator/default.nix
+++ b/pkgs/tools/security/cryptomator/default.nix
@@ -85,6 +85,7 @@ mavenJdk.buildMavenPackage rec {
 
   meta = with lib; {
     description = "Free client-side encryption for your cloud files";
+    mainProgram = "cryptomator";
     homepage = "https://cryptomator.org";
     sourceProvenance = with sourceTypes; [
       fromSource
diff --git a/pkgs/tools/security/decoder/default.nix b/pkgs/tools/security/decoder/default.nix
index 76dd3003d5001..1463e132bb728 100644
--- a/pkgs/tools/security/decoder/default.nix
+++ b/pkgs/tools/security/decoder/default.nix
@@ -43,6 +43,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/PeterPawn/decoder";
     description = ''"secrets" decoding for FRITZ!OS devices'';
+    mainProgram = "decoder";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ Luflosi ];
diff --git a/pkgs/tools/security/deepsecrets/default.nix b/pkgs/tools/security/deepsecrets/default.nix
index c509311f3a6de..4fa86da7f9131 100644
--- a/pkgs/tools/security/deepsecrets/default.nix
+++ b/pkgs/tools/security/deepsecrets/default.nix
@@ -42,6 +42,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Secrets scanner that understands code";
+    mainProgram = "deepsecrets";
     homepage = "https://github.com/avito-tech/deepsecrets";
     changelog = "https://github.com/avito-tech/deepsecrets/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/dieharder/default.nix b/pkgs/tools/security/dieharder/default.nix
index 51370ad8dcc2d..716b3266faee1 100644
--- a/pkgs/tools/security/dieharder/default.nix
+++ b/pkgs/tools/security/dieharder/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A Random Number Generator test suite";
+    mainProgram = "dieharder";
     homepage = "https://webhome.phy.duke.edu/~rgb/General/dieharder.php";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ zhaofengli ];
diff --git a/pkgs/tools/security/dirstalk/default.nix b/pkgs/tools/security/dirstalk/default.nix
index 1397a0b8aa9e3..d0cdc4b481349 100644
--- a/pkgs/tools/security/dirstalk/default.nix
+++ b/pkgs/tools/security/dirstalk/default.nix
@@ -38,6 +38,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to brute force paths on web servers";
+    mainProgram = "dirstalk";
     homepage = "https://github.com/stefanoj3/dirstalk";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/dismap/default.nix b/pkgs/tools/security/dismap/default.nix
index 52e046aa80c10..d80e853dae62d 100644
--- a/pkgs/tools/security/dismap/default.nix
+++ b/pkgs/tools/security/dismap/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Asset discovery and identification tools";
+    mainProgram = "dismap";
     homepage = "https://github.com/zhzyker/dismap";
     license = with licenses; [ gpl3Only ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/dnsenum/default.nix b/pkgs/tools/security/dnsenum/default.nix
index a24fc96621f12..826ebec015e4e 100644
--- a/pkgs/tools/security/dnsenum/default.nix
+++ b/pkgs/tools/security/dnsenum/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/fwaeytens/dnsenum";
     description = "A tool to enumerate DNS information";
+    mainProgram = "dnsenum";
     maintainers = with maintainers; [ c0bw3b ];
     license = licenses.gpl2Plus;
     platforms = platforms.all;
diff --git a/pkgs/tools/security/dnspeep/default.nix b/pkgs/tools/security/dnspeep/default.nix
index 978ec5ed2f8b2..73edd9724a0a6 100644
--- a/pkgs/tools/security/dnspeep/default.nix
+++ b/pkgs/tools/security/dnspeep/default.nix
@@ -23,6 +23,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Spy on the DNS queries your computer is making";
+    mainProgram = "dnspeep";
     homepage = "https://github.com/jvns/dnspeep";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda ];
diff --git a/pkgs/tools/security/dnsrecon/default.nix b/pkgs/tools/security/dnsrecon/default.nix
index 65fae4928c6fb..4fdbad950ab0f 100644
--- a/pkgs/tools/security/dnsrecon/default.nix
+++ b/pkgs/tools/security/dnsrecon/default.nix
@@ -42,6 +42,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "DNS Enumeration script";
+    mainProgram = "dnsrecon";
     homepage = "https://github.com/darkoperator/dnsrecon";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ c0bw3b fab ];
diff --git a/pkgs/tools/security/doas/default.nix b/pkgs/tools/security/doas/default.nix
index 03268bc98479c..2864a1edcf4d8 100644
--- a/pkgs/tools/security/doas/default.nix
+++ b/pkgs/tools/security/doas/default.nix
@@ -50,6 +50,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Executes the given command as another user";
+    mainProgram = "doas";
     homepage = "https://github.com/Duncaen/OpenDoas";
     license = licenses.isc;
     platforms = platforms.linux;
diff --git a/pkgs/tools/security/dontgo403/default.nix b/pkgs/tools/security/dontgo403/default.nix
index 84e7667377b79..19bc78f2206c8 100644
--- a/pkgs/tools/security/dontgo403/default.nix
+++ b/pkgs/tools/security/dontgo403/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to bypass 40X response codes";
+    mainProgram = "nomore403";
     homepage = "https://github.com/devploit/dontgo403";
     changelog = "https://github.com/devploit/dontgo403/releases/tag/${version}";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/doona/default.nix b/pkgs/tools/security/doona/default.nix
index e0f459ad7453d..2598f2ecbb968 100644
--- a/pkgs/tools/security/doona/default.nix
+++ b/pkgs/tools/security/doona/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/wireghoul/doona";
     description = "A fork of the Bruteforce Exploit Detector Tool (BED)";
+    mainProgram = "doona";
     longDescription = ''
       A fork of the Bruteforce Exploit Detector Tool (BED).
       BED is a program which is designed to check daemons for potential buffer overflows, format string bugs etc.
diff --git a/pkgs/tools/security/doppler/default.nix b/pkgs/tools/security/doppler/default.nix
index 4707240857fce..1e860abc57cd7 100644
--- a/pkgs/tools/security/doppler/default.nix
+++ b/pkgs/tools/security/doppler/default.nix
@@ -41,6 +41,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "The official CLI for interacting with your Doppler Enclave secrets and configuration";
+    mainProgram = "doppler";
     homepage = "https://doppler.com";
     license = licenses.asl20;
     maintainers = with maintainers; [ lucperkins ];
diff --git a/pkgs/tools/security/dorkscout/default.nix b/pkgs/tools/security/dorkscout/default.nix
index e5b5057c6089c..57ba965033bb4 100644
--- a/pkgs/tools/security/dorkscout/default.nix
+++ b/pkgs/tools/security/dorkscout/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to automate the work with Google dorks";
+    mainProgram = "dorkscout";
     homepage = "https://github.com/R4yGM/dorkscout";
     license = licenses.asl20;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/earlybird/default.nix b/pkgs/tools/security/earlybird/default.nix
index c7cb35fe335c7..d5f001fc995aa 100644
--- a/pkgs/tools/security/earlybird/default.nix
+++ b/pkgs/tools/security/earlybird/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A sensitive data detection tool capable of scanning source code repositories for passwords, key files, and more";
+    mainProgram = "earlybird";
     homepage = "https://github.com/americanexpress/earlybird";
     changelog = "https://github.com/americanexpress/earlybird/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/ec2stepshell/default.nix b/pkgs/tools/security/ec2stepshell/default.nix
index ff6ee22b08eb6..6b5031ffebe2e 100644
--- a/pkgs/tools/security/ec2stepshell/default.nix
+++ b/pkgs/tools/security/ec2stepshell/default.nix
@@ -38,6 +38,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "AWS post-exploitation tool";
+    mainProgram = "ec2stepshell";
     homepage = "https://github.com/saw-your-packet/EC2StepShell";
     changelog = "https://github.com/saw-your-packet/EC2StepShell/blob/${version}/CHANGELOG.txt";
     license = licenses.mit;
diff --git a/pkgs/tools/security/ecdsatool/default.nix b/pkgs/tools/security/ecdsatool/default.nix
index 0498b758c1d32..aa55facfd8e04 100644
--- a/pkgs/tools/security/ecdsatool/default.nix
+++ b/pkgs/tools/security/ecdsatool/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Create and manipulate ECC NISTP256 keypairs";
+    mainProgram = "ecdsatool";
     homepage = "https://github.com/kaniini/ecdsatool/";
     license = with licenses; [free];
     platforms = platforms.unix;
diff --git a/pkgs/tools/security/enc/default.nix b/pkgs/tools/security/enc/default.nix
index ffacccf6a311a..c5f4d62586c5b 100644
--- a/pkgs/tools/security/enc/default.nix
+++ b/pkgs/tools/security/enc/default.nix
@@ -41,6 +41,7 @@ buildGoModule rec {
     homepage = "https://github.com/life4/enc";
     changelog = "https://github.com/life4/enc/releases/tag/v${version}";
     description = "A modern and friendly alternative to GnuPG";
+    mainProgram = "enc";
     longDescription = ''
       Enc is a CLI tool for encryption, a modern and friendly alternative to GnuPG.
       It is easy to use, secure by default and can encrypt and decrypt files using password or encryption keys,
diff --git a/pkgs/tools/security/enchive/default.nix b/pkgs/tools/security/enchive/default.nix
index 960ef251b1cdf..8db8f466f9aea 100644
--- a/pkgs/tools/security/enchive/default.nix
+++ b/pkgs/tools/security/enchive/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Encrypted personal archives";
+    mainProgram = "enchive";
     homepage = "https://github.com/skeeto/enchive";
     license = lib.licenses.unlicense;
     platforms = lib.platforms.unix;
diff --git a/pkgs/tools/security/enum4linux-ng/default.nix b/pkgs/tools/security/enum4linux-ng/default.nix
index d30bcbf665d47..ee3ed2e8154d5 100644
--- a/pkgs/tools/security/enum4linux-ng/default.nix
+++ b/pkgs/tools/security/enum4linux-ng/default.nix
@@ -30,6 +30,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Windows/Samba enumeration tool";
+    mainProgram = "enum4linux-ng";
     longDescription = ''
       enum4linux-ng.py is a rewrite of Mark Lowe's enum4linux.pl, a tool for
       enumerating information from Windows and Samba systems.
diff --git a/pkgs/tools/security/enum4linux/default.nix b/pkgs/tools/security/enum4linux/default.nix
index b6da742dc6fad..dd054b58caa59 100644
--- a/pkgs/tools/security/enum4linux/default.nix
+++ b/pkgs/tools/security/enum4linux/default.nix
@@ -40,6 +40,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A tool for enumerating information from Windows and Samba systems";
+    mainProgram = "enum4linux";
     homepage = "https://labs.portcullis.co.uk/tools/enum4linux/";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ fishi0x01 ];
diff --git a/pkgs/tools/security/enumerepo/default.nix b/pkgs/tools/security/enumerepo/default.nix
index 31ff035950bd1..3c6849af44ff0 100644
--- a/pkgs/tools/security/enumerepo/default.nix
+++ b/pkgs/tools/security/enumerepo/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to list all public repositories for (valid) GitHub usernames";
+    mainProgram = "enumerepo";
     homepage = "https://github.com/trickest/enumerepo";
     changelog = "https://github.com/trickest/enumerepo/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/evil-winrm/default.nix b/pkgs/tools/security/evil-winrm/default.nix
index 30420c7aad685..ab406caafb65c 100644
--- a/pkgs/tools/security/evil-winrm/default.nix
+++ b/pkgs/tools/security/evil-winrm/default.nix
@@ -38,6 +38,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "WinRM shell for hacking/pentesting";
+    mainProgram = "evil-winrm";
     homepage = "https://github.com/Hackplayers/evil-winrm";
     changelog = "https://github.com/Hackplayers/evil-winrm/blob/v${version}/CHANGELOG.md";
     license = licenses.lgpl3Plus;
diff --git a/pkgs/tools/security/evtx/default.nix b/pkgs/tools/security/evtx/default.nix
index e12408d227524..92f8a29cf8200 100644
--- a/pkgs/tools/security/evtx/default.nix
+++ b/pkgs/tools/security/evtx/default.nix
@@ -23,6 +23,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Parser for the Windows XML Event Log (EVTX) format";
+    mainProgram = "evtx_dump";
     homepage = "https://github.com/omerbenamram/evtx";
     changelog = "https://github.com/omerbenamram/evtx/blob/v${version}/CHANGELOG.md";
     license = with licenses; [ asl20 /* or */ mit ];
diff --git a/pkgs/tools/security/expliot/default.nix b/pkgs/tools/security/expliot/default.nix
index 1414d7c36afd5..88fd1cf84b617 100644
--- a/pkgs/tools/security/expliot/default.nix
+++ b/pkgs/tools/security/expliot/default.nix
@@ -71,6 +71,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "IoT security testing and exploitation framework";
+    mainProgram = "expliot";
     longDescription = ''
       EXPLIoT is a Framework for security testing and exploiting IoT
       products and IoT infrastructure. It provides a set of plugins
diff --git a/pkgs/tools/security/extrude/default.nix b/pkgs/tools/security/extrude/default.nix
index 7145314fbd413..8a9710582913d 100644
--- a/pkgs/tools/security/extrude/default.nix
+++ b/pkgs/tools/security/extrude/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to analyse binaries for missing security features";
+    mainProgram = "extrude";
     homepage = "https://github.com/liamg/extrude";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/faraday-agent-dispatcher/default.nix b/pkgs/tools/security/faraday-agent-dispatcher/default.nix
index a7920f1e1cbdf..8c390f2b6f7aa 100644
--- a/pkgs/tools/security/faraday-agent-dispatcher/default.nix
+++ b/pkgs/tools/security/faraday-agent-dispatcher/default.nix
@@ -71,6 +71,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to send result from tools to the Faraday Platform";
+    mainProgram = "faraday-dispatcher";
     homepage = "https://github.com/infobyte/faraday_agent_dispatcher";
     changelog = "https://github.com/infobyte/faraday_agent_dispatcher/releases/tag/${version}";
     license = with licenses; [ gpl3Only ];
diff --git a/pkgs/tools/security/faraday-cli/default.nix b/pkgs/tools/security/faraday-cli/default.nix
index c6f1c3333a710..7e6ac5315e7db 100644
--- a/pkgs/tools/security/faraday-cli/default.nix
+++ b/pkgs/tools/security/faraday-cli/default.nix
@@ -47,6 +47,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Command Line Interface for Faraday";
+    mainProgram = "faraday-cli";
     homepage = "https://github.com/infobyte/faraday-cli";
     changelog = "https://github.com/infobyte/faraday-cli/releases/tag/${version}";
     license = with licenses; [ gpl3Only ];
diff --git a/pkgs/tools/security/ffuf/default.nix b/pkgs/tools/security/ffuf/default.nix
index e0e5976c75101..ae0a19bff0226 100644
--- a/pkgs/tools/security/ffuf/default.nix
+++ b/pkgs/tools/security/ffuf/default.nix
@@ -33,6 +33,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool for web fuzzing";
+    mainProgram = "ffuf";
     longDescription = ''
       FFUF, or “Fuzz Faster you Fool” is an open source web fuzzing tool,
       intended for discovering elements and content within web applications
diff --git a/pkgs/tools/security/fierce/default.nix b/pkgs/tools/security/fierce/default.nix
index 9b8d8735b0798..07ab18e36a661 100644
--- a/pkgs/tools/security/fierce/default.nix
+++ b/pkgs/tools/security/fierce/default.nix
@@ -33,6 +33,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "DNS reconnaissance tool for locating non-contiguous IP space";
+    mainProgram = "fierce";
     homepage = "https://github.com/mschwager/fierce";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ c0bw3b ];
diff --git a/pkgs/tools/security/fingerprintx/default.nix b/pkgs/tools/security/fingerprintx/default.nix
index 940195b4e2b51..1d04116c5724a 100644
--- a/pkgs/tools/security/fingerprintx/default.nix
+++ b/pkgs/tools/security/fingerprintx/default.nix
@@ -26,6 +26,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Standalone utility for service discovery on open ports";
+    mainProgram = "fingerprintx";
     homepage = "https://github.com/praetorian-inc/fingerprintx";
     changelog = "https://github.com/praetorian-inc/fingerprintx/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/firefox_decrypt/default.nix b/pkgs/tools/security/firefox_decrypt/default.nix
index ce41f07569fb9..9ade5976e8d81 100644
--- a/pkgs/tools/security/firefox_decrypt/default.nix
+++ b/pkgs/tools/security/firefox_decrypt/default.nix
@@ -39,6 +39,7 @@ buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/unode/firefox_decrypt";
     description = "A tool to extract passwords from profiles of Mozilla Firefox and derivates";
+    mainProgram = "firefox_decrypt";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ schnusch ];
   };
diff --git a/pkgs/tools/security/fpm2/default.nix b/pkgs/tools/security/fpm2/default.nix
index 69e6c7f02817f..68781d05dc689 100644
--- a/pkgs/tools/security/fpm2/default.nix
+++ b/pkgs/tools/security/fpm2/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "GTK2 port from Figaro's Password Manager originally developed by John Conneely, with some new enhancements";
+    mainProgram = "fpm2";
     homepage    = "https://als.regnet.cz/fpm2/";
     license     = licenses.gpl2;
     platforms   = platforms.linux;
diff --git a/pkgs/tools/security/freeze/default.nix b/pkgs/tools/security/freeze/default.nix
index a8a8dbb593460..28ef21657009c 100644
--- a/pkgs/tools/security/freeze/default.nix
+++ b/pkgs/tools/security/freeze/default.nix
@@ -28,6 +28,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Payload toolkit for bypassing EDRs";
+    mainProgram = "freeze";
     homepage = "https://github.com/optiv/Freeze";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/fulcio/default.nix b/pkgs/tools/security/fulcio/default.nix
index 17bd273c0a304..46b533e4e68a7 100644
--- a/pkgs/tools/security/fulcio/default.nix
+++ b/pkgs/tools/security/fulcio/default.nix
@@ -67,6 +67,7 @@ buildGoModule rec {
     homepage = "https://github.com/sigstore/fulcio";
     changelog = "https://github.com/sigstore/fulcio/releases/tag/v${version}";
     description = "A Root-CA for code signing certs - issuing certificates based on an OIDC email address";
+    mainProgram = "fulcio";
     longDescription = ''
       Fulcio is a free code signing Certificate Authority, built to make
       short-lived certificates available to anyone. Based on an Open ID Connect
diff --git a/pkgs/tools/security/galer/default.nix b/pkgs/tools/security/galer/default.nix
index bfe7cb18d1eb7..852a91a8fc988 100644
--- a/pkgs/tools/security/galer/default.nix
+++ b/pkgs/tools/security/galer/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to fetch URLs from HTML attributes";
+    mainProgram = "galer";
     homepage = "https://github.com/dwisiswant0/galer";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/gau/default.nix b/pkgs/tools/security/gau/default.nix
index eea5df85162c9..dc4676a1c987f 100644
--- a/pkgs/tools/security/gau/default.nix
+++ b/pkgs/tools/security/gau/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to fetch known URLs";
+    mainProgram = "gau";
     longDescription = ''
       getallurls (gau) fetches known URLs from various sources for any
       given domain.
diff --git a/pkgs/tools/security/gencfsm/default.nix b/pkgs/tools/security/gencfsm/default.nix
index 33f6297905ea9..537b2caf45b39 100644
--- a/pkgs/tools/security/gencfsm/default.nix
+++ b/pkgs/tools/security/gencfsm/default.nix
@@ -50,6 +50,7 @@ stdenv.mkDerivation rec {
     homepage = "http://www.libertyzero.com/GEncfsM/";
     downloadPage = "https://launchpad.net/gencfsm/";
     description = "EncFS manager and mounter with GNOME3 integration";
+    mainProgram = "gnome-encfs-manager";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
     maintainers = [ maintainers.spacefrogg ];
diff --git a/pkgs/tools/security/genpass/default.nix b/pkgs/tools/security/genpass/default.nix
index 9565bf80c9505..243132bb263dd 100644
--- a/pkgs/tools/security/genpass/default.nix
+++ b/pkgs/tools/security/genpass/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A simple yet robust commandline random password generator";
+    mainProgram = "genpass";
     homepage = "https://sr.ht/~cyplo/genpass/";
     license = licenses.agpl3Only;
     maintainers = with maintainers; [ cyplo ];
diff --git a/pkgs/tools/security/ggshield/default.nix b/pkgs/tools/security/ggshield/default.nix
index 3bf136683333a..eb0c5c9d2a95e 100644
--- a/pkgs/tools/security/ggshield/default.nix
+++ b/pkgs/tools/security/ggshield/default.nix
@@ -77,6 +77,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to find and fix various types of hardcoded secrets and infrastructure-as-code misconfigurations";
+    mainProgram = "ggshield";
     homepage = "https://github.com/GitGuardian/ggshield";
     changelog = "https://github.com/GitGuardian/ggshield/blob/${version}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/pkgs/tools/security/ghauri/default.nix b/pkgs/tools/security/ghauri/default.nix
index 6e7ddeb3cd968..fd4a0fa9903f8 100644
--- a/pkgs/tools/security/ghauri/default.nix
+++ b/pkgs/tools/security/ghauri/default.nix
@@ -31,6 +31,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool for detecting and exploiting SQL injection security flaws";
+    mainProgram = "ghauri";
     homepage = "https://github.com/r0oth3x49/ghauri";
     changelog = "https://github.com/r0oth3x49/ghauri/releases/tag/${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/ghdorker/default.nix b/pkgs/tools/security/ghdorker/default.nix
index 28336c30ea151..f00e9a60df81f 100644
--- a/pkgs/tools/security/ghdorker/default.nix
+++ b/pkgs/tools/security/ghdorker/default.nix
@@ -29,6 +29,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Extensible GitHub dorking tool";
+    mainProgram = "ghdorker";
     homepage = "https://github.com/dtaivpp/ghdorker";
     license = with licenses; [ asl20 ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/ghidra/build.nix b/pkgs/tools/security/ghidra/build.nix
index da164c94b0b5b..8b9f2aaca0077 100644
--- a/pkgs/tools/security/ghidra/build.nix
+++ b/pkgs/tools/security/ghidra/build.nix
@@ -159,6 +159,7 @@ in stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A software reverse engineering (SRE) suite of tools developed by NSA's Research Directorate in support of the Cybersecurity mission";
+    mainProgram = "ghidra";
     homepage = "https://ghidra-sre.org/";
     platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
     sourceProvenance = with sourceTypes; [
diff --git a/pkgs/tools/security/ghidra/default.nix b/pkgs/tools/security/ghidra/default.nix
index 5f9346937b36c..2337b36eb7c8e 100644
--- a/pkgs/tools/security/ghidra/default.nix
+++ b/pkgs/tools/security/ghidra/default.nix
@@ -70,6 +70,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A software reverse engineering (SRE) suite of tools developed by NSA's Research Directorate in support of the Cybersecurity mission";
+    mainProgram = "ghidra";
     homepage = "https://github.com/NationalSecurityAgency/ghidra";
     platforms = [ "x86_64-linux" "x86_64-darwin" ];
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
diff --git a/pkgs/tools/security/ghost/default.nix b/pkgs/tools/security/ghost/default.nix
index 124caef45c209..d645556c87be0 100644
--- a/pkgs/tools/security/ghost/default.nix
+++ b/pkgs/tools/security/ghost/default.nix
@@ -27,6 +27,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Android post-exploitation framework";
+    mainProgram = "ghost";
     homepage = "https://github.com/EntySec/ghost";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/gitjacker/default.nix b/pkgs/tools/security/gitjacker/default.nix
index c233032d9359d..5303e169e8dd7 100644
--- a/pkgs/tools/security/gitjacker/default.nix
+++ b/pkgs/tools/security/gitjacker/default.nix
@@ -30,6 +30,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Leak git repositories from misconfigured websites";
+    mainProgram = "gitjacker";
     longDescription = ''
       Gitjacker downloads git repositories and extracts their contents
       from sites where the .git directory has been mistakenly uploaded.
diff --git a/pkgs/tools/security/gnupg-pkcs11-scd/default.nix b/pkgs/tools/security/gnupg-pkcs11-scd/default.nix
index f7c22cddb5cbf..76cc2639bf90e 100644
--- a/pkgs/tools/security/gnupg-pkcs11-scd/default.nix
+++ b/pkgs/tools/security/gnupg-pkcs11-scd/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A smart-card daemon to enable the use of PKCS#11 tokens with GnuPG";
+    mainProgram = "gnupg-pkcs11-scd";
     longDescription = ''
     gnupg-pkcs11 is a project to implement a BSD-licensed smart-card
     daemon to enable the use of PKCS#11 tokens with GnuPG.
diff --git a/pkgs/tools/security/go-cve-search/default.nix b/pkgs/tools/security/go-cve-search/default.nix
index d4b231c63a185..2e521de96ed35 100644
--- a/pkgs/tools/security/go-cve-search/default.nix
+++ b/pkgs/tools/security/go-cve-search/default.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A lightweight CVE search tool";
+    mainProgram = "go-cve-search";
     longDescription = ''
       go-cve-search is a lightweight tool to search CVE (Common Vulnerabilities
       and Exposures).
diff --git a/pkgs/tools/security/go-exploitdb/default.nix b/pkgs/tools/security/go-exploitdb/default.nix
index d400cd22a6f05..2ca0c1b1e299c 100644
--- a/pkgs/tools/security/go-exploitdb/default.nix
+++ b/pkgs/tools/security/go-exploitdb/default.nix
@@ -24,6 +24,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool for searching Exploits from Exploit Databases, etc";
+    mainProgram = "go-exploitdb";
     homepage = "https://github.com/vulsio/go-exploitdb";
     changelog = "https://github.com/vulsio/go-exploitdb/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/goblob/default.nix b/pkgs/tools/security/goblob/default.nix
index 401a655d65ab0..a1ffe5b4a9c81 100644
--- a/pkgs/tools/security/goblob/default.nix
+++ b/pkgs/tools/security/goblob/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Enumeration tool for publicly exposed Azure Storage blobs";
+    mainProgram = "goblob";
     homepage = "https://github.com/Macmod/goblob";
     changelog = "https://github.com/Macmod/goblob/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/gobuster/default.nix b/pkgs/tools/security/gobuster/default.nix
index 878fa576b4cd7..bbc4b02c2b168 100644
--- a/pkgs/tools/security/gobuster/default.nix
+++ b/pkgs/tools/security/gobuster/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool used to brute-force URIs, DNS subdomains, Virtual Host names on target web servers";
+    mainProgram = "gobuster";
     homepage = "https://github.com/OJ/gobuster";
     changelog = "https://github.com/OJ/gobuster/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/gomapenum/default.nix b/pkgs/tools/security/gomapenum/default.nix
index 6e1da08d14f0a..8171d5ef57e83 100644
--- a/pkgs/tools/security/gomapenum/default.nix
+++ b/pkgs/tools/security/gomapenum/default.nix
@@ -22,6 +22,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tools for user enumeration and password bruteforce";
+    mainProgram = "gomapenum";
     homepage = "https://github.com/nodauf/GoMapEnum";
     license = with licenses; [ gpl3Only ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/gorilla-bin/default.nix b/pkgs/tools/security/gorilla-bin/default.nix
index 388996c62fb51..898abbbd25a44 100644
--- a/pkgs/tools/security/gorilla-bin/default.nix
+++ b/pkgs/tools/security/gorilla-bin/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Password Gorilla is a Tk based password manager";
+    mainProgram = "gorilla";
     homepage = "https://github.com/zdia/gorilla/wiki";
     maintainers = [ lib.maintainers.namore ];
     platforms = [ "x86_64-linux" ];
diff --git a/pkgs/tools/security/gospider/default.nix b/pkgs/tools/security/gospider/default.nix
index 91e940ec87eb0..d78089f6072ec 100644
--- a/pkgs/tools/security/gospider/default.nix
+++ b/pkgs/tools/security/gospider/default.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Fast web spider written in Go";
+    mainProgram = "gospider";
     longDescription = ''
       GoSpider is a fast web crawler that parses sitemap.xml and robots.txt file.
       It can generate and verify link from JavaScript files, extract URLs from
diff --git a/pkgs/tools/security/gotestwaf/default.nix b/pkgs/tools/security/gotestwaf/default.nix
index c9fbe9f699ebe..5a807b0a08c70 100644
--- a/pkgs/tools/security/gotestwaf/default.nix
+++ b/pkgs/tools/security/gotestwaf/default.nix
@@ -40,6 +40,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool for API and OWASP attack simulation";
+    mainProgram = "gotestwaf";
     homepage = "https://github.com/wallarm/gotestwaf";
     changelog = "https://github.com/wallarm/gotestwaf/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/gotrue/default.nix b/pkgs/tools/security/gotrue/default.nix
index 112e0c4ddc6d1..06b3560dec564 100644
--- a/pkgs/tools/security/gotrue/default.nix
+++ b/pkgs/tools/security/gotrue/default.nix
@@ -25,6 +25,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/netlify/gotrue";
     description = "An SWT based API for managing users and issuing SWT tokens";
+    mainProgram = "gotrue";
     changelog = "https://github.com/netlify/gotrue/releases/tag/v${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ urandom ];
diff --git a/pkgs/tools/security/gotrue/supabase.nix b/pkgs/tools/security/gotrue/supabase.nix
index 36ce6d72ceb80..9020a0c8c9ba2 100644
--- a/pkgs/tools/security/gotrue/supabase.nix
+++ b/pkgs/tools/security/gotrue/supabase.nix
@@ -36,6 +36,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/supabase/gotrue";
     description = "A JWT based API for managing users and issuing JWT tokens";
+    mainProgram = "gotrue";
     changelog = "https://github.com/supabase/gotrue/releases/tag/v${version}";
     license = licenses.mit;
     maintainers = with maintainers; [ urandom ];
diff --git a/pkgs/tools/security/goverview/default.nix b/pkgs/tools/security/goverview/default.nix
index 02038bf27b99a..6c55f069d2589 100644
--- a/pkgs/tools/security/goverview/default.nix
+++ b/pkgs/tools/security/goverview/default.nix
@@ -36,6 +36,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to get an overview of the list of URLs";
+    mainProgram = "goverview";
     homepage = "https://github.com/j3ssie/goverview";
     changelog = "https://github.com/j3ssie/goverview/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/govulncheck/default.nix b/pkgs/tools/security/govulncheck/default.nix
index dd45d054aeeb8..84aeaf51b947a 100644
--- a/pkgs/tools/security/govulncheck/default.nix
+++ b/pkgs/tools/security/govulncheck/default.nix
@@ -41,6 +41,7 @@ buildGoModule rec {
     homepage = "https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck";
     downloadPage = "https://github.com/golang/vuln";
     description = "The database client and tools for the Go vulnerability database, also known as vuln";
+    mainProgram = "govulncheck";
     longDescription = ''
       Govulncheck reports known vulnerabilities that affect Go code. It uses
       static analysis of source code or a binary's symbol table to narrow down
diff --git a/pkgs/tools/security/gowitness/default.nix b/pkgs/tools/security/gowitness/default.nix
index bd9ab97a0f384..ab31281bbd283 100644
--- a/pkgs/tools/security/gowitness/default.nix
+++ b/pkgs/tools/security/gowitness/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Web screenshot utility";
+    mainProgram = "gowitness";
     homepage = "https://github.com/sensepost/gowitness";
     changelog = "https://github.com/sensepost/gowitness/releases/tag/${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/graphinder/default.nix b/pkgs/tools/security/graphinder/default.nix
index f0256dff7cbe3..541e7ab3189d7 100644
--- a/pkgs/tools/security/graphinder/default.nix
+++ b/pkgs/tools/security/graphinder/default.nix
@@ -48,6 +48,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to find GraphQL endpoints using subdomain enumeration";
+    mainProgram = "graphinder";
     homepage = "https://github.com/Escape-Technologies/graphinder";
     changelog = "https://github.com/Escape-Technologies/graphinder/releases/tag/v${version}";
     license = with licenses; [ mit ];
diff --git a/pkgs/tools/security/graphqlmap/default.nix b/pkgs/tools/security/graphqlmap/default.nix
index 84b72d3b6a16c..a2c0904b4a983 100644
--- a/pkgs/tools/security/graphqlmap/default.nix
+++ b/pkgs/tools/security/graphqlmap/default.nix
@@ -28,6 +28,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to interact with a GraphQL endpoint";
+    mainProgram = "graphqlmap";
     homepage = "https://github.com/swisskyrepo/GraphQLmap";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/graphw00f/default.nix b/pkgs/tools/security/graphw00f/default.nix
index 7f1d5ede3e718..9edcf7c1f939f 100644
--- a/pkgs/tools/security/graphw00f/default.nix
+++ b/pkgs/tools/security/graphw00f/default.nix
@@ -30,6 +30,7 @@ python3.pkgs.buildPythonApplication rec {
   '';
   meta = with lib; {
     description = "GraphQL Server Engine Fingerprinting utility";
+    mainProgram = "graphw00f";
     homepage = "https://github.com/dolevf/graphw00f";
     license = licenses.bsd3;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/grype/default.nix b/pkgs/tools/security/grype/default.nix
index d602d1fc6e733..db9a24ecc4293 100644
--- a/pkgs/tools/security/grype/default.nix
+++ b/pkgs/tools/security/grype/default.nix
@@ -109,6 +109,7 @@ buildGoModule rec {
     homepage = "https://github.com/anchore/grype";
     changelog = "https://github.com/anchore/grype/releases/tag/v${version}";
     description = "Vulnerability scanner for container images and filesystems";
+    mainProgram = "grype";
     longDescription = ''
       As a vulnerability scanner grype is able to scan the contents of a
       container image or filesystem to find known vulnerabilities.
diff --git a/pkgs/tools/security/hakrawler/default.nix b/pkgs/tools/security/hakrawler/default.nix
index 0577ceb8c103c..58481390f2cc8 100644
--- a/pkgs/tools/security/hakrawler/default.nix
+++ b/pkgs/tools/security/hakrawler/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Web crawler for the discovery of endpoints and assets";
+    mainProgram = "hakrawler";
     homepage = "https://github.com/hakluke/hakrawler";
     longDescription =  ''
       Simple, fast web crawler designed for easy, quick discovery of endpoints
diff --git a/pkgs/tools/security/hash_extender/default.nix b/pkgs/tools/security/hash_extender/default.nix
index b90dff6cd17cb..10f82ca77e71b 100644
--- a/pkgs/tools/security/hash_extender/default.nix
+++ b/pkgs/tools/security/hash_extender/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Tool to automate hash length extension attacks";
+    mainProgram = "hash_extender";
     homepage = "https://github.com/iagox86/hash_extender";
     license = licenses.bsd3;
     maintainers = with maintainers; [ oxzi ];
diff --git a/pkgs/tools/security/hashcat/default.nix b/pkgs/tools/security/hashcat/default.nix
index 2e8370be85fe2..627709d123a1c 100644
--- a/pkgs/tools/security/hashcat/default.nix
+++ b/pkgs/tools/security/hashcat/default.nix
@@ -81,6 +81,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Fast password cracker";
+    mainProgram = "hashcat";
     homepage    = "https://hashcat.net/hashcat/";
     license     = licenses.mit;
     platforms   = platforms.unix;
diff --git a/pkgs/tools/security/hashrat/default.nix b/pkgs/tools/security/hashrat/default.nix
index 7923021f83555..38014988dd670 100644
--- a/pkgs/tools/security/hashrat/default.nix
+++ b/pkgs/tools/security/hashrat/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Command-line hash-generation utility";
+    mainProgram = "hashrat";
     longDescription = ''
       Hashing tool supporting md5,sha1,sha256,sha512,whirlpool,jh and hmac versions of these.
       Includes recursive file hashing and other features.
diff --git a/pkgs/tools/security/haveged/default.nix b/pkgs/tools/security/haveged/default.nix
index c28ae465e0eb6..c30469c3a3d93 100644
--- a/pkgs/tools/security/haveged/default.nix
+++ b/pkgs/tools/security/haveged/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A simple entropy daemon";
+    mainProgram = "haveged";
     longDescription = ''
       The haveged project is an attempt to provide an easy-to-use, unpredictable
       random number generator based upon an adaptation of the HAVEGE algorithm.
diff --git a/pkgs/tools/security/hfinger/default.nix b/pkgs/tools/security/hfinger/default.nix
index 900f7402451d2..baca9ed5ddd27 100644
--- a/pkgs/tools/security/hfinger/default.nix
+++ b/pkgs/tools/security/hfinger/default.nix
@@ -36,6 +36,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Fingerprinting tool for HTTP requests";
+    mainProgram = "hfinger";
     homepage = "https://github.com/CERT-Polska/hfinger";
     changelog = "https://github.com/CERT-Polska/hfinger/releases/tag/v${version}";
     license = with licenses; [ gpl3Only ];
diff --git a/pkgs/tools/security/holehe/default.nix b/pkgs/tools/security/holehe/default.nix
index ed8146fec6883..872cde1f8f875 100644
--- a/pkgs/tools/security/holehe/default.nix
+++ b/pkgs/tools/security/holehe/default.nix
@@ -39,6 +39,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "CLI to check if the mail is used on different sites";
+    mainProgram = "holehe";
     homepage = "https://github.com/megadose/holehe";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/honeytrap/default.nix b/pkgs/tools/security/honeytrap/default.nix
index e0252d06f1540..3e311c5768640 100644
--- a/pkgs/tools/security/honeytrap/default.nix
+++ b/pkgs/tools/security/honeytrap/default.nix
@@ -21,6 +21,7 @@ buildGoModule {
 
   meta = with lib; {
     description = "Advanced Honeypot framework";
+    mainProgram = "honeytrap";
     homepage = "https://github.com/honeytrap/honeytrap";
     license = licenses.asl20;
     maintainers = [ ];
diff --git a/pkgs/tools/security/hstsparser/default.nix b/pkgs/tools/security/hstsparser/default.nix
index 8b4e4882f556c..6c30190507199 100644
--- a/pkgs/tools/security/hstsparser/default.nix
+++ b/pkgs/tools/security/hstsparser/default.nix
@@ -29,6 +29,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to parse Firefox and Chrome HSTS databases into forensic artifacts";
+    mainProgram = "hstsparser";
     homepage = "https://github.com/thebeanogamer/hstsparser";
     changelog = "https://github.com/thebeanogamer/hstsparser/releases/tag/${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/httpdump/default.nix b/pkgs/tools/security/httpdump/default.nix
index d745adc50d5d8..2a8e754977824 100644
--- a/pkgs/tools/security/httpdump/default.nix
+++ b/pkgs/tools/security/httpdump/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Parse and display HTTP traffic from network device or pcap file";
+    mainProgram = "httpdump";
     homepage = "https://github.com/hsiafan/httpdump";
     license = with licenses; [ bsd2 ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/httpx/default.nix b/pkgs/tools/security/httpx/default.nix
index 3fb5371429586..80a7404be0026 100644
--- a/pkgs/tools/security/httpx/default.nix
+++ b/pkgs/tools/security/httpx/default.nix
@@ -30,6 +30,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Fast and multi-purpose HTTP toolkit";
+    mainProgram = "httpx";
     longDescription = ''
       httpx is a fast and multi-purpose HTTP toolkit allow to run multiple
       probers using retryablehttp library, it is designed to maintain the
diff --git a/pkgs/tools/security/iaito/default.nix b/pkgs/tools/security/iaito/default.nix
index 5812b1e6cfeab..2fc43ad670551 100644
--- a/pkgs/tools/security/iaito/default.nix
+++ b/pkgs/tools/security/iaito/default.nix
@@ -87,6 +87,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "An official graphical interface of radare2";
+    mainProgram = "iaito";
     longDescription = ''
       iaito is the official graphical interface of radare2. It's the
       continuation of Cutter for radare2 after the Rizin fork.
diff --git a/pkgs/tools/security/ibm-sw-tpm2/default.nix b/pkgs/tools/security/ibm-sw-tpm2/default.nix
index 9a13c21030169..969a758d18d4e 100644
--- a/pkgs/tools/security/ibm-sw-tpm2/default.nix
+++ b/pkgs/tools/security/ibm-sw-tpm2/default.nix
@@ -55,6 +55,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "IBM's Software TPM 2.0, an implementation of the TCG TPM 2.0 specification";
+    mainProgram = "tpm_server";
     homepage = "https://sourceforge.net/projects/ibmswtpm2/";
     platforms = platforms.linux ++ platforms.darwin;
     maintainers = with maintainers; [ delroth ];
diff --git a/pkgs/tools/security/ifdnfc/default.nix b/pkgs/tools/security/ifdnfc/default.nix
index 34c140023ac25..ddc48085860b0 100644
--- a/pkgs/tools/security/ifdnfc/default.nix
+++ b/pkgs/tools/security/ifdnfc/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "PC/SC IFD Handler based on libnfc";
+    mainProgram = "ifdnfc-activate";
     longDescription =
     '' libnfc Interface Plugin to be used in <code>services.pcscd.plugins</code>.
        It provides support for all readers which are not supported by ccid but by libnfc.
diff --git a/pkgs/tools/security/imdshift/default.nix b/pkgs/tools/security/imdshift/default.nix
index c33e0878cd4dc..a4d7e46e7c280 100644
--- a/pkgs/tools/security/imdshift/default.nix
+++ b/pkgs/tools/security/imdshift/default.nix
@@ -31,6 +31,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to migrate workloads to IMDSv2";
+    mainProgram = "imdshift";
     homepage = "https://github.com/ayushpriya10/IMDShift";
     changelog = "https://github.com/ayushpriya10/IMDShift/releases/tag/v${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/inql/default.nix b/pkgs/tools/security/inql/default.nix
index 272e28292ac89..6f9a6e29f2e0e 100644
--- a/pkgs/tools/security/inql/default.nix
+++ b/pkgs/tools/security/inql/default.nix
@@ -33,6 +33,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Security testing tool for GraphQL";
+    mainProgram = "inql";
     homepage = "https://github.com/doyensec/inql";
     changelog = "https://github.com/doyensec/inql/releases/tag/v${version}";
     license = with licenses; [ asl20 ];
diff --git a/pkgs/tools/security/ioccheck/default.nix b/pkgs/tools/security/ioccheck/default.nix
index 2f25aa4ea8978..3f899c33b5577 100644
--- a/pkgs/tools/security/ioccheck/default.nix
+++ b/pkgs/tools/security/ioccheck/default.nix
@@ -88,6 +88,7 @@ in py.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool for researching IOCs";
+    mainProgram = "ioccheck";
     homepage = "https://github.com/ranguli/ioccheck";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/ipscan/default.nix b/pkgs/tools/security/ipscan/default.nix
index 72a44a4ab8a15..f61944fe63ead 100644
--- a/pkgs/tools/security/ipscan/default.nix
+++ b/pkgs/tools/security/ipscan/default.nix
@@ -43,6 +43,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Angry IP Scanner - fast and friendly network scanner";
+    mainProgram = "ipscan";
     homepage = "https://angryip.org";
     downloadPage = "https://github.com/angryip/ipscan/releases/tag/${version}";
     changelog = "https://github.com/angryip/ipscan/blob/${version}/CHANGELOG";
diff --git a/pkgs/tools/security/isolate/default.nix b/pkgs/tools/security/isolate/default.nix
index abc491d95c700..b745af75d8b7f 100644
--- a/pkgs/tools/security/isolate/default.nix
+++ b/pkgs/tools/security/isolate/default.nix
@@ -42,6 +42,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Sandbox for securely executing untrusted programs";
+    mainProgram = "isolate";
     homepage = "https://github.com/ioi/isolate";
     license = lib.licenses.gpl2Plus;
     maintainers = with lib.maintainers; [ virchau13 ];
diff --git a/pkgs/tools/security/jaeles/default.nix b/pkgs/tools/security/jaeles/default.nix
index 5ab635b35ac28..7c652995f6ff6 100644
--- a/pkgs/tools/security/jaeles/default.nix
+++ b/pkgs/tools/security/jaeles/default.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool for automated Web application testing";
+    mainProgram = "jaeles";
     homepage = "https://github.com/jaeles-project/jaeles";
     changelog = "https://github.com/jaeles-project/jaeles/releases/tag/beta-v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/jd-gui/default.nix b/pkgs/tools/security/jd-gui/default.nix
index 2663af4ed6200..7cc714d967737 100644
--- a/pkgs/tools/security/jd-gui/default.nix
+++ b/pkgs/tools/security/jd-gui/default.nix
@@ -122,6 +122,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Fast Java Decompiler with powerful GUI";
+    mainProgram = "jd-gui";
     homepage    = "https://java-decompiler.github.io/";
     sourceProvenance = with sourceTypes; [
       fromSource
diff --git a/pkgs/tools/security/joincap/default.nix b/pkgs/tools/security/joincap/default.nix
index 1589602ac0628..c37226a6f3271 100644
--- a/pkgs/tools/security/joincap/default.nix
+++ b/pkgs/tools/security/joincap/default.nix
@@ -28,6 +28,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Merge multiple pcap files together, gracefully";
+    mainProgram = "joincap";
     homepage = "https://github.com/assafmo/joincap";
     changelog = "https://github.com/assafmo/joincap/blob/${version}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/pkgs/tools/security/jsubfinder/default.nix b/pkgs/tools/security/jsubfinder/default.nix
index 328c81143d1c4..c989c352ea053 100644
--- a/pkgs/tools/security/jsubfinder/default.nix
+++ b/pkgs/tools/security/jsubfinder/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to search for in Javascript hidden subdomains and secrets";
+    mainProgram = "jsubfinder";
     homepage = "https://github.com/ThreatUnkown/jsubfinder";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/jwx/default.nix b/pkgs/tools/security/jwx/default.nix
index 224962825888f..ea8e69fad109b 100644
--- a/pkgs/tools/security/jwx/default.nix
+++ b/pkgs/tools/security/jwx/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = " Implementation of various JWx (Javascript Object Signing and Encryption/JOSE) technologies";
+    mainProgram = "jwx";
     homepage = "https://github.com/lestrrat-go/jwx";
     license = licenses.mit;
     maintainers = with maintainers; [ arianvp flokli ];
diff --git a/pkgs/tools/security/katana/default.nix b/pkgs/tools/security/katana/default.nix
index 1f4a7300e228c..fef276e414c95 100644
--- a/pkgs/tools/security/katana/default.nix
+++ b/pkgs/tools/security/katana/default.nix
@@ -27,6 +27,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A next-generation crawling and spidering framework";
+    mainProgram = "katana";
     homepage = "https://github.com/projectdiscovery/katana";
     changelog = "https://github.com/projectdiscovery/katana/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/kbs2/default.nix b/pkgs/tools/security/kbs2/default.nix
index 3e9a726651a6a..2592fe444d8df 100644
--- a/pkgs/tools/security/kbs2/default.nix
+++ b/pkgs/tools/security/kbs2/default.nix
@@ -47,6 +47,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A secret manager backed by age";
+    mainProgram = "kbs2";
     homepage = "https://github.com/woodruffw/kbs2";
     changelog = "https://github.com/woodruffw/kbs2/blob/v${version}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/pkgs/tools/security/kdigger/default.nix b/pkgs/tools/security/kdigger/default.nix
index 82070c89447ae..dc700bc8e84a9 100644
--- a/pkgs/tools/security/kdigger/default.nix
+++ b/pkgs/tools/security/kdigger/default.nix
@@ -61,6 +61,7 @@ buildGoModule rec {
     homepage = "https://github.com/quarkslab/kdigger";
     changelog = "https://github.com/quarkslab/kdigger/releases/tag/v${version}";
     description = "An in-pod context discovery tool for Kubernetes penetration testing";
+    mainProgram = "kdigger";
     longDescription = ''
       kdigger, short for "Kubernetes digger", is a context discovery tool for
       Kubernetes penetration testing. This tool is a compilation of various
diff --git a/pkgs/tools/security/keepwn/default.nix b/pkgs/tools/security/keepwn/default.nix
index bb856c80710b8..1d9c740960f32 100644
--- a/pkgs/tools/security/keepwn/default.nix
+++ b/pkgs/tools/security/keepwn/default.nix
@@ -43,6 +43,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to automate KeePass discovery and secret extraction";
+    mainProgram = "keepwn";
     homepage = "https://github.com/Orange-Cyberdefense/KeePwn";
     changelog = "https://github.com/Orange-Cyberdefense/KeePwn/releases/tag/${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/kerbrute/default.nix b/pkgs/tools/security/kerbrute/default.nix
index dbadde6129d84..c020e0e5c4bc2 100644
--- a/pkgs/tools/security/kerbrute/default.nix
+++ b/pkgs/tools/security/kerbrute/default.nix
@@ -23,6 +23,7 @@ python3.pkgs.buildPythonApplication rec {
   meta = {
     homepage = "https://github.com/TarlogicSecurity/kerbrute";
     description = "Kerberos bruteforce utility";
+    mainProgram = "kerbrute";
     license = lib.licenses.gpl3Only;
     maintainers = with lib.maintainers; [ applePrincess ];
   };
diff --git a/pkgs/tools/security/kestrel/default.nix b/pkgs/tools/security/kestrel/default.nix
index f3d40b5ade0cc..a94b412e67ee9 100644
--- a/pkgs/tools/security/kestrel/default.nix
+++ b/pkgs/tools/security/kestrel/default.nix
@@ -28,6 +28,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "File encryption done right";
+    mainProgram = "kestrel";
     longDescription = "
       Kestrel is a data-at-rest file encryption program
       that lets you encrypt files to anyone with a public key.
diff --git a/pkgs/tools/security/keybase/gui.nix b/pkgs/tools/security/keybase/gui.nix
index 8541b02d583ef..577e91c24e59d 100644
--- a/pkgs/tools/security/keybase/gui.nix
+++ b/pkgs/tools/security/keybase/gui.nix
@@ -109,6 +109,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://www.keybase.io/";
     description = "The Keybase official GUI";
+    mainProgram = "keybase-gui";
     platforms = [ "x86_64-linux" ];
     maintainers = with maintainers; [ avaq rvolosatovs puffnfresh np Br1ght0ne shofius ];
     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
diff --git a/pkgs/tools/security/keycard-cli/default.nix b/pkgs/tools/security/keycard-cli/default.nix
index 851a0dac9031c..26c1d7934fbb5 100644
--- a/pkgs/tools/security/keycard-cli/default.nix
+++ b/pkgs/tools/security/keycard-cli/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A command line tool and shell to manage keycards";
+    mainProgram = "keycard-cli";
     homepage = "https://keycard.status.im";
     license = licenses.mpl20;
     maintainers = [ maintainers.zimbatm ];
diff --git a/pkgs/tools/security/keyscope/default.nix b/pkgs/tools/security/keyscope/default.nix
index 31d97256f0e7f..928daf4b23034 100644
--- a/pkgs/tools/security/keyscope/default.nix
+++ b/pkgs/tools/security/keyscope/default.nix
@@ -41,6 +41,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A key and secret workflow (validation, invalidation, etc.) tool";
+    mainProgram = "keyscope";
     homepage = "https://github.com/spectralops/keyscope";
     changelog = "https://github.com/spectralops/keyscope/blob/v${version}/CHANGELOG.md";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/kiterunner/default.nix b/pkgs/tools/security/kiterunner/default.nix
index 5f73ba055902c..f059eeb411539 100644
--- a/pkgs/tools/security/kiterunner/default.nix
+++ b/pkgs/tools/security/kiterunner/default.nix
@@ -27,6 +27,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Contextual content discovery tool";
+    mainProgram = "kiterunner";
     longDescription = ''
       Kiterunner is a tool that is capable of not only performing traditional
       content discovery at lightning fast speeds, but also bruteforcing routes
diff --git a/pkgs/tools/security/knockpy/default.nix b/pkgs/tools/security/knockpy/default.nix
index 3bd90b799e21a..6d4e80ec98c23 100644
--- a/pkgs/tools/security/knockpy/default.nix
+++ b/pkgs/tools/security/knockpy/default.nix
@@ -43,6 +43,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to scan subdomains";
+    mainProgram = "knockpy";
     homepage = "https://github.com/guelfoweb/knock";
     changelog = "https://github.com/guelfoweb/knock/releases/tag/${version}";
     license = with licenses; [ gpl3Only ];
diff --git a/pkgs/tools/security/knowsmore/default.nix b/pkgs/tools/security/knowsmore/default.nix
index d9a806ef2a58f..f73ae1032efaa 100644
--- a/pkgs/tools/security/knowsmore/default.nix
+++ b/pkgs/tools/security/knowsmore/default.nix
@@ -47,6 +47,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool for pentesting Microsoft Active Directory";
+    mainProgram = "knowsmore";
     homepage = "https://github.com/helviojunior/knowsmore";
     changelog = "https://github.com/helviojunior/knowsmore/releases/tag/v${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/kpcli/default.nix b/pkgs/tools/security/kpcli/default.nix
index 3ca03ee3ca105..0509663af1aab 100644
--- a/pkgs/tools/security/kpcli/default.nix
+++ b/pkgs/tools/security/kpcli/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "KeePass Command Line Interface";
+    mainProgram = "kpcli";
     longDescription = ''
       KeePass Command Line Interface (CLI) / interactive shell.
       Use this program to access and manage your KeePass 1.x or 2.x databases from a Unix-like command line.
diff --git a/pkgs/tools/security/kube-bench/default.nix b/pkgs/tools/security/kube-bench/default.nix
index 673dde4a58a19..4e539fa96dd5b 100644
--- a/pkgs/tools/security/kube-bench/default.nix
+++ b/pkgs/tools/security/kube-bench/default.nix
@@ -43,6 +43,7 @@ buildGoModule rec {
     homepage = "https://github.com/aquasecurity/kube-bench";
     changelog = "https://github.com/aquasecurity/kube-bench/releases/tag/v${version}";
     description = "Checks whether Kubernetes is deployed according to security best practices as defined in the CIS Kubernetes Benchmark";
+    mainProgram = "kube-bench";
     license = licenses.asl20;
     maintainers = with maintainers; [ jk ];
   };
diff --git a/pkgs/tools/security/kubeaudit/default.nix b/pkgs/tools/security/kubeaudit/default.nix
index 135d29c272232..f1b673d2de709 100644
--- a/pkgs/tools/security/kubeaudit/default.nix
+++ b/pkgs/tools/security/kubeaudit/default.nix
@@ -25,6 +25,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Audit tool for Kubernetes";
+    mainProgram = "kubeaudit";
     homepage = "https://github.com/Shopify/kubeaudit";
     changelog = "https://github.com/Shopify/kubeaudit/releases/tag/v${version}";
     license = with licenses; [ mit ];
diff --git a/pkgs/tools/security/kubeclarity/default.nix b/pkgs/tools/security/kubeclarity/default.nix
index 4aed36bbeaa23..38de010dd9319 100644
--- a/pkgs/tools/security/kubeclarity/default.nix
+++ b/pkgs/tools/security/kubeclarity/default.nix
@@ -41,6 +41,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Kubernetes runtime scanner";
+    mainProgram = "kubeclarity";
     longDescription = ''
       KubeClarity is a vulnerabilities scanning and CIS Docker benchmark tool that
       allows users to get an accurate and immediate risk assessment of their
diff --git a/pkgs/tools/security/kubernetes-polaris/default.nix b/pkgs/tools/security/kubernetes-polaris/default.nix
index b053640d8da96..737c901e570b4 100644
--- a/pkgs/tools/security/kubernetes-polaris/default.nix
+++ b/pkgs/tools/security/kubernetes-polaris/default.nix
@@ -45,6 +45,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Validate and remediate Kubernetes resources to ensure configuration best practices are followed";
+    mainProgram = "polaris";
     homepage = "https://www.fairwinds.com/polaris";
     license = with licenses; [ asl20 ];
     maintainers = with maintainers; [ longer ];
diff --git a/pkgs/tools/security/kubescape/default.nix b/pkgs/tools/security/kubescape/default.nix
index b5661ccbcd3cd..c6fb92044cdcc 100644
--- a/pkgs/tools/security/kubescape/default.nix
+++ b/pkgs/tools/security/kubescape/default.nix
@@ -71,6 +71,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool for testing if Kubernetes is deployed securely";
+    mainProgram = "kubescape";
     homepage = "https://github.com/kubescape/kubescape";
     changelog = "https://github.com/kubescape/kubescape/releases/tag/v${version}";
     longDescription = ''
diff --git a/pkgs/tools/security/kubesec/default.nix b/pkgs/tools/security/kubesec/default.nix
index 4fa9337e1cb5e..ed562124da903 100644
--- a/pkgs/tools/security/kubesec/default.nix
+++ b/pkgs/tools/security/kubesec/default.nix
@@ -46,6 +46,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Security risk analysis tool for Kubernetes resources";
+    mainProgram = "kubesec";
     homepage = "https://github.com/controlplaneio/kubesec";
     changelog = "https://github.com/controlplaneio/kubesec/blob/v${version}/CHANGELOG.md";
     license = with licenses; [ asl20 ];
diff --git a/pkgs/tools/security/ldapmonitor/default.nix b/pkgs/tools/security/ldapmonitor/default.nix
index 51295d2841a9f..989e1bebc1530 100644
--- a/pkgs/tools/security/ldapmonitor/default.nix
+++ b/pkgs/tools/security/ldapmonitor/default.nix
@@ -33,6 +33,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to monitor creation, deletion and changes to LDAP objects";
+    mainProgram = "ldapmonitor";
     homepage = "https://github.com/p0dalirius/LDAPmonitor";
     changelog = "https://github.com/p0dalirius/LDAPmonitor/releases/tag/${version}";
     license = with licenses; [ gpl3Only ];
diff --git a/pkgs/tools/security/ldeep/default.nix b/pkgs/tools/security/ldeep/default.nix
index ddbff23572717..92d5ff106b6cd 100644
--- a/pkgs/tools/security/ldeep/default.nix
+++ b/pkgs/tools/security/ldeep/default.nix
@@ -48,6 +48,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "In-depth LDAP enumeration utility";
+    mainProgram = "ldeep";
     homepage = "https://github.com/franc-pentest/ldeep";
     changelog = "https://github.com/franc-pentest/ldeep/releases/tag/${version}";
     license = with licenses; [ mit ];
diff --git a/pkgs/tools/security/lesspass-cli/default.nix b/pkgs/tools/security/lesspass-cli/default.nix
index 34d36f93b5fbb..c568be5ebbd85 100644
--- a/pkgs/tools/security/lesspass-cli/default.nix
+++ b/pkgs/tools/security/lesspass-cli/default.nix
@@ -32,6 +32,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Stateless password manager";
+    mainProgram = "lesspass";
     homepage = "https://lesspass.com";
     maintainers = with maintainers; [ jasoncarr ];
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/lil-pwny/default.nix b/pkgs/tools/security/lil-pwny/default.nix
index c8251dfaa2495..42ee72d2c204d 100644
--- a/pkgs/tools/security/lil-pwny/default.nix
+++ b/pkgs/tools/security/lil-pwny/default.nix
@@ -24,6 +24,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Offline auditing of Active Directory passwords";
+    mainProgram = "lil-pwny";
     homepage = "https://github.com/PaperMtn/lil-pwny";
     changelog = "https://github.com/PaperMtn/lil-pwny/blob/${version}/CHANGELOG.md";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/linux-exploit-suggester/default.nix b/pkgs/tools/security/linux-exploit-suggester/default.nix
index 9744c416bb747..ed68e8e7c7a33 100644
--- a/pkgs/tools/security/linux-exploit-suggester/default.nix
+++ b/pkgs/tools/security/linux-exploit-suggester/default.nix
@@ -21,6 +21,7 @@ stdenvNoCC.mkDerivation rec {
 
   meta = with lib; {
     description = "Tool designed to assist in detecting security deficiencies for given Linux kernel/Linux-based machine";
+    mainProgram = "linux-exploit-suggester";
     homepage = "https://github.com/mzet-/linux-exploit-suggester";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ emilytrau ];
diff --git a/pkgs/tools/security/log4j-scan/default.nix b/pkgs/tools/security/log4j-scan/default.nix
index bd2772efb416b..e3de824b223c4 100644
--- a/pkgs/tools/security/log4j-scan/default.nix
+++ b/pkgs/tools/security/log4j-scan/default.nix
@@ -37,6 +37,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Scanner for finding hosts which are vulnerable for log4j";
+    mainProgram = "log4j-scan";
     homepage = "https://github.com/fullhunt/log4j-scan";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/log4j-sniffer/default.nix b/pkgs/tools/security/log4j-sniffer/default.nix
index dec7ce35866a4..d13180d4e4032 100644
--- a/pkgs/tools/security/log4j-sniffer/default.nix
+++ b/pkgs/tools/security/log4j-sniffer/default.nix
@@ -29,6 +29,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool that scans archives to check for vulnerable log4j versions";
+    mainProgram = "log4j-sniffer";
     homepage = "https://github.com/palantir/log4j-sniffer";
     license = with licenses; [ asl20 ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/lynis/default.nix b/pkgs/tools/security/lynis/default.nix
index a40cbc7117d51..d207e3d6e3e02 100644
--- a/pkgs/tools/security/lynis/default.nix
+++ b/pkgs/tools/security/lynis/default.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Security auditing tool for Linux, macOS, and UNIX-based systems";
+    mainProgram = "lynis";
     homepage = "https://cisofy.com/lynis/";
     license = licenses.gpl3Only;
     platforms = platforms.unix;
diff --git a/pkgs/tools/security/masscan/default.nix b/pkgs/tools/security/masscan/default.nix
index 107ffe92b2cc9..a6aa990c1d82c 100644
--- a/pkgs/tools/security/masscan/default.nix
+++ b/pkgs/tools/security/masscan/default.nix
@@ -61,6 +61,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Fast scan of the Internet";
+    mainProgram = "masscan";
     homepage = "https://github.com/robertdavidgraham/masscan";
     changelog = "https://github.com/robertdavidgraham/masscan/releases/tag/${version}";
     license = licenses.agpl3Only;
diff --git a/pkgs/tools/security/medusa/default.nix b/pkgs/tools/security/medusa/default.nix
index a5ac8f06d16dc..3a29f2a6e283e 100644
--- a/pkgs/tools/security/medusa/default.nix
+++ b/pkgs/tools/security/medusa/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/jmk-foofus/medusa";
     description = "A speedy, parallel, and modular, login brute-forcer";
+    mainProgram = "medusa";
     license = licenses.gpl2;
     maintainers = with maintainers; [ ];
   };
diff --git a/pkgs/tools/security/melt/default.nix b/pkgs/tools/security/melt/default.nix
index 43ecd5566fa9f..8721e34b566f8 100644
--- a/pkgs/tools/security/melt/default.nix
+++ b/pkgs/tools/security/melt/default.nix
@@ -17,6 +17,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Backup and restore Ed25519 SSH keys with seed words";
+    mainProgram = "melt";
     homepage = "https://github.com/charmbracelet/melt";
     changelog = "https://github.com/charmbracelet/melt/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/mfcuk/default.nix b/pkgs/tools/security/mfcuk/default.nix
index 3128a787807ae..d6736b5b097ae 100644
--- a/pkgs/tools/security/mfcuk/default.nix
+++ b/pkgs/tools/security/mfcuk/default.nix
@@ -14,6 +14,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "MiFare Classic Universal toolKit";
+    mainProgram = "mfcuk";
     license = licenses.gpl2;
     homepage = "https://github.com/nfc-tools/mfcuk";
     maintainers = with maintainers; [ offline ];
diff --git a/pkgs/tools/security/mfoc/default.nix b/pkgs/tools/security/mfoc/default.nix
index ca1f4a5e4f255..9ede0ffc61577 100644
--- a/pkgs/tools/security/mfoc/default.nix
+++ b/pkgs/tools/security/mfoc/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Mifare Classic Offline Cracker";
+    mainProgram = "mfoc";
     license = licenses.gpl2;
     homepage = "https://github.com/nfc-tools/mfoc";
     maintainers = with maintainers; [ offline ];
diff --git a/pkgs/tools/security/minica/default.nix b/pkgs/tools/security/minica/default.nix
index 6dd6d1fd5ce03..e7a05412303ee 100644
--- a/pkgs/tools/security/minica/default.nix
+++ b/pkgs/tools/security/minica/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A simple tool for generating self signed certificates";
+    mainProgram = "minica";
     longDescription = ''
       Minica is a simple CA intended for use in situations where the CA operator
       also operates each host where a certificate will be used. It automatically
diff --git a/pkgs/tools/security/mitm6/default.nix b/pkgs/tools/security/mitm6/default.nix
index a7587330e7b99..f3626355fbb1c 100644
--- a/pkgs/tools/security/mitm6/default.nix
+++ b/pkgs/tools/security/mitm6/default.nix
@@ -29,6 +29,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = {
     description = "DHCPv6 network spoofing application";
+    mainProgram = "mitm6";
     homepage = "https://github.com/dirkjanm/mitm6";
     license = lib.licenses.gpl2Only;
     maintainers = with lib.maintainers; [ arcayr ];
diff --git a/pkgs/tools/security/mitmproxy2swagger/default.nix b/pkgs/tools/security/mitmproxy2swagger/default.nix
index 56d47973b7e3a..0c940692f9e82 100644
--- a/pkgs/tools/security/mitmproxy2swagger/default.nix
+++ b/pkgs/tools/security/mitmproxy2swagger/default.nix
@@ -39,6 +39,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to automagically reverse-engineer REST APIs";
+    mainProgram = "mitmproxy2swagger";
     homepage = "https://github.com/alufers/mitmproxy2swagger";
     changelog = "https://github.com/alufers/mitmproxy2swagger/releases/tag/${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/mkpasswd/default.nix b/pkgs/tools/security/mkpasswd/default.nix
index 2ee71b8227eb1..00b1e8a01501d 100644
--- a/pkgs/tools/security/mkpasswd/default.nix
+++ b/pkgs/tools/security/mkpasswd/default.nix
@@ -14,6 +14,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://packages.qa.debian.org/w/whois.html";
     description = "Overfeatured front-end to crypt, from the Debian whois package";
+    mainProgram = "mkpasswd";
     license = licenses.gpl2;
     maintainers = with maintainers; [ fpletz ];
     platforms = platforms.unix;
diff --git a/pkgs/tools/security/mkrand/default.nix b/pkgs/tools/security/mkrand/default.nix
index 21c9586cd6c35..b0ebe7e521fa7 100644
--- a/pkgs/tools/security/mkrand/default.nix
+++ b/pkgs/tools/security/mkrand/default.nix
@@ -13,6 +13,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A Digital Random Bit Generator";
+    mainProgram = "mkrand";
     longDescription = "MKRAND is a utility for generating random information.";
     homepage = "https://github.com/mknight-tag/MKRAND/";
     license = lib.licenses.mit;
diff --git a/pkgs/tools/security/mktemp/default.nix b/pkgs/tools/security/mktemp/default.nix
index 5010780800dea..ca16611332f76 100644
--- a/pkgs/tools/security/mktemp/default.nix
+++ b/pkgs/tools/security/mktemp/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Simple tool to make temporary file handling in shells scripts safe and simple";
+    mainProgram = "mktemp";
     homepage = "https://www.mktemp.org";
     license = licenses.isc;
     platforms = platforms.unix;
diff --git a/pkgs/tools/security/mokutil/default.nix b/pkgs/tools/security/mokutil/default.nix
index eb4eb5b1deb3d..8b36e5c1c6319 100644
--- a/pkgs/tools/security/mokutil/default.nix
+++ b/pkgs/tools/security/mokutil/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/lcp/mokutil";
     description = "Utility to manipulate machines owner keys";
+    mainProgram = "mokutil";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ nickcao ];
     platforms = platforms.linux;
diff --git a/pkgs/tools/security/monsoon/default.nix b/pkgs/tools/security/monsoon/default.nix
index 8ac0c834ee031..3341366e47bb6 100644
--- a/pkgs/tools/security/monsoon/default.nix
+++ b/pkgs/tools/security/monsoon/default.nix
@@ -22,6 +22,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Fast HTTP enumerator";
+    mainProgram = "monsoon";
     longDescription = ''
       A fast HTTP enumerator that allows you to execute a large number of HTTP
       requests, filter the responses and display them in real-time.
diff --git a/pkgs/tools/security/mpw/default.nix b/pkgs/tools/security/mpw/default.nix
index 8d6f7f4f3b1da..25c71eb046db7 100644
--- a/pkgs/tools/security/mpw/default.nix
+++ b/pkgs/tools/security/mpw/default.nix
@@ -57,6 +57,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A stateless password management solution";
+    mainProgram = "mpw";
     homepage = "https://masterpasswordapp.com/";
     license = licenses.gpl3;
     platforms = platforms.unix;
diff --git a/pkgs/tools/security/msfpc/default.nix b/pkgs/tools/security/msfpc/default.nix
index 4286111814104..afc67cc4dde37 100644
--- a/pkgs/tools/security/msfpc/default.nix
+++ b/pkgs/tools/security/msfpc/default.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "MSFvenom Payload Creator";
+    mainProgram = "msfpc";
     homepage = "https://github.com/g0tmi1k/msfpc";
     license = licenses.mit;
     maintainers = with maintainers; [ emilytrau ];
diff --git a/pkgs/tools/security/mx-takeover/default.nix b/pkgs/tools/security/mx-takeover/default.nix
index 88ef8fbf3ed08..13804b4e88722 100644
--- a/pkgs/tools/security/mx-takeover/default.nix
+++ b/pkgs/tools/security/mx-takeover/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to work with DNS MX records";
+    mainProgram = "mx-takeover";
     homepage = "https://github.com/musana/mx-takeover";
     changelog = "https://github.com/musana/mx-takeover/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/naabu/default.nix b/pkgs/tools/security/naabu/default.nix
index 30d45b74e9fc4..a10c6601412be 100644
--- a/pkgs/tools/security/naabu/default.nix
+++ b/pkgs/tools/security/naabu/default.nix
@@ -34,6 +34,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Fast SYN/CONNECT port scanner";
+    mainProgram = "naabu";
     longDescription = ''
       Naabu is a port scanning tool written in Go that allows you to enumerate
       valid ports for hosts in a fast and reliable manner. It is a really simple
diff --git a/pkgs/tools/security/nasty/default.nix b/pkgs/tools/security/nasty/default.nix
index b3b19c9268bfc..f0bd0d406c337 100644
--- a/pkgs/tools/security/nasty/default.nix
+++ b/pkgs/tools/security/nasty/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Recover the passphrase of your PGP or GPG-key";
+    mainProgram = "nasty";
     longDescription = ''
     Nasty is a program that helps you to recover the passphrase of your PGP or GPG-key
     in case you forget or lost it. It is mostly a proof-of-concept: with a different implementation
diff --git a/pkgs/tools/security/nbtscanner/default.nix b/pkgs/tools/security/nbtscanner/default.nix
index 51e9f085164be..b70f554f33fda 100644
--- a/pkgs/tools/security/nbtscanner/default.nix
+++ b/pkgs/tools/security/nbtscanner/default.nix
@@ -26,6 +26,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "NetBIOS scanner written in Rust";
+    mainProgram = "nbtscanner";
     homepage = "https://github.com/jonkgrimes/nbtscanner";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/ncrack/default.nix b/pkgs/tools/security/ncrack/default.nix
index 4b0feccb412af..bfce4dd371231 100644
--- a/pkgs/tools/security/ncrack/default.nix
+++ b/pkgs/tools/security/ncrack/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Network authentication tool";
+    mainProgram = "ncrack";
     homepage = "https://nmap.org/ncrack/";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ siraben ];
diff --git a/pkgs/tools/security/nitrokey-app/default.nix b/pkgs/tools/security/nitrokey-app/default.nix
index 8e654900e1720..018a186563816 100644
--- a/pkgs/tools/security/nitrokey-app/default.nix
+++ b/pkgs/tools/security/nitrokey-app/default.nix
@@ -39,6 +39,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Provides extra functionality for the Nitrokey Pro and Storage";
+    mainProgram = "nitrokey-app";
     longDescription = ''
       The nitrokey-app provides a QT system tray widget with which you can
       access the extra functionality of a Nitrokey Storage or Nitrokey Pro.
diff --git a/pkgs/tools/security/nmap-formatter/default.nix b/pkgs/tools/security/nmap-formatter/default.nix
index b78cb2e075d24..ade602a65375b 100644
--- a/pkgs/tools/security/nmap-formatter/default.nix
+++ b/pkgs/tools/security/nmap-formatter/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool that allows you to convert nmap output";
+    mainProgram = "nmap-formatter";
     homepage = "https://github.com/vdjagilev/nmap-formatter";
     changelog = "https://github.com/vdjagilev/nmap-formatter/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/nmap/qt.nix b/pkgs/tools/security/nmap/qt.nix
index b4e406a0035b4..56ebc5db62130 100644
--- a/pkgs/tools/security/nmap/qt.nix
+++ b/pkgs/tools/security/nmap/qt.nix
@@ -53,6 +53,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Qt frontend for nmap";
+    mainProgram = "nmapsi4";
     license = licenses.gpl2;
     maintainers = with maintainers; [ peterhoeg ];
     inherit (src.meta) homepage;
diff --git a/pkgs/tools/security/noseyparker/default.nix b/pkgs/tools/security/noseyparker/default.nix
index c6e4056d9fab6..72a1d87f1112b 100644
--- a/pkgs/tools/security/noseyparker/default.nix
+++ b/pkgs/tools/security/noseyparker/default.nix
@@ -39,6 +39,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Find secrets and sensitive information in textual data";
+    mainProgram = "noseyparker";
     homepage = "https://github.com/praetorian-inc/noseyparker";
     changelog = "https://github.com/praetorian-inc/noseyparker/blob/v${version}/CHANGELOG.md";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/nosqli/default.nix b/pkgs/tools/security/nosqli/default.nix
index 47095902cea6f..3a1721831a0ab 100644
--- a/pkgs/tools/security/nosqli/default.nix
+++ b/pkgs/tools/security/nosqli/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "NoSql Injection tool for finding vulnerable websites using MongoDB";
+    mainProgram = "nosqli";
     homepage = "https://github.com/Charlie-belmer/nosqli";
     license = with licenses; [ agpl3Plus ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/notary/default.nix b/pkgs/tools/security/notary/default.nix
index ab6ec0b16818f..f1fed4806eb41 100644
--- a/pkgs/tools/security/notary/default.nix
+++ b/pkgs/tools/security/notary/default.nix
@@ -37,6 +37,7 @@ buildGoPackage rec {
 
   meta = with lib; {
     description = "A project that allows anyone to have trust over arbitrary collections of data";
+    mainProgram = "notary";
     longDescription = ''
       The Notary project comprises a server and a client for running and
       interacting with trusted collections. See the service architecture
diff --git a/pkgs/tools/security/ntlmrecon/default.nix b/pkgs/tools/security/ntlmrecon/default.nix
index 648e2d585e097..10a564706c9a5 100644
--- a/pkgs/tools/security/ntlmrecon/default.nix
+++ b/pkgs/tools/security/ntlmrecon/default.nix
@@ -31,6 +31,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Information enumerator for NTLM authentication enabled web endpoints";
+    mainProgram = "ntlmrecon";
     homepage = "https://github.com/pwnfoo/NTLMRecon";
     changelog = "https://github.com/pwnfoo/NTLMRecon/releases/tag/v-${version}";
     license = with licenses; [ mit ];
diff --git a/pkgs/tools/security/nwipe/default.nix b/pkgs/tools/security/nwipe/default.nix
index 35ca1f9b4125c..00c66f3519306 100644
--- a/pkgs/tools/security/nwipe/default.nix
+++ b/pkgs/tools/security/nwipe/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Securely erase disks";
+    mainProgram = "nwipe";
     homepage = "https://github.com/martijnvanbrummelen/nwipe";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ woffs ];
diff --git a/pkgs/tools/security/oauth2c/default.nix b/pkgs/tools/security/oauth2c/default.nix
index 2cc9a05e3d156..292ac255b3a04 100644
--- a/pkgs/tools/security/oauth2c/default.nix
+++ b/pkgs/tools/security/oauth2c/default.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/cloudentity/oauth2c";
     description = "User-friendly OAuth2 CLI";
+    mainProgram = "oauth2c";
     longDescription = ''
       oauth2c is a command-line tool for interacting with OAuth 2.0
       authorization servers. Its goal is to make it easy to fetch access tokens
diff --git a/pkgs/tools/security/octosuite/default.nix b/pkgs/tools/security/octosuite/default.nix
index 88b29dce721c4..af4dd9c397405 100644
--- a/pkgs/tools/security/octosuite/default.nix
+++ b/pkgs/tools/security/octosuite/default.nix
@@ -36,6 +36,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Advanced Github OSINT framework";
+    mainProgram = "octosuite";
     homepage = "https://github.com/bellingcat/octosuite";
     changelog = "https://github.com/bellingcat/octosuite/releases/tag/${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/onioncircuits/default.nix b/pkgs/tools/security/onioncircuits/default.nix
index c1468becc262d..95692ef1c188c 100644
--- a/pkgs/tools/security/onioncircuits/default.nix
+++ b/pkgs/tools/security/onioncircuits/default.nix
@@ -51,6 +51,7 @@ python3.pkgs.buildPythonApplication rec {
     broken = stdenv.isDarwin;
     homepage = "https://tails.boum.org";
     description = "GTK application to display Tor circuits and streams";
+    mainProgram = "onioncircuits";
     license = licenses.gpl3;
     maintainers = with maintainers; [ milran ];
   };
diff --git a/pkgs/tools/security/onlykey-cli/default.nix b/pkgs/tools/security/onlykey-cli/default.nix
index 4d0b0a267a38f..624290c6d5554 100644
--- a/pkgs/tools/security/onlykey-cli/default.nix
+++ b/pkgs/tools/security/onlykey-cli/default.nix
@@ -27,6 +27,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "OnlyKey client and command-line tool";
+    mainProgram = "onlykey-cli";
     homepage = "https://github.com/trustcrypto/python-onlykey";
     license = licenses.mit;
     maintainers = with maintainers; [ ranfdev ];
diff --git a/pkgs/tools/security/open-ecard/default.nix b/pkgs/tools/security/open-ecard/default.nix
index e8afdf6bf8c0b..a3f3f72bc6313 100644
--- a/pkgs/tools/security/open-ecard/default.nix
+++ b/pkgs/tools/security/open-ecard/default.nix
@@ -55,6 +55,7 @@ in stdenv.mkDerivation rec {
   meta = with lib; {
     description = "Client side implementation of the eCard-API-Framework (BSI
       TR-03112) and related international standards, such as ISO/IEC 24727";
+    mainProgram = "open-ecard";
     homepage = "https://www.openecard.org/";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.gpl3;
diff --git a/pkgs/tools/security/openrisk/default.nix b/pkgs/tools/security/openrisk/default.nix
index fc8475ca71a2a..ebc177a6908ff 100644
--- a/pkgs/tools/security/openrisk/default.nix
+++ b/pkgs/tools/security/openrisk/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool that generates an AI-based risk score";
+    mainProgram = "openrisk";
     homepage = "https://github.com/projectdiscovery/openrisk";
     changelog = "https://github.com/projectdiscovery/openrisk/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/orjail/default.nix b/pkgs/tools/security/orjail/default.nix
index adcbf5ae4f9f4..ed2d64588306a 100644
--- a/pkgs/tools/security/orjail/default.nix
+++ b/pkgs/tools/security/orjail/default.nix
@@ -47,6 +47,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Force programs to exclusively use tor network";
+    mainProgram = "orjail";
     homepage = "https://github.com/orjail/orjail";
     license = licenses.wtfpl;
     maintainers = with maintainers; [ onny ];
diff --git a/pkgs/tools/security/osv-detector/default.nix b/pkgs/tools/security/osv-detector/default.nix
index 58db4504d23d8..3be67c91d265d 100644
--- a/pkgs/tools/security/osv-detector/default.nix
+++ b/pkgs/tools/security/osv-detector/default.nix
@@ -48,6 +48,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Auditing tool for detecting vulnerabilities";
+    mainProgram = "osv-detector";
     homepage = "https://github.com/G-Rath/osv-detector";
     changelog = "https://github.com/G-Rath/osv-detector/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/osv-scanner/default.nix b/pkgs/tools/security/osv-scanner/default.nix
index 26dfe919c428b..2b9f2c4db2363 100644
--- a/pkgs/tools/security/osv-scanner/default.nix
+++ b/pkgs/tools/security/osv-scanner/default.nix
@@ -38,6 +38,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Vulnerability scanner written in Go which uses the data provided by https://osv.dev";
+    mainProgram = "osv-scanner";
     homepage = "https://github.com/google/osv-scanner";
     changelog = "https://github.com/google/osv-scanner/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/otpauth/default.nix b/pkgs/tools/security/otpauth/default.nix
index e4ffadef63e00..95d9288b6babd 100644
--- a/pkgs/tools/security/otpauth/default.nix
+++ b/pkgs/tools/security/otpauth/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Google Authenticator migration decoder";
+    mainProgram = "otpauth";
     homepage = "https://github.com/dim13/otpauth";
     license = licenses.isc;
     maintainers = with maintainers; [ ereslibre ];
diff --git a/pkgs/tools/security/ots/default.nix b/pkgs/tools/security/ots/default.nix
index bba9e8e6fb89d..7d55bb84d9760 100644
--- a/pkgs/tools/security/ots/default.nix
+++ b/pkgs/tools/security/ots/default.nix
@@ -17,6 +17,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Share end-to-end encrypted secrets with others via a one-time URL";
+    mainProgram = "ots";
     homepage = "https://ots.sniptt.com";
     changelog = "https://github.com/sniptt-official/ots/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/pamtester/default.nix b/pkgs/tools/security/pamtester/default.nix
index d9e59290d676b..7261be60f77f6 100644
--- a/pkgs/tools/security/pamtester/default.nix
+++ b/pkgs/tools/security/pamtester/default.nix
@@ -13,6 +13,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Utility program to test the PAM facility";
+    mainProgram = "pamtester";
     homepage = "https://pamtester.sourceforge.net/";
     license = licenses.bsd3;
     platforms = platforms.linux;
diff --git a/pkgs/tools/security/paperkey/default.nix b/pkgs/tools/security/paperkey/default.nix
index 8e86415cb9e80..a22c1617f07bb 100644
--- a/pkgs/tools/security/paperkey/default.nix
+++ b/pkgs/tools/security/paperkey/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Store OpenPGP or GnuPG on paper";
+    mainProgram = "paperkey";
     longDescription = ''
       A reasonable way to achieve a long term backup of OpenPGP (GnuPG, PGP, etc)
       keys is to print them out on paper. Paper and ink have amazingly long
diff --git a/pkgs/tools/security/pass/extensions/import.nix b/pkgs/tools/security/pass/extensions/import.nix
index 8c51356e184ba..cbba33c1373a6 100644
--- a/pkgs/tools/security/pass/extensions/import.nix
+++ b/pkgs/tools/security/pass/extensions/import.nix
@@ -60,6 +60,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Pass extension for importing data from existing password managers";
+    mainProgram = "pimport";
     homepage = "https://github.com/roddhjav/pass-import";
     changelog = "https://github.com/roddhjav/pass-import/blob/v${version}/CHANGELOG.rst";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/security/pass/rofi-pass.nix b/pkgs/tools/security/pass/rofi-pass.nix
index b8fd130df24b2..9bf6995715924 100644
--- a/pkgs/tools/security/pass/rofi-pass.nix
+++ b/pkgs/tools/security/pass/rofi-pass.nix
@@ -84,6 +84,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "A script to make rofi work with password-store";
+    mainProgram = "rofi-pass";
     homepage = "https://github.com/carnager/rofi-pass";
     license = lib.licenses.gpl3;
     platforms = with lib.platforms; linux;
diff --git a/pkgs/tools/security/pass2csv/default.nix b/pkgs/tools/security/pass2csv/default.nix
index aad6338391ee2..101af2e7aa947 100644
--- a/pkgs/tools/security/pass2csv/default.nix
+++ b/pkgs/tools/security/pass2csv/default.nix
@@ -28,6 +28,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Export pass(1), \"the standard unix password manager\", to CSV";
+    mainProgram = "pass2csv";
     homepage = "https://github.com/reinefjord/pass2csv";
     license = licenses.mit;
     maintainers = with maintainers; [ wolfangaukang ];
diff --git a/pkgs/tools/security/passphrase2pgp/default.nix b/pkgs/tools/security/passphrase2pgp/default.nix
index 0ccbcca06c20b..0470fd8cfee6d 100644
--- a/pkgs/tools/security/passphrase2pgp/default.nix
+++ b/pkgs/tools/security/passphrase2pgp/default.nix
@@ -30,6 +30,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Predictable, passphrase-based PGP key generator";
+    mainProgram = "passphrase2pgp";
     homepage = "https://github.com/skeeto/passphrase2pgp";
     license = licenses.unlicense;
     maintainers = with maintainers; [ kaction ];
diff --git a/pkgs/tools/security/pcsc-cyberjack/default.nix b/pkgs/tools/security/pcsc-cyberjack/default.nix
index 04aad0b277393..fa96753a54f64 100644
--- a/pkgs/tools/security/pcsc-cyberjack/default.nix
+++ b/pkgs/tools/security/pcsc-cyberjack/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "REINER SCT cyberJack USB chipcard reader user space driver";
+    mainProgram = "cjflash";
     homepage = "https://www.reiner-sct.com/";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ aszlig flokli ];
diff --git a/pkgs/tools/security/pdfcrack/default.nix b/pkgs/tools/security/pdfcrack/default.nix
index d4930b023b6f2..ae863e1ec1f57 100644
--- a/pkgs/tools/security/pdfcrack/default.nix
+++ b/pkgs/tools/security/pdfcrack/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://pdfcrack.sourceforge.net/";
     description = "Small command line driven tool for recovering passwords and content from PDF files";
+    mainProgram = "pdfcrack";
     license = with licenses; [ gpl2Plus ];
     platforms = platforms.all;
     maintainers = with maintainers; [ qoelet ];
diff --git a/pkgs/tools/security/pgpdump/default.nix b/pkgs/tools/security/pgpdump/default.nix
index 9ebe0d920027b..31a1c506f3295 100644
--- a/pkgs/tools/security/pgpdump/default.nix
+++ b/pkgs/tools/security/pgpdump/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A PGP packet visualizer";
+    mainProgram = "pgpdump";
     longDescription = ''
       pgpdump is a PGP packet visualizer which displays the packet format of
       OpenPGP (RFC 4880) and PGP version 2 (RFC 1991).
diff --git a/pkgs/tools/security/plecost/default.nix b/pkgs/tools/security/plecost/default.nix
index 23dd8c220caca..477ed9e82645b 100644
--- a/pkgs/tools/security/plecost/default.nix
+++ b/pkgs/tools/security/plecost/default.nix
@@ -33,6 +33,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Vulnerability fingerprinting and vulnerability finder for Wordpress blog engine";
+    mainProgram = "plecost";
     homepage = "https://github.com/iniqua/plecost";
     license = licenses.bsd3;
     maintainers = with maintainers; [ emilytrau ];
diff --git a/pkgs/tools/security/pomerium-cli/default.nix b/pkgs/tools/security/pomerium-cli/default.nix
index 67c44930f0da4..cff903021591a 100644
--- a/pkgs/tools/security/pomerium-cli/default.nix
+++ b/pkgs/tools/security/pomerium-cli/default.nix
@@ -56,6 +56,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://pomerium.io";
     description = "Client-side helper for Pomerium authenticating reverse proxy";
+    mainProgram = "pomerium-cli";
     license = licenses.asl20;
     maintainers = with maintainers; [ lukegb ];
     platforms = platforms.unix;
diff --git a/pkgs/tools/security/posteid-seed-extractor/default.nix b/pkgs/tools/security/posteid-seed-extractor/default.nix
index 176b210b37794..b0c1f04d21a47 100644
--- a/pkgs/tools/security/posteid-seed-extractor/default.nix
+++ b/pkgs/tools/security/posteid-seed-extractor/default.nix
@@ -41,6 +41,7 @@ python3Packages.buildPythonApplication {
   meta = with lib; {
     homepage = "https://github.com/simone36050/PosteID-seed-extractor";
     description = "Extract OTP seed instead of using PosteID app";
+    mainProgram = "posteid-seed-extractor";
     license = licenses.mit;
     maintainers = with maintainers; [ aciceri ];
   };
diff --git a/pkgs/tools/security/pretender/default.nix b/pkgs/tools/security/pretender/default.nix
index 91452f34d62b7..9d7df071224d4 100644
--- a/pkgs/tools/security/pretender/default.nix
+++ b/pkgs/tools/security/pretender/default.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool for handling machine-in-the-middle tasks";
+    mainProgram = "pretender";
     homepage = "https://github.com/RedTeamPentesting/pretender";
     changelog = "https://github.com/RedTeamPentesting/pretender/releases/tag/v${version}";
     license = with licenses; [ mit ];
diff --git a/pkgs/tools/security/pwdsafety/default.nix b/pkgs/tools/security/pwdsafety/default.nix
index 12785154a177f..e713d7e014ab5 100644
--- a/pkgs/tools/security/pwdsafety/default.nix
+++ b/pkgs/tools/security/pwdsafety/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Command line tool checking password safety";
+    mainProgram = "cmd";
     homepage = "https://github.com/edoardottt/pwdsafety";
     license = with licenses; [ gpl3Plus ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/pwncat/default.nix b/pkgs/tools/security/pwncat/default.nix
index 398132c4cee7b..98b782bf194c4 100644
--- a/pkgs/tools/security/pwncat/default.nix
+++ b/pkgs/tools/security/pwncat/default.nix
@@ -17,6 +17,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "TCP/UDP communication suite";
+    mainProgram = "pwncat";
     homepage = "https://pwncat.org/";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/qdigidoc/default.nix b/pkgs/tools/security/qdigidoc/default.nix
index 097ef50239745..862249d2ebd10 100644
--- a/pkgs/tools/security/qdigidoc/default.nix
+++ b/pkgs/tools/security/qdigidoc/default.nix
@@ -60,6 +60,7 @@ mkDerivation rec {
 
   meta = with lib; {
     description = "Qt-based UI for signing and verifying DigiDoc documents";
+    mainProgram = "qdigidoc4";
     homepage = "https://www.id.ee/";
     license = licenses.lgpl21Plus;
     platforms = platforms.linux;
diff --git a/pkgs/tools/security/quill-qr/default.nix b/pkgs/tools/security/quill-qr/default.nix
index 55c2f45cc683a..826f2e51799ca 100644
--- a/pkgs/tools/security/quill-qr/default.nix
+++ b/pkgs/tools/security/quill-qr/default.nix
@@ -38,6 +38,7 @@ stdenvNoCC.mkDerivation rec {
 
   meta = with lib; {
     description = "Print QR codes for use with https://p5deo-6aaaa-aaaab-aaaxq-cai.raw.ic0.app/";
+    mainProgram = "quill-qr.sh";
     homepage = "https://github.com/IvanMalison/quill-qr";
     maintainers = with maintainers; [ imalison ];
     platforms = with platforms; linux;
diff --git a/pkgs/tools/security/quill/default.nix b/pkgs/tools/security/quill/default.nix
index 5de9e8b8b3fc3..71ffc7af5c15f 100644
--- a/pkgs/tools/security/quill/default.nix
+++ b/pkgs/tools/security/quill/default.nix
@@ -47,6 +47,7 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/dfinity/quill";
     changelog = "https://github.com/dfinity/quill/releases/tag/v${version}";
     description = "Minimalistic ledger and governance toolkit for cold wallets on the Internet Computer";
+    mainProgram = "quill";
     license = licenses.asl20;
     maintainers = with maintainers; [ imalison ];
   };
diff --git a/pkgs/tools/security/radamsa/default.nix b/pkgs/tools/security/radamsa/default.nix
index ebcd2a42191df..1903b435b770a 100644
--- a/pkgs/tools/security/radamsa/default.nix
+++ b/pkgs/tools/security/radamsa/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A general purpose fuzzer";
+    mainProgram = "radamsa";
     longDescription = "Radamsa is a general purpose data fuzzer. It reads data from given sample files, or standard input if none are given, and outputs modified data. It is usually used to generate malformed data for testing programs.";
     homepage =  "https://gitlab.com/akihe/radamsa";
     maintainers = [ ];
diff --git a/pkgs/tools/security/redwax-tool/default.nix b/pkgs/tools/security/redwax-tool/default.nix
index af327cba948b9..50a2d36699e73 100644
--- a/pkgs/tools/security/redwax-tool/default.nix
+++ b/pkgs/tools/security/redwax-tool/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://redwax.eu/rt/";
     description = "Universal certificate conversion tool";
+    mainProgram = "redwax-tool";
     longDescription = ''
       Read certificates and keys from your chosen sources, filter the
       certificates and keys you're interested in, write those
diff --git a/pkgs/tools/security/regpg/default.nix b/pkgs/tools/security/regpg/default.nix
index aaefbef227b88..e14fdbbbb7593 100644
--- a/pkgs/tools/security/regpg/default.nix
+++ b/pkgs/tools/security/regpg/default.nix
@@ -44,6 +44,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "GPG wrapper utility for storing secrets in VCS";
+    mainProgram = "regpg";
     homepage = "https://dotat.at/prog/regpg";
     license = licenses.gpl3;
     platforms = platforms.all;
diff --git a/pkgs/tools/security/responder/default.nix b/pkgs/tools/security/responder/default.nix
index a51bb40ac5fd7..9c6b343eb5c1a 100644
--- a/pkgs/tools/security/responder/default.nix
+++ b/pkgs/tools/security/responder/default.nix
@@ -47,6 +47,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "LLMNR, NBT-NS and MDNS poisoner, with built-in HTTP/SMB/MSSQL/FTP/LDAP rogue authentication server";
+    mainProgram = "responder";
     homepage = "https://github.com/lgandx/Responder";
     changelog = "https://github.com/lgandx/Responder/blob/master/CHANGELOG.md";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/ripasso/cursive.nix b/pkgs/tools/security/ripasso/cursive.nix
index b3e8274b450c5..faef4dbff48a2 100644
--- a/pkgs/tools/security/ripasso/cursive.nix
+++ b/pkgs/tools/security/ripasso/cursive.nix
@@ -73,6 +73,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A simple password manager written in Rust";
+    mainProgram = "ripasso-cursive";
     homepage = "https://github.com/cortex/ripasso";
     license = licenses.gpl3;
     maintainers = with maintainers; [ sgo ];
diff --git a/pkgs/tools/security/rustscan/default.nix b/pkgs/tools/security/rustscan/default.nix
index 099e685fec036..5189b7c882b73 100644
--- a/pkgs/tools/security/rustscan/default.nix
+++ b/pkgs/tools/security/rustscan/default.nix
@@ -29,6 +29,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Faster Nmap Scanning with Rust";
+    mainProgram = "rustscan";
     homepage = "https://github.com/RustScan/RustScan";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ figsoda ];
diff --git a/pkgs/tools/security/s5/default.nix b/pkgs/tools/security/s5/default.nix
index 7d63c4cb8a670..f4ef34209d8ec 100644
--- a/pkgs/tools/security/s5/default.nix
+++ b/pkgs/tools/security/s5/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "cipher/decipher text within a file";
+    mainProgram = "s5";
     homepage = "https://github.com/mvisonneau/s5";
     license = licenses.asl20;
     platforms = platforms.unix ++ platforms.darwin;
diff --git a/pkgs/tools/security/safe/default.nix b/pkgs/tools/security/safe/default.nix
index 2024cd8ff27be..63fe240e5619d 100644
--- a/pkgs/tools/security/safe/default.nix
+++ b/pkgs/tools/security/safe/default.nix
@@ -24,6 +24,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A Vault CLI";
+    mainProgram = "safe";
     homepage = "https://github.com/starkandwayne/safe";
     license = licenses.mit;
     maintainers = with maintainers; [ eonpatapon ];
diff --git a/pkgs/tools/security/saml2aws/default.nix b/pkgs/tools/security/saml2aws/default.nix
index a4246f3c4df40..beb2b89e20b42 100644
--- a/pkgs/tools/security/saml2aws/default.nix
+++ b/pkgs/tools/security/saml2aws/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "CLI tool which enables you to login and retrieve AWS temporary credentials using a SAML IDP";
+    mainProgram = "saml2aws";
     homepage    = "https://github.com/Versent/saml2aws";
     license     = licenses.mit;
     maintainers = [ lib.maintainers.pmyjavec ];
diff --git a/pkgs/tools/security/sammler/default.nix b/pkgs/tools/security/sammler/default.nix
index edc04d86371e5..7a7990aee1f94 100644
--- a/pkgs/tools/security/sammler/default.nix
+++ b/pkgs/tools/security/sammler/default.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to extract useful data from documents";
+    mainProgram = "sammler";
     homepage = "https://github.com/redcode-labs/Sammler";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ] ++ teams.redcodelabs.members;
diff --git a/pkgs/tools/security/sbctl/default.nix b/pkgs/tools/security/sbctl/default.nix
index a5fe6cf6548c6..ac3e2a4dd43fd 100644
--- a/pkgs/tools/security/sbctl/default.nix
+++ b/pkgs/tools/security/sbctl/default.nix
@@ -38,6 +38,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Secure Boot key manager";
+    mainProgram = "sbctl";
     homepage = "https://github.com/Foxboron/sbctl";
     license = licenses.mit;
     maintainers = with maintainers; [ raitobezarius ];
diff --git a/pkgs/tools/security/scilla/default.nix b/pkgs/tools/security/scilla/default.nix
index 79f743ea0ce8b..0484cfaa9f87e 100644
--- a/pkgs/tools/security/scilla/default.nix
+++ b/pkgs/tools/security/scilla/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Information gathering tool for DNS, ports and more";
+    mainProgram = "scilla";
     homepage = "https://github.com/edoardottt/scilla";
     changelog = "https://github.com/edoardottt/scilla/releases/tag/v${version}";
     license = with licenses; [ gpl3Plus ];
diff --git a/pkgs/tools/security/scorecard/default.nix b/pkgs/tools/security/scorecard/default.nix
index b460f52aa292d..265253bba51be 100644
--- a/pkgs/tools/security/scorecard/default.nix
+++ b/pkgs/tools/security/scorecard/default.nix
@@ -83,6 +83,7 @@ buildGoModule rec {
     homepage = "https://github.com/ossf/scorecard";
     changelog = "https://github.com/ossf/scorecard/releases/tag/v${version}";
     description = "Security health metrics for Open Source";
+    mainProgram = "scorecard";
     license = licenses.asl20;
     maintainers = with maintainers; [ jk developer-guy ];
   };
diff --git a/pkgs/tools/security/scrypt/default.nix b/pkgs/tools/security/scrypt/default.nix
index d2b8228f6511f..d1deaa0ec41d9 100644
--- a/pkgs/tools/security/scrypt/default.nix
+++ b/pkgs/tools/security/scrypt/default.nix
@@ -37,6 +37,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Encryption utility";
+    mainProgram = "scrypt";
     homepage    = "https://www.tarsnap.com/scrypt.html";
     license     = licenses.bsd2;
     platforms   = platforms.all;
diff --git a/pkgs/tools/security/sdlookup/default.nix b/pkgs/tools/security/sdlookup/default.nix
index 62d6dffdaa2bd..d4b4e6b3ad545 100644
--- a/pkgs/tools/security/sdlookup/default.nix
+++ b/pkgs/tools/security/sdlookup/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "IP lookups for open ports and vulnerabilities from internetdb.shodan.io";
+    mainProgram = "sdlookup";
     homepage = "https://github.com/j3ssie/sdlookup";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/secretscanner/default.nix b/pkgs/tools/security/secretscanner/default.nix
index 7945977079943..db23b87058f41 100644
--- a/pkgs/tools/security/secretscanner/default.nix
+++ b/pkgs/tools/security/secretscanner/default.nix
@@ -48,6 +48,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to find secrets and passwords in container images and file systems";
+    mainProgram = "secretscanner";
     homepage = "https://github.com/deepfence/SecretScanner";
     changelog = "https://github.com/deepfence/SecretScanner/releases/tag/v${version}";
     platforms = [ "x86_64-linux" ];
diff --git a/pkgs/tools/security/semgrep/semgrep-core.nix b/pkgs/tools/security/semgrep/semgrep-core.nix
index 33e50837bf753..8986cba7d880f 100644
--- a/pkgs/tools/security/semgrep/semgrep-core.nix
+++ b/pkgs/tools/security/semgrep/semgrep-core.nix
@@ -46,6 +46,7 @@ stdenvNoCC.mkDerivation rec {
 
   meta = common.meta // {
     description = common.meta.description + " - core binary";
+    mainProgram = "semgrep-core";
     sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
     platforms = lib.attrNames common.core;
   };
diff --git a/pkgs/tools/security/shc/default.nix b/pkgs/tools/security/shc/default.nix
index 0c1bf93ed1c6b..f7f3f8a088836 100644
--- a/pkgs/tools/security/shc/default.nix
+++ b/pkgs/tools/security/shc/default.nix
@@ -15,6 +15,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://neurobin.org/projects/softwares/unix/shc/";
     description = "Shell Script Compiler";
+    mainProgram = "shc";
     platforms = lib.platforms.all;
     license = licenses.gpl3;
   };
diff --git a/pkgs/tools/security/shisho/default.nix b/pkgs/tools/security/shisho/default.nix
index 5a5995f5da3b7..ae61c2a249dbf 100644
--- a/pkgs/tools/security/shisho/default.nix
+++ b/pkgs/tools/security/shisho/default.nix
@@ -45,6 +45,7 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://docs.shisho.dev/shisho/";
     changelog = "https://docs.shisho.dev/changelog/";
     description = "Lightweight static analyzer for several programming languages";
+    mainProgram = "shisho";
     longDescription = ''
       Shisho is a lightweight static code analyzer designed for developers and
       is the core engine for Shisho products. It is, so to speak, like a
diff --git a/pkgs/tools/security/signify/default.nix b/pkgs/tools/security/signify/default.nix
index ac8b2ace3af13..fe1c2bf453452 100644
--- a/pkgs/tools/security/signify/default.nix
+++ b/pkgs/tools/security/signify/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "OpenBSD signing tool";
+    mainProgram = "signify";
     longDescription = ''
       OpenBSDs signing tool, which uses the Ed25519 public key signature system
       for fast signing and verification of messages using small public keys.
diff --git a/pkgs/tools/security/slsa-verifier/default.nix b/pkgs/tools/security/slsa-verifier/default.nix
index 5a6ab18a49ec5..1ed192c732a15 100644
--- a/pkgs/tools/security/slsa-verifier/default.nix
+++ b/pkgs/tools/security/slsa-verifier/default.nix
@@ -36,6 +36,7 @@ buildGoModule rec {
     homepage = "https://github.com/slsa-framework/slsa-verifier";
     changelog = "https://github.com/slsa-framework/slsa-verifier/releases/tag/v${version}";
     description = "Verify provenance from SLSA compliant builders";
+    mainProgram = "slsa-verifier";
     license = lib.licenses.asl20;
     maintainers = with lib.maintainers; [ developer-guy mlieberman85 ];
   };
diff --git a/pkgs/tools/security/smbmap/default.nix b/pkgs/tools/security/smbmap/default.nix
index 698fd8b194486..772df0a66ef91 100644
--- a/pkgs/tools/security/smbmap/default.nix
+++ b/pkgs/tools/security/smbmap/default.nix
@@ -32,6 +32,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "SMB enumeration tool";
+    mainProgram = "smbmap";
     homepage = "https://github.com/ShawnDEvans/smbmap";
     changelog = "https://github.com/ShawnDEvans/smbmap/releases/tag/v${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/snallygaster/default.nix b/pkgs/tools/security/snallygaster/default.nix
index 662b46700c78b..2f9ad98743cb6 100644
--- a/pkgs/tools/security/snallygaster/default.nix
+++ b/pkgs/tools/security/snallygaster/default.nix
@@ -31,6 +31,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to scan for secret files on HTTP servers";
+    mainProgram = "snallygaster";
     homepage = "https://github.com/hannob/snallygaster";
     license = licenses.cc0;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/tools/security/snow/default.nix b/pkgs/tools/security/snow/default.nix
index 6dce95f8cf0f9..dbea144cb1ba6 100644
--- a/pkgs/tools/security/snow/default.nix
+++ b/pkgs/tools/security/snow/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Conceal messages in ASCII text by appending whitespace to the end of lines";
+    mainProgram = "snow";
     homepage = "http://www.darkside.com.au/snow/";
     license = licenses.asl20;
     maintainers = with maintainers; [ siraben ];
diff --git a/pkgs/tools/security/snowcat/default.nix b/pkgs/tools/security/snowcat/default.nix
index 429564f91f1ef..a08b18edd147b 100644
--- a/pkgs/tools/security/snowcat/default.nix
+++ b/pkgs/tools/security/snowcat/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
     homepage = "https://github.com/praetorian-inc/snowcat";
     changelog = "https://github.com/praetorian-inc/snowcat/releases/tag/v${version}";
     description = "A tool to audit the istio service mesh";
+    mainProgram = "snowcat";
     longDescription = ''
       Snowcat gathers and analyzes the configuration of an Istio cluster and
       audits it for potential violations of security best practices.
diff --git a/pkgs/tools/security/spectre-meltdown-checker/default.nix b/pkgs/tools/security/spectre-meltdown-checker/default.nix
index 529da45579155..55372ce4a6aa0 100644
--- a/pkgs/tools/security/spectre-meltdown-checker/default.nix
+++ b/pkgs/tools/security/spectre-meltdown-checker/default.nix
@@ -36,6 +36,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     description = "Spectre & Meltdown vulnerability/mitigation checker for Linux";
+    mainProgram = "spectre-meltdown-checker";
     homepage = "https://github.com/speed47/spectre-meltdown-checker";
     license = lib.licenses.gpl3;
     maintainers = [ lib.maintainers.dotlambda ];
diff --git a/pkgs/tools/security/spyre/default.nix b/pkgs/tools/security/spyre/default.nix
index 3ec659373c7b9..c9a4946b83d98 100644
--- a/pkgs/tools/security/spyre/default.nix
+++ b/pkgs/tools/security/spyre/default.nix
@@ -44,6 +44,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "YARA-based IOC scanner";
+    mainProgram = "spyre";
     homepage = "https://github.com/spyre-project/spyre";
     license = with licenses; [ lgpl3Plus ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/ssdeep/default.nix b/pkgs/tools/security/ssdeep/default.nix
index 7647246369ff3..a7c937f03ee0a 100644
--- a/pkgs/tools/security/ssdeep/default.nix
+++ b/pkgs/tools/security/ssdeep/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A program for calculating fuzzy hashes";
+    mainProgram = "ssdeep";
     homepage    = "http://www.ssdeep.sf.net";
     license     = lib.licenses.gpl2;
     platforms   = lib.platforms.unix;
diff --git a/pkgs/tools/security/ssh-audit/default.nix b/pkgs/tools/security/ssh-audit/default.nix
index 54ec4e8f4ee1e..d704832f248d2 100644
--- a/pkgs/tools/security/ssh-audit/default.nix
+++ b/pkgs/tools/security/ssh-audit/default.nix
@@ -26,6 +26,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool for ssh server auditing";
+    mainProgram = "ssh-audit";
     homepage = "https://github.com/jtesta/ssh-audit";
     changelog = "https://github.com/jtesta/ssh-audit/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/ssh-to-pgp/default.nix b/pkgs/tools/security/ssh-to-pgp/default.nix
index c8735cffd5f2c..15067063d328e 100644
--- a/pkgs/tools/security/ssh-to-pgp/default.nix
+++ b/pkgs/tools/security/ssh-to-pgp/default.nix
@@ -22,6 +22,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Convert ssh private keys to PGP";
+    mainProgram = "ssh-to-pgp";
     homepage = "https://github.com/Mic92/ssh-to-pgp";
     license = licenses.mit;
     maintainers = with maintainers; [ mic92 ];
diff --git a/pkgs/tools/security/sshchecker/default.nix b/pkgs/tools/security/sshchecker/default.nix
index 6ed76d0dd4e29..6f904f52020dd 100644
--- a/pkgs/tools/security/sshchecker/default.nix
+++ b/pkgs/tools/security/sshchecker/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Dedicated SSH brute-forcing tool";
+    mainProgram = "sshchecker";
     longDescription = ''
       sshchecker is a fast dedicated SSH brute-forcing tool to check
       SSH login on the giving IP list.
diff --git a/pkgs/tools/security/sshguard/default.nix b/pkgs/tools/security/sshguard/default.nix
index 18e93023d7792..2c5391ae44998 100644
--- a/pkgs/tools/security/sshguard/default.nix
+++ b/pkgs/tools/security/sshguard/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Protects hosts from brute-force attacks";
+    mainProgram = "sshguard";
     longDescription = ''
       SSHGuard can read log messages from various input sources. Log messages are parsed, line-by-line, for recognized patterns.
       If an attack, such as several login failures within a few seconds, is detected, the offending IP is blocked.
diff --git a/pkgs/tools/security/sshocker/default.nix b/pkgs/tools/security/sshocker/default.nix
index bb8177ea38780..0ace4d9e25977 100644
--- a/pkgs/tools/security/sshocker/default.nix
+++ b/pkgs/tools/security/sshocker/default.nix
@@ -24,6 +24,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool for SSH, reverse sshfs and port forwarder";
+    mainProgram = "sshocker";
     homepage = "https://github.com/lima-vm/sshocker";
     changelog = "https://github.com/lima-vm/sshocker/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/sshuttle/default.nix b/pkgs/tools/security/sshuttle/default.nix
index 8a92dbceb1846..d937421adb011 100644
--- a/pkgs/tools/security/sshuttle/default.nix
+++ b/pkgs/tools/security/sshuttle/default.nix
@@ -50,6 +50,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Transparent proxy server that works as a poor man's VPN";
+    mainProgram = "sshuttle";
     longDescription = ''
       Forward connections over SSH, without requiring administrator access to the
       target network (though it does require Python 2.7, Python 3.5 or later at both ends).
diff --git a/pkgs/tools/security/sslscan/default.nix b/pkgs/tools/security/sslscan/default.nix
index 529b1bb1683e6..43e2b8ace7176 100644
--- a/pkgs/tools/security/sslscan/default.nix
+++ b/pkgs/tools/security/sslscan/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Tests SSL/TLS services and discover supported cipher suites";
+    mainProgram = "sslscan";
     homepage = "https://github.com/rbsec/sslscan";
     changelog = "https://github.com/rbsec/sslscan/blob/${version}/Changelog";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/stacs/default.nix b/pkgs/tools/security/stacs/default.nix
index 205d85f0622e9..da66dca1cbd32 100644
--- a/pkgs/tools/security/stacs/default.nix
+++ b/pkgs/tools/security/stacs/default.nix
@@ -35,6 +35,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Static token and credential scanner";
+    mainProgram = "stacs";
     homepage = "https://github.com/stacscan/stacs";
     license = with licenses; [ bsd3 ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/su-exec/default.nix b/pkgs/tools/security/su-exec/default.nix
index 0e26d2430cb13..f9ab5d503f5b2 100644
--- a/pkgs/tools/security/su-exec/default.nix
+++ b/pkgs/tools/security/su-exec/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "switch user and group id and exec";
+    mainProgram = "su-exec";
     homepage    = "https://github.com/ncopa/su-exec";
     license     = licenses.mit;
     maintainers = with maintainers; [ zimbatm ];
diff --git a/pkgs/tools/security/subjs/default.nix b/pkgs/tools/security/subjs/default.nix
index 60ed306145a73..0bd3c170b6563 100644
--- a/pkgs/tools/security/subjs/default.nix
+++ b/pkgs/tools/security/subjs/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Fetcher for Javascript files";
+    mainProgram = "subjs";
     longDescription = ''
       subjs fetches Javascript files from a list of URLs or subdomains.
       Analyzing Javascript files can help you find undocumented endpoints,
diff --git a/pkgs/tools/security/swaggerhole/default.nix b/pkgs/tools/security/swaggerhole/default.nix
index 8455867b4be2f..507fde0b3086e 100644
--- a/pkgs/tools/security/swaggerhole/default.nix
+++ b/pkgs/tools/security/swaggerhole/default.nix
@@ -30,6 +30,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to searching for secret on swaggerhub";
+    mainProgram = "swaggerhole";
     homepage = "https://github.com/Liodeus/swaggerHole";
     license = with licenses; [ gpl3Plus ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/teler/default.nix b/pkgs/tools/security/teler/default.nix
index 989743fda8947..9232f4f88206b 100644
--- a/pkgs/tools/security/teler/default.nix
+++ b/pkgs/tools/security/teler/default.nix
@@ -27,6 +27,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Real-time HTTP Intrusion Detection";
+    mainProgram = "teler.app";
     longDescription = ''
       teler is an real-time intrusion detection and threat alert
       based on web log that runs in a terminal with resources that
diff --git a/pkgs/tools/security/tell-me-your-secrets/default.nix b/pkgs/tools/security/tell-me-your-secrets/default.nix
index a85a62fdfcc37..1d723aae52df8 100644
--- a/pkgs/tools/security/tell-me-your-secrets/default.nix
+++ b/pkgs/tools/security/tell-me-your-secrets/default.nix
@@ -42,6 +42,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tools to find secrets from various signatures";
+    mainProgram = "tell-me-your-secrets";
     homepage = "https://github.com/valayDave/tell-me-your-secrets";
     changelog = "https://github.com/valayDave/tell-me-your-secrets/blob/${version}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/pkgs/tools/security/terrascan/default.nix b/pkgs/tools/security/terrascan/default.nix
index 864289f92f590..b44387032b2f9 100644
--- a/pkgs/tools/security/terrascan/default.nix
+++ b/pkgs/tools/security/terrascan/default.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Detect compliance and security violations across Infrastructure";
+    mainProgram = "terrascan";
     longDescription = ''
       Detect compliance and security violations across Infrastructure as Code to
       mitigate risk before provisioning cloud native infrastructure. It contains
diff --git a/pkgs/tools/security/threatest/default.nix b/pkgs/tools/security/threatest/default.nix
index faa5977986fca..a53804f1d1fce 100644
--- a/pkgs/tools/security/threatest/default.nix
+++ b/pkgs/tools/security/threatest/default.nix
@@ -31,6 +31,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Framework for end-to-end testing threat detection rules";
+    mainProgram = "threatest";
     homepage = "https://github.com/DataDog/threatest";
     changelog = "https://github.com/DataDog/threatest/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/tools/security/tor/torsocks.nix b/pkgs/tools/security/tor/torsocks.nix
index 6c5be8fcc7bdd..ae1a42a944d32 100644
--- a/pkgs/tools/security/tor/torsocks.nix
+++ b/pkgs/tools/security/tor/torsocks.nix
@@ -53,6 +53,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description      = "Wrapper to safely torify applications";
+    mainProgram = "torsocks";
     homepage         = "https://gitlab.torproject.org/tpo/core/torsocks";
     license          = lib.licenses.gpl2;
     platforms        = lib.platforms.unix;
diff --git a/pkgs/tools/security/tpm2-abrmd/default.nix b/pkgs/tools/security/tpm2-abrmd/default.nix
index 7183559987949..da297f7a5b36c 100644
--- a/pkgs/tools/security/tpm2-abrmd/default.nix
+++ b/pkgs/tools/security/tpm2-abrmd/default.nix
@@ -48,6 +48,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "TPM2 resource manager, accessible via D-Bus";
+    mainProgram = "tpm2-abrmd";
     homepage = "https://github.com/tpm2-software/tpm2-tools";
     license = licenses.bsd3;
     platforms = platforms.linux;
diff --git a/pkgs/tools/security/tracee/default.nix b/pkgs/tools/security/tracee/default.nix
index eb1e8090b286d..c1615c1ddf563 100644
--- a/pkgs/tools/security/tracee/default.nix
+++ b/pkgs/tools/security/tracee/default.nix
@@ -93,6 +93,7 @@ buildGoModule rec {
     homepage = "https://aquasecurity.github.io/tracee/latest/";
     changelog = "https://github.com/aquasecurity/tracee/releases/tag/v${version}";
     description = "Linux Runtime Security and Forensics using eBPF";
+    mainProgram = "tracee";
     longDescription = ''
       Tracee is a Runtime Security and forensics tool for Linux. It is using
       Linux eBPF technology to trace your system and applications at runtime,
diff --git a/pkgs/tools/security/trousers/default.nix b/pkgs/tools/security/trousers/default.nix
index 5502de2d6272a..43d0941b47b69 100644
--- a/pkgs/tools/security/trousers/default.nix
+++ b/pkgs/tools/security/trousers/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Trusted computing software stack";
+    mainProgram = "tcsd";
     homepage    = "https://trousers.sourceforge.net/";
     license     = licenses.bsd3;
     maintainers = [ maintainers.ak ];
diff --git a/pkgs/tools/security/truecrack/default.nix b/pkgs/tools/security/truecrack/default.nix
index 19ae85105657f..1c0648f33bcb4 100644
--- a/pkgs/tools/security/truecrack/default.nix
+++ b/pkgs/tools/security/truecrack/default.nix
@@ -41,6 +41,7 @@ gccStdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A brute-force password cracker for TrueCrypt volumes, optimized for Nvidia Cuda technology";
+    mainProgram = "truecrack";
     homepage = "https://gitlab.com/kalilinux/packages/truecrack";
     broken = cudaSupport;
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/security/trueseeing/default.nix b/pkgs/tools/security/trueseeing/default.nix
index ef0026f870f0f..182f33138b95a 100644
--- a/pkgs/tools/security/trueseeing/default.nix
+++ b/pkgs/tools/security/trueseeing/default.nix
@@ -44,6 +44,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Non-decompiling Android vulnerability scanner";
+    mainProgram = "trueseeing";
     homepage = "https://github.com/alterakey/trueseeing";
     changelog = "https://github.com/alterakey/trueseeing/releases/tag/v${version}";
     license = with licenses; [ gpl3Plus ];
diff --git a/pkgs/tools/security/trustymail/default.nix b/pkgs/tools/security/trustymail/default.nix
index 88d321708886f..11133548bbd30 100644
--- a/pkgs/tools/security/trustymail/default.nix
+++ b/pkgs/tools/security/trustymail/default.nix
@@ -39,6 +39,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to scan domains and return data based on trustworthy email best practices";
+    mainProgram = "trustymail";
     homepage = "https://github.com/cisagov/trustymail";
     changelog = "https://github.com/cisagov/trustymail/releases/tag/v${version}";
     license = with licenses; [ cc0 ];
diff --git a/pkgs/tools/security/uddup/default.nix b/pkgs/tools/security/uddup/default.nix
index 3516b4dcff8d5..4d850b016f9fc 100644
--- a/pkgs/tools/security/uddup/default.nix
+++ b/pkgs/tools/security/uddup/default.nix
@@ -29,6 +29,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool for de-duplication URLs";
+    mainProgram = "uddup";
     homepage = "https://github.com/rotemreiss/uddup";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/udpx/default.nix b/pkgs/tools/security/udpx/default.nix
index 081c002a09e5d..f240057a2b6d0 100644
--- a/pkgs/tools/security/udpx/default.nix
+++ b/pkgs/tools/security/udpx/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Single-packet UDP scanner";
+    mainProgram = "udpx";
     homepage = "https://github.com/nullt3r/udpx";
     changelog = "https://github.com/nullt3r/udpx/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/urlhunter/default.nix b/pkgs/tools/security/urlhunter/default.nix
index c70c43027a251..9f3f6b5a09b0c 100644
--- a/pkgs/tools/security/urlhunter/default.nix
+++ b/pkgs/tools/security/urlhunter/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Recon tool that allows searching shortened URLs";
+    mainProgram = "urlhunter";
     longDescription = ''
       urlhunter is a recon tool that allows searching on URLs that are
       exposed via shortener services such as bit.ly and goo.gl.
diff --git a/pkgs/tools/security/usbrip/default.nix b/pkgs/tools/security/usbrip/default.nix
index aa09d759b8e46..219a4315fd147 100644
--- a/pkgs/tools/security/usbrip/default.nix
+++ b/pkgs/tools/security/usbrip/default.nix
@@ -37,6 +37,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to track the history of USB events";
+    mainProgram = "usbrip";
     homepage = "https://github.com/snovvcrash/usbrip";
     license = with licenses; [ gpl3Plus ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/vals/default.nix b/pkgs/tools/security/vals/default.nix
index 5000615b4eab8..c6355bb3683bd 100644
--- a/pkgs/tools/security/vals/default.nix
+++ b/pkgs/tools/security/vals/default.nix
@@ -29,6 +29,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Helm-like configuration values loader with support for various sources";
+    mainProgram = "vals";
     license = licenses.asl20;
     homepage = "https://github.com/variantdev/vals";
     changelog = "https://github.com/variantdev/vals/releases/v${version}";
diff --git a/pkgs/tools/security/vault-medusa/default.nix b/pkgs/tools/security/vault-medusa/default.nix
index 382a732cf6b59..cd7cf537de587 100644
--- a/pkgs/tools/security/vault-medusa/default.nix
+++ b/pkgs/tools/security/vault-medusa/default.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A cli tool for importing and exporting Hashicorp Vault secrets";
+    mainProgram = "medusa";
     homepage = "https://github.com/jonasvinther/medusa";
     license = licenses.mit;
     maintainers = with maintainers; [ onny ];
diff --git a/pkgs/tools/security/vault-ssh-plus/default.nix b/pkgs/tools/security/vault-ssh-plus/default.nix
index a1c77e5d0a29f..80cfa8674cb2b 100644
--- a/pkgs/tools/security/vault-ssh-plus/default.nix
+++ b/pkgs/tools/security/vault-ssh-plus/default.nix
@@ -42,6 +42,7 @@ buildGoModule rec {
     homepage = "https://github.com/isometry/vault-ssh-plus";
     changelog = "https://github.com/isometry/vault-ssh-plus/releases/tag/v${version}";
     description = "Automatically use HashiCorp Vault SSH Client Key Signing with ssh(1)";
+    mainProgram = "vssh";
     license = licenses.mit;
     maintainers = with maintainers; [ lesuisse ];
   };
diff --git a/pkgs/tools/security/verifpal/default.nix b/pkgs/tools/security/verifpal/default.nix
index 3d47dfa3abc5f..378bd4731a419 100644
--- a/pkgs/tools/security/verifpal/default.nix
+++ b/pkgs/tools/security/verifpal/default.nix
@@ -29,6 +29,7 @@ buildGoModule rec {
   meta = {
     homepage = "https://verifpal.com/";
     description = "Cryptographic protocol analysis for students and engineers";
+    mainProgram = "verifpal";
     maintainers = with lib.maintainers; [ zimbatm ];
     license = with lib.licenses; [ gpl3 ];
   };
diff --git a/pkgs/tools/security/vexctl/default.nix b/pkgs/tools/security/vexctl/default.nix
index 335da7f93acf4..1bb56dbb0547e 100644
--- a/pkgs/tools/security/vexctl/default.nix
+++ b/pkgs/tools/security/vexctl/default.nix
@@ -63,6 +63,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/chainguard-dev/vex/";
     description = "A tool to attest VEX impact statements";
+    mainProgram = "vexctl";
     license = licenses.asl20;
     maintainers = with maintainers; [ jk ];
   };
diff --git a/pkgs/tools/security/vulnix/default.nix b/pkgs/tools/security/vulnix/default.nix
index 7f6d29891f0c6..305c3dc2f9a9b 100644
--- a/pkgs/tools/security/vulnix/default.nix
+++ b/pkgs/tools/security/vulnix/default.nix
@@ -55,6 +55,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "NixOS vulnerability scanner";
+    mainProgram = "vulnix";
     homepage = "https://github.com/flyingcircusio/vulnix";
     license = licenses.bsd3;
     maintainers = with maintainers; [ ckauhaus ];
diff --git a/pkgs/tools/security/wad/default.nix b/pkgs/tools/security/wad/default.nix
index 5dc81a7f56df9..348a35ccbe10d 100644
--- a/pkgs/tools/security/wad/default.nix
+++ b/pkgs/tools/security/wad/default.nix
@@ -30,6 +30,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool for detecting technologies used by web applications";
+    mainProgram = "wad";
     longDescription = ''
       WAD lets you analyze given URL(s) and detect technologies used by web
       application behind that URL, from the OS and web server level, to the
diff --git a/pkgs/tools/security/waf-tester/default.nix b/pkgs/tools/security/waf-tester/default.nix
index b8dd01ed19b81..47e5c2fbb5fb4 100644
--- a/pkgs/tools/security/waf-tester/default.nix
+++ b/pkgs/tools/security/waf-tester/default.nix
@@ -32,6 +32,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Tool to test Web Application Firewalls (WAFs)";
+    mainProgram = "waf-tester";
     homepage = "https://github.com/jreisinger/waf-tester";
     changelog = "https://github.com/jreisinger/waf-tester/releases/tag/v${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/security/wafw00f/default.nix b/pkgs/tools/security/wafw00f/default.nix
index 55d4b7591e387..d8d89a3e325a5 100644
--- a/pkgs/tools/security/wafw00f/default.nix
+++ b/pkgs/tools/security/wafw00f/default.nix
@@ -29,6 +29,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool to identify and fingerprint Web Application Firewalls (WAF)";
+    mainProgram = "wafw00f";
     homepage = "https://github.com/EnableSecurity/wafw00f";
     license = with licenses; [ bsd3 ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/web-eid-app/default.nix b/pkgs/tools/security/web-eid-app/default.nix
index fd9c4cc319e7e..067963e1aaffd 100644
--- a/pkgs/tools/security/web-eid-app/default.nix
+++ b/pkgs/tools/security/web-eid-app/default.nix
@@ -33,6 +33,7 @@ mkDerivation rec {
 
   meta = with lib; {
     description = "signing and authentication operations with smart cards for the Web eID browser extension";
+    mainProgram = "web-eid";
     longDescription = ''
       The Web eID application performs cryptographic digital signing and
       authentication operations with electronic ID smart cards for the Web eID
diff --git a/pkgs/tools/security/whatweb/default.nix b/pkgs/tools/security/whatweb/default.nix
index 30d866da869af..fbe78834c8268 100644
--- a/pkgs/tools/security/whatweb/default.nix
+++ b/pkgs/tools/security/whatweb/default.nix
@@ -42,6 +42,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Next generation web scanner";
+    mainProgram = "whatweb";
     homepage = "https://github.com/urbanadventurer/whatweb";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ wolfangaukang ];
diff --git a/pkgs/tools/security/wipe/default.nix b/pkgs/tools/security/wipe/default.nix
index 5ced99060fb74..0d9653f27918a 100644
--- a/pkgs/tools/security/wipe/default.nix
+++ b/pkgs/tools/security/wipe/default.nix
@@ -13,6 +13,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Secure file wiping utility";
+    mainProgram = "wipe";
     homepage    = "https://wipe.sourceforge.net/";
     license     = licenses.gpl2;
     platforms   = platforms.all;
diff --git a/pkgs/tools/security/xcat/default.nix b/pkgs/tools/security/xcat/default.nix
index ea3390b38c746..bb5fc62831e7e 100644
--- a/pkgs/tools/security/xcat/default.nix
+++ b/pkgs/tools/security/xcat/default.nix
@@ -37,6 +37,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "XPath injection tool";
+    mainProgram = "xcat";
     longDescription = ''
       xcat is an advanced tool for exploiting XPath injection vulnerabilities,
       featuring a comprehensive set of features to read the entire file being
diff --git a/pkgs/tools/security/xorex/default.nix b/pkgs/tools/security/xorex/default.nix
index a1a6e655996a9..933ab05b63823 100644
--- a/pkgs/tools/security/xorex/default.nix
+++ b/pkgs/tools/security/xorex/default.nix
@@ -31,6 +31,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "XOR Key Extractor";
+    mainProgram = "xorex";
     homepage = "https://github.com/Neo23x0/xorex";
     license = licenses.asl20;
     maintainers = [ ];
diff --git a/pkgs/tools/security/xsser/default.nix b/pkgs/tools/security/xsser/default.nix
index 6c75f2e733f26..c5fab523166e8 100644
--- a/pkgs/tools/security/xsser/default.nix
+++ b/pkgs/tools/security/xsser/default.nix
@@ -53,6 +53,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Automatic framework to detect, exploit and report XSS vulnerabilities in web-based applications";
+    mainProgram = "xsser";
     homepage = "https://xsser.03c8.net/";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ emilytrau ];
diff --git a/pkgs/tools/security/xsubfind3r/default.nix b/pkgs/tools/security/xsubfind3r/default.nix
index 7c5470a0715ae..976624c16b608 100644
--- a/pkgs/tools/security/xsubfind3r/default.nix
+++ b/pkgs/tools/security/xsubfind3r/default.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "CLI utility to find subdomains from curated passive online sources";
+    mainProgram = "xsubfind3r";
     homepage = "https://github.com/hueristiq/xsubfind3r";
     changelog = "https://github.com/hueristiq/xsubfind3r/releases/tag/${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/security/yarGen/default.nix b/pkgs/tools/security/yarGen/default.nix
index 4003c7e996ec2..12b2567f340ef 100644
--- a/pkgs/tools/security/yarGen/default.nix
+++ b/pkgs/tools/security/yarGen/default.nix
@@ -51,6 +51,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "A generator for YARA rules";
+    mainProgram = "yarGen.py";
     homepage = "https://github.com/Neo23x0/yarGen";
     license = licenses.bsd3;
     maintainers = [ ];
diff --git a/pkgs/tools/security/yersinia/default.nix b/pkgs/tools/security/yersinia/default.nix
index a913835743aa3..ae2ca9babff2c 100644
--- a/pkgs/tools/security/yersinia/default.nix
+++ b/pkgs/tools/security/yersinia/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A framework for layer 2 attacks";
+    mainProgram = "yersinia";
     homepage = "https://github.com/tomac/yersinia";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ vdot0x23 ];
diff --git a/pkgs/tools/security/yubikey-agent/default.nix b/pkgs/tools/security/yubikey-agent/default.nix
index 01e512e49bdd3..24cd2d7642678 100644
--- a/pkgs/tools/security/yubikey-agent/default.nix
+++ b/pkgs/tools/security/yubikey-agent/default.nix
@@ -37,6 +37,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A seamless ssh-agent for YubiKeys";
+    mainProgram = "yubikey-agent";
     license = licenses.bsd3;
     homepage = "https://filippo.io/yubikey-agent";
     maintainers = with lib.maintainers; [ philandstuff rawkode ];
diff --git a/pkgs/tools/security/zdns/default.nix b/pkgs/tools/security/zdns/default.nix
index 9b0c33f2802e7..d67bb6d8e4c72 100644
--- a/pkgs/tools/security/zdns/default.nix
+++ b/pkgs/tools/security/zdns/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "CLI DNS lookup tool";
+    mainProgram = "zdns";
     homepage = "https://github.com/zmap/zdns";
     license = with licenses; [ asl20 ];
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/security/zgrab2/default.nix b/pkgs/tools/security/zgrab2/default.nix
index c91c1b876099c..155a6a28e721e 100644
--- a/pkgs/tools/security/zgrab2/default.nix
+++ b/pkgs/tools/security/zgrab2/default.nix
@@ -29,6 +29,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Web application scanner";
+    mainProgram = "zgrab2";
     homepage = "https://github.com/zmap/zgrab2";
     license = with licenses; [ asl20 isc ];
     maintainers = with maintainers; [ fab juliusrickert ];
diff --git a/pkgs/tools/system/goreman/default.nix b/pkgs/tools/system/goreman/default.nix
index 57d7b46f54cfe..5b83b1885bc75 100644
--- a/pkgs/tools/system/goreman/default.nix
+++ b/pkgs/tools/system/goreman/default.nix
@@ -22,6 +22,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "foreman clone written in go language";
+    mainProgram = "goreman";
     homepage = "https://github.com/mattn/goreman";
     license = licenses.mit;
     maintainers = with maintainers; [ zimbatm ];
diff --git a/pkgs/tools/system/journalwatch/default.nix b/pkgs/tools/system/journalwatch/default.nix
index b732af4771699..8bb9b605a8f4f 100644
--- a/pkgs/tools/system/journalwatch/default.nix
+++ b/pkgs/tools/system/journalwatch/default.nix
@@ -32,6 +32,7 @@ buildPythonPackage rec {
 
   meta = with lib; {
     description = "A tool to find error messages in the systemd journal";
+    mainProgram = "journalwatch";
     homepage = "https://github.com/The-Compiler/journalwatch";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ florianjacob ];
diff --git a/pkgs/tools/system/netdata/go.d.plugin.nix b/pkgs/tools/system/netdata/go.d.plugin.nix
index ce53b278a9bd6..910ad29c13fa3 100644
--- a/pkgs/tools/system/netdata/go.d.plugin.nix
+++ b/pkgs/tools/system/netdata/go.d.plugin.nix
@@ -26,6 +26,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Netdata orchestrator for data collection modules written in go";
+    mainProgram = "godplugin";
     homepage = "https://github.com/netdata/go.d.plugin";
     changelog = "https://github.com/netdata/go.d.plugin/releases/tag/v${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/tools/system/rsyslog/default.nix b/pkgs/tools/system/rsyslog/default.nix
index 37af3d87fefcc..865c669262590 100644
--- a/pkgs/tools/system/rsyslog/default.nix
+++ b/pkgs/tools/system/rsyslog/default.nix
@@ -185,6 +185,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://www.rsyslog.com/";
     description = "Enhanced syslog implementation";
+    mainProgram = "rsyslogd";
     changelog = "https://raw.githubusercontent.com/rsyslog/rsyslog/v${version}/ChangeLog";
     license = licenses.gpl3Only;
     platforms = platforms.linux;
diff --git a/pkgs/tools/system/zenith/default.nix b/pkgs/tools/system/zenith/default.nix
index af8231e96c6d6..7beaab4713a57 100644
--- a/pkgs/tools/system/zenith/default.nix
+++ b/pkgs/tools/system/zenith/default.nix
@@ -46,6 +46,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     description = "Sort of like top or htop but with zoom-able charts, network, and disk usage"
       + lib.optionalString nvidiaSupport ", and NVIDIA GPU usage";
+    mainProgram = "zenith";
     homepage = "https://github.com/bvaisvil/zenith";
     license = licenses.mit;
     maintainers = with maintainers; [ wegank ];
diff --git a/pkgs/tools/text/abbreviate/default.nix b/pkgs/tools/text/abbreviate/default.nix
index aedf4d173006f..2f1e5bc812abd 100644
--- a/pkgs/tools/text/abbreviate/default.nix
+++ b/pkgs/tools/text/abbreviate/default.nix
@@ -32,6 +32,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Shorten your strings using common abbreviations";
+    mainProgram = "abbreviate";
     homepage = "https://github.com/dnnrly/abbreviate";
     changelog = "https://github.com/dnnrly/abbreviate/releases/tag/${src.rev}";
     license = licenses.asl20;
diff --git a/pkgs/tools/text/agrep/default.nix b/pkgs/tools/text/agrep/default.nix
index 9fe158b426aec..39de33badd77a 100644
--- a/pkgs/tools/text/agrep/default.nix
+++ b/pkgs/tools/text/agrep/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Approximate grep for fast fuzzy string searching";
+    mainProgram = "agrep";
     homepage = "https://www.tgries.de/agrep/";
     license = licenses.isc;
     platforms = with platforms; linux ++ darwin;
diff --git a/pkgs/tools/text/aha/default.nix b/pkgs/tools/text/aha/default.nix
index 4ac07cef7eedc..2344602a276c1 100644
--- a/pkgs/tools/text/aha/default.nix
+++ b/pkgs/tools/text/aha/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "ANSI HTML Adapter";
+    mainProgram = "aha";
     longDescription = ''
       aha takes ANSI SGR-coloured input and produces W3C-conformant HTML code.
     '';
diff --git a/pkgs/tools/text/align/default.nix b/pkgs/tools/text/align/default.nix
index e3287b762e344..844b03b2c8c12 100644
--- a/pkgs/tools/text/align/default.nix
+++ b/pkgs/tools/text/align/default.nix
@@ -16,6 +16,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/Guitarbum722/align";
     description = "A general purpose application and library for aligning text";
+    mainProgram = "align";
     maintainers = with maintainers; [ hrhino ];
     license = licenses.mit;
   };
diff --git a/pkgs/tools/text/anew/default.nix b/pkgs/tools/text/anew/default.nix
index 2312d1dc69bfb..58b6059a252c5 100644
--- a/pkgs/tools/text/anew/default.nix
+++ b/pkgs/tools/text/anew/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A tool for adding new lines to files, skipping duplicates";
+    mainProgram = "anew";
     homepage = "https://github.com/tomnomnom/anew";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda ];
diff --git a/pkgs/tools/text/anewer/default.nix b/pkgs/tools/text/anewer/default.nix
index e41b12cee4478..69c4eb39b3511 100644
--- a/pkgs/tools/text/anewer/default.nix
+++ b/pkgs/tools/text/anewer/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Append lines from stdin to a file if they don't already exist in the file";
+    mainProgram = "anewer";
     homepage = "https://github.com/ysf/anewer";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ figsoda ];
diff --git a/pkgs/tools/text/ansifilter/default.nix b/pkgs/tools/text/ansifilter/default.nix
index 3a4751c63f9f9..e2fd695d41ecc 100644
--- a/pkgs/tools/text/ansifilter/default.nix
+++ b/pkgs/tools/text/ansifilter/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Tool to convert ANSI to other formats";
+    mainProgram = "ansifilter";
     longDescription = ''
       Tool to remove ANSI or convert them to another format
       (HTML, TeX, LaTeX, RTF, Pango or BBCode)
diff --git a/pkgs/tools/text/ascii/default.nix b/pkgs/tools/text/ascii/default.nix
index 613288079d349..ad9884faa17d6 100644
--- a/pkgs/tools/text/ascii/default.nix
+++ b/pkgs/tools/text/ascii/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Interactive ASCII name and synonym chart";
+    mainProgram = "ascii";
     homepage = "http://www.catb.org/~esr/ascii/";
     license = licenses.bsd3;
     platforms = platforms.all;
diff --git a/pkgs/tools/text/asciigraph/default.nix b/pkgs/tools/text/asciigraph/default.nix
index 17c25874f54d6..518d7ce549c7b 100644
--- a/pkgs/tools/text/asciigraph/default.nix
+++ b/pkgs/tools/text/asciigraph/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/guptarohit/asciigraph";
     description = "Lightweight ASCII line graph ╭┈╯ command line app";
+    mainProgram = "asciigraph";
     license = licenses.bsd3;
     maintainers = with maintainers; [ mmahut ];
   };
diff --git a/pkgs/tools/text/autocorrect/default.nix b/pkgs/tools/text/autocorrect/default.nix
index 676eec70076ce..2e51672363f43 100644
--- a/pkgs/tools/text/autocorrect/default.nix
+++ b/pkgs/tools/text/autocorrect/default.nix
@@ -28,6 +28,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A linter and formatter for help you improve copywriting, to correct spaces, punctuations between CJK (Chinese, Japanese, Korean)";
+    mainProgram = "autocorrect";
     homepage = "https://huacnlee.github.io/autocorrect";
     changelog = "https://github.com/huacnlee/autocorrect/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/text/base16384/default.nix b/pkgs/tools/text/base16384/default.nix
index c9937fa5cd69b..7111eece42958 100644
--- a/pkgs/tools/text/base16384/default.nix
+++ b/pkgs/tools/text/base16384/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Encode binary files to printable utf16be";
+    mainProgram = "base16384";
     homepage = "https://github.com/fumiama/base16384";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ aleksana ];
diff --git a/pkgs/tools/text/bashblog/default.nix b/pkgs/tools/text/bashblog/default.nix
index 0080ed0f7e1c4..0159e20de99ad 100644
--- a/pkgs/tools/text/bashblog/default.nix
+++ b/pkgs/tools/text/bashblog/default.nix
@@ -54,6 +54,7 @@ in stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A single Bash script to create blogs";
+    mainProgram = "bashblog";
     homepage = "https://github.com/cfenollosa/bashblog";
     license = licenses.gpl3Only;
     platforms = platforms.unix;
diff --git a/pkgs/tools/text/book-summary/default.nix b/pkgs/tools/text/book-summary/default.nix
index a1bbe710273c9..374c107f9a3df 100644
--- a/pkgs/tools/text/book-summary/default.nix
+++ b/pkgs/tools/text/book-summary/default.nix
@@ -16,6 +16,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Book auto-summary for gitbook and mdBook";
+    mainProgram = "book-summary";
     homepage = "https://github.com/dvogt23/book-summary";
     license = licenses.mit;
     maintainers = with teams; iog.members;
diff --git a/pkgs/tools/text/boxes/default.nix b/pkgs/tools/text/boxes/default.nix
index 5340c5eccff9e..fe78492b36a00 100644
--- a/pkgs/tools/text/boxes/default.nix
+++ b/pkgs/tools/text/boxes/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A command line program which draws, removes, and repairs ASCII art boxes";
+    mainProgram = "boxes";
     homepage = "https://boxes.thomasjensen.com";
     license = licenses.gpl2;
     maintainers = with maintainers; [ waiting-for-dev ];
diff --git a/pkgs/tools/text/catdocx/default.nix b/pkgs/tools/text/catdocx/default.nix
index c762e15c80e23..27eb964eb3c23 100644
--- a/pkgs/tools/text/catdocx/default.nix
+++ b/pkgs/tools/text/catdocx/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Extracts plain text from docx files";
+    mainProgram = "catdocx";
     homepage = "https://github.com/jncraton/catdocx";
     license = with licenses; [ bsd3 ];
     maintainers = [ maintainers.michalrus ];
diff --git a/pkgs/tools/text/cconv/default.nix b/pkgs/tools/text/cconv/default.nix
index de8405aed43b0..86aaf2d5f7c6b 100644
--- a/pkgs/tools/text/cconv/default.nix
+++ b/pkgs/tools/text/cconv/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A iconv based simplified-traditional chinese conversion tool";
+    mainProgram = "cconv";
     homepage = "https://github.com/xiaoyjy/cconv";
     license = licenses.mit;
     platforms = platforms.all;
diff --git a/pkgs/tools/text/chars/default.nix b/pkgs/tools/text/chars/default.nix
index 74083feb68f52..509953e8059b1 100644
--- a/pkgs/tools/text/chars/default.nix
+++ b/pkgs/tools/text/chars/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Commandline tool to display information about unicode characters";
+    mainProgram = "chars";
     homepage = "https://github.com/antifuchs/chars";
     license = licenses.mit;
     maintainers = with maintainers; [ bbigras ];
diff --git a/pkgs/tools/text/choose/default.nix b/pkgs/tools/text/choose/default.nix
index f40fcd1e3b6d4..b765a40f5496f 100644
--- a/pkgs/tools/text/choose/default.nix
+++ b/pkgs/tools/text/choose/default.nix
@@ -18,6 +18,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A human-friendly and fast alternative to cut and (sometimes) awk";
+    mainProgram = "choose";
     homepage = "https://github.com/theryangeary/choose";
     license = licenses.gpl3;
     maintainers = with maintainers; [ sohalt ];
diff --git a/pkgs/tools/text/cidrgrep/default.nix b/pkgs/tools/text/cidrgrep/default.nix
index 0117374dadefa..ddc67097fb28a 100644
--- a/pkgs/tools/text/cidrgrep/default.nix
+++ b/pkgs/tools/text/cidrgrep/default.nix
@@ -19,6 +19,7 @@ buildGoModule {
 
   meta = {
     description = "Like grep but for IPv4 CIDRs";
+    mainProgram = "cidrgrep";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ das_j ];
   };
diff --git a/pkgs/tools/text/cmigemo/default.nix b/pkgs/tools/text/cmigemo/default.nix
index 179db9c337ddf..09810f1e08368 100644
--- a/pkgs/tools/text/cmigemo/default.nix
+++ b/pkgs/tools/text/cmigemo/default.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A tool that supports Japanese incremental search with Romaji";
+    mainProgram = "cmigemo";
     homepage = "https://www.kaoriya.net/software/cmigemo";
     license = licenses.mit;
     maintainers = [ maintainers.cohei ];
diff --git a/pkgs/tools/text/coloursum/default.nix b/pkgs/tools/text/coloursum/default.nix
index 93ebf6c309e45..78f583e3f73dc 100644
--- a/pkgs/tools/text/coloursum/default.nix
+++ b/pkgs/tools/text/coloursum/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Colourise your checksum output";
+    mainProgram = "coloursum";
     homepage = "https://github.com/ticky/coloursum";
     license = licenses.mit;
     maintainers = with maintainers; [ fgaz ];
diff --git a/pkgs/tools/text/comrak/default.nix b/pkgs/tools/text/comrak/default.nix
index 3b9af32c28330..e2a9633aa15a6 100644
--- a/pkgs/tools/text/comrak/default.nix
+++ b/pkgs/tools/text/comrak/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A CommonMark-compatible GitHub Flavored Markdown parser and formatter";
+    mainProgram = "comrak";
     homepage = "https://github.com/kivikakk/comrak";
     changelog = "https://github.com/kivikakk/comrak/blob/${version}/changelog.txt";
     license = licenses.bsd2;
diff --git a/pkgs/tools/text/convertlit/default.nix b/pkgs/tools/text/convertlit/default.nix
index 4225934d2d4e1..23112e83b8c88 100644
--- a/pkgs/tools/text/convertlit/default.nix
+++ b/pkgs/tools/text/convertlit/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://www.convertlit.com/";
     description = "A tool for converting Microsoft Reader ebooks to more open formats";
+    mainProgram = "clit";
     license = lib.licenses.gpl2;
     platforms = lib.platforms.linux;
   };
diff --git a/pkgs/tools/text/copyright-update/default.nix b/pkgs/tools/text/copyright-update/default.nix
index e0318c20a0e69..72cecf1e9246a 100644
--- a/pkgs/tools/text/copyright-update/default.nix
+++ b/pkgs/tools/text/copyright-update/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/jaalto/project--copyright-update";
     description = "Updates the copyright information in a set of files";
+    mainProgram = "copyright-update";
     license = licenses.gpl2Plus;
     platforms = platforms.all;
     maintainers = [ maintainers.rycee ];
diff --git a/pkgs/tools/text/csvdiff/default.nix b/pkgs/tools/text/csvdiff/default.nix
index 236993b2dd257..b7e68a7091224 100644
--- a/pkgs/tools/text/csvdiff/default.nix
+++ b/pkgs/tools/text/csvdiff/default.nix
@@ -19,6 +19,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://aswinkarthik.github.io/csvdiff/";
     description = "A fast diff tool for comparing csv files";
+    mainProgram = "csvdiff";
     license = licenses.mit;
     maintainers = with maintainers; [ turion ];
   };
diff --git a/pkgs/tools/text/csview/default.nix b/pkgs/tools/text/csview/default.nix
index 8f5ed7989f478..49bd81c7e01ea 100644
--- a/pkgs/tools/text/csview/default.nix
+++ b/pkgs/tools/text/csview/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A high performance csv viewer with cjk/emoji support";
+    mainProgram = "csview";
     homepage = "https://github.com/wfxr/csview";
     license = with licenses; [ mit /* or */ asl20 ];
     maintainers = with maintainers; [ figsoda ];
diff --git a/pkgs/tools/text/dadadodo/default.nix b/pkgs/tools/text/dadadodo/default.nix
index a70a7efda72ed..dc1a18ae23f2a 100644
--- a/pkgs/tools/text/dadadodo/default.nix
+++ b/pkgs/tools/text/dadadodo/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Markov chain-based text generator";
+    mainProgram = "dadadodo";
     homepage = "http://www.jwz.org/dadadodo";
     maintainers = with maintainers; [ pSub ];
     platforms = platforms.all;
diff --git a/pkgs/tools/text/dfmt/default.nix b/pkgs/tools/text/dfmt/default.nix
index f09ce0b452563..c31335e560f1a 100644
--- a/pkgs/tools/text/dfmt/default.nix
+++ b/pkgs/tools/text/dfmt/default.nix
@@ -20,6 +20,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Format paragraphs, comments and doc strings";
+    mainProgram = "dfmt";
     homepage = "https://github.com/dmerejkowsky/dfmt";
     license = licenses.bsd3;
     maintainers = with maintainers; [ cole-h ];
diff --git a/pkgs/tools/text/diffr/default.nix b/pkgs/tools/text/diffr/default.nix
index ee12b39c3ec34..9abc2fac51506 100644
--- a/pkgs/tools/text/diffr/default.nix
+++ b/pkgs/tools/text/diffr/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Yet another diff highlighting tool";
+    mainProgram = "diffr";
     homepage = "https://github.com/mookid/diffr";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ davidtwco ];
diff --git a/pkgs/tools/text/diffstat/default.nix b/pkgs/tools/text/diffstat/default.nix
index 0b10014e0e6ef..0e5b8d9a71749 100644
--- a/pkgs/tools/text/diffstat/default.nix
+++ b/pkgs/tools/text/diffstat/default.nix
@@ -14,6 +14,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Read output of diff and display a histogram of the changes";
+    mainProgram = "diffstat";
     longDescription = ''
       diffstat reads the output of diff and displays a histogram of the
       insertions, deletions, and modifications per-file. It is useful for
diff --git a/pkgs/tools/text/dirdiff/default.nix b/pkgs/tools/text/dirdiff/default.nix
index 437743e66ef6f..c0347aface094 100644
--- a/pkgs/tools/text/dirdiff/default.nix
+++ b/pkgs/tools/text/dirdiff/default.nix
@@ -52,6 +52,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Graphical directory tree diff and merge tool";
+    mainProgram = "dirdiff";
     longDescription = ''
       Dirdiff is a graphical tool for displaying the differences between
       directory trees and for merging changes from one tree into another.
diff --git a/pkgs/tools/text/each/default.nix b/pkgs/tools/text/each/default.nix
index 02974030b269c..6f24ee66fe409 100644
--- a/pkgs/tools/text/each/default.nix
+++ b/pkgs/tools/text/each/default.nix
@@ -18,6 +18,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = " A better way of working with structured data on the command line";
+    mainProgram = "each";
     homepage = "https://github.com/arraypad/each";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ thiagokokada ];
diff --git a/pkgs/tools/text/epubcheck/default.nix b/pkgs/tools/text/epubcheck/default.nix
index fd84abb0ef064..abd2803508bb1 100644
--- a/pkgs/tools/text/epubcheck/default.nix
+++ b/pkgs/tools/text/epubcheck/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/w3c/epubcheck";
     description = "Validation tool for EPUB";
+    mainProgram = "epubcheck";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = with licenses; [ asl20 bsd3 mpl10 w3c ];
     platforms = platforms.all;
diff --git a/pkgs/tools/text/esh/default.nix b/pkgs/tools/text/esh/default.nix
index a1d6db2a7c2d7..abbeb29234da1 100644
--- a/pkgs/tools/text/esh/default.nix
+++ b/pkgs/tools/text/esh/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Simple templating engine based on shell";
+    mainProgram = "esh";
     homepage = "https://github.com/jirutka/esh";
     license = licenses.mit;
     maintainers = with maintainers; [ mnacamura ];
diff --git a/pkgs/tools/text/fanficfare/default.nix b/pkgs/tools/text/fanficfare/default.nix
index 149082cc995f0..adf1415140389 100644
--- a/pkgs/tools/text/fanficfare/default.nix
+++ b/pkgs/tools/text/fanficfare/default.nix
@@ -30,6 +30,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Tool for making eBooks from fanfiction web sites";
+    mainProgram = "fanficfare";
     homepage = "https://github.com/JimmXinu/FanFicFare";
     license = licenses.gpl3;
     platforms = platforms.unix;
diff --git a/pkgs/tools/text/fastmod/default.nix b/pkgs/tools/text/fastmod/default.nix
index f8317d70d7782..53d68a7723a6a 100644
--- a/pkgs/tools/text/fastmod/default.nix
+++ b/pkgs/tools/text/fastmod/default.nix
@@ -22,6 +22,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A utility that makes sweeping changes to large, shared code bases";
+    mainProgram = "fastmod";
     homepage = "https://github.com/facebookincubator/fastmod";
     license = licenses.asl20;
     maintainers = with maintainers; [ jduan ];
diff --git a/pkgs/tools/text/frangipanni/default.nix b/pkgs/tools/text/frangipanni/default.nix
index bb144b8f43e14..f95c6b4f16369 100644
--- a/pkgs/tools/text/frangipanni/default.nix
+++ b/pkgs/tools/text/frangipanni/default.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Convert lines of text into a tree structure";
+    mainProgram = "frangipanni";
     homepage = "https://github.com/birchb1024/frangipanni";
     license = licenses.mit;
     maintainers = with maintainers; [ siraben ];
diff --git a/pkgs/tools/text/frawk/default.nix b/pkgs/tools/text/frawk/default.nix
index 230d1328d457a..2e093d8157c72 100644
--- a/pkgs/tools/text/frawk/default.nix
+++ b/pkgs/tools/text/frawk/default.nix
@@ -41,6 +41,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A small programming language for writing short programs processing textual data";
+    mainProgram = "frawk";
     homepage = "https://github.com/ezrosent/frawk";
     changelog = "https://github.com/ezrosent/frawk/releases/tag/v${version}";
     license = with licenses; [ mit /* or */ asl20 ];
diff --git a/pkgs/tools/text/frogmouth/default.nix b/pkgs/tools/text/frogmouth/default.nix
index 68d63dc7aa5fe..e7c9916c13390 100644
--- a/pkgs/tools/text/frogmouth/default.nix
+++ b/pkgs/tools/text/frogmouth/default.nix
@@ -36,6 +36,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "A Markdown browser for your terminal";
+    mainProgram = "frogmouth";
     homepage = "https://github.com/Textualize/frogmouth";
     changelog = "https://github.com/Textualize/frogmouth/blob/${src.rev}/ChangeLog.md";
     license = licenses.mit;
diff --git a/pkgs/tools/text/fst/default.nix b/pkgs/tools/text/fst/default.nix
index d08d29376b74e..0ad2075de08fc 100644
--- a/pkgs/tools/text/fst/default.nix
+++ b/pkgs/tools/text/fst/default.nix
@@ -31,6 +31,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Represent large sets and maps compactly with finite state transducers";
+    mainProgram = "fst";
     homepage = "https://github.com/BurntSushi/fst";
     license = with licenses; [ unlicense /* or */ mit ];
     maintainers = with maintainers; [ rmcgibbo ];
diff --git a/pkgs/tools/text/gawk/gawkextlib.nix b/pkgs/tools/text/gawk/gawkextlib.nix
index be50b93a7e2f8..86bf2beaa91d6 100644
--- a/pkgs/tools/text/gawk/gawkextlib.nix
+++ b/pkgs/tools/text/gawk/gawkextlib.nix
@@ -45,6 +45,7 @@ let
         meta = with lib; {
           homepage = "https://sourceforge.net/projects/gawkextlib/";
           description = "Dynamically loaded extension libraries for GNU AWK";
+          mainProgram = "xmlgawk";
           longDescription = ''
             The gawkextlib project provides several extension libraries for
             gawk (GNU AWK), as well as libgawkextlib containing some APIs that
diff --git a/pkgs/tools/text/gjo/default.nix b/pkgs/tools/text/gjo/default.nix
index 99d988797bfce..d7fcd3a0845a6 100644
--- a/pkgs/tools/text/gjo/default.nix
+++ b/pkgs/tools/text/gjo/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Small utility to create JSON objects";
+    mainProgram = "gjo";
     homepage = "https://github.com/skanehira/gjo";
     license = licenses.mit;
     maintainers = with maintainers; [ doronbehar ];
diff --git a/pkgs/tools/text/glogg/default.nix b/pkgs/tools/text/glogg/default.nix
index 855490df4ab4d..a83baf4aa7619 100644
--- a/pkgs/tools/text/glogg/default.nix
+++ b/pkgs/tools/text/glogg/default.nix
@@ -29,6 +29,7 @@ mkDerivation rec {
 
   meta = with lib; {
     description = "The fast, smart log explorer";
+    mainProgram = "glogg";
     longDescription = ''
       A multi-platform GUI application to browse and search through long or complex log files. It is designed with programmers and system administrators in mind. glogg can be seen as a graphical, interactive combination of grep and less.
     '';
diff --git a/pkgs/tools/text/gnupatch/default.nix b/pkgs/tools/text/gnupatch/default.nix
index f4cb20202f0b1..c19e087ea5478 100644
--- a/pkgs/tools/text/gnupatch/default.nix
+++ b/pkgs/tools/text/gnupatch/default.nix
@@ -42,6 +42,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "GNU Patch, a program to apply differences to files";
+    mainProgram = "patch";
 
     longDescription =
       '' GNU Patch takes a patch file containing a difference listing
diff --git a/pkgs/tools/text/gtranslator/default.nix b/pkgs/tools/text/gtranslator/default.nix
index 5c9c7c8687387..8795ff33806af 100644
--- a/pkgs/tools/text/gtranslator/default.nix
+++ b/pkgs/tools/text/gtranslator/default.nix
@@ -60,6 +60,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "GNOME translation making program";
+    mainProgram = "gtranslator";
     homepage = "https://wiki.gnome.org/Apps/Gtranslator";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/tools/text/gtree/default.nix b/pkgs/tools/text/gtree/default.nix
index 266b807c3f606..5e0eb017a6e22 100644
--- a/pkgs/tools/text/gtree/default.nix
+++ b/pkgs/tools/text/gtree/default.nix
@@ -37,6 +37,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Generate directory trees and directories using Markdown or programmatically";
+    mainProgram = "gtree";
     homepage = "https://github.com/ddddddO/gtree";
     changelog = "https://github.com/ddddddO/gtree/releases/tag/${src.rev}";
     license = licenses.bsd2;
diff --git a/pkgs/tools/text/gucci/default.nix b/pkgs/tools/text/gucci/default.nix
index f866f74710a9e..324dc56ca264d 100644
--- a/pkgs/tools/text/gucci/default.nix
+++ b/pkgs/tools/text/gucci/default.nix
@@ -31,6 +31,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A simple CLI templating tool written in golang";
+    mainProgram = "gucci";
     homepage = "https://github.com/noqcks/gucci";
     license = licenses.mit;
     maintainers = with maintainers; [ braydenjw ];
diff --git a/pkgs/tools/text/hcledit/default.nix b/pkgs/tools/text/hcledit/default.nix
index d5b2fb0cc0a2a..a39802d028223 100644
--- a/pkgs/tools/text/hcledit/default.nix
+++ b/pkgs/tools/text/hcledit/default.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A command line editor for HCL";
+    mainProgram = "hcledit";
     homepage = "https://github.com/minamijoyo/hcledit";
     license = licenses.mit;
     maintainers = with maintainers; [ aleksana ];
diff --git a/pkgs/tools/text/highlight/default.nix b/pkgs/tools/text/highlight/default.nix
index 7e02f3f60ceb2..fc6b12fa6b169 100644
--- a/pkgs/tools/text/highlight/default.nix
+++ b/pkgs/tools/text/highlight/default.nix
@@ -51,6 +51,7 @@ let
 
     meta = with lib; {
       description = "Source code highlighting tool";
+      mainProgram = "highlight";
       homepage = "http://www.andre-simon.de/doku/highlight/en/highlight.php";
       platforms = platforms.unix;
       maintainers = with maintainers; [ willibutz ];
diff --git a/pkgs/tools/text/html2text/default.nix b/pkgs/tools/text/html2text/default.nix
index 7ef802e925fb5..4bcf02b5c8485 100644
--- a/pkgs/tools/text/html2text/default.nix
+++ b/pkgs/tools/text/html2text/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Convert HTML to plain text";
+    mainProgram = "html2text";
     homepage = "http://www.mbayer.de/html2text/";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.unix;
diff --git a/pkgs/tools/text/huniq/default.nix b/pkgs/tools/text/huniq/default.nix
index a1d30d2fb11df..3bb1252ae0c69 100644
--- a/pkgs/tools/text/huniq/default.nix
+++ b/pkgs/tools/text/huniq/default.nix
@@ -13,6 +13,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Command line utility to remove duplicates from the given input";
+    mainProgram = "huniq";
     homepage = "https://github.com/koraa/huniq";
     license = licenses.bsd3;
     maintainers = with maintainers; [ figsoda ];
diff --git a/pkgs/tools/text/hyx/default.nix b/pkgs/tools/text/hyx/default.nix
index f599d067f094c..3cbcac20966a2 100644
--- a/pkgs/tools/text/hyx/default.nix
+++ b/pkgs/tools/text/hyx/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "minimalistic but powerful Linux console hex editor";
+    mainProgram = "hyx";
     homepage = "https://yx7.cc/code/";
     license = licenses.mit;
     maintainers = with maintainers; [ fpletz ];
diff --git a/pkgs/tools/text/invoice2data/default.nix b/pkgs/tools/text/invoice2data/default.nix
index aed1bd2afd50f..b2179d3f63b24 100644
--- a/pkgs/tools/text/invoice2data/default.nix
+++ b/pkgs/tools/text/invoice2data/default.nix
@@ -57,6 +57,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Data extractor for PDF invoices";
+    mainProgram = "invoice2data";
     homepage = "https://github.com/invoice-x/invoice2data";
     license = licenses.mit;
     maintainers = with maintainers; [ psyanticy ];
diff --git a/pkgs/tools/text/jen/default.nix b/pkgs/tools/text/jen/default.nix
index 2361c1aafc1b7..0ed0548c0d506 100644
--- a/pkgs/tools/text/jen/default.nix
+++ b/pkgs/tools/text/jen/default.nix
@@ -22,6 +22,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A simple CLI generation tool for creating large datasets";
+    mainProgram = "jen";
     homepage = "https://github.com/whitfin/jen";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda ];
diff --git a/pkgs/tools/text/jotdown/default.nix b/pkgs/tools/text/jotdown/default.nix
index e39209cfe106d..425ad6bb050b8 100644
--- a/pkgs/tools/text/jotdown/default.nix
+++ b/pkgs/tools/text/jotdown/default.nix
@@ -18,6 +18,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A minimal Djot CLI";
+    mainProgram = "jotdown";
     homepage = "https://github.com/hellux/jotdown";
     changelog = "https://github.com/hellux/jotdown/blob/${src.rev}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/pkgs/tools/text/jsawk/default.nix b/pkgs/tools/text/jsawk/default.nix
index 2f21900b8d01f..9547e65dc43d5 100644
--- a/pkgs/tools/text/jsawk/default.nix
+++ b/pkgs/tools/text/jsawk/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Like awk, but for JSON";
+    mainProgram = "jsawk";
     homepage = "https://github.com/micha/jsawk";
     license = lib.licenses.publicDomain;
     maintainers = with lib.maintainers; [ puffnfresh ];
diff --git a/pkgs/tools/text/jumanpp/default.nix b/pkgs/tools/text/jumanpp/default.nix
index 348c785ab28dd..af141c873b3b4 100644
--- a/pkgs/tools/text/jumanpp/default.nix
+++ b/pkgs/tools/text/jumanpp/default.nix
@@ -36,6 +36,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A Japanese morphological analyser using a recurrent neural network language model (RNNLM)";
+    mainProgram = "jumanpp";
     longDescription = ''
       JUMAN++ is a new morphological analyser that considers semantic
       plausibility of word sequences by using a recurrent neural network
diff --git a/pkgs/tools/text/kdiff3/default.nix b/pkgs/tools/text/kdiff3/default.nix
index f9f55bc28851e..73fa2ed1baea8 100644
--- a/pkgs/tools/text/kdiff3/default.nix
+++ b/pkgs/tools/text/kdiff3/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Compares and merges 2 or 3 files or directories";
+    mainProgram = "kdiff3";
     homepage = "https://invent.kde.org/sdk/kdiff3";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ peterhoeg ];
diff --git a/pkgs/tools/text/l2md/default.nix b/pkgs/tools/text/l2md/default.nix
index 08ec219690f6a..d8bb04378f070 100644
--- a/pkgs/tools/text/l2md/default.nix
+++ b/pkgs/tools/text/l2md/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Convert public-inbox archives to maildir messages";
+    mainProgram = "l2md";
     longDescription = ''
       Quick and dirty hack to import lore.kernel.org list archives via git,
       to export them in maildir format or through a pipe, and to keep them
diff --git a/pkgs/tools/text/mairix/default.nix b/pkgs/tools/text/mairix/default.nix
index aa58ecdd35a9c..3528a054b2914 100644
--- a/pkgs/tools/text/mairix/default.nix
+++ b/pkgs/tools/text/mairix/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
     homepage = "http://www.rc0.org.uk/mairix";
     license = lib.licenses.gpl2Plus;
     description = "Program for indexing and searching email messages stored in maildir, MH or mbox";
+    mainProgram = "mairix";
     maintainers = with lib.maintainers; [viric];
     platforms = with lib.platforms; all;
   };
diff --git a/pkgs/tools/text/mark/default.nix b/pkgs/tools/text/mark/default.nix
index 33d6072c8c816..ca42b2687edc9 100644
--- a/pkgs/tools/text/mark/default.nix
+++ b/pkgs/tools/text/mark/default.nix
@@ -17,6 +17,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A tool for syncing your markdown documentation with Atlassian Confluence pages";
+    mainProgram = "mark";
     homepage = "https://github.com/kovetskiy/mark";
     license = licenses.asl20;
     maintainers = with maintainers; [ rguevara84 ];
diff --git a/pkgs/tools/text/markscribe/default.nix b/pkgs/tools/text/markscribe/default.nix
index d542fe2811077..c2ee3a596e979 100644
--- a/pkgs/tools/text/markscribe/default.nix
+++ b/pkgs/tools/text/markscribe/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Your personal markdown scribe with template-engine and Git(Hub) & RSS powers";
+    mainProgram = "markscribe";
     homepage = "https://github.com/muesli/markscribe";
     changelog = "https://github.com/muesli/markscribe/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/pkgs/tools/text/math-review/default.nix b/pkgs/tools/text/math-review/default.nix
index 3592aad8bec79..6206c67bf1c1c 100644
--- a/pkgs/tools/text/math-review/default.nix
+++ b/pkgs/tools/text/math-review/default.nix
@@ -25,6 +25,7 @@ buildNpmPackage rec {
 
   meta = with lib; {
     description = "Emacs preview math inline";
+    mainProgram = "math-preview";
     license = licenses.gpl3Plus;
     homepage = "https://gitlab.com/matsievskiysv/math-preview";
     maintainers = with maintainers; [ renesat ];
diff --git a/pkgs/tools/text/mawk/default.nix b/pkgs/tools/text/mawk/default.nix
index 54e1e303fd4ce..06dcdcd8a9bab 100644
--- a/pkgs/tools/text/mawk/default.nix
+++ b/pkgs/tools/text/mawk/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Interpreter for the AWK Programming Language";
+    mainProgram = "mawk";
     homepage = "https://invisible-island.net/mawk/mawk.html";
     license = licenses.gpl2;
     maintainers = with maintainers; [ ehmry ];
diff --git a/pkgs/tools/text/mb2md/default.nix b/pkgs/tools/text/mb2md/default.nix
index 78ce7f5939741..3594d4753d852 100644
--- a/pkgs/tools/text/mb2md/default.nix
+++ b/pkgs/tools/text/mb2md/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "mbox to maildir tool";
+    mainProgram = "mb2md";
     license = licenses.publicDomain;
     platforms = platforms.all;
     maintainers = [ maintainers.jb55 ];
diff --git a/pkgs/tools/text/mdbook-admonish/default.nix b/pkgs/tools/text/mdbook-admonish/default.nix
index 1fc72d16c3ce3..1deaf9bc7c2b0 100644
--- a/pkgs/tools/text/mdbook-admonish/default.nix
+++ b/pkgs/tools/text/mdbook-admonish/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A preprocessor for mdbook to add Material Design admonishments";
+    mainProgram = "mdbook-admonish";
     license = licenses.mit;
     maintainers = with maintainers; [ jmgilman Frostman ];
     homepage = "https://github.com/tommilligan/mdbook-admonish";
diff --git a/pkgs/tools/text/mdbook-cmdrun/default.nix b/pkgs/tools/text/mdbook-cmdrun/default.nix
index 07252461336c4..05d27d3e3ad5c 100644
--- a/pkgs/tools/text/mdbook-cmdrun/default.nix
+++ b/pkgs/tools/text/mdbook-cmdrun/default.nix
@@ -19,6 +19,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "mdbook preprocessor to run arbitrary commands";
+    mainProgram = "mdbook-cmdrun";
     homepage = "https://github.com/FauconFan/mdbook-cmdrun";
     license = licenses.mit;
     maintainers = with maintainers; [ pinpox ];
diff --git a/pkgs/tools/text/mdbook-d2/default.nix b/pkgs/tools/text/mdbook-d2/default.nix
index e8a5f169399e3..afff44b9f473a 100644
--- a/pkgs/tools/text/mdbook-d2/default.nix
+++ b/pkgs/tools/text/mdbook-d2/default.nix
@@ -25,6 +25,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "D2 diagram generator plugin for MdBook";
+    mainProgram = "mdbook-d2";
     homepage = "https://github.com/danieleades/mdbook-d2";
     changelog = "https://github.com/danieleades/mdbook-d2/blob/${src.rev}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/pkgs/tools/text/mdbook-emojicodes/default.nix b/pkgs/tools/text/mdbook-emojicodes/default.nix
index 0bbcffd28fe2f..21c8e48468a29 100644
--- a/pkgs/tools/text/mdbook-emojicodes/default.nix
+++ b/pkgs/tools/text/mdbook-emojicodes/default.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "MDBook preprocessor for converting emojicodes (e.g. `: cat :`) into emojis 🐱";
+    mainProgram = "mdbook-emojicodes";
     homepage = "https://github.com/blyxyas/mdbook-emojicodes";
     changelog = "https://github.com/blyxyas/mdbook-emojicodes/releases/tag/${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/text/mdbook-epub/default.nix b/pkgs/tools/text/mdbook-epub/default.nix
index 47c118afa43a1..16e3bff734439 100644
--- a/pkgs/tools/text/mdbook-epub/default.nix
+++ b/pkgs/tools/text/mdbook-epub/default.nix
@@ -34,6 +34,7 @@ in rustPlatform.buildRustPackage {
 
   meta = with lib; {
     description = "mdbook backend for generating an e-book in the EPUB format";
+    mainProgram = "mdbook-epub";
     homepage = "https://michael-f-bryan.github.io/mdbook-epub";
     license = licenses.mpl20;
     maintainers = with maintainers; [ yuu ];
diff --git a/pkgs/tools/text/mdbook-footnote/default.nix b/pkgs/tools/text/mdbook-footnote/default.nix
index d69c7e4fdd864..cc140a5b5d83d 100644
--- a/pkgs/tools/text/mdbook-footnote/default.nix
+++ b/pkgs/tools/text/mdbook-footnote/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A preprocessor for mdbook to support the inclusion of automatically numbered footnotes";
+    mainProgram = "mdbook-footnote";
     homepage = "https://github.com/daviddrysdale/mdbook-footnote";
     license = licenses.asl20;
     maintainers = with maintainers; [ brianmcgillion ];
diff --git a/pkgs/tools/text/mdbook-graphviz/default.nix b/pkgs/tools/text/mdbook-graphviz/default.nix
index ddb4f48fd2f77..c854d4be35a01 100644
--- a/pkgs/tools/text/mdbook-graphviz/default.nix
+++ b/pkgs/tools/text/mdbook-graphviz/default.nix
@@ -19,6 +19,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A preprocessor for mdbook, rendering Graphviz graphs to HTML at build time";
+    mainProgram = "mdbook-graphviz";
     homepage = "https://github.com/dylanowen/mdbook-graphviz";
     changelog = "https://github.com/dylanowen/mdbook-graphviz/releases/tag/v${version}";
     license = [ licenses.mpl20 ];
diff --git a/pkgs/tools/text/mdbook-katex/default.nix b/pkgs/tools/text/mdbook-katex/default.nix
index ad4e07f14729e..8d27976c346be 100644
--- a/pkgs/tools/text/mdbook-katex/default.nix
+++ b/pkgs/tools/text/mdbook-katex/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A preprocessor for mdbook, rendering LaTeX equations to HTML at build time";
+    mainProgram = "mdbook-katex";
     homepage = "https://github.com/lzanini/${pname}";
     license = [ licenses.mit ];
     maintainers = with maintainers; [ lovesegfault ];
diff --git a/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix b/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix
index 07fd2cd634dd3..d419d8b0c1169 100644
--- a/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix
+++ b/pkgs/tools/text/mdbook-kroki-preprocessor/default.nix
@@ -33,6 +33,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Render Kroki diagrams from files or code blocks in mdbook";
+    mainProgram = "mdbook-kroki-preprocessor";
     homepage = "https://github.com/joelcourtney/mdbook-kroki-preprocessor";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ blaggacao ];
diff --git a/pkgs/tools/text/mdbook-linkcheck/default.nix b/pkgs/tools/text/mdbook-linkcheck/default.nix
index c144ea4be954d..d90b536edc86c 100644
--- a/pkgs/tools/text/mdbook-linkcheck/default.nix
+++ b/pkgs/tools/text/mdbook-linkcheck/default.nix
@@ -26,6 +26,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A backend for `mdbook` which will check your links for you";
+    mainProgram = "mdbook-linkcheck";
     homepage = "https://github.com/Michael-F-Bryan/mdbook-linkcheck";
     license = licenses.mit;
     maintainers = with maintainers; [ zhaofengli ];
diff --git a/pkgs/tools/text/mdbook-man/default.nix b/pkgs/tools/text/mdbook-man/default.nix
index 541e27eb7e063..904a4d29112ec 100644
--- a/pkgs/tools/text/mdbook-man/default.nix
+++ b/pkgs/tools/text/mdbook-man/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Generate manual pages from mdBooks";
+    mainProgram = "mdbook-man";
     homepage = "https://github.com/vv9k/mdbook-man";
     license = licenses.mit;
     maintainers = with maintainers; [ matthiasbeyer ];
diff --git a/pkgs/tools/text/mdbook-mermaid/default.nix b/pkgs/tools/text/mdbook-mermaid/default.nix
index f5bf827cfd7f7..b69dd103917da 100644
--- a/pkgs/tools/text/mdbook-mermaid/default.nix
+++ b/pkgs/tools/text/mdbook-mermaid/default.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A preprocessor for mdbook to add mermaid.js support";
+    mainProgram = "mdbook-mermaid";
     homepage = "https://github.com/badboy/mdbook-mermaid";
     changelog = "https://github.com/badboy/mdbook-mermaid/blob/v${version}/CHANGELOG.md";
     license = licenses.mpl20;
diff --git a/pkgs/tools/text/mdbook-open-on-gh/default.nix b/pkgs/tools/text/mdbook-open-on-gh/default.nix
index 8ce422340ed05..68a7c504345c7 100644
--- a/pkgs/tools/text/mdbook-open-on-gh/default.nix
+++ b/pkgs/tools/text/mdbook-open-on-gh/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "mdbook preprocessor to add a open-on-github link on every page";
+    mainProgram = "mdbook-open-on-gh";
     homepage = "https://github.com/badboy/mdbook-open-on-gh";
     license = [ licenses.mpl20 ];
     maintainers = with maintainers; [ matthiasbeyer ];
diff --git a/pkgs/tools/text/mdbook-pagetoc/default.nix b/pkgs/tools/text/mdbook-pagetoc/default.nix
index acfec960829a2..2cd4afee9616f 100644
--- a/pkgs/tools/text/mdbook-pagetoc/default.nix
+++ b/pkgs/tools/text/mdbook-pagetoc/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Table of contents for mdbook (in sidebar)";
+    mainProgram = "mdbook-pagetoc";
     homepage = "https://github.com/slowsage/mdbook-pagetoc";
     license = licenses.mit;
     maintainers = with maintainers; [ blaggacao ];
diff --git a/pkgs/tools/text/mdbook-pdf/default.nix b/pkgs/tools/text/mdbook-pdf/default.nix
index 18b234a4ec089..e0c63f595db14 100644
--- a/pkgs/tools/text/mdbook-pdf/default.nix
+++ b/pkgs/tools/text/mdbook-pdf/default.nix
@@ -44,6 +44,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A backend for mdBook written in Rust for generating PDF";
+    mainProgram = "mdbook-pdf";
     homepage = "https://github.com/HollowMan6/mdbook-pdf";
     changelog = "https://github.com/HollowMan6/mdbook-pdf/releases/tag/v${version}";
     license = licenses.gpl3Plus;
diff --git a/pkgs/tools/text/mdbook-plantuml/default.nix b/pkgs/tools/text/mdbook-plantuml/default.nix
index 3e6d13d244891..e07bd812cec9d 100644
--- a/pkgs/tools/text/mdbook-plantuml/default.nix
+++ b/pkgs/tools/text/mdbook-plantuml/default.nix
@@ -37,6 +37,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "mdBook preprocessor to render PlantUML diagrams to png images in the book output directory";
+    mainProgram = "mdbook-plantuml";
     homepage = "https://github.com/sytsereitsma/mdbook-plantuml";
     license = [ licenses.mit ];
     maintainers = with maintainers; [ jcouyang ];
diff --git a/pkgs/tools/text/mdbook-toc/default.nix b/pkgs/tools/text/mdbook-toc/default.nix
index b9bf0ca208c8d..3ee6fb6e814f5 100644
--- a/pkgs/tools/text/mdbook-toc/default.nix
+++ b/pkgs/tools/text/mdbook-toc/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A preprocessor for mdbook to add inline Table of Contents support";
+    mainProgram = "mdbook-toc";
     homepage = "https://github.com/badboy/mdbook-toc";
     license = [ licenses.mpl20 ];
     maintainers = with maintainers; [ matthiasbeyer ];
diff --git a/pkgs/tools/text/mdbook/default.nix b/pkgs/tools/text/mdbook/default.nix
index 2a875f23287f7..4939cfc626239 100644
--- a/pkgs/tools/text/mdbook/default.nix
+++ b/pkgs/tools/text/mdbook/default.nix
@@ -32,6 +32,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Create books from MarkDown";
+    mainProgram = "mdbook";
     homepage = "https://github.com/rust-lang/mdBook";
     changelog = "https://github.com/rust-lang/mdBook/blob/v${version}/CHANGELOG.md";
     license = [ licenses.mpl20 ];
diff --git a/pkgs/tools/text/mir-qualia/default.nix b/pkgs/tools/text/mir-qualia/default.nix
index f532daf8c442c..0ded2f1757b2a 100644
--- a/pkgs/tools/text/mir-qualia/default.nix
+++ b/pkgs/tools/text/mir-qualia/default.nix
@@ -14,6 +14,7 @@ pythonPackages.buildPythonApplication rec {
 
   meta = {
     description = "Dynamically enable sections of config files";
+    mainProgram = "qualia";
     homepage = "https://github.com/darkfeline/mir.qualia";
     license = lib.licenses.asl20;
     maintainers = [ lib.maintainers.srhb ] ;
diff --git a/pkgs/tools/text/mmdoc/default.nix b/pkgs/tools/text/mmdoc/default.nix
index 50b7f6dcb9dff..e7bf45dbb4c80 100644
--- a/pkgs/tools/text/mmdoc/default.nix
+++ b/pkgs/tools/text/mmdoc/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Minimal Markdown Documentation";
+    mainProgram = "mmdoc";
     homepage = "https://github.com/ryantm/mmdoc";
     license = licenses.cc0;
     maintainers = with maintainers; [ ryantm ];
diff --git a/pkgs/tools/text/morsel/default.nix b/pkgs/tools/text/morsel/default.nix
index b761b03e83d0b..416f2e65782f1 100644
--- a/pkgs/tools/text/morsel/default.nix
+++ b/pkgs/tools/text/morsel/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Command line tool to translate morse code input to text in real time";
+    mainProgram = "morsel";
     homepage = "https://github.com/SamLee514/morsel";
     license = licenses.mit;
     maintainers = with maintainers; [ siraben ];
diff --git a/pkgs/tools/text/mpage/default.nix b/pkgs/tools/text/mpage/default.nix
index 5033d53fedaa6..e7a114ec65771 100644
--- a/pkgs/tools/text/mpage/default.nix
+++ b/pkgs/tools/text/mpage/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Many-to-one page printing utility";
+    mainProgram = "mpage";
 
     longDescription = ''
       Mpage reads plain text files or PostScript documents and prints
diff --git a/pkgs/tools/text/multitran/mtutils/default.nix b/pkgs/tools/text/multitran/mtutils/default.nix
index 625f06734b2e0..9a9ecf0b2675a 100644
--- a/pkgs/tools/text/multitran/mtutils/default.nix
+++ b/pkgs/tools/text/multitran/mtutils/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://multitran.sourceforge.net/";
     description = "Multitran: simple command line utilities for dictionary maintenance";
+    mainProgram = "mtquery";
     license = lib.licenses.gpl2;
     maintainers = with lib.maintainers; [viric];
     platforms = with lib.platforms; linux;
diff --git a/pkgs/tools/text/nerdfix/default.nix b/pkgs/tools/text/nerdfix/default.nix
index 8bb9113f013ac..fdad3094bbecd 100644
--- a/pkgs/tools/text/nerdfix/default.nix
+++ b/pkgs/tools/text/nerdfix/default.nix
@@ -18,6 +18,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Nerdfix helps you to find/fix obsolete nerd font icons in your project";
+    mainProgram = "nerdfix";
     homepage = "https://github.com/loichyan/nerdfix";
     changelog = "https://github.com/loichyan/nerdfix/blob/${src.rev}/CHANGELOG.md";
     license = with licenses; [ asl20 mit ];
diff --git a/pkgs/tools/text/nkf/default.nix b/pkgs/tools/text/nkf/default.nix
index 9a70ea9461af5..ae51ad37243b0 100644
--- a/pkgs/tools/text/nkf/default.nix
+++ b/pkgs/tools/text/nkf/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Tool for converting encoding of Japanese text";
+    mainProgram = "nkf";
     homepage = "https://nkf.osdn.jp/";
     license = lib.licenses.zlib;
     platforms = lib.platforms.unix;
diff --git a/pkgs/tools/text/odt2txt/default.nix b/pkgs/tools/text/odt2txt/default.nix
index 0eb18e8435d49..3f8338d6ae08c 100644
--- a/pkgs/tools/text/odt2txt/default.nix
+++ b/pkgs/tools/text/odt2txt/default.nix
@@ -15,6 +15,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Simple .odt to .txt converter";
+    mainProgram = "odt2txt";
     homepage = "https://github.com/dstosberg/odt2txt";
     platforms = lib.platforms.all;
     license = lib.licenses.gpl2;
diff --git a/pkgs/tools/text/papeer/default.nix b/pkgs/tools/text/papeer/default.nix
index 4084d49373fd9..b8cbc477b1742 100644
--- a/pkgs/tools/text/papeer/default.nix
+++ b/pkgs/tools/text/papeer/default.nix
@@ -17,6 +17,7 @@ buildGoModule rec {
 
   meta = {
     description = "Convert websites into ebooks and markdown";
+    mainProgram = "papeer";
     homepage = "https://papeer.tech/";
     license = lib.licenses.gpl3Plus;
     maintainers = with lib.maintainers; [ ehmry ];
diff --git a/pkgs/tools/text/paperoni/default.nix b/pkgs/tools/text/paperoni/default.nix
index 346ce515b64f8..203e5b21689f9 100644
--- a/pkgs/tools/text/paperoni/default.nix
+++ b/pkgs/tools/text/paperoni/default.nix
@@ -43,6 +43,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "An article extractor in Rust";
+    mainProgram = "paperoni";
     homepage = "https://github.com/hipstermojo/paperoni";
     changelog = "https://github.com/hipstermojo/paperoni/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/pkgs/tools/text/papertrail/default.nix b/pkgs/tools/text/papertrail/default.nix
index afc9d2d89e7a6..5e2b080f9852c 100644
--- a/pkgs/tools/text/papertrail/default.nix
+++ b/pkgs/tools/text/papertrail/default.nix
@@ -23,6 +23,7 @@ in stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Command-line client for Papertrail log management service";
+    mainProgram = "papertrail";
     homepage    = "https://github.com/papertrail/papertrail-cli/";
     license     = licenses.mit;
     maintainers = with maintainers; [ nicknovitski ];
diff --git a/pkgs/tools/text/par/default.nix b/pkgs/tools/text/par/default.nix
index e64dbd367be53..c62df86835c0f 100644
--- a/pkgs/tools/text/par/default.nix
+++ b/pkgs/tools/text/par/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://www.nicemice.net/par/";
     description = "Paragraph reflow for email";
+    mainProgram = "par";
     platforms = platforms.unix;
     # See https://fedoraproject.org/wiki/Licensing/Par for license details
     license = licenses.free;
diff --git a/pkgs/tools/text/pbgopy/default.nix b/pkgs/tools/text/pbgopy/default.nix
index dad688f1dfb5a..0e1e766456a8a 100644
--- a/pkgs/tools/text/pbgopy/default.nix
+++ b/pkgs/tools/text/pbgopy/default.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Copy and paste between devices";
+    mainProgram = "pbgopy";
     homepage = "https://github.com/nakabonne/pbgopy";
     license = licenses.mit;
     maintainers = [ maintainers.ivar ];
diff --git a/pkgs/tools/text/peco/default.nix b/pkgs/tools/text/peco/default.nix
index 7c026f06292e7..774b2f5a0d1e8 100644
--- a/pkgs/tools/text/peco/default.nix
+++ b/pkgs/tools/text/peco/default.nix
@@ -17,6 +17,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Simplistic interactive filtering tool";
+    mainProgram = "peco";
     homepage = "https://github.com/peco/peco";
     changelog = "https://github.com/peco/peco/blob/v${version}/Changes";
     license = licenses.mit;
diff --git a/pkgs/tools/text/pinyin-tool/default.nix b/pkgs/tools/text/pinyin-tool/default.nix
index 9d98385933b10..40ca31fe53a7e 100644
--- a/pkgs/tools/text/pinyin-tool/default.nix
+++ b/pkgs/tools/text/pinyin-tool/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A simple command line tool for converting Chinese characters to space-separate pinyin words";
+    mainProgram = "pinyin-tool";
     homepage = "https://github.com/briankung/pinyin-tool";
     license = licenses.mit;
     maintainers = with maintainers; [ neonfuz ];
diff --git a/pkgs/tools/text/platinum-searcher/default.nix b/pkgs/tools/text/platinum-searcher/default.nix
index 4271fe131dac9..d0128fcfd0e44 100644
--- a/pkgs/tools/text/platinum-searcher/default.nix
+++ b/pkgs/tools/text/platinum-searcher/default.nix
@@ -26,6 +26,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/monochromegane/the_platinum_searcher";
     description = "A code search tool similar to ack and the_silver_searcher(ag)";
+    mainProgram = "pt";
     license = licenses.mit;
   };
 }
diff --git a/pkgs/tools/text/pn/default.nix b/pkgs/tools/text/pn/default.nix
index d77b36651d626..a228f093c3467 100644
--- a/pkgs/tools/text/pn/default.nix
+++ b/pkgs/tools/text/pn/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A libphonenumber command-line wrapper";
+    mainProgram = "pn";
     homepage = "https://github.com/Orange-OpenSource/pn";
     license = licenses.asl20;
     platforms = platforms.unix;
diff --git a/pkgs/tools/text/podiff/default.nix b/pkgs/tools/text/podiff/default.nix
index eec0eb351636d..b59aba6c4615e 100644
--- a/pkgs/tools/text/podiff/default.nix
+++ b/pkgs/tools/text/podiff/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Finds differences in translations between two PO files, or revisions";
+    mainProgram = "podiff";
     homepage = "http://puszcza.gnu.org.ua/software/podiff";
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.goibhniu ];
diff --git a/pkgs/tools/text/poedit/default.nix b/pkgs/tools/text/poedit/default.nix
index 7e8b78fda19f8..48368e64dc434 100644
--- a/pkgs/tools/text/poedit/default.nix
+++ b/pkgs/tools/text/poedit/default.nix
@@ -41,6 +41,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Cross-platform gettext catalogs (.po files) editor";
+    mainProgram = "poedit";
     homepage = "https://www.poedit.net/";
     license = licenses.mit;
     platforms = platforms.unix;
diff --git a/pkgs/tools/text/pomsky/default.nix b/pkgs/tools/text/pomsky/default.nix
index 474ea404c937a..65b67b58fa400 100644
--- a/pkgs/tools/text/pomsky/default.nix
+++ b/pkgs/tools/text/pomsky/default.nix
@@ -36,6 +36,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A portable, modern regular expression language";
+    mainProgram = "pomsky";
     homepage = "https://pomsky-lang.org";
     changelog = "https://github.com/pomsky-lang/pomsky/blob/v${version}/CHANGELOG.md";
     license = with licenses; [ mit /* or */ asl20 ];
diff --git a/pkgs/tools/text/proselint/default.nix b/pkgs/tools/text/proselint/default.nix
index 3f1b79c3e015b..2f62484d980a0 100644
--- a/pkgs/tools/text/proselint/default.nix
+++ b/pkgs/tools/text/proselint/default.nix
@@ -15,6 +15,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "A linter for prose";
+    mainProgram = "proselint";
     homepage = "http://proselint.com";
     license = licenses.bsd3;
     maintainers = with maintainers; [ alibabzo ];
diff --git a/pkgs/tools/text/qprint/default.nix b/pkgs/tools/text/qprint/default.nix
index 56f5b5becbd67..c0953f69a7f97 100644
--- a/pkgs/tools/text/qprint/default.nix
+++ b/pkgs/tools/text/qprint/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
     homepage = "https://www.fourmilab.ch/webtools/qprint/";
     license = lib.licenses.publicDomain;
     description = "Encode and decode Quoted-Printable files";
+    mainProgram = "qprint";
     maintainers = [ lib.maintainers.tv ];
     platforms = lib.platforms.all;
   };
diff --git a/pkgs/tools/text/reckon/default.nix b/pkgs/tools/text/reckon/default.nix
index 91233dfe97b4a..55c6b3cf9556a 100644
--- a/pkgs/tools/text/reckon/default.nix
+++ b/pkgs/tools/text/reckon/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Flexibly import bank account CSV files into Ledger for command line accounting";
+    mainProgram = "reckon";
     license = licenses.mit;
     maintainers = with maintainers; [ nicknovitski ];
     platforms = platforms.unix;
diff --git a/pkgs/tools/text/recode/default.nix b/pkgs/tools/text/recode/default.nix
index 9f215f41feaae..68cd034b8ee4b 100644
--- a/pkgs/tools/text/recode/default.nix
+++ b/pkgs/tools/text/recode/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://github.com/rrthomas/recode";
     description = "Converts files between various character sets and usages";
+    mainProgram = "recode";
     changelog = "https://github.com/rrthomas/recode/raw/v${version}/NEWS";
     platforms = lib.platforms.unix;
     license = with lib.licenses; [ lgpl3Plus gpl3Plus ];
diff --git a/pkgs/tools/text/reveal-md/default.nix b/pkgs/tools/text/reveal-md/default.nix
index 0cddbf34093a6..9da86f2a61c85 100644
--- a/pkgs/tools/text/reveal-md/default.nix
+++ b/pkgs/tools/text/reveal-md/default.nix
@@ -34,6 +34,7 @@ buildNpmPackage rec {
 
   meta = {
     description = "Get beautiful reveal.js presentations from your Markdown files";
+    mainProgram = "reveal-md";
     homepage = "https://github.com/webpro/reveal-md";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ sagikazarmark ];
diff --git a/pkgs/tools/text/rgxg/default.nix b/pkgs/tools/text/rgxg/default.nix
index 8e4d991e7bf03..f2f4870d8adf2 100644
--- a/pkgs/tools/text/rgxg/default.nix
+++ b/pkgs/tools/text/rgxg/default.nix
@@ -11,6 +11,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A C library and a command-line tool to generate (extended) regular expressions";
+    mainProgram = "rgxg";
     license = licenses.zlib;
     maintainers = with maintainers; [ hloeffler ];
     homepage = "https://rgxg.github.io/";
diff --git a/pkgs/tools/text/rnr/default.nix b/pkgs/tools/text/rnr/default.nix
index 834ecfddee770..b2d38832a4d5d 100644
--- a/pkgs/tools/text/rnr/default.nix
+++ b/pkgs/tools/text/rnr/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A command-line tool to batch rename files and directories";
+    mainProgram = "rnr";
     homepage = "https://github.com/ismaelgv/rnr";
     changelog = "https://github.com/ismaelgv/rnr/blob/v${version}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/pkgs/tools/text/rosie/default.nix b/pkgs/tools/text/rosie/default.nix
index 190fd4944d15e..e9923586b2da2 100644
--- a/pkgs/tools/text/rosie/default.nix
+++ b/pkgs/tools/text/rosie/default.nix
@@ -55,6 +55,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://rosie-lang.org";
     description = "Tools for searching using parsing expression grammars";
+    mainProgram = "rosie";
     license = licenses.mit;
     maintainers = with maintainers; [ kovirobi ];
     platforms = with platforms; linux ++ darwin;
diff --git a/pkgs/tools/text/rpl/default.nix b/pkgs/tools/text/rpl/default.nix
index 2097b94b6e3eb..1b4e89408dc86 100644
--- a/pkgs/tools/text/rpl/default.nix
+++ b/pkgs/tools/text/rpl/default.nix
@@ -29,6 +29,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Replace strings in files";
+    mainProgram = "rpl";
     homepage = "https://github.com/rrthomas/rpl";
     license = licenses.gpl2;
     maintainers = with maintainers; [ cbley ];
diff --git a/pkgs/tools/text/runiq/default.nix b/pkgs/tools/text/runiq/default.nix
index 42b9e2aef395d..52386bb0f24a0 100644
--- a/pkgs/tools/text/runiq/default.nix
+++ b/pkgs/tools/text/runiq/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "An efficient way to filter duplicate lines from input, à la uniq";
+    mainProgram = "runiq";
     homepage = "https://github.com/whitfin/runiq";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda ];
diff --git a/pkgs/tools/text/ruplacer/default.nix b/pkgs/tools/text/ruplacer/default.nix
index 43253041b279a..bb1d7dfc99047 100644
--- a/pkgs/tools/text/ruplacer/default.nix
+++ b/pkgs/tools/text/ruplacer/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Find and replace text in source files";
+    mainProgram = "ruplacer";
     homepage = "https://github.com/TankerHQ/ruplacer";
     license = [ licenses.bsd3 ];
     maintainers = with maintainers; [ Br1ght0ne ];
diff --git a/pkgs/tools/text/sad/default.nix b/pkgs/tools/text/sad/default.nix
index da4ff0804b11f..5b3aae4f831a2 100644
--- a/pkgs/tools/text/sad/default.nix
+++ b/pkgs/tools/text/sad/default.nix
@@ -27,6 +27,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "CLI tool to search and replace";
+    mainProgram = "sad";
     homepage = "https://github.com/ms-jpq/sad";
     license = licenses.mit;
     maintainers = with maintainers; [ fab ];
diff --git a/pkgs/tools/text/scraper/default.nix b/pkgs/tools/text/scraper/default.nix
index c148f1e57f3f5..42b8c91effe08 100644
--- a/pkgs/tools/text/scraper/default.nix
+++ b/pkgs/tools/text/scraper/default.nix
@@ -19,6 +19,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A tool to query HTML files with CSS selectors";
+    mainProgram = "scraper";
     homepage = "https://github.com/causal-agent/scraper";
     changelog = "https://github.com/causal-agent/scraper/releases/tag/v${version}";
     license = licenses.isc;
diff --git a/pkgs/tools/text/sd/default.nix b/pkgs/tools/text/sd/default.nix
index 8dc160cd014dd..e5bde420000d9 100644
--- a/pkgs/tools/text/sd/default.nix
+++ b/pkgs/tools/text/sd/default.nix
@@ -32,6 +32,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Intuitive find & replace CLI (sed alternative)";
+    mainProgram = "sd";
     homepage = "https://github.com/chmln/sd";
     license = licenses.mit;
     maintainers = with maintainers; [ amar1729 Br1ght0ne ];
diff --git a/pkgs/tools/text/sgml/openjade/default.nix b/pkgs/tools/text/sgml/openjade/default.nix
index 5e175518b6922..87bc8e7a8aed1 100644
--- a/pkgs/tools/text/sgml/openjade/default.nix
+++ b/pkgs/tools/text/sgml/openjade/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "An implementation of DSSSL, an ISO standard for formatting SGML (and XML) documents";
+    mainProgram = "openjade";
     license = lib.licenses.mit;
     homepage = "https://openjade.sourceforge.net/";
     platforms = lib.platforms.linux;
diff --git a/pkgs/tools/text/sgrep/default.nix b/pkgs/tools/text/sgrep/default.nix
index f3d23d1666968..3e82ce9afc602 100644
--- a/pkgs/tools/text/sgrep/default.nix
+++ b/pkgs/tools/text/sgrep/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://www.cs.helsinki.fi/u/jjaakkol/sgrep.html";
     description = "A grep for structured text formats such as XML";
+    mainProgram = "sgrep";
     longDescription = ''
       sgrep (structured grep) is a tool for searching and indexing text,
       SGML, XML and HTML files and filtering text streams using
diff --git a/pkgs/tools/text/shab/default.nix b/pkgs/tools/text/shab/default.nix
index b5bb98e5f4d2a..733ba4f80cf55 100644
--- a/pkgs/tools/text/shab/default.nix
+++ b/pkgs/tools/text/shab/default.nix
@@ -41,6 +41,7 @@ let
 
     meta = with lib; {
       description = "The bash templating language";
+      mainProgram = "shab";
       homepage = "https://github.com/zimbatm/shab";
       license = licenses.unlicense;
       maintainers = with maintainers; [ zimbatm ];
diff --git a/pkgs/tools/text/shocco/default.nix b/pkgs/tools/text/shocco/default.nix
index 1359db98978c9..75f218f213e6d 100644
--- a/pkgs/tools/text/shocco/default.nix
+++ b/pkgs/tools/text/shocco/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A quick-and-dirty, literate-programming-style documentation generator for / in POSIX shell";
+    mainProgram = "shocco";
     homepage = "https://rtomayko.github.io/shocco/";
     license = licenses.mit;
     platforms = platforms.all;
diff --git a/pkgs/tools/text/sift/default.nix b/pkgs/tools/text/sift/default.nix
index 25dd61a3e4a06..1aecb3ac8909c 100644
--- a/pkgs/tools/text/sift/default.nix
+++ b/pkgs/tools/text/sift/default.nix
@@ -31,6 +31,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A fast and powerful alternative to grep";
+    mainProgram = "sift";
     homepage = "https://sift-tool.org";
     maintainers = with maintainers; [ viraptor ];
     license = licenses.gpl3;
diff --git a/pkgs/tools/text/smu/default.nix b/pkgs/tools/text/smu/default.nix
index 85e593982e85a..63c9bb8d024f1 100644
--- a/pkgs/tools/text/smu/default.nix
+++ b/pkgs/tools/text/smu/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "simple markup - markdown like syntax";
+    mainProgram = "smu";
     homepage = "https://github.com/Gottox/smu";
     license = licenses.mit;
     maintainers = with maintainers; [ oxzi ];
diff --git a/pkgs/tools/text/sorted-grep/default.nix b/pkgs/tools/text/sorted-grep/default.nix
index 60bc0bee676fa..f0225d8a24447 100644
--- a/pkgs/tools/text/sorted-grep/default.nix
+++ b/pkgs/tools/text/sorted-grep/default.nix
@@ -44,6 +44,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://sgrep.sourceforge.net/";
     description = "Sgrep (sorted grep) searches sorted input files for lines that match a search key";
+    mainProgram = "sgrep";
     longDescription = ''
       Sgrep (sorted grep) searches sorted input files for lines that match a search
       key and outputs the matching lines. When searching large files sgrep is much
diff --git a/pkgs/tools/text/subedit/default.nix b/pkgs/tools/text/subedit/default.nix
index 0ae48901cd969..fede6583e7889 100644
--- a/pkgs/tools/text/subedit/default.nix
+++ b/pkgs/tools/text/subedit/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://github.com/helixarch/subedit";
     description = "Command-line subtitle editor written in BASH";
+    mainProgram = "subedit";
     license = licenses.gpl2;
     maintainers = with maintainers; [ ppom ];
   };
diff --git a/pkgs/tools/text/tab/default.nix b/pkgs/tools/text/tab/default.nix
index 3f8ef799a6bf0..431b046471a44 100644
--- a/pkgs/tools/text/tab/default.nix
+++ b/pkgs/tools/text/tab/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Programming language/shell calculator";
+    mainProgram = "tab";
     homepage    = "https://tab-lang.xyz";
     license     = licenses.boost;
     maintainers = with maintainers; [ mstarzyk ];
diff --git a/pkgs/tools/text/teip/default.nix b/pkgs/tools/text/teip/default.nix
index c0ac20a281495..caa665fc3c93c 100644
--- a/pkgs/tools/text/teip/default.nix
+++ b/pkgs/tools/text/teip/default.nix
@@ -43,6 +43,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A tool to bypass a partial range of standard input to any command";
+    mainProgram = "teip";
     homepage = "https://github.com/greymd/teip";
     changelog = "https://github.com/greymd/teip/releases/tag/v${version}";
     license = licenses.mit;
diff --git a/pkgs/tools/text/termbook/default.nix b/pkgs/tools/text/termbook/default.nix
index ee9367038f631..a68f0ce416f45 100644
--- a/pkgs/tools/text/termbook/default.nix
+++ b/pkgs/tools/text/termbook/default.nix
@@ -52,6 +52,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A runner for `mdbooks` to keep your documentation tested";
+    mainProgram = "termbook";
     homepage = "https://github.com/Byron/termbook/";
     changelog = "https://github.com/Byron/termbook/blob/${src.rev}/CHANGELOG.md";
     license = licenses.asl20;
diff --git a/pkgs/tools/text/tidy-viewer/default.nix b/pkgs/tools/text/tidy-viewer/default.nix
index 6c38007b3f26e..cbeb97214893b 100644
--- a/pkgs/tools/text/tidy-viewer/default.nix
+++ b/pkgs/tools/text/tidy-viewer/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A cross-platform CLI csv pretty printer that uses column styling to maximize viewer enjoyment";
+    mainProgram = "tidy-viewer";
     homepage = "https://github.com/alexhallam/tv";
     changelog = "https://github.com/alexhallam/tv/blob/${version}/CHANGELOG.md";
     license = licenses.unlicense;
diff --git a/pkgs/tools/text/tml/default.nix b/pkgs/tools/text/tml/default.nix
index 3f1a6477851c3..5a083bfc4d60c 100644
--- a/pkgs/tools/text/tml/default.nix
+++ b/pkgs/tools/text/tml/default.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A tiny markup language for terminal output";
+    mainProgram = "tml";
     homepage = "https://github.com/liamg/tml";
     changelog = "https://github.com/liamg/tml/releases/tag/v${version}";
     license = licenses.unlicense;
diff --git a/pkgs/tools/text/to-html/default.nix b/pkgs/tools/text/to-html/default.nix
index 9e176a5ad19cf..5ddba61276d45 100644
--- a/pkgs/tools/text/to-html/default.nix
+++ b/pkgs/tools/text/to-html/default.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = {
     description = "Terminal wrapper for rendering a terminal on a website by converting ANSI escape sequences to HTML";
+    mainProgram = "to-html";
     homepage = "https://github.com/Aloso/to-html";
     changelog = "https://github.com/Aloso/to-html/blob/${src.rev}/CHANGELOG.md";
     license = lib.licenses.mit;
diff --git a/pkgs/tools/text/tuc/default.nix b/pkgs/tools/text/tuc/default.nix
index b7b5afbdf3a3f..46e9bb86e57c3 100644
--- a/pkgs/tools/text/tuc/default.nix
+++ b/pkgs/tools/text/tuc/default.nix
@@ -14,6 +14,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "When cut doesn't cut it";
+    mainProgram = "tuc";
     homepage = "https://github.com/riquito/tuc";
     license = licenses.gpl3;
     maintainers = with maintainers; [ dit7ya ];
diff --git a/pkgs/tools/text/tv/default.nix b/pkgs/tools/text/tv/default.nix
index 686433ff42905..9cf6e2e243e80 100644
--- a/pkgs/tools/text/tv/default.nix
+++ b/pkgs/tools/text/tv/default.nix
@@ -15,6 +15,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Format json into table view";
+    mainProgram = "tv";
     homepage = "https://github.com/uzimaru0000/tv";
     changelog = "https://github.com/uzimaru0000/tv/blob/v${version}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/pkgs/tools/text/txt2tags/default.nix b/pkgs/tools/text/txt2tags/default.nix
index 8ff39ac1ebfed..1e48d4c6f3d6f 100644
--- a/pkgs/tools/text/txt2tags/default.nix
+++ b/pkgs/tools/text/txt2tags/default.nix
@@ -30,6 +30,7 @@ python3.pkgs.buildPythonApplication rec {
   meta = {
     changelog = "https://github.com/txt2tags/txt2tags/blob/${src.rev}/CHANGELOG.md";
     description = "Convert between markup languages";
+    mainProgram = "txt2tags";
     homepage = "https://txt2tags.org/";
     license  = lib.licenses.gpl2Plus;
     maintainers = with lib.maintainers; [ dotlambda kovirobi ];
diff --git a/pkgs/tools/text/unfurl/default.nix b/pkgs/tools/text/unfurl/default.nix
index 35a43ea2fdbd7..0d9ae3b01992b 100644
--- a/pkgs/tools/text/unfurl/default.nix
+++ b/pkgs/tools/text/unfurl/default.nix
@@ -25,6 +25,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Pull out bits of URLs provided on stdin";
+    mainProgram = "unfurl";
     homepage = "https://github.com/tomnomnom/unfurl";
     license = licenses.mit;
     maintainers = with maintainers; [ figsoda ];
diff --git a/pkgs/tools/text/uniscribe/default.nix b/pkgs/tools/text/uniscribe/default.nix
index e7b9cedd2b8cd..98b164a9d58d4 100644
--- a/pkgs/tools/text/uniscribe/default.nix
+++ b/pkgs/tools/text/uniscribe/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Explains Unicode characters/code points: Displays their name, category, and shows compositions";
+    mainProgram = "uniscribe";
     homepage = "https://github.com/janlelis/uniscribe";
     license = licenses.mit;
     maintainers = with maintainers; [ kjeremy ];
diff --git a/pkgs/tools/text/unrtf/default.nix b/pkgs/tools/text/unrtf/default.nix
index 3357404a7d3c8..4395c0f6e9414 100644
--- a/pkgs/tools/text/unrtf/default.nix
+++ b/pkgs/tools/text/unrtf/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A converter from Rich Text Format to other formats";
+    mainProgram = "unrtf";
     longDescription = ''
       UnRTF converts documents in Rich Text Format to other
       formats, including HTML, LaTeX, and RTF itself.
diff --git a/pkgs/tools/text/untex/default.nix b/pkgs/tools/text/untex/default.nix
index 63108a923782c..c6f8330496506 100644
--- a/pkgs/tools/text/untex/default.nix
+++ b/pkgs/tools/text/untex/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A utility which removes LaTeX commands from input";
+    mainProgram = "untex";
     homepage = "https://www.ctan.org/pkg/untex";
     license = licenses.gpl1Only;
     maintainers = with maintainers; [ joachifm ];
diff --git a/pkgs/tools/text/uwc/default.nix b/pkgs/tools/text/uwc/default.nix
index dc34ecfacff23..42777accb8265 100644
--- a/pkgs/tools/text/uwc/default.nix
+++ b/pkgs/tools/text/uwc/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Like wc, but unicode-aware, and with per-line mode";
+    mainProgram = "uwc";
     homepage = "https://gitlab.com/dead10ck/uwc";
     license = licenses.mit;
     maintainers = with maintainers; [ ShamrockLee ];
diff --git a/pkgs/tools/text/vgrep/default.nix b/pkgs/tools/text/vgrep/default.nix
index 9022c5f5c03b2..9421887303873 100644
--- a/pkgs/tools/text/vgrep/default.nix
+++ b/pkgs/tools/text/vgrep/default.nix
@@ -25,6 +25,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "User-friendly pager for grep/git-grep/ripgrep";
+    mainProgram = "vgrep";
     homepage = "https://github.com/vrothberg/vgrep";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ SuperSandro2000 ];
diff --git a/pkgs/tools/text/wdiff/default.nix b/pkgs/tools/text/wdiff/default.nix
index d6ed960cce1e7..d358dcdd0c4ed 100644
--- a/pkgs/tools/text/wdiff/default.nix
+++ b/pkgs/tools/text/wdiff/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://www.gnu.org/software/wdiff/";
     description = "Comparing files on a word by word basis";
+    mainProgram = "wdiff";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ eelco SuperSandro2000 ];
     platforms = platforms.unix;
diff --git a/pkgs/tools/text/wgetpaste/default.nix b/pkgs/tools/text/wgetpaste/default.nix
index 465e19883b30c..8ca014e0d5f58 100644
--- a/pkgs/tools/text/wgetpaste/default.nix
+++ b/pkgs/tools/text/wgetpaste/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Command-line interface to various pastebins";
+    mainProgram = "wgetpaste";
     homepage = "https://github.com/zlin/wgetpaste";
     license = lib.licenses.publicDomain;
     maintainers = with lib.maintainers; [ qknight domenkozar ];
diff --git a/pkgs/tools/text/xidel/default.nix b/pkgs/tools/text/xidel/default.nix
index 479cc0ff1115b..d7fefa2d495db 100644
--- a/pkgs/tools/text/xidel/default.nix
+++ b/pkgs/tools/text/xidel/default.nix
@@ -87,6 +87,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Command line tool to download and extract data from HTML/XML pages as well as JSON APIs";
+    mainProgram = "xidel";
     homepage = "https://www.videlibri.de/xidel.html";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
diff --git a/pkgs/tools/text/xml/xmlformat/default.nix b/pkgs/tools/text/xml/xmlformat/default.nix
index 380baa906c27d..ea0e90502dc20 100644
--- a/pkgs/tools/text/xml/xmlformat/default.nix
+++ b/pkgs/tools/text/xml/xmlformat/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "a configurable formatter (or 'pretty-printer') for XML documents";
+    mainProgram = "xmlformat";
     homepage = "http://www.kitebird.com/software/xmlformat/";
     license = lib.licenses.bsd3;
     platforms = lib.platforms.all;
diff --git a/pkgs/tools/text/xml/xmloscopy/default.nix b/pkgs/tools/text/xml/xmloscopy/default.nix
index c915e2c7fc5bc..32162849c41d5 100644
--- a/pkgs/tools/text/xml/xmloscopy/default.nix
+++ b/pkgs/tools/text/xml/xmloscopy/default.nix
@@ -45,6 +45,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "wtf is my docbook broken?";
+    mainProgram = "xmloscopy";
     homepage = "https://github.com/grahamc/xmloscopy";
     license = licenses.mit;
     platforms = platforms.all;
diff --git a/pkgs/tools/text/xml/xq/default.nix b/pkgs/tools/text/xml/xq/default.nix
index 6fae10b25357c..7b55d5d28d358 100644
--- a/pkgs/tools/text/xml/xq/default.nix
+++ b/pkgs/tools/text/xml/xq/default.nix
@@ -33,6 +33,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Command-line XML and HTML beautifier and content extractor";
+    mainProgram = "xq";
     homepage = "https://github.com/sibprogrammer/xq";
     changelog = "https://github.com/sibprogrammer/xq/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/pkgs/tools/text/xpaste/default.nix b/pkgs/tools/text/xpaste/default.nix
index 88666fd25adcb..7bbe658b6b5ad 100644
--- a/pkgs/tools/text/xpaste/default.nix
+++ b/pkgs/tools/text/xpaste/default.nix
@@ -24,6 +24,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Paste text into X windows that don't work with selections";
+    mainProgram = "xpaste";
     homepage = "https://github.com/ossobv/xpaste";
     license = licenses.gpl3;
     maintainers = with maintainers; [ gador ];
diff --git a/pkgs/tools/text/xsv/default.nix b/pkgs/tools/text/xsv/default.nix
index 303b38d65c2df..3e617a621e334 100644
--- a/pkgs/tools/text/xsv/default.nix
+++ b/pkgs/tools/text/xsv/default.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A fast CSV toolkit written in Rust";
+    mainProgram = "xsv";
     homepage = "https://github.com/BurntSushi/xsv";
     license = with licenses; [ unlicense /* or */ mit ];
     maintainers = [ maintainers.jgertm ];
diff --git a/pkgs/tools/text/yaml-merge/default.nix b/pkgs/tools/text/yaml-merge/default.nix
index 85ea3cd360da3..a5113a92f7021 100644
--- a/pkgs/tools/text/yaml-merge/default.nix
+++ b/pkgs/tools/text/yaml-merge/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Merge YAML data files";
+    mainProgram = "yaml-merge";
     homepage = "https://github.com/abbradar/yaml-merge";
     license = licenses.bsd2;
     platforms = platforms.unix;
diff --git a/pkgs/tools/text/zet/default.nix b/pkgs/tools/text/zet/default.nix
index 50d149f4e6559..af04b5fdc2035 100644
--- a/pkgs/tools/text/zet/default.nix
+++ b/pkgs/tools/text/zet/default.nix
@@ -22,6 +22,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "CLI utility to find the union, intersection, set difference, etc of files considered as sets of lines";
+    mainProgram = "zet";
     homepage = "https://github.com/yarrow/zet";
     changelog = "https://github.com/yarrow/zet/blob/${src.rev}/CHANGELOG.md";
     license = with licenses; [ asl20 mit ];
diff --git a/pkgs/tools/typesetting/bibtex-tidy/default.nix b/pkgs/tools/typesetting/bibtex-tidy/default.nix
index 7aeaf13fb02a8..6fa64d653736c 100644
--- a/pkgs/tools/typesetting/bibtex-tidy/default.nix
+++ b/pkgs/tools/typesetting/bibtex-tidy/default.nix
@@ -28,6 +28,7 @@ buildNpmPackage rec {
   meta = {
     changelog = "https://github.com/FlamingTempura/bibtex-tidy/blob/${src.rev}/CHANGELOG.md";
     description = "Cleaner and Formatter for BibTeX files";
+    mainProgram = "bibtex-tidy";
     homepage = "https://github.com/FlamingTempura/bibtex-tidy";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ bertof ];
diff --git a/pkgs/tools/typesetting/tex/dblatex/default.nix b/pkgs/tools/typesetting/tex/dblatex/default.nix
index 1f3fd13d2863e..d615cefd77c38 100644
--- a/pkgs/tools/typesetting/tex/dblatex/default.nix
+++ b/pkgs/tools/typesetting/tex/dblatex/default.nix
@@ -59,6 +59,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A program to convert DocBook to DVI, PostScript or PDF via LaTeX or ConTeXt";
+    mainProgram = "dblatex";
     homepage = "https://dblatex.sourceforge.net/";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.unix;
diff --git a/pkgs/tools/typesetting/tex/gladtex/default.nix b/pkgs/tools/typesetting/tex/gladtex/default.nix
index 2d2cd37442f7e..bf64f400d2b8d 100644
--- a/pkgs/tools/typesetting/tex/gladtex/default.nix
+++ b/pkgs/tools/typesetting/tex/gladtex/default.nix
@@ -16,6 +16,7 @@ python3Packages.buildPythonPackage rec {
 
   meta = with lib; {
     description = "Embed LaTeX formulas into HTML documents as SVG images";
+    mainProgram = "gladtex";
     homepage = "https://humenda.github.io/GladTeX";
     license = licenses.lgpl3Plus;
     platforms = platforms.all;
diff --git a/pkgs/tools/typesetting/tex/latexrun/default.nix b/pkgs/tools/typesetting/tex/latexrun/default.nix
index 3a163a5682d6e..ea2c630e79605 100644
--- a/pkgs/tools/typesetting/tex/latexrun/default.nix
+++ b/pkgs/tools/typesetting/tex/latexrun/default.nix
@@ -21,6 +21,7 @@ stdenvNoCC.mkDerivation {
 
   meta = with lib; {
     description = "A 21st century LaTeX wrapper";
+    mainProgram = "latexrun";
     homepage = "https://github.com/aclements/latexrun";
     license = licenses.mit;
     maintainers = [ maintainers.lucus16 ];
diff --git a/pkgs/tools/typesetting/tex/pplatex/default.nix b/pkgs/tools/typesetting/tex/pplatex/default.nix
index 89d08b43e845a..367daa9450fc3 100644
--- a/pkgs/tools/typesetting/tex/pplatex/default.nix
+++ b/pkgs/tools/typesetting/tex/pplatex/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     description =
       "A tool to reformat the output of latex and friends into readable messages";
+    mainProgram = "pplatex";
     homepage = "https://github.com/stefanhepp/pplatex";
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.srgom maintainers.doronbehar ];
diff --git a/pkgs/tools/typesetting/tex/tex-match/default.nix b/pkgs/tools/typesetting/tex/tex-match/default.nix
index 65bfcd02d78ca..c7d961d21fc1f 100644
--- a/pkgs/tools/typesetting/tex/tex-match/default.nix
+++ b/pkgs/tools/typesetting/tex/tex-match/default.nix
@@ -19,6 +19,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Search through over 1000 different LaTeX symbols by sketching. A desktop version of detexify";
+    mainProgram = "tex-match";
     homepage = "https://tex-match.zoey.fyi/";
     license = licenses.mit;
     maintainers = [ maintainers.bootstrap-prime ];
diff --git a/pkgs/tools/virtualization/nixos-container/default.nix b/pkgs/tools/virtualization/nixos-container/default.nix
index 0b44bde4719f4..e8b2f1dc88e59 100644
--- a/pkgs/tools/virtualization/nixos-container/default.nix
+++ b/pkgs/tools/virtualization/nixos-container/default.nix
@@ -35,4 +35,5 @@ substituteAll {
       mkdir -p $t
       cp ${./nixos-container-completion.sh} $t/nixos-container
     '';
+    meta.mainProgram = "nixos-container";
 }