about summary refs log tree commit diff
path: root/pkgs/games
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/games')
-rw-r--r--pkgs/games/2048-in-terminal/default.nix1
-rw-r--r--pkgs/games/20kly/default.nix1
-rw-r--r--pkgs/games/90secondportraits/default.nix3
-rw-r--r--pkgs/games/BeatSaberModManager/default.nix1
-rw-r--r--pkgs/games/abbaye-des-morts/default.nix1
-rw-r--r--pkgs/games/airshipper/default.nix1
-rw-r--r--pkgs/games/airstrike/default.nix1
-rw-r--r--pkgs/games/among-sus/default.nix1
-rw-r--r--pkgs/games/angband/default.nix1
-rw-r--r--pkgs/games/animatch/default.nix1
-rw-r--r--pkgs/games/anki/default.nix1
-rw-r--r--pkgs/games/antsimulator/default.nix3
-rw-r--r--pkgs/games/armagetronad/default.nix1
-rw-r--r--pkgs/games/atanks/default.nix1
-rw-r--r--pkgs/games/augustus/default.nix1
-rw-r--r--pkgs/games/azimuth/default.nix1
-rw-r--r--pkgs/games/ballerburg/default.nix1
-rw-r--r--pkgs/games/banner/default.nix5
-rw-r--r--pkgs/games/bastet/default.nix1
-rw-r--r--pkgs/games/black-hole-solver/default.nix1
-rw-r--r--pkgs/games/blightmud/default.nix1
-rw-r--r--pkgs/games/blobwars/default.nix1
-rw-r--r--pkgs/games/blockattack/default.nix1
-rw-r--r--pkgs/games/boohu/default.nix1
-rw-r--r--pkgs/games/braincurses/default.nix1
-rw-r--r--pkgs/games/brogue-ce/default.nix3
-rw-r--r--pkgs/games/brogue/default.nix3
-rw-r--r--pkgs/games/brutalmaze/default.nix1
-rw-r--r--pkgs/games/cataclysm-dda/common.nix1
-rw-r--r--pkgs/games/cbonsai/default.nix1
-rw-r--r--pkgs/games/cgoban/default.nix1
-rw-r--r--pkgs/games/chiaki4deck/default.nix40
-rw-r--r--pkgs/games/chromium-bsu/default.nix1
-rw-r--r--pkgs/games/ckan/default.nix1
-rw-r--r--pkgs/games/construo/default.nix1
-rw-r--r--pkgs/games/corsix-th/default.nix1
-rw-r--r--pkgs/games/crack-attack/default.nix1
-rw-r--r--pkgs/games/crossfire/crossfire-client.nix1
-rw-r--r--pkgs/games/crrcsim/default.nix1
-rw-r--r--pkgs/games/cutemaze/default.nix1
-rw-r--r--pkgs/games/cuyo/default.nix1
-rw-r--r--pkgs/games/ddnet/default.nix6
-rw-r--r--pkgs/games/devilutionx/default.nix1
-rw-r--r--pkgs/games/doom-ports/dhewm3/default.nix1
-rw-r--r--pkgs/games/doom-ports/doomretro/default.nix5
-rw-r--r--pkgs/games/doom-ports/doomrunner/default.nix1
-rw-r--r--pkgs/games/doom-ports/doomseeker/default.nix1
-rw-r--r--pkgs/games/doom-ports/enyo-launcher/default.nix1
-rw-r--r--pkgs/games/doom-ports/eternity-engine/default.nix1
-rw-r--r--pkgs/games/doom-ports/eureka-editor/default.nix1
-rw-r--r--pkgs/games/doom-ports/gzdoom/default.nix1
-rw-r--r--pkgs/games/doom-ports/rbdoom-3-bfg/default.nix1
-rw-r--r--pkgs/games/doom-ports/zandronum/default.nix1
-rw-r--r--pkgs/games/doom-ports/zdoom/bcc-git.nix1
-rw-r--r--pkgs/games/doom-ports/zdoom/zdbsp.nix1
-rw-r--r--pkgs/games/dwarf-fortress/dwarf-therapist/default.nix1
-rw-r--r--pkgs/games/ecwolf/default.nix1
-rw-r--r--pkgs/games/eidolon/default.nix1
-rw-r--r--pkgs/games/empty-epsilon/default.nix1
-rw-r--r--pkgs/games/endless-sky/default.nix1
-rw-r--r--pkgs/games/enigma/default.nix1
-rw-r--r--pkgs/games/ezquake/default.nix1
-rw-r--r--pkgs/games/fairymax/default.nix1
-rw-r--r--pkgs/games/ferium/default.nix1
-rw-r--r--pkgs/games/fheroes2/default.nix1
-rw-r--r--pkgs/games/fish-fillets-ng/default.nix1
-rw-r--r--pkgs/games/flare/default.nix1
-rw-r--r--pkgs/games/freedroid/default.nix1
-rw-r--r--pkgs/games/freedroidrpg/default.nix1
-rw-r--r--pkgs/games/freeorion/default.nix6
-rw-r--r--pkgs/games/freesweep/default.nix1
-rw-r--r--pkgs/games/frotz/default.nix1
-rw-r--r--pkgs/games/fsg/default.nix1
-rw-r--r--pkgs/games/gambit/default.nix1
-rw-r--r--pkgs/games/garden-of-coloured-lights/default.nix1
-rw-r--r--pkgs/games/gargoyle/default.nix1
-rw-r--r--pkgs/games/gav/default.nix1
-rw-r--r--pkgs/games/gl-117/default.nix1
-rw-r--r--pkgs/games/gl-gsync-demo/default.nix1
-rw-r--r--pkgs/games/globulation/default.nix1
-rw-r--r--pkgs/games/gltron/default.nix1
-rw-r--r--pkgs/games/gnome-hexgl/default.nix1
-rw-r--r--pkgs/games/gnonograms/default.nix1
-rw-r--r--pkgs/games/gnugo/default.nix1
-rw-r--r--pkgs/games/gnujump/default.nix1
-rw-r--r--pkgs/games/gnushogi/default.nix1
-rw-r--r--pkgs/games/gogdl/default.nix1
-rw-r--r--pkgs/games/gotypist/default.nix1
-rw-r--r--pkgs/games/gshogi/default.nix1
-rw-r--r--pkgs/games/gtetrinet/default.nix1
-rw-r--r--pkgs/games/gweled/default.nix1
-rw-r--r--pkgs/games/harmonist/default.nix1
-rw-r--r--pkgs/games/hase/default.nix1
-rw-r--r--pkgs/games/heroic/default.nix6
-rw-r--r--pkgs/games/hex-a-hop/default.nix1
-rw-r--r--pkgs/games/hexgui/default.nix1
-rw-r--r--pkgs/games/hmcl/default.nix1
-rw-r--r--pkgs/games/hyperrogue/default.nix1
-rw-r--r--pkgs/games/icbm3d/default.nix1
-rw-r--r--pkgs/games/infra-arcana/default.nix1
-rw-r--r--pkgs/games/instawow/default.nix1
-rw-r--r--pkgs/games/jfsw/default.nix4
-rw-r--r--pkgs/games/julius/default.nix3
-rw-r--r--pkgs/games/jumpy/default.nix1
-rw-r--r--pkgs/games/kabeljau/default.nix1
-rw-r--r--pkgs/games/katago/default.nix1
-rw-r--r--pkgs/games/keeperrl/default.nix1
-rw-r--r--pkgs/games/klavaro/default.nix1
-rw-r--r--pkgs/games/kobodeluxe/default.nix1
-rw-r--r--pkgs/games/koboredux/default.nix1
-rw-r--r--pkgs/games/koules/default.nix1
-rw-r--r--pkgs/games/lgogdownloader/default.nix1
-rw-r--r--pkgs/games/liberation-circuit/default.nix1
-rw-r--r--pkgs/games/libremines/default.nix1
-rw-r--r--pkgs/games/lincity/default.nix1
-rw-r--r--pkgs/games/lincity/ng.nix1
-rw-r--r--pkgs/games/linthesia/default.nix1
-rw-r--r--pkgs/games/lugaru/default.nix1
-rw-r--r--pkgs/games/lzwolf/default.nix1
-rw-r--r--pkgs/games/macopix/default.nix1
-rw-r--r--pkgs/games/maelstrom/default.nix1
-rw-r--r--pkgs/games/maptool/default.nix3
-rw-r--r--pkgs/games/mar1d/default.nix3
-rw-r--r--pkgs/games/marble-marcher-ce/default.nix1
-rw-r--r--pkgs/games/mari0/default.nix1
-rw-r--r--pkgs/games/methane/default.nix1
-rw-r--r--pkgs/games/mindustry/default.nix3
-rw-r--r--pkgs/games/mnemosyne/default.nix1
-rw-r--r--pkgs/games/moon-buggy/default.nix1
-rw-r--r--pkgs/games/mrrescue/default.nix1
-rw-r--r--pkgs/games/n2048/default.nix1
-rw-r--r--pkgs/games/naev/default.nix5
-rw-r--r--pkgs/games/nethack/default.nix4
-rw-r--r--pkgs/games/netris/default.nix1
-rw-r--r--pkgs/games/newtonwars/default.nix1
-rw-r--r--pkgs/games/nile/default.nix1
-rw-r--r--pkgs/games/ninvaders/default.nix1
-rw-r--r--pkgs/games/njam/default.nix1
-rw-r--r--pkgs/games/npush/default.nix1
-rw-r--r--pkgs/games/nsnake/default.nix1
-rw-r--r--pkgs/games/nudoku/default.nix1
-rw-r--r--pkgs/games/oh-my-git/default.nix1
-rw-r--r--pkgs/games/onscripter-en/default.nix1
-rw-r--r--pkgs/games/opendune/default.nix1
-rw-r--r--pkgs/games/opendungeons/default.nix1
-rw-r--r--pkgs/games/openspades/default.nix1
-rw-r--r--pkgs/games/openttd/default.nix1
-rw-r--r--pkgs/games/openttd/nml.nix1
-rw-r--r--pkgs/games/opentyrian/default.nix1
-rw-r--r--pkgs/games/openxcom/default.nix1
-rw-r--r--pkgs/games/orthorobot/default.nix1
-rw-r--r--pkgs/games/osu-lazer/bin.nix8
-rw-r--r--pkgs/games/osu-lazer/default.nix4
-rw-r--r--pkgs/games/osu-lazer/deps.nix17
-rw-r--r--pkgs/games/pacvim/default.nix1
-rw-r--r--pkgs/games/papermc/derivation.nix12
-rw-r--r--pkgs/games/pegasus-frontend/default.nix1
-rw-r--r--pkgs/games/performous/default.nix1
-rw-r--r--pkgs/games/pingus/default.nix1
-rw-r--r--pkgs/games/pokerth/default.nix1
-rw-r--r--pkgs/games/pokete/default.nix1
-rw-r--r--pkgs/games/powermanga/default.nix1
-rw-r--r--pkgs/games/principia/default.nix1
-rw-r--r--pkgs/games/prismlauncher/default.nix4
-rw-r--r--pkgs/games/pro-office-calculator/default.nix1
-rw-r--r--pkgs/games/pysolfc/default.nix1
-rw-r--r--pkgs/games/qgo/default.nix1
-rw-r--r--pkgs/games/qqwing/default.nix1
-rw-r--r--pkgs/games/qtads/default.nix1
-rw-r--r--pkgs/games/quakespasm/vulkan.nix1
-rw-r--r--pkgs/games/quantumminigolf/default.nix1
-rw-r--r--pkgs/games/racer/default.nix1
-rw-r--r--pkgs/games/randtype/default.nix1
-rw-r--r--pkgs/games/riko4/default.nix1
-rw-r--r--pkgs/games/rocksndiamonds/default.nix1
-rw-r--r--pkgs/games/rogue/default.nix1
-rw-r--r--pkgs/games/rott/default.nix1
-rw-r--r--pkgs/games/rpg-cli/default.nix1
-rw-r--r--pkgs/games/rrootage/default.nix1
-rw-r--r--pkgs/games/runelite/default.nix8
-rw-r--r--pkgs/games/scummvm/default.nix1
-rw-r--r--pkgs/games/sfrotz/default.nix1
-rw-r--r--pkgs/games/shticker-book-unwritten/default.nix1
-rw-r--r--pkgs/games/sienna/default.nix1
-rw-r--r--pkgs/games/sil-q/default.nix1
-rw-r--r--pkgs/games/simutrans/default.nix1
-rw-r--r--pkgs/games/snipes/default.nix1
-rw-r--r--pkgs/games/soi/default.nix1
-rw-r--r--pkgs/games/solicurses/default.nix1
-rw-r--r--pkgs/games/space-orbit/default.nix1
-rw-r--r--pkgs/games/srb2kart/default.nix87
-rw-r--r--pkgs/games/srb2kart/wadlocation.patch61
-rw-r--r--pkgs/games/stardust/default.nix1
-rw-r--r--pkgs/games/steam/fhsenv.nix2
-rw-r--r--pkgs/games/stockfish/default.nix1
-rw-r--r--pkgs/games/super-tux-kart/default.nix1
-rw-r--r--pkgs/games/system-syzygy/default.nix1
-rw-r--r--pkgs/games/taisei/default.nix1
-rw-r--r--pkgs/games/tecnoballz/default.nix1
-rw-r--r--pkgs/games/teeworlds/default.nix1
-rw-r--r--pkgs/games/tennix/default.nix1
-rw-r--r--pkgs/games/tes3cmd/default.nix1
-rw-r--r--pkgs/games/the-butterfly-effect/default.nix1
-rw-r--r--pkgs/games/theforceengine/default.nix1
-rw-r--r--pkgs/games/tinyfugue/default.nix1
-rw-r--r--pkgs/games/titanion/default.nix1
-rw-r--r--pkgs/games/tome4/default.nix1
-rw-r--r--pkgs/games/torus-trooper/default.nix1
-rw-r--r--pkgs/games/tr-patcher/default.nix1
-rw-r--r--pkgs/games/trackballs/default.nix1
-rw-r--r--pkgs/games/trigger/default.nix1
-rw-r--r--pkgs/games/tumiki-fighters/default.nix1
-rw-r--r--pkgs/games/tuxtype/default.nix1
-rw-r--r--pkgs/games/typespeed/default.nix1
-rw-r--r--pkgs/games/uchess/default.nix1
-rw-r--r--pkgs/games/ultrastardx/default.nix6
-rw-r--r--pkgs/games/umoria/default.nix1
-rw-r--r--pkgs/games/unciv/default.nix62
-rw-r--r--pkgs/games/unnethack/default.nix1
-rw-r--r--pkgs/games/uqm/default.nix1
-rw-r--r--pkgs/games/vdrift/default.nix1
-rw-r--r--pkgs/games/vectoroids/default.nix1
-rw-r--r--pkgs/games/vms-empire/default.nix1
-rw-r--r--pkgs/games/warzone2100/default.nix1
-rw-r--r--pkgs/games/wireworld/default.nix1
-rw-r--r--pkgs/games/wolfstoneextract/default.nix1
-rw-r--r--pkgs/games/wyvern/default.nix1
-rw-r--r--pkgs/games/xboard/default.nix1
-rw-r--r--pkgs/games/xbomb/default.nix1
-rw-r--r--pkgs/games/xgalaga++/default.nix1
-rw-r--r--pkgs/games/xivlauncher/default.nix4
-rw-r--r--pkgs/games/xjump/default.nix1
-rw-r--r--pkgs/games/xmage/default.nix1
-rw-r--r--pkgs/games/xmoto/default.nix1
-rw-r--r--pkgs/games/xpilot/bloodspilot-client.nix1
-rw-r--r--pkgs/games/xpilot/bloodspilot-server.nix1
-rw-r--r--pkgs/games/xskat/default.nix1
-rw-r--r--pkgs/games/xsnow/default.nix1
-rw-r--r--pkgs/games/xsok/default.nix1
-rw-r--r--pkgs/games/xsokoban/default.nix1
240 files changed, 321 insertions, 270 deletions
diff --git a/pkgs/games/2048-in-terminal/default.nix b/pkgs/games/2048-in-terminal/default.nix
index 2ffefb601125..e7347c8fe880 100644
--- a/pkgs/games/2048-in-terminal/default.nix
+++ b/pkgs/games/2048-in-terminal/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     inherit (src.meta) homepage;
     description = "Animated console version of the 2048 game";
+    mainProgram = "2048-in-terminal";
     license = licenses.mit;
     platforms = platforms.unix;
   };
diff --git a/pkgs/games/20kly/default.nix b/pkgs/games/20kly/default.nix
index 0cc61367e28e..c2ab35019516 100644
--- a/pkgs/games/20kly/default.nix
+++ b/pkgs/games/20kly/default.nix
@@ -39,6 +39,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "A steampunk-themed strategy game where you have to manage a steam supply network";
+    mainProgram = "lightyears";
     homepage = "http://jwhitham.org.uk/20kly/";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ fgaz ];
diff --git a/pkgs/games/90secondportraits/default.nix b/pkgs/games/90secondportraits/default.nix
index fd6bb9239938..bd60c836b636 100644
--- a/pkgs/games/90secondportraits/default.nix
+++ b/pkgs/games/90secondportraits/default.nix
@@ -43,9 +43,10 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A silly speed painting game";
+    mainProgram = "90secondportraits";
     maintainers = with maintainers; [ leenaars ];
     platforms = platforms.linux;
-    license = licenses.free;
+    license = with licenses; [ zlib cc-by-sa-40 cc-by-sa-30 /* vendored */ x11 mit ];
     downloadPage = "http://tangramgames.dk/games/90secondportraits";
   };
 
