about summary refs log tree commit diff
path: root/pkgs/by-name
diff options
context:
space:
mode:
authorstuebinm <stuebinm@disroot.org>2024-03-19 03:14:51 +0100
committerstuebinm <stuebinm@disroot.org>2024-03-19 03:14:51 +0100
commitff1a94e523ae9fb272e0581f068baee5d1068476 (patch)
treecbea47f2004a4fa8685163d630612cf748e72c1e /pkgs/by-name
parentb06025f1533a1e07b6db3e75151caa155d1c7eb3 (diff)
treewide: add meta.mainProgram to packages with a single binary
The nixpkgs-unstable channel's programs.sqlite was used to identify
packages producing exactly one binary, and these automatically added
to their package definitions wherever possible.
Diffstat (limited to 'pkgs/by-name')
-rw-r--r--pkgs/by-name/aa/aaaaxy/package.nix1
-rw-r--r--pkgs/by-name/ad/adafruit-nrfutil/package.nix1
-rw-r--r--pkgs/by-name/ai/airscan/package.nix1
-rw-r--r--pkgs/by-name/al/alephone/package.nix1
-rw-r--r--pkgs/by-name/al/alsa-lib-with-plugins/package.nix1
-rw-r--r--pkgs/by-name/al/alsa-lib/package.nix1
-rw-r--r--pkgs/by-name/al/alsa-oss/package.nix1
-rw-r--r--pkgs/by-name/am/amphetype/package.nix1
-rw-r--r--pkgs/by-name/ar/arxiv-latex-cleaner/package.nix1
-rw-r--r--pkgs/by-name/at/ataripp/package.nix1
-rw-r--r--pkgs/by-name/au/audio-sharing/package.nix1
-rw-r--r--pkgs/by-name/ba/backlight-auto/package.nix1
-rw-r--r--pkgs/by-name/ba/base16-shell-preview/package.nix1
-rw-r--r--pkgs/by-name/be/betula/package.nix1
-rw-r--r--pkgs/by-name/bi/binsort/package.nix1
-rw-r--r--pkgs/by-name/bi/bitbake-language-server/package.nix1
-rw-r--r--pkgs/by-name/bu/bullshit/package.nix1
-rw-r--r--pkgs/by-name/c2/c2nim/package.nix1
-rw-r--r--pkgs/by-name/ca/cargo-bump/package.nix1
-rw-r--r--pkgs/by-name/ca/cargo-rdme/package.nix1
-rw-r--r--pkgs/by-name/ca/cargo-swift/package.nix1
-rw-r--r--pkgs/by-name/ca/cargo-typify/package.nix1
-rw-r--r--pkgs/by-name/ca/cargo-vibe/package.nix1
-rw-r--r--pkgs/by-name/ca/cargo-xwin/package.nix1
-rw-r--r--pkgs/by-name/cd/cdk/package.nix1
-rw-r--r--pkgs/by-name/ce/certmgr/package.nix1
-rw-r--r--pkgs/by-name/ch/chess-clock/package.nix1
-rw-r--r--pkgs/by-name/ci/cidr-merger/package.nix1
-rw-r--r--pkgs/by-name/ci/circom/package.nix1
-rw-r--r--pkgs/by-name/cl/clamtk/package.nix1
-rw-r--r--pkgs/by-name/cl/clzip/package.nix1
-rw-r--r--pkgs/by-name/cn/cntb/package.nix1
-rw-r--r--pkgs/by-name/co/cockpit/package.nix1
-rw-r--r--pkgs/by-name/co/commitmsgfmt/package.nix1
-rw-r--r--pkgs/by-name/co/connman-gtk/package.nix1
-rw-r--r--pkgs/by-name/co/connman-ncurses/package.nix1
-rw-r--r--pkgs/by-name/co/connman-notify/package.nix1
-rw-r--r--pkgs/by-name/co/connman_dmenu/package.nix1
-rw-r--r--pkgs/by-name/co/convco/package.nix1
-rw-r--r--pkgs/by-name/co/cosmic-comp/package.nix1
-rw-r--r--pkgs/by-name/co/cosmic-edit/package.nix1
-rw-r--r--pkgs/by-name/co/cosmic-greeter/package.nix1
-rw-r--r--pkgs/by-name/co/cosmic-launcher/package.nix1
-rw-r--r--pkgs/by-name/co/cosmic-notifications/package.nix1
-rw-r--r--pkgs/by-name/co/cosmic-osd/package.nix1
-rw-r--r--pkgs/by-name/co/cosmic-panel/package.nix1
-rw-r--r--pkgs/by-name/co/cosmic-settings-daemon/package.nix1
-rw-r--r--pkgs/by-name/co/cosmic-workspaces-epoch/package.nix1
-rw-r--r--pkgs/by-name/cp/cpu-x/package.nix1
-rw-r--r--pkgs/by-name/cy/cyanrip/package.nix1
-rw-r--r--pkgs/by-name/de/dependabot-cli/package.nix1
-rw-r--r--pkgs/by-name/dj/djent/package.nix1
-rw-r--r--pkgs/by-name/dm/dmenu-bluetooth/package.nix1
-rw-r--r--pkgs/by-name/do/doggo/package.nix1
-rw-r--r--pkgs/by-name/do/dotbot/package.nix1
-rw-r--r--pkgs/by-name/ds/dsda-doom/package.nix1
-rw-r--r--pkgs/by-name/ds/dsda-launcher/package.nix1
-rw-r--r--pkgs/by-name/dx/dxvk/package.nix1
-rw-r--r--pkgs/by-name/ec/ecc/package.nix1
-rw-r--r--pkgs/by-name/el/elf2nucleus/package.nix1
-rw-r--r--pkgs/by-name/el/elvish/package.nix1
-rw-r--r--pkgs/by-name/en/encled/package.nix1
-rw-r--r--pkgs/by-name/en/engage/package.nix1
-rw-r--r--pkgs/by-name/en/envio/package.nix1
-rw-r--r--pkgs/by-name/fa/fanbox-dl/package.nix1
-rw-r--r--pkgs/by-name/fi/figurine/package.nix1
-rw-r--r--pkgs/by-name/fi/firewalk/package.nix1
-rw-r--r--pkgs/by-name/fi/fitsverify/package.nix1
-rw-r--r--pkgs/by-name/fo/foonathan-memory/package.nix1
-rw-r--r--pkgs/by-name/fy/fypp/package.nix1
-rw-r--r--pkgs/by-name/g3/g3kb-switch/package.nix1
-rw-r--r--pkgs/by-name/ga/gash/package.nix1
-rw-r--r--pkgs/by-name/ge/get-google-fonts/package.nix1
-rw-r--r--pkgs/by-name/ge/geticons/package.nix1
-rw-r--r--pkgs/by-name/gh/ghunt/package.nix1
-rw-r--r--pkgs/by-name/gi/git-instafix/package.nix1
-rw-r--r--pkgs/by-name/gi/gitlab-ci-local/package.nix1
-rw-r--r--pkgs/by-name/gm/gmic/package.nix1
-rw-r--r--pkgs/by-name/go/gosmore/package.nix1
-rw-r--r--pkgs/by-name/gr/grun/package.nix1
-rw-r--r--pkgs/by-name/gt/gtimelog/package.nix1
-rw-r--r--pkgs/by-name/ha/haunt/package.nix1
-rw-r--r--pkgs/by-name/he/helix-gpt/package.nix1
-rw-r--r--pkgs/by-name/ho/hoppscotch/package.nix1
-rw-r--r--pkgs/by-name/if/ifrextractor-rs/package.nix1
-rw-r--r--pkgs/by-name/ig/igir/package.nix1
-rw-r--r--pkgs/by-name/ku/kubectl-neat/package.nix1
-rw-r--r--pkgs/by-name/le/ledger/package.nix1
-rw-r--r--pkgs/by-name/le/lemminx/package.nix1
-rw-r--r--pkgs/by-name/li/libbgcode/package.nix1
-rw-r--r--pkgs/by-name/li/libcpuid/package.nix1
-rw-r--r--pkgs/by-name/li/linien-gui/package.nix1
-rw-r--r--pkgs/by-name/li/listmonk/package.nix1
-rw-r--r--pkgs/by-name/ln/lngen/package.nix1
-rw-r--r--pkgs/by-name/lo/logiops/package.nix1
-rw-r--r--pkgs/by-name/lo/logiops_0_2_3/package.nix1
-rw-r--r--pkgs/by-name/lo/loksh/package.nix1
-rw-r--r--pkgs/by-name/lo/loramon/package.nix1
-rw-r--r--pkgs/by-name/lp/lprint/package.nix1
-rw-r--r--pkgs/by-name/lz/lzsa/package.nix1
-rw-r--r--pkgs/by-name/ma/matrix-hook/package.nix1
-rw-r--r--pkgs/by-name/mc/mcomix/package.nix1
-rw-r--r--pkgs/by-name/me/meson/package.nix1
-rw-r--r--pkgs/by-name/mf/mfoc-hardnested/package.nix1
-rw-r--r--pkgs/by-name/mk/mksh/package.nix1
-rw-r--r--pkgs/by-name/mo/mosdepth/package.nix1
-rw-r--r--pkgs/by-name/mo/move-mount-beneath/package.nix1
-rw-r--r--pkgs/by-name/ms/msolve/package.nix1
-rw-r--r--pkgs/by-name/n2/n2/package.nix1
-rw-r--r--pkgs/by-name/na/narsil/package.nix1
-rw-r--r--pkgs/by-name/nb/nbtscan/package.nix1
-rw-r--r--pkgs/by-name/nc/nc4nix/package.nix1
-rw-r--r--pkgs/by-name/ne/netclient/package.nix1
-rw-r--r--pkgs/by-name/ne/netproxrc/package.nix1
-rw-r--r--pkgs/by-name/ni/nim-atlas/package.nix1
-rw-r--r--pkgs/by-name/ni/nim_builder/package.nix1
-rw-r--r--pkgs/by-name/ni/nimmm/package.nix1
-rw-r--r--pkgs/by-name/ni/nixops-dns/package.nix1
-rw-r--r--pkgs/by-name/nl/nls/package.nix1
-rw-r--r--pkgs/by-name/nr/nrpl/package.nix1
-rw-r--r--pkgs/by-name/ns/nsxiv/package.nix1
-rw-r--r--pkgs/by-name/nu/nuget/package.nix1
-rw-r--r--pkgs/by-name/oa/oauth2ms/package.nix1
-rw-r--r--pkgs/by-name/oc/octorpki/package.nix1
-rw-r--r--pkgs/by-name/oe/oelint-adv/package.nix1
-rw-r--r--pkgs/by-name/on/onedrivegui/package.nix1
-rw-r--r--pkgs/by-name/on/onlyoffice-bin_latest/package.nix1
-rw-r--r--pkgs/by-name/op/opengist/package.nix1
-rw-r--r--pkgs/by-name/op/opensnitch-ui/package.nix1
-rw-r--r--pkgs/by-name/op/opensnitch/package.nix1
-rw-r--r--pkgs/by-name/pa/passes/package.nix1
-rw-r--r--pkgs/by-name/pa/payme/package.nix1
-rw-r--r--pkgs/by-name/pd/pdfannots2json/package.nix1
-rw-r--r--pkgs/by-name/pe/peergos/package.nix1
-rw-r--r--pkgs/by-name/pi/pianotrans/package.nix1
-rw-r--r--pkgs/by-name/pl/plumber/package.nix1
-rw-r--r--pkgs/by-name/pr/pretalx/package.nix1
-rw-r--r--pkgs/by-name/pr/pretix/package.nix1
-rw-r--r--pkgs/by-name/pr/promptfoo/package.nix1
-rw-r--r--pkgs/by-name/pr/protoc-gen-js/package.nix1
-rw-r--r--pkgs/by-name/pr/prox/package.nix1
-rw-r--r--pkgs/by-name/pt/ptcollab/package.nix1
-rw-r--r--pkgs/by-name/qg/qgrep/package.nix1
-rw-r--r--pkgs/by-name/re/regols/package.nix1
-rw-r--r--pkgs/by-name/ri/ricochet-refresh/package.nix1
-rw-r--r--pkgs/by-name/ri/ripunzip/package.nix1
-rw-r--r--pkgs/by-name/rs/rs/package.nix1
-rw-r--r--pkgs/by-name/rs/rsgain/package.nix1
-rw-r--r--pkgs/by-name/rs/rspamd-trainer/package.nix1
-rw-r--r--pkgs/by-name/rs/rst2html5/package.nix1
-rw-r--r--pkgs/by-name/ru/rusti-cal/package.nix1
-rw-r--r--pkgs/by-name/s3/s3proxy/package.nix1
-rw-r--r--pkgs/by-name/sa/salmon/package.nix1
-rw-r--r--pkgs/by-name/sa/samrewritten/package.nix1
-rw-r--r--pkgs/by-name/sc/scalingo/package.nix1
-rw-r--r--pkgs/by-name/sc/scout/package.nix1
-rw-r--r--pkgs/by-name/sc/screentest/package.nix1
-rw-r--r--pkgs/by-name/sh/shittier/package.nix1
-rw-r--r--pkgs/by-name/sh/shopware-cli/package.nix1
-rw-r--r--pkgs/by-name/si/signaturepdf/package.nix1
-rw-r--r--pkgs/by-name/si/simplex-chat-desktop/package.nix1
-rw-r--r--pkgs/by-name/sm/smuview/package.nix1
-rw-r--r--pkgs/by-name/sn/snekim/package.nix1
-rw-r--r--pkgs/by-name/sp/speakersafetyd/package.nix1
-rw-r--r--pkgs/by-name/sp/spice-autorandr/package.nix1
-rw-r--r--pkgs/by-name/sp/spigot/package.nix1
-rw-r--r--pkgs/by-name/ss/sssnake/package.nix1
-rw-r--r--pkgs/by-name/st/stormlib/package.nix1
-rw-r--r--pkgs/by-name/sw/sway-assign-cgroups/package.nix1
-rw-r--r--pkgs/by-name/sw/swaycons/package.nix1
-rw-r--r--pkgs/by-name/sw/swayws/package.nix1
-rw-r--r--pkgs/by-name/sw/swaywsr/package.nix1
-rw-r--r--pkgs/by-name/tc/tcsh/package.nix1
-rw-r--r--pkgs/by-name/ti/tilda/package.nix1
-rw-r--r--pkgs/by-name/tr/tridactyl-native/package.nix1
-rw-r--r--pkgs/by-name/tr/trunk-ng/package.nix1
-rw-r--r--pkgs/by-name/tu/tup/package.nix1
-rw-r--r--pkgs/by-name/ud/udebug/package.nix1
-rw-r--r--pkgs/by-name/un/unciv/package.nix1
-rw-r--r--pkgs/by-name/un/unl0kr/package.nix1
-rw-r--r--pkgs/by-name/un/unsilence/package.nix1
-rw-r--r--pkgs/by-name/vc/vcpkg-tool/package.nix1
-rw-r--r--pkgs/by-name/vc/vcpkg/package.nix1
-rw-r--r--pkgs/by-name/vi/vieb/package.nix1
-rw-r--r--pkgs/by-name/wa/wayland-logout/package.nix1
-rw-r--r--pkgs/by-name/wt/wtfis/package.nix1
-rw-r--r--pkgs/by-name/x5/x509-limbo/package.nix1
-rw-r--r--pkgs/by-name/xa/xarcan/package.nix1
-rw-r--r--pkgs/by-name/xf/xfs-undelete/package.nix1
-rw-r--r--pkgs/by-name/xp/xplr/package.nix1
-rw-r--r--pkgs/by-name/xs/xsct/package.nix1
-rw-r--r--pkgs/by-name/za/zabbix-agent2-plugin-postgresql/package.nix1
-rw-r--r--pkgs/by-name/zc/zcfan/package.nix1
-rw-r--r--pkgs/by-name/ze/zesarux/package.nix1
-rw-r--r--pkgs/by-name/zi/zigpy-cli/package.nix1
-rw-r--r--pkgs/by-name/zi/zircolite/package.nix1
-rw-r--r--pkgs/by-name/zo/zola/package.nix1
-rw-r--r--pkgs/by-name/zp/zpaqfranz/package.nix1
198 files changed, 198 insertions, 0 deletions
diff --git a/pkgs/by-name/aa/aaaaxy/package.nix b/pkgs/by-name/aa/aaaaxy/package.nix
index dd0b57a691766..3145758f50d68 100644
--- a/pkgs/by-name/aa/aaaaxy/package.nix
+++ b/pkgs/by-name/aa/aaaaxy/package.nix
@@ -114,6 +114,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A nonlinear 2D puzzle platformer taking place in impossible spaces";
+    mainProgram = "aaaaxy";
     homepage = "https://divverent.github.io/aaaaxy/";
     license = licenses.asl20;
     maintainers = with maintainers; [ Luflosi ];