diff --git a/pkgs/games/BeatSaberModManager/default.nix b/pkgs/games/BeatSaberModManager/default.nix
index a4b53810244d..5c0f73d329f2 100644
--- a/pkgs/games/BeatSaberModManager/default.nix
+++ b/pkgs/games/BeatSaberModManager/default.nix
@@ -56,6 +56,7 @@ buildDotnetModule rec {
 
   meta = with lib; {
     description = "Yet another mod installer for Beat Saber, heavily inspired by ModAssistant";
+    mainProgram = "BeatSaberModManager";
     homepage = "https://github.com/affederaffe/BeatSaberModManager";
     longDescription = ''
       BeatSaberModManager is yet another mod installer for Beat Saber, heavily inspired by ModAssistant
diff --git a/pkgs/games/abbaye-des-morts/default.nix b/pkgs/games/abbaye-des-morts/default.nix
index 3cf03ed22119..1461c45a0b79 100644
--- a/pkgs/games/abbaye-des-morts/default.nix
+++ b/pkgs/games/abbaye-des-morts/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://locomalito.com/abbaye_des_morts.php";
     description = "A retro arcade video game";
+    mainProgram = "abbayev2";
     license = licenses.gpl3;
     maintainers = [ maintainers.marius851000 ];
   };
diff --git a/pkgs/games/airshipper/default.nix b/pkgs/games/airshipper/default.nix
index a785d6035e41..0791aa8dfa27 100644
--- a/pkgs/games/airshipper/default.nix
+++ b/pkgs/games/airshipper/default.nix
@@ -114,6 +114,7 @@ rustPlatform.buildRustPackage {
 
   meta = with lib; {
     description = "Provides automatic updates for the voxel RPG Veloren";
+    mainProgram = "airshipper";
     homepage = "https://www.veloren.net";
     license = licenses.gpl3;
     maintainers = with maintainers; [ yusdacra ];
diff --git a/pkgs/games/airstrike/default.nix b/pkgs/games/airstrike/default.nix
index 8441ac7a2fee..63b2686e97c9 100644
--- a/pkgs/games/airstrike/default.nix
+++ b/pkgs/games/airstrike/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A 2d dogfighting game";
+    mainProgram = "airstrike";
     homepage = "https://icculus.org/airstrike/";
     license = licenses.gpl2;
     maintainers = with maintainers; [ pSub ];
diff --git a/pkgs/games/among-sus/default.nix b/pkgs/games/among-sus/default.nix
index be9ecc7adf57..d53d98f5e7af 100644
--- a/pkgs/games/among-sus/default.nix
+++ b/pkgs/games/among-sus/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://git.sr.ht/~martijnbraam/among-sus";
     description = "Among us, but it's a text adventure";
+    mainProgram = "among-sus";
     license = licenses.agpl3Plus;
     maintainers = [ maintainers.eyjhb ];
     platforms = platforms.unix;
diff --git a/pkgs/games/angband/default.nix b/pkgs/games/angband/default.nix
index 24348460d3b5..1d3ac929d337 100644
--- a/pkgs/games/angband/default.nix
+++ b/pkgs/games/angband/default.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "https://angband.github.io/angband";
     description = "A single-player roguelike dungeon exploration game";
+    mainProgram = "angband";
     maintainers = [ maintainers.kenran ];
     license = licenses.gpl2;
     platforms = platforms.unix;
diff --git a/pkgs/games/animatch/default.nix b/pkgs/games/animatch/default.nix
index b6bf5473807c..261612374ace 100644
--- a/pkgs/games/animatch/default.nix
+++ b/pkgs/games/animatch/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://gitlab.com/HolyPangolin/animatch/";
     description = "A cute match three game for the Librem 5 smartphone";
+    mainProgram = "animatch";
     license = with lib.licenses; [ gpl3Plus ];
     maintainers = with lib.maintainers; [ colinsane ];
   };
diff --git a/pkgs/games/anki/default.nix b/pkgs/games/anki/default.nix
index 3cd623c4d6ef..eca62c640bcf 100644
--- a/pkgs/games/anki/default.nix
+++ b/pkgs/games/anki/default.nix
@@ -277,6 +277,7 @@ python3.pkgs.buildPythonApplication {
 
   meta = with lib; {
     description = "Spaced repetition flashcard program";
+    mainProgram = "anki";
     longDescription = ''
       Anki is a program which makes remembering things easy. Because it is a lot
       more efficient than traditional study methods, you can either greatly
diff --git a/pkgs/games/antsimulator/default.nix b/pkgs/games/antsimulator/default.nix
index bac481c88f35..69cd7ad1894b 100644
--- a/pkgs/games/antsimulator/default.nix
+++ b/pkgs/games/antsimulator/default.nix
@@ -33,7 +33,8 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/johnBuffer/AntSimulator";
     description = "Simple Ants simulator";
-    license = licenses.free;
+    mainProgram = "antsimulator";
+    license = licenses.mit;
     maintainers = with maintainers; [ ivar ];
     platforms = platforms.unix;
   };
diff --git a/pkgs/games/armagetronad/default.nix b/pkgs/games/armagetronad/default.nix
index 6bcc30ac011f..20f253dcfc2f 100644
--- a/pkgs/games/armagetronad/default.nix
+++ b/pkgs/games/armagetronad/default.nix
@@ -176,6 +176,7 @@ let
       meta = with lib; {
         homepage = "http://armagetronad.org";
         description = "A multiplayer networked arcade racing game in 3D similar to Tron";
+        mainProgram = "armagetronad-dedicated";
         maintainers = with maintainers; [ numinit ];
         license = licenses.gpl2Plus;
         platforms = platforms.linux;
diff --git a/pkgs/games/atanks/default.nix b/pkgs/games/atanks/default.nix
index 197cadfea29c..8a77be6f16eb 100644
--- a/pkgs/games/atanks/default.nix
+++ b/pkgs/games/atanks/default.nix
@@ -15,6 +15,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Atomic Tanks ballistics game";
+    mainProgram = "atanks";
     homepage = "http://atanks.sourceforge.net/";
     maintainers = [ maintainers.raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/games/augustus/default.nix b/pkgs/games/augustus/default.nix
index 5aec0186cfc4..1ccbd14f5f33 100644
--- a/pkgs/games/augustus/default.nix
+++ b/pkgs/games/augustus/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "An open source re-implementation of Caesar III. Fork of Julius incorporating gameplay changes";
+    mainProgram = "augustus";
     homepage = "https://github.com/Keriew/augustus";
     license = licenses.agpl3Only;
     platforms = platforms.all;
diff --git a/pkgs/games/azimuth/default.nix b/pkgs/games/azimuth/default.nix
index ed03c2afd71c..84d50211dc37 100644
--- a/pkgs/games/azimuth/default.nix
+++ b/pkgs/games/azimuth/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A metroidvania game using only vectorial graphic";
+    mainProgram = "azimuth";
     longDescription = ''
       Azimuth is a metroidvania game, and something of an homage to the previous
       greats of the genre (Super Metroid in particular). You will need to pilot
diff --git a/pkgs/games/ballerburg/default.nix b/pkgs/games/ballerburg/default.nix
index b15abdbc4703..c8d5fb793832 100644
--- a/pkgs/games/ballerburg/default.nix
+++ b/pkgs/games/ballerburg/default.nix
@@ -44,6 +44,7 @@ in stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Classic cannon combat game";
+    mainProgram = "ballerburg";
     longDescription = ''
       Two castles, separated by a mountain, try to defeat each other with their cannonballs,
       either by killing the opponent's king or by weakening the opponent enough so that the king capitulates.'';
diff --git a/pkgs/games/banner/default.nix b/pkgs/games/banner/default.nix
index befb29f6ffc9..af54f59999c8 100644
--- a/pkgs/games/banner/default.nix
+++ b/pkgs/games/banner/default.nix
@@ -2,18 +2,19 @@
 
 stdenv.mkDerivation rec {
   pname = "banner";
-  version = "1.3.5";
+  version = "1.3.6";
 
   src = fetchFromGitHub {
     owner = "pronovic";
     repo = "banner";
     rev = "BANNER_V${version}";
-    sha256 = "ISSnGzrFSzSj/+KxgeFtaw4H+4Ea5x5S5C8xjcjKWqQ=";
+    sha256 = "sha256-g9i460W0SanW2xIfZk9Am/vDsRlL7oxJOUhksa+I8zY=";
   };
 
   meta = with lib; {
     homepage = "https://github.com/pronovic/banner";
     description = "Print large banners to ASCII terminals";
+    mainProgram = "banner";
     license = licenses.gpl2Only;
 
     longDescription = ''
diff --git a/pkgs/games/bastet/default.nix b/pkgs/games/bastet/default.nix
index 0b9f41507303..5fde8064d755 100644
--- a/pkgs/games/bastet/default.nix
+++ b/pkgs/games/bastet/default.nix
@@ -37,6 +37,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Tetris clone with 'bastard' block-choosing AI";
+    mainProgram = "bastet";
     homepage = "http://fph.altervista.org/prog/bastet.html";
     license = licenses.gpl3;
     maintainers = [ maintainers.dezgeg ];
diff --git a/pkgs/games/black-hole-solver/default.nix b/pkgs/games/black-hole-solver/default.nix
index 0d5f2eab9786..1950403e10c6 100644
--- a/pkgs/games/black-hole-solver/default.nix
+++ b/pkgs/games/black-hole-solver/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A solver for Solitaire variants Golf, Black Hole, and All in a Row";
+    mainProgram = "black-hole-solve";
     homepage = "https://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/";
     license = licenses.mit;
   };
diff --git a/pkgs/games/blightmud/default.nix b/pkgs/games/blightmud/default.nix
index 3267c36a370e..e62ab2437082 100644
--- a/pkgs/games/blightmud/default.nix
+++ b/pkgs/games/blightmud/default.nix
@@ -51,6 +51,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A terminal MUD client written in Rust";
+    mainProgram = "blightmud";
     longDescription = ''
       Blightmud is a terminal client for connecting to Multi User Dungeon (MUD)
       games. It is written in Rust and supports TLS, GMCP, MSDP, MCCP2, tab
diff --git a/pkgs/games/blobwars/default.nix b/pkgs/games/blobwars/default.nix
index dd94fc109696..6c01e8d5a604 100644
--- a/pkgs/games/blobwars/default.nix
+++ b/pkgs/games/blobwars/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Platform action game featuring a blob with lots of weapons";
+    mainProgram = "blobwars";
     homepage = "https://www.parallelrealities.co.uk/games/metalBlobSolid/";
     license = with licenses; [ gpl2Plus free ];
     maintainers = with maintainers; [ iblech ];
diff --git a/pkgs/games/blockattack/default.nix b/pkgs/games/blockattack/default.nix
index 6deba7987ada..d59b93ae600c 100644
--- a/pkgs/games/blockattack/default.nix
+++ b/pkgs/games/blockattack/default.nix
@@ -50,6 +50,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://blockattack.net/";
     description = "An open source clone of Panel de Pon (aka Tetris Attack)";
+    mainProgram = "blockattack";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ AndersonTorres ];
     platforms = platforms.unix;
diff --git a/pkgs/games/boohu/default.nix b/pkgs/games/boohu/default.nix
index 708d8d7510bc..6d90106521ad 100644
--- a/pkgs/games/boohu/default.nix
+++ b/pkgs/games/boohu/default.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A new coffee-break roguelike game";
+    mainProgram = "boohu";
     longDescription = ''
       Break Out Of Hareka's Underground (Boohu) is a roguelike game mainly
       inspired from DCSS and its tavern, with some ideas from Brogue, but
diff --git a/pkgs/games/braincurses/default.nix b/pkgs/games/braincurses/default.nix
index f3f862b97ef9..bbbc35b412a2 100644
--- a/pkgs/games/braincurses/default.nix
+++ b/pkgs/games/braincurses/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/bderrly/braincurses";
     description = "A version of the classic game Mastermind";
+    mainProgram = "braincurses";
     license = licenses.gpl2;
     maintainers = with maintainers; [ dotlambda ];
     platforms = platforms.linux;
diff --git a/pkgs/games/brogue-ce/default.nix b/pkgs/games/brogue-ce/default.nix
index 32ca328492bc..ee2862f9c445 100644
--- a/pkgs/games/brogue-ce/default.nix
+++ b/pkgs/games/brogue-ce/default.nix
@@ -55,8 +55,9 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "A community-lead fork of the minimalist roguelike game Brogue";
+    mainProgram = "brogue-ce";
     homepage = "https://github.com/tmewett/BrogueCE";
-    license = licenses.agpl3;
+    license = licenses.agpl3Plus;
     maintainers = with maintainers; [ AndersonTorres fgaz ];
     platforms = platforms.all;
   };
diff --git a/pkgs/games/brogue/default.nix b/pkgs/games/brogue/default.nix
index 770ff3622923..f502c710afbf 100644
--- a/pkgs/games/brogue/default.nix
+++ b/pkgs/games/brogue/default.nix
@@ -51,8 +51,9 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "A roguelike game";
+    mainProgram = "brogue";
     homepage = "https://sites.google.com/site/broguegame/";
-    license = licenses.agpl3;
+    license = licenses.agpl3Plus;
     maintainers =  with maintainers; [ AndersonTorres fgaz ];
     platforms = [ "x86_64-linux" ];
   };
diff --git a/pkgs/games/brutalmaze/default.nix b/pkgs/games/brutalmaze/default.nix
index 8f8930ce0c63..124134eafc14 100644
--- a/pkgs/games/brutalmaze/default.nix
+++ b/pkgs/games/brutalmaze/default.nix
@@ -27,6 +27,7 @@ python3Packages.buildPythonApplication rec {
 
   meta = with lib; {
     description = "Minimalist thrilling shoot 'em up game";
+    mainProgram = "brutalmaze";
     homepage = "https://brutalmaze.rtfd.io";
     license = licenses.agpl3Plus;
     maintainers = [ maintainers.McSinyx ];
diff --git a/pkgs/games/cataclysm-dda/common.nix b/pkgs/games/cataclysm-dda/common.nix
index fb54efee1dd5..b2aa2878080b 100644
--- a/pkgs/games/cataclysm-dda/common.nix
+++ b/pkgs/games/cataclysm-dda/common.nix
@@ -72,6 +72,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A free, post apocalyptic, zombie infested rogue-like";
+    mainProgram = "cataclysm-tiles";
     longDescription = ''
       Cataclysm: Dark Days Ahead is a roguelike set in a post-apocalyptic world.
       Surviving is difficult: you have been thrown, ill-equipped, into a
diff --git a/pkgs/games/cbonsai/default.nix b/pkgs/games/cbonsai/default.nix
index 2dc131aba6db..3898a42e476f 100644
--- a/pkgs/games/cbonsai/default.nix
+++ b/pkgs/games/cbonsai/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Grow bonsai trees in your terminal";
+    mainProgram = "cbonsai";
     homepage = "https://gitlab.com/jallbrit/cbonsai";
     license = with licenses; [ gpl3Only ];
     maintainers = with maintainers; [ manveru ];
diff --git a/pkgs/games/cgoban/default.nix b/pkgs/games/cgoban/default.nix
index 3d202985f1b0..ce0cd1e5ffcc 100644
--- a/pkgs/games/cgoban/default.nix
+++ b/pkgs/games/cgoban/default.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Client for the KGS Go Server";
+    mainProgram = "cgoban";
     homepage = "https://www.gokgs.com/";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.free;
diff --git a/pkgs/games/chiaki4deck/default.nix b/pkgs/games/chiaki4deck/default.nix
index fcb2ed831fb7..4c2aeb172e1f 100644
--- a/pkgs/games/chiaki4deck/default.nix
+++ b/pkgs/games/chiaki4deck/default.nix
@@ -1,38 +1,52 @@
 { lib
 , fetchFromGitHub
-, mkDerivation
+, fetchpatch
+, stdenv
 , cmake
 , pkg-config
 , protobuf
 , python3
 , ffmpeg_6
 , libopus
+, wrapQtAppsHook
 , qtbase
 , qtmultimedia
 , qtsvg
+, qtwayland
+, qtdeclarative
+, qtwebengine
 , SDL2
 , libevdev
 , udev
 , hidapi
 , fftw
 , speexdsp
+, libplacebo
+, vulkan-loader
+, vulkan-headers
+, libunwind
+, shaderc
+, lcms2
+, libdovi
+, xxHash
 }:
 
-mkDerivation rec {
+stdenv.mkDerivation rec {
   pname = "chiaki4deck";
-  version = "1.5.1";
+  version = "1.6.5";
 
   src = fetchFromGitHub {
     owner = "streetpea";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-XNpD9JPbckiq0HgpV/QJR8hDmvGTptxBMoGihHz44lc=";
+    hash = "sha256-ogNfls7RPvzIVat0zlBlCWHWt22YfzGawjfgu5y9Gyk=";
     fetchSubmodules = true;
   };
 
   nativeBuildInputs = [
     cmake
     pkg-config
+    wrapQtAppsHook
     protobuf
     python3
     python3.pkgs.wrapPython
@@ -46,6 +60,9 @@ mkDerivation rec {
     qtbase
     qtmultimedia
     qtsvg
+    qtdeclarative
+    qtwayland
+    qtwebengine
     protobuf
     SDL2
     hidapi
@@ -53,6 +70,21 @@ mkDerivation rec {
     libevdev
     udev
     speexdsp
+    libplacebo
+    vulkan-headers
+    libunwind
+    shaderc
+    lcms2
+    libdovi
+    xxHash
+  ];
+
+  cmakeFlags = [
+    "-Wno-dev"
+  ];
+
+  qtWrapperArgs = [
+    "--prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib"
   ];
 
   pythonPath = [
diff --git a/pkgs/games/chromium-bsu/default.nix b/pkgs/games/chromium-bsu/default.nix
index 1ab2fb8722b0..cd403c704e58 100644
--- a/pkgs/games/chromium-bsu/default.nix
+++ b/pkgs/games/chromium-bsu/default.nix
@@ -60,6 +60,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://chromium-bsu.sourceforge.net/";
     description = "A fast paced, arcade-style, top-scrolling space shooter";
+    mainProgram = "chromium-bsu";
     license = licenses.artistic1;
     maintainers = with maintainers; [ AndersonTorres ];
     platforms = platforms.unix;
diff --git a/pkgs/games/ckan/default.nix b/pkgs/games/ckan/default.nix
index c19b1e20812d..ed025ecee5d6 100644
--- a/pkgs/games/ckan/default.nix
+++ b/pkgs/games/ckan/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Mod manager for Kerbal Space Program";
+    mainProgram = "ckan";
     homepage = "https://github.com/KSP-CKAN/CKAN";
     license = licenses.mit;
     maintainers = with maintainers; [ Baughn ymarkus ];
diff --git a/pkgs/games/construo/default.nix b/pkgs/games/construo/default.nix
index 2565d8599a53..4c9419a54c65 100644
--- a/pkgs/games/construo/default.nix
+++ b/pkgs/games/construo/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Masses and springs simulation game";
+    mainProgram = "construo.x11";
     homepage = "http://fs.fsf.org/construo/";
     license = lib.licenses.gpl3;
   };
diff --git a/pkgs/games/corsix-th/default.nix b/pkgs/games/corsix-th/default.nix
index fed831146385..04cfd263c9ee 100644
--- a/pkgs/games/corsix-th/default.nix
+++ b/pkgs/games/corsix-th/default.nix
@@ -36,6 +36,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "A reimplementation of the 1997 Bullfrog business sim Theme Hospital";
+    mainProgram = "corsix-th";
     homepage = "https://corsixth.com/";
     license = licenses.mit;
     maintainers = with maintainers; [ hughobrien ];
diff --git a/pkgs/games/crack-attack/default.nix b/pkgs/games/crack-attack/default.nix
index 69395e1c44aa..71e15f562d45 100644
--- a/pkgs/games/crack-attack/default.nix
+++ b/pkgs/games/crack-attack/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A fast-paced puzzle game inspired by the classic Super NES title Tetris Attack!";
+    mainProgram = "crack-attack";
     homepage = "https://www.nongnu.org/crack-attack/";
     license = lib.licenses.gpl2;
     platforms = lib.platforms.linux;
diff --git a/pkgs/games/crossfire/crossfire-client.nix b/pkgs/games/crossfire/crossfire-client.nix
index 0d335b4f529a..bc3a6bbf8b06 100644
--- a/pkgs/games/crossfire/crossfire-client.nix
+++ b/pkgs/games/crossfire/crossfire-client.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "GTKv2 client for the Crossfire free MMORPG";
+    mainProgram = "crossfire-client-gtk2";
     homepage = "http://crossfire.real-time.com/";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
diff --git a/pkgs/games/crrcsim/default.nix b/pkgs/games/crrcsim/default.nix
index 741f402870a8..447b1e75d6f7 100644
--- a/pkgs/games/crrcsim/default.nix
+++ b/pkgs/games/crrcsim/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A model-airplane flight simulator";
+    mainProgram = "crrcsim";
     maintainers = with lib.maintainers; [ raskin ];
     platforms = [ "i686-linux" "x86_64-linux" ];
     license = lib.licenses.gpl2;
diff --git a/pkgs/games/cutemaze/default.nix b/pkgs/games/cutemaze/default.nix
index bf3c0eae6385..658511b02dad 100644
--- a/pkgs/games/cutemaze/default.nix
+++ b/pkgs/games/cutemaze/default.nix
@@ -44,6 +44,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     changelog = "https://github.com/gottcode/cutemaze/blob/v${version}/ChangeLog";
     description = "Simple, top-down game in which mazes are randomly generated";
+    mainProgram = "cutemaze";
     homepage = "https://gottcode.org/cutemaze/";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ dotlambda ];
diff --git a/pkgs/games/cuyo/default.nix b/pkgs/games/cuyo/default.nix
index 871812e097a9..6132b33a3b89 100644
--- a/pkgs/games/cuyo/default.nix
+++ b/pkgs/games/cuyo/default.nix
@@ -14,6 +14,7 @@ stdenv.mkDerivation {
   meta = {
      homepage = "http://karimmi.de/cuyo";
      description = "Stacking blocks game, with different rules for each level";
+     mainProgram = "cuyo";
      license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
   };
diff --git a/pkgs/games/ddnet/default.nix b/pkgs/games/ddnet/default.nix
index aabbc49ea51f..e21325198de2 100644
--- a/pkgs/games/ddnet/default.nix
+++ b/pkgs/games/ddnet/default.nix
@@ -35,19 +35,19 @@
 
 stdenv.mkDerivation rec {
   pname = "ddnet";
-  version = "18.0.3";
+  version = "18.1";
 
   src = fetchFromGitHub {
     owner = "ddnet";
     repo = pname;
     rev = version;
-    hash = "sha256-XirN16XywTtF+gLQT3G3HjqStkNk+NVO7j+FEecq54E=";
+    hash = "sha256-kAMKeYYMCFMgG3+G/05DwA3mj4JkJdrXadjFUMPDAbM=";
   };
 
   cargoDeps = rustPlatform.fetchCargoTarball {
     name = "${pname}-${version}";
     inherit src;
-    hash = "sha256-dFYrvnVxOelRIuqtTiSwBIFher/b/dCdyZvqIne3Lng=";
+    hash = "sha256-8mUo2I5FsA3ym/hrlGaUW8yltLuh/0H6wetCbzvRga0=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/games/devilutionx/default.nix b/pkgs/games/devilutionx/default.nix
index 94838596a129..7f98cbccff3a 100644
--- a/pkgs/games/devilutionx/default.nix
+++ b/pkgs/games/devilutionx/default.nix
@@ -121,6 +121,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/diasurgical/devilutionX";
     description = "Diablo build for modern operating systems";
+    mainProgram = "devilutionx";
     longDescription = "In order to play this game a copy of diabdat.mpq is required. Place a copy of diabdat.mpq in ~/.local/share/diasurgical/devilution before executing the game.";
     license = licenses.unlicense;
     maintainers = with maintainers; [ karolchmist aanderse ];
diff --git a/pkgs/games/doom-ports/dhewm3/default.nix b/pkgs/games/doom-ports/dhewm3/default.nix
index 20e9f986f0c9..7740d00b5fb2 100644
--- a/pkgs/games/doom-ports/dhewm3/default.nix
+++ b/pkgs/games/doom-ports/dhewm3/default.nix
@@ -38,6 +38,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/dhewm/dhewm3";
     description = "Doom 3 port to SDL";
+    mainProgram = "dhewm3";
     license = lib.licenses.gpl3;
     maintainers = with maintainers; [ MP2E ];
     platforms = with platforms; linux;
diff --git a/pkgs/games/doom-ports/doomretro/default.nix b/pkgs/games/doom-ports/doomretro/default.nix
index 5ff5b502f653..127220603bdf 100644
--- a/pkgs/games/doom-ports/doomretro/default.nix
+++ b/pkgs/games/doom-ports/doomretro/default.nix
@@ -11,13 +11,13 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "doomretro";
-  version = "5.2.1";
+  version = "5.3";
 
   src = fetchFromGitHub {
     owner = "bradharding";
     repo = "doomretro";
     rev = "v${finalAttrs.version}";
-    hash = "sha256-jM7SNZ8VsF0caB2Q2qOX8W6SuFxyZWpCo3+jD53R3qU=";
+    hash = "sha256-LCCBtsDEyjzsPS5ADPzsup714p84MO65FQDVjAHhSts=";
   };
 
   nativeBuildInputs = [
@@ -36,6 +36,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = {
     homepage = "https://www.doomretro.com/";
     description = "A classic, refined DOOM source port";
+    mainProgram = "doomretro";
     longDescription = ''
       DOOM Retro is the classic, refined DOOM source port for Windows PC. It
       represents how I like my DOOM to be today, in all its dark and gritty,
diff --git a/pkgs/games/doom-ports/doomrunner/default.nix b/pkgs/games/doom-ports/doomrunner/default.nix
index 3c1e574ca5b1..72b6ad15517d 100644
--- a/pkgs/games/doom-ports/doomrunner/default.nix
+++ b/pkgs/games/doom-ports/doomrunner/default.nix
@@ -51,6 +51,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Graphical launcher of ZDoom and derivatives";
+    mainProgram = "DoomRunner";
     homepage = "https://github.com/Youda008/DoomRunner/";
     changelog = "https://github.com/Youda008/DoomRunner/blob/${finalAttrs.src.rev}/changelog.txt";
     license = licenses.gpl3Only;
diff --git a/pkgs/games/doom-ports/doomseeker/default.nix b/pkgs/games/doom-ports/doomseeker/default.nix
index 48ea1a0296cf..fb8fb1308491 100644
--- a/pkgs/games/doom-ports/doomseeker/default.nix
+++ b/pkgs/games/doom-ports/doomseeker/default.nix
@@ -21,6 +21,7 @@ mkDerivation {
   meta = with lib; {
     homepage = "http://doomseeker.drdteam.org/";
     description = "Multiplayer server browser for many Doom source ports";
+    mainProgram = "doomseeker";
     license = licenses.gpl2;
     platforms = platforms.unix;
     maintainers = [ maintainers.MP2E ];
diff --git a/pkgs/games/doom-ports/enyo-launcher/default.nix b/pkgs/games/doom-ports/enyo-launcher/default.nix
index 8bc782bb36a8..857e2a543e63 100644
--- a/pkgs/games/doom-ports/enyo-launcher/default.nix
+++ b/pkgs/games/doom-ports/enyo-launcher/default.nix
@@ -18,6 +18,7 @@ mkDerivation rec {
   meta = {
     homepage = "https://gitlab.com/sdcofer70/enyo-launcher";
     description = "Frontend for Doom engines";
+    mainProgram = "enyo-launcher";
     license = lib.licenses.gpl3Plus;
     platforms = lib.platforms.unix;
     maintainers = [ lib.maintainers.usrfriendly ];
diff --git a/pkgs/games/doom-ports/eternity-engine/default.nix b/pkgs/games/doom-ports/eternity-engine/default.nix
index cdff7fab1e12..7afef923e08b 100644
--- a/pkgs/games/doom-ports/eternity-engine/default.nix
+++ b/pkgs/games/doom-ports/eternity-engine/default.nix
@@ -24,6 +24,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://doomworld.com/eternity";
     description = "New school Doom port by James Haley";
+    mainProgram = "eternity";
     license = lib.licenses.gpl3;
     platforms = lib.platforms.linux;
     maintainers = with lib.maintainers; [ MP2E ];
diff --git a/pkgs/games/doom-ports/eureka-editor/default.nix b/pkgs/games/doom-ports/eureka-editor/default.nix
index 6beae458d293..2d547f959048 100644
--- a/pkgs/games/doom-ports/eureka-editor/default.nix
+++ b/pkgs/games/doom-ports/eureka-editor/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://eureka-editor.sourceforge.net";
     description = "A map editor for the classic DOOM games, and a few related games such as Heretic and Hexen";
+    mainProgram = "eureka";
     license = licenses.gpl2Plus;
     platforms = platforms.all;
     badPlatforms = platforms.darwin;
diff --git a/pkgs/games/doom-ports/gzdoom/default.nix b/pkgs/games/doom-ports/gzdoom/default.nix
index 768a4936d821..d063393210c4 100644
--- a/pkgs/games/doom-ports/gzdoom/default.nix
+++ b/pkgs/games/doom-ports/gzdoom/default.nix
@@ -103,6 +103,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/ZDoom/gzdoom";
     description = "Modder-friendly OpenGL and Vulkan source port based on the DOOM engine";
+    mainProgram = "gzdoom";
     longDescription = ''
       GZDoom is a feature centric port for all DOOM engine games, based on
       ZDoom, adding an OpenGL renderer and powerful scripting capabilities.
diff --git a/pkgs/games/doom-ports/rbdoom-3-bfg/default.nix b/pkgs/games/doom-ports/rbdoom-3-bfg/default.nix
index 7ec57b715138..07f809662d6b 100644
--- a/pkgs/games/doom-ports/rbdoom-3-bfg/default.nix
+++ b/pkgs/games/doom-ports/rbdoom-3-bfg/default.nix
@@ -81,6 +81,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/RobertBeckebans/RBDOOM-3-BFG";
     description = "Doom 3 BFG Edition with modern engine features";
+    mainProgram = "RBDoom3BFG";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ Zaechus ];
     platforms = platforms.unix;
diff --git a/pkgs/games/doom-ports/zandronum/default.nix b/pkgs/games/doom-ports/zandronum/default.nix
index 0006ea3c7ce5..c8e1927aafed 100644
--- a/pkgs/games/doom-ports/zandronum/default.nix
+++ b/pkgs/games/doom-ports/zandronum/default.nix
@@ -96,6 +96,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://zandronum.com/";
     description = "Multiplayer oriented port, based off Skulltag, for Doom and Doom II by id Software";
+    mainProgram = "zandronum-server";
     maintainers = with maintainers; [ lassulus MP2E ];
     license = licenses.sleepycat;
     platforms = platforms.linux;
diff --git a/pkgs/games/doom-ports/zdoom/bcc-git.nix b/pkgs/games/doom-ports/zdoom/bcc-git.nix
index aa3fdeca183a..5263ef9bac32 100644
--- a/pkgs/games/doom-ports/zdoom/bcc-git.nix
+++ b/pkgs/games/doom-ports/zdoom/bcc-git.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Compiler for Doom/Hexen scripts (ACS, BCS)";
+    mainProgram = "bcc";
     homepage = "https://github.com/wormt/bcc";
     license = licenses.mit;
     maintainers = with maintainers; [ertes];
diff --git a/pkgs/games/doom-ports/zdoom/zdbsp.nix b/pkgs/games/doom-ports/zdoom/zdbsp.nix
index d18eb144292f..8949febdefea 100644
--- a/pkgs/games/doom-ports/zdoom/zdbsp.nix
+++ b/pkgs/games/doom-ports/zdoom/zdbsp.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://zdoom.org/wiki/ZDBSP";
     description = "ZDoom's internal node builder for DOOM maps";
+    mainProgram = "zdbsp";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ lassulus siraben ];
     platforms = platforms.unix;
diff --git a/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix b/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
index 42dd74a766b2..55de9ffdf45e 100644
--- a/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
+++ b/pkgs/games/dwarf-fortress/dwarf-therapist/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Tool to manage dwarves in a running game of Dwarf Fortress";
+    mainProgram = "dwarftherapist";
     maintainers = with maintainers; [ abbradar bendlas numinit jonringer ];
     license = licenses.mit;
     platforms = platforms.x86;
diff --git a/pkgs/games/ecwolf/default.nix b/pkgs/games/ecwolf/default.nix
index 542b414d8a45..08b24deee0d4 100644
--- a/pkgs/games/ecwolf/default.nix
+++ b/pkgs/games/ecwolf/default.nix
@@ -43,6 +43,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Enhanched SDL-based port of Wolfenstein 3D for various platforms";
+    mainProgram = "ecwolf";
     homepage = "https://maniacsvault.net/ecwolf/";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ jayman2000 sander ];
diff --git a/pkgs/games/eidolon/default.nix b/pkgs/games/eidolon/default.nix
index 34bfd4151894..fbb5d86deb91 100644
--- a/pkgs/games/eidolon/default.nix
+++ b/pkgs/games/eidolon/default.nix
@@ -30,6 +30,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A single TUI-based registry for drm-free, wine and steam games on linux, accessed through a rofi launch menu";
+    mainProgram = "eidolon";
     homepage = "https://github.com/nicohman/eidolon";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ _0x4A6F ];
diff --git a/pkgs/games/empty-epsilon/default.nix b/pkgs/games/empty-epsilon/default.nix
index ba41431eb5ca..20f4f5855a35 100644
--- a/pkgs/games/empty-epsilon/default.nix
+++ b/pkgs/games/empty-epsilon/default.nix
@@ -77,6 +77,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Open source bridge simulator based on Artemis";
+    mainProgram = "EmptyEpsilon";
     homepage = "https://daid.github.io/EmptyEpsilon/";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ fpletz lheckemann ma27 ];
diff --git a/pkgs/games/endless-sky/default.nix b/pkgs/games/endless-sky/default.nix
index ffb71f393ca2..7648bbd9b771 100644
--- a/pkgs/games/endless-sky/default.nix
+++ b/pkgs/games/endless-sky/default.nix
@@ -55,6 +55,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A sandbox-style space exploration game similar to Elite, Escape Velocity, or Star Control";
+    mainProgram = "endless-sky";
     homepage = "https://endless-sky.github.io/";
     license = with licenses; [
       gpl3Plus
diff --git a/pkgs/games/enigma/default.nix b/pkgs/games/enigma/default.nix
index e2e9ca1338c2..8deac27e579f 100644
--- a/pkgs/games/enigma/default.nix
+++ b/pkgs/games/enigma/default.nix
@@ -37,6 +37,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Puzzle game inspired by Oxyd on the Atari ST and Rock'n'Roll on the Amiga";
+    mainProgram = "enigma";
     license = with licenses; [ gpl2 free ]; # source + bundles libs + art
     platforms = platforms.unix;
     broken = stdenv.hostPlatform.isDarwin;
diff --git a/pkgs/games/ezquake/default.nix b/pkgs/games/ezquake/default.nix
index a562b9353ebe..46efa6c7b982 100644
--- a/pkgs/games/ezquake/default.nix
+++ b/pkgs/games/ezquake/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://ezquake.com/";
     description = "A modern QuakeWorld client focused on competitive online play";
+    mainProgram = "ezquake";
     license = licenses.gpl2;
     platforms = platforms.linux;
     maintainers = with maintainers; [ edwtjo ];
diff --git a/pkgs/games/fairymax/default.nix b/pkgs/games/fairymax/default.nix
index b493f4dcfa27..79468b320811 100644
--- a/pkgs/games/fairymax/default.nix
+++ b/pkgs/games/fairymax/default.nix
@@ -37,6 +37,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://home.hccnet.nl/h.g.muller/dwnldpage.html";
     description = "A small chess engine supporting fairy pieces";
+    mainProgram = "fairymax";
     longDescription = ''
        A version of micro-Max that reads the piece description from a file
        fmax.ini, so that arbitrary fairy pieces can be implemented. This version
diff --git a/pkgs/games/ferium/default.nix b/pkgs/games/ferium/default.nix
index 903dd70222f6..2f98970c7065 100644
--- a/pkgs/games/ferium/default.nix
+++ b/pkgs/games/ferium/default.nix
@@ -32,6 +32,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Fast and multi-source CLI program for managing Minecraft mods and modpacks from Modrinth, CurseForge, and GitHub Releases";
+    mainProgram = "ferium";
     homepage = "https://github.com/gorilla-devs/ferium";
     license = licenses.mpl20;
     maintainers = with maintainers; [ leo60228 soupglasses ];
diff --git a/pkgs/games/fheroes2/default.nix b/pkgs/games/fheroes2/default.nix
index a2e6943a00d3..fa6c4b4d8a23 100644
--- a/pkgs/games/fheroes2/default.nix
+++ b/pkgs/games/fheroes2/default.nix
@@ -59,6 +59,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/ihhub/fheroes2";
     description = "Free implementation of Heroes of Might and Magic II game engine";
+    mainProgram = "fheroes2";
     longDescription = ''
         In order to play this game, an original game data is required.
         Please refer to README of the project for instructions.
diff --git a/pkgs/games/fish-fillets-ng/default.nix b/pkgs/games/fish-fillets-ng/default.nix
index 787795828f4f..3b83f732df74 100644
--- a/pkgs/games/fish-fillets-ng/default.nix
+++ b/pkgs/games/fish-fillets-ng/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A puzzle game";
+    mainProgram = "fillets";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/games/flare/default.nix b/pkgs/games/flare/default.nix
index 45e1ee765426..0e1b4571e5ce 100644
--- a/pkgs/games/flare/default.nix
+++ b/pkgs/games/flare/default.nix
@@ -16,6 +16,7 @@ buildEnv {
 
   meta = with lib; {
     description = "Fantasy action RPG using the FLARE engine";
+    mainProgram = "flare";
     homepage = "https://flarerpg.org/";
     maintainers = with maintainers; [ aanderse McSinyx ];
     license = [ licenses.gpl3 licenses.cc-by-sa-30 ];
diff --git a/pkgs/games/freedroid/default.nix b/pkgs/games/freedroid/default.nix
index 38eb60e7e045..ab7c36ba5d5a 100644
--- a/pkgs/games/freedroid/default.nix
+++ b/pkgs/games/freedroid/default.nix
@@ -43,6 +43,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A clone of the classic game 'Paradroid' on Commodore 64";
+    mainProgram = "freedroid";
     homepage    = "https://github.com/ReinhardPrix/FreedroidClassic";
     license     = licenses.gpl2Only;
     maintainers = with maintainers; [ iblech ];
diff --git a/pkgs/games/freedroidrpg/default.nix b/pkgs/games/freedroidrpg/default.nix
index 254d9b2ce6a6..1f31c20c7e48 100644
--- a/pkgs/games/freedroidrpg/default.nix
+++ b/pkgs/games/freedroidrpg/default.nix
@@ -31,6 +31,7 @@ in stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Isometric 3D RPG similar to game Diablo";
+    mainProgram = "freedroidRPG";
 
     longDescription = ''
       <para>
diff --git a/pkgs/games/freeorion/default.nix b/pkgs/games/freeorion/default.nix
index 8c2c4ef86a08..204223e6094d 100644
--- a/pkgs/games/freeorion/default.nix
+++ b/pkgs/games/freeorion/default.nix
@@ -24,13 +24,13 @@
 
 stdenv.mkDerivation rec {
   pname = "freeorion";
-  version = "0.5";
+  version = "0.5.0.1";
 
   src = fetchFromGitHub {
     owner = "freeorion";
     repo = "freeorion";
     rev = "v${version}";
-    sha256 = "sha256-uJRDU0Xd+sHL2IDvMiElUSOhvchVMW9wYMSLSN7pYtQ=";
+    sha256 = "sha256-VvTq6TcLc5BMvRTjVsZ2HA9ug3WAqFuTHIoFQ/9/zWc=";
   };
 
   buildInputs = [
@@ -57,7 +57,7 @@ stdenv.mkDerivation rec {
     makeWrapper
   ];
 
-  # as of 0.5 FreeOrion doesn't work with "-DOpenGL_GL_PREFERENCE=GLVND"
+  # as of 0.5.0.1 FreeOrion doesn't work with "-DOpenGL_GL_PREFERENCE=GLVND"
   cmakeFlags = [ "-DOpenGL_GL_PREFERENCE=LEGACY" ];
 
   postInstall = ''
diff --git a/pkgs/games/freesweep/default.nix b/pkgs/games/freesweep/default.nix
index feba049a5cf0..8add760f930b 100644
--- a/pkgs/games/freesweep/default.nix
+++ b/pkgs/games/freesweep/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A console minesweeper-style game written in C for Unix-like systems";
+    mainProgram = "freesweep";
     homepage = "https://github.com/rwestlund/freesweep";
     license = licenses.gpl2;
     maintainers = with maintainers; [ kierdavis ];
diff --git a/pkgs/games/frotz/default.nix b/pkgs/games/frotz/default.nix
index 9bc7ae5ae512..af9efd96318f 100644
--- a/pkgs/games/frotz/default.nix
+++ b/pkgs/games/frotz/default.nix
@@ -41,6 +41,7 @@ stdenv.mkDerivation rec {
     homepage = "https://davidgriffith.gitlab.io/frotz/";
     changelog = "https://gitlab.com/DavidGriffith/frotz/-/raw/${version}/NEWS";
     description = "A z-machine interpreter for Infocom games and other interactive fiction";
+    mainProgram = "frotz";
     platforms = platforms.unix;
     maintainers = with maintainers; [ nicknovitski ddelabru ];
     license = licenses.gpl2;
diff --git a/pkgs/games/fsg/default.nix b/pkgs/games/fsg/default.nix
index 282030023f74..d5680669df9e 100644
--- a/pkgs/games/fsg/default.nix
+++ b/pkgs/games/fsg/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Cellular automata engine tuned towards the likes of Falling Sand";
+    mainProgram = "fsg";
     maintainers = [ lib.maintainers.raskin ];
     platforms = lib.platforms.linux;
   };
diff --git a/pkgs/games/gambit/default.nix b/pkgs/games/gambit/default.nix
index 4bcd329171cc..90e23e9820c6 100644
--- a/pkgs/games/gambit/default.nix
+++ b/pkgs/games/gambit/default.nix
@@ -46,6 +46,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Play chess in your terminal";
+    mainProgram = "gambit";
     homepage = "https://github.com/maaslalani/gambit";
     changelog = "https://github.com/maaslalani/gambit/releases/tag/${src.rev}";
     license = licenses.mit;
diff --git a/pkgs/games/garden-of-coloured-lights/default.nix b/pkgs/games/garden-of-coloured-lights/default.nix
index 7012449f6afc..27b0255eba09 100644
--- a/pkgs/games/garden-of-coloured-lights/default.nix
+++ b/pkgs/games/garden-of-coloured-lights/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Old-school vertical shoot-em-up / bullet hell";
+    mainProgram = "garden";
     homepage = "https://garden.sourceforge.net/drupal/";
     maintainers = with maintainers; [ ];
     license = licenses.gpl3;
diff --git a/pkgs/games/gargoyle/default.nix b/pkgs/games/gargoyle/default.nix
index 9be95457b41c..35b8dc733031 100644
--- a/pkgs/games/gargoyle/default.nix
+++ b/pkgs/games/gargoyle/default.nix
@@ -69,6 +69,7 @@ stdenv.mkDerivation rec {
     homepage = "http://ccxvii.net/gargoyle/";
     license = licenses.gpl2Plus;
     description = "Interactive fiction interpreter GUI";
+    mainProgram = "gargoyle";
     platforms = platforms.unix;
     maintainers = with maintainers; [ orivej ];
   };
diff --git a/pkgs/games/gav/default.nix b/pkgs/games/gav/default.nix
index dc2868ba21b5..23f1fe7854b4 100644
--- a/pkgs/games/gav/default.nix
+++ b/pkgs/games/gav/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Remake of AV Arcade Volleyball";
+    mainProgram = "gav";
     homepage = "https://gav.sourceforge.net/";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
diff --git a/pkgs/games/gl-117/default.nix b/pkgs/games/gl-117/default.nix
index f135c93ff04f..493ca986d9c2 100644
--- a/pkgs/games/gl-117/default.nix
+++ b/pkgs/games/gl-117/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "An air combat simulator";
+    mainProgram = "gl-117";
     homepage = "https://sourceforge.net/projects/gl-117";
     maintainers = with maintainers; [ raskin ];
     license = licenses.gpl2;
diff --git a/pkgs/games/gl-gsync-demo/default.nix b/pkgs/games/gl-gsync-demo/default.nix
index 968d4d5e4a3d..2027b9d3b27e 100644
--- a/pkgs/games/gl-gsync-demo/default.nix
+++ b/pkgs/games/gl-gsync-demo/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
     platforms = platforms.linux;
     maintainers = with maintainers; [ atemu ];
     description = "A very basic OpenGL demo for testing NVIDIA's G-SYNC technology on Linux";
+    mainProgram = "gl-gsync-demo";
     longDescription = ''
       The demo simply draws a vertical bar moving across the screen at constant speed, but deliberately rendered at a variable frame rate.
 
diff --git a/pkgs/games/globulation/default.nix b/pkgs/games/globulation/default.nix
index 039098f87da5..a444f18335fc 100644
--- a/pkgs/games/globulation/default.nix
+++ b/pkgs/games/globulation/default.nix
@@ -61,6 +61,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "RTS without micromanagement";
+    mainProgram = "glob2";
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
     license = licenses.gpl3;
diff --git a/pkgs/games/gltron/default.nix b/pkgs/games/gltron/default.nix
index 540170c49b21..cbc8510775b9 100644
--- a/pkgs/games/gltron/default.nix
+++ b/pkgs/games/gltron/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://www.gltron.org/";
     description = "Game based on the movie Tron";
+    mainProgram = "gltron";
     license = lib.licenses.gpl2Plus;
     maintainers = with lib.maintainers; [viric];
     platforms = with lib.platforms; linux;
diff --git a/pkgs/games/gnome-hexgl/default.nix b/pkgs/games/gnome-hexgl/default.nix
index 54d74ffa5fa0..1c7627582d61 100644
--- a/pkgs/games/gnome-hexgl/default.nix
+++ b/pkgs/games/gnome-hexgl/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Gthree port of HexGL";
+    mainProgram = "gnome-hexgl";
     homepage = "https://github.com/alexlarsson/gnome-hexgl";
     license = licenses.mit;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/games/gnonograms/default.nix b/pkgs/games/gnonograms/default.nix
index c021ca46f57a..69d45e32fe26 100644
--- a/pkgs/games/gnonograms/default.nix
+++ b/pkgs/games/gnonograms/default.nix
@@ -52,6 +52,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Nonograms puzzle game";
+    mainProgram = "com.github.jeremypw.gnonograms";
     longDescription = ''
       An implementation of the Japanese logic puzzle "Nonograms" written in
       Vala, allowing the user to:
diff --git a/pkgs/games/gnugo/default.nix b/pkgs/games/gnugo/default.nix
index 3b8449ab4c7f..82848ab00805 100644
--- a/pkgs/games/gnugo/default.nix
+++ b/pkgs/games/gnugo/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "GNU Go - A computer go player";
+    mainProgram = "gnugo";
     homepage = "https://www.gnu.org/software/gnugo/";
     license = lib.licenses.gpl3;
     platforms = lib.platforms.unix;
diff --git a/pkgs/games/gnujump/default.nix b/pkgs/games/gnujump/default.nix
index 0fdffcf6fadb..10750f84da68 100644
--- a/pkgs/games/gnujump/default.nix
+++ b/pkgs/games/gnujump/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "https://jump.gnu.sinusoid.es/index.php?title=Main_Page";
     description = "A clone of the simple yet addictive game Xjump";
+    mainProgram = "gnujump";
     longDescription = ''
       The goal in this game is to jump to the next floor trying not to fall
       down. As you go upper in the Falling Tower the floors will fall faster.
diff --git a/pkgs/games/gnushogi/default.nix b/pkgs/games/gnushogi/default.nix
index 2557b0571ea9..38f76de1e7a0 100644
--- a/pkgs/games/gnushogi/default.nix
+++ b/pkgs/games/gnushogi/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "GNU implementation of Shogi, also known as Japanese Chess";
+    mainProgram = "gnushogi";
     homepage = "https://www.gnu.org/software/gnushogi/";
     license = licenses.gpl3;
     maintainers = [ maintainers.ciil ];
diff --git a/pkgs/games/gogdl/default.nix b/pkgs/games/gogdl/default.nix
index 83bf90147b5f..91cfe972d9c6 100644
--- a/pkgs/games/gogdl/default.nix
+++ b/pkgs/games/gogdl/default.nix
@@ -32,6 +32,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "GOG Downloading module for Heroic Games Launcher";
+    mainProgram = "gogdl";
     homepage = "https://github.com/Heroic-Games-Launcher/heroic-gogdl";
     license = with licenses; [ gpl3 ];
     maintainers = with maintainers; [ aidalgol ];
diff --git a/pkgs/games/gotypist/default.nix b/pkgs/games/gotypist/default.nix
index 24afb9317c5b..12489a27e6a6 100644
--- a/pkgs/games/gotypist/default.nix
+++ b/pkgs/games/gotypist/default.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A touch-typing tutor";
+    mainProgram = "gotypist";
     longDescription = ''
       A simple touch-typing tutor that follows Steve Yegge's methodology of
       going in fast, slow, and medium cycles.
diff --git a/pkgs/games/gshogi/default.nix b/pkgs/games/gshogi/default.nix
index 77eab7918b91..350ab86aa22b 100644
--- a/pkgs/games/gshogi/default.nix
+++ b/pkgs/games/gshogi/default.nix
@@ -33,6 +33,7 @@ python3.pkgs.buildPythonApplication rec {
   meta = with lib; {
     homepage = "http://johncheetham.com/projects/gshogi/";
     description = "A graphical implementation of the Shogi board game, also known as Japanese Chess";
+    mainProgram = "gshogi";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
     maintainers = [ maintainers.ciil ];
diff --git a/pkgs/games/gtetrinet/default.nix b/pkgs/games/gtetrinet/default.nix
index af16d5e9f748..58ac8b2d77cc 100644
--- a/pkgs/games/gtetrinet/default.nix
+++ b/pkgs/games/gtetrinet/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Client for Tetrinet, a multiplayer online Tetris game";
+    mainProgram = "gtetrinet";
     longDescription = ''
       GTetrinet is a client program for Tetrinet, a multiplayer tetris game
       that is played over the internet.
diff --git a/pkgs/games/gweled/default.nix b/pkgs/games/gweled/default.nix
index fc187afbe806..484543ad8659 100644
--- a/pkgs/games/gweled/default.nix
+++ b/pkgs/games/gweled/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Bejeweled clone game";
+    mainProgram = "gweled";
     homepage = "https://gweled.org";
     license = licenses.gpl2;
     platforms = platforms.linux;
diff --git a/pkgs/games/harmonist/default.nix b/pkgs/games/harmonist/default.nix
index cbb556cbc948..57e9a06ec9a5 100644
--- a/pkgs/games/harmonist/default.nix
+++ b/pkgs/games/harmonist/default.nix
@@ -15,6 +15,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "A stealth coffee-break roguelike game";
+    mainProgram = "harmonist";
     longDescription = ''
       Harmonist is a stealth coffee-break roguelike game. The game has a heavy
       focus on tactical positioning, light and noise mechanisms, making use of
diff --git a/pkgs/games/hase/default.nix b/pkgs/games/hase/default.nix
index f807572455af..1e1ef23367fa 100644
--- a/pkgs/games/hase/default.nix
+++ b/pkgs/games/hase/default.nix
@@ -43,6 +43,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "An open-source artillery shooter";
+    mainProgram = "hase";
     longDescription = ''
       Hase is an open source gravity based artillery shooter. It is similar to
       Worms, Hedgewars or artillery, but the gravity force and direction
diff --git a/pkgs/games/heroic/default.nix b/pkgs/games/heroic/default.nix
index 03165fa5df7d..d3687f03df97 100644
--- a/pkgs/games/heroic/default.nix
+++ b/pkgs/games/heroic/default.nix
@@ -1,6 +1,7 @@
 { lib
 , stdenv
 , fetchFromGitHub
+, fetchpatch
 , fetchYarnDeps
 , yarn
 , prefetch-yarn-deps
@@ -45,6 +46,11 @@ in stdenv.mkDerivation rec {
     ./remove-drm-support.patch
     # Make Heroic create Steam shortcuts (to non-steam games) with the correct path to heroic.
     ./fix-non-steam-shortcuts.patch
+    (fetchpatch {
+      name = "adtraction-fallback.patch";
+      url = "https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher/pull/3575.patch";
+      hash = "sha256-XhYYLQf/oSX3uK+0KzfnAb49iaGwhl9W64Tg2Fqi8Gg=";
+    })
   ];
 
   postPatch = ''
diff --git a/pkgs/games/hex-a-hop/default.nix b/pkgs/games/hex-a-hop/default.nix
index c6eaed57a9ca..32a395195b5e 100644
--- a/pkgs/games/hex-a-hop/default.nix
+++ b/pkgs/games/hex-a-hop/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A puzzle game based on hexagonal tiles";
+    mainProgram = "hex-a-hop";
     homepage = "http://hexahop.sourceforge.net";
     license = with lib.licenses; [
       gpl2Plus # Main code
diff --git a/pkgs/games/hexgui/default.nix b/pkgs/games/hexgui/default.nix
index 49dae4217551..6fc66b870439 100644
--- a/pkgs/games/hexgui/default.nix
+++ b/pkgs/games/hexgui/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "GUI for the board game Hex";
+    mainProgram = "hexgui";
     homepage = "https://github.com/selinger/hexgui";
     license = lib.licenses.gpl3;
     maintainers = [ lib.maintainers.ursi ];
diff --git a/pkgs/games/hmcl/default.nix b/pkgs/games/hmcl/default.nix
index fcaa01ea2d95..95a40f0a8d80 100644
--- a/pkgs/games/hmcl/default.nix
+++ b/pkgs/games/hmcl/default.nix
@@ -89,6 +89,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "https://hmcl.huangyuhui.net";
     description = "A Minecraft Launcher which is multi-functional, cross-platform and popular";
+    mainProgram = "hmcl";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/games/hyperrogue/default.nix b/pkgs/games/hyperrogue/default.nix
index ddbe41df430e..1177ad59413a 100644
--- a/pkgs/games/hyperrogue/default.nix
+++ b/pkgs/games/hyperrogue/default.nix
@@ -62,6 +62,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://www.roguetemple.com/z/hyper/";
     description = "A roguelike game set in hyperbolic geometry";
+    mainProgram = "hyperrogue";
     maintainers = with maintainers; [ rardiol ];
     license = licenses.gpl2;
     platforms = platforms.all;
diff --git a/pkgs/games/icbm3d/default.nix b/pkgs/games/icbm3d/default.nix
index a166b4f83f2b..6f531f424228 100644
--- a/pkgs/games/icbm3d/default.nix
+++ b/pkgs/games/icbm3d/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://www.newbreedsoftware.com/icbm3d/";
     description = "3D vector-based clone of the atari game Missile Command";
+    mainProgram = "icbm3d";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
   };
diff --git a/pkgs/games/infra-arcana/default.nix b/pkgs/games/infra-arcana/default.nix
index 6eb1f44aa8cc..c5c960d7deff 100644
--- a/pkgs/games/infra-arcana/default.nix
+++ b/pkgs/games/infra-arcana/default.nix
@@ -34,6 +34,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://sites.google.com/site/infraarcana";
     description = "A Lovecraftian single-player roguelike game";
+    mainProgram = "infra-arcana";
     longDescription = ''
       Infra Arcana is a Roguelike set in the early 20th century. The goal is to
       explore the lair of a dreaded cult called The Church of Starry Wisdom.
diff --git a/pkgs/games/instawow/default.nix b/pkgs/games/instawow/default.nix
index 7534f5f892a7..d1ed292f377c 100644
--- a/pkgs/games/instawow/default.nix
+++ b/pkgs/games/instawow/default.nix
@@ -42,6 +42,7 @@ python3.pkgs.buildPythonApplication rec {
   meta = with lib; {
     homepage = "https://github.com/layday/instawow";
     description = "World of Warcraft add-on manager CLI and GUI";
+    mainProgram = "instawow";
     license = licenses.gpl3;
     maintainers = with maintainers; [ seirl ];
   };
diff --git a/pkgs/games/jfsw/default.nix b/pkgs/games/jfsw/default.nix
index e170f0024531..9b631551b579 100644
--- a/pkgs/games/jfsw/default.nix
+++ b/pkgs/games/jfsw/default.nix
@@ -11,14 +11,14 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "jfsw";
-  version = "20211225";
+  version = "20240303";
 
   src = fetchFromGitHub {
     owner = "jonof";
     repo = "jfsw";
     rev = "refs/tags/${finalAttrs.version}";
     fetchSubmodules = true;
-    hash = "sha256-oRJHVsVo+KQfJyd8TcPxTMPPi993qxQb0wnD9nR4vJY=";
+    hash = "sha256-bOUgRa9zWufTFEj5huXAKeRerV8PqfqQVDoVUvRrj2I=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/games/julius/default.nix b/pkgs/games/julius/default.nix
index df1ff2bd1a06..5e1f046d9710 100644
--- a/pkgs/games/julius/default.nix
+++ b/pkgs/games/julius/default.nix
@@ -24,7 +24,8 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/bvschaik/julius";
     description = "An open source re-implementation of Caesar III";
-    license = licenses.agpl3;
+    mainProgram = "julius";
+    license = licenses.agpl3Only;
     maintainers = with maintainers; [ Thra11 ];
     platforms = platforms.all;
     broken = stdenv.isDarwin;
diff --git a/pkgs/games/jumpy/default.nix b/pkgs/games/jumpy/default.nix
index d4f8a8fcbdbc..29110d42ff82 100644
--- a/pkgs/games/jumpy/default.nix
+++ b/pkgs/games/jumpy/default.nix
@@ -77,6 +77,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A tactical 2D shooter played by up to 4 players online or on a shared screen";
+    mainProgram = "jumpy";
     homepage = "https://fishfight.org/";
     changelog = "https://github.com/fishfolk/jumpy/releases/tag/v${version}";
     license = with licenses; [ mit /* or */ asl20 ];
diff --git a/pkgs/games/kabeljau/default.nix b/pkgs/games/kabeljau/default.nix
index 0b5b1167ead3..b518121b6390 100644
--- a/pkgs/games/kabeljau/default.nix
+++ b/pkgs/games/kabeljau/default.nix
@@ -33,6 +33,7 @@ stdenvNoCC.mkDerivation rec {
 
   meta = with lib; {
     description = "Survive as a stray cat in an ncurses game";
+    mainProgram = "kabeljau";
     homepage = "https://codeberg.org/annaaurora/kabeljau";
     license = licenses.lgpl3Only;
     maintainers = with maintainers; [ annaaurora ];
diff --git a/pkgs/games/katago/default.nix b/pkgs/games/katago/default.nix
index 834ec0774d7a..e9ba507a3c95 100644
--- a/pkgs/games/katago/default.nix
+++ b/pkgs/games/katago/default.nix
@@ -98,6 +98,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Go engine modeled after AlphaGo Zero";
+    mainProgram = "katago";
     homepage    = "https://github.com/lightvector/katago";
     license     = licenses.mit;
     maintainers = [ maintainers.omnipotententity ];
diff --git a/pkgs/games/keeperrl/default.nix b/pkgs/games/keeperrl/default.nix
index c66ffdee920d..0cbcfd036702 100644
--- a/pkgs/games/keeperrl/default.nix
+++ b/pkgs/games/keeperrl/default.nix
@@ -82,6 +82,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A dungeon management rogue-like";
+    mainProgram = "keeper";
     homepage = "https://keeperrl.com/";
     license = licenses.gpl2;
     maintainers = with maintainers; [ onny ];
diff --git a/pkgs/games/klavaro/default.nix b/pkgs/games/klavaro/default.nix
index b99969bf6a81..58dda8d23a63 100644
--- a/pkgs/games/klavaro/default.nix
+++ b/pkgs/games/klavaro/default.nix
@@ -48,6 +48,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Free touch typing tutor program";
+    mainProgram = "klavaro";
     homepage = "http://klavaro.sourceforge.net/";
     changelog = "https://sourceforge.net/p/klavaro/code/HEAD/tree/trunk/ChangeLog";
     license = licenses.gpl3Plus;
diff --git a/pkgs/games/kobodeluxe/default.nix b/pkgs/games/kobodeluxe/default.nix
index 9dea90824204..9a2d16c14bff 100644
--- a/pkgs/games/kobodeluxe/default.nix
+++ b/pkgs/games/kobodeluxe/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://olofson.net/kobodl/";
     description = "Enhanced version of Akira Higuchi's game XKobo  for Un*x systems with X11";
+    mainProgram = "kobodl";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
   };
diff --git a/pkgs/games/koboredux/default.nix b/pkgs/games/koboredux/default.nix
index 91981fc85fba..46db8b1da57a 100644
--- a/pkgs/games/koboredux/default.nix
+++ b/pkgs/games/koboredux/default.nix
@@ -75,6 +75,7 @@ stdenv.mkDerivation rec {
   meta = {
     description = "A frantic 80's style 2D shooter, similar to XKobo and Kobo Deluxe" +
       optionalString (!useProprietaryAssets) " (built without proprietary assets)";
+    mainProgram = "kobord";
     longDescription = ''
       Kobo Redux is a frantic 80's style 2D shooter, inspired by the look and
       feel of 90's arcade cabinets. The gameplay is fast and unforgiving,
diff --git a/pkgs/games/koules/default.nix b/pkgs/games/koules/default.nix
index 360415dc2e1d..a59199e949c8 100644
--- a/pkgs/games/koules/default.nix
+++ b/pkgs/games/koules/default.nix
@@ -70,6 +70,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://www.ucw.cz/~hubicka/koules/English/";
     description = "Fast arcade game based on the fundamental law of body attraction";
+    mainProgram = "xkoules";
     license = licenses.gpl2Plus;
     maintainers = [ maintainers.iblech ];
     platforms = platforms.linux;
diff --git a/pkgs/games/lgogdownloader/default.nix b/pkgs/games/lgogdownloader/default.nix
index a28ccea53ca1..a03a05bcb356 100644
--- a/pkgs/games/lgogdownloader/default.nix
+++ b/pkgs/games/lgogdownloader/default.nix
@@ -58,6 +58,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Unofficial downloader to GOG.com for Linux users. It uses the same API as the official GOGDownloader";
+    mainProgram = "lgogdownloader";
     homepage = "https://github.com/Sude-/lgogdownloader";
     license = licenses.wtfpl;
     maintainers = with maintainers; [ _0x4A6F ];
diff --git a/pkgs/games/liberation-circuit/default.nix b/pkgs/games/liberation-circuit/default.nix
index 365fbb2983eb..533391082034 100644
--- a/pkgs/games/liberation-circuit/default.nix
+++ b/pkgs/games/liberation-circuit/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Real-time strategy game with programmable units";
+    mainProgram = "liberation-circuit";
     longDescription = ''
       Escape from a hostile computer system! Harvest data to create an armada of battle-processes to aid your escape! Take command directly and play the game as an RTS, or use the game's built-in editor and compiler to write your own unit AI in a simplified version of C.
     '';
diff --git a/pkgs/games/libremines/default.nix b/pkgs/games/libremines/default.nix
index fddc2ba92001..9177e337593e 100644
--- a/pkgs/games/libremines/default.nix
+++ b/pkgs/games/libremines/default.nix
@@ -30,6 +30,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Qt based Minesweeper game";
+    mainProgram = "libremines";
     longDescription = ''
       A Free/Libre and Open Source Software Qt based Minesweeper game available for GNU/Linux, FreeBSD and Windows systems.
     '';
diff --git a/pkgs/games/lincity/default.nix b/pkgs/games/lincity/default.nix
index 50b48f0a1582..e03dda491c4c 100644
--- a/pkgs/games/lincity/default.nix
+++ b/pkgs/games/lincity/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "City simulation game";
+    mainProgram = "xlincity";
     license = licenses.gpl2Plus;
     homepage = "https://sourceforge.net/projects/lincity";
     maintainers = with maintainers; [ ];
diff --git a/pkgs/games/lincity/ng.nix b/pkgs/games/lincity/ng.nix
index 9901255be4dc..2bf4e9c6f8f8 100644
--- a/pkgs/games/lincity/ng.nix
+++ b/pkgs/games/lincity/ng.nix
@@ -77,6 +77,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "City building game";
+    mainProgram = "lincity-ng";
     license = licenses.gpl2;
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/games/linthesia/default.nix b/pkgs/games/linthesia/default.nix
index 0fd252e7ba5d..1200afa4f2f7 100644
--- a/pkgs/games/linthesia/default.nix
+++ b/pkgs/games/linthesia/default.nix
@@ -47,6 +47,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A game of playing music using a MIDI keyboard following a MIDI file";
+    mainProgram = "linthesia";
     inherit (src.meta) homepage;
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
diff --git a/pkgs/games/lugaru/default.nix b/pkgs/games/lugaru/default.nix
index 9d10691fe49c..b989195bd5a3 100644
--- a/pkgs/games/lugaru/default.nix
+++ b/pkgs/games/lugaru/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Third person ninja rabbit fighting game";
+    mainProgram = "lugaru";
     homepage = "https://osslugaru.gitlab.io";
     maintainers = [ ];
     platforms = platforms.linux;
diff --git a/pkgs/games/lzwolf/default.nix b/pkgs/games/lzwolf/default.nix
index 3f1e37c258a3..7e3e932ba5cf 100644
--- a/pkgs/games/lzwolf/default.nix
+++ b/pkgs/games/lzwolf/default.nix
@@ -66,6 +66,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://bitbucket.org/linuxwolf6/lzwolf";
     description = "Enhanced fork of ECWolf, a Wolfenstein 3D source port";
+    mainProgram = "lzwolf";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ tgunnoe ];
diff --git a/pkgs/games/macopix/default.nix b/pkgs/games/macopix/default.nix
index 277752dc91c3..ca9870727b2c 100644
--- a/pkgs/games/macopix/default.nix
+++ b/pkgs/games/macopix/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Mascot Constructive Pilot for X";
+    mainProgram = "macopix";
     homepage = "http://rosegray.sakura.ne.jp/macopix/index-e.html";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
diff --git a/pkgs/games/maelstrom/default.nix b/pkgs/games/maelstrom/default.nix
index 065784d605ef..9c408b2643cf 100644
--- a/pkgs/games/maelstrom/default.nix
+++ b/pkgs/games/maelstrom/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "An arcade-style game resembling Asteroids";
+    mainProgram = "maelstrom";
     license = licenses.gpl2Plus;
     platforms = platforms.all;
     maintainers = with maintainers; [ tmountain ];
diff --git a/pkgs/games/maptool/default.nix b/pkgs/games/maptool/default.nix
index ed505b32eda3..1e95e376825c 100644
--- a/pkgs/games/maptool/default.nix
+++ b/pkgs/games/maptool/default.nix
@@ -21,12 +21,13 @@ let
 
   meta = with lib; {
     description = "Virtual Tabletop for playing roleplaying games with remote players or face to face";
+    mainProgram = "maptool";
     homepage = "https://www.rptools.net/toolbox/maptool/";
     sourceProvenance = with sourceTypes; [
       binaryBytecode
       binaryNativeCode
     ];
-    license = licenses.agpl3;
+    license = licenses.agpl3Plus;
     maintainers = with maintainers; [ rhendric ];
     platforms = [ "x86_64-linux" ];
   };
diff --git a/pkgs/games/mar1d/default.nix b/pkgs/games/mar1d/default.nix
index 6b3fe5feb2de..b069e3fecc46 100644
--- a/pkgs/games/mar1d/default.nix
+++ b/pkgs/games/mar1d/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "First person Super Mario Bros";
+    mainProgram = "MAR1D";
     longDescription = ''
       The original Super Mario Bros as you've never seen it. Step into Mario's
       shoes in this first person clone of the classic Mario game. True to the
@@ -39,7 +40,7 @@ stdenv.mkDerivation rec {
       You must view the world as mario does, as a one dimensional line.
     '';
     homepage = "https://mar1d.com";
-    license = licenses.agpl3;
+    license = licenses.agpl3Only;
     maintainers = with maintainers; [ taeer ];
     platforms = platforms.unix;
   };
diff --git a/pkgs/games/marble-marcher-ce/default.nix b/pkgs/games/marble-marcher-ce/default.nix
index 8bf7da44cadc..ee1422abc5b8 100644
--- a/pkgs/games/marble-marcher-ce/default.nix
+++ b/pkgs/games/marble-marcher-ce/default.nix
@@ -55,6 +55,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A community-developed version of the original Marble Marcher - a fractal physics game";
+    mainProgram = "marble-marcher-ce";
     homepage = "https://michaelmoroz.itch.io/mmce";
     license = with licenses; [
       gpl2Plus # Code
diff --git a/pkgs/games/mari0/default.nix b/pkgs/games/mari0/default.nix
index 6e644245c4fb..f75fbedebd7d 100644
--- a/pkgs/games/mari0/default.nix
+++ b/pkgs/games/mari0/default.nix
@@ -50,6 +50,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Crossover between Super Mario Bros. and Portal";
+    mainProgram = "mari0";
     platforms = platforms.linux;
     license = licenses.mit;
     downloadPage = "https://stabyourself.net/mari0/";
diff --git a/pkgs/games/methane/default.nix b/pkgs/games/methane/default.nix
index 071e1a64b545..5ab8843b33bf 100644
--- a/pkgs/games/methane/default.nix
+++ b/pkgs/games/methane/default.nix
@@ -63,6 +63,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/rombust/methane";
     description = "A clone of Taito's Bubble Bobble arcade game released for Amiga in 1993 by Apache Software";
+    mainProgram = "methane";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ nixinator ];
     platforms = [ "x86_64-linux" ];
diff --git a/pkgs/games/mindustry/default.nix b/pkgs/games/mindustry/default.nix
index d901fba57af7..0562ff40ac2d 100644
--- a/pkgs/games/mindustry/default.nix
+++ b/pkgs/games/mindustry/default.nix
@@ -4,7 +4,7 @@
 , copyDesktopItems
 , fetchFromGitHub
 , gradle
-, jdk
+, jdk17
 , perl
 
 # for arc
@@ -40,6 +40,7 @@ let
   version = "146";
   buildVersion = makeBuildVersion version;
 
+  jdk = jdk17;
   gradleWithJdk = gradle.override { java = jdk; };
 
   selectedGlew = if enableWayland then glew-egl else glew;
diff --git a/pkgs/games/mnemosyne/default.nix b/pkgs/games/mnemosyne/default.nix
index 388aefe567b9..938e6aa53aca 100644
--- a/pkgs/games/mnemosyne/default.nix
+++ b/pkgs/games/mnemosyne/default.nix
@@ -53,6 +53,7 @@ python.pkgs.buildPythonApplication rec {
   meta = {
     homepage = "https://mnemosyne-proj.org/";
     description = "Spaced-repetition software";
+    mainProgram = "mnemosyne";
     longDescription = ''
       The Mnemosyne Project has two aspects:
 
diff --git a/pkgs/games/moon-buggy/default.nix b/pkgs/games/moon-buggy/default.nix
index 87e089eb9571..e0235e70a92d 100644
--- a/pkgs/games/moon-buggy/default.nix
+++ b/pkgs/games/moon-buggy/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A simple character graphics game where you drive some kind of car across the moon's surface";
+    mainProgram = "moon-buggy";
     license = lib.licenses.gpl2;
     maintainers = [ lib.maintainers.rybern ];
     platforms = lib.platforms.linux ++ lib.platforms.darwin;
diff --git a/pkgs/games/mrrescue/default.nix b/pkgs/games/mrrescue/default.nix
index a020a6b34f1b..17e24d3af1a3 100644
--- a/pkgs/games/mrrescue/default.nix
+++ b/pkgs/games/mrrescue/default.nix
@@ -49,6 +49,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Arcade-style fire fighting game";
+    mainProgram = "mrrescue";
     maintainers = with maintainers; [ ];
     platforms = platforms.linux;
     license = licenses.zlib;
diff --git a/pkgs/games/n2048/default.nix b/pkgs/games/n2048/default.nix
index ec3a4e2bbeec..2ae937ee6be2 100644
--- a/pkgs/games/n2048/default.nix
+++ b/pkgs/games/n2048/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
   '';
   meta = with lib; {
     description = "Console implementation of 2048 game";
+    mainProgram = "n2048";
     license = licenses.bsd2;
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/games/naev/default.nix b/pkgs/games/naev/default.nix
index 6be1d6700fc4..962497bb73c0 100644
--- a/pkgs/games/naev/default.nix
+++ b/pkgs/games/naev/default.nix
@@ -26,13 +26,13 @@
 
 stdenv.mkDerivation rec {
   pname = "naev";
-  version = "0.11.3";
+  version = "0.11.4";
 
   src = fetchFromGitHub {
     owner = "naev";
     repo = "naev";
     rev = "v${version}";
-    sha256 = "sha256-2n7i5qCFdpjBpjeMv6aCd0zyD4c60FciHmSafbArnms=";
+    sha256 = "sha256-Cyun9BxIcv5V3HbMuFEhbYZnAuneTUwztc+ZlNaTp70=";
     fetchSubmodules = true;
   };
 
@@ -75,6 +75,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "2D action/rpg space game";
+    mainProgram = "naev";
     homepage = "http://www.naev.org";
     license = lib.licenses.gpl3Plus;
     maintainers = with lib.maintainers; [ ralismark ];
diff --git a/pkgs/games/nethack/default.nix b/pkgs/games/nethack/default.nix
index fbbdfeabe31b..e45862b3025b 100644
--- a/pkgs/games/nethack/default.nix
+++ b/pkgs/games/nethack/default.nix
@@ -61,6 +61,7 @@ in stdenv.mkDerivation rec {
       -e 's,^WINTTYLIB=.*,WINTTYLIB=-lncurses,' \
       -i sys/unix/hints/linux
     sed \
+      -e 's,^#WANT_WIN_CURSES=1$,WANT_WIN_CURSES=1,' \
       -e 's,^CC=.*$,CC=${stdenv.cc.targetPrefix}cc,' \
       -e 's,^HACKDIR=.*$,HACKDIR=\$(PREFIX)/games/lib/\$(GAME)dir,' \
       -e 's,^SHELLDIR=.*$,SHELLDIR=\$(PREFIX)/games,' \
@@ -99,7 +100,8 @@ in stdenv.mkDerivation rec {
     popd
   '';
 
-  enableParallelBuilding = true;
+  # https://github.com/NixOS/nixpkgs/issues/294751
+  enableParallelBuilding = false;
 
   preFixup = lib.optionalString qtMode ''
     wrapQtApp "$out/games/nethack"
diff --git a/pkgs/games/netris/default.nix b/pkgs/games/netris/default.nix
index ff898128ca06..620f21f02902 100644
--- a/pkgs/games/netris/default.nix
+++ b/pkgs/games/netris/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A free networked version of T*tris";
+    mainProgram = "netris";
     license = licenses.gpl2;
     maintainers = with maintainers; [ patryk27 ];
     platforms = platforms.linux;
diff --git a/pkgs/games/newtonwars/default.nix b/pkgs/games/newtonwars/default.nix
index 0be3d9bf7a0e..5541d9ade7d1 100644
--- a/pkgs/games/newtonwars/default.nix
+++ b/pkgs/games/newtonwars/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A space battle game with gravity as the main theme";
+    mainProgram = "nw";
     maintainers = with maintainers; [ pSub ];
     platforms = platforms.linux;
     license = licenses.mit;
diff --git a/pkgs/games/nile/default.nix b/pkgs/games/nile/default.nix
index f1117f2fba89..b83eda87f934 100644
--- a/pkgs/games/nile/default.nix
+++ b/pkgs/games/nile/default.nix
@@ -50,6 +50,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "Unofficial Amazon Games client";
+    mainProgram = "nile";
     homepage = "https://github.com/imLinguin/nile";
     license = with licenses; [ gpl3 ];
     maintainers = with maintainers; [ aidalgol ];
diff --git a/pkgs/games/ninvaders/default.nix b/pkgs/games/ninvaders/default.nix
index c3f455b71b07..5fe9eb81be61 100644
--- a/pkgs/games/ninvaders/default.nix
+++ b/pkgs/games/ninvaders/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Space Invaders clone based on ncurses";
+    mainProgram = "ninvaders";
     homepage = "https://ninvaders.sourceforge.net/";
     license = licenses.gpl2;
     maintainers = with maintainers; [ _1000101 ];
diff --git a/pkgs/games/njam/default.nix b/pkgs/games/njam/default.nix
index 971cd1d0726c..8fce2a1ca8cd 100644
--- a/pkgs/games/njam/default.nix
+++ b/pkgs/games/njam/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://trackballs.sourceforge.net/";
     description = "Cross-platform pacman-like game";
+    mainProgram = "njam";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
   };
diff --git a/pkgs/games/npush/default.nix b/pkgs/games/npush/default.nix
index 7f4afb7b89f3..9fc465da38a8 100644
--- a/pkgs/games/npush/default.nix
+++ b/pkgs/games/npush/default.nix
@@ -42,6 +42,7 @@ stdenv.mkDerivation rec {
     broken = stdenv.isDarwin;
     homepage = "https://npush.sourceforge.net/";
     description = "A Sokoban-like game";
+    mainProgram = "npush";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ AndersonTorres ];
     platforms = with platforms; unix;
diff --git a/pkgs/games/nsnake/default.nix b/pkgs/games/nsnake/default.nix
index aa3f568ec009..a4ac391690ec 100644
--- a/pkgs/games/nsnake/default.nix
+++ b/pkgs/games/nsnake/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "ncurses based snake game for the terminal";
+    mainProgram = "nsnake";
     homepage = "https://github.com/alexdantas/nSnake";
     license = lib.licenses.gpl3Plus;
     maintainers = with lib.maintainers; [ clerie ];
diff --git a/pkgs/games/nudoku/default.nix b/pkgs/games/nudoku/default.nix
index d3e3d039d986..11e6fc0d8f28 100644
--- a/pkgs/games/nudoku/default.nix
+++ b/pkgs/games/nudoku/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "An ncurses based sudoku game";
+    mainProgram = "nudoku";
     homepage = "http://jubalh.github.io/nudoku/";
     license = licenses.gpl3;
     platforms = platforms.all;
diff --git a/pkgs/games/oh-my-git/default.nix b/pkgs/games/oh-my-git/default.nix
index f2ac8b4289c6..9fe0fb9ac420 100644
--- a/pkgs/games/oh-my-git/default.nix
+++ b/pkgs/games/oh-my-git/default.nix
@@ -127,6 +127,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://ohmygit.org/";
     description = "An interactive Git learning game";
+    mainProgram = "oh-my-git";
     license = with licenses; [ blueOak100 ];
     platforms   = [ "x86_64-linux" ];
     maintainers = with maintainers; [ jojosch ];
diff --git a/pkgs/games/onscripter-en/default.nix b/pkgs/games/onscripter-en/default.nix
index aaa14e6b2bd0..edc9e20235ff 100644
--- a/pkgs/games/onscripter-en/default.nix
+++ b/pkgs/games/onscripter-en/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     broken = stdenv.isDarwin;
     description = "Japanese visual novel scripting engine";
+    mainProgram = "onscripter-en";
     homepage = "http://unclemion.com/onscripter/";
     license = licenses.gpl2;
     platforms = platforms.unix;
diff --git a/pkgs/games/opendune/default.nix b/pkgs/games/opendune/default.nix
index 32e1ef4fca93..6df2a5b7a206 100644
--- a/pkgs/games/opendune/default.nix
+++ b/pkgs/games/opendune/default.nix
@@ -39,6 +39,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Dune, Reinvented";
+    mainProgram = "opendune";
     homepage = "https://github.com/OpenDUNE/OpenDUNE";
     license = licenses.gpl2;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/games/opendungeons/default.nix b/pkgs/games/opendungeons/default.nix
index 10bcf19a53e7..8755a07169bf 100644
--- a/pkgs/games/opendungeons/default.nix
+++ b/pkgs/games/opendungeons/default.nix
@@ -64,6 +64,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "An open source, real time strategy game sharing game elements with the Dungeon Keeper series and Evil Genius";
+    mainProgram = "opendungeons";
     homepage = "https://opendungeons.github.io";
     license = with licenses; [ gpl3Plus zlib mit cc-by-sa-30 cc0 ofl cc-by-30 ];
     platforms = platforms.linux;
diff --git a/pkgs/games/openspades/default.nix b/pkgs/games/openspades/default.nix
index b72f3877a461..0f9060d235d7 100644
--- a/pkgs/games/openspades/default.nix
+++ b/pkgs/games/openspades/default.nix
@@ -59,6 +59,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A compatible client of Ace of Spades 0.75";
+    mainProgram = "openspades";
     homepage    = "https://github.com/yvt/openspades/";
     license     = licenses.gpl3;
     platforms   = platforms.all;
diff --git a/pkgs/games/openttd/default.nix b/pkgs/games/openttd/default.nix
index 6122b586770e..69a2c75fa463 100644
--- a/pkgs/games/openttd/default.nix
+++ b/pkgs/games/openttd/default.nix
@@ -80,6 +80,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = ''Open source clone of the Microprose game "Transport Tycoon Deluxe"'';
+    mainProgram = "openttd";
     longDescription = ''
       OpenTTD is a transportation economics simulator. In single player mode,
       players control a transportation business, and use rail, road, sea, and air
diff --git a/pkgs/games/openttd/nml.nix b/pkgs/games/openttd/nml.nix
index 8ec8adf5f22b..65dddce236e3 100644
--- a/pkgs/games/openttd/nml.nix
+++ b/pkgs/games/openttd/nml.nix
@@ -23,6 +23,7 @@ python3.pkgs.buildPythonApplication rec {
   meta = with lib; {
     homepage = "http://openttdcoop.org/";
     description = "Compiler for OpenTTD NML files";
+    mainProgram = "nmlc";
     license = licenses.gpl2;
     maintainers = with maintainers; [ ToxicFrog ];
   };
diff --git a/pkgs/games/opentyrian/default.nix b/pkgs/games/opentyrian/default.nix
index f01874ce9435..1f0e9ae18a64 100644
--- a/pkgs/games/opentyrian/default.nix
+++ b/pkgs/games/opentyrian/default.nix
@@ -37,6 +37,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = ''Open source port of the game "Tyrian"'';
+    mainProgram = "opentyrian";
     homepage = "https://github.com/opentyrian/opentyrian";
     # This does not account of Tyrian data.
     # license = lib.licenses.gpl2;
diff --git a/pkgs/games/openxcom/default.nix b/pkgs/games/openxcom/default.nix
index c09bd5c28f2f..3ae8e23605da 100644
--- a/pkgs/games/openxcom/default.nix
+++ b/pkgs/games/openxcom/default.nix
@@ -46,6 +46,7 @@ stdenv.mkDerivation {
 
   meta = {
     description = "Open source clone of UFO: Enemy Unknown";
+    mainProgram = "openxcom";
     homepage = "https://openxcom.org";
     license = lib.licenses.gpl3;
     maintainers = with lib.maintainers; [ cpages ];
diff --git a/pkgs/games/orthorobot/default.nix b/pkgs/games/orthorobot/default.nix
index 10bf3f9268e6..bd491ce5c913 100644
--- a/pkgs/games/orthorobot/default.nix
+++ b/pkgs/games/orthorobot/default.nix
@@ -68,6 +68,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Recharge the robot";
+    mainProgram = "orthorobot";
     maintainers = with maintainers; [ leenaars ];
     platforms = platforms.linux;
     license = licenses.free;
diff --git a/pkgs/games/osu-lazer/bin.nix b/pkgs/games/osu-lazer/bin.nix
index dc599bf34f8b..a7c6ac667411 100644
--- a/pkgs/games/osu-lazer/bin.nix
+++ b/pkgs/games/osu-lazer/bin.nix
@@ -7,22 +7,22 @@
 
 let
   pname = "osu-lazer-bin";
-  version = "2024.312.0";
+  version = "2024.312.1";
 
   src = {
     aarch64-darwin = fetchzip {
       url = "https://github.com/ppy/osu/releases/download/${version}/osu.app.Apple.Silicon.zip";
-      hash = "sha256-RwOSB/WcAqR8j0xw1QUji1IEn7iHXcHj2xOcKjnpl00=";
+      hash = "sha256-1MsZ9gHTZKArXk1b6XEBNk/ZWAUHKjbVrrn++dLulaQ=";
       stripRoot = false;
     };
     x86_64-darwin = fetchzip {
       url = "https://github.com/ppy/osu/releases/download/${version}/osu.app.Intel.zip";
-      hash = "sha256-Wnr7CtQIfugKrGsl72NXdHJIsF7rRNhzjV1Q+gRHK10=";
+      hash = "sha256-Xgl8lrMsL9O9YHbEx3Iwwh9fpLOnYZN0Kt28F5X5OwE=";
       stripRoot = false;
     };
     x86_64-linux = fetchurl {
       url = "https://github.com/ppy/osu/releases/download/${version}/osu.AppImage";
-      hash = "sha256-kWNobQXGGS2TWvPkhfheqnlbijfnxfcP36ANUeN6bW0=";
+      hash = "sha256-1dzgs1p3/pf4eCdKvQ9JxowN+oBPBNaZv5e6qHeFPEM=";
     };
   }.${stdenv.system} or (throw "${pname}-${version}: ${stdenv.system} is unsupported.");
 
diff --git a/pkgs/games/osu-lazer/default.nix b/pkgs/games/osu-lazer/default.nix
index e51b451847ae..f40ea0634211 100644
--- a/pkgs/games/osu-lazer/default.nix
+++ b/pkgs/games/osu-lazer/default.nix
@@ -17,13 +17,13 @@
 
 buildDotnetModule rec {
   pname = "osu-lazer";
-  version = "2024.312.0";
+  version = "2024.312.1";
 
   src = fetchFromGitHub {
     owner = "ppy";
     repo = "osu";
     rev = version;
-    hash = "sha256-54georjON2Fu/kj4w4SeW0BR/aHomGrKeicJ9N4/Y9s=";
+    hash = "sha256-7xxuVcBtC79EiDz+/x0IqbPofpgwMdz87XjRLqkCBb8=";
   };
 
   projectFile = "osu.Desktop/osu.Desktop.csproj";
diff --git a/pkgs/games/osu-lazer/deps.nix b/pkgs/games/osu-lazer/deps.nix
index 8985785a4da9..23f435b7280b 100644
--- a/pkgs/games/osu-lazer/deps.nix
+++ b/pkgs/games/osu-lazer/deps.nix
@@ -147,8 +147,8 @@
   (fetchNuGet { pname = "ppy.Veldrid.MetalBindings"; version = "4.9.5-gc8dfc5ca19"; sha256 = "0i6bb79kprrmsfphjq26rgxqfvvf12pxr7dfwcq448dw2xgq6rpy"; })
   (fetchNuGet { pname = "ppy.Veldrid.OpenGLBindings"; version = "4.9.5-gc8dfc5ca19"; sha256 = "06a4kkfidr7yj60xl3k4yfawz4wzwkkjpaki8fmsanif1yhz69l8"; })
   (fetchNuGet { pname = "ppy.Veldrid.SPIRV"; version = "1.0.15-gca6cec7843"; sha256 = "09pi4c91ljavilw9kx7kzhcax7ar4zk7zy1qwvqfrqsgxznvyxa1"; })
-  (fetchNuGet { pname = "Realm"; version = "11.7.0"; sha256 = "1vp8rparpcv7rbqx7m55xcji941a6qjamxhb943fgfkjf196z69w"; })
-  (fetchNuGet { pname = "Realm.PlatformHelpers"; version = "11.7.0"; sha256 = "1a7kaap5ad3n7cgf07xa9yc4c1qi7cf2zj3f5hdv7fp84bdzmysg"; })
+  (fetchNuGet { pname = "Realm"; version = "11.5.0"; sha256 = "0r7j5si3n4ncq8xnnjk1q5jjqbj0s1w3ps124y8pgqd14dzvch6a"; })
+  (fetchNuGet { pname = "Realm.PlatformHelpers"; version = "11.5.0"; sha256 = "1ggbmlsf04pxnh1k86hs0wxnvcw0ja2xnn6358qmrp826km0w1g9"; })
   (fetchNuGet { pname = "Remotion.Linq"; version = "2.2.0"; sha256 = "1y46ni0xswmmiryp8sydjgryafwn458dr91f9xn653w73kdyk4xf"; })
   (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
   (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
@@ -168,11 +168,8 @@
   (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
   (fetchNuGet { pname = "runtime.any.System.Threading.Timer"; version = "4.3.0"; sha256 = "0aw4phrhwqz9m61r79vyfl5la64bjxj8l34qnrcwb28v49fg2086"; })
   (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
-  (fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0rwpqngkqiapqc5c2cpkj7idhngrgss5qpnqg0yh40mbyflcxf8i"; })
   (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
-  (fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1n06gxwlinhs0w7s8a94r1q3lwqzvynxwd3mp10ws9bg6gck8n4r"; })
   (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
-  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0404wqrc7f2yc0wxv71y3nnybvqx8v4j9d47hlscxy759a525mc3"; })
   (fetchNuGet { pname = "runtime.native.System"; version = "4.0.0"; sha256 = "1ppk69xk59ggacj9n7g6fyxvzmk1g5p4fkijm0d7xqfkig98qrkf"; })
   (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
   (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
@@ -180,22 +177,14 @@
   (fetchNuGet { pname = "runtime.native.System.Net.Security"; version = "4.3.0"; sha256 = "0dnqjhw445ay3chpia9p6vy4w2j6s9vy3hxszqvdanpvvyaxijr3"; })
   (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "1b61p6gw1m02cc1ry996fl49liiwky6181dzr873g9ds92zl326q"; })
   (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
-  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0zy5r25jppz48i2bkg8b9lfig24xixg6nm3xyr1379zdnqnpm8f6"; })
   (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
-  (fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "096ch4n4s8k82xga80lfmpimpzahd2ip1mgwdqgar0ywbbl6x438"; })
   (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
-  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1dm8fifl7rf1gy7lnwln78ch4rw54g0pl5g1c189vawavll7p6rj"; })
   (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple"; version = "4.3.0"; sha256 = "10yc8jdrwgcl44b4g93f1ds76b176bajd3zqi2faf5rvh1vy9smi"; })
   (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
-  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1m9z1k9kzva9n9kwinqxl97x2vgl79qhqjlv17k9s2ymcyv2bwr6"; })
   (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
-  (fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1cpx56mcfxz7cpn57wvj18sjisvzq8b5vd9rw16ihd2i6mcp3wa1"; })
   (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
-  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "15gsm1a8jdmgmf8j5v1slfz8ks124nfdhk2vxs2rw3asrxalg8hi"; })
   (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
-  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "0q0n5q1r1wnqmr5i5idsrd9ywl33k0js4pngkwq9p368mbxp8x1w"; })
   (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
-  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.2"; sha256 = "1x0g58pbpjrmj2x2qw17rdwwnrcl0wvim2hdwz48lixvwvp22n9c"; })
   (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
   (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.0"; sha256 = "1pfpkvc6x2if8zbdzg9rnc5fx51yllprl8zkm5npni2k50lisy80"; })
   (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
@@ -258,7 +247,7 @@
   (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
   (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
   (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
-  (fetchNuGet { pname = "System.Net.Security"; version = "4.3.2"; sha256 = "1aw1ca1vssqrillrh4qkarx0lxwc8wcaqdkfdima8376wb98j2q8"; })
+  (fetchNuGet { pname = "System.Net.Security"; version = "4.3.0"; sha256 = "1aa5igz31ivk6kpgsrwck3jccab7wd88wr52lddmgypmbh9mmf87"; })
   (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
   (fetchNuGet { pname = "System.Net.WebHeaderCollection"; version = "4.3.0"; sha256 = "0ms3ddjv1wn8sqa5qchm245f3vzzif6l6fx5k92klqpn7zf4z562"; })
   (fetchNuGet { pname = "System.Net.WebSockets"; version = "4.3.0"; sha256 = "1gfj800078kggcgl0xyl00a6y5k4wwh2k2qm69rjy22wbmq7fy4p"; })
diff --git a/pkgs/games/pacvim/default.nix b/pkgs/games/pacvim/default.nix
index a4347550c1d2..a4458b0d085f 100644
--- a/pkgs/games/pacvim/default.nix
+++ b/pkgs/games/pacvim/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     homepage = "https://github.com/jmoon018/PacVim";
     description = "A game that teaches you vim commands";
+    mainProgram = "pacvim";
     maintainers = with maintainers; [ infinisil ];
     license = licenses.lgpl3;
     platforms = platforms.unix;
diff --git a/pkgs/games/papermc/derivation.nix b/pkgs/games/papermc/derivation.nix
index f244031f0590..50796407c297 100644
--- a/pkgs/games/papermc/derivation.nix
+++ b/pkgs/games/papermc/derivation.nix
@@ -1,18 +1,18 @@
 { lib, stdenvNoCC, fetchurl, makeBinaryWrapper, jre, version, hash }:
 
-stdenvNoCC.mkDerivation {
+stdenvNoCC.mkDerivation (finalAttrs: {
   pname = "papermc";
-  inherit version;
+  inherit version hash;
 
   src =
     let
-      version-split = lib.strings.splitString "-" version;
+      version-split = lib.strings.splitString "-" finalAttrs.version;
       mcVersion = builtins.elemAt version-split 0;
       buildNum = builtins.elemAt version-split 1;
     in
     fetchurl {
-      url = "https://papermc.io/api/v2/projects/paper/versions/${mcVersion}/builds/${buildNum}/downloads/paper-${version}.jar";
-      inherit hash;
+      url = "https://papermc.io/api/v2/projects/paper/versions/${mcVersion}/builds/${buildNum}/downloads/paper-${mcVersion}-${buildNum}.jar";
+      inherit (finalAttrs) hash;
     };
 
   installPhase = ''
@@ -47,4 +47,4 @@ stdenvNoCC.mkDerivation {
     maintainers = with lib.maintainers; [ aaronjanse neonfuz MayNiklas ];
     mainProgram = "minecraft-server";
   };
-}
+})
diff --git a/pkgs/games/pegasus-frontend/default.nix b/pkgs/games/pegasus-frontend/default.nix
index 051c8ccbe542..a6459943a98b 100644
--- a/pkgs/games/pegasus-frontend/default.nix
+++ b/pkgs/games/pegasus-frontend/default.nix
@@ -43,6 +43,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A cross platform, customizable graphical frontend for launching emulators and managing your game collection";
+    mainProgram = "pegasus-fe";
     homepage = "https://pegasus-frontend.org/";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ tengkuizdihar ];
diff --git a/pkgs/games/performous/default.nix b/pkgs/games/performous/default.nix
index 1305d8409f97..20a40922544e 100644
--- a/pkgs/games/performous/default.nix
+++ b/pkgs/games/performous/default.nix
@@ -78,6 +78,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Karaoke, band and dancing game";
+    mainProgram = "performous";
     homepage = "https://performous.org/";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ wegank ];
diff --git a/pkgs/games/pingus/default.nix b/pkgs/games/pingus/default.nix
index 9dd219500390..adf393de9ed5 100644
--- a/pkgs/games/pingus/default.nix
+++ b/pkgs/games/pingus/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A puzzle game with mechanics similar to Lemmings";
+    mainProgram = "pingus";
     platforms = lib.platforms.linux;
     maintainers = [lib.maintainers.raskin];
     license = lib.licenses.gpl3;
diff --git a/pkgs/games/pokerth/default.nix b/pkgs/games/pokerth/default.nix
index 021fe4100eae..642cd7ad8cb0 100644
--- a/pkgs/games/pokerth/default.nix
+++ b/pkgs/games/pokerth/default.nix
@@ -67,6 +67,7 @@ mkDerivation rec {
   meta = with lib; {
     homepage = "https://www.pokerth.net";
     description = "Poker game ${target}";
+    mainProgram = "pokerth";
     license = licenses.gpl3;
     maintainers = with maintainers; [ obadz yana ];
     platforms = platforms.all;
diff --git a/pkgs/games/pokete/default.nix b/pkgs/games/pokete/default.nix
index 73ff661e9d09..3a4d9a3c2031 100644
--- a/pkgs/games/pokete/default.nix
+++ b/pkgs/games/pokete/default.nix
@@ -49,6 +49,7 @@ python3.pkgs.buildPythonApplication rec {
 
   meta = with lib; {
     description = "A terminal based Pokemon like game";
+    mainProgram = "pokete";
     homepage = "https://lxgr-linux.github.io/pokete";
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ fgaz ];
diff --git a/pkgs/games/powermanga/default.nix b/pkgs/games/powermanga/default.nix
index 5f82eaebb8eb..0b0d27a0bead 100644
--- a/pkgs/games/powermanga/default.nix
+++ b/pkgs/games/powermanga/default.nix
@@ -44,6 +44,7 @@ stdenv.mkDerivation (finalAttrs: {
     homepage = "https://linux.tlk.fr/games/Powermanga/";
     downloadPage = "https://linux.tlk.fr/games/Powermanga/download/";
     description = "An arcade 2D shoot-em-up game";
+    mainProgram = "powermanga";
     longDescription = ''
       Powermanga is an arcade 2D shoot-em-up game with 41 levels and more than
       200 sprites. It runs in 320x200 or 640x400 pixels, with Window mode or
diff --git a/pkgs/games/principia/default.nix b/pkgs/games/principia/default.nix
index 5074b3582c3e..e97fc509c5b0 100644
--- a/pkgs/games/principia/default.nix
+++ b/pkgs/games/principia/default.nix
@@ -59,6 +59,7 @@ stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     changelog = "https://principia-web.se/wiki/Changelog#${lib.replaceStrings ["."] ["-"] finalAttrs.version}";
     description = "Physics-based sandbox game";
+    mainProgram = "principia";
     homepage = "https://principia-web.se/";
     downloadPage = "https://principia-web.se/download";
     license = licenses.bsd3;
diff --git a/pkgs/games/prismlauncher/default.nix b/pkgs/games/prismlauncher/default.nix
index c4571ceaa71b..058516cdc9c6 100644
--- a/pkgs/games/prismlauncher/default.nix
+++ b/pkgs/games/prismlauncher/default.nix
@@ -1,7 +1,7 @@
 { lib
 , stdenv
 , fetchFromGitHub
-, canonicalize-jars-hook
+, stripJavaArchivesHook
 , cmake
 , cmark
 , Cocoa
@@ -40,7 +40,7 @@ stdenv.mkDerivation (finalAttrs: {
     hash = "sha256-4VsoxZzi/EfEsnDvvwzg2xhj7j5B+k3gvaSqwJFDweE=";
   };
 
-  nativeBuildInputs = [ extra-cmake-modules cmake jdk17 ninja canonicalize-jars-hook ];
+  nativeBuildInputs = [ extra-cmake-modules cmake jdk17 ninja stripJavaArchivesHook ];
   buildInputs =
     [
       qtbase
diff --git a/pkgs/games/pro-office-calculator/default.nix b/pkgs/games/pro-office-calculator/default.nix
index 381a6e8742b0..d49bb69cec0c 100644
--- a/pkgs/games/pro-office-calculator/default.nix
+++ b/pkgs/games/pro-office-calculator/default.nix
@@ -16,6 +16,7 @@ mkDerivation rec {
 
   meta = with lib; {
     description = "A completely normal office calculator";
+    mainProgram = "procalc";
     homepage = "https://proofficecalculator.com/";
     maintainers = [ maintainers.pmiddend ];
     platforms = platforms.linux;
diff --git a/pkgs/games/pysolfc/default.nix b/pkgs/games/pysolfc/default.nix
index 7315d5e2724f..fc0f95f6d831 100644
--- a/pkgs/games/pysolfc/default.nix
+++ b/pkgs/games/pysolfc/default.nix
@@ -60,6 +60,7 @@ buildPythonApplication rec {
 
   meta = with lib; {
     description = "A collection of more than 1000 solitaire card games";
+    mainProgram = "pysol.py";
     homepage = "https://pysolfc.sourceforge.io";
     license = licenses.gpl3;
     maintainers = with maintainers; [ kierdavis ];
diff --git a/pkgs/games/qgo/default.nix b/pkgs/games/qgo/default.nix
index ec7986c6a36b..6493dff2d3c1 100644
--- a/pkgs/games/qgo/default.nix
+++ b/pkgs/games/qgo/default.nix
@@ -13,6 +13,7 @@ mkDerivation {
 
   meta = with lib; {
     description = "A Go client based on Qt5";
+    mainProgram = "qgo";
     longDescription = ''
       qGo is a Go Client based on Qt 5. It supports playing online at
       IGS-compatible servers (including some special tweaks for WING and LGS,
diff --git a/pkgs/games/qqwing/default.nix b/pkgs/games/qqwing/default.nix
index 81a10b9ea2af..95764a767aa7 100644
--- a/pkgs/games/qqwing/default.nix
+++ b/pkgs/games/qqwing/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://qqwing.com";
     description = "Sudoku generating and solving software";
+    mainProgram = "qqwing";
     license = licenses.gpl2;
     platforms = platforms.unix;
     maintainers = with maintainers; [ ];
diff --git a/pkgs/games/qtads/default.nix b/pkgs/games/qtads/default.nix
index 79a548a7134e..aef921900ae7 100644
--- a/pkgs/games/qtads/default.nix
+++ b/pkgs/games/qtads/default.nix
@@ -20,6 +20,7 @@ mkDerivation rec {
   meta = with lib; {
     homepage = "https://realnc.github.io/qtads/";
     description = "Multimedia interpreter for TADS games";
+    mainProgram = "qtads";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ orivej ];
diff --git a/pkgs/games/quakespasm/vulkan.nix b/pkgs/games/quakespasm/vulkan.nix
index e9786a001e3a..81c49e5a017c 100644
--- a/pkgs/games/quakespasm/vulkan.nix
+++ b/pkgs/games/quakespasm/vulkan.nix
@@ -49,6 +49,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Vulkan Quake port based on QuakeSpasm";
+    mainProgram = "vkquake";
     homepage = src.meta.homepage;
     longDescription = ''
       vkQuake is a Quake 1 port using Vulkan instead of OpenGL for rendering.
diff --git a/pkgs/games/quantumminigolf/default.nix b/pkgs/games/quantumminigolf/default.nix
index 7ecafa5eab65..803529b7f638 100644
--- a/pkgs/games/quantumminigolf/default.nix
+++ b/pkgs/games/quantumminigolf/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Quantum mechanics-based minigolf-like game";
+    mainProgram = "quantumminigolf";
     license = licenses.gpl2;
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/games/racer/default.nix b/pkgs/games/racer/default.nix
index bdb56c85dbff..c6d9f654a480 100644
--- a/pkgs/games/racer/default.nix
+++ b/pkgs/games/racer/default.nix
@@ -25,6 +25,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Car racing game";
+    mainProgram = "racer";
     homepage = "http://hippo.nipax.cz/download.en.php";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
diff --git a/pkgs/games/randtype/default.nix b/pkgs/games/randtype/default.nix
index 97993a5ffdac..f7e6ee06ceac 100644
--- a/pkgs/games/randtype/default.nix
+++ b/pkgs/games/randtype/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "semi-random text typer";
+    mainProgram = "randtype";
     homepage = "https://benkibbey.wordpress.com/randtype/";
     maintainers = with maintainers; [ dandellion ];
     license = licenses.gpl2Only;
diff --git a/pkgs/games/riko4/default.nix b/pkgs/games/riko4/default.nix
index 7014bf9ca21b..e5e0738d8b0e 100644
--- a/pkgs/games/riko4/default.nix
+++ b/pkgs/games/riko4/default.nix
@@ -59,6 +59,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/incinirate/Riko4";
     description = "Fantasy console for pixel art game development";
+    mainProgram = "riko4";
     license = licenses.mit;
     maintainers = with maintainers; [ CrazedProgrammer ];
   };
diff --git a/pkgs/games/rocksndiamonds/default.nix b/pkgs/games/rocksndiamonds/default.nix
index feef993207ea..6b1d51ab290b 100644
--- a/pkgs/games/rocksndiamonds/default.nix
+++ b/pkgs/games/rocksndiamonds/default.nix
@@ -50,6 +50,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Scrolling tile-based arcade style puzzle game";
+    mainProgram = "rocksndiamonds";
     homepage = "https://www.artsoft.org/rocksndiamonds/";
     license = licenses.gpl2;
     platforms = platforms.linux;
diff --git a/pkgs/games/rogue/default.nix b/pkgs/games/rogue/default.nix
index 4865b85bbe38..a30b856eed9c 100644
--- a/pkgs/games/rogue/default.nix
+++ b/pkgs/games/rogue/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://rogue.rogueforge.net/rogue-5-4/";
     description = "The final version of the original Rogue game developed for the UNIX operating system";
+    mainProgram = "rogue";
     platforms = platforms.all;
     license = licenses.bsd3;
     maintainers = [ maintainers.eelco ];
diff --git a/pkgs/games/rott/default.nix b/pkgs/games/rott/default.nix
index 591275631fa9..534f14bcb289 100644
--- a/pkgs/games/rott/default.nix
+++ b/pkgs/games/rott/default.nix
@@ -67,6 +67,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "SDL port of Rise of the Triad";
+    mainProgram = "rott";
     homepage = "https://icculus.org/rott/";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ sander ];
diff --git a/pkgs/games/rpg-cli/default.nix b/pkgs/games/rpg-cli/default.nix
index cad3b539d9ad..b72a4f78008e 100644
--- a/pkgs/games/rpg-cli/default.nix
+++ b/pkgs/games/rpg-cli/default.nix
@@ -18,6 +18,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "Your filesystem as a dungeon";
+    mainProgram = "rpg-cli";
     homepage = "https://github.com/facundoolano/rpg-cli";
     license = licenses.mit;
     maintainers = with maintainers; [ lom ];
diff --git a/pkgs/games/rrootage/default.nix b/pkgs/games/rrootage/default.nix
index a5b656a4044a..f1ad7b7e978d 100644
--- a/pkgs/games/rrootage/default.nix
+++ b/pkgs/games/rrootage/default.nix
@@ -74,6 +74,7 @@ in stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Abstract shooter created by Kenta Cho";
+    mainProgram = "rrootage";
     homepage = "https://rrootage.sourceforge.net/";
     license = licenses.bsd2;
     maintainers = with maintainers; [ fgaz ];
diff --git a/pkgs/games/runelite/default.nix b/pkgs/games/runelite/default.nix
index f6d205d473bc..d9a5da1a2af1 100644
--- a/pkgs/games/runelite/default.nix
+++ b/pkgs/games/runelite/default.nix
@@ -3,13 +3,19 @@
 , makeDesktopItem
 , makeWrapper
 , maven
+, jdk17
 , jre
 , xorg
 , gitUpdater
 , libGL
 }:
 
-maven.buildMavenPackage rec {
+let
+  mavenJdk17 = maven.override {
+    jdk = jdk17;
+  };
+in
+mavenJdk17.buildMavenPackage rec {
   pname = "runelite";
   version = "2.6.13";
 
diff --git a/pkgs/games/scummvm/default.nix b/pkgs/games/scummvm/default.nix
index 4d40dcc7686b..bc92c3abbda3 100644
--- a/pkgs/games/scummvm/default.nix
+++ b/pkgs/games/scummvm/default.nix
@@ -44,6 +44,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Program to run certain classic graphical point-and-click adventure games (such as Monkey Island)";
+    mainProgram = "scummvm";
     homepage = "https://www.scummvm.org/";
     license = licenses.gpl2;
     maintainers = [ maintainers.peterhoeg ];
diff --git a/pkgs/games/sfrotz/default.nix b/pkgs/games/sfrotz/default.nix
index e90f1639e170..1282e4d7258e 100644
--- a/pkgs/games/sfrotz/default.nix
+++ b/pkgs/games/sfrotz/default.nix
@@ -46,6 +46,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     description =
       "Interpreter for Infocom and other Z-Machine games (SDL interface)";
+    mainProgram = "sfrotz";
     longDescription = ''
       Frotz is a Z-Machine interpreter. The Z-machine is a virtual machine
       designed by Infocom to run all of their text adventures. It went through
diff --git a/pkgs/games/shticker-book-unwritten/default.nix b/pkgs/games/shticker-book-unwritten/default.nix
index f19fe258f70b..9edefc940346 100644
--- a/pkgs/games/shticker-book-unwritten/default.nix
+++ b/pkgs/games/shticker-book-unwritten/default.nix
@@ -18,6 +18,7 @@ in buildFHSEnv {
 
   meta = with lib; {
     description = "Minimal CLI launcher for the Toontown Rewritten MMORPG";
+    mainProgram = "shticker_book_unwritten";
     homepage = "https://github.com/JonathanHelianthicusDoe/shticker_book_unwritten";
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.reedrw ];
diff --git a/pkgs/games/sienna/default.nix b/pkgs/games/sienna/default.nix
index c6f8db0ea9e7..bee862ba2a08 100644
--- a/pkgs/games/sienna/default.nix
+++ b/pkgs/games/sienna/default.nix
@@ -41,6 +41,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Fast-paced one button platformer";
+    mainProgram = "sienna";
     homepage = "https://tangramgames.dk/games/sienna";
     maintainers = with maintainers; [ leenaars ];
     platforms = platforms.linux;
diff --git a/pkgs/games/sil-q/default.nix b/pkgs/games/sil-q/default.nix
index 9127d4e9afc0..e029d77a02db 100644
--- a/pkgs/games/sil-q/default.nix
+++ b/pkgs/games/sil-q/default.nix
@@ -56,6 +56,7 @@ in stdenv.mkDerivation rec {
 
   meta = {
     description = "A roguelike game set in the First Age of Middle-earth";
+    mainProgram = "sil-q";
     longDescription = ''
       A game of adventure set in the First Age of Middle-earth, when the world still
       rang with Elven song and gleamed with Dwarven mail.
diff --git a/pkgs/games/simutrans/default.nix b/pkgs/games/simutrans/default.nix
index cc8b864c1f3e..c89cdf7c8588 100644
--- a/pkgs/games/simutrans/default.nix
+++ b/pkgs/games/simutrans/default.nix
@@ -154,6 +154,7 @@ let
 
     meta = with lib; {
       description = "A simulation game in which the player strives to run a successful transport system";
+      mainProgram = "simutrans";
       longDescription = ''
         Simutrans is a cross-platform simulation game in which the
         player strives to run a successful transport system by
diff --git a/pkgs/games/snipes/default.nix b/pkgs/games/snipes/default.nix
index 01b24ee434c3..17a848402a51 100644
--- a/pkgs/games/snipes/default.nix
+++ b/pkgs/games/snipes/default.nix
@@ -40,6 +40,7 @@ in stdenv.mkDerivation {
 
   meta = with lib; {
     description = "Modern port of the classic 1982 text-mode game Snipes";
+    mainProgram = "snipes";
     homepage    = "https://www.vogons.org/viewtopic.php?f=7&t=49073";
     license     = licenses.free; # This reverse-engineered source code is released with the original authors' permission.
     maintainers = with maintainers; [ peterhoeg ];
diff --git a/pkgs/games/soi/default.nix b/pkgs/games/soi/default.nix
index eb214752df84..e0526ff44235 100644
--- a/pkgs/games/soi/default.nix
+++ b/pkgs/games/soi/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A physics-based puzzle game";
+    mainProgram = "soi";
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.linux;
     license = licenses.free;
diff --git a/pkgs/games/solicurses/default.nix b/pkgs/games/solicurses/default.nix
index 3b0a60cb1e81..afa49bbd5ce1 100644
--- a/pkgs/games/solicurses/default.nix
+++ b/pkgs/games/solicurses/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A version of Solitaire written in C++ using the ncurses library";
+    mainProgram = "solicurses";
     homepage = "https://github.com/KaylaPP/SoliCurses";
     maintainers = with maintainers; [ laalsaas ];
     license = licenses.gpl3Only;
diff --git a/pkgs/games/space-orbit/default.nix b/pkgs/games/space-orbit/default.nix
index 7e51d7a4b290..7762bde4cfa5 100644
--- a/pkgs/games/space-orbit/default.nix
+++ b/pkgs/games/space-orbit/default.nix
@@ -40,6 +40,7 @@ EOF
   meta = with lib; {
     broken = stdenv.isDarwin;
     description = "A space combat simulator";
+    mainProgram = "space-orbit";
     license = licenses.gpl2;
     platforms = platforms.all;
   };
diff --git a/pkgs/games/srb2kart/default.nix b/pkgs/games/srb2kart/default.nix
deleted file mode 100644
index 441ffd284a0d..000000000000
--- a/pkgs/games/srb2kart/default.nix
+++ /dev/null
@@ -1,87 +0,0 @@
-{ lib
-, stdenv
-, fetchurl
-, fetchFromGitHub
-, substituteAll
-, cmake
-, curl
-, nasm
-, unzip
-, game-music-emu
-, libpng
-, SDL2
-, SDL2_mixer
-, zlib
-}:
-
-let
-
-  release_tag = "v1.6";
-
-  assets = fetchurl {
-    url = "https://github.com/STJr/Kart-Public/releases/download/${release_tag}/AssetsLinuxOnly.zip";
-    sha256 = "sha256-ejhPuZ1C8M9B0S4+2HN1T5pbormT1eVL3nlivqOszdE=";
-  };
-
-in stdenv.mkDerivation {
-  pname = "srb2kart";
-  version = "1.6.0";
-
-  src = fetchFromGitHub {
-    owner = "STJr";
-    repo = "Kart-Public";
-    rev = release_tag;
-    sha256 = "sha256-5sIHdeenWZjczyYM2q+F8Y1SyLqL+y77yxYDUM3dVA0=";
-  };
-
-  nativeBuildInputs = [
-    cmake
-    nasm
-    unzip
-  ];
-
-  buildInputs = [
-    curl
-    game-music-emu
-    libpng
-    SDL2
-    SDL2_mixer
-    zlib
-  ];
-
-  cmakeFlags = [
-    "-DGME_INCLUDE_DIR=${game-music-emu}/include"
-    "-DSDL2_MIXER_INCLUDE_DIR=${lib.getDev SDL2_mixer}/include/SDL2"
-    "-DSDL2_INCLUDE_DIR=${lib.getDev SDL2}/include/SDL2"
-  ];
-
-  patches = [
-    ./wadlocation.patch
-  ];
-
-  postPatch = ''
-    substituteInPlace src/sdl/i_system.c \
-        --replace '@wadlocation@' $out
-  '';
-
-  preConfigure = ''
-    mkdir assets/installer
-    pushd assets/installer
-    unzip ${assets} "*.kart" srb2.srb
-    popd
-  '';
-
-  postInstall = ''
-    mkdir -p $out/bin $out/share/games/SRB2Kart
-    mv $out/srb2kart* $out/bin/
-    mv $out/*.kart $out/share/games/SRB2Kart
-  '';
-
-  meta = with lib; {
-    description = "SRB2Kart is a classic styled kart racer";
-    homepage = "https://mb.srb2.org/threads/srb2kart.25868/";
-    platforms = platforms.linux;
-    license = licenses.gpl2Plus;
-    maintainers = with maintainers; [ viric ];
-  };
-}
diff --git a/pkgs/games/srb2kart/wadlocation.patch b/pkgs/games/srb2kart/wadlocation.patch
deleted file mode 100644
index 1923cda041d2..000000000000
--- a/pkgs/games/srb2kart/wadlocation.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c
-index 51f708d0..c4d971f7 100644
---- a/src/sdl/i_system.c
-+++ b/src/sdl/i_system.c
-@@ -139,7 +139,7 @@ typedef LPVOID (WINAPI *p_MapViewOfFile) (HANDLE, DWORD, DWORD, DWORD, SIZE_T);
- 
- // Locations for searching the srb2.srb
- #if defined (__unix__) || defined(__APPLE__) || defined (UNIXCOMMON)
--#define DEFAULTWADLOCATION1 "/usr/local/share/games/SRB2Kart"
-+#define DEFAULTWADLOCATION1 "@wadlocation@"
- #define DEFAULTWADLOCATION2 "/usr/local/games/SRB2Kart"
- #define DEFAULTWADLOCATION3 "/usr/share/games/SRB2Kart"
- #define DEFAULTWADLOCATION4 "/usr/games/SRB2Kart"
-@@ -3646,47 +3646,6 @@ static const char *locateWad(void)
- 	if (((envstr = I_GetEnv("SRB2WADDIR")) != NULL) && isWadPathOk(envstr))
- 		return envstr;
- 
--#ifndef NOCWD
--	I_OutputMsg(",.");
--	// examine current dir
--	strcpy(returnWadPath, ".");
--	if (isWadPathOk(returnWadPath))
--		return NULL;
--#endif
--
--
--#ifdef DEFAULTDIR
--	I_OutputMsg(",HOME/" DEFAULTDIR);
--	// examine user jart directory
--	if ((envstr = I_GetEnv("HOME")) != NULL)
--	{
--		sprintf(returnWadPath, "%s" PATHSEP DEFAULTDIR, envstr);
--		if (isWadPathOk(returnWadPath))
--			return returnWadPath;
--	}
--#endif
--
--
--#ifdef CMAKECONFIG
--#ifndef NDEBUG
--	I_OutputMsg(","CMAKE_ASSETS_DIR);
--	strcpy(returnWadPath, CMAKE_ASSETS_DIR);
--	if (isWadPathOk(returnWadPath))
--	{
--		return returnWadPath;
--	}
--#endif
--#endif
--
--#ifdef __APPLE__
--	OSX_GetResourcesPath(returnWadPath);
--	I_OutputMsg(",%s", returnWadPath);
--	if (isWadPathOk(returnWadPath))
--	{
--		return returnWadPath;
--	}
--#endif
--
- 	// examine default dirs
- #ifdef DEFAULTWADLOCATION1
- 	I_OutputMsg(","DEFAULTWADLOCATION1);
diff --git a/pkgs/games/stardust/default.nix b/pkgs/games/stardust/default.nix
index 2555950506ab..df9b2ca190c2 100644
--- a/pkgs/games/stardust/default.nix
+++ b/pkgs/games/stardust/default.nix
@@ -26,6 +26,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Space flight simulator";
+    mainProgram = "stardust";
     maintainers = [ maintainers.raskin ];
     platforms = platforms.linux;
     license = licenses.gpl2Plus;
diff --git a/pkgs/games/steam/fhsenv.nix b/pkgs/games/steam/fhsenv.nix
index 9c68f241a7fe..936a3510b31d 100644
--- a/pkgs/games/steam/fhsenv.nix
+++ b/pkgs/games/steam/fhsenv.nix
@@ -304,11 +304,13 @@ in buildFHSEnv rec {
     then
       steam.meta // lib.optionalAttrs (!withGameSpecificLibraries) {
         description = steam.meta.description + " (without game specific libraries)";
+        mainProgram = "steam";
       }
     else {
       description = "Steam dependencies (dummy package, do not use)";
     };
 
+  passthru.steamargs = args;
   passthru.run = buildFHSEnv {
     name = "steam-run";
 
diff --git a/pkgs/games/stockfish/default.nix b/pkgs/games/stockfish/default.nix
index 21e3151b5844..74eff702add1 100644
--- a/pkgs/games/stockfish/default.nix
+++ b/pkgs/games/stockfish/default.nix
@@ -50,6 +50,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://stockfishchess.org/";
     description = "Strong open source chess engine";
+    mainProgram = "stockfish";
     longDescription = ''
       Stockfish is one of the strongest chess engines in the world. It is also
       much stronger than the best human chess grandmasters.
diff --git a/pkgs/games/super-tux-kart/default.nix b/pkgs/games/super-tux-kart/default.nix
index 3077d5b9443c..1d55465d0092 100644
--- a/pkgs/games/super-tux-kart/default.nix
+++ b/pkgs/games/super-tux-kart/default.nix
@@ -145,6 +145,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A Free 3D kart racing game";
+    mainProgram = "supertuxkart";
     longDescription = ''
       SuperTuxKart is a Free 3D kart racing game, with many tracks,
       characters and items for you to try, similar in spirit to Mario
diff --git a/pkgs/games/system-syzygy/default.nix b/pkgs/games/system-syzygy/default.nix
index c6591749a69b..dee96f392c54 100644
--- a/pkgs/games/system-syzygy/default.nix
+++ b/pkgs/games/system-syzygy/default.nix
@@ -45,6 +45,7 @@ rustPlatform.buildRustPackage rec {
   meta = with lib; {
     broken = stdenv.isDarwin;
     description = "A story and a puzzle game, where you solve a variety of puzzle";
+    mainProgram = "syzygy";
     homepage = "https://mdsteele.games/syzygy";
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.marius851000 ];
diff --git a/pkgs/games/taisei/default.nix b/pkgs/games/taisei/default.nix
index 886768786c10..148329d32052 100644
--- a/pkgs/games/taisei/default.nix
+++ b/pkgs/games/taisei/default.nix
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     broken = stdenv.isDarwin;
     description = "A free and open-source Touhou Project clone and fangame";
+    mainProgram = "taisei";
     longDescription = ''
       Taisei is an open clone of the Tōhō Project series. Tōhō is a one-man
       project of shoot-em-up games set in an isolated world full of Japanese
diff --git a/pkgs/games/tecnoballz/default.nix b/pkgs/games/tecnoballz/default.nix
index f65383a37a89..b51cc1afed91 100644
--- a/pkgs/games/tecnoballz/default.nix
+++ b/pkgs/games/tecnoballz/default.nix
@@ -54,6 +54,7 @@ stdenv.mkDerivation (finalAttrs: {
     homepage = "https://linux.tlk.fr/games/TecnoballZ/";
     downloadPage = "https://linux.tlk.fr/games/TecnoballZ/download/";
     description = "A brick breaker game with a sophisticated system of weapons and bonuses";
+    mainProgram = "tecnoballz";
     longDescription = ''
       A exciting Brick Breaker with 50 levels of game and 11 special levels,
       distributed on the 2 modes of game to give the player a sophisticated
diff --git a/pkgs/games/teeworlds/default.nix b/pkgs/games/teeworlds/default.nix
index 30e4833d0666..505c61588e3e 100644
--- a/pkgs/games/teeworlds/default.nix
+++ b/pkgs/games/teeworlds/default.nix
@@ -95,6 +95,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "Retro multiplayer shooter game";
+    mainProgram = "teeworlds_srv";
 
     longDescription = ''
       Teeworlds is a free online multiplayer game, available for all
diff --git a/pkgs/games/tennix/default.nix b/pkgs/games/tennix/default.nix
index e5b2b358f329..bcf30f947e23 100644
--- a/pkgs/games/tennix/default.nix
+++ b/pkgs/games/tennix/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://icculus.org/tennix/";
     description = "Classic Championship Tour 2011";
+    mainProgram = "tennix";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
     maintainers = with maintainers; [ pSub ];
diff --git a/pkgs/games/tes3cmd/default.nix b/pkgs/games/tes3cmd/default.nix
index 3778aadda9c5..b394c2323c21 100644
--- a/pkgs/games/tes3cmd/default.nix
+++ b/pkgs/games/tes3cmd/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A command line tool for examining and modifying plugins for the Elder Scrolls game Morrowind by Bethesda Softworks";
+    mainProgram = "tes3cmd";
     homepage = "https://github.com/john-moonsugar/tes3cmd";
     license = licenses.mit;
     maintainers = [ maintainers.marius851000 ];
diff --git a/pkgs/games/the-butterfly-effect/default.nix b/pkgs/games/the-butterfly-effect/default.nix
index 021dedc17bd9..1d77be3c5a8a 100644
--- a/pkgs/games/the-butterfly-effect/default.nix
+++ b/pkgs/games/the-butterfly-effect/default.nix
@@ -31,6 +31,7 @@ mkDerivation rec {
 
   meta = with lib; {
     description = "A physics-based game vaguely similar to Incredible Machine";
+    mainProgram = "tbe";
     homepage = "http://the-butterfly-effect.org/";
     maintainers = [ maintainers.raskin ];
     platforms = platforms.linux;
diff --git a/pkgs/games/theforceengine/default.nix b/pkgs/games/theforceengine/default.nix
index d2a843da42bc..8695045d3528 100644
--- a/pkgs/games/theforceengine/default.nix
+++ b/pkgs/games/theforceengine/default.nix
@@ -44,6 +44,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Modern \"Jedi Engine\" replacement supporting Dark Forces, mods, and in the future, Outlaws";
+    mainProgram = "theforceengine";
     homepage = "https://theforceengine.github.io";
     license = licenses.gpl2Only;
     maintainers = with maintainers; [ devusb ];
diff --git a/pkgs/games/tinyfugue/default.nix b/pkgs/games/tinyfugue/default.nix
index a787d0b25bff..d6b9647fcc02 100644
--- a/pkgs/games/tinyfugue/default.nix
+++ b/pkgs/games/tinyfugue/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "https://tinyfugue.sourceforge.net/";
     description = "A terminal UI, screen-oriented MUD client";
+    mainProgram = "tf";
     longDescription = ''
       TinyFugue, aka "tf", is a flexible, screen-oriented MUD client, for use
       with any type of text MUD.
diff --git a/pkgs/games/titanion/default.nix b/pkgs/games/titanion/default.nix
index 94e04a053c4e..6b74eb351dd4 100644
--- a/pkgs/games/titanion/default.nix
+++ b/pkgs/games/titanion/default.nix
@@ -84,6 +84,7 @@ in stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "http://www.asahi-net.or.jp/~cs8k-cyu/windows/ttn_e.html";
     description = "Strike down super high-velocity swooping insects";
+    mainProgram = "titanion";
     license = licenses.bsd2;
     maintainers = with maintainers; [ fgaz ];
     platforms = platforms.all;
diff --git a/pkgs/games/tome4/default.nix b/pkgs/games/tome4/default.nix
index c05fd006aaac..ffb52b01e291 100644
--- a/pkgs/games/tome4/default.nix
+++ b/pkgs/games/tome4/default.nix
@@ -68,6 +68,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Tales of Maj'eyal (rogue-like game)";
+    mainProgram = "tome4";
     homepage = "https://te4.org/";
     license = licenses.gpl3;
     maintainers = with maintainers; [ peterhoeg ];
diff --git a/pkgs/games/torus-trooper/default.nix b/pkgs/games/torus-trooper/default.nix
index 6e39aac63ff6..5715be413b84 100644
--- a/pkgs/games/torus-trooper/default.nix
+++ b/pkgs/games/torus-trooper/default.nix
@@ -97,6 +97,7 @@ in stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "http://www.asahi-net.or.jp/~cs8k-cyu/windows/tt_e.html";
     description = "Fast-paced abstract scrolling shooter game";
+    mainProgram = "torus-trooper";
     license = licenses.bsd2;
     maintainers = with maintainers; [ fgaz ];
     platforms = platforms.all;
diff --git a/pkgs/games/tr-patcher/default.nix b/pkgs/games/tr-patcher/default.nix
index 0336ed1ac02f..77788e8f27f2 100644
--- a/pkgs/games/tr-patcher/default.nix
+++ b/pkgs/games/tr-patcher/default.nix
@@ -28,6 +28,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Allow to update dependancies of the Tamriel-Data mod for morrowind";
+    mainProgram = "tr-patcher";
     homepage = "https://gitlab.com/bmwinger/tr-patcher";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.gpl3;
diff --git a/pkgs/games/trackballs/default.nix b/pkgs/games/trackballs/default.nix
index 9ce9ad3ffc5e..3c3d50eafdb1 100644
--- a/pkgs/games/trackballs/default.nix
+++ b/pkgs/games/trackballs/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://trackballs.github.io/";
     description = "3D Marble Madness clone";
+    mainProgram = "trackballs";
     platforms = platforms.linux;
     # Music is licensed under Ethymonics Free Music License.
     license = licenses.gpl2Plus;
diff --git a/pkgs/games/trigger/default.nix b/pkgs/games/trigger/default.nix
index 57bc75d53820..218266717351 100644
--- a/pkgs/games/trigger/default.nix
+++ b/pkgs/games/trigger/default.nix
@@ -62,6 +62,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A fast-paced single-player racing game";
+    mainProgram = "trigger-rally";
     homepage = "http://trigger-rally.sourceforge.net/";
     license = lib.licenses.gpl2;
     maintainers = with lib.maintainers; [viric];
diff --git a/pkgs/games/tumiki-fighters/default.nix b/pkgs/games/tumiki-fighters/default.nix
index 344d062e08c3..0049412b0e6c 100644
--- a/pkgs/games/tumiki-fighters/default.nix
+++ b/pkgs/games/tumiki-fighters/default.nix
@@ -90,6 +90,7 @@ in stdenv.mkDerivation (finalAttrs: {
   meta = with lib; {
     homepage = "http://www.asahi-net.or.jp/~cs8k-cyu/windows/tf_e.html";
     description = "Sticky 2D shooter";
+    mainProgram = "tumiki-fighters";
     license = licenses.bsd2;
     maintainers = with maintainers; [ fgaz ];
     platforms = platforms.all;
diff --git a/pkgs/games/tuxtype/default.nix b/pkgs/games/tuxtype/default.nix
index 0e32ebfbab97..822dac9808dc 100644
--- a/pkgs/games/tuxtype/default.nix
+++ b/pkgs/games/tuxtype/default.nix
@@ -35,6 +35,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "An Educational Typing Tutor Game Starring Tux, the Linux Penguin";
+    mainProgram = "tuxtype";
     homepage = "https://github.com/tux4kids/tuxtype";
     license = licenses.gpl3Plus;
     maintainers = [ maintainers.aanderse ];
diff --git a/pkgs/games/typespeed/default.nix b/pkgs/games/typespeed/default.nix
index 92d8768e4ffd..483f631fcea9 100644
--- a/pkgs/games/typespeed/default.nix
+++ b/pkgs/games/typespeed/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A curses based typing game";
+    mainProgram = "typespeed";
     homepage = "https://typespeed.sourceforge.net/";
     license = licenses.gpl2;
     platforms = platforms.unix;
diff --git a/pkgs/games/uchess/default.nix b/pkgs/games/uchess/default.nix
index 2d8c2efd4b76..fd0884bf6b18 100644
--- a/pkgs/games/uchess/default.nix
+++ b/pkgs/games/uchess/default.nix
@@ -25,6 +25,7 @@ buildGoModule rec {
 
   meta = with lib; {
     description = "Play chess against UCI engines in your terminal";
+    mainProgram = "uchess";
     homepage = "https://tmountain.github.io/uchess/";
     maintainers = with maintainers; [ tmountain ];
     license = licenses.mit;
diff --git a/pkgs/games/ultrastardx/default.nix b/pkgs/games/ultrastardx/default.nix
index 7364b0a5e5b3..e7401ac9dfbe 100644
--- a/pkgs/games/ultrastardx/default.nix
+++ b/pkgs/games/ultrastardx/default.nix
@@ -31,13 +31,13 @@ let
 
 in stdenv.mkDerivation rec {
   pname = "ultrastardx";
-  version = "2024.1.0";
+  version = "2024.3.0";
 
   src = fetchFromGitHub {
     owner = "UltraStar-Deluxe";
     repo = "USDX";
     rev = "v${version}";
-    hash = "sha256-pyX2zQiCp9lHSV1sGz0GaM5jTaBtyw50I6bFVbSm5S4=";
+    hash = "sha256-0+7PMSnQoNu6tcR9MB6b94fWlMRvH10ySUhdSicWU8U=";
   };
 
   nativeBuildInputs = [ pkg-config autoreconfHook ];
@@ -80,7 +80,9 @@ in stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://usdx.eu/";
     description = "Free and open source karaoke game";
+    mainProgram = "ultrastardx";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ Profpatsch ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/games/umoria/default.nix b/pkgs/games/umoria/default.nix
index 13ec037afba7..91097ca54276 100644
--- a/pkgs/games/umoria/default.nix
+++ b/pkgs/games/umoria/default.nix
@@ -64,6 +64,7 @@ gcc9Stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://umoria.org/";
     description = "The Dungeons of Moria - the original roguelike";
+    mainProgram = "umoria";
     longDescription = ''
       The Dungeons of Moria is a single player dungeon simulation originally written
       by Robert Alan Koeneke, with its first public release in 1983.
diff --git a/pkgs/games/unciv/default.nix b/pkgs/games/unciv/default.nix
deleted file mode 100644
index 703ee9b18b9f..000000000000
--- a/pkgs/games/unciv/default.nix
+++ /dev/null
@@ -1,62 +0,0 @@
-{ stdenv
-, lib
-, fetchurl
-, copyDesktopItems
-, makeDesktopItem
-, makeWrapper
-, jre
-, libGL
-, libpulseaudio
-, libXxf86vm
-}:
-let
-  desktopItem = makeDesktopItem {
-    name = "unciv";
-    exec = "unciv";
-    comment = "An open-source Android/Desktop remake of Civ V";
-    desktopName = "Unciv";
-    categories = [ "Game" ];
-  };
-
-  envLibPath = lib.makeLibraryPath (lib.optionals stdenv.isLinux [
-    libGL
-    libpulseaudio
-    libXxf86vm
-  ]);
-
-in
-stdenv.mkDerivation rec {
-  pname = "unciv";
-  version = "4.10.15";
-
-  src = fetchurl {
-    url = "https://github.com/yairm210/Unciv/releases/download/${version}/Unciv.jar";
-    hash = "sha256-SikrApaaGCAQc6ncqI4vRfXSgG/hgfO1wn5B5fj+W6Y=";
-  };
-
-  dontUnpack = true;
-
-  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
-
-  installPhase = ''
-    runHook preInstall
-
-    makeWrapper ${jre}/bin/java $out/bin/unciv \
-      --prefix LD_LIBRARY_PATH : "${envLibPath}" \
-      --prefix PATH : ${lib.makeBinPath [ jre ]} \
-      --add-flags "-jar ${src}"
-
-    runHook postInstall
-  '';
-
-  desktopItems = [ desktopItem ];
-
-  meta = with lib; {
-    description = "An open-source Android/Desktop remake of Civ V";
-    homepage = "https://github.com/yairm210/Unciv";
-    maintainers = with maintainers; [ tex ];
-    sourceProvenance = with sourceTypes; [ binaryBytecode ];
-    license = licenses.mpl20;
-    platforms = platforms.all;
-  };
-}
diff --git a/pkgs/games/unnethack/default.nix b/pkgs/games/unnethack/default.nix
index f328b8c01eed..15c5b1a81ebc 100644
--- a/pkgs/games/unnethack/default.nix
+++ b/pkgs/games/unnethack/default.nix
@@ -69,6 +69,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Fork of NetHack";
+    mainProgram = "unnethack";
     homepage = "https://unnethack.wordpress.com/";
     license = "nethack";
     platforms = platforms.all;
diff --git a/pkgs/games/uqm/default.nix b/pkgs/games/uqm/default.nix
index 7da4c1e597b5..f81a48af2a67 100644
--- a/pkgs/games/uqm/default.nix
+++ b/pkgs/games/uqm/default.nix
@@ -93,6 +93,7 @@ in stdenv.mkDerivation rec {
 
   meta = {
     description = "Remake of Star Control II";
+    mainProgram = "uqm";
     longDescription = ''
       The goals for the The Ur-Quan Masters project are:
         - to bring Star Control II to modern platforms, thereby making a lot of
diff --git a/pkgs/games/vdrift/default.nix b/pkgs/games/vdrift/default.nix
index 50fb4af1416a..a88adbdf19de 100644
--- a/pkgs/games/vdrift/default.nix
+++ b/pkgs/games/vdrift/default.nix
@@ -49,6 +49,7 @@ let
 
     meta = {
       description = "Car racing game";
+      mainProgram = "vdrift";
       homepage = "http://vdrift.net/";
       license = lib.licenses.gpl2Plus;
       maintainers = with lib.maintainers; [ viric ];
diff --git a/pkgs/games/vectoroids/default.nix b/pkgs/games/vectoroids/default.nix
index 82c157104439..c3e383a84b64 100644
--- a/pkgs/games/vectoroids/default.nix
+++ b/pkgs/games/vectoroids/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
   meta = {
     homepage = "http://www.newbreedsoftware.com/vectoroids/";
     description = "Clone of the classic arcade game Asteroids by Atari";
+    mainProgram = "vectoroids";
     license = lib.licenses.gpl2Plus;
     platforms = lib.platforms.linux;
   };
diff --git a/pkgs/games/vms-empire/default.nix b/pkgs/games/vms-empire/default.nix
index b3e89617ef33..9da37789f7cd 100644
--- a/pkgs/games/vms-empire/default.nix
+++ b/pkgs/games/vms-empire/default.nix
@@ -46,6 +46,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://catb.org/~esr/vms-empire/";
     description = "The ancestor of all expand/explore/exploit/exterminate games";
+    mainProgram = "vms-empire";
     longDescription = ''
       Empire is a simulation of a full-scale war between two emperors, the
       computer and you. Naturally, there is only room for one, so the object of
diff --git a/pkgs/games/warzone2100/default.nix b/pkgs/games/warzone2100/default.nix
index 7e6b8986109e..a39b7915b187 100644
--- a/pkgs/games/warzone2100/default.nix
+++ b/pkgs/games/warzone2100/default.nix
@@ -123,6 +123,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "A free RTS game, originally developed by Pumpkin Studios";
+    mainProgram = "warzone2100";
     longDescription = ''
         Warzone 2100 is an open source real-time strategy and real-time tactics
       hybrid computer game, originally developed by Pumpkin Studios and
diff --git a/pkgs/games/wireworld/default.nix b/pkgs/games/wireworld/default.nix
index 828d313d2a87..14a7310e7a97 100644
--- a/pkgs/games/wireworld/default.nix
+++ b/pkgs/games/wireworld/default.nix
@@ -50,6 +50,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Fascinating electronics logic puzzles, game where you'll learn how to build clocks, diodes, and logic gates";
+    mainProgram = "Wireworld";
     license = with licenses; [
       mit
       ofl
diff --git a/pkgs/games/wolfstoneextract/default.nix b/pkgs/games/wolfstoneextract/default.nix
index 159e6ae3f15c..b2d76e41d57c 100644
--- a/pkgs/games/wolfstoneextract/default.nix
+++ b/pkgs/games/wolfstoneextract/default.nix
@@ -21,6 +21,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Utility to extract Wolfstone data from Wolfenstein II";
+    mainProgram = "wolfstoneextract";
     homepage = "https://bitbucket.org/ecwolf/wolfstoneextract/src/master/";
     platforms = [ "x86_64-linux" ];
     license = with licenses; [ gpl3Only bsd3 ];
diff --git a/pkgs/games/wyvern/default.nix b/pkgs/games/wyvern/default.nix
index 6eae1a4e71b2..705d6a33db5f 100644
--- a/pkgs/games/wyvern/default.nix
+++ b/pkgs/games/wyvern/default.nix
@@ -24,6 +24,7 @@ rustPlatform.buildRustPackage rec {
 
   meta = with lib; {
     description = "A simple CLI client for installing and maintaining linux GOG games";
+    mainProgram = "wyvern";
     homepage = "https://git.sr.ht/~nicohman/wyvern";
     license = licenses.gpl3;
     maintainers = with maintainers; [ _0x4A6F ];
diff --git a/pkgs/games/xboard/default.nix b/pkgs/games/xboard/default.nix
index af75ec79e730..ac8ae684f1df 100644
--- a/pkgs/games/xboard/default.nix
+++ b/pkgs/games/xboard/default.nix
@@ -60,6 +60,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "GUI for chess engines";
+    mainProgram = "xboard";
     homepage = "https://www.gnu.org/software/xboard/";
     maintainers = with maintainers; [ raskin ];
     platforms = platforms.unix;
diff --git a/pkgs/games/xbomb/default.nix b/pkgs/games/xbomb/default.nix
index 093f822a7e31..92227ec1ebd1 100644
--- a/pkgs/games/xbomb/default.nix
+++ b/pkgs/games/xbomb/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "http://www.gedanken.org.uk/software/xbomb/";
     description = "Minesweeper for X11 with various grid sizes and shapes";
+    mainProgram = "xbomb";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
   };
diff --git a/pkgs/games/xgalaga++/default.nix b/pkgs/games/xgalaga++/default.nix
index daccc84e681e..9b2bd5a9af73 100644
--- a/pkgs/games/xgalaga++/default.nix
+++ b/pkgs/games/xgalaga++/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://marc.mongenet.ch/OSS/XGalaga/";
     description = "XGalaga++ is a classic single screen vertical shoot ’em up. It is inspired by XGalaga and reuses most of its sprites";
+    mainProgram = "xgalaga++";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
   };
diff --git a/pkgs/games/xivlauncher/default.nix b/pkgs/games/xivlauncher/default.nix
index 63a0e5e4e35f..ec617ad0f0f5 100644
--- a/pkgs/games/xivlauncher/default.nix
+++ b/pkgs/games/xivlauncher/default.nix
@@ -3,7 +3,7 @@
 , useSteamRun ? true }:
 
 let
-  rev = "1.0.7";
+  rev = "1.0.8";
 in
   buildDotnetModule rec {
     pname = "XIVLauncher";
@@ -13,7 +13,7 @@ in
       owner = "goatcorp";
       repo = "XIVLauncher.Core";
       inherit rev;
-      hash = "sha256-bWrFGaNkcKo5vUhhrpzEMuX1Ws6ud57sJ0tM4CUuUEk=";
+      hash = "sha256-x4W5L4k+u0MYKDWJu82QcXARW0zjmqqwGiueR1IevMk=";
       fetchSubmodules = true;
     };
 
diff --git a/pkgs/games/xjump/default.nix b/pkgs/games/xjump/default.nix
index 2c56e0bba4f6..2113ffbda116 100644
--- a/pkgs/games/xjump/default.nix
+++ b/pkgs/games/xjump/default.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "The falling tower game";
+    mainProgram = "xjump";
     license = licenses.gpl2;
     maintainers = with maintainers; [ pmeunier ];
   };
diff --git a/pkgs/games/xmage/default.nix b/pkgs/games/xmage/default.nix
index 59752e72e50d..656eee3ce617 100644
--- a/pkgs/games/xmage/default.nix
+++ b/pkgs/games/xmage/default.nix
@@ -38,6 +38,7 @@ stdenv.mkDerivation (finalAttrs: {
 
   meta = with lib; {
     description = "Magic Another Game Engine";
+    mainProgram = "xmage";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.mit;
     maintainers = with maintainers; [ matthiasbeyer abueide ];
diff --git a/pkgs/games/xmoto/default.nix b/pkgs/games/xmoto/default.nix
index 5909c3f20ee4..23ed54e6b8e4 100644
--- a/pkgs/games/xmoto/default.nix
+++ b/pkgs/games/xmoto/default.nix
@@ -53,6 +53,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A challenging 2D motocross platform game, where physics play an important role";
+    mainProgram = "xmoto";
     longDescription = ''
       X-Moto is a challenging 2D motocross platform game, where physics plays an all important role in the gameplay.
       You need to control your bike to its limits, if you want to have a chance to finish the most difficult challenges.
diff --git a/pkgs/games/xpilot/bloodspilot-client.nix b/pkgs/games/xpilot/bloodspilot-client.nix
index 8e603ef53f78..58eb7e815164 100644
--- a/pkgs/games/xpilot/bloodspilot-client.nix
+++ b/pkgs/games/xpilot/bloodspilot-client.nix
@@ -17,6 +17,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A multiplayer space combat game (client part)";
+    mainProgram = "bloodspilot-client-sdl";
     homepage = "http://bloodspilot.sf.net/";
     license = lib.licenses.gpl2Plus ;
     maintainers = [lib.maintainers.raskin];
diff --git a/pkgs/games/xpilot/bloodspilot-server.nix b/pkgs/games/xpilot/bloodspilot-server.nix
index a860c4e1d5ff..495412c0eab4 100644
--- a/pkgs/games/xpilot/bloodspilot-server.nix
+++ b/pkgs/games/xpilot/bloodspilot-server.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A multiplayer X11 space combat game (server part)";
+    mainProgram = "xpilots";
     homepage = "http://bloodspilot.sf.net/";
     license = licenses.gpl2Plus ;
     maintainers = [ maintainers.raskin ];
diff --git a/pkgs/games/xskat/default.nix b/pkgs/games/xskat/default.nix
index 0d9fc5fe312f..6f28a6846ea7 100644
--- a/pkgs/games/xskat/default.nix
+++ b/pkgs/games/xskat/default.nix
@@ -22,6 +22,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Famous german card game";
+    mainProgram = "xskat";
     platforms = platforms.unix;
     license = licenses.xskat;
     longDescription = "Play the german card game Skat against the AI or over IRC.";
diff --git a/pkgs/games/xsnow/default.nix b/pkgs/games/xsnow/default.nix
index ff34bfe729ba..fe744375d79b 100644
--- a/pkgs/games/xsnow/default.nix
+++ b/pkgs/games/xsnow/default.nix
@@ -18,6 +18,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "An X-windows application that will let it snow on the root, in between and on windows";
+    mainProgram = "xsnow";
     homepage = "https://ratrabbit.nl/ratrabbit/xsnow/";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ robberer ];
diff --git a/pkgs/games/xsok/default.nix b/pkgs/games/xsok/default.nix
index 53254ba98f91..51ca06a9091c 100644
--- a/pkgs/games/xsok/default.nix
+++ b/pkgs/games/xsok/default.nix
@@ -38,6 +38,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "A generic Sokoban game for X11";
+    mainProgram = "xsok";
     license = lib.licenses.gpl2Plus;
     maintainers = [lib.maintainers.raskin];
     platforms = lib.platforms.unix;
diff --git a/pkgs/games/xsokoban/default.nix b/pkgs/games/xsokoban/default.nix
index 4d8a6fa05056..51de995af4bc 100644
--- a/pkgs/games/xsokoban/default.nix
+++ b/pkgs/games/xsokoban/default.nix
@@ -47,6 +47,7 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "X sokoban";
+    mainProgram = "xsokoban";
     license = licenses.publicDomain;
     maintainers = [ maintainers.raskin ];
     platforms = platforms.linux;