diff --git a/pkgs/by-name/ad/adafruit-nrfutil/package.nix b/pkgs/by-name/ad/adafruit-nrfutil/package.nix
index a521154aa253a..dbf90df660266 100644
--- a/pkgs/by-name/ad/adafruit-nrfutil/package.nix
+++ b/pkgs/by-name/ad/adafruit-nrfutil/package.nix
@@ -53,6 +53,7 @@ python3Packages.buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/adafruit/Adafruit_nRF52_nrfutil";
     description = "Modified version of Nordic's nrfutil 0.5.x for use with the Adafruit Feather nRF52";
+    mainProgram = "adafruit-nrfutil";
     license = licenses.bsd3;
     maintainers = with maintainers; [ stargate01 ];
   };
diff --git a/pkgs/by-name/ai/airscan/package.nix b/pkgs/by-name/ai/airscan/package.nix
index 0859a6c21be87..e6001b44f3efe 100644
--- a/pkgs/by-name/ai/airscan/package.nix
+++ b/pkgs/by-name/ai/airscan/package.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Package to scan paper documents using the Apple AirScan (eSCL) protocol";
+    mainProgram = "airscan1";
     homepage = "https://github.com/stapelberg/airscan";
     changelog = "https://github.com/stapelberg/airscan/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/by-name/al/alephone/package.nix b/pkgs/by-name/al/alephone/package.nix
index 44349b7621e52..5ee1ef50a76bf 100644
--- a/pkgs/by-name/al/alephone/package.nix
+++ b/pkgs/by-name/al/alephone/package.nix
@@ -84,6 +84,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     description =
       "Aleph One is the open source continuation of Bungie’s Marathon 2 game engine";
+    mainProgram = "alephone";
     homepage = "https://alephone.lhowon.org/";
     license = [ lib.licenses.gpl3 ];
     maintainers = with lib.maintainers; [ ehmry ];
diff --git a/pkgs/by-name/al/alsa-lib-with-plugins/package.nix b/pkgs/by-name/al/alsa-lib-with-plugins/package.nix
index 4388884f75a6d..63ffa5550c446 100644
--- a/pkgs/by-name/al/alsa-lib-with-plugins/package.nix
+++ b/pkgs/by-name/al/alsa-lib-with-plugins/package.nix
@@ -12,6 +12,7 @@ in
 runCommand "${alsa-lib.pname}-${alsa-lib.version}" {
   meta = with lib; {
     description = "wrapper to ease access to ALSA plugins";
+    mainProgram = "aserver";
     platforms = platforms.linux;
     maintainers = with maintainers; [ gm6k ];
   };
diff --git a/pkgs/by-name/al/alsa-lib/package.nix b/pkgs/by-name/al/alsa-lib/package.nix
index f22f68d19cf85..50f40cd0686cd 100644
--- a/pkgs/by-name/al/alsa-lib/package.nix
+++ b/pkgs/by-name/al/alsa-lib/package.nix
@@ -37,6 +37,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "http://www.alsa-project.org/";
     description = "ALSA, the Advanced Linux Sound Architecture libraries";
+    mainProgram = "aserver";
 
     longDescription = ''
       The Advanced Linux Sound Architecture (ALSA) provides audio and
diff --git a/pkgs/by-name/al/alsa-oss/package.nix b/pkgs/by-name/al/alsa-oss/package.nix
index f600b52c5f3aa..71c53580c2867 100644
--- a/pkgs/by-name/al/alsa-oss/package.nix
+++ b/pkgs/by-name/al/alsa-oss/package.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://www.alsa-project.org/";
     description = "ALSA, the Advanced Linux Sound Architecture alsa-oss emulation";
+    mainProgram = "aoss";
 
     longDescription = ''
       The Advanced Linux Sound Architecture (ALSA) provides audio and
diff --git a/pkgs/by-name/am/amphetype/package.nix b/pkgs/by-name/am/amphetype/package.nix
index 0b47515c3dfe7..1db7bb9a9e66f 100644
--- a/pkgs/by-name/am/amphetype/package.nix
+++ b/pkgs/by-name/am/amphetype/package.nix
@@ -38,6 +38,7 @@ in python3Packages.buildPythonApplication {
 
   meta = with lib; {
     inherit description;
+    mainProgram = "amphetype";
     homepage = "https://gitlab.com/franksh/amphetype";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ rycee ];
diff --git a/pkgs/by-name/ar/arxiv-latex-cleaner/package.nix b/pkgs/by-name/ar/arxiv-latex-cleaner/package.nix
index 7a5499110a058..bae622f00fd2b 100644
--- a/pkgs/by-name/ar/arxiv-latex-cleaner/package.nix
+++ b/pkgs/by-name/ar/arxiv-latex-cleaner/package.nix
@@ -30,6 +30,7 @@ python3Packages.buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/google-research/arxiv-latex-cleaner";
     description = "Easily clean the LaTeX code of your paper to submit to arXiv";
+    mainProgram = "arxiv_latex_cleaner";
     license = licenses.asl20;
     maintainers = with maintainers; [ arkivm ];
   };
diff --git a/pkgs/by-name/at/ataripp/package.nix b/pkgs/by-name/at/ataripp/package.nix
index 86dc7b0bc0f40..303a7c47c4d27 100644
--- a/pkgs/by-name/at/ataripp/package.nix
+++ b/pkgs/by-name/at/ataripp/package.nix
@@ -38,6 +38,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "http://www.xl-project.com/";
     description = "An enhanced, cycle-accurated Atari emulator";
+    mainProgram = "atari++";
     longDescription = ''
       The Atari++ Emulator is a Unix based emulator of the Atari eight bit
       computers, namely the Atari 400 and 800, the Atari 400XL, 800XL and 130XE,
diff --git a/pkgs/by-name/au/audio-sharing/package.nix b/pkgs/by-name/au/audio-sharing/package.nix
index f65ffbc434de9..4fbf8a54036f5 100644
--- a/pkgs/by-name/au/audio-sharing/package.nix
+++ b/pkgs/by-name/au/audio-sharing/package.nix
@@ -68,6 +68,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "https://gitlab.gnome.org/World/AudioSharing";
     description = "Automatically share the current audio playback in the form of an RTSP stream";
+    mainProgram = "audio-sharing";
     maintainers = with maintainers; [ benediktbroich ];
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
diff --git a/pkgs/by-name/ba/backlight-auto/package.nix b/pkgs/by-name/ba/backlight-auto/package.nix
index 5115ae2296735..26869b5a20dd4 100644
--- a/pkgs/by-name/ba/backlight-auto/package.nix
+++ b/pkgs/by-name/ba/backlight-auto/package.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Automatically set screen brightness with a webcam";
+    mainProgram = "backlight-auto";
     homepage = "https://len.falken.directory/backlight-auto.html";
     license = licenses.mit;
     maintainers = [ maintainers.lf- ];
diff --git a/pkgs/by-name/ba/base16-shell-preview/package.nix b/pkgs/by-name/ba/base16-shell-preview/package.nix
index bd1c8508023df..e047c7e88b211 100644
--- a/pkgs/by-name/ba/base16-shell-preview/package.nix
+++ b/pkgs/by-name/ba/base16-shell-preview/package.nix
@@ -23,6 +23,7 @@ python3Packages.buildPythonApplication {
   meta = {
     homepage = "https://github.com/nvllsvm/base16-shell-preview";
     description = "Browse and preview Base16 Shell themes in your terminal";
+    mainProgram = "base16-shell-preview";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ AndersonTorres ];
   };
diff --git a/pkgs/by-name/be/betula/package.nix b/pkgs/by-name/be/betula/package.nix
index b6ed66a4e6906..1e27400950235 100644
--- a/pkgs/by-name/be/betula/package.nix
+++ b/pkgs/by-name/be/betula/package.nix
@@ -20,6 +20,7 @@
 
   meta = with lib; {
     description = "Single-user self-hosted bookmarking software";
+    mainProgram = "betula";
     homepage = "https://betula.mycorrhiza.wiki/";
     license = licenses.agpl3Only;
     maintainers = with maintainers; [ GoldsteinE ];
diff --git a/pkgs/by-name/bi/binsort/package.nix b/pkgs/by-name/bi/binsort/package.nix
index edb41c6422685..b1100dabad8cb 100644
--- a/pkgs/by-name/bi/binsort/package.nix
+++ b/pkgs/by-name/bi/binsort/package.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Sort files by binary similarity";
+    mainProgram = "binsort";
     homepage = "http://neoscientists.org/~tmueller/binsort/";
     license = licenses.bsd3;
     maintainers = with maintainers; [ numinit ];
diff --git a/pkgs/by-name/bi/bitbake-language-server/package.nix b/pkgs/by-name/bi/bitbake-language-server/package.nix
index 68b536d1319cf..e73c78124ac27 100644
--- a/pkgs/by-name/bi/bitbake-language-server/package.nix
+++ b/pkgs/by-name/bi/bitbake-language-server/package.nix
@@ -30,6 +30,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Language server for bitbake";
+    mainProgram = "bitbake-language-server";
     homepage = "https://github.com/Freed-Wu/bitbake-language-server";
     changelog = "https://github.com/Freed-Wu/bitbake-language-server/releases/tag/v${version}";
     license = licenses.gpl3;
diff --git a/pkgs/by-name/bu/bullshit/package.nix b/pkgs/by-name/bu/bullshit/package.nix
index 64f50f1d2b306..c32123eb14513 100644
--- a/pkgs/by-name/bu/bullshit/package.nix
+++ b/pkgs/by-name/bu/bullshit/package.nix
@@ -35,6 +35,7 @@ stdenvNoCC.mkDerivation {
 
   meta = with lib; {
     description = "A nonsense phrase generator";
+    mainProgram = "bullshit";
     homepage = "https://github.com/fceschmidt/bullshit-arch";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ krloer ];
diff --git a/pkgs/by-name/c2/c2nim/package.nix b/pkgs/by-name/c2/c2nim/package.nix
index 2212cb5879edc..1cc603b59bc8c 100644
--- a/pkgs/by-name/c2/c2nim/package.nix
+++ b/pkgs/by-name/c2/c2nim/package.nix
@@ -11,6 +11,7 @@ buildNimPackage (finalAttrs: {
   };
   meta = finalAttrs.src.meta // {
     description = "Tool to translate Ansi C code to Nim";
+    mainProgram = "c2nim";
     license = lib.licenses.mit;
     maintainers = [ lib.maintainers.ehmry ];
   };
diff --git a/pkgs/by-name/ca/cargo-bump/package.nix b/pkgs/by-name/ca/cargo-bump/package.nix
index 76f21c1ca0270..f5ff8e08f5747 100644
--- a/pkgs/by-name/ca/cargo-bump/package.nix
+++ b/pkgs/by-name/ca/cargo-bump/package.nix
@@ -29,6 +29,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Increments the version number of the current project.";
+    mainProgram = "cargo-bump";
     homepage = "https://github.com/wraithan/cargo-bump";
     license = with licenses; [ isc ];
     maintainers = with maintainers; [ cafkafk ];
diff --git a/pkgs/by-name/ca/cargo-rdme/package.nix b/pkgs/by-name/ca/cargo-rdme/package.nix
index 7cc47e22a641e..3ee82740c3c86 100644
--- a/pkgs/by-name/ca/cargo-rdme/package.nix
+++ b/pkgs/by-name/ca/cargo-rdme/package.nix
@@ -17,6 +17,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Cargo command to create the README.md from your crate's documentation";
+    mainProgram = "cargo-rdme";
     homepage = "https://github.com/orium/cargo-rdme";
     changelog = "https://github.com/orium/cargo-rdme/blob/v${version}/release-notes.md";
     license = with licenses; [ mpl20 ];
diff --git a/pkgs/by-name/ca/cargo-swift/package.nix b/pkgs/by-name/ca/cargo-swift/package.nix
index d8135f2ca4f67..cc9cc989e0b3f 100644
--- a/pkgs/by-name/ca/cargo-swift/package.nix
+++ b/pkgs/by-name/ca/cargo-swift/package.nix
@@ -19,6 +19,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A cargo plugin to easily build Swift packages from Rust code";
+    mainProgram = "cargo-swift";
     homepage = "https://github.com/antoniusnaumann/cargo-swift";
     license = with licenses; [ asl20 mit ];
     maintainers = with maintainers; [ elliot ];
diff --git a/pkgs/by-name/ca/cargo-typify/package.nix b/pkgs/by-name/ca/cargo-typify/package.nix
index 6d62df94c517d..6693776c04eda 100644
--- a/pkgs/by-name/ca/cargo-typify/package.nix
+++ b/pkgs/by-name/ca/cargo-typify/package.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "JSON Schema to Rust type converter";
+    mainProgram = "cargo-typify";
     homepage = "https://github.com/oxidecomputer/typify";
     license = with licenses; [ asl20 ];
     maintainers = with maintainers; [ david-r-cox ];
diff --git a/pkgs/by-name/ca/cargo-vibe/package.nix b/pkgs/by-name/ca/cargo-vibe/package.nix
index f884dd817c1da..4caaa823264b9 100644
--- a/pkgs/by-name/ca/cargo-vibe/package.nix
+++ b/pkgs/by-name/ca/cargo-vibe/package.nix
@@ -33,6 +33,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Cargo x Buttplug.io";
+    mainProgram = "cargo-vibe";
     homepage = "https://github.com/shadlock0133/cargo-vibe";
     license = licenses.mit;
     maintainers = with maintainers; [ _999eagle ];
diff --git a/pkgs/by-name/ca/cargo-xwin/package.nix b/pkgs/by-name/ca/cargo-xwin/package.nix
index b361b2a808acf..5a5cfb00fac08 100644
--- a/pkgs/by-name/ca/cargo-xwin/package.nix
+++ b/pkgs/by-name/ca/cargo-xwin/package.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Cross compile Cargo project to Windows MSVC target with ease";
+    mainProgram = "cargo-xwin";
     homepage = "https://github.com/rust-cross/cargo-xwin";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ shivaraj-bh ];
diff --git a/pkgs/by-name/cd/cdk/package.nix b/pkgs/by-name/cd/cdk/package.nix
index 410e341cf0fc7..9848f293a011b 100644
--- a/pkgs/by-name/cd/cdk/package.nix
+++ b/pkgs/by-name/cd/cdk/package.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     description = "Curses development kit";
+    mainProgram = "cdk5-config";
     homepage = "https://invisible-island.net/cdk/";
     changelog = "https://invisible-island.net/cdk/CHANGES.html";
     license = lib.licenses.mit;
diff --git a/pkgs/by-name/ce/certmgr/package.nix b/pkgs/by-name/ce/certmgr/package.nix
index 7b7ccbf34d686..e5579125a2ca7 100644
--- a/pkgs/by-name/ce/certmgr/package.nix
+++ b/pkgs/by-name/ce/certmgr/package.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://cfssl.org/";
     description = "Cloudflare's automated certificate management using a CFSSL CA";
+    mainProgram = "certmgr";
     platforms = platforms.linux;
     license = licenses.bsd2;
     maintainers = with maintainers; [ johanot srhb ];
diff --git a/pkgs/by-name/ch/chess-clock/package.nix b/pkgs/by-name/ch/chess-clock/package.nix
index f8fc0f9baa9ad..9e36fc97d00a8 100644
--- a/pkgs/by-name/ch/chess-clock/package.nix
+++ b/pkgs/by-name/ch/chess-clock/package.nix
@@ -45,6 +45,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Time games of over-the-board chess";
+    mainProgram = "chess-clock";
     homepage = "https://gitlab.gnome.org/World/chess-clock";
     changelog = "https://gitlab.gnome.org/World/chess-clock/-/releases/v${version}";
     license = licenses.gpl3Plus;
diff --git a/pkgs/by-name/ci/cidr-merger/package.nix b/pkgs/by-name/ci/cidr-merger/package.nix
index 3d06120716095..def8f4080933f 100644
--- a/pkgs/by-name/ci/cidr-merger/package.nix
+++ b/pkgs/by-name/ci/cidr-merger/package.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A simple command line tool to merge ip/ip cidr/ip range, supports IPv4/IPv6";
+    mainProgram = "cidr-merger";
     homepage = "https://github.com/zhanhb/cidr-merger";
     license = licenses.mit;
     maintainers = with maintainers; [ cyounkins ];
diff --git a/pkgs/by-name/ci/circom/package.nix b/pkgs/by-name/ci/circom/package.nix
index 4601704293d49..f142a7fc234a4 100644
--- a/pkgs/by-name/ci/circom/package.nix
+++ b/pkgs/by-name/ci/circom/package.nix
@@ -19,6 +19,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "zkSnark circuit compiler";
+    mainProgram = "circom";
     homepage = "https://github.com/iden3/circom";
     changelog = "https://github.com/iden3/circom/blob/${src.rev}/RELEASES.md";
     license = licenses.gpl3Only;
diff --git a/pkgs/by-name/cl/clamtk/package.nix b/pkgs/by-name/cl/clamtk/package.nix
index 3c85528a6e63a..b34850c92599a 100644
--- a/pkgs/by-name/cl/clamtk/package.nix
+++ b/pkgs/by-name/cl/clamtk/package.nix
@@ -67,6 +67,7 @@ perlPackages.buildPerlPackage rec {
     description = ''
       Easy to use, lightweight front-end for ClamAV (Clam Antivirus).
     '';
+    mainProgram = "clamtk";
     license = licenses.gpl1Plus;
     homepage = "https://github.com/dave-theunsub/clamtk";
     platforms = platforms.linux;
diff --git a/pkgs/by-name/cl/clzip/package.nix b/pkgs/by-name/cl/clzip/package.nix
index 19ec4347a1e7b..d2e17c5e14a04 100644
--- a/pkgs/by-name/cl/clzip/package.nix
+++ b/pkgs/by-name/cl/clzip/package.nix
@@ -15,6 +15,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "https://www.nongnu.org/lzip/clzip.html";
     description = "C language version of lzip";
+    mainProgram = "clzip";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ ];
     platforms = platforms.all;
diff --git a/pkgs/by-name/cn/cntb/package.nix b/pkgs/by-name/cn/cntb/package.nix
index 98364e8f9a88e..24b3193089196 100644
--- a/pkgs/by-name/cn/cntb/package.nix
+++ b/pkgs/by-name/cn/cntb/package.nix
@@ -18,6 +18,7 @@
 
   meta = with lib; {
     description = "CLI tool for managing your products from Contabo like VPS and VDS";
+    mainProgram = "cntb";
     homepage = "https://github.com/contabo/cntb";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ aciceri ];
diff --git a/pkgs/by-name/co/cockpit/package.nix b/pkgs/by-name/co/cockpit/package.nix
index 063483c0c5613..db977bafe822f 100644
--- a/pkgs/by-name/co/cockpit/package.nix
+++ b/pkgs/by-name/co/cockpit/package.nix
@@ -217,6 +217,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Web-based graphical interface for servers";
+    mainProgram = "cockpit-bridge";
     homepage = "https://cockpit-project.org/";
     license = licenses.lgpl21;
     maintainers = with maintainers; [ lucasew ];
diff --git a/pkgs/by-name/co/commitmsgfmt/package.nix b/pkgs/by-name/co/commitmsgfmt/package.nix
index 45ee60ff0b3bb..508ce1f98312e 100644
--- a/pkgs/by-name/co/commitmsgfmt/package.nix
+++ b/pkgs/by-name/co/commitmsgfmt/package.nix
@@ -25,6 +25,7 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://gitlab.com/mkjeldsen/commitmsgfmt";
     changelog = "https://gitlab.com/mkjeldsen/commitmsgfmt/-/raw/v${version}/CHANGELOG.md";
     description = "Formats commit messages better than fmt(1) and Vim";
+    mainProgram = "commitmsgfmt";
     license = licenses.asl20;
     maintainers = with maintainers; [ mmlb ];
   };
diff --git a/pkgs/by-name/co/connman-gtk/package.nix b/pkgs/by-name/co/connman-gtk/package.nix
index c75254a27b158..46dce2aa29303 100644
--- a/pkgs/by-name/co/connman-gtk/package.nix
+++ b/pkgs/by-name/co/connman-gtk/package.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "GTK GUI for Connman";
+    mainProgram = "connman-gtk";
     homepage = "https://github.com/jgke/connman-gtk";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/connman-ncurses/package.nix b/pkgs/by-name/co/connman-ncurses/package.nix
index 9d638c48000a9..53b488159823d 100644
--- a/pkgs/by-name/co/connman-ncurses/package.nix
+++ b/pkgs/by-name/co/connman-ncurses/package.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Simple ncurses UI for connman";
+    mainProgram = "connman_ncurses";
     homepage = "https://github.com/eurogiciel-oss/connman-json-client";
     license = licenses.gpl2;
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/connman-notify/package.nix b/pkgs/by-name/co/connman-notify/package.nix
index cbf500913038c..c8df6bc893527 100644
--- a/pkgs/by-name/co/connman-notify/package.nix
+++ b/pkgs/by-name/co/connman-notify/package.nix
@@ -28,6 +28,7 @@ python3Packages.buildPythonApplication {
 
   meta = with lib; {
     description = "Desktop notification integration for connman";
+    mainProgram = "connman-notify";
     homepage = "https://gitlab.com/wavexx/connman-notify";
     license = licenses.gpl2;
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/connman_dmenu/package.nix b/pkgs/by-name/co/connman_dmenu/package.nix
index 86e5a62fb8dec..0a193493b71a5 100644
--- a/pkgs/by-name/co/connman_dmenu/package.nix
+++ b/pkgs/by-name/co/connman_dmenu/package.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "A dmenu wrapper for connmann";
+    mainProgram = "connman_dmenu";
     homepage = "https://github.com/march-linux/connman_dmenu";
     license = lib.licenses.free;
     maintainers = [ lib.maintainers.magnetophon ];
diff --git a/pkgs/by-name/co/convco/package.nix b/pkgs/by-name/co/convco/package.nix
index 314c5593bcba9..2883cb56e2cf6 100644
--- a/pkgs/by-name/co/convco/package.nix
+++ b/pkgs/by-name/co/convco/package.nix
@@ -28,6 +28,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A Conventional commit cli";
+    mainProgram = "convco";
     homepage = "https://github.com/convco/convco";
     license = with licenses; [ mit ];
     maintainers = with maintainers; [ hoverbear cafkafk ];
diff --git a/pkgs/by-name/co/cosmic-comp/package.nix b/pkgs/by-name/co/cosmic-comp/package.nix
index bd7d147cfeb05..50f30dcd85f85 100644
--- a/pkgs/by-name/co/cosmic-comp/package.nix
+++ b/pkgs/by-name/co/cosmic-comp/package.nix
@@ -83,6 +83,7 @@ rustPlatform.buildRustPackage {
   meta = with lib; {
     homepage = "https://github.com/pop-os/cosmic-comp";
     description = "Compositor for the COSMIC Desktop Environment";
+    mainProgram = "cosmic-comp";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ qyliss nyanbinary ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/cosmic-edit/package.nix b/pkgs/by-name/co/cosmic-edit/package.nix
index 60020d46df45c..2270e1f9da206 100644
--- a/pkgs/by-name/co/cosmic-edit/package.nix
+++ b/pkgs/by-name/co/cosmic-edit/package.nix
@@ -101,6 +101,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     homepage = "https://github.com/pop-os/cosmic-edit";
     description = "Text Editor for the COSMIC Desktop Environment";
+    mainProgram = "cosmic-edit";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ ahoneybun nyanbinary ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/cosmic-greeter/package.nix b/pkgs/by-name/co/cosmic-greeter/package.nix
index 754c181d9ff02..103eec88c217a 100644
--- a/pkgs/by-name/co/cosmic-greeter/package.nix
+++ b/pkgs/by-name/co/cosmic-greeter/package.nix
@@ -51,6 +51,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     homepage = "https://github.com/pop-os/cosmic-greeter";
     description = "Greeter for the COSMIC Desktop Environment";
+    mainProgram = "cosmic-greeter";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ nyanbinary ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/cosmic-launcher/package.nix b/pkgs/by-name/co/cosmic-launcher/package.nix
index 8d5b65bd8c4be..6fcdd0373641e 100644
--- a/pkgs/by-name/co/cosmic-launcher/package.nix
+++ b/pkgs/by-name/co/cosmic-launcher/package.nix
@@ -66,6 +66,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     homepage = "https://github.com/pop-os/cosmic-launcher";
     description = "Launcher for the COSMIC Desktop Environment";
+    mainProgram = "cosmic-launcher";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ nyanbinary ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/cosmic-notifications/package.nix b/pkgs/by-name/co/cosmic-notifications/package.nix
index 3faf12c39e02c..2bf02f2245d35 100644
--- a/pkgs/by-name/co/cosmic-notifications/package.nix
+++ b/pkgs/by-name/co/cosmic-notifications/package.nix
@@ -66,6 +66,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     homepage = "https://github.com/pop-os/cosmic-notifications";
     description = "Notifications for the COSMIC Desktop Environment";
+    mainProgram = "cosmic-notifications";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ nyanbinary ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/cosmic-osd/package.nix b/pkgs/by-name/co/cosmic-osd/package.nix
index b71333fe0f943..f42f68e8c8010 100644
--- a/pkgs/by-name/co/cosmic-osd/package.nix
+++ b/pkgs/by-name/co/cosmic-osd/package.nix
@@ -38,6 +38,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     homepage = "https://github.com/pop-os/cosmic-osd";
     description = "OSD for the COSMIC Desktop Environment";
+    mainProgram = "cosmic-osd";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ nyanbinary ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/cosmic-panel/package.nix b/pkgs/by-name/co/cosmic-panel/package.nix
index 7c8c31f511d41..8847307fa41fe 100644
--- a/pkgs/by-name/co/cosmic-panel/package.nix
+++ b/pkgs/by-name/co/cosmic-panel/package.nix
@@ -55,6 +55,7 @@ rustPlatform.buildRustPackage {
   meta = with lib; {
     homepage = "https://github.com/pop-os/cosmic-panel";
     description = "Panel for the COSMIC Desktop Environment";
+    mainProgram = "cosmic-panel";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ qyliss nyanbinary ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/cosmic-settings-daemon/package.nix b/pkgs/by-name/co/cosmic-settings-daemon/package.nix
index 6046b55e3bc88..8b0c9819ab4e0 100644
--- a/pkgs/by-name/co/cosmic-settings-daemon/package.nix
+++ b/pkgs/by-name/co/cosmic-settings-daemon/package.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     homepage = "https://github.com/pop-os/cosmic-settings-daemon";
     description = "Settings Daemon for the COSMIC Desktop Environment";
+    mainProgram = "cosmic-settings-daemon";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ nyanbinary ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/co/cosmic-workspaces-epoch/package.nix b/pkgs/by-name/co/cosmic-workspaces-epoch/package.nix
index 5ec477b821d32..24d5f056daf01 100644
--- a/pkgs/by-name/co/cosmic-workspaces-epoch/package.nix
+++ b/pkgs/by-name/co/cosmic-workspaces-epoch/package.nix
@@ -53,6 +53,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     homepage = "https://github.com/pop-os/cosmic-workspaces-epoch";
     description = "Workspaces Epoch for the COSMIC Desktop Environment";
+    mainProgram = "cosmic-workspaces";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ nyanbinary ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/cp/cpu-x/package.nix b/pkgs/by-name/cp/cpu-x/package.nix
index 8171cfc78f2bc..d8db8212ba760 100644
--- a/pkgs/by-name/cp/cpu-x/package.nix
+++ b/pkgs/by-name/cp/cpu-x/package.nix
@@ -45,6 +45,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Free software that gathers information on CPU, motherboard and more";
+    mainProgram = "cpu-x";
     homepage = "https://thetumultuousunicornofdarkness.github.io/CPU-X";
     license = licenses.gpl3Plus;
     platforms = [ "x86_64-linux" ];
diff --git a/pkgs/by-name/cy/cyanrip/package.nix b/pkgs/by-name/cy/cyanrip/package.nix
index 9626224b4f999..e1f1ae1648afb 100644
--- a/pkgs/by-name/cy/cyanrip/package.nix
+++ b/pkgs/by-name/cy/cyanrip/package.nix
@@ -38,6 +38,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "https://github.com/cyanreg/cyanrip";
     description = "Bule-ish CD ripper";
+    mainProgram = "cyanrip";
     license = licenses.lgpl21Plus;
     platforms = platforms.all;
     maintainers = [ maintainers.zane ];
diff --git a/pkgs/by-name/de/dependabot-cli/package.nix b/pkgs/by-name/de/dependabot-cli/package.nix
index 3cd9b537d515d..b5b8eadad45b1 100644
--- a/pkgs/by-name/de/dependabot-cli/package.nix
+++ b/pkgs/by-name/de/dependabot-cli/package.nix
@@ -55,6 +55,7 @@ buildGoModule {
   meta = with lib; {
     changelog = "https://github.com/dependabot/cli/releases/tag/v${version}";
     description = "A tool for testing and debugging Dependabot update jobs";
+    mainProgram = "dependabot";
     homepage = "https://github.com/dependabot/cli";
     license = licenses.mit;
     maintainers = with maintainers; [ l0b0 ];
diff --git a/pkgs/by-name/dj/djent/package.nix b/pkgs/by-name/dj/djent/package.nix
index 3559410fbd292..06cff41ec358e 100644
--- a/pkgs/by-name/dj/djent/package.nix
+++ b/pkgs/by-name/dj/djent/package.nix
@@ -40,6 +40,7 @@ stdenv.mkDerivation rec {
       A reimplementation of the Fourmilab/John Walker random number test program
       ent with several improvements
     '';
+    mainProgram = "djent";
     license = lib.licenses.gpl2Only;
     platforms = lib.platforms.all;
     maintainers = with lib.maintainers; [ orichter thillux ];
diff --git a/pkgs/by-name/dm/dmenu-bluetooth/package.nix b/pkgs/by-name/dm/dmenu-bluetooth/package.nix
index 63a46f1e6e501..64d8532290229 100644
--- a/pkgs/by-name/dm/dmenu-bluetooth/package.nix
+++ b/pkgs/by-name/dm/dmenu-bluetooth/package.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     description = "A script that generates a dmenu menu that uses bluetoothctl to connect to bluetooth devices and display status info";
+    mainProgram = "dmenu-bluetooth";
     homepage = "https://github.com/Layerex/dmenu-bluetooth";
     license = lib.licenses.gpl3Only;
     maintainers = with lib.maintainers; [ ludovicopiero ];
diff --git a/pkgs/by-name/do/doggo/package.nix b/pkgs/by-name/do/doggo/package.nix
index cdd19bc37b906..2fe817010bf3b 100644
--- a/pkgs/by-name/do/doggo/package.nix
+++ b/pkgs/by-name/do/doggo/package.nix
@@ -33,6 +33,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/mr-karan/doggo";
     description = "Command-line DNS Client for Humans. Written in Golang";
+    mainProgram = "doggo";
     longDescription = ''
       doggo is a modern command-line DNS client (like dig) written in Golang.
       It outputs information in a neat concise manner and supports protocols like DoH, DoT, DoQ, and DNSCrypt as well
diff --git a/pkgs/by-name/do/dotbot/package.nix b/pkgs/by-name/do/dotbot/package.nix
index a2b979f671392..77d98148434bb 100644
--- a/pkgs/by-name/do/dotbot/package.nix
+++ b/pkgs/by-name/do/dotbot/package.nix
@@ -27,6 +27,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "A tool that bootstraps your dotfiles";
+    mainProgram = "dotbot";
     longDescription = ''
       Dotbot is designed to be lightweight and self-contained, with no external
       dependencies and no installation required. Dotbot can also be a drop-in
diff --git a/pkgs/by-name/ds/dsda-doom/package.nix b/pkgs/by-name/ds/dsda-doom/package.nix
index cedf7c0524f52..c45c0ff37988a 100644
--- a/pkgs/by-name/ds/dsda-doom/package.nix
+++ b/pkgs/by-name/ds/dsda-doom/package.nix
@@ -55,6 +55,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/kraflab/dsda-doom";
     description = "An advanced Doom source port with a focus on speedrunning, successor of PrBoom+";
+    mainProgram = "dsda-doom";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
     maintainers = [ maintainers.Gliczy ];
diff --git a/pkgs/by-name/ds/dsda-launcher/package.nix b/pkgs/by-name/ds/dsda-launcher/package.nix
index 8a83fb43a6f57..8e73ae10e74f8 100644
--- a/pkgs/by-name/ds/dsda-launcher/package.nix
+++ b/pkgs/by-name/ds/dsda-launcher/package.nix
@@ -40,6 +40,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/Pedro-Beirao/dsda-launcher";
     description = "This is a launcher GUI for the dsda-doom source port";
+    mainProgram = "dsda-launcher";
     license = licenses.gpl3;
     platforms = platforms.linux;
     maintainers = [ maintainers.Gliczy ];
diff --git a/pkgs/by-name/dx/dxvk/package.nix b/pkgs/by-name/dx/dxvk/package.nix
index 88b7e5b104fb3..d3639215057f2 100644
--- a/pkgs/by-name/dx/dxvk/package.nix
+++ b/pkgs/by-name/dx/dxvk/package.nix
@@ -43,6 +43,7 @@ stdenvNoCC.mkDerivation (finalAttrs:
 
     meta = {
       description = "Setup script for DXVK";
+      mainProgram = "setup_dxvk.sh";
       homepage = "https://github.com/doitsujin/dxvk";
       changelog = "https://github.com/doitsujin/dxvk/releases";
       maintainers = [ lib.maintainers.reckenrode ];
diff --git a/pkgs/by-name/ec/ecc/package.nix b/pkgs/by-name/ec/ecc/package.nix
index b79fa4bd18c88..40597fe0fd994 100644
--- a/pkgs/by-name/ec/ecc/package.nix
+++ b/pkgs/by-name/ec/ecc/package.nix
@@ -117,6 +117,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     homepage = "https://eunomia.dev";
     description = "the eBPF compile toolchain for eunomia-bpf";
+    mainProgram = "ecc-rs";
     maintainers = with maintainers; [ oluceps ];
     platforms = platforms.linux;
     license = licenses.mit;
diff --git a/pkgs/by-name/el/elf2nucleus/package.nix b/pkgs/by-name/el/elf2nucleus/package.nix
index c6cafbfc45781..08ec2e8f0a237 100644
--- a/pkgs/by-name/el/elf2nucleus/package.nix
+++ b/pkgs/by-name/el/elf2nucleus/package.nix
@@ -32,6 +32,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Integrate micronucleus into the cargo buildsystem, flash an AVR firmware from an elf file";
+    mainProgram = "elf2nucleus";
     homepage = "https://github.com/kpcyrd/elf2nucleus";
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.marble ];
diff --git a/pkgs/by-name/el/elvish/package.nix b/pkgs/by-name/el/elvish/package.nix
index bd3e746377a3e..4363657fcced1 100644
--- a/pkgs/by-name/el/elvish/package.nix
+++ b/pkgs/by-name/el/elvish/package.nix
@@ -42,6 +42,7 @@ buildGoModule {
   meta = {
     homepage = "https://elv.sh/";
     description = "A friendly and expressive command shell";
+    mainProgram = "elvish";
     longDescription = ''
       Elvish is a friendly interactive shell and an expressive programming
       language. It runs on Linux, BSDs, macOS and Windows. Despite its pre-1.0
diff --git a/pkgs/by-name/en/encled/package.nix b/pkgs/by-name/en/encled/package.nix
index 3b4817bfab8ee..f75b75cd6a02f 100644
--- a/pkgs/by-name/en/encled/package.nix
+++ b/pkgs/by-name/en/encled/package.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Control fault/locate indicators in disk slots in enclosures";
+    mainProgram = "encled";
     homepage = "https://github.com/amarao/sdled";
     license = lib.licenses.gpl2Plus;
     maintainers = [ lib.maintainers.lheckemann ];
diff --git a/pkgs/by-name/en/engage/package.nix b/pkgs/by-name/en/engage/package.nix
index ccfc963ab665f..b873b81155ac4 100644
--- a/pkgs/by-name/en/engage/package.nix
+++ b/pkgs/by-name/en/engage/package.nix
@@ -38,6 +38,7 @@ rustPlatform.buildRustPackage {
 
   meta = {
     description = "A task runner with DAG-based parallelism";
+    mainProgram = "engage";
     homepage = "https://or.computer.surgery/charles/engage";
     changelog = "https://or.computer.surgery/charles/engage/-/blob/v${version}/CHANGELOG.md";
     license = with lib.licenses; [ asl20 mit ];
diff --git a/pkgs/by-name/en/envio/package.nix b/pkgs/by-name/en/envio/package.nix
index 51b656eccbbb4..0424bcf4e9bd3 100644
--- a/pkgs/by-name/en/envio/package.nix
+++ b/pkgs/by-name/en/envio/package.nix
@@ -40,6 +40,7 @@ rustPlatform.buildRustPackage rec {
     homepage    = "https://envio-cli.github.io/home";
     changelog   = "https://github.com/envio-cli/envio/blob/${version}/CHANGELOG.md";
     description = "Modern and secure CLI tool for managing environment variables";
+    mainProgram = "envio";
     longDescription = ''
       Envio is a command-line tool that simplifies the management of
       environment variables across multiple profiles. It allows users to easily
diff --git a/pkgs/by-name/fa/fanbox-dl/package.nix b/pkgs/by-name/fa/fanbox-dl/package.nix
index 753c31b0e5c79..3ee99df709faf 100644
--- a/pkgs/by-name/fa/fanbox-dl/package.nix
+++ b/pkgs/by-name/fa/fanbox-dl/package.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Pixiv FANBOX Downloader";
+    mainProgram = "fanbox-dl";
     homepage = "https://github.com/hareku/fanbox-dl";
     license = licenses.mit;
     maintainers = [ maintainers.moni ];
diff --git a/pkgs/by-name/fi/figurine/package.nix b/pkgs/by-name/fi/figurine/package.nix
index ec6470de63d68..5c1fa255565b4 100644
--- a/pkgs/by-name/fi/figurine/package.nix
+++ b/pkgs/by-name/fi/figurine/package.nix
@@ -26,6 +26,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/arsham/figurine";
     description = "Print your name in style";
+    mainProgram = "figurine";
     license = licenses.asl20;
     maintainers = with maintainers; [ ironicbadger ];
   };
diff --git a/pkgs/by-name/fi/firewalk/package.nix b/pkgs/by-name/fi/firewalk/package.nix
index 8909a61062c77..13497d99c4439 100644
--- a/pkgs/by-name/fi/firewalk/package.nix
+++ b/pkgs/by-name/fi/firewalk/package.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Gateway ACL scanner";
+    mainProgram = "firewalk";
     homepage = "http://packetfactory.openwall.net/projects/firewalk/";
     license = licenses.bsd2;
     maintainers = with maintainers; [ tochiaha ];
diff --git a/pkgs/by-name/fi/fitsverify/package.nix b/pkgs/by-name/fi/fitsverify/package.nix
index 35184352819a8..b755e71616f80 100644
--- a/pkgs/by-name/fi/fitsverify/package.nix
+++ b/pkgs/by-name/fi/fitsverify/package.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "FITS File Format-Verification Tool";
+    mainProgram = "fitsverify";
     longDescription = ''
       Fitsverify is a computer program that rigorously checks whether a FITS
       (Flexible Image Transport System) data file conforms to all the
diff --git a/pkgs/by-name/fo/foonathan-memory/package.nix b/pkgs/by-name/fo/foonathan-memory/package.nix
index 66177fabc22a1..7e2141ef042ce 100644
--- a/pkgs/by-name/fo/foonathan-memory/package.nix
+++ b/pkgs/by-name/fo/foonathan-memory/package.nix
@@ -48,6 +48,7 @@ stdenv.mkDerivation (finalAttrs: {
     homepage = "https://github.com/foonathan/memory";
     changelog = "https://github.com/foonathan/memory/releases/tag/${finalAttrs.src.rev}";
     description = "STL compatible C++ memory allocator library";
+    mainProgram = "nodesize_dbg";
 
     longDescription = ''
       The C++ STL allocator model has various flaws. For example, they are
diff --git a/pkgs/by-name/fy/fypp/package.nix b/pkgs/by-name/fy/fypp/package.nix
index 7785b67eda26c..fe6cd3267bbbb 100644
--- a/pkgs/by-name/fy/fypp/package.nix
+++ b/pkgs/by-name/fy/fypp/package.nix
@@ -16,6 +16,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Python powered Fortran preprocessor";
+    mainProgram = "fypp";
     homepage = "https://github.com/aradi/fypp";
     license = licenses.gpl3Only;
     maintainers = [ maintainers.sheepforce ];
diff --git a/pkgs/by-name/g3/g3kb-switch/package.nix b/pkgs/by-name/g3/g3kb-switch/package.nix
index 625cd6ef9a3d1..91994eb36624b 100644
--- a/pkgs/by-name/g3/g3kb-switch/package.nix
+++ b/pkgs/by-name/g3/g3kb-switch/package.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/lyokha/g3kb-switch";
     description = "CLI keyboard layout switcher for GNOME Shell";
+    mainProgram = "g3kb-switch";
     license = licenses.bsd2;
     maintainers = with maintainers; [ Freed-Wu ];
     platforms = platforms.unix;
diff --git a/pkgs/by-name/ga/gash/package.nix b/pkgs/by-name/ga/gash/package.nix
index 49dca79629071..cd6136dbc90f4 100644
--- a/pkgs/by-name/ga/gash/package.nix
+++ b/pkgs/by-name/ga/gash/package.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "POSIX-compatible shell written in Guile Scheme";
+    mainProgram = "gash";
     homepage = "https://savannah.nongnu.org/projects/gash/";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ wegank ];
diff --git a/pkgs/by-name/ge/get-google-fonts/package.nix b/pkgs/by-name/ge/get-google-fonts/package.nix
index 64c4197e87613..0939c43443e3f 100644
--- a/pkgs/by-name/ge/get-google-fonts/package.nix
+++ b/pkgs/by-name/ge/get-google-fonts/package.nix
@@ -30,6 +30,7 @@ buildNpmPackage {
 
   meta = with lib; {
     description = "Downloads and adapts Google fonts to working offline";
+    mainProgram = "get-google-fonts";
     homepage = "https://github.com/MrMaxie/get-google-fonts";
     license = licenses.asl20;
     maintainers = with maintainers; [ SuperSandro2000 ];
diff --git a/pkgs/by-name/ge/geticons/package.nix b/pkgs/by-name/ge/geticons/package.nix
index f3afda0f136df..5d8d7d2d1df88 100644
--- a/pkgs/by-name/ge/geticons/package.nix
+++ b/pkgs/by-name/ge/geticons/package.nix
@@ -20,6 +20,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "CLI utility to get icons for apps on your system or other generic icons by name";
+    mainProgram = "geticons";
     homepage = "https://git.sr.ht/~zethra/geticons";
     license = with licenses; [ gpl3Plus ];
     maintainers = with maintainers; [ Madouura ];
diff --git a/pkgs/by-name/gh/ghunt/package.nix b/pkgs/by-name/gh/ghunt/package.nix
index ddd139f389076..337104efa42b5 100644
--- a/pkgs/by-name/gh/ghunt/package.nix
+++ b/pkgs/by-name/gh/ghunt/package.nix
@@ -49,6 +49,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Offensive Google framework";
+    mainProgram = "ghunt";
     homepage = "https://github.com/mxrch/ghunt";
     changelog = "https://github.com/mxrch/GHunt/releases/tag/v${version}";
     license = licenses.agpl3Only;
diff --git a/pkgs/by-name/gi/git-instafix/package.nix b/pkgs/by-name/gi/git-instafix/package.nix
index 9085d381ff2dd..b444115700918 100644
--- a/pkgs/by-name/gi/git-instafix/package.nix
+++ b/pkgs/by-name/gi/git-instafix/package.nix
@@ -33,6 +33,7 @@ rustPlatform.buildRustPackage {
 
   meta = {
     description = "Quickly fix up an old commit using your currently-staged changes";
+    mainProgram = "git-instafix";
     homepage = "https://github.com/quodlibetor/git-instafix";
     license = with licenses; [ mit asl20 ];
     maintainers = with maintainers; [ mightyiam ];
diff --git a/pkgs/by-name/gi/gitlab-ci-local/package.nix b/pkgs/by-name/gi/gitlab-ci-local/package.nix
index 639d18343f28e..40466b99d2da0 100644
--- a/pkgs/by-name/gi/gitlab-ci-local/package.nix
+++ b/pkgs/by-name/gi/gitlab-ci-local/package.nix
@@ -27,6 +27,7 @@ buildNpmPackage rec {
 
   meta = with lib;{
     description = "Run gitlab pipelines locally as shell executor or docker executor";
+    mainProgram = "gitlab-ci-local";
     longDescription = ''
       Tired of pushing to test your .gitlab-ci.yml?
       Run gitlab pipelines locally as shell executor or docker executor.
diff --git a/pkgs/by-name/gm/gmic/package.nix b/pkgs/by-name/gm/gmic/package.nix
index 6efd3154d88ea..70c5a29d737f7 100644
--- a/pkgs/by-name/gm/gmic/package.nix
+++ b/pkgs/by-name/gm/gmic/package.nix
@@ -111,6 +111,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://gmic.eu/";
     description = "Open and full-featured framework for image processing";
+    mainProgram = "gmic";
     license = lib.licenses.cecill21;
     maintainers = [
       lib.maintainers.AndersonTorres
diff --git a/pkgs/by-name/go/gosmore/package.nix b/pkgs/by-name/go/gosmore/package.nix
index 2bc778ff9cb29..daa5553d0c0ae 100644
--- a/pkgs/by-name/go/gosmore/package.nix
+++ b/pkgs/by-name/go/gosmore/package.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Open Street Map viewer";
+    mainProgram = "gosmore";
     homepage = "https://sourceforge.net/projects/gosmore/";
     maintainers = with maintainers; [
       raskin
diff --git a/pkgs/by-name/gr/grun/package.nix b/pkgs/by-name/gr/grun/package.nix
index aef41add611de..54b6a5715ddbb 100644
--- a/pkgs/by-name/gr/grun/package.nix
+++ b/pkgs/by-name/gr/grun/package.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "An application launcher written in C and using GTK for the interface";
+    mainProgram = "grun";
     homepage = "https://github.com/lrgc/grun";
     platforms = lib.platforms.linux;
     license = with lib.licenses; [ gpl2Only ];
diff --git a/pkgs/by-name/gt/gtimelog/package.nix b/pkgs/by-name/gt/gtimelog/package.nix
index 05a0c7e3dd99b..1385751329452 100644
--- a/pkgs/by-name/gt/gtimelog/package.nix
+++ b/pkgs/by-name/gt/gtimelog/package.nix
@@ -45,6 +45,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "A time tracking app";
+    mainProgram = "gtimelog";
     longDescription = ''
       GTimeLog is a small time tracking application for GNOME.
       It's main goal is to be as unintrusive as possible.
diff --git a/pkgs/by-name/ha/haunt/package.nix b/pkgs/by-name/ha/haunt/package.nix
index 989fce392b284..d15fd5e95726f 100644
--- a/pkgs/by-name/ha/haunt/package.nix
+++ b/pkgs/by-name/ha/haunt/package.nix
@@ -66,6 +66,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://dthompson.us/projects/haunt.html";
     description = "Guile-based static site generator";
+    mainProgram = "haunt";
     longDescription = ''
       Haunt is a simple, functional, hackable static site generator that gives
       authors the ability to treat websites as Scheme programs.
diff --git a/pkgs/by-name/he/helix-gpt/package.nix b/pkgs/by-name/he/helix-gpt/package.nix
index 6e77d5e8a8d42..d95c9689f1f79 100644
--- a/pkgs/by-name/he/helix-gpt/package.nix
+++ b/pkgs/by-name/he/helix-gpt/package.nix
@@ -56,6 +56,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://github.com/leona/helix-gpt";
     description = "Code completion LSP for Helix with support for Copilot + OpenAI";
+    mainProgram = "helix-gpt";
     maintainers = with maintainers; [ happysalada ];
     license = with licenses; [ mit ];
     platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
diff --git a/pkgs/by-name/ho/hoppscotch/package.nix b/pkgs/by-name/ho/hoppscotch/package.nix
index 3e6bf1ac190ca..e7d1dbdc274b7 100644
--- a/pkgs/by-name/ho/hoppscotch/package.nix
+++ b/pkgs/by-name/ho/hoppscotch/package.nix
@@ -27,6 +27,7 @@ let
 
   meta = {
     description = "Open source API development ecosystem";
+    mainProgram = "hoppscotch";
     homepage = "https://hoppscotch.com";
     changelog = "https://github.com/hoppscotch/hoppscotch/releases/tag/${version}";
     platforms = [ "aarch64-darwin" "x86_64-darwin" "x86_64-linux" ];
diff --git a/pkgs/by-name/if/ifrextractor-rs/package.nix b/pkgs/by-name/if/ifrextractor-rs/package.nix
index 48ab01d352fa1..2d525771d85fa 100644
--- a/pkgs/by-name/if/ifrextractor-rs/package.nix
+++ b/pkgs/by-name/if/ifrextractor-rs/package.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Rust utility to extract UEFI IFR data into human-readable text";
+    mainProgram = "ifrextractor";
     homepage = "https://github.com/LongSoft/IFRExtractor-RS";
     license = licenses.bsd2;
     maintainers = with maintainers; [ jiegec ];
diff --git a/pkgs/by-name/ig/igir/package.nix b/pkgs/by-name/ig/igir/package.nix
index cf1881f7c3960..892b184146303 100644
--- a/pkgs/by-name/ig/igir/package.nix
+++ b/pkgs/by-name/ig/igir/package.nix
@@ -36,6 +36,7 @@ buildNpmPackage rec {
 
   meta = with lib; {
     description = "A video game ROM collection manager to help filter, sort, patch, archive, and report on collections on any OS";
+    mainProgram = "igir";
     homepage = "https://igir.io";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ TheBrainScrambler ];
diff --git a/pkgs/by-name/ku/kubectl-neat/package.nix b/pkgs/by-name/ku/kubectl-neat/package.nix
index c0ce31abb9261..82ba45377ac45 100644
--- a/pkgs/by-name/ku/kubectl-neat/package.nix
+++ b/pkgs/by-name/ku/kubectl-neat/package.nix
@@ -21,6 +21,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Clean up Kubernetes yaml and json output to make it readable";
+    mainProgram = "kubectl-neat";
     homepage = "https://github.com/itaysk/kubectl-neat";
     changelog = "https://github.com/itaysk/kubectl-neat/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/by-name/le/ledger/package.nix b/pkgs/by-name/le/ledger/package.nix
index 2e8336660be7b..89a614247ff9e 100644
--- a/pkgs/by-name/le/ledger/package.nix
+++ b/pkgs/by-name/le/ledger/package.nix
@@ -46,6 +46,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A double-entry accounting system with a command-line reporting interface";
+    mainProgram = "ledger";
     homepage = "https://www.ledger-cli.org/";
     changelog = "https://github.com/ledger/ledger/raw/v${version}/NEWS.md";
     license = licenses.bsd3;
diff --git a/pkgs/by-name/le/lemminx/package.nix b/pkgs/by-name/le/lemminx/package.nix
index df946d3b4dea4..e4c17d6e2daff 100644
--- a/pkgs/by-name/le/lemminx/package.nix
+++ b/pkgs/by-name/le/lemminx/package.nix
@@ -98,6 +98,7 @@ maven.buildMavenPackage rec {
 
   meta = with lib; {
     description = "XML Language Server";
+    mainProgram = "lemminx";
     homepage = "https://github.com/eclipse/lemminx";
     license = licenses.epl20;
     maintainers = with maintainers; [ tricktron ];
diff --git a/pkgs/by-name/li/libbgcode/package.nix b/pkgs/by-name/li/libbgcode/package.nix
index 6a28df1dce616..c2ddb4f6ddf4c 100644
--- a/pkgs/by-name/li/libbgcode/package.nix
+++ b/pkgs/by-name/li/libbgcode/package.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://github.com/prusa3d/libbgcode";
     description = "Prusa Block & Binary G-code reader / writer / converter";
+    mainProgram = "bgcode";
     license = licenses.agpl3Only;
     maintainers = with maintainers; [ lach ];
     platforms = platforms.unix;
diff --git a/pkgs/by-name/li/libcpuid/package.nix b/pkgs/by-name/li/libcpuid/package.nix
index 56df13aabd2af..7e63d25a53f36 100644
--- a/pkgs/by-name/li/libcpuid/package.nix
+++ b/pkgs/by-name/li/libcpuid/package.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://libcpuid.sourceforge.net/";
     description = "A small C library for x86 CPU detection and feature extraction";
+    mainProgram = "cpuid_tool";
     changelog = "https://raw.githubusercontent.com/anrieff/libcpuid/master/ChangeLog";
     license = licenses.bsd2;
     maintainers = with maintainers; [ orivej artuuge ];
diff --git a/pkgs/by-name/li/linien-gui/package.nix b/pkgs/by-name/li/linien-gui/package.nix
index 972070afc3aca..dd9ca7e4ca583 100644
--- a/pkgs/by-name/li/linien-gui/package.nix
+++ b/pkgs/by-name/li/linien-gui/package.nix
@@ -40,6 +40,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Graphical user interface of the Linien spectroscopy lock application";
+    mainProgram = "linien";
     homepage = "https://github.com/linien-org/linien/tree/develop/linien-gui";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ fsagbuya doronbehar ];
diff --git a/pkgs/by-name/li/listmonk/package.nix b/pkgs/by-name/li/listmonk/package.nix
index 3ac3522a861e4..6e652d280c401 100644
--- a/pkgs/by-name/li/listmonk/package.nix
+++ b/pkgs/by-name/li/listmonk/package.nix
@@ -48,6 +48,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "High performance, self-hosted, newsletter and mailing list manager with a modern dashboard.";
+    mainProgram = "listmonk";
     homepage = "https://github.com/knadh/listmonk";
     changelog = "https://github.com/knadh/listmonk/releases/tag/v${version}";
     maintainers = with maintainers; [ raitobezarius ];
diff --git a/pkgs/by-name/ln/lngen/package.nix b/pkgs/by-name/ln/lngen/package.nix
index 1b06a5b1966bf..d84e3556cd5e8 100644
--- a/pkgs/by-name/ln/lngen/package.nix
+++ b/pkgs/by-name/ln/lngen/package.nix
@@ -20,4 +20,5 @@ haskellPackages.mkDerivation {
   description = "Tool for generating Locally Nameless definitions and proofs in Coq, working together with Ott";
   maintainers = with lib.maintainers; [ chen ];
   license = lib.licenses.mit;
+  mainProgram = "lngen";
 }
diff --git a/pkgs/by-name/lo/logiops/package.nix b/pkgs/by-name/lo/logiops/package.nix
index e8cb020a32c53..fea73c79268b5 100644
--- a/pkgs/by-name/lo/logiops/package.nix
+++ b/pkgs/by-name/lo/logiops/package.nix
@@ -48,6 +48,7 @@ stdenv.mkDerivation (oldAttrs: {
 
   meta = with lib; {
     description = "Unofficial userspace driver for HID++ Logitech devices";
+    mainProgram = "logid";
     homepage = "https://github.com/PixlOne/logiops";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ckie ];
diff --git a/pkgs/by-name/lo/logiops_0_2_3/package.nix b/pkgs/by-name/lo/logiops_0_2_3/package.nix
index 71283a406214e..f2a9c5be1589c 100644
--- a/pkgs/by-name/lo/logiops_0_2_3/package.nix
+++ b/pkgs/by-name/lo/logiops_0_2_3/package.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Unofficial userspace driver for HID++ Logitech devices";
+    mainProgram = "logid";
     homepage = "https://github.com/PixlOne/logiops";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ ckie ];
diff --git a/pkgs/by-name/lo/loksh/package.nix b/pkgs/by-name/lo/loksh/package.nix
index 4ba926aa2f53f..01143fae7b525 100644
--- a/pkgs/by-name/lo/loksh/package.nix
+++ b/pkgs/by-name/lo/loksh/package.nix
@@ -48,6 +48,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://github.com/dimkr/loksh";
     description = "Linux port of OpenBSD's ksh";
+    mainProgram = "loksh";
     longDescription = ''
       loksh is a Linux port of OpenBSD's ksh.
 
diff --git a/pkgs/by-name/lo/loramon/package.nix b/pkgs/by-name/lo/loramon/package.nix
index 9d0161dff2cd2..9665026ff5118 100644
--- a/pkgs/by-name/lo/loramon/package.nix
+++ b/pkgs/by-name/lo/loramon/package.nix
@@ -25,6 +25,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "LoRa packet sniffer for RNode hardware";
+    mainProgram = "loramon";
     homepage = "https://github.com/markqvist/LoRaMon";
     changelog = "https://github.com/markqvist/LoRaMon/releases/tag/${version}";
     license = licenses.mit;
diff --git a/pkgs/by-name/lp/lprint/package.nix b/pkgs/by-name/lp/lprint/package.nix
index 4d597df1d4818..26167ccb0d6c8 100644
--- a/pkgs/by-name/lp/lprint/package.nix
+++ b/pkgs/by-name/lp/lprint/package.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "LPrint implements printing for a variety of common label and receipt printers connected via network or USB.";
+    mainProgram = "lprint";
     homepage = "https://github.com/michaelrsweet/lprint";
     license = licenses.asl20;
     platforms = platforms.linux;
diff --git a/pkgs/by-name/lz/lzsa/package.nix b/pkgs/by-name/lz/lzsa/package.nix
index e0ddc158706ea..a8b1b5e05f668 100644
--- a/pkgs/by-name/lz/lzsa/package.nix
+++ b/pkgs/by-name/lz/lzsa/package.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://github.com/emmanuel-marty/lzsa";
     description = "Byte-aligned, efficient lossless packer that is optimized for fast decompression on 8-bit micros";
+    mainProgram = "lzsa";
     license = with lib.licenses; [ cc0 ];
     maintainers = with lib.maintainers; [ AndersonTorres ];
     platforms = lib.platforms.unix;
diff --git a/pkgs/by-name/ma/matrix-hook/package.nix b/pkgs/by-name/ma/matrix-hook/package.nix
index ed9093da99574..c492217f00c35 100644
--- a/pkgs/by-name/ma/matrix-hook/package.nix
+++ b/pkgs/by-name/ma/matrix-hook/package.nix
@@ -16,6 +16,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A simple webhook for matrix";
+    mainProgram = "matrix-hook";
     homepage = "https://github.com/pinpox/matrix-hook";
     license = licenses.gpl3;
     maintainers = with maintainers; [ pinpox mic92 zowoq ];
diff --git a/pkgs/by-name/mc/mcomix/package.nix b/pkgs/by-name/mc/mcomix/package.nix
index bf087c94a0d8f..170386de3e4c0 100644
--- a/pkgs/by-name/mc/mcomix/package.nix
+++ b/pkgs/by-name/mc/mcomix/package.nix
@@ -68,6 +68,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Comic book reader and image viewer";
+    mainProgram = "mcomix";
     longDescription = ''
       User-friendly, customizable image viewer, specifically designed to handle
       comic books and manga supporting a variety of container formats
diff --git a/pkgs/by-name/me/meson/package.nix b/pkgs/by-name/me/meson/package.nix
index 4bf3a3a7d5514..04064b4255c6e 100644
--- a/pkgs/by-name/me/meson/package.nix
+++ b/pkgs/by-name/me/meson/package.nix
@@ -141,6 +141,7 @@ python3.pkgs.buildPythonApplication rec {
   meta = {
     homepage = "https://mesonbuild.com";
     description = "An open source, fast and friendly build system made in Python";
+    mainProgram = "meson";
     longDescription = ''
       Meson is an open source build system meant to be both extremely fast, and,
       even more importantly, as user friendly as possible.
diff --git a/pkgs/by-name/mf/mfoc-hardnested/package.nix b/pkgs/by-name/mf/mfoc-hardnested/package.nix
index 550d3a5c46677..672db4d21c1a0 100644
--- a/pkgs/by-name/mf/mfoc-hardnested/package.nix
+++ b/pkgs/by-name/mf/mfoc-hardnested/package.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "A fork of mfoc integrating hardnested code from the proxmark";
+    mainProgram = "mfoc-hardnested";
     license = licenses.gpl2;
     homepage = "https://github.com/nfc-tools/mfoc-hardnested";
     maintainers = with maintainers; [ azuwis ];
diff --git a/pkgs/by-name/mk/mksh/package.nix b/pkgs/by-name/mk/mksh/package.nix
index 27cee1d4e2266..2572e378ddf45 100644
--- a/pkgs/by-name/mk/mksh/package.nix
+++ b/pkgs/by-name/mk/mksh/package.nix
@@ -45,6 +45,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "http://www.mirbsd.org/mksh.htm";
     description = "MirBSD Korn Shell";
+    mainProgram = "mksh";
     longDescription = ''
       The MirBSD Korn Shell is a DFSG-free and OSD-compliant (and OSI
       approved) successor to pdksh, developed as part of the MirOS
diff --git a/pkgs/by-name/mo/mosdepth/package.nix b/pkgs/by-name/mo/mosdepth/package.nix
index 7c74901bc6ff7..2a2bce1255303 100644
--- a/pkgs/by-name/mo/mosdepth/package.nix
+++ b/pkgs/by-name/mo/mosdepth/package.nix
@@ -25,6 +25,7 @@ buildNimPackage (finalAttrs: {
 
   meta = with lib; {
     description = "fast BAM/CRAM depth calculation for WGS, exome, or targeted sequencing";
+    mainProgram = "mosdepth";
     license = licenses.mit;
     homepage = "https://github.com/brentp/mosdepth";
     maintainers = with maintainers; [ jbedo ];
diff --git a/pkgs/by-name/mo/move-mount-beneath/package.nix b/pkgs/by-name/mo/move-mount-beneath/package.nix
index 2e2e058eec977..be04c80a1b702 100644
--- a/pkgs/by-name/mo/move-mount-beneath/package.nix
+++ b/pkgs/by-name/mo/move-mount-beneath/package.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Toy binary to illustrate adding a mount beneath an existing mount";
+    mainProgram = "move-mount";
     homepage = "https://github.com/brauner/move-mount-beneath";
     license = lib.licenses.mit0;
     maintainers = with lib.maintainers; [ nikstur ];
diff --git a/pkgs/by-name/ms/msolve/package.nix b/pkgs/by-name/ms/msolve/package.nix
index 3a8fe18b063c8..cf06aba555951 100644
--- a/pkgs/by-name/ms/msolve/package.nix
+++ b/pkgs/by-name/ms/msolve/package.nix
@@ -36,6 +36,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Library for polynomial system solving through algebraic methods";
+    mainProgram = "msolve";
     homepage = "https://msolve.lip6.fr";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ wegank ];
diff --git a/pkgs/by-name/n2/n2/package.nix b/pkgs/by-name/n2/n2/package.nix
index dd35f134d8a16..4e88285c3e0f1 100644
--- a/pkgs/by-name/n2/n2/package.nix
+++ b/pkgs/by-name/n2/n2/package.nix
@@ -19,6 +19,7 @@ rustPlatform.buildRustPackage {
   meta = with lib; {
     homepage = "https://github.com/evmar/n2";
     description = "A ninja compatible build system";
+    mainProgram = "n2";
     license = licenses.asl20;
     maintainers = with maintainers; [ fgaz ];
     platforms = platforms.all;
diff --git a/pkgs/by-name/na/narsil/package.nix b/pkgs/by-name/na/narsil/package.nix
index ac00cf4820552..9e6d3ba1dc025 100644
--- a/pkgs/by-name/na/narsil/package.nix
+++ b/pkgs/by-name/na/narsil/package.nix
@@ -41,6 +41,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/NickMcConnell/NarSil/";
     description = "Unofficial rewrite of Sil, a roguelike influenced by Angband";
+    mainProgram = "narsil";
     longDescription = ''
       NarSil attempts to be an almost-faithful recreation of Sil 1.3.0,
       but based on the codebase of modern Angband.
diff --git a/pkgs/by-name/nb/nbtscan/package.nix b/pkgs/by-name/nb/nbtscan/package.nix
index 27194abcf5ce8..9d9e0b3afbe67 100644
--- a/pkgs/by-name/nb/nbtscan/package.nix
+++ b/pkgs/by-name/nb/nbtscan/package.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Scan networks searching for NetBIOS information";
+    mainProgram = "nbtscan";
     homepage = "https://github.com/resurrecting-open-source-projects/nbtscan";
     maintainers = with maintainers; [ d3vil0p3r ];
     platforms = platforms.unix;
diff --git a/pkgs/by-name/nc/nc4nix/package.nix b/pkgs/by-name/nc/nc4nix/package.nix
index 4593e82f24ae9..4269d235ea262 100644
--- a/pkgs/by-name/nc/nc4nix/package.nix
+++ b/pkgs/by-name/nc/nc4nix/package.nix
@@ -18,6 +18,7 @@ buildGoModule {
 
   meta = with lib; {
     description = "Packaging helper for Nextcloud apps";
+    mainProgram = "nc4nix";
     homepage = "https://github.com/helsinki-systems/nc4nix";
     license = licenses.mit;
     maintainers = with maintainers; [ onny ];
diff --git a/pkgs/by-name/ne/netclient/package.nix b/pkgs/by-name/ne/netclient/package.nix
index 2a914d03ca8e8..dc00b6856cabb 100644
--- a/pkgs/by-name/ne/netclient/package.nix
+++ b/pkgs/by-name/ne/netclient/package.nix
@@ -26,6 +26,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Automated WireGuard® Management Client";
+    mainProgram = "netclient";
     homepage = "https://netmaker.io";
     changelog = "https://github.com/gravitl/netclient/releases/tag/v${version}";
     license = licenses.asl20;
diff --git a/pkgs/by-name/ne/netproxrc/package.nix b/pkgs/by-name/ne/netproxrc/package.nix
index 4f3de9cc073fc..93f965e40c6af 100644
--- a/pkgs/by-name/ne/netproxrc/package.nix
+++ b/pkgs/by-name/ne/netproxrc/package.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A HTTP proxy injecting credentials from a .netrc file";
+    mainProgram = "netproxrc";
     homepage = "https://github.com/timbertson/netproxrc";
     license = licenses.mit;
     maintainers = with maintainers; [ timbertson ];
diff --git a/pkgs/by-name/ni/nim-atlas/package.nix b/pkgs/by-name/ni/nim-atlas/package.nix
index 70b36698a72b9..7f01fab5876d9 100644
--- a/pkgs/by-name/ni/nim-atlas/package.nix
+++ b/pkgs/by-name/ni/nim-atlas/package.nix
@@ -16,6 +16,7 @@ buildNimPackage (final: prev: {
   doCheck = false; # tests will clone repos
   meta = final.src.meta // {
     description = "Nim package cloner";
+    mainProgram = "atlas";
     license = [ lib.licenses.mit ];
   };
 })
diff --git a/pkgs/by-name/ni/nim_builder/package.nix b/pkgs/by-name/ni/nim_builder/package.nix
index 34da4dfa61a07..50fa519b7a927 100644
--- a/pkgs/by-name/ni/nim_builder/package.nix
+++ b/pkgs/by-name/ni/nim_builder/package.nix
@@ -14,6 +14,7 @@ stdenv.mkDerivation {
   '';
   meta = {
     description = "Internal Nixpkgs utility for buildNimPackage.";
+    mainProgram = "nim_builder";
     maintainers = [ lib.maintainers.ehmry ];
   };
 }
diff --git a/pkgs/by-name/ni/nimmm/package.nix b/pkgs/by-name/ni/nimmm/package.nix
index be3e01b7dcaeb..266c29883a8d3 100644
--- a/pkgs/by-name/ni/nimmm/package.nix
+++ b/pkgs/by-name/ni/nimmm/package.nix
@@ -17,6 +17,7 @@ buildNimPackage (finalAttrs: {
 
   meta = {
     description = "Terminal file manager written in Nim";
+    mainProgram = "nimmm";
     homepage = "https://github.com/joachimschmidt557/nimmm";
     license = lib.licenses.gpl3;
     platforms = lib.platforms.linux;
diff --git a/pkgs/by-name/ni/nixops-dns/package.nix b/pkgs/by-name/ni/nixops-dns/package.nix
index 624b6a0ae5172..f1a6cacfe1218 100644
--- a/pkgs/by-name/ni/nixops-dns/package.nix
+++ b/pkgs/by-name/ni/nixops-dns/package.nix
@@ -20,6 +20,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/museoa/nixops-dns";
     description = "DNS server for resolving NixOps machines";
+    mainProgram = "nixops-dns";
     license = licenses.mit;
     maintainers = with maintainers; [ kamilchm sorki ];
   };
diff --git a/pkgs/by-name/nl/nls/package.nix b/pkgs/by-name/nl/nls/package.nix
index d060207f7af3f..136920367da28 100644
--- a/pkgs/by-name/nl/nls/package.nix
+++ b/pkgs/by-name/nl/nls/package.nix
@@ -12,6 +12,7 @@ symlinkJoin {
   meta = {
     inherit (nickel.meta) homepage changelog license maintainers;
     description = "A language server for the Nickel programming language";
+    mainProgram = "nls";
     longDescription = ''
       The Nickel Language Server (NLS) is a language server for the Nickel
       programming language. NLS offers error messages, type hints, and
diff --git a/pkgs/by-name/nr/nrpl/package.nix b/pkgs/by-name/nr/nrpl/package.nix
index 31ed20246e678..c75fe1d5a512d 100644
--- a/pkgs/by-name/nr/nrpl/package.nix
+++ b/pkgs/by-name/nr/nrpl/package.nix
@@ -31,6 +31,7 @@ buildNimPackage {
 
   meta = with lib; {
     description = "REPL for the Nim programming language";
+    mainProgram = "nrpl";
     homepage = "https://github.com/wheineman/nrpl";
     license = licenses.mit;
     maintainers = with maintainers; [ peterhoeg ];
diff --git a/pkgs/by-name/ns/nsxiv/package.nix b/pkgs/by-name/ns/nsxiv/package.nix
index 4e3229b77d2e8..ba267571a9004 100644
--- a/pkgs/by-name/ns/nsxiv/package.nix
+++ b/pkgs/by-name/ns/nsxiv/package.nix
@@ -47,6 +47,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://nsxiv.codeberg.page/";
     description = "New Suckless X Image Viewer";
+    mainProgram = "nsxiv";
     longDescription = ''
       nsxiv is a fork of now unmaintained sxiv with the purpose of being a
       drop-in replacement of sxiv, maintaining it and adding simple, sensible
diff --git a/pkgs/by-name/nu/nuget/package.nix b/pkgs/by-name/nu/nuget/package.nix
index 6bf41690a2ead..664dd7b4e390a 100644
--- a/pkgs/by-name/nu/nuget/package.nix
+++ b/pkgs/by-name/nu/nuget/package.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation (attrs: {
 
   meta = with lib; {
     description = "A package manager for the .NET platform";
+    mainProgram = "nuget";
     homepage = "https://www.mono-project.com/";
     longDescription = ''
       NuGet is the package manager for the .NET platform.
diff --git a/pkgs/by-name/oa/oauth2ms/package.nix b/pkgs/by-name/oa/oauth2ms/package.nix
index b32ea14d3a9f1..0a4787bacd7d4 100644
--- a/pkgs/by-name/oa/oauth2ms/package.nix
+++ b/pkgs/by-name/oa/oauth2ms/package.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://github.com/harishkrupo/oauth2ms";
     description = "XOAUTH2 compatible Office365 token fetcher";
+    mainProgram = "oauth2ms";
     platforms = platforms.all;
     license = licenses.asl20;
     maintainers = with maintainers; [ wentasah ];
diff --git a/pkgs/by-name/oc/octorpki/package.nix b/pkgs/by-name/oc/octorpki/package.nix
index 87a8498d28a68..1f710d134228e 100644
--- a/pkgs/by-name/oc/octorpki/package.nix
+++ b/pkgs/by-name/oc/octorpki/package.nix
@@ -43,6 +43,7 @@ buildGoModule rec {
     homepage = "https://github.com/cloudflare/cfrpki#octorpki";
     changelog = "https://github.com/cloudflare/cfrpki/releases/tag/v${version}";
     description = "A software used to download RPKI (RFC 6480) certificates and validate them";
+    mainProgram = "octorpki";
     license = licenses.bsd3;
     platforms = platforms.all;
     maintainers = teams.wdz.members;
diff --git a/pkgs/by-name/oe/oelint-adv/package.nix b/pkgs/by-name/oe/oelint-adv/package.nix
index 32215b708f98e..cc1de202d70d7 100644
--- a/pkgs/by-name/oe/oelint-adv/package.nix
+++ b/pkgs/by-name/oe/oelint-adv/package.nix
@@ -32,6 +32,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Advanced bitbake-recipe linter";
+    mainProgram = "oelint-adv";
     homepage = "https://github.com/priv-kweihmann/oelint-adv";
     changelog = "https://github.com/priv-kweihmann/oelint-adv/releases/tag/v${version}";
     license = licenses.bsd2;
diff --git a/pkgs/by-name/on/onedrivegui/package.nix b/pkgs/by-name/on/onedrivegui/package.nix
index f9d1fca67539f..f0a7eb7b75947 100644
--- a/pkgs/by-name/on/onedrivegui/package.nix
+++ b/pkgs/by-name/on/onedrivegui/package.nix
@@ -80,6 +80,7 @@ python3Packages.buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/bpozdena/OneDriveGUI";
     description = "A simple GUI for Linux OneDrive Client, with multi-account support";
+    mainProgram = "onedrivegui";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ chewblacka ];
     platforms = platforms.linux;
diff --git a/pkgs/by-name/on/onlyoffice-bin_latest/package.nix b/pkgs/by-name/on/onlyoffice-bin_latest/package.nix
index b73d179e341dc..4f3aaea95f24e 100644
--- a/pkgs/by-name/on/onlyoffice-bin_latest/package.nix
+++ b/pkgs/by-name/on/onlyoffice-bin_latest/package.nix
@@ -187,6 +187,7 @@ buildFHSEnv {
 
   meta = with lib; {
     description = "Office suite that combines text, spreadsheet and presentation editors allowing to create, view and edit local documents";
+    mainProgram = "onlyoffice-desktopeditors";
     longDescription = ''
       This version is broken on wlroots environments (e.g. Hyprland, Sway).
       If you are using one of these environments, please use `onlyoffice-bin` instead.
diff --git a/pkgs/by-name/op/opengist/package.nix b/pkgs/by-name/op/opengist/package.nix
index fb9efcd7b0766..053c088a69904 100644
--- a/pkgs/by-name/op/opengist/package.nix
+++ b/pkgs/by-name/op/opengist/package.nix
@@ -62,6 +62,7 @@ buildGoModule {
 
   meta = {
     description = "Self-hosted pastebin powered by Git";
+    mainProgram = "opengist";
     homepage = "https://github.com/thomiceli/opengist";
     license = lib.licenses.agpl3Only;
     maintainers = with lib.maintainers; [ lf- ];
diff --git a/pkgs/by-name/op/opensnitch-ui/package.nix b/pkgs/by-name/op/opensnitch-ui/package.nix
index c8aef3a05123f..a22767daacdc2 100644
--- a/pkgs/by-name/op/opensnitch-ui/package.nix
+++ b/pkgs/by-name/op/opensnitch-ui/package.nix
@@ -67,6 +67,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "An application firewall";
+    mainProgram = "opensnitch-ui";
     homepage = "https://github.com/evilsocket/opensnitch/wiki";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ onny ];
diff --git a/pkgs/by-name/op/opensnitch/package.nix b/pkgs/by-name/op/opensnitch/package.nix
index 1ba7f6e65dc44..df8647bdeb054 100644
--- a/pkgs/by-name/op/opensnitch/package.nix
+++ b/pkgs/by-name/op/opensnitch/package.nix
@@ -92,6 +92,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "An application firewall";
+    mainProgram = "opensnitchd";
     homepage = "https://github.com/evilsocket/opensnitch/wiki";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ onny ];
diff --git a/pkgs/by-name/pa/passes/package.nix b/pkgs/by-name/pa/passes/package.nix
index 39a502038b527..e7abf9d95f009 100644
--- a/pkgs/by-name/pa/passes/package.nix
+++ b/pkgs/by-name/pa/passes/package.nix
@@ -58,6 +58,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "A digital pass manager";
+    mainProgram = "passes";
     homepage = "https://github.com/pablo-s/passes";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ fgaz ];
diff --git a/pkgs/by-name/pa/payme/package.nix b/pkgs/by-name/pa/payme/package.nix
index 3272fad5d350e..96b973e6f4d2b 100644
--- a/pkgs/by-name/pa/payme/package.nix
+++ b/pkgs/by-name/pa/payme/package.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = {
     description = "QR code generator (ASCII & PNG) for SEPA payments";
+    mainProgram = "payme";
     homepage = "https://github.com/jovandeginste/payme";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ cimm ];
diff --git a/pkgs/by-name/pd/pdfannots2json/package.nix b/pkgs/by-name/pd/pdfannots2json/package.nix
index 01c30fe1fb523..15d2103893fcb 100644
--- a/pkgs/by-name/pd/pdfannots2json/package.nix
+++ b/pkgs/by-name/pd/pdfannots2json/package.nix
@@ -20,6 +20,7 @@ in
       homepage = "https://github.com/mgmeyers/pdfannots2json";
       license = licenses.agpl3;
       description = "A tool to convert PDF annotations to JSON";
+      mainProgram = "pdfannots2json";
       maintainers = with maintainers; [ _0nyr ];
     };
   }
diff --git a/pkgs/by-name/pe/peergos/package.nix b/pkgs/by-name/pe/peergos/package.nix
index d51f0504bd492..f91c8ea786185 100644
--- a/pkgs/by-name/pe/peergos/package.nix
+++ b/pkgs/by-name/pe/peergos/package.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A p2p, secure file storage, social network and application protocol";
+    mainProgram = "peergos";
     homepage = "https://peergos.org/";
     # peergos have agpt3 license, peergos-web-ui have gpl3, both are used
     license = [ licenses.agpl3Only licenses.gpl3Only ];
diff --git a/pkgs/by-name/pi/pianotrans/package.nix b/pkgs/by-name/pi/pianotrans/package.nix
index 1c493bc87c685..d36fffb0c990e 100644
--- a/pkgs/by-name/pi/pianotrans/package.nix
+++ b/pkgs/by-name/pi/pianotrans/package.nix
@@ -32,6 +32,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Simple GUI for ByteDance's Piano Transcription with Pedals";
+    mainProgram = "pianotrans";
     homepage = "https://github.com/azuwis/pianotrans";
     license = licenses.mit;
     maintainers = with maintainers; [ azuwis ];
diff --git a/pkgs/by-name/pl/plumber/package.nix b/pkgs/by-name/pl/plumber/package.nix
index 77678a2f52296..760eea36573ae 100644
--- a/pkgs/by-name/pl/plumber/package.nix
+++ b/pkgs/by-name/pl/plumber/package.nix
@@ -28,6 +28,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A CLI devtool for interacting with data in message systems like Kafka, RabbitMQ, GCP PubSub and more";
+    mainProgram = "plumber";
     homepage = "https://github.com/streamdal/plumber";
     license = licenses.mit;
     maintainers = with maintainers; [ svrana ];
diff --git a/pkgs/by-name/pr/pretalx/package.nix b/pkgs/by-name/pr/pretalx/package.nix
index d353fa6462f57..b600bafa61719 100644
--- a/pkgs/by-name/pr/pretalx/package.nix
+++ b/pkgs/by-name/pr/pretalx/package.nix
@@ -38,6 +38,7 @@ let
 
   meta = with lib; {
     description = "Conference planning tool: CfP, scheduling, speaker management";
+    mainProgram = "pretalx-manage";
     homepage = "https://github.com/pretalx/pretalx";
     changelog = "https://docs.pretalx.org/en/latest/changelog.html";
     license = licenses.asl20;
diff --git a/pkgs/by-name/pr/pretix/package.nix b/pkgs/by-name/pr/pretix/package.nix
index 952da297900f2..dc7fc925f1f53 100644
--- a/pkgs/by-name/pr/pretix/package.nix
+++ b/pkgs/by-name/pr/pretix/package.nix
@@ -247,6 +247,7 @@ python.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Ticketing software that cares about your event—all the way";
+    mainProgram = "pretix-manage";
     homepage = "https://github.com/pretix/pretix";
     license = with licenses; [
       agpl3Only
diff --git a/pkgs/by-name/pr/promptfoo/package.nix b/pkgs/by-name/pr/promptfoo/package.nix
index 4be98d738fcc5..f087bb630c5f0 100644
--- a/pkgs/by-name/pr/promptfoo/package.nix
+++ b/pkgs/by-name/pr/promptfoo/package.nix
@@ -20,6 +20,7 @@ buildNpmPackage rec {
 
   meta = with lib; {
     description = "Test your prompts, models, RAGs. Evaluate and compare LLM outputs, catch regressions, and improve prompt quality.";
+    mainProgram = "promptfoo";
     homepage = "https://www.promptfoo.dev/";
     changelog = "https://github.com/promptfoo/promptfoo/releases/tag/${version}";
     license = licenses.mit;
diff --git a/pkgs/by-name/pr/protoc-gen-js/package.nix b/pkgs/by-name/pr/protoc-gen-js/package.nix
index 21cd426388f82..e9e8207b3cc99 100644
--- a/pkgs/by-name/pr/protoc-gen-js/package.nix
+++ b/pkgs/by-name/pr/protoc-gen-js/package.nix
@@ -28,6 +28,7 @@ buildBazelPackage rec {
 
   meta = with lib; {
     description = "Protobuf plugin for generating JavaScript code";
+    mainProgram = "protoc-gen-js";
     homepage = "https://github.com/protocolbuffers/protobuf-javascript";
     platforms = platforms.linux ++ platforms.darwin;
     license = with licenses; [ asl20 bsd3 ];
diff --git a/pkgs/by-name/pr/prox/package.nix b/pkgs/by-name/pr/prox/package.nix
index 7c49551423f7e..6f432de3ec72d 100644
--- a/pkgs/by-name/pr/prox/package.nix
+++ b/pkgs/by-name/pr/prox/package.nix
@@ -25,6 +25,7 @@ buildGoModule rec {
   meta = with lib; {
     homepage = "https://github.com/fgrosse/prox";
     description = "A process runner for Procfile-based applications ";
+    mainProgram = "prox";
     license = licenses.bsd2;
     maintainers = with maintainers; [ lucperkins ];
   };
diff --git a/pkgs/by-name/pt/ptcollab/package.nix b/pkgs/by-name/pt/ptcollab/package.nix
index f03d89e7c490f..d2db8def2ab8a 100644
--- a/pkgs/by-name/pt/ptcollab/package.nix
+++ b/pkgs/by-name/pt/ptcollab/package.nix
@@ -52,6 +52,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Experimental pxtone editor where you can collaborate with friends";
+    mainProgram = "ptcollab";
     homepage = "https://yuxshao.github.io/ptcollab/";
     changelog = "https://github.com/yuxshao/ptcollab/releases/tag/v${finalAttrs.version}";
     license = licenses.mit;
diff --git a/pkgs/by-name/qg/qgrep/package.nix b/pkgs/by-name/qg/qgrep/package.nix
index 57f7d0088d658..57c3d20db2836 100644
--- a/pkgs/by-name/qg/qgrep/package.nix
+++ b/pkgs/by-name/qg/qgrep/package.nix
@@ -45,6 +45,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Fast regular expression grep for source code with incremental index updates";
+    mainProgram = "qgrep";
     homepage = "https://github.com/zeux/qgrep";
     license = licenses.mit;
     maintainers = [ maintainers.yrashk ];
diff --git a/pkgs/by-name/re/regols/package.nix b/pkgs/by-name/re/regols/package.nix
index 3b62c387d40f8..64515e5ed72ed 100644
--- a/pkgs/by-name/re/regols/package.nix
+++ b/pkgs/by-name/re/regols/package.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "OPA Rego language server";
+    mainProgram = "regols";
     homepage = "https://github.com/kitagry/regols";
     license = licenses.mit;
     maintainers = with maintainers; [ alias-dev ];
diff --git a/pkgs/by-name/ri/ricochet-refresh/package.nix b/pkgs/by-name/ri/ricochet-refresh/package.nix
index c90c6aabbd927..384932ed7c857 100644
--- a/pkgs/by-name/ri/ricochet-refresh/package.nix
+++ b/pkgs/by-name/ri/ricochet-refresh/package.nix
@@ -55,6 +55,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     description = "Secure chat without DNS or WebPKI";
+    mainProgram = "ricochet-refresh";
     longDescription = ''
       Ricochet Refresh is a peer-to-peer messenger app that uses Tor
       to connect clients.
diff --git a/pkgs/by-name/ri/ripunzip/package.nix b/pkgs/by-name/ri/ripunzip/package.nix
index 3dcdf976fcaae..1942b61f5fb84 100644
--- a/pkgs/by-name/ri/ripunzip/package.nix
+++ b/pkgs/by-name/ri/ripunzip/package.nix
@@ -41,6 +41,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A tool to unzip files in parallel";
+    mainProgram = "ripunzip";
     homepage = "https://github.com/google/ripunzip";
     license = with lib.licenses; [ mit asl20 ];
     maintainers = [ maintainers.lesuisse ];
diff --git a/pkgs/by-name/rs/rs/package.nix b/pkgs/by-name/rs/rs/package.nix
index 141d72dfe077d..1b369eec9b346 100644
--- a/pkgs/by-name/rs/rs/package.nix
+++ b/pkgs/by-name/rs/rs/package.nix
@@ -38,6 +38,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://www.mirbsd.org/htman/i386/man1/rs.htm";
     description = "Reshape a data array from standard input";
+    mainProgram = "rs";
     longDescription = ''
       rs reads the standard input, interpreting each line as a row of blank-
       separated entries in an array, transforms the array according to the op-
diff --git a/pkgs/by-name/rs/rsgain/package.nix b/pkgs/by-name/rs/rsgain/package.nix
index adb2be57332cc..b759b50892d5f 100644
--- a/pkgs/by-name/rs/rsgain/package.nix
+++ b/pkgs/by-name/rs/rsgain/package.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
 
     meta = with lib; {
       description = "A simple, but powerful ReplayGain 2.0 tagging utility";
+      mainProgram = "rsgain";
       homepage = "https://github.com/complexlogic/rsgain";
       changelog = "https://github.com/complexlogic/rsgain/blob/v${version}/CHANGELOG";
       license = licenses.bsd2;
diff --git a/pkgs/by-name/rs/rspamd-trainer/package.nix b/pkgs/by-name/rs/rspamd-trainer/package.nix
index 0479b8f07da40..49dd46d29564f 100644
--- a/pkgs/by-name/rs/rspamd-trainer/package.nix
+++ b/pkgs/by-name/rs/rspamd-trainer/package.nix
@@ -53,6 +53,7 @@ python3Packages.buildPythonApplication {
   meta = {
     homepage = "https://gitlab.com/onlime/rspamd-trainer";
     description = "Grabs messages from a spam mailbox via IMAP and feeds them to Rspamd for training";
+    mainProgram = "rspamd-trainer";
     license = lib.licenses.gpl3Only;
     maintainers = with lib.maintainers; [ onny ];
   };
diff --git a/pkgs/by-name/rs/rst2html5/package.nix b/pkgs/by-name/rs/rst2html5/package.nix
index 61b75130fe1b5..82def912da99f 100644
--- a/pkgs/by-name/rs/rst2html5/package.nix
+++ b/pkgs/by-name/rs/rst2html5/package.nix
@@ -19,6 +19,7 @@ python3Packages.buildPythonPackage rec {
   meta = with lib;{
     homepage = "https://rst2html5.readthedocs.io/en/latest/";
     description = "Converts ReSTructuredText to (X)HTML5";
+    mainProgram = "rst2html5";
     license = licenses.mit;
     maintainers = with maintainers; [ AndersonTorres ];
   };
diff --git a/pkgs/by-name/ru/rusti-cal/package.nix b/pkgs/by-name/ru/rusti-cal/package.nix
index 3dd368e19257e..97b5e107314d5 100644
--- a/pkgs/by-name/ru/rusti-cal/package.nix
+++ b/pkgs/by-name/ru/rusti-cal/package.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Minimal command line calendar, similar to cal";
+    mainProgram = "rusti-cal";
     homepage = "https://github.com/arthurhenrique/rusti-cal";
     license = [ licenses.mit ];
     maintainers = [ maintainers.detegr ];
diff --git a/pkgs/by-name/s3/s3proxy/package.nix b/pkgs/by-name/s3/s3proxy/package.nix
index 86221921cadfc..b2fd1b03a5ab9 100644
--- a/pkgs/by-name/s3/s3proxy/package.nix
+++ b/pkgs/by-name/s3/s3proxy/package.nix
@@ -34,6 +34,7 @@ maven.buildMavenPackage {
 
   meta = with lib; {
     description = "Access other storage backends via the S3 API";
+    mainProgram = "s3proxy";
     homepage = "https://github.com/gaul/s3proxy";
     changelog = "https://github.com/gaul/s3proxy/releases/tag/s3proxy-${version}";
     license = licenses.asl20;
diff --git a/pkgs/by-name/sa/salmon/package.nix b/pkgs/by-name/sa/salmon/package.nix
index e540c50181622..5d65e2698a426 100644
--- a/pkgs/by-name/sa/salmon/package.nix
+++ b/pkgs/by-name/sa/salmon/package.nix
@@ -63,6 +63,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     description =
       "Tool for quantifying the expression of transcripts using RNA-seq data";
+    mainProgram = "salmon";
     longDescription = ''
       Salmon is a tool for quantifying the expression of transcripts
       using RNA-seq data. Salmon uses new algorithms (specifically,
diff --git a/pkgs/by-name/sa/samrewritten/package.nix b/pkgs/by-name/sa/samrewritten/package.nix
index de0c4e9857273..f90c31395f738 100644
--- a/pkgs/by-name/sa/samrewritten/package.nix
+++ b/pkgs/by-name/sa/samrewritten/package.nix
@@ -39,6 +39,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     description = "Steam Achievement Manager For Linux. Rewritten in C++";
+    mainProgram = "samrewritten";
     homepage = "https://github.com/PaulCombal/SamRewritten";
     license = lib.licenses.gpl3Plus;
     maintainers = with lib.maintainers; [ ludovicopiero ];
diff --git a/pkgs/by-name/sc/scalingo/package.nix b/pkgs/by-name/sc/scalingo/package.nix
index 11aa1245ca7e7..38f1a8691c517 100644
--- a/pkgs/by-name/sc/scalingo/package.nix
+++ b/pkgs/by-name/sc/scalingo/package.nix
@@ -23,6 +23,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Command line client for the Scalingo PaaS";
+    mainProgram = "scalingo";
     homepage = "https://doc.scalingo.com/platform/cli/start";
     changelog = "https://github.com/Scalingo/cli/blob/master/CHANGELOG.md";
     license = licenses.bsdOriginal;
diff --git a/pkgs/by-name/sc/scout/package.nix b/pkgs/by-name/sc/scout/package.nix
index 30f3a9fce3c40..4c1a80ff109b2 100644
--- a/pkgs/by-name/sc/scout/package.nix
+++ b/pkgs/by-name/sc/scout/package.nix
@@ -18,6 +18,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Lightweight URL fuzzer and spider: Discover a web server's undisclosed files, directories and VHOSTs";
+    mainProgram = "scout";
     homepage = "https://github.com/liamg/scout";
     platforms = platforms.unix;
     license = licenses.unlicense;
diff --git a/pkgs/by-name/sc/screentest/package.nix b/pkgs/by-name/sc/screentest/package.nix
index d64f3300256f8..8efba0354e5fd 100644
--- a/pkgs/by-name/sc/screentest/package.nix
+++ b/pkgs/by-name/sc/screentest/package.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "A simple screen testing tool";
+    mainProgram = "screentest";
     homepage = "https://github.com/TobiX/screentest";
     changelog = "https://github.com/TobiX/screentest/blob/${finalAttrs.src.rev}/NEWS";
     license = licenses.gpl2Only;
diff --git a/pkgs/by-name/sh/shittier/package.nix b/pkgs/by-name/sh/shittier/package.nix
index e9316063c3bc2..2ba1bd3d0f94d 100644
--- a/pkgs/by-name/sh/shittier/package.nix
+++ b/pkgs/by-name/sh/shittier/package.nix
@@ -21,6 +21,7 @@ buildNpmPackage rec {
 
   meta = {
     description = "Unconventional code formatting tool for JavaScript";
+    mainProgram = "shittier";
     homepage = "https://github.com/rohitdhas/shittier";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ totoroot ];
diff --git a/pkgs/by-name/sh/shopware-cli/package.nix b/pkgs/by-name/sh/shopware-cli/package.nix
index 9c7d026c958be..8504a28a22a96 100644
--- a/pkgs/by-name/sh/shopware-cli/package.nix
+++ b/pkgs/by-name/sh/shopware-cli/package.nix
@@ -43,6 +43,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Command line tool for Shopware 6";
+    mainProgram = "shopware-cli";
     homepage = "https://github.com/FriendsOfShopware/shopware-cli";
     changelog = "https://github.com/FriendsOfShopware/shopware-cli/releases/tag/${version}";
     license = licenses.mit;
diff --git a/pkgs/by-name/si/signaturepdf/package.nix b/pkgs/by-name/si/signaturepdf/package.nix
index 34eaab9213edb..623f3a654fce7 100644
--- a/pkgs/by-name/si/signaturepdf/package.nix
+++ b/pkgs/by-name/si/signaturepdf/package.nix
@@ -48,6 +48,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Web software for signing PDFs and also organize pages, edit metadata and compress pdf";
+    mainProgram = "signaturepdf";
     homepage = "https://pdf.24eme.fr/";
     changelog =
       "https://github.com/24eme/signaturepdf/releases/tag/v${version}";
diff --git a/pkgs/by-name/si/simplex-chat-desktop/package.nix b/pkgs/by-name/si/simplex-chat-desktop/package.nix
index 4332e6467005d..1868e2669cdb5 100644
--- a/pkgs/by-name/si/simplex-chat-desktop/package.nix
+++ b/pkgs/by-name/si/simplex-chat-desktop/package.nix
@@ -38,6 +38,7 @@ in appimageTools.wrapType2 {
 
   meta = with lib; {
     description = "Desktop application for SimpleX Chat";
+    mainProgram = "simplex-chat-desktop";
     homepage = "https://simplex.chat";
     changelog = "https://github.com/simplex-chat/simplex-chat/releases/tag/v${version}";
     license = licenses.agpl3Only;
diff --git a/pkgs/by-name/sm/smuview/package.nix b/pkgs/by-name/sm/smuview/package.nix
index 7c67e012cd148..e2825cdb783ff 100644
--- a/pkgs/by-name/sm/smuview/package.nix
+++ b/pkgs/by-name/sm/smuview/package.nix
@@ -49,6 +49,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A Qt based source measure unit GUI for sigrok";
+    mainProgram = "smuview";
     longDescription = "SmuView is a GUI for sigrok that supports power supplies, electronic loads and all sorts of measurement devices like multimeters, LCR meters and so on";
     homepage = "https://github.com/knarfS/smuview";
     license = licenses.gpl3Plus;
diff --git a/pkgs/by-name/sn/snekim/package.nix b/pkgs/by-name/sn/snekim/package.nix
index e041c1f0e3140..d5e80a3c75fe0 100644
--- a/pkgs/by-name/sn/snekim/package.nix
+++ b/pkgs/by-name/sn/snekim/package.nix
@@ -25,6 +25,7 @@ buildNimPackage (finalAttrs: {
   meta = {
     homepage = "https://codeberg.org/annaaurora/snekim";
     description = "A simple implementation of the classic snake game";
+    mainProgram = "snekim";
     license = lib.licenses.lgpl3Only;
     maintainers = [ lib.maintainers.annaaurora ];
   };
diff --git a/pkgs/by-name/sp/speakersafetyd/package.nix b/pkgs/by-name/sp/speakersafetyd/package.nix
index 4351ae55176e7..aa44ad62c02bd 100644
--- a/pkgs/by-name/sp/speakersafetyd/package.nix
+++ b/pkgs/by-name/sp/speakersafetyd/package.nix
@@ -39,6 +39,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A userspace daemon written in Rust that implements an analogue of the Texas Instruments Smart Amp speaker protection model";
+    mainProgram = "speakersafetyd";
     homepage = "https://github.com/AsahiLinux/speakersafetyd";
     maintainers = with maintainers; [ yuka ];
     license = licenses.mit;
diff --git a/pkgs/by-name/sp/spice-autorandr/package.nix b/pkgs/by-name/sp/spice-autorandr/package.nix
index e79f4cb18bd97..1291a0f612d7b 100644
--- a/pkgs/by-name/sp/spice-autorandr/package.nix
+++ b/pkgs/by-name/sp/spice-autorandr/package.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation  {
 
   meta = {
     description = "Automatically adjust the client window resolution in Linux KVM guests using the SPICE driver.";
+    mainProgram = "spice-autorandr";
     longDescription = ''
       Some desktop environments update the display resolution automatically,
       this package is only useful when running without a DE or with a DE that
diff --git a/pkgs/by-name/sp/spigot/package.nix b/pkgs/by-name/sp/spigot/package.nix
index 421af163cd4f7..9515a573b7133 100644
--- a/pkgs/by-name/sp/spigot/package.nix
+++ b/pkgs/by-name/sp/spigot/package.nix
@@ -42,6 +42,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://www.chiark.greenend.org.uk/~sgtatham/spigot/";
     description = "A command-line exact real calculator";
+    mainProgram = "spigot";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ AndersonTorres ];
     platforms = lib.platforms.unix;
diff --git a/pkgs/by-name/ss/sssnake/package.nix b/pkgs/by-name/ss/sssnake/package.nix
index d50d624781b08..98b774bf4f8c5 100644
--- a/pkgs/by-name/ss/sssnake/package.nix
+++ b/pkgs/by-name/ss/sssnake/package.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
   ];
   meta = with lib; {
     description = "Cli snake game that plays itself";
+    mainProgram = "sssnake";
     homepage = "https://github.com/angeljumbo/sssnake";
     license = with licenses; [mit];
     platforms = platforms.unix;
diff --git a/pkgs/by-name/st/stormlib/package.nix b/pkgs/by-name/st/stormlib/package.nix
index d55b93ca48caa..cfa218c34e1e4 100644
--- a/pkgs/by-name/st/stormlib/package.nix
+++ b/pkgs/by-name/st/stormlib/package.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
     homepage = "https://github.com/ladislav-zezula/StormLib";
     license = licenses.mit;
     description = "An open-source project that can work with Blizzard MPQ archives";
+    mainProgram = "storm_test";
     platforms = platforms.all;
     maintainers = with maintainers; [ aanderse karolchmist ];
   };
diff --git a/pkgs/by-name/sw/sway-assign-cgroups/package.nix b/pkgs/by-name/sw/sway-assign-cgroups/package.nix
index c420a32cf37b0..83602655a669b 100644
--- a/pkgs/by-name/sw/sway-assign-cgroups/package.nix
+++ b/pkgs/by-name/sw/sway-assign-cgroups/package.nix
@@ -25,6 +25,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Place GUI applications into systemd scopes for systemd-oomd compatibility.";
+    mainProgram = "assign-cgroups.py";
     longDescription = ''
       Automatically assign a dedicated systemd scope to the GUI applications
       launched in the same cgroup as the compositor. This could be helpful for
diff --git a/pkgs/by-name/sw/swaycons/package.nix b/pkgs/by-name/sw/swaycons/package.nix
index 33e5ab3666d45..9716f87087951 100644
--- a/pkgs/by-name/sw/swaycons/package.nix
+++ b/pkgs/by-name/sw/swaycons/package.nix
@@ -18,6 +18,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Window Icons in Sway with Nerd Fonts!";
+    mainProgram = "swaycons";
     homepage = "https://github.com/ActuallyAllie/swaycons";
     license = licenses.asl20;
     platforms = platforms.linux;
diff --git a/pkgs/by-name/sw/swayws/package.nix b/pkgs/by-name/sw/swayws/package.nix
index 999581153ac9e..a216e9efba71c 100644
--- a/pkgs/by-name/sw/swayws/package.nix
+++ b/pkgs/by-name/sw/swayws/package.nix
@@ -22,6 +22,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A sway workspace tool which allows easy moving of workspaces to and from outputs";
+    mainProgram = "swayws";
     homepage = "https://gitlab.com/w0lff/swayws";
     license = licenses.mit;
     maintainers = [ maintainers.atila ];
diff --git a/pkgs/by-name/sw/swaywsr/package.nix b/pkgs/by-name/sw/swaywsr/package.nix
index 23a82bd2df08d..5926e605b7505 100644
--- a/pkgs/by-name/sw/swaywsr/package.nix
+++ b/pkgs/by-name/sw/swaywsr/package.nix
@@ -21,6 +21,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Automatically change sway workspace names based on their contents";
+    mainProgram = "swaywsr";
     longDescription = ''
       Automatically sets the workspace names to match the windows on the workspace.
       The chosen name for a workspace is a composite of the app_id or WM_CLASS X11
diff --git a/pkgs/by-name/tc/tcsh/package.nix b/pkgs/by-name/tc/tcsh/package.nix
index 7d60050b0a93e..abc58430f2e6a 100644
--- a/pkgs/by-name/tc/tcsh/package.nix
+++ b/pkgs/by-name/tc/tcsh/package.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://www.tcsh.org/";
     description = "An enhanced version of the Berkeley UNIX C shell (csh)";
+    mainProgram = "tcsh";
     longDescription = ''
       tcsh is an enhanced but completely compatible version of the Berkeley UNIX
       C shell, csh. It is a command language interpreter usable both as an
diff --git a/pkgs/by-name/ti/tilda/package.nix b/pkgs/by-name/ti/tilda/package.nix
index 000088efa5c0f..cda946d04ecf3 100644
--- a/pkgs/by-name/ti/tilda/package.nix
+++ b/pkgs/by-name/ti/tilda/package.nix
@@ -55,6 +55,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://github.com/lanoxx/tilda/";
     description = "A Gtk based drop down terminal for Linux and Unix";
+    mainProgram = "tilda";
     license = lib.licenses.gpl3Plus;
     maintainers = [ lib.maintainers.AndersonTorres ];
     platforms = lib.platforms.linux;
diff --git a/pkgs/by-name/tr/tridactyl-native/package.nix b/pkgs/by-name/tr/tridactyl-native/package.nix
index af5cbe1911269..e8f9394c896d3 100644
--- a/pkgs/by-name/tr/tridactyl-native/package.nix
+++ b/pkgs/by-name/tr/tridactyl-native/package.nix
@@ -22,6 +22,7 @@ buildNimPackage {
   meta = with lib; {
     description =
       "Native messenger for Tridactyl, a vim-like Firefox webextension";
+    mainProgram = "native_main";
     homepage = "https://github.com/tridactyl/native_messenger";
     license = licenses.bsd2;
     platforms = platforms.all;
diff --git a/pkgs/by-name/tr/trunk-ng/package.nix b/pkgs/by-name/tr/trunk-ng/package.nix
index 6ef55446de55f..2759b8f4f9218 100644
--- a/pkgs/by-name/tr/trunk-ng/package.nix
+++ b/pkgs/by-name/tr/trunk-ng/package.nix
@@ -25,6 +25,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     homepage = "https://github.com/ctron/trunk";
     description = "Build, bundle & ship your Rust WASM application to the web";
+    mainProgram = "trunk-ng";
     maintainers = with maintainers; [ ctron ];
     license = with licenses; [ asl20 ];
   };
diff --git a/pkgs/by-name/tu/tup/package.nix b/pkgs/by-name/tu/tup/package.nix
index 902508129cb24..269ee96f1a732 100644
--- a/pkgs/by-name/tu/tup/package.nix
+++ b/pkgs/by-name/tu/tup/package.nix
@@ -58,6 +58,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A fast, file-based build system";
+    mainProgram = "tup";
     longDescription = ''
       Tup is a file-based build system for Linux, OSX, and Windows. It inputs a list
       of file changes and a directed acyclic graph (DAG), then processes the DAG to
diff --git a/pkgs/by-name/ud/udebug/package.nix b/pkgs/by-name/ud/udebug/package.nix
index f3233d8baca8e..d52b713418a68 100644
--- a/pkgs/by-name/ud/udebug/package.nix
+++ b/pkgs/by-name/ud/udebug/package.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "OpenWrt debugging helper library/service";
+    mainProgram = "udebugd";
     homepage = "https://git.openwrt.org/?p=project/udebug.git;a=summary";
     license = licenses.free;
     platforms = platforms.linux;
diff --git a/pkgs/by-name/un/unciv/package.nix b/pkgs/by-name/un/unciv/package.nix
index b017677e8b599..0e2f80f09d960 100644
--- a/pkgs/by-name/un/unciv/package.nix
+++ b/pkgs/by-name/un/unciv/package.nix
@@ -53,6 +53,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "An open-source Android/Desktop remake of Civ V";
+    mainProgram = "unciv";
     homepage = "https://github.com/yairm210/Unciv";
     maintainers = with maintainers; [ tex ];
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
diff --git a/pkgs/by-name/un/unl0kr/package.nix b/pkgs/by-name/un/unl0kr/package.nix
index fa72e2af5c184..345a07ea92911 100644
--- a/pkgs/by-name/un/unl0kr/package.nix
+++ b/pkgs/by-name/un/unl0kr/package.nix
@@ -49,6 +49,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Framebuffer-based disk unlocker for the initramfs based on LVGL";
+    mainProgram = "unl0kr";
     homepage = "https://gitlab.com/cherrypicker/unl0kr";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ tomfitzhenry ];
diff --git a/pkgs/by-name/un/unsilence/package.nix b/pkgs/by-name/un/unsilence/package.nix
index a8c9ef1d9c952..c82fe04616b69 100644
--- a/pkgs/by-name/un/unsilence/package.nix
+++ b/pkgs/by-name/un/unsilence/package.nix
@@ -37,6 +37,7 @@ python3Packages.buildPythonPackage rec {
   meta = with lib; {
     homepage = "https://github.com/lagmoellertim/unsilence";
     description = "Console Interface and Library to remove silent parts of a media file";
+    mainProgram = "unsilence";
     license = licenses.mit;
     maintainers = with maintainers; [ esau79p ];
   };
diff --git a/pkgs/by-name/vc/vcpkg-tool/package.nix b/pkgs/by-name/vc/vcpkg-tool/package.nix
index b96667bfbb557..801c9d9c7bbd4 100644
--- a/pkgs/by-name/vc/vcpkg-tool/package.nix
+++ b/pkgs/by-name/vc/vcpkg-tool/package.nix
@@ -65,6 +65,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = {
     description = "Components of microsoft/vcpkg's binary";
+    mainProgram = "vcpkg";
     homepage = "https://github.com/microsoft/vcpkg-tool";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ guekka gracicot ];
diff --git a/pkgs/by-name/vc/vcpkg/package.nix b/pkgs/by-name/vc/vcpkg/package.nix
index e6642b1ba3a7c..66ebb4afef9ed 100644
--- a/pkgs/by-name/vc/vcpkg/package.nix
+++ b/pkgs/by-name/vc/vcpkg/package.nix
@@ -43,6 +43,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
 
   meta = {
     description = "C++ Library Manager";
+    mainProgram = "vcpkg";
     homepage = "https://vcpkg.io/";
     license = lib.licenses.mit;
     maintainers = with lib.maintainers; [ guekka gracicot ];
diff --git a/pkgs/by-name/vi/vieb/package.nix b/pkgs/by-name/vi/vieb/package.nix
index 0c8afad3fb005..f49cea3c13c7e 100644
--- a/pkgs/by-name/vi/vieb/package.nix
+++ b/pkgs/by-name/vi/vieb/package.nix
@@ -56,6 +56,7 @@ buildNpmPackage rec {
     homepage = "https://vieb.dev/";
     changelog = "https://github.com/Jelmerro/Vieb/releases/tag/${version}";
     description = "Vim Inspired Electron Browser";
+    mainProgram = "vieb";
     maintainers = with maintainers; [ gebner tejing ];
     platforms = platforms.unix;
     license = licenses.gpl3Plus;
diff --git a/pkgs/by-name/wa/wayland-logout/package.nix b/pkgs/by-name/wa/wayland-logout/package.nix
index 22e197a4987a9..272b3dfbe06fc 100644
--- a/pkgs/by-name/wa/wayland-logout/package.nix
+++ b/pkgs/by-name/wa/wayland-logout/package.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
     description = ''
       A utility designed to kill a single instance of a wayland compositor
     '';
+    mainProgram = "wayland-logout";
     homepage = "https://github.com/soreau/wayland-logout";
     maintainers = with maintainers; [quantenzitrone];
     license = with licenses; [mit];
diff --git a/pkgs/by-name/wt/wtfis/package.nix b/pkgs/by-name/wt/wtfis/package.nix
index 0a9ae5bd0bd36..56d302208d9c9 100644
--- a/pkgs/by-name/wt/wtfis/package.nix
+++ b/pkgs/by-name/wt/wtfis/package.nix
@@ -41,6 +41,7 @@ in python3.pkgs.buildPythonApplication {
   meta = {
     homepage = "https://github.com/pirxthepilot/wtfis";
     description = "Passive hostname, domain and IP lookup tool for non-robots";
+    mainProgram = "wtfis";
     license = lib.licenses.mit;
     maintainers = [ lib.maintainers.AndersonTorres ];
   };
diff --git a/pkgs/by-name/x5/x509-limbo/package.nix b/pkgs/by-name/x5/x509-limbo/package.nix
index 18fe5778b7c49..2cb4625e04fa9 100644
--- a/pkgs/by-name/x5/x509-limbo/package.nix
+++ b/pkgs/by-name/x5/x509-limbo/package.nix
@@ -40,6 +40,7 @@ python3.pkgs.buildPythonPackage {
   meta = with lib; {
     homepage = "https://x509-limbo.com/";
     description = "A suite of testvectors for X.509 certificate path validation and tools for building them ";
+    mainProgram = "limbo";
 
     license = licenses.asl20;
     platforms = platforms.all;
diff --git a/pkgs/by-name/xa/xarcan/package.nix b/pkgs/by-name/xa/xarcan/package.nix
index fb43766e72077..2f10a984aa374 100644
--- a/pkgs/by-name/xa/xarcan/package.nix
+++ b/pkgs/by-name/xa/xarcan/package.nix
@@ -107,6 +107,7 @@ stdenv.mkDerivation (finalPackages: {
   meta =  {
     homepage = "https://github.com/letoram/letoram";
     description = "Patched Xserver that bridges connections to Arcan";
+    mainProgram = "Xarcan";
     longDescription = ''
       xarcan is a patched X server with a KDrive backend that uses the
       arcan-shmif to map Xlib/Xcb/X clients to a running arcan instance. It
diff --git a/pkgs/by-name/xf/xfs-undelete/package.nix b/pkgs/by-name/xf/xfs-undelete/package.nix
index d5da9d01fc3b9..cc333fb3ec2bf 100644
--- a/pkgs/by-name/xf/xfs-undelete/package.nix
+++ b/pkgs/by-name/xf/xfs-undelete/package.nix
@@ -36,6 +36,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "An undelete tool for the XFS filesystem";
+    mainProgram = "xfs_undelete";
     homepage = "https://github.com/ianka/xfs_undelete";
     license = licenses.gpl3;
     platforms = platforms.linux;
diff --git a/pkgs/by-name/xp/xplr/package.nix b/pkgs/by-name/xp/xplr/package.nix
index 0d4750bf7e08f..5f79ed3762608 100644
--- a/pkgs/by-name/xp/xplr/package.nix
+++ b/pkgs/by-name/xp/xplr/package.nix
@@ -39,6 +39,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A hackable, minimal, fast TUI file explorer";
+    mainProgram = "xplr";
     homepage = "https://xplr.dev";
     changelog = "https://github.com/sayanarijit/xplr/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/pkgs/by-name/xs/xsct/package.nix b/pkgs/by-name/xs/xsct/package.nix
index 6bec80b6b9656..8e384f8ef9784 100644
--- a/pkgs/by-name/xs/xsct/package.nix
+++ b/pkgs/by-name/xs/xsct/package.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Set color temperature of screen";
+    mainProgram = "xsct";
     homepage = "https://github.com/faf0/sct";
     license = licenses.unlicense;
     maintainers = with maintainers; [ OPNA2608 ];
diff --git a/pkgs/by-name/za/zabbix-agent2-plugin-postgresql/package.nix b/pkgs/by-name/za/zabbix-agent2-plugin-postgresql/package.nix
index 97aeb25d36c90..d80e98f832712 100644
--- a/pkgs/by-name/za/zabbix-agent2-plugin-postgresql/package.nix
+++ b/pkgs/by-name/za/zabbix-agent2-plugin-postgresql/package.nix
@@ -13,6 +13,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Required tool for Zabbix agent integrated PostgreSQL monitoring";
+    mainProgram = "postgresql";
     homepage = "https://www.zabbix.com/integrations/postgresql";
     license = licenses.asl20;
     maintainers = with maintainers; [ gador ];
diff --git a/pkgs/by-name/zc/zcfan/package.nix b/pkgs/by-name/zc/zcfan/package.nix
index c6bb42c286fbd..7fd6eea7a5b29 100644
--- a/pkgs/by-name/zc/zcfan/package.nix
+++ b/pkgs/by-name/zc/zcfan/package.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "A zero-configuration fan daemon for ThinkPads";
+    mainProgram = "zcfan";
     homepage = "https://github.com/cdown/zcfan";
     changelog = "https://github.com/cdown/zcfan/tags/${finalAttrs.version}";
     license = licenses.mit;
diff --git a/pkgs/by-name/ze/zesarux/package.nix b/pkgs/by-name/ze/zesarux/package.nix
index 915bfe3905cfe..096f4bf2b0ec9 100644
--- a/pkgs/by-name/ze/zesarux/package.nix
+++ b/pkgs/by-name/ze/zesarux/package.nix
@@ -75,6 +75,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://github.com/chernandezba/zesarux";
     description = "ZX Second-Emulator And Released for UniX";
+    mainProgram = "zesarux";
     license = with lib.licenses; [ gpl3Plus ];
     maintainers = with lib.maintainers; [ AndersonTorres ];
     platforms = lib.platforms.unix;
diff --git a/pkgs/by-name/zi/zigpy-cli/package.nix b/pkgs/by-name/zi/zigpy-cli/package.nix
index f0ddf387354b6..a1b86b3b88308 100644
--- a/pkgs/by-name/zi/zigpy-cli/package.nix
+++ b/pkgs/by-name/zi/zigpy-cli/package.nix
@@ -51,6 +51,7 @@ python3.pkgs.buildPythonPackage rec {
 
   meta = with lib; {
     description = "Command line interface for zigpy";
+    mainProgram = "zigpy";
     homepage = "https://github.com/zigpy/zigpy-cli";
     changelog = "https://github.com/zigpy/zigpy/releases/tag/v${version}";
     license = licenses.gpl3Plus;
diff --git a/pkgs/by-name/zi/zircolite/package.nix b/pkgs/by-name/zi/zircolite/package.nix
index 799f2002963c8..13583df1b912c 100644
--- a/pkgs/by-name/zi/zircolite/package.nix
+++ b/pkgs/by-name/zi/zircolite/package.nix
@@ -52,6 +52,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "SIGMA-based detection tool for EVTX, Auditd, Sysmon and other logs";
+    mainProgram = "zircolite";
     homepage = "https://github.com/wagga40/Zircolite";
     changelog = "https://github.com/wagga40/Zircolite/releases/tag/${version}";
     license = licenses.gpl3Only;
diff --git a/pkgs/by-name/zo/zola/package.nix b/pkgs/by-name/zo/zola/package.nix
index df32093d3ef33..8d0cb6722ef8a 100644
--- a/pkgs/by-name/zo/zola/package.nix
+++ b/pkgs/by-name/zo/zola/package.nix
@@ -47,6 +47,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A fast static site generator with everything built-in";
+    mainProgram = "zola";
     homepage = "https://www.getzola.org/";
     changelog = "https://github.com/getzola/zola/raw/v${version}/CHANGELOG.md";
     license = licenses.mit;
diff --git a/pkgs/by-name/zp/zpaqfranz/package.nix b/pkgs/by-name/zp/zpaqfranz/package.nix
index 9719eb7dc81d4..158dbade94e71 100644
--- a/pkgs/by-name/zp/zpaqfranz/package.nix
+++ b/pkgs/by-name/zp/zpaqfranz/package.nix
@@ -39,6 +39,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://github.com/fcorbelli/zpaqfranz";
     description = "Advanced multiversioned deduplicating archiver, with HW acceleration, encryption and paranoid-level tests";
+    mainProgram = "zpaqfranz";
     license = with lib.licenses; [ mit ];
     maintainers = with lib.maintainers; [ AndersonTorres ];
     platforms = lib.platforms.unix;