about summary refs log tree commit diff
path: root/nixpkgs/pkgs/games
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2022-12-06 19:57:55 +0000
committerAlyssa Ross <hi@alyssa.is>2023-02-08 13:48:30 +0000
commitbf3aadfdd39aa197e18bade671fab6726349ffa4 (patch)
tree698567af766ed441d757b57a7b21e68d4a342a2b /nixpkgs/pkgs/games
parentf4afc5a01d9539ce09e47494e679c51f80723d07 (diff)
parent99665eb45f58d959d2cb9e49ddb960c79d596f33 (diff)
downloadnixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.gz
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.bz2
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.lz
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.xz
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.zst
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.zip
Merge commit '99665eb45f58d959d2cb9e49ddb960c79d596f33'
Diffstat (limited to 'nixpkgs/pkgs/games')
-rw-r--r--nixpkgs/pkgs/games/0ad/game.nix11
-rw-r--r--nixpkgs/pkgs/games/0verkill/default.nix3
-rw-r--r--nixpkgs/pkgs/games/2048-in-terminal/default.nix4
-rw-r--r--nixpkgs/pkgs/games/7kaa/default.nix17
-rw-r--r--nixpkgs/pkgs/games/airstrike/default.nix2
-rw-r--r--nixpkgs/pkgs/games/angband/default.nix19
-rw-r--r--nixpkgs/pkgs/games/anki/bin.nix28
-rw-r--r--nixpkgs/pkgs/games/asc/default.nix2
-rw-r--r--nixpkgs/pkgs/games/assaultcube/default.nix88
-rw-r--r--nixpkgs/pkgs/games/azimuth/default.nix3
-rw-r--r--nixpkgs/pkgs/games/black-hole-solver/default.nix4
-rw-r--r--nixpkgs/pkgs/games/blightmud/default.nix2
-rw-r--r--nixpkgs/pkgs/games/brogue/default.nix13
-rw-r--r--nixpkgs/pkgs/games/bugdom/default.nix65
-rw-r--r--nixpkgs/pkgs/games/bzflag/default.nix6
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/common.nix9
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/git.nix4
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/locale-path-stable.patch20
-rw-r--r--nixpkgs/pkgs/games/cataclysm-dda/stable.nix5
-rw-r--r--nixpkgs/pkgs/games/cdogs-sdl/default.nix9
-rw-r--r--nixpkgs/pkgs/games/cgoban/default.nix1
-rw-r--r--nixpkgs/pkgs/games/chocolate-doom/default.nix12
-rw-r--r--nixpkgs/pkgs/games/ckan/default.nix4
-rw-r--r--nixpkgs/pkgs/games/cl-wordle/default.nix14
-rw-r--r--nixpkgs/pkgs/games/crack-attack/default.nix2
-rw-r--r--nixpkgs/pkgs/games/crossfire/crossfire-arch.nix6
-rw-r--r--nixpkgs/pkgs/games/crossfire/crossfire-client.nix6
-rw-r--r--nixpkgs/pkgs/games/crossfire/crossfire-maps.nix6
-rw-r--r--nixpkgs/pkgs/games/crossfire/crossfire-server.nix6
-rw-r--r--nixpkgs/pkgs/games/crossfire/default.nix8
-rw-r--r--nixpkgs/pkgs/games/cutemaze/default.nix29
-rw-r--r--nixpkgs/pkgs/games/darkplaces/default.nix58
-rw-r--r--nixpkgs/pkgs/games/ddnet/default.nix16
-rw-r--r--nixpkgs/pkgs/games/deliantra/arch.nix (renamed from nixpkgs/pkgs/games/deliantra/deliantra-arch.nix)0
-rw-r--r--nixpkgs/pkgs/games/deliantra/data.nix (renamed from nixpkgs/pkgs/games/deliantra/deliantra-data.nix)0
-rw-r--r--nixpkgs/pkgs/games/deliantra/default.nix10
-rw-r--r--nixpkgs/pkgs/games/deliantra/maps.nix (renamed from nixpkgs/pkgs/games/deliantra/deliantra-maps.nix)0
-rw-r--r--nixpkgs/pkgs/games/deliantra/server.nix (renamed from nixpkgs/pkgs/games/deliantra/deliantra-server.nix)4
-rw-r--r--nixpkgs/pkgs/games/devilutionx/default.nix61
-rw-r--r--nixpkgs/pkgs/games/domination/default.nix31
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/dfhack/default.nix7
-rw-r--r--nixpkgs/pkgs/games/dwarf-fortress/legends-browser/default.nix1
-rw-r--r--nixpkgs/pkgs/games/easyrpg-player/default.nix2
-rw-r--r--nixpkgs/pkgs/games/egoboo/default.nix7
-rw-r--r--nixpkgs/pkgs/games/enigma/default.nix29
-rw-r--r--nixpkgs/pkgs/games/extremetuxracer/default.nix4
-rw-r--r--nixpkgs/pkgs/games/factorio/default.nix3
-rw-r--r--nixpkgs/pkgs/games/factorio/versions.json48
-rw-r--r--nixpkgs/pkgs/games/fairymax/default.nix38
-rw-r--r--nixpkgs/pkgs/games/ferium/default.nix39
-rw-r--r--nixpkgs/pkgs/games/fheroes2/default.nix18
-rw-r--r--nixpkgs/pkgs/games/fishfight/use-system-sdl2.patch39
-rw-r--r--nixpkgs/pkgs/games/flare/default.nix2
-rw-r--r--nixpkgs/pkgs/games/flightgear/default.nix6
-rw-r--r--nixpkgs/pkgs/games/freeciv/default.nix25
-rw-r--r--nixpkgs/pkgs/games/freedink/default.nix2
-rw-r--r--nixpkgs/pkgs/games/frogatto/data.nix7
-rw-r--r--nixpkgs/pkgs/games/frogatto/default.nix2
-rw-r--r--nixpkgs/pkgs/games/frogatto/engine.nix15
-rw-r--r--nixpkgs/pkgs/games/gamehub/default.nix67
-rw-r--r--nixpkgs/pkgs/games/garden-of-coloured-lights/default.nix8
-rw-r--r--nixpkgs/pkgs/games/gargoyle/default.nix9
-rw-r--r--nixpkgs/pkgs/games/gcompris/default.nix4
-rw-r--r--nixpkgs/pkgs/games/gcs/default.nix4
-rw-r--r--nixpkgs/pkgs/games/gemrb/default.nix2
-rw-r--r--nixpkgs/pkgs/games/gimx/default.nix14
-rw-r--r--nixpkgs/pkgs/games/gl-117/default.nix3
-rw-r--r--nixpkgs/pkgs/games/gmad/default.nix10
-rw-r--r--nixpkgs/pkgs/games/gnonograms/default.nix14
-rw-r--r--nixpkgs/pkgs/games/gnubg/default.nix7
-rw-r--r--nixpkgs/pkgs/games/gnugo/default.nix12
-rw-r--r--nixpkgs/pkgs/games/grapejuice/default.nix50
-rw-r--r--nixpkgs/pkgs/games/graphwar/default.nix66
-rw-r--r--nixpkgs/pkgs/games/gscrabble/default.nix12
-rw-r--r--nixpkgs/pkgs/games/gshogi/default.nix20
-rw-r--r--nixpkgs/pkgs/games/hedgewars/default.nix12
-rw-r--r--nixpkgs/pkgs/games/hedgewars/qt515.patch10
-rw-r--r--nixpkgs/pkgs/games/heroic/default.nix10
-rw-r--r--nixpkgs/pkgs/games/holdingnuts/default.nix38
-rw-r--r--nixpkgs/pkgs/games/hyperrogue/default.nix2
-rw-r--r--nixpkgs/pkgs/games/infra-arcana/default.nix60
-rw-r--r--nixpkgs/pkgs/games/iortcw/default.nix2
-rw-r--r--nixpkgs/pkgs/games/iortcw/sp.nix2
-rw-r--r--nixpkgs/pkgs/games/itch-setup/default.nix24
-rw-r--r--nixpkgs/pkgs/games/itch/butler.nix29
-rw-r--r--nixpkgs/pkgs/games/itch/default.nix78
-rw-r--r--nixpkgs/pkgs/games/julius/default.nix15
-rw-r--r--nixpkgs/pkgs/games/jumpy/default.nix (renamed from nixpkgs/pkgs/games/fishfight/default.nix)33
-rw-r--r--nixpkgs/pkgs/games/kabeljau/default.nix40
-rw-r--r--nixpkgs/pkgs/games/katago/default.nix8
-rw-r--r--nixpkgs/pkgs/games/keeperrl/default.nix4
-rw-r--r--nixpkgs/pkgs/games/koules/default.nix77
-rw-r--r--nixpkgs/pkgs/games/leela-zero/default.nix20
-rw-r--r--nixpkgs/pkgs/games/legendary-gl/default.nix6
-rw-r--r--nixpkgs/pkgs/games/lgames/barrage/default.nix31
-rw-r--r--nixpkgs/pkgs/games/lgames/lbreakout2/default.nix (renamed from nixpkgs/pkgs/games/lbreakout2/default.nix)23
-rw-r--r--nixpkgs/pkgs/games/lgames/lbreakouthd/default.nix36
-rw-r--r--nixpkgs/pkgs/games/lgames/lpairs2/default.nix34
-rw-r--r--nixpkgs/pkgs/games/lgames/ltris/default.nix26
-rw-r--r--nixpkgs/pkgs/games/lgogdownloader/default.nix4
-rw-r--r--nixpkgs/pkgs/games/liberal-crime-squad/default.nix1
-rw-r--r--nixpkgs/pkgs/games/liberation-circuit/default.nix39
-rw-r--r--nixpkgs/pkgs/games/lincity/default.nix9
-rw-r--r--nixpkgs/pkgs/games/lincity/ng.nix51
-rw-r--r--nixpkgs/pkgs/games/liquidwar/5.nix9
-rw-r--r--nixpkgs/pkgs/games/liquidwar/default.nix2
-rw-r--r--nixpkgs/pkgs/games/ltris/default.nix22
-rw-r--r--nixpkgs/pkgs/games/ltris/gcc5_compliance.diff299
-rw-r--r--nixpkgs/pkgs/games/macopix/default.nix5
-rw-r--r--nixpkgs/pkgs/games/mar1d/default.nix4
-rw-r--r--nixpkgs/pkgs/games/mars/default.nix13
-rw-r--r--nixpkgs/pkgs/games/mars/fix-gluortho2d.patch113
-rw-r--r--nixpkgs/pkgs/games/mars/unbind_fix.patch19
-rw-r--r--nixpkgs/pkgs/games/megaglest/default.nix11
-rw-r--r--nixpkgs/pkgs/games/meritous/default.nix2
-rw-r--r--nixpkgs/pkgs/games/mindustry/default.nix30
-rw-r--r--nixpkgs/pkgs/games/minecraft-servers/derivation.nix1
-rw-r--r--nixpkgs/pkgs/games/minecraft-servers/versions.json14
-rw-r--r--nixpkgs/pkgs/games/minecraft/default.nix3
-rw-r--r--nixpkgs/pkgs/games/minetest/default.nix87
-rw-r--r--nixpkgs/pkgs/games/mudlet/default.nix7
-rw-r--r--nixpkgs/pkgs/games/nanosaur/default.nix4
-rw-r--r--nixpkgs/pkgs/games/nethack/default.nix11
-rw-r--r--nixpkgs/pkgs/games/neverball/default.nix13
-rw-r--r--nixpkgs/pkgs/games/npush/default.nix1
-rw-r--r--nixpkgs/pkgs/games/oh-my-git/default.nix13
-rw-r--r--nixpkgs/pkgs/games/onscripter-en/default.nix1
-rw-r--r--nixpkgs/pkgs/games/opendungeons/default.nix5
-rw-r--r--nixpkgs/pkgs/games/opendungeons/fix_link_date_time.patch13
-rw-r--r--nixpkgs/pkgs/games/openjk/default.nix50
-rw-r--r--nixpkgs/pkgs/games/openmw/default.nix8
-rw-r--r--nixpkgs/pkgs/games/openmw/tes3mp.nix7
-rw-r--r--nixpkgs/pkgs/games/openra/common.nix2
-rw-r--r--nixpkgs/pkgs/games/openra/default.nix2
-rw-r--r--nixpkgs/pkgs/games/openra/engines.nix4
-rw-r--r--nixpkgs/pkgs/games/openra/mods.nix28
-rw-r--r--nixpkgs/pkgs/games/openra/packages.nix2
-rw-r--r--nixpkgs/pkgs/games/openrct2/default.nix44
-rw-r--r--nixpkgs/pkgs/games/opensoldat/default.nix (renamed from nixpkgs/pkgs/games/soldat-unstable/default.nix)32
-rw-r--r--nixpkgs/pkgs/games/openspades/default.nix1
-rw-r--r--nixpkgs/pkgs/games/opensupaplex/default.nix4
-rw-r--r--nixpkgs/pkgs/games/openttd/default.nix4
-rw-r--r--nixpkgs/pkgs/games/openttd/jgrpp.nix8
-rw-r--r--nixpkgs/pkgs/games/openttd/nml.nix19
-rw-r--r--nixpkgs/pkgs/games/opentyrian/default.nix44
-rw-r--r--nixpkgs/pkgs/games/openxcom/default.nix34
-rw-r--r--nixpkgs/pkgs/games/openxray/default.nix92
-rw-r--r--nixpkgs/pkgs/games/osu-lazer/default.nix15
-rw-r--r--nixpkgs/pkgs/games/osu-lazer/deps.nix365
-rw-r--r--nixpkgs/pkgs/games/osu-lazer/osu.runtimeconfig.json4
-rwxr-xr-xnixpkgs/pkgs/games/osu-lazer/update.sh9
-rw-r--r--nixpkgs/pkgs/games/otto-matic/default.nix4
-rw-r--r--nixpkgs/pkgs/games/papermc/default.nix8
-rw-r--r--nixpkgs/pkgs/games/performous/default.nix53
-rw-r--r--nixpkgs/pkgs/games/planetaryannihilation/default.nix6
-rw-r--r--nixpkgs/pkgs/games/pokerth/default.nix2
-rw-r--r--nixpkgs/pkgs/games/pokete/default.nix54
-rw-r--r--nixpkgs/pkgs/games/polymc/default.nix36
-rw-r--r--nixpkgs/pkgs/games/prboom-plus/default.nix62
-rw-r--r--nixpkgs/pkgs/games/prboom/default.nix35
-rw-r--r--nixpkgs/pkgs/games/purpur/default.nix2
-rw-r--r--nixpkgs/pkgs/games/qqwing/default.nix3
-rw-r--r--nixpkgs/pkgs/games/quake2/yquake2/default.nix46
-rw-r--r--nixpkgs/pkgs/games/quake2/yquake2/games.nix6
-rw-r--r--nixpkgs/pkgs/games/quake3/quake3e/default.nix29
-rw-r--r--nixpkgs/pkgs/games/quakespasm/default.nix7
-rw-r--r--nixpkgs/pkgs/games/quakespasm/vulkan.nix14
-rw-r--r--nixpkgs/pkgs/games/quantumminigolf/default.nix2
-rw-r--r--nixpkgs/pkgs/games/r2mod_cli/default.nix1
-rw-r--r--nixpkgs/pkgs/games/rare/default.nix34
-rw-r--r--nixpkgs/pkgs/games/rili/default.nix16
-rw-r--r--nixpkgs/pkgs/games/rocksndiamonds/default.nix16
-rw-r--r--nixpkgs/pkgs/games/rott/default.nix55
-rw-r--r--nixpkgs/pkgs/games/runelite/default.nix6
-rw-r--r--nixpkgs/pkgs/games/runescape-launcher/default.nix41
-rw-r--r--nixpkgs/pkgs/games/sauerbraten/default.nix4
-rw-r--r--nixpkgs/pkgs/games/sgt-puzzles/default.nix42
-rw-r--r--nixpkgs/pkgs/games/shattered-pixel-dungeon/default.nix4
-rw-r--r--nixpkgs/pkgs/games/sil-q/default.nix73
-rw-r--r--nixpkgs/pkgs/games/sil/default.nix40
-rw-r--r--nixpkgs/pkgs/games/simutrans/default.nix2
-rw-r--r--nixpkgs/pkgs/games/sm64ex/default.nix112
-rw-r--r--nixpkgs/pkgs/games/sm64ex/generic.nix83
-rw-r--r--nixpkgs/pkgs/games/solarus/default.nix2
-rw-r--r--nixpkgs/pkgs/games/soldat-unstable/gamenetworkingsockets-no-external.patch14
-rw-r--r--nixpkgs/pkgs/games/space-cadet-pinball/default.nix16
-rw-r--r--nixpkgs/pkgs/games/space-orbit/default.nix1
-rw-r--r--nixpkgs/pkgs/games/speed-dreams/default.nix10
-rw-r--r--nixpkgs/pkgs/games/srb2/default.nix93
-rw-r--r--nixpkgs/pkgs/games/srb2/wadlocation.patch72
-rw-r--r--nixpkgs/pkgs/games/srb2kart/default.nix88
-rw-r--r--nixpkgs/pkgs/games/srb2kart/wadlocation.patch61
-rw-r--r--nixpkgs/pkgs/games/starsector/default.nix4
-rw-r--r--nixpkgs/pkgs/games/steam/default.nix2
-rw-r--r--nixpkgs/pkgs/games/steam/fhsenv.nix15
-rw-r--r--nixpkgs/pkgs/games/steam/runtime.nix4
-rw-r--r--nixpkgs/pkgs/games/stockfish/default.nix8
-rw-r--r--nixpkgs/pkgs/games/stuntrally/default.nix10
-rw-r--r--nixpkgs/pkgs/games/system-syzygy/default.nix3
-rw-r--r--nixpkgs/pkgs/games/t4kcommon/default.nix7
-rw-r--r--nixpkgs/pkgs/games/taisei/default.nix10
-rw-r--r--nixpkgs/pkgs/games/tcl2048/default.nix3
-rw-r--r--nixpkgs/pkgs/games/the-butterfly-effect/default.nix3
-rw-r--r--nixpkgs/pkgs/games/the-powder-toy/default.nix2
-rw-r--r--nixpkgs/pkgs/games/tintin/default.nix30
-rw-r--r--nixpkgs/pkgs/games/tinyfugue/default.nix6
-rw-r--r--nixpkgs/pkgs/games/titanion/default.nix91
-rw-r--r--nixpkgs/pkgs/games/tome4/default.nix6
-rw-r--r--nixpkgs/pkgs/games/tr-patcher/default.nix1
-rw-r--r--nixpkgs/pkgs/games/tremulous/default.nix82
-rw-r--r--nixpkgs/pkgs/games/tremulous/parse.patch21
-rw-r--r--nixpkgs/pkgs/games/tworld2/default.nix11
-rw-r--r--nixpkgs/pkgs/games/typespeed/default.nix6
-rw-r--r--nixpkgs/pkgs/games/ue4/default.nix3
-rw-r--r--nixpkgs/pkgs/games/ue4demos/default.nix2
-rw-r--r--nixpkgs/pkgs/games/ufoai/default.nix7
-rw-r--r--nixpkgs/pkgs/games/uhexen2/default.nix1
-rw-r--r--nixpkgs/pkgs/games/umoria/default.nix78
-rw-r--r--nixpkgs/pkgs/games/unciv/default.nix5
-rw-r--r--nixpkgs/pkgs/games/unvanquished/default.nix98
-rw-r--r--nixpkgs/pkgs/games/uqm/default.nix22
-rw-r--r--nixpkgs/pkgs/games/urbanterror/default.nix2
-rw-r--r--nixpkgs/pkgs/games/ut2004/wrapper.nix2
-rw-r--r--nixpkgs/pkgs/games/vassal/default.nix5
-rw-r--r--nixpkgs/pkgs/games/vectoroids/default.nix15
-rw-r--r--nixpkgs/pkgs/games/vintagestory/default.nix4
-rw-r--r--nixpkgs/pkgs/games/wargus/default.nix32
-rw-r--r--nixpkgs/pkgs/games/wargus/stratagus.nix8
-rw-r--r--nixpkgs/pkgs/games/warsow/default.nix2
-rw-r--r--nixpkgs/pkgs/games/warsow/engine.nix5
-rw-r--r--nixpkgs/pkgs/games/warzone2100/default.nix4
-rw-r--r--nixpkgs/pkgs/games/wesnoth/default.nix4
-rw-r--r--nixpkgs/pkgs/games/xboard/default.nix11
-rw-r--r--nixpkgs/pkgs/games/xconq/default.nix2
-rw-r--r--nixpkgs/pkgs/games/xivlauncher/default.nix70
-rw-r--r--nixpkgs/pkgs/games/xivlauncher/deps.nix197
-rw-r--r--nixpkgs/pkgs/games/xmage/default.nix1
-rw-r--r--nixpkgs/pkgs/games/xonotic/default.nix10
-rw-r--r--nixpkgs/pkgs/games/zandronum/sqlite.nix7
-rw-r--r--nixpkgs/pkgs/games/zangband/default.nix58
-rw-r--r--nixpkgs/pkgs/games/zaz/default.nix5
-rw-r--r--nixpkgs/pkgs/games/zdoom/zdbsp.nix11
-rw-r--r--nixpkgs/pkgs/games/zod/default.nix4
-rw-r--r--nixpkgs/pkgs/games/zoom/default.nix12
244 files changed, 3658 insertions, 1997 deletions
diff --git a/nixpkgs/pkgs/games/0ad/game.nix b/nixpkgs/pkgs/games/0ad/game.nix
index 34a2cdddac82..e51aab519a49 100644
--- a/nixpkgs/pkgs/games/0ad/game.nix
+++ b/nixpkgs/pkgs/games/0ad/game.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, perl, fetchurl, python3, fmt, libidn
+{ stdenv, lib, fetchpatch, perl, fetchurl, python3, fmt, libidn
 , pkg-config, spidermonkey_78, boost, icu, libxml2, libpng, libsodium
 , libjpeg, zlib, curl, libogg, libvorbis, enet, miniupnpc
 , openal, libGLU, libGL, xorgproto, libX11, libXcursor, nspr, SDL2
@@ -50,7 +50,14 @@ stdenv.mkDerivation rec {
     "-I${fmt.dev}/include"
   ];
 
-  patches = [ ./rootdir_env.patch ];
+  patches = [
+    ./rootdir_env.patch
+    (fetchpatch {
+      # fix build with gcc11 and glibc 2.35
+      url = "https://github.com/0ad/0ad/commit/7df614338cbd41f5e254ce75f649490b2637e1d0.patch";
+      hash = "sha256-QZvcNm8Zni3aJnMPueft0OITf8zeMDXWBjOLYoirJs0=";
+    })
+  ];
 
   configurePhase = ''
     # Delete shipped libraries which we don't need.
diff --git a/nixpkgs/pkgs/games/0verkill/default.nix b/nixpkgs/pkgs/games/0verkill/default.nix
index fa654832e2e2..8f6a5b123058 100644
--- a/nixpkgs/pkgs/games/0verkill/default.nix
+++ b/nixpkgs/pkgs/games/0verkill/default.nix
@@ -27,6 +27,9 @@ gccStdenv.mkDerivation rec {
     autoupdate
   '';
 
+  # The code needs an update for gcc-10:
+  #   https://github.com/hackndev/0verkill/issues/7
+  NIX_CFLAGS_COMPILE = "-fcommon";
   hardeningDisable = [ "all" ]; # Someday the upstream will update the code...
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/games/2048-in-terminal/default.nix b/nixpkgs/pkgs/games/2048-in-terminal/default.nix
index 8f527534bb44..59012227aeda 100644
--- a/nixpkgs/pkgs/games/2048-in-terminal/default.nix
+++ b/nixpkgs/pkgs/games/2048-in-terminal/default.nix
@@ -2,7 +2,7 @@
 
 stdenv.mkDerivation rec {
   pname = "2048-in-terminal";
-  version = "2021-09-12";
+  version = "unstable-2021-09-12";
 
   src = fetchFromGitHub {
     sha256 = "1jgacyimn59kxqhrk8jp13qayc2mncxhx393spqcxbz0sj6lxq9p";
@@ -35,6 +35,6 @@ stdenv.mkDerivation rec {
     inherit (src.meta) homepage;
     description = "Animated console version of the 2048 game";
     license = licenses.mit;
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/nixpkgs/pkgs/games/7kaa/default.nix b/nixpkgs/pkgs/games/7kaa/default.nix
index 2b74306cd253..ad128d4e1270 100644
--- a/nixpkgs/pkgs/games/7kaa/default.nix
+++ b/nixpkgs/pkgs/games/7kaa/default.nix
@@ -15,17 +15,15 @@
 }:
 
 let
+  pname = "7kaa";
+  version = "2.15.4p1";
 
-  name = "7kaa";
-  versionMajor = "2.15";
-  versionMinor = "4p1";
-
-  music = stdenv.mkDerivation rec {
-    pname = "${name}-music";
-    version = "${versionMajor}";
+  music = stdenv.mkDerivation {
+    pname = "7kaa-music";
+    version = lib.versions.majorMinor version;
 
     src = fetchurl {
-      url = "https://www.7kfans.com/downloads/${name}-music-${versionMajor}.tar.bz2";
+      url = "https://www.7kfans.com/downloads/7kaa-music-${lib.versions.majorMinor version}.tar.bz2";
       sha256 = "sha256-sNdntuJXGaFPXzSpN0SoAi17wkr2YnW+5U38eIaVwcM=";
     };
 
@@ -41,8 +39,7 @@ let
 in
 
 gccStdenv.mkDerivation rec {
-  pname = "${name}";
-  version = "v${versionMajor}.${versionMinor}";
+  inherit pname version;
 
   src = fetchFromGitHub {
     owner = "the3dfxdude";
diff --git a/nixpkgs/pkgs/games/airstrike/default.nix b/nixpkgs/pkgs/games/airstrike/default.nix
index 12b485764a5b..8441ac7a2fee 100644
--- a/nixpkgs/pkgs/games/airstrike/default.nix
+++ b/nixpkgs/pkgs/games/airstrike/default.nix
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     cp -r data airstrikerc $out/share
 
     wrapProgram $out/bin/airstrike \
-      --run "cd $out/share"
+      --chdir "$out/share"
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/games/angband/default.nix b/nixpkgs/pkgs/games/angband/default.nix
index 3f706b42c32c..28de108ca7fa 100644
--- a/nixpkgs/pkgs/games/angband/default.nix
+++ b/nixpkgs/pkgs/games/angband/default.nix
@@ -1,4 +1,6 @@
-{ lib, stdenv, fetchFromGitHub, autoreconfHook, ncurses5 }:
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, ncurses5
+, enableSdl2 ? false, SDL2, SDL2_image, SDL2_sound, SDL2_mixer, SDL2_ttf
+}:
 
 stdenv.mkDerivation rec {
   pname = "angband";
@@ -11,14 +13,25 @@ stdenv.mkDerivation rec {
     sha256 = "sha256-Fp3BGCZYYdQCKXOLYsT4zzlibNRlbELZi26ofrbGGPQ=";
   };
 
+
   nativeBuildInputs = [ autoreconfHook ];
-  buildInputs = [ ncurses5 ];
+  buildInputs = [ ncurses5 ]
+  ++ lib.optionals enableSdl2 [
+    SDL2
+    SDL2_image
+    SDL2_sound
+    SDL2_mixer
+    SDL2_ttf
+  ];
+
+  configureFlags = lib.optional enableSdl2 "--enable-sdl2";
+
   installFlags = [ "bindir=$(out)/bin" ];
 
   meta = with lib; {
     homepage = "https://angband.github.io/angband";
     description = "A single-player roguelike dungeon exploration game";
-    maintainers = [ maintainers.chattered ];
+    maintainers = [ ];
     license = licenses.gpl2;
   };
 }
diff --git a/nixpkgs/pkgs/games/anki/bin.nix b/nixpkgs/pkgs/games/anki/bin.nix
index 7e62f006102f..82064325ab5f 100644
--- a/nixpkgs/pkgs/games/anki/bin.nix
+++ b/nixpkgs/pkgs/games/anki/bin.nix
@@ -1,24 +1,31 @@
-{ fetchurl, stdenv, lib, buildFHSUserEnv, appimageTools, writeShellScript, anki, undmg }:
+{ fetchurl, stdenv, lib, buildFHSUserEnv, appimageTools, writeShellScript, anki, undmg, zstd }:
 
 let
   pname = "anki-bin";
   # Update hashes for both Linux and Darwin!
-  version = "2.1.49";
+  version = "2.1.54";
 
   sources = {
     linux = fetchurl {
-      url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-linux.tar.bz2";
-      sha256 = "sha256-uG39g9CXnquArFsxtFHWWoDaNwu8y2KKh+SqGt8aqi0=";
+      url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-linux-qt6.tar.zst";
+      sha256 = "sha256-NFhgVd4ctEsh7iaSZ9v0OMszd81H41eq+y+FRIhcCtE=";
     };
-    darwin = fetchurl {
-      url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac.dmg";
-      sha256 = "sha256-sEVWZQpICL7RYrOuPm1Y5XhzPxCwNk1WGP1rctTtE4Y=";
+
+    # For some reason anki distributes completely separate dmg-files for the aarch64 version and the x86_64 version
+    darwin-x86_64 = fetchurl {
+      url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac-intel-qt6.dmg";
+      sha256 = "sha256-kus59Z9Oe4sbAlF4szeg751hlSEUR0ijKz4rjfHEWgA=";
+    };
+    darwin-aarch64 = fetchurl {
+      url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac-apple-qt6.dmg";
+      sha256 = "sha256-ROIpGB3W21ttWj+cRkf0rpLFrO4LR6+ZyGRsalz5J+E=";
     };
   };
 
   unpacked = stdenv.mkDerivation {
     inherit pname version;
 
+    nativeBuildInputs = [ zstd ];
     src = sources.linux;
 
     installPhase = ''
@@ -37,7 +44,7 @@ let
 
   meta = with lib; {
     inherit (anki.meta) license homepage description longDescription;
-    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
     maintainers = with maintainers; [ atemu ];
   };
 
@@ -47,6 +54,9 @@ in
 if stdenv.isLinux then buildFHSUserEnv (appimageTools.defaultFhsEnvArgs // {
   name = "anki";
 
+  # Dependencies of anki
+  targetPkgs = pkgs: (with pkgs; [ xorg.libxkbfile krb5 ]);
+
   runScript = writeShellScript "anki-wrapper.sh" ''
     exec ${unpacked}/bin/anki
   '';
@@ -63,7 +73,7 @@ if stdenv.isLinux then buildFHSUserEnv (appimageTools.defaultFhsEnvArgs // {
 }) else stdenv.mkDerivation {
   inherit pname version passthru;
 
-  src = sources.darwin;
+  src = if stdenv.isAarch64 then sources.darwin-aarch64 else sources.darwin-x86_64;
 
   nativeBuildInputs = [ undmg ];
   sourceRoot = ".";
diff --git a/nixpkgs/pkgs/games/asc/default.nix b/nixpkgs/pkgs/games/asc/default.nix
index 4dc671f5c3c3..a6a1129acad7 100644
--- a/nixpkgs/pkgs/games/asc/default.nix
+++ b/nixpkgs/pkgs/games/asc/default.nix
@@ -13,7 +13,7 @@ stdenv.mkDerivation rec {
 
   configureFlags = [ "--disable-paragui" "--disable-paraguitest" ];
 
-  NIX_CFLAGS_COMPILE = "-fpermissive -Wno-error=narrowing"; # I'm too lazy to catch all gcc47-related problems
+  NIX_CFLAGS_COMPILE = "-fpermissive -Wno-error=narrowing -std=c++11"; # I'm too lazy to catch all gcc47-related problems
   hardeningDisable = [ "format" ];
 
   buildInputs = [
diff --git a/nixpkgs/pkgs/games/assaultcube/default.nix b/nixpkgs/pkgs/games/assaultcube/default.nix
index 1013be2694e9..7164e66feebf 100644
--- a/nixpkgs/pkgs/games/assaultcube/default.nix
+++ b/nixpkgs/pkgs/games/assaultcube/default.nix
@@ -1,42 +1,67 @@
-{ fetchFromGitHub, lib, stdenv, makeDesktopItem, openal, pkg-config, libogg,
-  libvorbis, SDL, SDL_image, makeWrapper, zlib, file,
-  client ? true, server ? true }:
-
-with lib;
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeDesktopItem
+, copyDesktopItems
+, openal
+, pkg-config
+, libogg
+, libvorbis
+, SDL2
+, SDL2_image
+, makeWrapper
+, zlib
+, file
+, client ? true, server ? true
+}:
 
 stdenv.mkDerivation rec {
-
-  # master branch has legacy (1.2.0.2) protocol 1201 and gcc 6 fix.
   pname = "assaultcube";
-  version = "unstable-2018-05-20";
+  version = "1.3.0.2";
 
   src = fetchFromGitHub {
     owner = "assaultcube";
     repo  = "AC";
-    rev = "f58ea22b46b5013a520520670434b3c235212371";
-    sha256 = "1vfn3d55vmmipdykrcfvgk6dddi9y95vlclsliirm7jdp20f15hd";
+    rev = "v${version}";
+    sha256 = "0qv339zw9q5q1y7bghca03gw7z4v89sl4lbr6h3b7siy08mcwiz9";
   };
 
-  nativeBuildInputs = [ makeWrapper pkg-config ];
-
-  buildInputs = [ file zlib ] ++ optionals client [ openal SDL SDL_image libogg libvorbis ];
-
-  targets = (optionalString server "server") + (optionalString client " client");
+  nativeBuildInputs = [
+    makeWrapper
+    pkg-config
+    copyDesktopItems
+  ];
+
+  buildInputs = [
+    file
+    zlib
+  ] ++ lib.optionals client [
+    openal
+    SDL2
+    SDL2_image
+    libogg
+    libvorbis
+  ];
+
+  targets = (lib.optionalString server "server") + (lib.optionalString client " client");
   makeFlags = [ "-C source/src" "CXX=${stdenv.cc.targetPrefix}c++" targets ];
 
-  desktop = makeDesktopItem {
-    name = "AssaultCube";
-    desktopName = "AssaultCube";
-    comment = "A multiplayer, first-person shooter game, based on the CUBE engine. Fast, arcade gameplay.";
-    genericName = "First-person shooter";
-    categories = [ "Game" "ActionGame" "Shooter" ];
-    icon = "assaultcube.png";
-    exec = pname;
-  };
+  desktopItems = [
+    (makeDesktopItem {
+      name = pname;
+      desktopName = "AssaultCube";
+      comment = "A multiplayer, first-person shooter game, based on the CUBE engine. Fast, arcade gameplay.";
+      genericName = "First-person shooter";
+      categories = [ "Game" "ActionGame" "Shooter" ];
+      icon = "assaultcube";
+      exec = pname;
+    })
+  ];
 
   gamedatadir = "/share/games/${pname}";
 
   installPhase = ''
+    runHook preInstall
 
     bindir=$out/bin
 
@@ -47,26 +72,27 @@ stdenv.mkDerivation rec {
     if (test -e source/src/ac_client) then
       cp source/src/ac_client $bindir
       mkdir -p $out/share/applications
-      cp ${desktop}/share/applications/* $out/share/applications
       install -Dpm644 packages/misc/icon.png $out/share/icons/assaultcube.png
       install -Dpm644 packages/misc/icon.png $out/share/pixmaps/assaultcube.png
 
       makeWrapper $out/bin/ac_client $out/bin/${pname} \
-        --run "cd $out/$gamedatadir" --add-flags "--home=\$HOME/.assaultcube/v1.2next --init"
+        --chdir "$out/$gamedatadir" --add-flags "--home=\$HOME/.assaultcube/v1.2next --init"
     fi
 
     if (test -e source/src/ac_server) then
       cp source/src/ac_server $bindir
       makeWrapper $out/bin/ac_server $out/bin/${pname}-server \
-        --run "cd $out/$gamedatadir" --add-flags "-Cconfig/servercmdline.txt"
+        --chdir "$out/$gamedatadir" --add-flags "-Cconfig/servercmdline.txt"
     fi
-    '';
 
-  meta = {
+    runHook postInstall
+  '';
+
+  meta = with lib; {
     description = "Fast and fun first-person-shooter based on the Cube fps";
     homepage = "https://assault.cubers.net";
-    maintainers = [ ];
     platforms = platforms.linux; # should work on darwin with a little effort.
-    license = lib.licenses.unfree;
+    license = licenses.unfree;
+    maintainers = with maintainers; [ darkonion0 ];
   };
 }
diff --git a/nixpkgs/pkgs/games/azimuth/default.nix b/nixpkgs/pkgs/games/azimuth/default.nix
index dcc67533fac1..301fa231122d 100644
--- a/nixpkgs/pkgs/games/azimuth/default.nix
+++ b/nixpkgs/pkgs/games/azimuth/default.nix
@@ -14,8 +14,9 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ which ];
   buildInputs = [ SDL ];
 
+  NIX_CFLAGS_COMPILE = [ "-Wno-error=maybe-uninitialized" ];
+
   preConfigure = ''
-    cat Makefile
     substituteInPlace data/azimuth.desktop \
       --replace Exec=azimuth "Exec=$out/bin/azimuth" \
       --replace "Version=%AZ_VERSION_NUMBER" "Version=${version}"
diff --git a/nixpkgs/pkgs/games/black-hole-solver/default.nix b/nixpkgs/pkgs/games/black-hole-solver/default.nix
index e859e72d96b1..601aaeb1d90d 100644
--- a/nixpkgs/pkgs/games/black-hole-solver/default.nix
+++ b/nixpkgs/pkgs/games/black-hole-solver/default.nix
@@ -6,7 +6,7 @@
 
 stdenv.mkDerivation rec {
   pname = "black-hole-solver";
-  version = "1.10.1";
+  version = "1.12.0";
 
   meta = with lib; {
     homepage = "https://www.shlomifish.org/open-source/projects/black-hole-solitaire-solver/";
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "https://fc-solve.shlomifish.org/downloads/fc-solve/${pname}-${version}.tar.xz";
-    sha256 = "1qhihmk4fwz6n16c7bnxnh3v7jhbb7xhkc9wk9484bp0k4x9bq9n";
+    sha256 = "sha256-0y8yU291cykliPQbsNha5C1WE3bCGNxKtrrf5JBKN6c=";
   };
 
   nativeBuildInputs = [ cmake perl pkg-config python3 ];
diff --git a/nixpkgs/pkgs/games/blightmud/default.nix b/nixpkgs/pkgs/games/blightmud/default.nix
index 2e177f169fab..43feb8b7c2a8 100644
--- a/nixpkgs/pkgs/games/blightmud/default.nix
+++ b/nixpkgs/pkgs/games/blightmud/default.nix
@@ -75,5 +75,7 @@ rustPlatform.buildRustPackage rec {
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ cpu ];
     platforms = platforms.linux;
+    # See https://github.com/NixOS/nixpkgs/pull/160120
+    broken = withTTS;
   };
 }
diff --git a/nixpkgs/pkgs/games/brogue/default.nix b/nixpkgs/pkgs/games/brogue/default.nix
index d4f1f8faeeba..e5b0f838be1a 100644
--- a/nixpkgs/pkgs/games/brogue/default.nix
+++ b/nixpkgs/pkgs/games/brogue/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, SDL, ncurses, libtcod, makeDesktopItem }:
+{ lib, stdenv, fetchurl, fetchpatch, SDL, ncurses, libtcod, makeDesktopItem }:
 
 stdenv.mkDerivation rec {
   pname = "brogue";
@@ -8,10 +8,19 @@ stdenv.mkDerivation rec {
     url = "https://sites.google.com/site/broguegame/brogue-${version}-linux-amd64.tbz2";
     sha256 = "0i042zb3axjf0cpgpdh8hvfn66dbfizidyvw0iymjk2n760z2kx7";
   };
+  patches = [
+    # Pull upstream fix for -fno-common toolchains:
+    #  https://github.com/tmewett/BrogueCE/pull/63
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/tmewett/BrogueCE/commit/2c7ed0c48d9efd06bf0a2589ba967c0a22a8fa87.patch";
+      sha256 = "19lr2fa25dh79klm4f4kqyyqq7w5xmw9z0fvylkcckqvcv7dwhp3";
+    })
+  ];
 
   prePatch = ''
     sed -i Makefile -e 's,LIBTCODDIR=.*,LIBTCODDIR=${libtcod},g' \
-                    -e 's,sdl-config,${SDL.dev}/bin/sdl-config,g'
+                    -e 's,sdl-config,${lib.getDev SDL}/bin/sdl-config,g'
     sed -i src/platform/tcod-platform.c -e "s,fonts/font,$out/share/brogue/fonts/font,g"
     make clean
     rm -rf src/libtcod*
diff --git a/nixpkgs/pkgs/games/bugdom/default.nix b/nixpkgs/pkgs/games/bugdom/default.nix
new file mode 100644
index 000000000000..75bcad2f0db1
--- /dev/null
+++ b/nixpkgs/pkgs/games/bugdom/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchFromGitHub, SDL2, IOKit, Foundation, cmake, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "bugdom";
+  version = "1.3.2";
+
+  src = fetchFromGitHub {
+    owner = "jorio";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256-pgms2mipW1zol35LVCuU5+7mN7CBiVGFvu1CJ3CrGU0=";
+    fetchSubmodules = true;
+  };
+
+  postPatch = lib.optionalString stdenv.hostPlatform.isDarwin ''
+    # Expects SDL2.framework in specific location, which we don't have
+    # Passing this in cmakeFlags doesn't work because the path is hard-coded for Darwin
+    substituteInPlace cmake/FindSDL2.cmake \
+      --replace 'set(SDL2_LIBRARIES' 'set(SDL2_LIBRARIES "${SDL2}/lib/libSDL2.dylib") #'
+  '';
+
+  buildInputs = [
+    SDL2
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    IOKit
+    Foundation
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+
+  cmakeFlags = lib.optionals stdenv.hostPlatform.isDarwin [
+    "-DCMAKE_OSX_ARCHITECTURES=${stdenv.hostPlatform.darwinArch}"
+    # Expects SDL2.framework in specific location, which we don't have
+    "-DSDL2_INCLUDE_DIRS=${SDL2.dev}/include/SDL2"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+  '' + (if stdenv.hostPlatform.isDarwin then ''
+    mkdir -p $out/{bin,Applications}
+    mv {,$out/Applications/}Bugdom.app
+    ln -s $out/{Applications/Bugdom.app/Contents/MacOS,bin}/Bugdom
+  '' else ''
+    mkdir -p $out/share/bugdom
+    mv Data $out/share/bugdom
+    install -Dm755 {.,$out/bin}/Bugdom
+    wrapProgram $out/bin/Bugdom --run "cd $out/share/bugdom"
+  '') + ''
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A port of Bugdom, a 1999 Macintosh game by Pangea Software, for modern operating systems";
+    homepage = "https://github.com/jorio/Bugdom";
+    license = with licenses; [ cc-by-sa-40 ];
+    maintainers = with maintainers; [ lux ];
+    mainProgram = "Bugdom";
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/bzflag/default.nix b/nixpkgs/pkgs/games/bzflag/default.nix
index 35a481fb2f42..db144a147f6d 100644
--- a/nixpkgs/pkgs/games/bzflag/default.nix
+++ b/nixpkgs/pkgs/games/bzflag/default.nix
@@ -4,11 +4,11 @@
 
 stdenv.mkDerivation rec {
   pname = "bzflag";
-  version = "2.4.22";
+  version = "2.4.24";
 
   src = fetchurl {
     url = "https://download.bzflag.org/${pname}/source/${version}/${pname}-${version}.tar.bz2";
-    sha256 = "sha256-nmRlMwK2V72LX5b+EVCp/4Ch1Tptfoo1E4xrGwIAak0=";
+    sha256 = "sha256-X4Exvrf8i6UeMjoG7NfY6rkVN8NCzoehE+XrbqmM48Q=";
   };
 
   nativeBuildInputs = [ pkg-config ];
@@ -20,6 +20,6 @@ stdenv.mkDerivation rec {
     homepage = "https://bzflag.org/";
     license = licenses.lgpl21Plus;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ fpletz ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/common.nix b/nixpkgs/pkgs/games/cataclysm-dda/common.nix
index 1701d84e8df7..4e39a64c4001 100644
--- a/nixpkgs/pkgs/games/cataclysm-dda/common.nix
+++ b/nixpkgs/pkgs/games/cataclysm-dda/common.nix
@@ -40,16 +40,11 @@ stdenv.mkDerivation {
   buildInputs = cursesDeps ++ optionals tiles tilesDeps;
 
   postPatch = ''
-    patchShebangs .
-
-    # Locale patch required for Darwin builds, see:
-    # https://github.com/NixOS/nixpkgs/pull/74064#issuecomment-560083970
-    sed -i src/translations.cpp \
-        -e 's@#elif (defined(__linux__) || (defined(MACOSX) && !defined(TILES)))@#elif 1@'
+    patchShebangs lang/compile_mo.sh
   '';
 
   makeFlags = [
-    "PREFIX=$(out)" "LANGUAGES=all"
+    "PREFIX=$(out)" "LANGUAGES=all" "RUNTESTS=0"
     (if useXdgDir then "USE_XDG_DIR=1" else "USE_HOME_DIR=1")
   ] ++ optionals (!debug) [
     "RELEASE=1"
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/git.nix b/nixpkgs/pkgs/games/cataclysm-dda/git.nix
index 3dc0e944b5ef..9578480b7940 100644
--- a/nixpkgs/pkgs/games/cataclysm-dda/git.nix
+++ b/nixpkgs/pkgs/games/cataclysm-dda/git.nix
@@ -1,4 +1,4 @@
-{ lib, callPackage, CoreFoundation, fetchFromGitHub, pkgs, wrapCDDA, attachPkgs
+{ stdenv, lib, callPackage, CoreFoundation, fetchFromGitHub, pkgs, wrapCDDA, attachPkgs
 , tiles ? true, Cocoa
 , debug ? false
 , useXdgDir ? false
@@ -29,6 +29,8 @@ let
     meta = common.meta // {
       maintainers = with lib.maintainers;
       common.meta.maintainers ++ [ rardiol ];
+      # /nix/store/s8xaq3x7mcysvd752in2nihb1nr6svsl-SDL2-2.0.20-dev/include/SDL2/SDL_events.h:645:65: error: use of old-style cast [-Werror,-Wold-style-cast]
+      broken = (stdenv.isDarwin && stdenv.isx86_64);
     };
   });
 in
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/locale-path-stable.patch b/nixpkgs/pkgs/games/cataclysm-dda/locale-path-stable.patch
new file mode 100644
index 000000000000..db8592646f0d
--- /dev/null
+++ b/nixpkgs/pkgs/games/cataclysm-dda/locale-path-stable.patch
@@ -0,0 +1,20 @@
+diff --git a/src/translations.cpp b/src/translations.cpp
+index fa0ee479b2..0e470098dc 100644
+--- a/src/translations.cpp
++++ b/src/translations.cpp
+@@ -141,15 +141,11 @@ void select_language()
+ std::string locale_dir()
+ {
+     std::string loc_dir;
+-#if !defined(__ANDROID__) && ((defined(__linux__) || defined(BSD) || (defined(MACOSX) && !defined(TILES))))
+     if( !PATH_INFO::base_path().empty() ) {
+         loc_dir = PATH_INFO::base_path() + "share/locale";
+     } else {
+         loc_dir = PATH_INFO::langdir();
+     }
+-#else
+-    loc_dir = PATH_INFO::langdir();
+-#endif
+     return loc_dir;
+ }
+ 
diff --git a/nixpkgs/pkgs/games/cataclysm-dda/stable.nix b/nixpkgs/pkgs/games/cataclysm-dda/stable.nix
index 453f5ceacae1..52f3ca41f480 100644
--- a/nixpkgs/pkgs/games/cataclysm-dda/stable.nix
+++ b/nixpkgs/pkgs/games/cataclysm-dda/stable.nix
@@ -19,6 +19,11 @@ let
       sha256 = "sha256-2su1uQaWl9WG41207dRvOTdVKcQsEz/y0uTi9JX52uI=";
     };
 
+    patches = [
+      # Unconditionally look for translation files in $out/share/locale
+      ./locale-path-stable.patch
+    ];
+
     makeFlags = common.makeFlags ++ [
       # Makefile declares version as 0.F, with no minor release number
       "VERSION=${version}"
diff --git a/nixpkgs/pkgs/games/cdogs-sdl/default.nix b/nixpkgs/pkgs/games/cdogs-sdl/default.nix
index 2b072a447523..3a7f4ff63eba 100644
--- a/nixpkgs/pkgs/games/cdogs-sdl/default.nix
+++ b/nixpkgs/pkgs/games/cdogs-sdl/default.nix
@@ -13,20 +13,23 @@
 
 stdenv.mkDerivation rec {
   pname = "cdogs";
-  version = "0.13.0";
+  version = "1.3.1";
 
   src = fetchFromGitHub {
     repo = "cdogs-sdl";
     owner = "cxong";
     rev = version;
-    sha256 = "sha256-7wNiDA/gOpqzSFWw8Bn6suC/f5RXdDTxPV49nCvOxas=";
+    sha256 = "sha256-fKqipk1kiPC6HrkNzxHK2aYe5WDZ3hEbPCwsqK5uQ2s=";
   };
 
   postPatch = ''
     patchShebangs src/proto/nanopb/generator/*
   '';
 
-  cmakeFlags = [ "-DCDOGS_DATA_DIR=${placeholder "out"}/" ];
+  cmakeFlags = [
+    "-DCDOGS_DATA_DIR=${placeholder "out"}/"
+    "-DCMAKE_C_FLAGS=-Wno-error=array-bounds"
+  ];
 
   nativeBuildInputs = [
     pkg-config
diff --git a/nixpkgs/pkgs/games/cgoban/default.nix b/nixpkgs/pkgs/games/cgoban/default.nix
index 162de112fb55..3d202985f1b0 100644
--- a/nixpkgs/pkgs/games/cgoban/default.nix
+++ b/nixpkgs/pkgs/games/cgoban/default.nix
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     description = "Client for the KGS Go Server";
     homepage = "https://www.gokgs.com/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.free;
     maintainers = with maintainers; [ savannidgerinel ];
     platforms = adoptopenjdk-jre-bin.meta.platforms;
diff --git a/nixpkgs/pkgs/games/chocolate-doom/default.nix b/nixpkgs/pkgs/games/chocolate-doom/default.nix
index 28ef9b6417ea..fabb12fa71fa 100644
--- a/nixpkgs/pkgs/games/chocolate-doom/default.nix
+++ b/nixpkgs/pkgs/games/chocolate-doom/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, autoreconfHook, pkg-config, SDL2, SDL2_mixer, SDL2_net, fetchFromGitHub }:
+{ lib, stdenv, autoreconfHook, pkg-config, SDL2, SDL2_mixer, SDL2_net, fetchFromGitHub, fetchpatch }:
 
 stdenv.mkDerivation rec {
   pname = "chocolate-doom";
@@ -11,6 +11,16 @@ stdenv.mkDerivation rec {
     sha256 = "1zlcqhd49c5n8vaahgaqrc2y10z86xng51sbd82xm3rk2dly25jp";
   };
 
+  patches = [
+    # Pull upstream patch to fix builx against gcc-10:
+    #   https://github.com/chocolate-doom/chocolate-doom/pull/1257
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/chocolate-doom/chocolate-doom/commit/a8fd4b1f563d24d4296c3e8225c8404e2724d4c2.patch";
+      sha256 = "1dmbygn952sy5n8qqp0asg11pmygwgygl17lrj7i0fxa0nrhixhj";
+    })
+  ];
+
   postPatch = ''
     sed -e 's#/games#/bin#g' -i src{,/setup}/Makefile.am
   '';
diff --git a/nixpkgs/pkgs/games/ckan/default.nix b/nixpkgs/pkgs/games/ckan/default.nix
index 3649369aeaad..88d13b9b6f8d 100644
--- a/nixpkgs/pkgs/games/ckan/default.nix
+++ b/nixpkgs/pkgs/games/ckan/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "ckan";
-  version = "1.30.4";
+  version = "1.31.0";
 
   src = fetchurl {
     url = "https://github.com/KSP-CKAN/CKAN/releases/download/v${version}/ckan.exe";
-    sha256 = "sha256-IgPqUEDpaIuGoaGoH2GCEzh3KxF3pkJC3VjTYXwSiQE=";
+    sha256 = "sha256-+Tm1aQUibRNn1jfewowOTBHt1OngJKD+Jeh9meg0YxA=";
   };
 
   dontUnpack = true;
diff --git a/nixpkgs/pkgs/games/cl-wordle/default.nix b/nixpkgs/pkgs/games/cl-wordle/default.nix
index 1ad3487c3fed..505c5166e42a 100644
--- a/nixpkgs/pkgs/games/cl-wordle/default.nix
+++ b/nixpkgs/pkgs/games/cl-wordle/default.nix
@@ -1,15 +1,17 @@
-{ lib, rustPlatform, fetchCrate }:
+{ lib, rustPlatform, fetchFromGitHub }:
 
 rustPlatform.buildRustPackage rec {
   pname = "cl-wordle";
-  version = "0.4.0";
+  version = "0.5.0";
 
-  src = fetchCrate {
-    inherit pname version;
-    sha256 = "sha256-z2XpXgOviBRcberwpxQ4ml1T04k5kMhG7wA0PAYWENg=";
+  src = fetchFromGitHub {
+    owner = "conradludgate";
+    repo = "wordle";
+    rev = "v${version}";
+    sha256 = "sha256-wFTvzAzboUFQg3fauIwIdRChK7rmLES92jK+8ff1D3s=";
   };
 
-  cargoSha256 = "sha256-C7UMkhgez2CtddftARlwN1TjZ1N26NnZfpRiX1KkMEA=";
+  cargoSha256 = "sha256-PtJbLpAUH44alupFY6wX++t/QsKknn5bXvnXzdYsd9o=";
 
   meta = with lib; {
     description = "Wordle TUI in Rust";
diff --git a/nixpkgs/pkgs/games/crack-attack/default.nix b/nixpkgs/pkgs/games/crack-attack/default.nix
index fb13ce8c1638..69395e1c44aa 100644
--- a/nixpkgs/pkgs/games/crack-attack/default.nix
+++ b/nixpkgs/pkgs/games/crack-attack/default.nix
@@ -31,6 +31,6 @@ stdenv.mkDerivation rec {
     homepage = "https://www.nongnu.org/crack-attack/";
     license = lib.licenses.gpl2;
     platforms = lib.platforms.linux;
-    maintainers = [ lib.maintainers.piotr ];
+    maintainers = [ ];
   };
 }
diff --git a/nixpkgs/pkgs/games/crossfire/crossfire-arch.nix b/nixpkgs/pkgs/games/crossfire/crossfire-arch.nix
index ff9e0f9dea6d..c09f474e70c7 100644
--- a/nixpkgs/pkgs/games/crossfire/crossfire-arch.nix
+++ b/nixpkgs/pkgs/games/crossfire/crossfire-arch.nix
@@ -3,12 +3,12 @@
 
 stdenv.mkDerivation rec {
   pname = "crossfire-arch";
-  version = "r${toString rev}";
+  version = rev;
 
   src = fetchsvn {
     url = "http://svn.code.sf.net/p/crossfire/code/arch/trunk/";
-    sha256 = sha256;
-    rev = rev;
+    inherit sha256;
+    rev = "r${rev}";
   };
 
   installPhase = ''
diff --git a/nixpkgs/pkgs/games/crossfire/crossfire-client.nix b/nixpkgs/pkgs/games/crossfire/crossfire-client.nix
index 799ae4ab6ee7..0d335b4f529a 100644
--- a/nixpkgs/pkgs/games/crossfire/crossfire-client.nix
+++ b/nixpkgs/pkgs/games/crossfire/crossfire-client.nix
@@ -7,12 +7,12 @@
 
 stdenv.mkDerivation rec {
   pname = "crossfire-client";
-  version = "r${toString rev}";
+  version = rev;
 
   src = fetchsvn {
     url = "http://svn.code.sf.net/p/crossfire/code/client/trunk/";
-    sha256 = sha256;
-    rev = rev;
+    inherit sha256;
+    rev = "r${rev}";
   };
 
   nativeBuildInputs = [ cmake pkg-config perl vala ];
diff --git a/nixpkgs/pkgs/games/crossfire/crossfire-maps.nix b/nixpkgs/pkgs/games/crossfire/crossfire-maps.nix
index 0521b038d361..cb514a90d169 100644
--- a/nixpkgs/pkgs/games/crossfire/crossfire-maps.nix
+++ b/nixpkgs/pkgs/games/crossfire/crossfire-maps.nix
@@ -3,12 +3,12 @@
 
 stdenv.mkDerivation rec {
   pname = "crossfire-maps";
-  version = "r${toString rev}";
+  version = rev;
 
   src = fetchsvn {
     url = "http://svn.code.sf.net/p/crossfire/code/maps/trunk/";
-    sha256 = sha256;
-    rev = rev;
+    inherit sha256;
+    rev = "r${rev}";
   };
 
   installPhase = ''
diff --git a/nixpkgs/pkgs/games/crossfire/crossfire-server.nix b/nixpkgs/pkgs/games/crossfire/crossfire-server.nix
index 9259e8e52faa..f99e08a5a46f 100644
--- a/nixpkgs/pkgs/games/crossfire/crossfire-server.nix
+++ b/nixpkgs/pkgs/games/crossfire/crossfire-server.nix
@@ -4,12 +4,12 @@
 
 stdenv.mkDerivation rec {
   pname = "crossfire-server";
-  version = "r${toString rev}";
+  version = rev;
 
   src = fetchsvn {
     url = "http://svn.code.sf.net/p/crossfire/code/server/trunk/";
-    sha256 = sha256;
-    rev = rev;
+    inherit sha256;
+    rev = "r${rev}";
   };
 
   nativeBuildInputs = [ autoconf automake libtool flex perl check pkg-config python3 ];
diff --git a/nixpkgs/pkgs/games/crossfire/default.nix b/nixpkgs/pkgs/games/crossfire/default.nix
index bc74c00bcce4..7d0716df3d9b 100644
--- a/nixpkgs/pkgs/games/crossfire/default.nix
+++ b/nixpkgs/pkgs/games/crossfire/default.nix
@@ -3,26 +3,26 @@
 rec {
   crossfire-client = callPackage ./crossfire-client.nix {
     version = "1.75.0";
-    rev = 21760;
+    rev = "21760";
     sha256 = "0b42sak8hj60nywfswkps777asy9p8r9wsn7pmj2nqbd29ng1p9d";
   };
 
   crossfire-server = callPackage ./crossfire-server.nix {
     version = "latest";
-    rev = 22111;
+    rev = "22111";
     sha256 = "04fjif6zv642n2zlw27cgzkak2kknwrxqzg42bvzl7q901bsr9l7";
     maps = crossfire-maps; arch = crossfire-arch;
   };
 
   crossfire-arch = callPackage ./crossfire-arch.nix {
     version = "latest";
-    rev = 22111;
+    rev = "22111";
     sha256 = "0l4rp3idvbhknpxxs0w4i4nqfg01wblzm4v4j375xwxxbf00j0ms";
   };
 
   crossfire-maps = callPackage ./crossfire-maps.nix {
     version = "latest";
-    rev = 22111;
+    rev = "22111";
     sha256 = "1dwfc84acjvbjgjakkb8z8pdlksbsn90j0z8z8rq37lqx0kx1sap";
   };
 }
diff --git a/nixpkgs/pkgs/games/cutemaze/default.nix b/nixpkgs/pkgs/games/cutemaze/default.nix
index 44c48af5c29e..ae6ade155f25 100644
--- a/nixpkgs/pkgs/games/cutemaze/default.nix
+++ b/nixpkgs/pkgs/games/cutemaze/default.nix
@@ -1,17 +1,34 @@
-{ lib, stdenv, fetchurl, qmake, qttools, qtsvg, mkDerivation }:
+{ lib
+, stdenv
+, fetchurl
+, cmake
+, qttools
+, wrapQtAppsHook
+, qtbase
+, qtwayland
+, qtsvg
+}:
 
-mkDerivation rec {
+stdenv.mkDerivation rec {
   pname = "cutemaze";
-  version = "1.3.0";
+  version = "1.3.1";
 
   src = fetchurl {
     url = "https://gottcode.org/cutemaze/${pname}-${version}-src.tar.bz2";
-    sha256 = "sha256-h7+H2E37ZVSnlPa6ID+lNEvFtU5PfdMSlBjqBumojoU=";
+    sha256 = "6944931cd39e9ef202c11483b7b2b7409a068c52fa5fd4419ff938b1158c72ab";
   };
 
-  nativeBuildInputs = [ qmake qttools ];
+  nativeBuildInputs = [
+    cmake
+    qttools
+    wrapQtAppsHook
+  ];
 
-  buildInputs = [ qtsvg ];
+  buildInputs = [
+    qtbase
+    qtwayland
+    qtsvg
+  ];
 
   postInstall = lib.optionalString stdenv.isDarwin ''
     mkdir -p $out/Applications
diff --git a/nixpkgs/pkgs/games/darkplaces/default.nix b/nixpkgs/pkgs/games/darkplaces/default.nix
new file mode 100644
index 000000000000..e7b70036cdff
--- /dev/null
+++ b/nixpkgs/pkgs/games/darkplaces/default.nix
@@ -0,0 +1,58 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, zlib
+, libjpeg
+, SDL2
+, libvorbis
+}:
+stdenv.mkDerivation rec {
+  name = "darkplaces";
+  version = "unstable-2022-05-10";
+
+  src = fetchFromGitHub {
+    owner = "DarkPlacesEngine";
+    repo = "darkplaces";
+    rev = "f16954a9d40168253ac5d9890dabcf7dbd266cd9";
+    hash = "sha256-5KsUcgHbuzFUE6LcclqI8VPSFbXZzBnxzOBB9Kf8krI=";
+  };
+
+  buildInputs = [
+    zlib
+    libjpeg
+    SDL2
+  ];
+
+  buildFlags = "release";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    install -m755 darkplaces-sdl $out/bin/darkplaces
+    install -m755 darkplaces-dedicated $out/bin/darkplaces-dedicated
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    patchelf \
+      --add-needed ${libvorbis}/lib/libvorbisfile.so \
+      --add-needed ${libvorbis}/lib/libvorbis.so \
+      $out/bin/darkplaces
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.icculus.org/twilight/darkplaces/";
+    description = "A quake 1 engine implementation by LadyHavoc";
+    longDescription = ''
+      A game engine based on the Quake 1 engine by id Software.
+      It improves and builds upon the original 1996 engine by adding modern
+      rendering features, and expanding upon the engine's native game code
+      language QuakeC, as well as supporting additional map and model formats.
+    '';
+    maintainers = with maintainers; [ necrophcodr ];
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/ddnet/default.nix b/nixpkgs/pkgs/games/ddnet/default.nix
index 1663e17b14d2..33b8ca4f0e9d 100644
--- a/nixpkgs/pkgs/games/ddnet/default.nix
+++ b/nixpkgs/pkgs/games/ddnet/default.nix
@@ -16,17 +16,23 @@
 , SDL2
 , sqlite
 , wavpack
+, ffmpeg
+, x264
+, vulkan-headers
+, vulkan-loader
+, glslang
+, spirv-tools
 }:
 
 stdenv.mkDerivation rec {
   pname = "ddnet";
-  version = "15.9.1";
+  version = "16.2.2";
 
   src = fetchFromGitHub {
     owner = "ddnet";
     repo = pname;
     rev = version;
-    sha256 = "sha256-QGtXI4Dbua5LBXSvB17tnSTGEvCCoopvg1XKBuDIEoQ=";
+    sha256 = "sha256-MrCPMtWdEsWUuvKaPWZK4Mh6nhPcKpsxkFKkWugdz8A=";
   };
 
   nativeBuildInputs = [ cmake ninja pkg-config ];
@@ -44,6 +50,12 @@ stdenv.mkDerivation rec {
     SDL2
     sqlite
     wavpack
+    ffmpeg
+    x264
+    vulkan-loader
+    vulkan-headers
+    glslang
+    spirv-tools
   ];
 
   cmakeFlags = [
diff --git a/nixpkgs/pkgs/games/deliantra/deliantra-arch.nix b/nixpkgs/pkgs/games/deliantra/arch.nix
index 2201ca2d1f5f..2201ca2d1f5f 100644
--- a/nixpkgs/pkgs/games/deliantra/deliantra-arch.nix
+++ b/nixpkgs/pkgs/games/deliantra/arch.nix
diff --git a/nixpkgs/pkgs/games/deliantra/deliantra-data.nix b/nixpkgs/pkgs/games/deliantra/data.nix
index 31ed7d0f0118..31ed7d0f0118 100644
--- a/nixpkgs/pkgs/games/deliantra/deliantra-data.nix
+++ b/nixpkgs/pkgs/games/deliantra/data.nix
diff --git a/nixpkgs/pkgs/games/deliantra/default.nix b/nixpkgs/pkgs/games/deliantra/default.nix
deleted file mode 100644
index 76a06c960187..000000000000
--- a/nixpkgs/pkgs/games/deliantra/default.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-pkgs:
-
-let
-  callPackage = pkgs.callPackage;
-in {
-  deliantra-server = callPackage ./deliantra-server.nix {};
-  deliantra-arch = callPackage ./deliantra-arch.nix {};
-  deliantra-maps = callPackage ./deliantra-maps.nix {};
-  deliantra-data = callPackage ./deliantra-data.nix {};
-}
diff --git a/nixpkgs/pkgs/games/deliantra/deliantra-maps.nix b/nixpkgs/pkgs/games/deliantra/maps.nix
index 1f87178102a0..1f87178102a0 100644
--- a/nixpkgs/pkgs/games/deliantra/deliantra-maps.nix
+++ b/nixpkgs/pkgs/games/deliantra/maps.nix
diff --git a/nixpkgs/pkgs/games/deliantra/deliantra-server.nix b/nixpkgs/pkgs/games/deliantra/server.nix
index e333b7a472f5..4185a46120e5 100644
--- a/nixpkgs/pkgs/games/deliantra/deliantra-server.nix
+++ b/nixpkgs/pkgs/games/deliantra/server.nix
@@ -23,16 +23,20 @@ stdenv.mkDerivation rec {
     autoconf perl gperf optipng pngnq rsync imagemagick
     pkg-config makeWrapper
   ];
+
   propagatedBuildInputs = perl-deps;
+
   buildInputs = [
     blitz boost glib
   ];
 
   hardeningDisable = [ "format" ];
+
   patches = [
     ./0001-abs.patch
     ./0002-datadir.patch
   ];
+
   postFixup = ''
     wrapProgram $out/bin/cfutil --prefix PERL5LIB : $PERL5LIB
     wrapProgram $out/bin/deliantra-server --prefix PERL5LIB : $PERL5LIB
diff --git a/nixpkgs/pkgs/games/devilutionx/default.nix b/nixpkgs/pkgs/games/devilutionx/default.nix
index ac76ab5ad189..c7943b24c95e 100644
--- a/nixpkgs/pkgs/games/devilutionx/default.nix
+++ b/nixpkgs/pkgs/games/devilutionx/default.nix
@@ -3,11 +3,13 @@
 , fetchFromGitHub
 , fetchpatch
 , fetchurl
-, fetchzip
+, bzip2
 , cmake
 , pkg-config
 , gettext
+, libsodium
 , SDL2
+, SDL_audiolib
 , SDL2_image
 , fmt
 , libpng
@@ -16,40 +18,56 @@
 
 let
   # TODO: submit a PR upstream to allow system copies of these libraries where possible
+
+  # fork with patches, far behind upstream
   asio = fetchurl {
     url = "https://github.com/diasurgical/asio/archive/ebeff99f539da23d27c2e8d4bdbc1ee011968644.tar.gz";
     sha256 = "0vhb4cig40mm0a98i74grpmfkcmby8zxg6vqa38dpryxpgvp5fw8";
   };
 
-  SDL_audiolib = fetchurl {
-    url = "https://github.com/realnc/SDL_audiolib/archive/aa79660eba4467a44f9dcaecf26b0f0a000abfd7.tar.gz";
-    sha256 = "0z4rizncp6gqsy72b3709zc9fr915wgcwnlx1fhhy7mrczsly630";
+  # fork with patches, upstream seems to be dead
+  libmpq = fetchurl {
+    url = "https://github.com/diasurgical/libmpq/archive/0f10bd1600f406b13932bf5351ba713361262184.tar.gz";
+    sha256 = "sha256-7hc/Xtsg8WJIJljLydS7hLZA9lEEHWhsCteyrxK68qE=";
+  };
+
+  # not "real" package with pkg-config or cmake file, just collection of source files
+  libsmackerdec = fetchurl {
+    url = "https://github.com/diasurgical/libsmackerdec/archive/2997ee0e41e91bb723003bc09234be553b190e38.tar.gz";
+    sha256 = "sha256-QMDcIZQ94i4VPVanmSxiGkKgxWx82DP4uE+Q5I2nU+o=";
+  };
+
+  # fork with patches, far behind upstream
+  libzt = fetchFromGitHub {
+    owner = "diasurgical";
+    repo = "libzt";
+    fetchSubmodules = true;
+    rev = "a34ba7f1cc2e41b05badd25d1b01fdc5fd2f4e02";
+    sha256 = "sha256-tyIPt+7OTi5W+5X/ixQP1puOKdhrqRZtpwXlWFBFpc8=";
   };
 
-  simpleini = fetchzip {
-    url = "https://github.com/brofield/simpleini/archive/7bca74f6535a37846162383e52071f380c99a43a.zip";
-    sha256 = "07kf1jjbc9v04hsysa6v2wh1m9csf5qz0b1wmlkf9sj00kf47zj7";
+  # missing pkg-config and/or cmake file
+  simpleini = fetchurl {
+    url = "https://github.com/brofield/simpleini/archive/9b3ed7ec815997bc8c5b9edf140d6bde653e1458.tar.gz";
+    sha256 = "sha256-93kuyp8/ew7okW/6ThJMtLMZsR1YSeFcXu9Y65ELBFE==";
   };
 in
 
 stdenv.mkDerivation rec {
   pname = "devilutionx";
-  version = "1.3.0";
+  version = "1.4.0";
 
   src = fetchFromGitHub {
     owner = "diasurgical";
     repo = "devilutionX";
     rev = version;
-    sha256 = "0acrkqi0pr3cbr5i1a1vfrnxv1n3xmql5d86bm2gywvpdb94xads";
+    sha256 = "sha256-uuIPTdgGpHA8j1M8b+kfnBuiJ5mdS9rckvEfn2h7lmo=";
   };
 
   patches = [
-    # allow building with system SDL2_image instead of vendored version
-    # this patch can be removed on the next release of devilutionx
-    # see https://github.com/diasurgical/devilutionX/pull/3386
     (fetchpatch {
-      url = "https://github.com/diasurgical/devilutionX/commit/41ff03e94c02477bffb2d62764e8624c0e06854d.patch";
-      sha256 = "1lrnb9d0dcdyd78rix5rl4p8kkwbnl91llr9fgb86ysm3q58qkvj";
+      url = "https://github.com/diasurgical/devilutionX/commit/03b22352fc9e1ecb88b20a053c90c04a50717267.patch";
+      sha256 = "sha256-5aAwi1NV8P+nLLbEEnlwLGNQCQBb0nQkIVe5tR5Shsw=";
     })
   ];
 
@@ -57,16 +75,18 @@ stdenv.mkDerivation rec {
     substituteInPlace Source/init.cpp --replace "/usr/share/diasurgical/devilutionx/" "${placeholder "out"}/share/diasurgical/devilutionx/"
 
     # download dependencies ahead of time
-    substituteInPlace 3rdParty/asio/CMakeLists.txt --replace "https://github.com/diasurgical/asio/archive/ebeff99f539da23d27c2e8d4bdbc1ee011968644.tar.gz" "${asio}"
-    substituteInPlace 3rdParty/SDL_audiolib/CMakeLists.txt --replace "https://github.com/realnc/SDL_audiolib/archive/aa79660eba4467a44f9dcaecf26b0f0a000abfd7.tar.gz" "${SDL_audiolib}"
-    substituteInPlace 3rdParty/simpleini/CMakeLists.txt --replace "https://github.com/brofield/simpleini/archive/7bca74f6535a37846162383e52071f380c99a43a.zip" "${simpleini}"
+    substituteInPlace 3rdParty/asio/CMakeLists.txt --replace "${asio.url}" "${asio}"
+    substituteInPlace 3rdParty/libmpq/CMakeLists.txt --replace "${libmpq.url}" "${libmpq}"
+    substituteInPlace 3rdParty/libsmackerdec/CMakeLists.txt --replace "${libsmackerdec.url}" "${libsmackerdec}"
+    substituteInPlace 3rdParty/libzt/CMakeLists.txt \
+      --replace "GIT_REPOSITORY https://github.com/diasurgical/libzt.git" "" \
+      --replace "GIT_TAG ${libzt.rev}" "SOURCE_DIR ${libzt}"
+    substituteInPlace 3rdParty/simpleini/CMakeLists.txt --replace "${simpleini.url}" "${simpleini}"
   '';
 
   cmakeFlags = [
     "-DBINARY_RELEASE=ON"
     "-DVERSION_NUM=${version}"
-    "-DPACKET_ENCRYPTION=OFF" # FIXME: build with libsodium
-    "-DDISABLE_ZERO_TIER=ON" # FIXME: build with libzt
   ];
 
   nativeBuildInputs = [
@@ -77,9 +97,12 @@ stdenv.mkDerivation rec {
   ];
 
   buildInputs = [
+    bzip2
     fmt
     libpng
+    libsodium
     SDL2
+    SDL_audiolib
     SDL2_image
   ];
 
diff --git a/nixpkgs/pkgs/games/domination/default.nix b/nixpkgs/pkgs/games/domination/default.nix
index b7eae5e5acd6..919d22b41dae 100644
--- a/nixpkgs/pkgs/games/domination/default.nix
+++ b/nixpkgs/pkgs/games/domination/default.nix
@@ -6,6 +6,7 @@
 , ant
 , makeWrapper
 , makeDesktopItem
+, copyDesktopItems
 , nixosTests
 }:
 
@@ -25,7 +26,7 @@ let
 
 in stdenv.mkDerivation {
   pname = "domination";
-  version = "1.2.4";
+  version = "1.2.5";
 
   # The .zip releases do not contain the build.xml file
   src = fetchsvn {
@@ -33,22 +34,31 @@ in stdenv.mkDerivation {
     # There are no tags in the repository.
     # Look for commits like "new version x.y.z info on website"
     # or "website update for x.y.z".
-    rev = "2109";
-    sha256 = "sha256-awTaEkv0zUXgrKVKuFzi5sgHgrfiNmAFMODO5U0DL6I=";
+    rev = "2212";
+    sha256 = "sha256-XuPMxGDap8x7I+U7+1C+DlkQkoV/u2FCwYyTZFWmYHM=";
   };
 
   nativeBuildInputs = [
     jdk8
     ant
     makeWrapper
+    copyDesktopItems
   ];
 
   buildPhase = ''
+    runHook preBuild
     cd swingUI
     ant
+    runHook postBuild
   '';
 
+  desktopItems = [
+    desktopItem
+    editorDesktopItem
+  ];
+
   installPhase = ''
+    runHook preInstall
     # Remove unnecessary files and launchers (they'd need to be wrapped anyway)
     rm -r \
       build/game/src.zip \
@@ -63,19 +73,14 @@ in stdenv.mkDerivation {
     # Reimplement the two launchers mentioned in Unix_shortcutSpec.xml with makeWrapper
     mkdir -p $out/bin
     makeWrapper ${jre}/bin/java $out/bin/domination \
-      --run "cd $out/share/domination" \
+      --chdir "$out/share/domination" \
       --add-flags "-jar $out/share/domination/Domination.jar"
     makeWrapper ${jre}/bin/java $out/bin/domination-map-editor \
-      --run "cd $out/share/domination" \
+      --chdir "$out/share/domination" \
       --add-flags "-cp $out/share/domination/Domination.jar net.yura.domination.ui.swinggui.SwingGUIFrame"
 
-    install -Dm644 \
-      ${desktopItem}/share/applications/Domination.desktop \
-      $out/share/applications/Domination.desktop
-    install -Dm644 \
-      "${editorDesktopItem}/share/applications/Domination Map Editor.desktop" \
-      "$out/share/applications/Domination Map Editor.desktop"
     install -Dm644 build/game/resources/icon.png $out/share/pixmaps/domination.png
+    runHook postInstall
   '';
 
   passthru.tests = {
@@ -92,6 +97,10 @@ in stdenv.mkDerivation {
       It includes a map editor, a simple map format, multiplayer network play,
       single player, hotseat, 5 user interfaces and many more features.
     '';
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # source bundles dependencies as jars
+    ];
     license = licenses.gpl3;
     maintainers = with maintainers; [ fgaz ];
     platforms = platforms.all;
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/dfhack/default.nix b/nixpkgs/pkgs/games/dwarf-fortress/dfhack/default.nix
index 80fa1de18e4e..49e8fabd45e4 100644
--- a/nixpkgs/pkgs/games/dwarf-fortress/dfhack/default.nix
+++ b/nixpkgs/pkgs/games/dwarf-fortress/dfhack/default.nix
@@ -131,6 +131,9 @@ let
 
     patches = [ ./fix-stonesense.patch ];
 
+    # gcc 11 fix
+    NIX_CFLAGS_COMPILE = "-fpermissive";
+
     # As of
     # https://github.com/DFHack/dfhack/commit/56e43a0dde023c5a4595a22b29d800153b31e3c4,
     # dfhack gets its goodies from the directory above the Dwarf_Fortress
@@ -154,10 +157,6 @@ let
       touch .git/index .git/modules/library/xml/index
     '';
 
-    preBuild = ''
-      export LD_LIBRARY_PATH="$PWD/depends/protobuf''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH"
-    '';
-
     cmakeFlags = [ "-DDFHACK_BUILD_ARCH=${arch}" "-DDOWNLOAD_RUBY=OFF" ]
       ++ lib.optionals enableStoneSense [ "-DBUILD_STONESENSE=ON" "-DSTONESENSE_INTERNAL_SO=OFF" ];
 
diff --git a/nixpkgs/pkgs/games/dwarf-fortress/legends-browser/default.nix b/nixpkgs/pkgs/games/dwarf-fortress/legends-browser/default.nix
index 2a3da233b450..3484db0cc8ff 100644
--- a/nixpkgs/pkgs/games/dwarf-fortress/legends-browser/default.nix
+++ b/nixpkgs/pkgs/games/dwarf-fortress/legends-browser/default.nix
@@ -29,6 +29,7 @@ buildEnv {
   meta = with lib; {
     description = "A multi-platform, open source, java-based legends viewer for dwarf fortress";
     maintainers = with maintainers; [ Baughn ];
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.mit;
     platforms = platforms.all;
     homepage = "https://github.com/robertjanetzko/LegendsBrowser";
diff --git a/nixpkgs/pkgs/games/easyrpg-player/default.nix b/nixpkgs/pkgs/games/easyrpg-player/default.nix
index 4476c0a7a532..c95ca576ecac 100644
--- a/nixpkgs/pkgs/games/easyrpg-player/default.nix
+++ b/nixpkgs/pkgs/games/easyrpg-player/default.nix
@@ -3,6 +3,7 @@
 , liblcf, libpng, libsndfile ? null, libvorbis ? null, libxmp ? null
 , libXcursor, libXext, libXi, libXinerama, libXrandr, libXScrnSaver, libXxf86vm
 , mpg123 ? null, opusfile ? null, pcre, pixman, SDL2, speexdsp ? null, wildmidi ? null, zlib
+, libdecor
 }:
 
 stdenv.mkDerivation rec {
@@ -43,6 +44,7 @@ stdenv.mkDerivation rec {
     speexdsp
     wildmidi
     zlib
+    libdecor
   ];
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/games/egoboo/default.nix b/nixpkgs/pkgs/games/egoboo/default.nix
index 506868efe312..32678ecdf093 100644
--- a/nixpkgs/pkgs/games/egoboo/default.nix
+++ b/nixpkgs/pkgs/games/egoboo/default.nix
@@ -45,6 +45,11 @@ stdenv.mkDerivation rec {
     '';
   */
 
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: mad.o:(.bss+0x233800): multiple definition of `tile_dict'; camera.o:(.bss+0x140): first defined here
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   NIX_LDFLAGS = "-lm";
 
   meta = {
@@ -54,7 +59,7 @@ stdenv.mkDerivation rec {
     license = lib.licenses.gpl2Plus;
 
     # I take it out of hydra as it does not work as well as I'd like
-    # maintainers = [ lib.maintainers.bjg ];
+    # maintainers = [ ];
     # platforms = lib.platforms.all;
   };
 }
diff --git a/nixpkgs/pkgs/games/enigma/default.nix b/nixpkgs/pkgs/games/enigma/default.nix
index 131bd00e1857..247d7b9dee19 100644
--- a/nixpkgs/pkgs/games/enigma/default.nix
+++ b/nixpkgs/pkgs/games/enigma/default.nix
@@ -1,20 +1,33 @@
-{ lib, stdenv, fetchurl, makeWrapper, pkg-config, gettext, imagemagick, curl, libpng, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, xercesc, xdg-utils, hicolor-icon-theme }:
+{ lib, stdenv, fetchurl, fetchpatch, makeWrapper, pkg-config, gettext, imagemagick, curl, libpng, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, xercesc, xdg-utils, hicolor-icon-theme }:
 stdenv.mkDerivation rec {
   pname = "enigma";
-  version = "1.30-alpha";
+  version = "1.30";
 
   src = fetchurl {
-    url = "https://github.com/Enigma-Game/Enigma/releases/download/${version}/${pname}-${version}.tar.gz";
-    sha256 = "1zyk3j43gzfr1lhc6g13j7qai5f33fv5xm5735nnznaqvaz17949";
+    url = "https://github.com/Enigma-Game/Enigma/releases/download/${version}/Enigma-${version}-src.tar.gz";
+    sha256 = "rmS5H7wrEJcAcdDXjtW07enuOGjeLm6VaVRvxYQ3+K8=";
   };
 
+  patches = [
+    # fix format string security warning (turned into error)
+    (fetchpatch {
+      url = "https://github.com/Enigma-Game/Enigma/pull/70/commits/d25051eb6228c885e779a9674f8ee3979da30663.patch";
+      sha256 = "L5C4NCZDDUKji9Tg4geKaiw3CkSY6rCoawqGKqR4dFM=";
+    })
+  ];
+
   nativeBuildInputs = [ pkg-config gettext makeWrapper imagemagick ];
   buildInputs = [ SDL2 SDL2_image SDL2_mixer SDL2_ttf libpng xercesc curl xdg-utils ];
 
-  # For some reason (might be related to the alpha status), some includes
-  # which are required by lib-src/enigma-core are not picked up by the
-  # configure script. Hence we add them manually.
-  CPPFLAGS = "-I${SDL2.dev}/include/SDL2 -I${SDL2_ttf}/include/SDL2 -I${SDL2_image}/include/SDL2 -I${SDL2_mixer}/include/SDL2";
+  # The configure script of enigma uses pkg-config to determine the header
+  # directories of SDL2. However, pkg-config only returns the path to the core
+  # SDL2 library, not to the additional libraries SDL2_ttf, SDL2_image and
+  # SDL2_mixer. In contrast, sdl2-config does return the correct list of paths.
+  # We don't use configureFlags here so that the shell can correctly carry
+  # out the interpolation.
+  preConfigure = ''
+    export SDL_CFLAGS=$(sdl2-config --cflags)
+  '';
 
   postInstall = ''
     rm -r $out/include
diff --git a/nixpkgs/pkgs/games/extremetuxracer/default.nix b/nixpkgs/pkgs/games/extremetuxracer/default.nix
index d114ed848000..416a3ac913ea 100644
--- a/nixpkgs/pkgs/games/extremetuxracer/default.nix
+++ b/nixpkgs/pkgs/games/extremetuxracer/default.nix
@@ -5,12 +5,12 @@
 }:
 
 stdenv.mkDerivation rec {
-  version = "0.8.1";
+  version = "0.8.2";
   pname = "extremetuxracer";
 
   src = fetchurl {
     url = "mirror://sourceforge/extremetuxracer/etr-${version}.tar.xz";
-    sha256 = "sha256-ktqWPtMqub/xJjRu37lUnocdfDzsdT9KxQmODVPDg0E=";
+    sha256 = "sha256-HIdJZeniSVM78VwI2rxh5gwFuz/VeJF4gBF/+KkQzU4=";
   };
 
   buildInputs = [
diff --git a/nixpkgs/pkgs/games/factorio/default.nix b/nixpkgs/pkgs/games/factorio/default.nix
index 4cf335a61378..17f9947b4982 100644
--- a/nixpkgs/pkgs/games/factorio/default.nix
+++ b/nixpkgs/pkgs/games/factorio/default.nix
@@ -85,7 +85,7 @@ let
         (lib.overrideDerivation
           (fetchurl {
             inherit name url sha256;
-            curlOpts = [
+            curlOptsList = [
               "--get"
               "--data-urlencode" "username@username"
               "--data-urlencode" "token@token"
@@ -166,6 +166,7 @@ let
         version 1.0 in mid 2020.
       '';
       homepage = "https://www.factorio.com/";
+      sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
       license = lib.licenses.unfree;
       maintainers = with lib.maintainers; [ Baughn elitak erictapen priegger lukegb ];
       platforms = [ "x86_64-linux" ];
diff --git a/nixpkgs/pkgs/games/factorio/versions.json b/nixpkgs/pkgs/games/factorio/versions.json
index 3c083c555d27..37abb4aed03a 100644
--- a/nixpkgs/pkgs/games/factorio/versions.json
+++ b/nixpkgs/pkgs/games/factorio/versions.json
@@ -2,56 +2,56 @@
   "x86_64-linux": {
     "alpha": {
       "experimental": {
-        "name": "factorio_alpha_x64-1.1.56.tar.xz",
+        "name": "factorio_alpha_x64-1.1.65.tar.xz",
         "needsAuth": true,
-        "sha256": "1i9mcq8m48ar0b3x53zgi5x9rsaddmlm2wqaphyf81xampl7ivcx",
+        "sha256": "0rzifli06s3k3gyzxpzzisxkvnvcidw4njkibrld2n5pwhjg8qbb",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.56/alpha/linux64",
-        "version": "1.1.56"
+        "url": "https://factorio.com/get-download/1.1.65/alpha/linux64",
+        "version": "1.1.65"
       },
       "stable": {
-        "name": "factorio_alpha_x64-1.1.53.tar.xz",
+        "name": "factorio_alpha_x64-1.1.61.tar.xz",
         "needsAuth": true,
-        "sha256": "1l5sk9rhf4pq9l87w5sv4a1ikqx8rpby5hf4xn7sdsm9mshd3wyw",
+        "sha256": "1rgb3i6l9v5vv3qw0ngfxryamql2fhhqymv4dr86rxjy863rpx65",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.53/alpha/linux64",
-        "version": "1.1.53"
+        "url": "https://factorio.com/get-download/1.1.61/alpha/linux64",
+        "version": "1.1.61"
       }
     },
     "demo": {
       "experimental": {
-        "name": "factorio_demo_x64-1.1.56.tar.xz",
+        "name": "factorio_demo_x64-1.1.60.tar.xz",
         "needsAuth": false,
-        "sha256": "0g1gphysh79h1frcjpfd5i3fpi05y8mq9gwmgnmalmr56w5n4qlz",
+        "sha256": "1sckcc8dndml2ahka96qlhyjqinbgzh2sns2qfphsph9x26q1vxn",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.56/demo/linux64",
-        "version": "1.1.56"
+        "url": "https://factorio.com/get-download/1.1.60/demo/linux64",
+        "version": "1.1.60"
       },
       "stable": {
-        "name": "factorio_demo_x64-1.1.53.tar.xz",
+        "name": "factorio_demo_x64-1.1.59.tar.xz",
         "needsAuth": false,
-        "sha256": "0m3mk296w4azma2v5z6pay1caqql2jfnlcyyd120laxl4rdg2k76",
+        "sha256": "1nddk8184kgq4ni0y9j2l8sa3szvcbsq9l90b35l9jb6sqflgki0",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.53/demo/linux64",
-        "version": "1.1.53"
+        "url": "https://factorio.com/get-download/1.1.59/demo/linux64",
+        "version": "1.1.59"
       }
     },
     "headless": {
       "experimental": {
-        "name": "factorio_headless_x64-1.1.56.tar.xz",
+        "name": "factorio_headless_x64-1.1.65.tar.xz",
         "needsAuth": false,
-        "sha256": "174fvi9slpdp3y8j46w0w0ays7i7gy98il74xx5wxh7s94zb1b68",
+        "sha256": "1h5ziip9jbqr03ci2fvf3zqwmy0l7m25br3rm5xv0af9wig9wvh1",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.56/headless/linux64",
-        "version": "1.1.56"
+        "url": "https://factorio.com/get-download/1.1.65/headless/linux64",
+        "version": "1.1.65"
       },
       "stable": {
-        "name": "factorio_headless_x64-1.1.53.tar.xz",
+        "name": "factorio_headless_x64-1.1.61.tar.xz",
         "needsAuth": false,
-        "sha256": "18ra52h32nhdqxz6vagp9nw3an5pgamariy0ny050xr2xpidw3v1",
+        "sha256": "0ndnc0f22bqjg1v6ah7i4nzghvk7cn73sgm22lf715di6f6srr38",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.53/headless/linux64",
-        "version": "1.1.53"
+        "url": "https://factorio.com/get-download/1.1.61/headless/linux64",
+        "version": "1.1.61"
       }
     }
   }
diff --git a/nixpkgs/pkgs/games/fairymax/default.nix b/nixpkgs/pkgs/games/fairymax/default.nix
index 49a91e7a64d4..b493f4dcfa27 100644
--- a/nixpkgs/pkgs/games/fairymax/default.nix
+++ b/nixpkgs/pkgs/games/fairymax/default.nix
@@ -1,39 +1,49 @@
-{lib, stdenv, fetchurl}:
+{ lib
+, stdenv
+, fetchurl
+}:
+
 stdenv.mkDerivation rec {
   pname = "fairymax";
   version = "4.8";
+
   src = fetchurl {
     url = "http://home.hccnet.nl/h.g.muller/fmax4_8w.c";
-    sha256 = "01vxhpa4z0613mkgkzmsln293wxmyp5kdzil93cd1ik51q4gwjca";
+    hash = "sha256-ikn+CA5lxtDYSDT+Nsv1tfORhKW6/vlmHcGAT9SFfQc=";
   };
+
   ini = fetchurl {
     url = "http://home.hccnet.nl/h.g.muller/fmax.ini";
-    sha256 = "1zwx70g3gspbqx1zf9gm1may8jrli9idalvskxbdg33qgjys47cn";
+    hash = "sha256-lh2ivXx4jNdWn3pT1WKKNEvkVQ31JfdDx+vqNx44nf8=";
   };
+
   unpackPhase = ''
     cp ${src} fairymax.c
     cp ${ini} fmax.ini
   '';
+
   buildPhase = ''
-    $CC *.c -Wno-return-type -o fairymax -DINI_FILE='"'"$out/share/fairymax/fmax.ini"'"'
+    cc *.c -Wno-return-type \
+      -o fairymax \
+      -DINI_FILE='"'"$out/share/fairymax/fmax.ini"'"'
   '';
+
   installPhase = ''
     mkdir -p "$out"/{bin,share/fairymax}
     cp fairymax "$out/bin"
     cp fmax.ini "$out/share/fairymax"
   '';
-  meta = {
+
+  meta = with lib; {
+    homepage = "http://home.hccnet.nl/h.g.muller/dwnldpage.html";
     description = "A small chess engine supporting fairy pieces";
     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 (4.8J) supports up to 15 piece types,
-       and board sizes up to 12x8. A Linux port exists in the
-       format of a debian package.
+       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
+       (4.8J) supports up to 15 piece types, and board sizes up to 12x8.
     '';
-    license = lib.licenses.free ;
-    maintainers = [lib.maintainers.raskin];
-    platforms = lib.platforms.all;
-    homepage = "http://home.hccnet.nl/h.g.muller/dwnldpage.html";
+    license = licenses.free;
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.all;
   };
 }
diff --git a/nixpkgs/pkgs/games/ferium/default.nix b/nixpkgs/pkgs/games/ferium/default.nix
new file mode 100644
index 000000000000..2d21d5dc523a
--- /dev/null
+++ b/nixpkgs/pkgs/games/ferium/default.nix
@@ -0,0 +1,39 @@
+{ lib, stdenv, fetchFromGitHub, rustPlatform, Security, installShellFiles }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "ferium";
+  version = "4.1.10";
+
+  src = fetchFromGitHub {
+    owner = "gorilla-devs";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-dHubI5IaPAjn+vcHvT1t4HqBraO0QztZnp3sdzpYBJo=";
+  };
+
+  buildInputs = lib.optionals stdenv.isDarwin [ Security ];
+
+  cargoSha256 = "sha256-r3QLCh/TXOoXh72AjyV1Ng6nYNCEV9/JggBmd2Gu7j8=";
+
+  # Disable the GUI file picker so that GTK/XDG dependencies aren't used
+  buildNoDefaultFeatures = true;
+
+  # Requires an internet connection
+  doCheck = false;
+
+  nativeBuildInputs = [ installShellFiles ];
+
+  postInstall = ''
+    for shell in bash fish zsh; do
+      $out/bin/ferium complete $shell > ferium.$shell
+      installShellCompletion ferium.$shell
+    done
+  '';
+
+  meta = with lib; {
+    description = "Fast and multi-source CLI program for managing Minecraft mods and modpacks from Modrinth, CurseForge, and GitHub Releases";
+    homepage = "https://github.com/gorilla-devs/ferium";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ leo60228 imsofi ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/fheroes2/default.nix b/nixpkgs/pkgs/games/fheroes2/default.nix
index 10d7a23aca4e..454430276b8a 100644
--- a/nixpkgs/pkgs/games/fheroes2/default.nix
+++ b/nixpkgs/pkgs/games/fheroes2/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchFromGitHub
-, gettext, libpng, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, zlib
+, gettext, glibcLocalesUtf8, libpng, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, zlib
 
 # updater only
 , nix-update-script
@@ -7,28 +7,38 @@
 
 stdenv.mkDerivation rec {
   pname = "fheroes2";
-  version = "0.9.13";
+  version = "0.9.18";
 
   src = fetchFromGitHub {
     owner = "ihhub";
     repo = "fheroes2";
     rev = version;
-    sha256 = "sha256-+VAgS7NR/D0HD/Fy7idSUTMJPp2ctpirMpcFooo+bEg=";
+    sha256 = "sha256-I79PoNE6GFvYD4jnsxKo7MsoPgVow8b8fTIiClOGnAI=";
   };
 
-  buildInputs = [ gettext libpng SDL2 SDL2_image SDL2_mixer SDL2_ttf zlib ];
+  buildInputs = [ gettext glibcLocalesUtf8 libpng SDL2 SDL2_image SDL2_mixer SDL2_ttf zlib ];
 
   makeFlags = [
     "FHEROES2_STRICT_COMPILATION=1"
+    "FHEROES2_DATA=\"${placeholder "out"}/share/fheroes2\""
   ];
 
   enableParallelBuilding = true;
 
+  postBuild = ''
+    # Pick guaranteed to be present UTF-8 locale.
+    # Otherwise `iconv` calls fail to produce valid translations.
+    LANG=en_US.UTF_8 make -C files/lang
+  '';
+
   installPhase = ''
     runHook preInstall
 
     install -Dm755 $PWD/src/dist/fheroes2 $out/bin/fheroes2
 
+    install -Dm644 -t $out/share/fheroes2/files/lang $PWD/files/lang/*.mo
+    install -Dm644 -t $out/share/fheroes2/files/data $PWD/files/data/resurrection.h2d
+
     runHook postInstall
   '';
 
diff --git a/nixpkgs/pkgs/games/fishfight/use-system-sdl2.patch b/nixpkgs/pkgs/games/fishfight/use-system-sdl2.patch
deleted file mode 100644
index fcae36ce68b0..000000000000
--- a/nixpkgs/pkgs/games/fishfight/use-system-sdl2.patch
+++ /dev/null
@@ -1,39 +0,0 @@
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -96,15 +96,6 @@ version = "1.0.0"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
- 
--[[package]]
--name = "cmake"
--version = "0.1.46"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "b7b858541263efe664aead4a5209a4ae5c5d2811167d4ed4ee0944503f8d2089"
--dependencies = [
-- "cc",
--]
--
- [[package]]
- name = "color_quant"
- version = "1.1.0"
-@@ -605,7 +596,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "94cb479353c0603785c834e2307440d83d196bf255f204f7f6741358de8d6a2f"
- dependencies = [
-  "cfg-if",
-- "cmake",
-  "libc",
-  "version-compare",
- ]
-diff --git a/Cargo.toml b/Cargo.toml
-index d2af29e..a813f30 100644
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -14,7 +14,7 @@ macroquad-profiler = "0.1"
- 
- ff-particles = { version = "0.1", features = ["serde"] }
- 
--fishsticks = { version = "0.2.0", features = ["bundled-sdl2"] }
-+fishsticks = "0.2.0"
- 
- stunclient = { git = "https://github.com/not-fl3/rust-stunclient", default-features = false }
- 
diff --git a/nixpkgs/pkgs/games/flare/default.nix b/nixpkgs/pkgs/games/flare/default.nix
index 3567a5886055..c849b879ea32 100644
--- a/nixpkgs/pkgs/games/flare/default.nix
+++ b/nixpkgs/pkgs/games/flare/default.nix
@@ -11,7 +11,7 @@ buildEnv {
   nativeBuildInputs = [ makeWrapper ];
   postBuild = ''
     mkdir -p $out/bin
-    makeWrapper $out/games/flare $out/bin/flare --run "cd $out/share/games/flare"
+    makeWrapper $out/games/flare $out/bin/flare --chdir "$out/share/games/flare"
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/games/flightgear/default.nix b/nixpkgs/pkgs/games/flightgear/default.nix
index d46ee685607b..c927bc9fb431 100644
--- a/nixpkgs/pkgs/games/flightgear/default.nix
+++ b/nixpkgs/pkgs/games/flightgear/default.nix
@@ -6,7 +6,7 @@
 }:
 
 let
-  version = "2020.3.12";
+  version = "2020.3.13";
   shortVersion = builtins.substring 0 6 version;
   data = stdenv.mkDerivation rec {
     pname = "flightgear-data";
@@ -14,7 +14,7 @@ let
 
     src = fetchurl {
       url = "mirror://sourceforge/flightgear/release-${shortVersion}/FlightGear-${version}-data.txz";
-      sha256 = "sha256-gCsW9e8IuXwmJfAfxJ/nORF5W/PwCka+O8Chwm26OnY=";
+      sha256 = "sha256-C3iUVA7IJQ77OdXcaBnSpDphMFjmFZmn0nozQvdxSJM=";
     };
 
     dontUnpack = true;
@@ -32,7 +32,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://sourceforge/flightgear/release-${shortVersion}/${pname}-${version}.tar.bz2";
-    sha256 = "sha256-wPeZIAiGU0zPBkzeBCO1xEgm+iZd/hWvBEr2ZcsX0Qc=";
+    sha256 = "sha256-Zhq/r0davIz9G6tXVZRp76ZivG0D9Y6Nl3OFAD/lqow=";
   };
 
   # Of all the files in the source and data archives, there doesn't seem to be
diff --git a/nixpkgs/pkgs/games/freeciv/default.nix b/nixpkgs/pkgs/games/freeciv/default.nix
index f5c1ff0ea3f4..abe8aff15806 100644
--- a/nixpkgs/pkgs/games/freeciv/default.nix
+++ b/nixpkgs/pkgs/games/freeciv/default.nix
@@ -1,7 +1,8 @@
 { lib, stdenv, fetchFromGitHub, autoreconfHook, lua5_3, pkg-config, python3
-, zlib, bzip2, curl, xz, gettext, libiconv
-, sdlClient ? true, SDL, SDL_mixer, SDL_image, SDL_ttf, SDL_gfx, freetype, fluidsynth
-, gtkClient ? false, gtk3, wrapGAppsHook
+, zlib, bzip2, curl, xz, gettext, libiconv, icu
+, SDL2, SDL2_mixer, SDL2_image, SDL2_ttf, SDL2_gfx, freetype, fluidsynth
+, sdl2Client ? false
+, gtkClient ? true, gtk3, wrapGAppsHook
 , qtClient ? false, qt5
 , server ? true, readline
 , enableSqlite ? true, sqlite
@@ -9,13 +10,13 @@
 
 stdenv.mkDerivation rec {
   pname = "freeciv";
-  version = "2.6.6";
+  version = "3.0.3";
 
   src = fetchFromGitHub {
     owner = "freeciv";
     repo = "freeciv";
     rev = "R${lib.replaceStrings [ "." ] [ "_" ] version}";
-    sha256 = "sha256-D5t6sMpm09jbixs5MCghBeDbeuRbGmrrfWR91VNolRM=";
+    sha256 = "sha256-WIp1R27UahbkLZZuF0nbX/XHVDc2OJukPKgoQ+qnjMc=";
   };
 
   postPatch = ''
@@ -29,8 +30,8 @@ stdenv.mkDerivation rec {
     ++ lib.optional qtClient [ qt5.wrapQtAppsHook ]
     ++ lib.optional gtkClient [ wrapGAppsHook ];
 
-  buildInputs = [ lua5_3 zlib bzip2 curl xz gettext libiconv ]
-    ++ lib.optionals sdlClient [ SDL SDL_mixer SDL_image SDL_ttf SDL_gfx freetype fluidsynth ]
+  buildInputs = [ lua5_3 zlib bzip2 curl xz gettext libiconv icu ]
+    ++ [ SDL2 SDL2_mixer SDL2_image SDL2_ttf SDL2_gfx freetype fluidsynth ]
     ++ lib.optionals gtkClient [ gtk3 ]
     ++ lib.optionals qtClient  [ qt5.qtbase ]
     ++ lib.optional server readline
@@ -39,8 +40,16 @@ stdenv.mkDerivation rec {
   dontWrapQtApps = true;
   dontWrapGApps = true;
 
+  # configure is not smart enough to look for SDL2 headers under
+  # .../SDL2, but thankfully $SDL2_PATH is almost exactly what we want
+  preConfigure = ''
+    export CPPFLAGS="$(echo $SDL2_PATH | sed 's#/nix/store/#-I/nix/store/#g')"
+  '';
   configureFlags = [ "--enable-shared" ]
-    ++ lib.optional sdlClient "--enable-client=sdl"
+    ++ lib.optionals sdl2Client [
+      "--enable-client=sdl2"
+      "--enable-sdl-mixer=sdl2"
+    ]
     ++ lib.optionals qtClient [
       "--enable-client=qt"
       "--with-qt5-includes=${qt5.qtbase.dev}/include"
diff --git a/nixpkgs/pkgs/games/freedink/default.nix b/nixpkgs/pkgs/games/freedink/default.nix
index 75c50669421d..b48d7e52cf39 100644
--- a/nixpkgs/pkgs/games/freedink/default.nix
+++ b/nixpkgs/pkgs/games/freedink/default.nix
@@ -54,7 +54,7 @@ in stdenv.mkDerivation rec {
     homepage = "https://www.gnu.org/software/freedink/"; # Formerly http://www.freedink.org
     license = lib.licenses.gpl3Plus;
 
-    maintainers = [ lib.maintainers.bjg ];
+    maintainers = [ ];
     platforms = lib.platforms.all;
     hydraPlatforms = lib.platforms.linux; # sdl-config times out on darwin
   };
diff --git a/nixpkgs/pkgs/games/frogatto/data.nix b/nixpkgs/pkgs/games/frogatto/data.nix
index 3ca955a09c39..00e43582f6e1 100644
--- a/nixpkgs/pkgs/games/frogatto/data.nix
+++ b/nixpkgs/pkgs/games/frogatto/data.nix
@@ -2,14 +2,13 @@
 
 stdenv.mkDerivation {
   pname = "frogatto-data";
-  version = "unstable-2021-05-24";
+  version = "unstable-2022-04-13";
 
   src = fetchFromGitHub {
     owner = "frogatto";
     repo = "frogatto";
-    # master branch as of 2021-11-29
-    rev = "82d3dafa0cfeaad016a427bdbc729eb9509748f1";
-    sha256 = "0fmwn584xl0vafcsh72b4xnryfqyjxk5zhmymg5i8rzp6h03n8xq";
+    rev = "655493961c4ad57ba9cccdc24d23a2ded294b5f2";
+    sha256 = "0irn7p61cs8nm7dxsx84b2c3wryf2h12k2kclywdhy6xmh53w8k1";
   };
 
   installPhase = ''
diff --git a/nixpkgs/pkgs/games/frogatto/default.nix b/nixpkgs/pkgs/games/frogatto/default.nix
index f987992858da..fa6b46e0751f 100644
--- a/nixpkgs/pkgs/games/frogatto/default.nix
+++ b/nixpkgs/pkgs/games/frogatto/default.nix
@@ -30,7 +30,7 @@ in buildEnv {
 
   postBuild = ''
     wrapProgram $out/bin/frogatto \
-      --run "cd $out/share/frogatto"
+      --chdir "$out/share/frogatto"
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/games/frogatto/engine.nix b/nixpkgs/pkgs/games/frogatto/engine.nix
index 9e8ee6fe8dd8..b848c414b7a3 100644
--- a/nixpkgs/pkgs/games/frogatto/engine.nix
+++ b/nixpkgs/pkgs/games/frogatto/engine.nix
@@ -1,18 +1,25 @@
-{ lib, stdenv, fetchFromGitHub, which
+{ lib, stdenv, fetchFromGitHub, fetchurl, which
 , boost, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf
 , glew, zlib, icu, pkg-config, cairo, libvpx }:
 
 stdenv.mkDerivation {
   pname = "anura-engine";
-  version = "unstable-2021-11-23";
+  version = "unstable-2022-04-09";
 
   src = fetchFromGitHub {
     owner = "anura-engine";
     repo = "anura";
-    rev = "816425df31624066e2815e26a25b1c5d3d355cb4";
-    sha256 = "1k7fnfgz003gcbyygv4aakhkkz3w3z9nyz7dlwz01xa6122zqyir";
+    rev = "5ac7f6fe63114274f0da7dad4c1ed673651e6424";
+    sha256 = "1yrcbvzgxdvn893qk1qcpb53pjns366fdls5qjal7lhq71kkfc67";
     fetchSubmodules = true;
   };
+  patches = [
+    # https://github.com/anura-engine/anura/issues/321
+    (fetchurl {
+      url = "https://github.com/anura-engine/anura/commit/627d08fb5254b5c66d315f1706089905c2704059.patch";
+      sha256 = "052m58qb3lg0hnxacpnjz2sz89dk0x6b5qi2q9bkzkvg38f237rr";
+    })
+  ];
 
   nativeBuildInputs = [
     which pkg-config
diff --git a/nixpkgs/pkgs/games/gamehub/default.nix b/nixpkgs/pkgs/games/gamehub/default.nix
new file mode 100644
index 000000000000..87796d58c732
--- /dev/null
+++ b/nixpkgs/pkgs/games/gamehub/default.nix
@@ -0,0 +1,67 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, meson
+, ninja
+, vala
+, pkg-config
+, desktop-file-utils
+, glib
+, gtk3
+, glib-networking
+, libgee
+, libsoup
+, json-glib
+, sqlite
+, webkitgtk
+, libmanette
+, libXtst
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "GameHub";
+  version = "0.16.3-2";
+
+  src = fetchFromGitHub {
+    owner = "tkashkin";
+    repo = pname;
+    rev = "${version}-master";
+    hash = "sha256-dBGzXwDO9BvnEIcdfqlGnMzUdBqaVA96Ds0fY6eukes=";
+  };
+
+  nativeBuildInputs = [
+    desktop-file-utils
+    meson
+    ninja
+    pkg-config
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    glib
+    glib-networking
+    gtk3
+    json-glib
+    libgee
+    libmanette
+    libsoup
+    libXtst
+    sqlite
+    webkitgtk
+  ];
+
+  meta = with lib; {
+    homepage = "https://tkashkin.github.io/projects/gamehub";
+    description = "Unified library for all your games";
+    longDescription = ''
+      GameHub is a unified library for all your games. It allows you to store
+      your games from different platforms into one program to make it easier
+      for you to manage your games.
+    '';
+    maintainers = with maintainers; [ pasqui23 ];
+    license = with licenses; [ gpl3Only ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/garden-of-coloured-lights/default.nix b/nixpkgs/pkgs/games/garden-of-coloured-lights/default.nix
index d38d8936c1a9..9f9e85905a0a 100644
--- a/nixpkgs/pkgs/games/garden-of-coloured-lights/default.nix
+++ b/nixpkgs/pkgs/games/garden-of-coloured-lights/default.nix
@@ -4,7 +4,8 @@ stdenv.mkDerivation rec {
   pname = "garden-of-coloured-lights";
   version = "1.0.9";
 
-  buildInputs = [ allegro autoconf automake ];
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ allegro ];
 
   prePatch = ''
     noInline='s/inline //'
@@ -17,6 +18,11 @@ stdenv.mkDerivation rec {
     sha256 = "1qsj4d7r22m5f9f5f6cyvam1y5q5pbqvy5058r7w0k4s48n77y6s";
   };
 
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: main.o:src/main.c:58: multiple definition of
+  #     `eclass'; eclass.o:src/eclass.c:21: first defined here
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   meta = with lib; {
     description = "Old-school vertical shoot-em-up / bullet hell";
     homepage = "http://garden.sourceforge.net/drupal/";
diff --git a/nixpkgs/pkgs/games/gargoyle/default.nix b/nixpkgs/pkgs/games/gargoyle/default.nix
index bd592dbc55d9..f5d23091b482 100644
--- a/nixpkgs/pkgs/games/gargoyle/default.nix
+++ b/nixpkgs/pkgs/games/gargoyle/default.nix
@@ -6,7 +6,7 @@ let
   jamenv = ''
     unset AR
   '' + (if stdenv.isDarwin then ''
-    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${SDL.dev}/include/SDL"
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${lib.getDev SDL}/include/SDL"
     export GARGLKINI="$out/Applications/Gargoyle.app/Contents/Resources/garglk.ini"
   '' else ''
     export NIX_LDFLAGS="$NIX_LDFLAGS -rpath $out/libexec/gargoyle"
@@ -35,6 +35,12 @@ stdenv.mkDerivation rec {
   buildInputs = [ SDL SDL_mixer SDL_sound gtk2 ]
     ++ lib.optionals stdenv.isDarwin [ smpeg libvorbis ];
 
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: build/linux.release/alan3/Location.o:(.bss+0x0): multiple definition of
+  #     `logFile'; build/linux.release/alan3/act.o:(.bss+0x0): first defined here
+  # TODO: drop once updated to 2022.1 or later.
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   buildPhase = jamenv + "jam -j$NIX_BUILD_CORES";
 
   installPhase =
@@ -59,6 +65,7 @@ stdenv.mkDerivation rec {
   enableParallelBuilding = true;
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     homepage = "http://ccxvii.net/gargoyle/";
     license = licenses.gpl2Plus;
     description = "Interactive fiction interpreter GUI";
diff --git a/nixpkgs/pkgs/games/gcompris/default.nix b/nixpkgs/pkgs/games/gcompris/default.nix
index 5343bae4a6cb..99ee63ed057f 100644
--- a/nixpkgs/pkgs/games/gcompris/default.nix
+++ b/nixpkgs/pkgs/games/gcompris/default.nix
@@ -18,11 +18,11 @@
 
 mkDerivation rec {
   pname = "gcompris";
-  version = "2.3";
+  version = "2.4";
 
   src = fetchurl {
     url = "https://download.kde.org/stable/gcompris/qt/src/gcompris-qt-${version}.tar.xz";
-    sha256 = "sha256-UgWLp5IVqbeFFCO/PRFJ/X1sPm7nSkagVcgEp5SdzGI=";
+    sha256 = "sha256-/QZub48rarVHcD0PgOPc6NTlOKrsEzVK/qjHb5CjWS0=";
   };
 
   cmakeFlags = [
diff --git a/nixpkgs/pkgs/games/gcs/default.nix b/nixpkgs/pkgs/games/gcs/default.nix
index 9d8d74921e54..be8bb7017863 100644
--- a/nixpkgs/pkgs/games/gcs/default.nix
+++ b/nixpkgs/pkgs/games/gcs/default.nix
@@ -70,6 +70,10 @@ in stdenv.mkDerivation rec {
   meta = with lib; {
     description = "A stand-alone, interactive, character sheet editor for the GURPS 4th Edition roleplaying game system";
     homepage = "https://gurpscharactersheet.com/";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # source bundles dependencies as jars
+    ];
     license = licenses.mpl20;
     platforms = platforms.all;
     maintainers = with maintainers; [];
diff --git a/nixpkgs/pkgs/games/gemrb/default.nix b/nixpkgs/pkgs/games/gemrb/default.nix
index 947957bc3af6..b29eed160cde 100644
--- a/nixpkgs/pkgs/games/gemrb/default.nix
+++ b/nixpkgs/pkgs/games/gemrb/default.nix
@@ -18,7 +18,7 @@
 let
   # the GLES backend on rpi is untested as I don't have the hardware
   backend =
-    if (stdenv.isx86_32 || stdenv.isx86_64) then "OpenGL" else "GLES";
+    if stdenv.hostPlatform.isx86 then "OpenGL" else "GLES";
 
   withVLC = stdenv.isDarwin;
 
diff --git a/nixpkgs/pkgs/games/gimx/default.nix b/nixpkgs/pkgs/games/gimx/default.nix
index 132169b711d7..2728afe2c492 100644
--- a/nixpkgs/pkgs/games/gimx/default.nix
+++ b/nixpkgs/pkgs/games/gimx/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchFromGitHub, makeWrapper, curl, libusb1, xorg, libxml2
-, ncurses5, bluez, libmhash, gimxPDP ? false }:
+, ncurses5, bluez, libmhash, gimxPdpGamepad ? false }:
 
 let
   gimx-config = fetchFromGitHub {
@@ -11,14 +11,14 @@ let
 
 in stdenv.mkDerivation rec {
   pname = "gimx";
-  version = "8.0";
+  version = "unstable-2021-08-31";
 
   src = fetchFromGitHub {
     owner = "matlo";
     repo = "GIMX";
-    rev = "v${version}";
+    rev = "58d2098dce75ed4c90ae649460d3a7a150f4ef0a";
     fetchSubmodules = true;
-    sha256 = "0265gg6q7ymg76fb4pjrfdwjd280b3zzry96qy92w0h411slph85";
+    sha256 = "05kdv2qqr311c2p76hdlgvrq7b04vcpps5c80zn8b8l7p831ilgz";
   };
 
   patches = [ ./conf.patch ];
@@ -28,7 +28,7 @@ in stdenv.mkDerivation rec {
     xorg.libX11 xorg.libXi xorg.libXext
   ];
 
-  postPatch = lib.optionals gimxPDP ''
+  postPatch = lib.optionals gimxPdpGamepad ''
     substituteInPlace ./shared/gimxcontroller/include/x360.h \
       --replace "0x045e" "0x0e6f" --replace "0x028e" "0x0213"
     substituteInPlace ./loader/firmware/EMU360.hex \
@@ -61,10 +61,6 @@ in stdenv.mkDerivation rec {
 
     makeWrapper $out/bin/gimx $out/bin/gimx-dualshock4 \
       --set GIMXCONF 1 --add-flags "--nograb" --add-flags "-p /dev/ttyUSB0" \
-      --add-flags "-c $out/share/config/Dualshock4.xml"
-
-    makeWrapper $out/bin/gimx $out/bin/gimx-dualshock4-noff \
-      --set GIMXCONF 1 --add-flags "--nograb" --add-flags "-p /dev/ttyUSB0" \
       --add-flags "-c $out/share/custom/Dualshock4.xml"
 
     makeWrapper $out/bin/gimx $out/bin/gimx-xboxonepad \
diff --git a/nixpkgs/pkgs/games/gl-117/default.nix b/nixpkgs/pkgs/games/gl-117/default.nix
index 0acabb4a55f3..f135c93ff04f 100644
--- a/nixpkgs/pkgs/games/gl-117/default.nix
+++ b/nixpkgs/pkgs/games/gl-117/default.nix
@@ -11,7 +11,8 @@ stdenv.mkDerivation rec {
     sha256 = "1yvg1rp1yijv0b45cz085b29x5x0g5fkm654xdv5qwh2l6803gb4";
   };
 
-  buildInputs = [ libGLU libGL SDL freeglut SDL_mixer autoconf automake libtool ];
+  nativeBuildInputs = [ automake autoconf ];
+  buildInputs = [ libGLU libGL SDL freeglut SDL_mixer libtool ];
 
   meta = with lib; {
     description = "An air combat simulator";
diff --git a/nixpkgs/pkgs/games/gmad/default.nix b/nixpkgs/pkgs/games/gmad/default.nix
index 8f43c75f06a8..97538679ee59 100644
--- a/nixpkgs/pkgs/games/gmad/default.nix
+++ b/nixpkgs/pkgs/games/gmad/default.nix
@@ -2,21 +2,21 @@
 
 stdenv.mkDerivation rec {
   pname = "gmad";
-  version = "unstable-2015-04-16";
+  version = "unstable-2020-02-24";
 
   meta = {
     description = "Garry's Mod Addon Creator and Extractor";
-    homepage = "https://github.com/garrynewman/gmad";
+    homepage = "https://github.com/Facepunch/gmad";
     license = lib.licenses.unfree;
     maintainers = [ lib.maintainers.abigailbuccaneer ];
     platforms = lib.platforms.all;
   };
 
   src = fetchFromGitHub {
-    owner = "garrynewman";
+    owner = "Facepunch";
     repo = "gmad";
-    rev = "377f3458bf1ecb8a1a2217c2194773e3c2a2dea0";
-    sha256="0myi9njr100gxhxk1vrzr2sbij5kxl959sq0riiqgg01div338g0";
+    rev = "5236973a2fcbb3043bdd3d4529ce68b6d938ad93";
+    sha256="04an17nvnj38mpi0w005v41ib8ynb5qhgrdkmsda4hq7l1gn276s";
   };
 
   buildInputs = [ premake4 bootil ];
diff --git a/nixpkgs/pkgs/games/gnonograms/default.nix b/nixpkgs/pkgs/games/gnonograms/default.nix
index 21f522d3418f..2446384ff719 100644
--- a/nixpkgs/pkgs/games/gnonograms/default.nix
+++ b/nixpkgs/pkgs/games/gnonograms/default.nix
@@ -1,7 +1,6 @@
 { lib
 , stdenv
 , fetchFromGitHub
-, fetchpatch
 , vala
 , meson
 , ninja
@@ -19,24 +18,15 @@
 
 stdenv.mkDerivation rec {
   pname = "gnonograms";
-  version = "2.0.0";
+  version = "2.1.2";
 
   src = fetchFromGitHub {
     owner = "jeremypw";
     repo = "gnonograms";
     rev = "v${version}";
-    sha256 = "sha256-2uXaybpCAm9cr0o7bqfhgD7mMNPwtv1X/PgnFnSDOl0=";
+    sha256 = "sha256-TkEVjrwlr4Q5FsfcdY+9fxwaMq+DFs0RwGI2E+GT5Mk=";
   };
 
-  patches = [
-    # Fix build with meson 0.61, can be removed on next release
-    # https://github.com/jeremypw/gnonograms/pull/45
-    (fetchpatch {
-      url = "https://github.com/jeremypw/gnonograms/commit/0e90d8ff42d64a94002ec8500889bc4d7e06c1b6.patch";
-      sha256 = "sha256-G/yqsZFmOA69A3E2CROMYAS5vmok/K5l1S/M2m8DMh4=";
-    })
-  ];
-
   postPatch = ''
     patchShebangs meson/post_install.py
   '';
diff --git a/nixpkgs/pkgs/games/gnubg/default.nix b/nixpkgs/pkgs/games/gnubg/default.nix
index 6f50869e6c69..727626790529 100644
--- a/nixpkgs/pkgs/games/gnubg/default.nix
+++ b/nixpkgs/pkgs/games/gnubg/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, pkg-config, glib, python3, gtk2, readline }:
+{ lib, stdenv, fetchurl, pkg-config, glib, python2, gtk2, readline }:
 
 stdenv.mkDerivation rec {
   pname = "gnubg";
@@ -9,8 +9,9 @@ stdenv.mkDerivation rec {
     sha256 = "11xwhcli1h12k6rnhhyq4jphzrhfik7i8ah3k32pqw803460n6yf";
   };
 
-  nativeBuildInputs = [ pkg-config python3 glib ];
-  buildInputs = [  gtk2 readline ];
+  nativeBuildInputs = [ pkg-config python2 glib ];
+
+  buildInputs = [ gtk2 readline ];
 
   strictDeps = true;
 
diff --git a/nixpkgs/pkgs/games/gnugo/default.nix b/nixpkgs/pkgs/games/gnugo/default.nix
index e33c27bf9eb4..3b8449ab4c7f 100644
--- a/nixpkgs/pkgs/games/gnugo/default.nix
+++ b/nixpkgs/pkgs/games/gnugo/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl }:
+{ lib, stdenv, fetchurl, fetchpatch }:
 
 stdenv.mkDerivation rec {
   pname = "gnugo";
@@ -9,6 +9,16 @@ stdenv.mkDerivation rec {
     sha256 = "0wkahvqpzq6lzl5r49a4sd4p52frdmphnqsfdv7gdp24bykdfs6s";
   };
 
+  patches = [
+    # Pull patch pending upstream inclusion for -fno-common toolchain support:
+    #   https://savannah.gnu.org/patch/index.php?10208
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://savannah.gnu.org/patch/download.php?file_id=53240";
+      sha256 = "0s96qvmx244vq5pv2nzf7x863kq2y5skzjhbpyzaajfkldbj0sw4";
+    })
+  ];
+
   hardeningDisable = [ "format" ];
 
   meta = {
diff --git a/nixpkgs/pkgs/games/grapejuice/default.nix b/nixpkgs/pkgs/games/grapejuice/default.nix
index 4ddb58c81482..23e245149ad7 100644
--- a/nixpkgs/pkgs/games/grapejuice/default.nix
+++ b/nixpkgs/pkgs/games/grapejuice/default.nix
@@ -1,6 +1,7 @@
 { lib
 , fetchFromGitLab
 , gobject-introspection
+, pciutils
 , python3Packages
 , gtk3
 , wrapGAppsHook
@@ -9,43 +10,46 @@
 , desktop-file-utils
 , xdg-utils
 , xdg-user-dirs
-, wine
+, gettext
 , winetricks
-, pciutils
+, wine
 , glxinfo
 }:
 
 python3Packages.buildPythonApplication rec  {
   pname = "grapejuice";
-  version = "4.10.2";
+  version = "5.2.2";
 
   src = fetchFromGitLab {
     owner = "BrinkerVII";
     repo = "grapejuice";
-    rev = "9a7cf806d35b4d53b3d3762339eba7d861b5043d";
-    sha256 = "sha256-cKZv9qPCnl7i4kb6PG8RYx3HNLcwgI4d2zkw899MA6E=";
+    rev = "v${version}";
+    sha256 = "sha256-YEAYoZF1Lf0ykB13cuRf5sOR1HIxwdcibyJLgP3g4Jk=";
   };
 
   nativeBuildInputs = [
     gobject-introspection
     desktop-file-utils
     glib
-    gtk3
     wrapGAppsHook
   ];
 
   buildInputs = [
     cairo
+    gettext
+    gtk3
   ];
 
   propagatedBuildInputs = with python3Packages; [
-    requests
-    pygobject3
+    psutil
     dbus-python
+    pygobject3
     packaging
-    psutil
+    wheel
     setuptools
+    requests
     unidecode
+    click
   ];
 
   dontWrapGApps = true;
@@ -58,6 +62,7 @@ python3Packages.buildPythonApplication rec  {
   postPatch = ''
     substituteInPlace src/grapejuice_common/assets/desktop/grapejuice.desktop \
       --replace \$GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice" \
+      --replace \$GRAPEJUICE_GUI_EXECUTABLE "$out/bin/grapejuice-gui" \
       --replace \$GRAPEJUICE_ICON grapejuice
 
     substituteInPlace src/grapejuice_common/assets/desktop/roblox-player.desktop \
@@ -71,6 +76,12 @@ python3Packages.buildPythonApplication rec  {
     substituteInPlace src/grapejuice_common/assets/desktop/roblox-studio.desktop \
       --replace \$GRAPEJUICE_EXECUTABLE "$out/bin/grapejuice" \
       --replace \$STUDIO_ICON "grapejuice-roblox-studio"
+
+    substituteInPlace src/grapejuice_common/paths.py \
+      --replace 'return local_share() / "locale"' 'return Path("${placeholder "out"}/share/locale")'
+
+    substituteInPlace src/grapejuice_common/features/settings.py \
+      --replace 'k_default_wine_home: "",' 'k_default_wine_home: "${wine}",'
   '';
 
   postInstall = ''
@@ -78,6 +89,23 @@ python3Packages.buildPythonApplication rec  {
     cp -r src/grapejuice_common/assets/desktop/* $out/share/applications/
     cp -r src/grapejuice_common/assets/icons $out/share/
     cp src/grapejuice_common/assets/mime_xml/*.xml $out/share/mime/packages/
+
+    # compile locales (*.po -> *.mo)
+    # from https://gitlab.com/brinkervii/grapejuice/-/blob/master/src/grapejuice_common/util/mo_util.py
+    LOCALE_DIR="$out/share/locale"
+    PO_DIR="src/grapejuice_common/assets/po"
+    LINGUAS_FILE="src/grapejuice_common/assets/po/LINGUAS"
+
+    for lang in $(<"$LINGUAS_FILE") # extract langs from LINGUAS_FILE
+    do
+      po_file="$PO_DIR/$lang.po"
+      mo_file_dir="$LOCALE_DIR/$lang/LC_MESSAGES"
+
+      mkdir -p $mo_file_dir
+
+      mo_file="$mo_file_dir/grapejuice.mo"
+      msgfmt $po_file -o $mo_file # msgfmt from gettext
+    done
   '';
 
   # No tests
@@ -87,9 +115,9 @@ python3Packages.buildPythonApplication rec  {
 
   meta = with lib; {
     homepage = "https://gitlab.com/brinkervii/grapejuice";
-    description = "A wine+Roblox management application";
+    description = "Simple Wine+Roblox management tool";
     license = licenses.gpl3Plus;
     platforms = platforms.linux;
-    maintainers = with maintainers; [ artturin ];
+    maintainers = with maintainers; [ artturin helium ];
   };
 }
diff --git a/nixpkgs/pkgs/games/graphwar/default.nix b/nixpkgs/pkgs/games/graphwar/default.nix
new file mode 100644
index 000000000000..3586979292e6
--- /dev/null
+++ b/nixpkgs/pkgs/games/graphwar/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, copyDesktopItems
+, jdk
+, makeDesktopItem
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "graphwar";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "catabriga";
+    repo = "graphwar";
+    rev = version;
+    sha256 = "sha256-t3Y576dXWp2Mj6OSQN5cm9FuNBWNqKq6xxkVRbjIBgE=";
+  };
+
+  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+  buildInputs = [ jdk ];
+
+  buildPhase = ''
+    runHook preBuild
+
+    mkdir -p out/
+    javac -d out/ -sourcepath src/ -classpath out/ -encoding utf8 src/**/*.java
+
+    runHook postBuild
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/lib/
+    mv out $out/lib/graphwar
+    cp -r rsc $out/lib/graphwar/rsc
+
+    makeWrapper ${jdk}/bin/java $out/bin/graphwar \
+      --add-flags "-classpath $out/lib/graphwar Graphwar.Graphwar"
+    makeWrapper ${jdk}/bin/java $out/bin/graphwar-roomserver \
+      --add-flags "-classpath $out/lib/graphwar RoomServer.RoomServer"
+    makeWrapper ${jdk}/bin/java $out/bin/graphwar-globalserver \
+      --add-flags "-classpath $out/lib/graphwar GlobalServer.GlobalServer"
+
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      name = "graphwar";
+      exec = "graphwar";
+      desktopName = "Graphwar";
+      categories = [ "Game" ];
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "http://www.graphwar.com/";
+    description = "An artillery game in which you must hit your enemies using mathematical functions";
+    license = licenses.gpl3Plus;
+    platforms = jdk.meta.platforms;
+    maintainers = with maintainers; [ yrd ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/gscrabble/default.nix b/nixpkgs/pkgs/games/gscrabble/default.nix
index f0e4121d8f2c..b21cdadac1e0 100644
--- a/nixpkgs/pkgs/games/gscrabble/default.nix
+++ b/nixpkgs/pkgs/games/gscrabble/default.nix
@@ -4,13 +4,13 @@
 
 buildPythonApplication {
   pname = "gscrabble";
-  version = "unstable-2019-03-11";
+  version = "unstable-2020-04-21";
 
   src = fetchFromGitHub {
     owner = "RaaH";
     repo = "gscrabble";
-    rev = "4b6e4e151a4cd4a4f66a5be2c8616becac3f2a29";
-    sha256 = "0a89kqh04x52q7qyv1rfa7xif0pdw3zc0dw5a24msala919g90q2";
+    rev = "aba37f062a6b183dcc084c453f395af1dc437ec8";
+    sha256 = "sha256-rYpPHgOlPRnlA+Nkvo/J+/8/vl24/Ssk55fTq9oNCz4=";
   };
 
   doCheck = false;
@@ -31,10 +31,14 @@ buildPythonApplication {
   '';
 
   meta = with lib; {
+    # Fails to build, propably incompatible with latest Python
+    # error: Multiple top-level packages discovered in a flat-layout
+    # https://github.com/RaaH/gscrabble/issues/13
+    broken = true;
     description = "Golden Scrabble crossword puzzle game";
     homepage = "https://github.com/RaaH/gscrabble/";
     license = licenses.gpl2Plus;
     platforms = platforms.linux;
-    maintainers = [ ];
+    maintainers = with maintainers; [ onny ];
   };
 }
diff --git a/nixpkgs/pkgs/games/gshogi/default.nix b/nixpkgs/pkgs/games/gshogi/default.nix
index c3479f6758af..4b674ac129df 100644
--- a/nixpkgs/pkgs/games/gshogi/default.nix
+++ b/nixpkgs/pkgs/games/gshogi/default.nix
@@ -1,8 +1,12 @@
-{ lib, buildPythonApplication, fetchFromGitHub
-, gtk3, gobject-introspection
-, wrapGAppsHook, python3Packages }:
+{ lib
+, fetchFromGitHub
+, gobject-introspection
+, gtk3
+, python3
+, wrapGAppsHook
+}:
 
-buildPythonApplication rec {
+python3.pkgs.buildPythonApplication rec {
   pname = "gshogi";
   version = "0.5.1";
 
@@ -10,7 +14,7 @@ buildPythonApplication rec {
     owner = "johncheetham";
     repo = "gshogi";
     rev = "v${version}";
-    sha256 = "06vgndfgwyfi50wg3cw92zspc9z0k7xn2pp6qsjih0l5yih8iwqh";
+    hash = "sha256-EPOIYPSFAhilxuZeYfuZ4Cd29ReJs/E4KNF5/lyzbxs=";
   };
 
   doCheck = false;  # no tests available
@@ -22,15 +26,15 @@ buildPythonApplication rec {
 
   nativeBuildInputs = [ wrapGAppsHook ];
 
-  propagatedBuildInputs = with python3Packages; [
+  propagatedBuildInputs = with python3.pkgs; [
     pygobject3
     pycairo
   ];
 
   meta = with lib; {
-    description = "A graphical implementation of the Shogi board game, also known as Japanese Chess";
     homepage = "http://johncheetham.com/projects/gshogi/";
-    license = licenses.gpl3;
+    description = "A graphical implementation of the Shogi board game, also known as Japanese Chess";
+    license = licenses.gpl3Plus;
     platforms = platforms.linux;
     maintainers = [ maintainers.ciil ];
   };
diff --git a/nixpkgs/pkgs/games/hedgewars/default.nix b/nixpkgs/pkgs/games/hedgewars/default.nix
index 9062af5be383..7ea8257e192a 100644
--- a/nixpkgs/pkgs/games/hedgewars/default.nix
+++ b/nixpkgs/pkgs/games/hedgewars/default.nix
@@ -1,7 +1,7 @@
-{ mkDerivation, SDL2_image, SDL2_ttf, SDL2_net, fpc, ghcWithPackages, ffmpeg, freeglut
+{ stdenv, SDL2_image, SDL2_ttf, SDL2_net, fpc, ghcWithPackages, ffmpeg, freeglut
 , lib, fetchurl, cmake, pkg-config, lua5_1, SDL2, SDL2_mixer
 , zlib, libpng, libGL, libGLU, physfs
-, qtbase, qttools
+, qtbase, qttools, wrapQtAppsHook
 , llvm
 , withServer ? true
 }:
@@ -14,7 +14,7 @@ let
         ]);
 
 in
-mkDerivation rec {
+stdenv.mkDerivation rec {
   pname = "hedgewars";
   version = "1.0.0";
 
@@ -23,7 +23,7 @@ mkDerivation rec {
     sha256 = "0nqm9w02m0xkndlsj6ys3wr0ik8zc14zgilq7k6fwjrf3zk385i1";
   };
 
-  nativeBuildInputs = [ cmake pkg-config qttools ];
+  nativeBuildInputs = [ cmake pkg-config qttools wrapQtAppsHook ];
 
   buildInputs = [
     SDL2_ttf SDL2_net SDL2 SDL2_mixer SDL2_image
@@ -33,6 +33,10 @@ mkDerivation rec {
     qtbase
   ] ++ lib.optional withServer ghc;
 
+  patches = [
+    ./qt515.patch
+  ];
+
   postPatch = ''
     substituteInPlace gameServer/CMakeLists.txt \
       --replace mask evaluate
diff --git a/nixpkgs/pkgs/games/hedgewars/qt515.patch b/nixpkgs/pkgs/games/hedgewars/qt515.patch
new file mode 100644
index 000000000000..a8dc9907f405
--- /dev/null
+++ b/nixpkgs/pkgs/games/hedgewars/qt515.patch
@@ -0,0 +1,10 @@
+--- a/QTfrontend/ui/page/pagegamestats.cpp
++++ b/QTfrontend/ui/page/pagegamestats.cpp
+@@ -22,6 +22,7 @@
+ #include <QGraphicsScene>
+ #include <QGroupBox>
+ #include <QSizePolicy>
++#include <QPainterPath>
+ 
+ #include "pagegamestats.h"
+ #include "team.h"
diff --git a/nixpkgs/pkgs/games/heroic/default.nix b/nixpkgs/pkgs/games/heroic/default.nix
index c0416d0dd7e8..044d159cde1d 100644
--- a/nixpkgs/pkgs/games/heroic/default.nix
+++ b/nixpkgs/pkgs/games/heroic/default.nix
@@ -1,12 +1,12 @@
-{ lib, fetchurl, appimageTools, gsettings-desktop-schemas, gtk3 }:
+{ lib, fetchurl, appimageTools }:
 
 let
   pname = "heroic";
-  version = "2.2.1";
+  version = "2.2.6";
   name = "${pname}-${version}";
   src = fetchurl {
     url = "https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher/releases/download/v${version}/Heroic-${version}.AppImage";
-    sha256 = "sha256-zzxf3eM1fUWTVtzzABcwlmptNuCVQafvotnbOiCzu0c=";
+    sha256 = "sha256-kL30/G4DpDPwGN7PvbWest7TcgL4Rd1c2OM4nRCT3bg=";
   };
   appimageContents = appimageTools.extractType2 { inherit name src; };
 
@@ -29,10 +29,6 @@ appimageTools.wrapType2 {
       --replace 'Exec=AppRun' 'Exec=heroic'
   '';
 
-  profile = ''
-    export XDG_DATA_DIRS=${gsettings-desktop-schemas}/share/gsettings-schemas/${gsettings-desktop-schemas.name}:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_DATA_DIRS
-  '';
-
   meta = with lib; {
     description = "A Native GUI Epic Games Launcher for Linux, Windows and Mac";
     homepage = "https://github.com/Heroic-Games-Launcher/HeroicGamesLauncher";
diff --git a/nixpkgs/pkgs/games/holdingnuts/default.nix b/nixpkgs/pkgs/games/holdingnuts/default.nix
deleted file mode 100644
index 2bda18209280..000000000000
--- a/nixpkgs/pkgs/games/holdingnuts/default.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{ lib, stdenv, fetchurl, cmake, SDL, qt4 }:
-
-let mirror = "http://download.holdingnuts.net";
-in stdenv.mkDerivation rec {
-  pname   = "holdingnuts";
-  version = "0.0.5";
-
-  src = fetchurl {
-    url    = "${mirror}/release/${version}/${pname}-${version}.tar.bz2";
-    sha256 = "0iw25jmnqzscg34v66d4zz70lvgjp4l7gi16nna6491xnqha5a8g";
-  };
-
-  patches = [
-    (fetchurl {
-      url    = "${mirror}/patches/holdingnuts-0.0.5-wheel.patch";
-      sha256 = "0hap5anxgc19s5qi64mjpi3wpgphy4dqdxqw34q19dw3gwxw5g8n";
-    })
-    (fetchurl {
-      url    = "${mirror}/patches/holdingnuts-qpixmapcache-workaround.patch";
-      sha256 = "15cf9j9mdm85f0h7w5f5852ic7xpim0243yywkd2qrfp37mi93pd";
-    })
-  ];
-
-  postPatch = ''
-    substituteInPlace src/system/SysAccess.c --replace /usr/share $out/share
-  '';
-
-  nativeBuildInputs = [ cmake ];
-  buildInputs = [ SDL qt4 ];
-
-  meta = with lib; {
-    homepage    = "http://www.holdingnuts.net/";
-    description = "Open Source Poker client and server";
-    license     = licenses.gpl3;
-    maintainers = with maintainers; [ obadz ];
-    platforms   = platforms.all;
-  };
-}
diff --git a/nixpkgs/pkgs/games/hyperrogue/default.nix b/nixpkgs/pkgs/games/hyperrogue/default.nix
index 0397bb474da3..c1a3eddd25f4 100644
--- a/nixpkgs/pkgs/games/hyperrogue/default.nix
+++ b/nixpkgs/pkgs/games/hyperrogue/default.nix
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "0bijgbqpc867pq8lbwwvcnc713gm51mmz625xb5br0q2qw09nkyh";
   };
 
-  CPPFLAGS = "-I${SDL.dev}/include/SDL";
+  CPPFLAGS = "-I${lib.getDev SDL}/include/SDL";
 
   buildInputs = [ autoreconfHook SDL SDL_ttf SDL_gfx SDL_mixer libpng glew ];
 
diff --git a/nixpkgs/pkgs/games/infra-arcana/default.nix b/nixpkgs/pkgs/games/infra-arcana/default.nix
new file mode 100644
index 000000000000..e48c69a2cf33
--- /dev/null
+++ b/nixpkgs/pkgs/games/infra-arcana/default.nix
@@ -0,0 +1,60 @@
+{ lib
+, stdenv
+, fetchFromGitLab
+, cmake
+, makeWrapper
+, SDL2
+, SDL2_image
+, SDL2_mixer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "infra-arcana";
+  version = "21.0.1";
+
+  src = fetchFromGitLab {
+    owner = "martin-tornqvist";
+    repo = "ia";
+    rev = "v${version}";
+    sha256 = "sha256-E2ssxdYa27qRk5cCmM7A5VqXGExwXHblR34y+rOUBRI=";
+  };
+
+  nativeBuildInputs = [ cmake makeWrapper ];
+  buildInputs = [ SDL2 SDL2_image SDL2_mixer ];
+
+  # Some parts of the game don't compile with glibc 2.34. As soon as
+  # this is fixed upstream we can switch to the default build flags.
+  buildFlags = [ "ia" ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/{opt/ia,bin}
+
+    # Remove build artifacts
+    rm -rf CMake* cmake* compile_commands.json CTest* Makefile
+    cp -ra * $out/opt/ia
+
+    # Uses relative paths when looking for assets
+    wrapProgram $out/opt/ia/ia --run "cd $out/opt/ia"
+    ln -s $out/opt/ia/ia $out/bin/infra-arcana
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://sites.google.com/site/infraarcana";
+    description = "A Lovecraftian single-player roguelike game";
+    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.
+
+      Buried deep beneath their hallowed grounds lies an artifact called The
+      Shining Trapezohedron - a window to all secrets of the universe. Your
+      ultimate goal is to unearth this artifact.
+    '';
+    platforms = platforms.linux;
+    maintainers = [ maintainers.kenran ];
+    license = licenses.agpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/iortcw/default.nix b/nixpkgs/pkgs/games/iortcw/default.nix
index 8af3dfe31f68..9da055acc218 100644
--- a/nixpkgs/pkgs/games/iortcw/default.nix
+++ b/nixpkgs/pkgs/games/iortcw/default.nix
@@ -17,7 +17,7 @@ in buildEnv {
   # so we can launch sp from mp game and vice versa
   postBuild = ''
     for i in `find -L $out/opt/iortcw -maxdepth 1 -type f -executable`; do
-      makeWrapper $i $out/bin/`basename $i` --run "cd $out/opt/iortcw"
+      makeWrapper $i $out/bin/`basename $i` --chdir "$out/opt/iortcw"
     done
   '';
 
diff --git a/nixpkgs/pkgs/games/iortcw/sp.nix b/nixpkgs/pkgs/games/iortcw/sp.nix
index fa6f73a177b2..d9faa177c17d 100644
--- a/nixpkgs/pkgs/games/iortcw/sp.nix
+++ b/nixpkgs/pkgs/games/iortcw/sp.nix
@@ -38,7 +38,7 @@ stdenv.mkDerivation rec {
 
   postInstall = ''
     for i in `find $out/opt/iortcw -maxdepth 1 -type f -executable`; do
-      makeWrapper $i $out/bin/`basename $i` --run "cd $out/opt/iortcw"
+      makeWrapper $i $out/bin/`basename $i` --chdir "$out/opt/iortcw"
     done
   '';
 
diff --git a/nixpkgs/pkgs/games/itch-setup/default.nix b/nixpkgs/pkgs/games/itch-setup/default.nix
deleted file mode 100644
index 55d488bcaac0..000000000000
--- a/nixpkgs/pkgs/games/itch-setup/default.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ lib, writeShellScriptBin, steam-run, fetchurl }:
-let
-
-  pname = "itch-setup";
-  version = "1.26.0";
-
-  src = fetchurl {
-    url = "https://broth.itch.ovh/itch-setup/linux-amd64/${version}/unpacked/default";
-    hash = "sha256-bcJKqhgZK42Irx12BIvbTDMb/DHEOEXljetlDokF7x8=";
-    executable = true;
-  };
-
-in
-(writeShellScriptBin pname ''exec ${steam-run}/bin/steam-run ${src} "$@"'') // {
-
-  passthru = { inherit pname version src; };
-  meta = with lib; {
-    description = "An installer for the itch.io desktop app";
-    homepage = "https://github.com/itchio/itch-setup";
-    license = licenses.mit;
-    platforms = platforms.linux;
-    maintainers = with maintainers; [ pasqui23 ];
-  };
-}
diff --git a/nixpkgs/pkgs/games/itch/butler.nix b/nixpkgs/pkgs/games/itch/butler.nix
new file mode 100644
index 000000000000..68f1bac49e90
--- /dev/null
+++ b/nixpkgs/pkgs/games/itch/butler.nix
@@ -0,0 +1,29 @@
+{ lib
+, buildGoModule
+, fetchFromGitHub
+}:
+
+buildGoModule rec {
+  pname = "butler";
+  version = "15.21.0";
+
+  src = fetchFromGitHub {
+    owner = "itchio";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-vciSmXR3wI3KcnC+Uz36AgI/WUfztA05MJv1InuOjJM=";
+  };
+
+  proxyVendor = true;
+
+  vendorSha256 = "sha256-EIl0ZFDKbZopUR22hp5a2vRUu0O1h1O953NrtoNa2x8=";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Command-line itch.io helper";
+    homepage = "https://github.com/itchio/butler";
+    license = licenses.mit;
+    maintainers = with maintainers; [ martfont ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/itch/default.nix b/nixpkgs/pkgs/games/itch/default.nix
index 34a2775c3c80..6f6dbde15d63 100644
--- a/nixpkgs/pkgs/games/itch/default.nix
+++ b/nixpkgs/pkgs/games/itch/default.nix
@@ -1,30 +1,55 @@
 { lib
 , stdenvNoCC
-, fetchurl
-, libnotify
-, nss
-, gtk3
+, fetchpatch
+, fetchzip
 , fetchFromGitHub
+, butler
+, electron_11
+, steam-run
+, makeWrapper
+, copyDesktopItems
 , makeDesktopItem
-, itch-setup
-, runtimeShell
 }:
-stdenvNoCC.mkDerivation rec{
+stdenvNoCC.mkDerivation rec {
   pname = "itch";
   version = "25.5.1";
 
-  src = fetchFromGitHub {
+  src = fetchzip {
+    url = "https://broth.itch.ovh/${pname}/linux-amd64/${version}/itch.zip";
+    stripRoot = false;
+    sha256 = "sha256-ejfS+sqhacW2h8u96W4fout3V8xrBs0SrW5w/7X83m4=";
+  };
+
+  patches = [
+    # Fixes crash while browsing the store.
+    (fetchpatch {
+      name = "itch.patch";
+      url = "https://aur.archlinux.org/cgit/aur.git/plain/itch.patch?h=itch-bin&id=0b181454567029141749f870880b10093216e133";
+      sha256 = "sha256-gmLL/BMondSflERm0z+DuGDP56JhDXiyxEwLUavTD8Q=";
+    })
+  ];
+
+  itch-setup = fetchzip {
+    url = "https://broth.itch.ovh/itch-setup/linux-amd64/1.26.0/itch-setup.zip";
+    stripRoot = false;
+    sha256 = "sha256-5MP6X33Jfu97o5R1n6Og64Bv4ZMxVM0A8lXeQug+bNA=";
+  };
+
+  icons = fetchFromGitHub {
     owner = "itchio";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-Pi3l3uK4kr+N3p7fGQuqckYIzycRqJHDVX00reoSbp4=";
+    hash = "sha256-DZBmf8fe0zw5uiQjNKXw8g/vU2hjNDa87z/7XuhyXog=";
+    sparseCheckout = "release/images/itch-icons";
   };
 
+  nativeBuildInputs = [ copyDesktopItems makeWrapper ];
+
   desktopItems = [
     (makeDesktopItem {
       name = pname;
-      exec = pname;
-      tryExec = "itch %U";
+      exec = "itch %U";
+      tryExec = pname;
       icon = pname;
       desktopName = pname;
       mimeTypes = [ "x-scheme-handler/itchio" "x-scheme-handler/itch" ];
@@ -33,23 +58,33 @@ stdenvNoCC.mkDerivation rec{
     })
   ];
 
-  itchBin = ''
-    #!${runtimeShell}
-    exec ${itch-setup}/bin/itch-setup --prefer-launch -- "$@"
-  '';
+  # As taken from https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=itch-bin
+  installPhase = ''
+    runHook preInstall
 
-  passAsFile = [ "itchBin" ];
+    mkdir -p $out/bin $out/share/${pname}/resources/app
+    cp -r resources/app "$out/share/${pname}/resources/"
 
-  # as taken from https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=itch
-  installPhase = ''
-    install -Dm0777 $itchBinPath $out/bin/itch
-    for icon in release/images/itch-icons/icon*.png
+    install -Dm644 LICENSE -t "$out/share/licenses/$pkgname/"
+    install -Dm644 LICENSES.chromium.html -t "$out/share/licenses/$pkgname/"
+
+    for icon in $icons/release/images/itch-icons/icon*.png
     do
-      iconsize="''${icon#release/images/itch-icons/icon}"
+      iconsize="''${icon#$icons/icon}"
       iconsize="''${iconsize%.png}"
       icondir="$out/share/icons/hicolor/''${iconsize}x''${iconsize}/apps/"
       install -Dm644 "$icon" "$icondir/itch.png"
     done
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper ${steam-run}/bin/steam-run $out/bin/${pname} \
+      --add-flags ${electron_11}/bin/electron \
+      --add-flags $out/share/${pname}/resources/app \
+      --set BROTH_USE_LOCAL butler,itch-setup \
+      --prefix PATH : ${butler}/bin/:${itch-setup}
   '';
 
   meta = with lib; {
@@ -57,6 +92,7 @@ stdenvNoCC.mkDerivation rec{
     homepage = "https://github.com/itchio/itch";
     license = licenses.mit;
     platforms = platforms.linux;
+    sourceProvenance = lib.sourceTypes.binaryBytecode;
     maintainers = with maintainers; [ pasqui23 ];
   };
 }
diff --git a/nixpkgs/pkgs/games/julius/default.nix b/nixpkgs/pkgs/games/julius/default.nix
index 84970d110550..df1ff2bd1a06 100644
--- a/nixpkgs/pkgs/games/julius/default.nix
+++ b/nixpkgs/pkgs/games/julius/default.nix
@@ -1,4 +1,11 @@
-{ lib, stdenv, fetchFromGitHub, cmake, SDL2, SDL2_mixer, libpng }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+, SDL2_mixer
+, cmake
+, libpng
+}:
 
 stdenv.mkDerivation rec {
   pname = "julius";
@@ -8,18 +15,18 @@ stdenv.mkDerivation rec {
     owner = "bvschaik";
     repo = "julius";
     rev = "v${version}";
-    sha256 = "0w7kmgz9ya0ck9cxhsyralarg7y6ydx4plmh33r4mkxkamlr7493";
+    hash = "sha256-I5GTaVWzz0ryGLDSS3rzxp+XFVXZa9hZmgwon/6r83A=";
   };
 
   nativeBuildInputs = [ cmake ];
   buildInputs = [ SDL2 SDL2_mixer libpng ];
 
   meta = with lib; {
-    description = "An open source re-implementation of Caesar III";
     homepage = "https://github.com/bvschaik/julius";
+    description = "An open source re-implementation of Caesar III";
     license = licenses.agpl3;
+    maintainers = with maintainers; [ Thra11 ];
     platforms = platforms.all;
     broken = stdenv.isDarwin;
-    maintainers = with maintainers; [ Thra11 ];
   };
 }
diff --git a/nixpkgs/pkgs/games/fishfight/default.nix b/nixpkgs/pkgs/games/jumpy/default.nix
index 422901fd9864..2afba817fc00 100644
--- a/nixpkgs/pkgs/games/fishfight/default.nix
+++ b/nixpkgs/pkgs/games/jumpy/default.nix
@@ -2,54 +2,53 @@
 , rustPlatform
 , fetchFromGitHub
 , stdenv
-, SDL2
+, pkg-config
 , alsa-lib
 , libGL
 , libX11
 , libXi
-, AudioToolbox
+, udev
 , Cocoa
-, CoreAudio
 , OpenGL
 }:
 
 rustPlatform.buildRustPackage rec {
-  pname = "fishfight";
-  version = "0.3";
+  pname = "jumpy";
+  version = "0.4.3";
 
   src = fetchFromGitHub {
-    owner = "fishfight";
+    owner = "fishfolks";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-kLdk7zTICZ8iawNttTsWUVKGvh2zykXVsMqUyYoGrBs=";
+    sha256 = "sha256-01zhiQi6v/8ZajsdBU+4hKUCj+PRJ/vUHluOIzy/Gi8=";
   };
 
-  # use system sdl2 instead of bundled sdl2
-  cargoPatches = [ ./use-system-sdl2.patch ];
+  cargoSha256 = "sha256-AXaGuRqSFiq+Uiy+UaqPdPVyDhCogC64KZZ0Ah1Yo7A=";
 
-  cargoSha256 = "sha256-KQiqUzdsVMIjDmmreihekrrFoXeyNzd6ZbqApwH8B4Q=";
+  nativeBuildInputs = lib.optionals stdenv.isLinux [
+    pkg-config
+  ];
 
-  buildInputs =  [
-    SDL2
-  ] ++ lib.optionals stdenv.isLinux [
+  buildInputs = lib.optionals stdenv.isLinux [
     alsa-lib
     libGL
     libX11
     libXi
+    udev
   ] ++ lib.optionals stdenv.isDarwin [
-    AudioToolbox
     Cocoa
-    CoreAudio
     OpenGL
   ];
 
   postPatch = ''
-    substituteInPlace src/main.rs --replace ./assets $out/share/assets
+    substituteInPlace src/main.rs \
+      --replace ./assets $out/share/assets \
+      --replace ./mods $out/share/mods
   '';
 
   postInstall = ''
     mkdir $out/share
-    cp -r assets $out/share
+    cp -r assets mods $out/share
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/games/kabeljau/default.nix b/nixpkgs/pkgs/games/kabeljau/default.nix
new file mode 100644
index 000000000000..0b5b1167ead3
--- /dev/null
+++ b/nixpkgs/pkgs/games/kabeljau/default.nix
@@ -0,0 +1,40 @@
+{ stdenvNoCC, lib, fetchFromGitea, just, inkscape, makeWrapper, bash, dialog }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "kabeljau";
+  version = "1.2.0";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "annaaurora";
+    repo = "kabeljau";
+    rev = "v${version}";
+    sha256 = "sha256-RedVItgfr6vgqXHA3bOiHXDpfGuHI+sX4jCHL9G5jYk=";
+  };
+
+  # Inkscape is needed in a just recipe where it is used to export the SVG icon to several different sized PNGs.
+  nativeBuildInputs = [ just inkscape makeWrapper ];
+  postPatch = ''
+    patchShebangs --host ${pname}
+    substituteInPlace ./justfile \
+      --replace " /bin" " $out/bin" \
+      --replace " /usr" " $out"
+  '';
+  installPhase = ''
+    runHook preInstall
+
+    just install
+    wrapProgram $out/bin/${pname} --suffix PATH : ${
+      lib.makeBinPath [ dialog ]
+    }
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Survive as a stray cat in an ncurses game";
+    homepage = "https://codeberg.org/annaaurora/kabeljau";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ annaaurora ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/katago/default.nix b/nixpkgs/pkgs/games/katago/default.nix
index 3265f3d63382..a3d7ed5cba9d 100644
--- a/nixpkgs/pkgs/games/katago/default.nix
+++ b/nixpkgs/pkgs/games/katago/default.nix
@@ -1,8 +1,7 @@
 { stdenv
 , boost
 , cmake
-, cudatoolkit
-, cudnn
+, cudaPackages
 , eigen
 , fetchFromGitHub
 , gperftools
@@ -52,7 +51,8 @@ stdenv.mkDerivation rec {
   ] ++ lib.optionals (!enableGPU) [
     eigen
   ] ++ lib.optionals (enableGPU && enableCuda) [
-    cudnn
+    cudaPackages.cudnn
+    cudaPackages.cudatoolkit
     mesa.drivers
   ] ++ lib.optionals (enableGPU && !enableCuda) [
     opencl-headers
@@ -86,7 +86,7 @@ stdenv.mkDerivation rec {
   preConfigure = ''
     cd cpp/
   '' + lib.optionalString enableCuda ''
-    export CUDA_PATH="${cudatoolkit}"
+    export CUDA_PATH="${cudaPackages.cudatoolkit}"
     export EXTRA_LDFLAGS="-L/run/opengl-driver/lib"
   '';
 
diff --git a/nixpkgs/pkgs/games/keeperrl/default.nix b/nixpkgs/pkgs/games/keeperrl/default.nix
index bd49b821f9e1..f1c0f1712629 100644
--- a/nixpkgs/pkgs/games/keeperrl/default.nix
+++ b/nixpkgs/pkgs/games/keeperrl/default.nix
@@ -68,8 +68,8 @@ stdenv.mkDerivation rec {
     description = "A dungeon management rogue-like";
     homepage = "https://keeperrl.com/";
     license = licenses.gpl2;
-    maintainers = with maintainers; [ chattered ];
+    maintainers = with maintainers; [ ];
     # TODO: Add OS X
-    platforms = with platforms; [ "i686-linux" "x86_64-linux" ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
   };
 }
diff --git a/nixpkgs/pkgs/games/koules/default.nix b/nixpkgs/pkgs/games/koules/default.nix
new file mode 100644
index 000000000000..360415dc2e1d
--- /dev/null
+++ b/nixpkgs/pkgs/games/koules/default.nix
@@ -0,0 +1,77 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchzip
+, copyDesktopItems
+, gccmakedep
+, imake
+, installShellFiles
+, libX11
+, libXext
+, makeDesktopItem
+}:
+
+let
+  debian-extras = fetchzip {
+    url = "mirror://debian/pool/main/k/koules/koules_1.4-27.debian.tar.xz";
+    hash = "sha256-g0Z6C1YSZL6N2eYUuZgXkPDoOLc4e9jAFL3ivk3OAS8=";
+  };
+in
+stdenv.mkDerivation rec {
+  pname = "koules";
+  version = "1.4";
+
+  src = fetchurl {
+    url = "https://www.ucw.cz/~hubicka/koules/packages/${pname}${version}-src.tar.gz";
+    hash = "sha256-w2+T/q/uvVmYO/RBACQOZ6hKi6yr1+5SjJMEbe/kohs=";
+  };
+
+  nativeBuildInputs = [ imake gccmakedep installShellFiles copyDesktopItems ];
+  buildInputs = [ libX11 libXext ];
+
+  # Debian maintains lots of patches for koules. Let's include all of them.
+  prePatch = ''
+    patches="$patches $(cat ${debian-extras}/patches/series | sed 's|^|${debian-extras}/patches/|')"
+  '';
+
+  postPatch = ''
+    # We do not want to depend on that particular font to be available in the
+    # xserver, hence substitute it by a font which is always available
+    sed -ie 's:-schumacher-clean-bold-r-normal--8-80-75-75-c-80-\*iso\*:fixed:' xlib/init.c
+  '';
+
+  preBuild = ''
+    cp xkoules.6 xkoules.man  # else "make" will not succeed
+    sed -ie "s:^SOUNDDIR\s*=.*:SOUNDDIR=$out/lib:" Makefile
+    sed -ie "s:^KOULESDIR\s*=.*:KOULESDIR=$out:" Makefile
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm755 xkoules $out/bin/xkoules
+    install -Dm755 koules.sndsrv.linux $out/lib/koules.sndsrv.linux
+    install -m644 sounds/* $out/lib/
+    install -Dm644 Koules.xpm $out/share/pixmaps/koules.xpm
+    installManPage xkoules.6
+    runHook postInstall
+  '';
+
+  desktopItems = [
+    (makeDesktopItem {
+      desktopName = "Koules";
+      name = "koules";
+      exec = "xkoules";
+      icon = "koules";
+      comment = "Push your enemies away, but stay away from obstacles";
+      categories = [ "Game" "ArcadeGame" ];
+    })
+  ];
+
+  meta = with lib; {
+    homepage = "https://www.ucw.cz/~hubicka/koules/English/";
+    description = "Fast arcade game based on the fundamental law of body attraction";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.iblech ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/leela-zero/default.nix b/nixpkgs/pkgs/games/leela-zero/default.nix
index 13b423832e67..e7b6c7934188 100644
--- a/nixpkgs/pkgs/games/leela-zero/default.nix
+++ b/nixpkgs/pkgs/games/leela-zero/default.nix
@@ -1,5 +1,13 @@
-{ lib, stdenv, fetchFromGitHub, cmake, boost
-, opencl-headers, ocl-icd, qtbase , zlib }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, boost
+, opencl-headers
+, ocl-icd
+, qtbase
+, zlib
+}:
 
 stdenv.mkDerivation rec {
   pname = "leela-zero";
@@ -9,7 +17,7 @@ stdenv.mkDerivation rec {
     owner = "gcp";
     repo = "leela-zero";
     rev = "v${version}";
-    sha256 = "1k04ld1ysabxb8ivci3ji5by9vb3yvnflkf2fscs1x0bp7d6j101";
+    sha256 = "sha256-AQRp2rkL9KCZdsJN6uz2Y+3kV4lyRLYjWn0p7UOjBMw=";
     fetchSubmodules = true;
   };
 
@@ -21,9 +29,9 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "Go engine modeled after AlphaGo Zero";
-    homepage    = "https://github.com/gcp/leela-zero";
-    license     = licenses.gpl3;
+    homepage = "https://github.com/gcp/leela-zero";
+    license = licenses.gpl3Plus;
     maintainers = [ maintainers.averelld maintainers.omnipotententity ];
-    platforms   = platforms.linux;
+    platforms = platforms.linux;
   };
 }
diff --git a/nixpkgs/pkgs/games/legendary-gl/default.nix b/nixpkgs/pkgs/games/legendary-gl/default.nix
index 082b9220c0e8..6b81593c8af1 100644
--- a/nixpkgs/pkgs/games/legendary-gl/default.nix
+++ b/nixpkgs/pkgs/games/legendary-gl/default.nix
@@ -7,13 +7,13 @@
 
 buildPythonApplication rec {
   pname = "legendary-gl"; # Name in pypi
-  version = "0.20.25";
+  version = "0.20.27";
 
   src = fetchFromGitHub {
     owner = "derrod";
     repo = "legendary";
-    rev = version;
-    sha256 = "07z5ffi7lnvs64pksy30fbfv2i11dkkycyh31vyc4y7fsn1vd0vf";
+    rev = "refs/tags/${version}";
+    sha256 = "sha256-h9WmeVONX19/pUBfE1T/OSMI/HkTKJiTfyyEJV/noB8=";
   };
 
   propagatedBuildInputs = [ requests ];
diff --git a/nixpkgs/pkgs/games/lgames/barrage/default.nix b/nixpkgs/pkgs/games/lgames/barrage/default.nix
new file mode 100644
index 000000000000..70f97b591001
--- /dev/null
+++ b/nixpkgs/pkgs/games/lgames/barrage/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL
+, SDL_mixer
+}:
+
+stdenv.mkDerivation rec {
+  pname = "barrage";
+  version = "1.0.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    hash = "sha256-p4iXq2qM9tU9QJO7irriBN36OiLFyrnnYiDkmH3naQQ=";
+  };
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "https://lgames.sourceforge.io/Barrage/";
+    description = "A destructive action game";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    inherit (SDL.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lbreakout2/default.nix b/nixpkgs/pkgs/games/lgames/lbreakout2/default.nix
index 818cd31fa59a..4645baf06244 100644
--- a/nixpkgs/pkgs/games/lbreakout2/default.nix
+++ b/nixpkgs/pkgs/games/lgames/lbreakout2/default.nix
@@ -1,19 +1,34 @@
-{ lib, stdenv, fetchurl, SDL, SDL_mixer, zlib, libpng, libintl }:
+{ lib
+, stdenv
+, fetchurl
+, SDL
+, SDL_mixer
+, libintl
+, libpng
+, zlib
+}:
 
 stdenv.mkDerivation rec {
   pname = "lbreakout2";
   version = "2.6.5";
-  buildInputs = [ SDL SDL_mixer zlib libpng libintl ];
 
   src = fetchurl {
     url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
     sha256 = "0vwdlyvh7c4y80q5vp7fyfpzbqk9lq3w8pvavi139njkalbxc14i";
   };
 
+  buildInputs = [
+    SDL
+    SDL_mixer
+    libintl
+    libpng
+    zlib
+  ];
+
   meta = with lib; {
-    description = "Breakout clone from the LGames series";
     homepage = "http://lgames.sourceforge.net/LBreakout2/";
-    license = licenses.gpl2;
+    description = "Breakout clone from the LGames series";
+    license = licenses.gpl2Plus;
     maintainers = [ maintainers.ciil ];
     platforms = platforms.unix;
     hydraPlatforms = lib.platforms.linux; # sdl-config times out on darwin
diff --git a/nixpkgs/pkgs/games/lgames/lbreakouthd/default.nix b/nixpkgs/pkgs/games/lgames/lbreakouthd/default.nix
new file mode 100644
index 000000000000..bfe8eecc95b8
--- /dev/null
+++ b/nixpkgs/pkgs/games/lgames/lbreakouthd/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lbreakouthd";
+  version = "1.0.10";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    hash = "sha256-hlGhPa91u6pOaZoFJSDcXYQdizTFjuuTLnx9fcrXUhA=";
+  };
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "https://lgames.sourceforge.io/LBreakoutHD/";
+    description = "A widescreen Breakout clone";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    inherit (SDL2.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lgames/lpairs2/default.nix b/nixpkgs/pkgs/games/lgames/lpairs2/default.nix
new file mode 100644
index 000000000000..394b690b63dd
--- /dev/null
+++ b/nixpkgs/pkgs/games/lgames/lpairs2/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lpairs2";
+  version = "2.2";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    hash = "sha256-swe/cB9RqxHSNSShiryJ8XfwZk2X6qIDxFURbwNOd58=";
+  };
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+  ];
+
+  meta = with lib; {
+    broken = stdenv.isDarwin;
+    homepage = "http://lgames.sourceforge.net/LPairs/";
+    description = "Matching the pairs - a typical Memory Game";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lgames/ltris/default.nix b/nixpkgs/pkgs/games/lgames/ltris/default.nix
new file mode 100644
index 000000000000..618e86561f03
--- /dev/null
+++ b/nixpkgs/pkgs/games/lgames/ltris/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, SDL, SDL_mixer }:
+
+stdenv.mkDerivation rec {
+  pname = "ltris";
+  version = "1.2.5";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    hash = "sha256-Ksb5TdQMTEzaJfjHVhgq27dSFvZxUnNUQ6OpAU+xwzM=";
+  };
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    homepage = "https://lgames.sourceforge.io/LTris/";
+    description = "Tetris clone from the LGames series";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ciil ];
+    inherit (SDL.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/games/lgogdownloader/default.nix b/nixpkgs/pkgs/games/lgogdownloader/default.nix
index 0c40d537fcec..ab029e055aa9 100644
--- a/nixpkgs/pkgs/games/lgogdownloader/default.nix
+++ b/nixpkgs/pkgs/games/lgogdownloader/default.nix
@@ -11,7 +11,7 @@
 , rhash
 , tinyxml-2
 , help2man
-, testVersion
+, testers
 , lgogdownloader
 }:
 
@@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
   ];
 
   passthru.tests = {
-    version = testVersion { package = lgogdownloader; };
+    version = testers.testVersion { package = lgogdownloader; };
   };
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/games/liberal-crime-squad/default.nix b/nixpkgs/pkgs/games/liberal-crime-squad/default.nix
index d8048b01d21e..f46bd3b50a38 100644
--- a/nixpkgs/pkgs/games/liberal-crime-squad/default.nix
+++ b/nixpkgs/pkgs/games/liberal-crime-squad/default.nix
@@ -23,6 +23,7 @@ stdenv.mkDerivation {
     '';
     homepage = "https://github.com/Kamal-Sadek/Liberal-Crime-Squad";
     maintainers = [ maintainers.rardiol ];
+    mainProgram = "crimesquad";
     license = licenses.gpl2;
     platforms = platforms.all;
   };
diff --git a/nixpkgs/pkgs/games/liberation-circuit/default.nix b/nixpkgs/pkgs/games/liberation-circuit/default.nix
index c1f03e036c9f..365fbb2983eb 100644
--- a/nixpkgs/pkgs/games/liberation-circuit/default.nix
+++ b/nixpkgs/pkgs/games/liberation-circuit/default.nix
@@ -1,52 +1,23 @@
-{ stdenv, lib, fetchFromGitHub, fetchurl, cmake, git, makeWrapper, allegro5, libGL }:
+{ stdenv, lib, fetchFromGitHub, fetchurl, pkg-config, makeWrapper, allegro5, libGL }:
 
 stdenv.mkDerivation rec {
   pname = "liberation-circuit";
-  version = "1.3";
+  version = "unstable-2022-01-02";
 
   src = fetchFromGitHub {
     owner = "linleyh";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "BAv0wEJw4pK77jV+1bWPHeqyU/u0HtZLBF3ETUoQEAk=";
+    rev = "19e3363547793e931fd9419b61ebc2cd8e257714";
+    sha256 = "zIwjh4CBSmKz7pF7GM5af+VslWho5jHOLsulbW4C8TY=";
   };
 
-  patches = [
-    # Linux packaging assets
-    (fetchurl {
-      url = "https://github.com/linleyh/liberation-circuit/commit/72c1f6f4100bd227540aca14a535e7f4ebdeb851.patch";
-      sha256 = "0sad1z1lls0hanv88g1q6x5qr4s8f5p42s8j8v55bmwsdc0s5qys";
-    })
-  ];
-
-  # Hack to make binary diffs work
-  prePatch = ''
-    function patch {
-      git apply --whitespace=nowarn "$@"
-    }
-  '';
-
-  postPatch = ''
-    unset -f patch
-    substituteInPlace bin/launcher.sh --replace ./libcirc ./liberation-circuit
-  '';
-
-  nativeBuildInputs = [ cmake git makeWrapper ];
+  nativeBuildInputs = [ pkg-config makeWrapper ];
   buildInputs = [ allegro5 libGL ];
 
-  cmakeFlags = [
-    "-DALLEGRO_LIBRARY=${lib.getDev allegro5}"
-    "-DALLEGRO_INCLUDE_DIR=${lib.getDev allegro5}/include"
-  ];
-
-  NIX_CFLAGS_LINK = "-lallegro_image -lallegro_primitives -lallegro_color -lallegro_acodec -lallegro_audio -lallegro_dialog -lallegro_font -lallegro_main -lallegro -lm";
-  hardeningDisable = [ "format" ];
-
   installPhase = ''
     runHook preInstall
 
     mkdir -p $out/opt
-    cd ..
     cp -r bin $out/opt/liberation-circuit
     chmod +x $out/opt/liberation-circuit/launcher.sh
     makeWrapper $out/opt/liberation-circuit/launcher.sh $out/bin/liberation-circuit
diff --git a/nixpkgs/pkgs/games/lincity/default.nix b/nixpkgs/pkgs/games/lincity/default.nix
index 397ca0cfe8ef..c2ce8f3d82b2 100644
--- a/nixpkgs/pkgs/games/lincity/default.nix
+++ b/nixpkgs/pkgs/games/lincity/default.nix
@@ -25,9 +25,18 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: modules/.libs/libmodules.a(rocket_pad.o):/build/lincity-1.13.1/modules/../screen.h:23:
+  #     multiple definition of `monthgraph_style'; ldsvguts.o:/build/lincity-1.13.1/screen.h:23: first defined here
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   meta = with lib; {
     description = "City simulation game";
     license = licenses.gpl2Plus;
     homepage = "https://sourceforge.net/projects/lincity";
+    maintainers = with maintainers; [ ];
+    # ../lcintl.h:14:10: fatal error: 'libintl.h' file not found
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/nixpkgs/pkgs/games/lincity/ng.nix b/nixpkgs/pkgs/games/lincity/ng.nix
index 1fe2223886a7..9901255be4dc 100644
--- a/nixpkgs/pkgs/games/lincity/ng.nix
+++ b/nixpkgs/pkgs/games/lincity/ng.nix
@@ -1,28 +1,57 @@
-{ lib, stdenv, fetchFromGitHub, autoreconfHook, jam, pkg-config
-, zlib, libxml2, libxslt, xorgproto, libX11, libGLU, libGL, SDL
-, SDL_mixer, SDL_image, SDL_ttf, SDL_gfx, physfs
+{ stdenv
+, SDL2
+, SDL2_gfx
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+, autoreconfHook
+, fetchFromGitHub
+, jam
+, lib
+, libGL
+, libGLU
+, libX11
+, libxml2
+, libxslt
+, physfs
+, pkg-config
+, xorgproto
+, zlib
 }:
 
 stdenv.mkDerivation {
   pname = "lincity-ng";
-  version = "2.9beta.20170715";
+  version = "2.9beta.20211125";
 
   src = fetchFromGitHub {
-    owner  = "lincity-ng";
-    repo   = "lincity-ng";
-    rev    = "0c19714b811225238f310633e59f428934185e6b";
-    sha256 = "1gaj9fq97zmb0jsdw4rzrw34pimkmkwbfqps0glpqij4w3srz5f3";
+    owner = "lincity-ng";
+    repo = "lincity-ng";
+    rev = "b9062bec252632ca5d26b98d71453b8762c63173";
+    sha256 = "0l07cn8rmpmlqdppjc2ikh5c7xmwib27504zpmn3n9pryp394r46";
   };
 
   hardeningDisable = [ "format" ];
 
   nativeBuildInputs = [
-    autoreconfHook jam pkg-config
+    autoreconfHook
+    jam
+    pkg-config
   ];
 
   buildInputs = [
-    zlib libxml2 libxslt xorgproto libX11 libGLU libGL SDL SDL_mixer SDL_image
-    SDL_ttf SDL_gfx physfs
+    SDL2
+    SDL2_gfx
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+    libGL
+    libGLU
+    libX11
+    libxml2
+    libxslt
+    physfs
+    xorgproto
+    zlib
   ];
 
   autoreconfPhase = ''
diff --git a/nixpkgs/pkgs/games/liquidwar/5.nix b/nixpkgs/pkgs/games/liquidwar/5.nix
index e95371ec5eaf..eab7941cbd1c 100644
--- a/nixpkgs/pkgs/games/liquidwar/5.nix
+++ b/nixpkgs/pkgs/games/liquidwar/5.nix
@@ -13,7 +13,14 @@ stdenv.mkDerivation rec {
 
   hardeningDisable = [ "format" ];
 
-  NIX_CFLAGS_COMPILE = [ "-lm" ];
+  NIX_CFLAGS_COMPILE = [
+    # Workaround build failure on -fno-common toolchains like upstream
+    # gcc-10. Otherwise build fails as:
+    #   ld: random.o:(.bss+0x0): multiple definition of `LW_RANDOM_ON'; game.o:(.bss+0x4): first defined here
+    "-fcommon"
+
+    "-lm"
+  ];
 
   meta = with lib; {
     description = "The classic version of a quick tactics game LiquidWar";
diff --git a/nixpkgs/pkgs/games/liquidwar/default.nix b/nixpkgs/pkgs/games/liquidwar/default.nix
index 827c7d696c77..e012886c884d 100644
--- a/nixpkgs/pkgs/games/liquidwar/default.nix
+++ b/nixpkgs/pkgs/games/liquidwar/default.nix
@@ -37,7 +37,7 @@ stdenv.mkDerivation rec {
   ;
 
   # To avoid problems finding SDL_types.h.
-  configureFlags = [ "CFLAGS=-I${SDL.dev}/include/SDL" ];
+  configureFlags = [ "CFLAGS=-I${lib.getDev SDL}/include/SDL" ];
 
   meta = with lib; {
     description = "Quick tactics game";
diff --git a/nixpkgs/pkgs/games/ltris/default.nix b/nixpkgs/pkgs/games/ltris/default.nix
deleted file mode 100644
index d128f6c6c017..000000000000
--- a/nixpkgs/pkgs/games/ltris/default.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{ lib, stdenv, fetchurl, SDL, SDL_mixer }:
-
-stdenv.mkDerivation rec {
-  pname = "ltris";
-  version = "1.0.19";
-  buildInputs = [ SDL SDL_mixer ];
-
-  src = fetchurl {
-    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
-    sha256 = "1895wv1fqklrj4apkz47rnkcfhfav7zjknskw6p0886j35vrwslg";
-  };
-
-  patchPhase = "patch -p0 < ${./gcc5_compliance.diff}";
-
-  meta = with lib; {
-    description = "Tetris clone from the LGames series";
-    homepage = "http://lgames.sourceforge.net/LBreakout2/";
-    license = licenses.gpl2;
-    maintainers = [ maintainers.ciil ];
-    platforms = platforms.linux;
-  };
-}
diff --git a/nixpkgs/pkgs/games/ltris/gcc5_compliance.diff b/nixpkgs/pkgs/games/ltris/gcc5_compliance.diff
deleted file mode 100644
index bf53fcf8467b..000000000000
--- a/nixpkgs/pkgs/games/ltris/gcc5_compliance.diff
+++ /dev/null
@@ -1,299 +0,0 @@
-Index: ChangeLog
-===================================================================
---- ChangeLog	(revision 163)
-+++ ChangeLog	(revision 164)
-@@ -1,3 +1,5 @@
-+- removed all inline keywords to work with GCC 5 (2015/05/16 MS)
-+
- 1.0.19:
- - removed link to lib math as not needed (2013/10/29 MS)
- - reset key states when unpausing to prevent unwanted movement (2013/10/29 MS)
-Index: src/bowl.c
-===================================================================
---- src/bowl.c	(revision 163)
-+++ src/bowl.c	(revision 164)
-@@ -333,7 +333,7 @@
- Set a tile contents and pixel contents.
- ====================================================================
- */
--inline void bowl_set_tile( Bowl *bowl, int x, int y, int tile_id )
-+void bowl_set_tile( Bowl *bowl, int x, int y, int tile_id )
- {
-     int i, j = y * bowl->block_size;
-     bowl->contents[x][y] = tile_id;
-Index: src/sdl.c
-===================================================================
---- src/sdl.c	(revision 163)
-+++ src/sdl.c	(revision 164)
-@@ -244,7 +244,7 @@
- #endif
- 
- /* return full path of bitmap */
--inline void get_full_bmp_path( char *full_path, char *file_name )
-+void get_full_bmp_path( char *full_path, char *file_name )
- {
-     sprintf(full_path,  "%s/gfx/%s", SRC_DIR, file_name );
- }
-@@ -330,7 +330,7 @@
- /*
-     lock surface
- */
--inline void lock_surf(SDL_Surface *sur)
-+void lock_surf(SDL_Surface *sur)
- {
-     if (SDL_MUSTLOCK(sur))
-         SDL_LockSurface(sur);
-@@ -339,7 +339,7 @@
- /*
-     unlock surface
- */
--inline void unlock_surf(SDL_Surface *sur)
-+void unlock_surf(SDL_Surface *sur)
- {
-     if (SDL_MUSTLOCK(sur))
-         SDL_UnlockSurface(sur);
-@@ -666,7 +666,7 @@
- /*
-     lock font surface
- */
--inline void lock_font(Font *fnt)
-+void lock_font(Font *fnt)
- {
-     if (SDL_MUSTLOCK(fnt->pic))
-         SDL_LockSurface(fnt->pic);
-@@ -675,7 +675,7 @@
- /*
-     unlock font surface
- */
--inline void unlock_font(Font *fnt)
-+void unlock_font(Font *fnt)
- {
-     if (SDL_MUSTLOCK(fnt->pic))
-         SDL_UnlockSurface(fnt->pic);
-@@ -905,7 +905,7 @@
- /*
-     update rectangle (0,0,0,0)->fullscreen
- */
--inline void refresh_screen(int x, int y, int w, int h)
-+void refresh_screen(int x, int y, int w, int h)
- {
-     SDL_UpdateRect(sdl.screen, x, y, w, h);
- }
-@@ -1055,7 +1055,7 @@
- /*
-     lock surface
- */
--inline void lock_screen()
-+void lock_screen()
- {
-     if (SDL_MUSTLOCK(sdl.screen))
-         SDL_LockSurface(sdl.screen);
-@@ -1064,7 +1064,7 @@
- /*
-     unlock surface
- */
--inline void unlock_screen()
-+void unlock_screen()
- {
-     if (SDL_MUSTLOCK(sdl.screen))
-         SDL_UnlockSurface(sdl.screen);
-@@ -1073,7 +1073,7 @@
- /*
-     flip hardware screens (double buffer)
- */
--inline void flip_screen()
-+void flip_screen()
- {
-     SDL_Flip(sdl.screen);
- }
-@@ -1132,7 +1132,7 @@
- /*
-     get milliseconds since last call
- */
--inline int get_time()
-+int get_time()
- {
-     int ms;
-     cur_time = SDL_GetTicks();
-@@ -1148,7 +1148,7 @@
- /*
-     reset timer
- */
--inline void reset_timer()
-+void reset_timer()
- {
-     last_time = SDL_GetTicks();
- }
-Index: src/sdl.h
-===================================================================
---- src/sdl.h	(revision 163)
-+++ src/sdl.h	(revision 164)
-@@ -41,8 +41,8 @@
- SDL_Surface* load_surf(char *fname, int f);
- SDL_Surface* create_surf(int w, int h, int f);
- void free_surf( SDL_Surface **surf );
--inline void lock_surf(SDL_Surface *sur);
--inline void unlock_surf(SDL_Surface *sur);
-+void lock_surf(SDL_Surface *sur);
-+void unlock_surf(SDL_Surface *sur);
- void blit_surf(void);
- void alpha_blit_surf(int alpha);
- void fill_surf(int c);
-@@ -86,8 +86,8 @@
- Font* load_fixed_font(char *fname, int off, int len, int w);
- void free_font(Font **sfnt);
- int  write_text(Font *sfnt, SDL_Surface *dest, int x, int y, char *str, int alpha);
--inline void lock_font(Font *sfnt);
--inline void unlock_font(Font *sfnt);
-+void lock_font(Font *sfnt);
-+void unlock_font(Font *sfnt);
- SDL_Rect last_write_rect(Font *fnt);
- int  text_width(Font *fnt, char *str);
- 
-@@ -132,14 +132,14 @@
- char** get_mode_names( int *count );
- int  set_video_mode( Video_Mode mode );
- void hardware_cap();
--inline void refresh_screen( int x, int y, int w, int h );
-+void refresh_screen( int x, int y, int w, int h );
- void refresh_rects();
- void add_refresh_rect(int x, int y, int w, int h);
- int  wait_for_key();
- void wait_for_click();
--inline void lock_screen();
--inline void unlock_screen();
--inline void flip_screen();
-+void lock_screen();
-+void unlock_screen();
-+void flip_screen();
- void fade_screen( int type, int ms );
- void take_screenshot( int i );
- 
-@@ -148,8 +148,8 @@
- SDL_Cursor* create_cursor( int width, int height, int hot_x, int hot_y, char *source );
- 
- /* timer */
--inline int get_time();
--inline void reset_timer();
-+int get_time();
-+void reset_timer();
- 
- #ifdef __cplusplus
- };
-Index: src/tools.c
-===================================================================
---- src/tools.c	(revision 163)
-+++ src/tools.c	(revision 164)
-@@ -23,7 +23,7 @@
- #include "ltris.h"
- 
- /* compares to strings and returns true if their first strlen(str1) chars are equal */
--inline int strequal( char *str1, char *str2 )
-+int strequal( char *str1, char *str2 )
- {
-     if ( strlen( str1 ) != strlen( str2 ) ) return 0;
-     return ( !strncmp( str1, str2, strlen( str1 ) ) );
-@@ -30,7 +30,7 @@
- }
- 
- /* set delay to ms milliseconds */
--inline void delay_set( Delay *delay, int ms )
-+void delay_set( Delay *delay, int ms )
- {
-     delay->limit = ms;
-     delay->cur = 0;
-@@ -37,13 +37,13 @@
- }
- 
- /* reset delay ( cur = 0 )*/
--inline void delay_reset( Delay *delay )
-+void delay_reset( Delay *delay )
- {
-     delay->cur = 0;
- }
- 
- /* check if times out and reset */
--inline int delay_timed_out( Delay *delay, int ms )
-+int delay_timed_out( Delay *delay, int ms )
- {
-     delay->cur += ms;
-     if ( delay->cur >= delay->limit ) {
-@@ -56,12 +56,12 @@
- }
- 
- /* set timer so that we have a time out next call of delay_timed_out() */
--inline void delay_force_time_out( Delay *delay )
-+void delay_force_time_out( Delay *delay )
- {
-     delay->cur = delay->limit;
- }
- 
--inline void goto_tile( int *x, int *y, int d )
-+void goto_tile( int *x, int *y, int d )
- {
-     /*  0 -up, clockwise, 5 - left up */
-     switch ( d ) {
-@@ -326,24 +326,24 @@
- the target value until reached when counter_update() is called.
- ====================================================================
- */
--inline void counter_set( Counter *counter, double value )
-+void counter_set( Counter *counter, double value )
- {
-     counter->value = value;
-     counter->approach = value;
- }
--inline void counter_add( Counter *counter, double add )
-+void counter_add( Counter *counter, double add )
- {
-     counter->value += add;
- }
--inline double counter_get_approach( Counter counter )
-+double counter_get_approach( Counter counter )
- {
-     return counter.approach;
- }
--inline double counter_get( Counter counter )
-+double counter_get( Counter counter )
- {
-     return counter.value;
- }
--inline void counter_update( Counter *counter, int ms )
-+void counter_update( Counter *counter, int ms )
- {
-     double change;
-     if ( counter->approach == counter->value ) return;
-Index: src/tools.h
-===================================================================
---- src/tools.h	(revision 163)
-+++ src/tools.h	(revision 164)
-@@ -33,7 +33,7 @@
- #define VEC_DIST( vec1, vec2 ) ( sqrt( ( vec1.x - vec2.x ) * ( vec1.x - vec2.x ) + ( vec1.y - vec2.y ) * ( vec1.y - vec2.y ) ) )
- 
- /* compares to strings and returns true if their first strlen(str1) chars are equal */
--inline int strequal( char *str1, char *str2 );
-+int strequal( char *str1, char *str2 );
- 
- /* delete lines */
- void delete_lines( char **lines, int line_number );
-@@ -45,16 +45,16 @@
- } Delay;
- 
- /* set delay to ms milliseconds */
--inline void delay_set( Delay *delay, int ms );
-+void delay_set( Delay *delay, int ms );
- 
- /* reset delay ( cur = 0 )*/
--inline void delay_reset( Delay *delay );
-+void delay_reset( Delay *delay );
- 
- /* check if time's out ( add ms milliseconds )and reset */
--inline int delay_timed_out( Delay *delay, int ms );
-+int delay_timed_out( Delay *delay, int ms );
- 
- /* set timer so that we have a time out next call of delay_timed_out() */
--inline void delay_force_time_out( Delay *delay );
-+void delay_force_time_out( Delay *delay );
- 
- /* return distance betwteen to map positions */
- int get_dist( int x1, int y1, int x2, int y2 );
diff --git a/nixpkgs/pkgs/games/macopix/default.nix b/nixpkgs/pkgs/games/macopix/default.nix
index 8f226f3cef06..5541b3b9d0fa 100644
--- a/nixpkgs/pkgs/games/macopix/default.nix
+++ b/nixpkgs/pkgs/games/macopix/default.nix
@@ -19,6 +19,11 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: dnd.o:src/main.h:136: multiple definition of
+  #     `MENU_EXT'; main.o:src/main.h:136: first defined here
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   NIX_LDFLAGS = "-lX11";
 
   meta = {
diff --git a/nixpkgs/pkgs/games/mar1d/default.nix b/nixpkgs/pkgs/games/mar1d/default.nix
index 1715a68f5d8a..6b3fe5feb2de 100644
--- a/nixpkgs/pkgs/games/mar1d/default.nix
+++ b/nixpkgs/pkgs/games/mar1d/default.nix
@@ -12,10 +12,10 @@
 
 stdenv.mkDerivation rec {
   pname = "MAR1D";
-  version = "0.3.0";
+  version = "0.3.1";
 
   src = fetchFromGitHub {
-    sha256 = "sha256-/QZH2H0PFCLeweXUE11vimLnJTt86PjnTnHC9vWkKsk=";
+    sha256 = "sha256-c48azBGdnzhEQGUeRJWlNLJhtrYjnpiORuWvowcQK5Y=";
     rev = "v${version}";
     repo = "MAR1D";
     owner = "Radvendii";
diff --git a/nixpkgs/pkgs/games/mars/default.nix b/nixpkgs/pkgs/games/mars/default.nix
index 0fa744677d83..9b715b02ae09 100644
--- a/nixpkgs/pkgs/games/mars/default.nix
+++ b/nixpkgs/pkgs/games/mars/default.nix
@@ -1,27 +1,22 @@
 { lib, stdenv, fetchFromGitHub, cmake, libGLU, libGL, sfml, fribidi, taglib }:
 stdenv.mkDerivation rec {
   pname = "mars";
-  version = "0.7.5";
+  version = "unstable-17.10.2021";
 
   src = fetchFromGitHub {
     owner = "thelaui";
     repo = "M.A.R.S.";
-    rev = "c855d044094a1d92317e38935d81ba938946132e";
-    sha256 = "1r4c5gap1z2zsv4yjd34qriqkxaq4lb4rykapyzkkdf4g36lc3nh";
+    rev = "84664cda094efe6e49d9b1550e4f4f98c33eefa2";
+    sha256 = "sha256-SWLP926SyVTjn+UT1DCaJSo4Ue0RbyzImVnlNJQksS0=";
   };
   nativeBuildInputs = [ cmake ];
   buildInputs = [ libGLU libGL sfml fribidi taglib ];
-  patches = [
-    ./unbind_fix.patch
-    ./fix-gluortho2d.patch
-  ];
   installPhase = ''
     cd ..
-    find -name '*.svn' -exec rm -rf {} \;
     mkdir -p "$out/share/mars/"
     mkdir -p "$out/bin/"
     cp -rv data resources credits.txt license.txt "$out/share/mars/"
-    cp -v mars "$out/bin/mars.bin"
+    cp -v marsshooter "$out/bin/mars.bin"
     cat << EOF > "$out/bin/mars"
     #! ${stdenv.shell}
     cd "$out/share/mars/"
diff --git a/nixpkgs/pkgs/games/mars/fix-gluortho2d.patch b/nixpkgs/pkgs/games/mars/fix-gluortho2d.patch
deleted file mode 100644
index 15a5c07060e2..000000000000
--- a/nixpkgs/pkgs/games/mars/fix-gluortho2d.patch
+++ /dev/null
@@ -1,113 +0,0 @@
-From 33d5affabf8ff84f2c028b9303c6a9e83cc824ad Mon Sep 17 00:00:00 2001
-From: James Cowgill <james410@cowgill.org.uk>
-Date: Sat, 9 May 2015 01:54:14 +0100
-Subject: [PATCH] Remove dependency on GLU - fixes build with SFML 2.3
-
----
- premake4.lua           |  8 ++++----
- src/Shaders/postFX.cpp |  2 +-
- src/System/window.cpp  | 12 ++++++------
- 3 files changed, 11 insertions(+), 11 deletions(-)
-
-diff --git a/premake4.lua b/premake4.lua
-index 023dddd..5af4495 100755
---- a/premake4.lua
-+++ b/premake4.lua
-@@ -11,11 +11,11 @@ project "mars"
-     defines { "NDEBUG" }

-     flags   { "Optimize" }

-     if os.get() == "windows" then

--      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "glu32", "opengl32", "fribidi-0", "tag" }

-+      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "opengl32", "fribidi-0", "tag" }

-     elseif os.get() == "macosx" then

-       links { "sfml-graphics.framework", "sfml-audio.framework", "sfml-system.framework", "sfml-window.framework", "opengl.framework", "fribidi", "tag" }

-     else

--      links { "GLU", "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "fribidi", "tag" }

-+      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "fribidi", "tag" }

-       libdirs { "/usr/lib", "/usr/local/lib" }

-     end

-     

-@@ -23,10 +23,10 @@ project "mars"
-     defines { "_DEBUG", "DEBUG" }

-     flags   { "Symbols" }

-     if os.get() == "windows" then

--      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "glu32", "opengl32", "fribidi-0", "tag" }

-+      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "opengl32", "fribidi-0", "tag" }

-     elseif os.get() == "macosx" then

-       links { "sfml-graphics.framework", "sfml-audio.framework", "sfml-system.framework", "sfml-window.framework", "opengl.framework", "fribidi", "tag" }

-     else

--      links { "GLU", "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "fribidi", "tag" }

-+      links { "sfml-graphics", "sfml-audio", "sfml-system", "sfml-window", "fribidi", "tag" }

-       libdirs { "/usr/lib", "/usr/local/lib" }

-     end

-diff --git a/src/Shaders/postFX.cpp b/src/Shaders/postFX.cpp
-index 987f411..f767a47 100644
---- a/src/Shaders/postFX.cpp
-+++ b/src/Shaders/postFX.cpp
-@@ -78,7 +78,7 @@ namespace postFX {
-             postFX_.loadFromFile(settings::C_dataPath + "shaders/bump.frag", sf::Shader::Fragment);
-             bumpMap_.create(SPACE_X_RESOLUTION*0.5f, SPACE_Y_RESOLUTION*0.5f);
-             glViewport(0,0,SPACE_X_RESOLUTION*0.5f,SPACE_Y_RESOLUTION*0.5f);
--            gluOrtho2D(0, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0);
-+            glOrtho(0, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0, -1, 1);
-             glEnable(GL_BLEND);
-             glMatrixMode(GL_MODELVIEW);
-             postFX_.setParameter("BumpMap", bumpMap_.getTexture());
-diff --git a/src/System/window.cpp b/src/System/window.cpp
-index e9a099a..8e12dcc 100644
---- a/src/System/window.cpp
-+++ b/src/System/window.cpp
-@@ -222,7 +222,7 @@ namespace window {
-         glLoadIdentity();
- 
-         // Setup translation (according to left-upper corner)
--        gluOrtho2D(0.f, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0.f);
-+        glOrtho(0.f, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0.f, -1, 1);
- 
-         // probably improves performance...
-         glDisable(GL_LIGHTING);
-@@ -247,7 +247,7 @@ namespace window {
- 
-         glMatrixMode(GL_PROJECTION);
-         glLoadIdentity();
--        gluOrtho2D(0.f, viewPort_.x_, viewPort_.y_, 0.f);
-+        glOrtho(0.f, viewPort_.x_, viewPort_.y_, 0.f, -1, 1);
-         glMatrixMode(GL_MODELVIEW);
-         glLoadIdentity();
- 
-@@ -255,7 +255,7 @@ namespace window {
- 
-         glMatrixMode(GL_PROJECTION);
-         glLoadIdentity();
--        gluOrtho2D(0.f, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0.f);
-+        glOrtho(0.f, SPACE_X_RESOLUTION, SPACE_Y_RESOLUTION, 0.f, -1, 1);
-         glMatrixMode(GL_MODELVIEW);
-         glLoadIdentity();
-     }
-@@ -270,7 +270,7 @@ namespace window {
-             glLoadIdentity();
-             setViewPort();
- 
--            gluOrtho2D(0.f, viewPort_.x_, viewPort_.y_, 0.f);
-+            glOrtho(0.f, viewPort_.x_, viewPort_.y_, 0.f, -1, 1);
- 
-             glMatrixMode(GL_MODELVIEW);
-             glLoadIdentity();
-@@ -284,7 +284,7 @@ namespace window {
-             glLoadIdentity();
-             setViewPort();
- 
--            gluOrtho2D(0.f, viewPort_.x_, viewPort_.y_, 0.f);
-+            glOrtho(0.f, viewPort_.x_, viewPort_.y_, 0.f, -1, 1);
- 
-             glMatrixMode(GL_MODELVIEW);
-             glLoadIdentity();
-@@ -294,7 +294,7 @@ namespace window {
-         else {
-             glMatrixMode(GL_PROJECTION);
-             glLoadIdentity();
--            gluOrtho2D(0.f, viewPort_.x_, viewPort_.y_, 0.f);
-+            glOrtho(0.f, viewPort_.x_, viewPort_.y_, 0.f, -1, 1);
-             glMatrixMode(GL_MODELVIEW);
-             glLoadIdentity();
-         }
diff --git a/nixpkgs/pkgs/games/mars/unbind_fix.patch b/nixpkgs/pkgs/games/mars/unbind_fix.patch
deleted file mode 100644
index 2aef6eb5cf66..000000000000
--- a/nixpkgs/pkgs/games/mars/unbind_fix.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff --git a/src/System/window.cpp b/src/System/window.cpp
-index e9a099a..e3f6de9 100644
---- a/src/System/window.cpp
-+++ b/src/System/window.cpp
-@@ -308,12 +308,12 @@ namespace window {
-         glEnable(GL_TEXTURE_2D);
- 
-         if (shader)
--            shader->bind();
-+            sf::Shader::bind(shader);
- 
-         window_.draw(toBeDrawn, states);
- 
-         if (shader)
--            shader->unbind();
-+            sf::Shader::bind(NULL);
- 
-         window_.popGLStates();
-         glPopMatrix();
diff --git a/nixpkgs/pkgs/games/megaglest/default.nix b/nixpkgs/pkgs/games/megaglest/default.nix
index 30383e5f4067..6a21a74f70b4 100644
--- a/nixpkgs/pkgs/games/megaglest/default.nix
+++ b/nixpkgs/pkgs/games/megaglest/default.nix
@@ -1,7 +1,7 @@
 { lib, stdenv, cmake, pkg-config, git, curl, SDL2, xercesc, openal, lua, libvlc
 , libjpeg, wxGTK, cppunit, ftgl, glew, libogg, libvorbis, buildEnv, libpng
 , fontconfig, freetype, xorg, makeWrapper, bash, which, gnome, libGLU, glib
-, fetchFromGitHub
+, fetchFromGitHub, fetchpatch
 }:
 let
   version = "3.13.0";
@@ -28,6 +28,15 @@ stdenv.mkDerivation {
     sha256 = "0fb58a706nic14ss89zrigphvdiwy5s9dwvhscvvgrfvjpahpcws";
   };
 
+  patches = [
+    # Pull upstream fix for -fno-common toolchains
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/MegaGlest/megaglest-source/commit/5a3520540276a6fd06f7c88e571b6462978e3eab.patch";
+      sha256 = "0y554kjw56dikq87vs709pmq97hdx9hvqsk27f81v4g90m3b3qhi";
+    })
+  ];
+
   nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [ git curl SDL2 xercesc openal lua libpng libjpeg libvlc wxGTK
     glib cppunit fontconfig freetype ftgl glew libogg libvorbis makeWrapper libGLU ];
diff --git a/nixpkgs/pkgs/games/meritous/default.nix b/nixpkgs/pkgs/games/meritous/default.nix
index e7dd1bee70c9..c7631f2370db 100644
--- a/nixpkgs/pkgs/games/meritous/default.nix
+++ b/nixpkgs/pkgs/games/meritous/default.nix
@@ -14,7 +14,7 @@ stdenv.mkDerivation {
   prePatch = ''
     substituteInPlace Makefile \
       --replace "CPPFLAGS +=" "CPPFLAGS += -DSAVES_IN_HOME -DDATADIR=\\\"$out/share/meritous\\\"" \
-      --replace sld-config ${SDL.dev}/bin/sdl-config
+      --replace sld-config ${lib.getDev SDL}/bin/sdl-config
     substituteInPlace src/audio.c \
       --replace "filename[64]" "filename[256]"
   '';
diff --git a/nixpkgs/pkgs/games/mindustry/default.nix b/nixpkgs/pkgs/games/mindustry/default.nix
index 82df3710c577..680d341d335b 100644
--- a/nixpkgs/pkgs/games/mindustry/default.nix
+++ b/nixpkgs/pkgs/games/mindustry/default.nix
@@ -13,6 +13,7 @@
 , stb
 , ant
 , alsa-lib
+, alsa-plugins
 , glew
 
 # Make the build version easily overridable.
@@ -127,15 +128,6 @@ stdenv.mkDerivation rec {
     rm Arc/backends/backend-sdl/libs/linux64/libsdl-arc*.so
   '' + cleanupMindustrySrc;
 
-  # Propagate glew to prevent it from being cleaned up.
-  # Since a jar is a compressed archive, nix can't figure out that the dependency is actually in there,
-  # and will assume that it's not actually needed.
-  # This can cause issues.
-  # See https://github.com/NixOS/nixpkgs/issues/109798.
-  propagatedBuildInputs = lib.optionals enableClient [
-    glew.out
-  ];
-
   buildInputs = lib.optionals enableClient [
     SDL2
     glew
@@ -180,7 +172,19 @@ stdenv.mkDerivation rec {
     install -Dm644 desktop/build/libs/Mindustry.jar $out/share/mindustry.jar
     mkdir -p $out/bin
     makeWrapper ${jdk}/bin/java $out/bin/mindustry \
-      --add-flags "-jar $out/share/mindustry.jar"
+      --add-flags "-jar $out/share/mindustry.jar" \
+      --set ALSA_PLUGIN_DIR ${alsa-plugins}/lib/alsa-lib/
+
+    # Retain runtime depends to prevent them from being cleaned up.
+    # Since a jar is a compressed archive, nix can't figure out that the dependency is actually in there,
+    # and will assume that it's not actually needed.
+    # This can cause issues.
+    # See https://github.com/NixOS/nixpkgs/issues/109798.
+    echo "# Retained runtime dependencies: " >> $out/bin/mindustry
+    for dep in ${SDL2.out} ${alsa-lib.out} ${glew.out}; do
+      echo "# $dep" >> $out/bin/mindustry
+    done
+
     install -Dm644 core/assets/icons/icon_64.png $out/share/icons/hicolor/64x64/apps/mindustry.png
   '' + optionalString enableServer ''
     install -Dm644 server/build/libs/server-release.jar $out/share/mindustry-server.jar
@@ -195,8 +199,12 @@ stdenv.mkDerivation rec {
     homepage = "https://mindustrygame.github.io/";
     downloadPage = "https://github.com/Anuken/Mindustry/releases";
     description = "A sandbox tower defense game";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
     license = licenses.gpl3Plus;
-    maintainers = with maintainers; [ fgaz petabyteboy ];
+    maintainers = with maintainers; [ fgaz ];
     platforms = platforms.x86_64;
     # Hash mismatch on darwin:
     # https://github.com/NixOS/nixpkgs/pull/105590#issuecomment-737120293
diff --git a/nixpkgs/pkgs/games/minecraft-servers/derivation.nix b/nixpkgs/pkgs/games/minecraft-servers/derivation.nix
index eda7da943ca5..e5f11f71f211 100644
--- a/nixpkgs/pkgs/games/minecraft-servers/derivation.nix
+++ b/nixpkgs/pkgs/games/minecraft-servers/derivation.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation {
   meta = with lib; {
     description = "Minecraft Server";
     homepage = "https://minecraft.net";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.unfreeRedistributable;
     platforms = platforms.unix;
     maintainers = with maintainers; [ thoughtpolice tomberek costrouc jyooru ];
diff --git a/nixpkgs/pkgs/games/minecraft-servers/versions.json b/nixpkgs/pkgs/games/minecraft-servers/versions.json
index af1b032bd781..8dce87bb301d 100644
--- a/nixpkgs/pkgs/games/minecraft-servers/versions.json
+++ b/nixpkgs/pkgs/games/minecraft-servers/versions.json
@@ -1,4 +1,10 @@
 {
+  "1.19": {
+    "url": "https://piston-data.mojang.com/v1/objects/f69c284232d7c7580bd89a5a4931c3581eae1378/server.jar",
+    "sha1": "f69c284232d7c7580bd89a5a4931c3581eae1378",
+    "version": "1.19.2",
+    "javaVersion": 17
+  },
   "1.18": {
     "url": "https://launcher.mojang.com/v1/objects/c8f83c5655308435b3dcf03c06d9fe8740a77469/server.jar",
     "sha1": "c8f83c5655308435b3dcf03c06d9fe8740a77469",
@@ -81,24 +87,24 @@
     "url": "https://launcher.mojang.com/v1/objects/f9ae3f651319151ce99a0bfad6b34fa16eb6775f/server.jar",
     "sha1": "f9ae3f651319151ce99a0bfad6b34fa16eb6775f",
     "version": "1.5.2",
-    "javaVersion": null
+    "javaVersion": 8
   },
   "1.4": {
     "url": "https://launcher.mojang.com/v1/objects/2f0ec8efddd2f2c674c77be9ddb370b727dec676/server.jar",
     "sha1": "2f0ec8efddd2f2c674c77be9ddb370b727dec676",
     "version": "1.4.7",
-    "javaVersion": null
+    "javaVersion": 8
   },
   "1.3": {
     "url": "https://launcher.mojang.com/v1/objects/3de2ae6c488135596e073a9589842800c9f53bfe/server.jar",
     "sha1": "3de2ae6c488135596e073a9589842800c9f53bfe",
     "version": "1.3.2",
-    "javaVersion": null
+    "javaVersion": 8
   },
   "1.2": {
     "url": "https://launcher.mojang.com/v1/objects/d8321edc9470e56b8ad5c67bbd16beba25843336/server.jar",
     "sha1": "d8321edc9470e56b8ad5c67bbd16beba25843336",
     "version": "1.2.5",
-    "javaVersion": null
+    "javaVersion": 8
   }
 }
diff --git a/nixpkgs/pkgs/games/minecraft/default.nix b/nixpkgs/pkgs/games/minecraft/default.nix
index 08104310faa3..a8e883acae37 100644
--- a/nixpkgs/pkgs/games/minecraft/default.nix
+++ b/nixpkgs/pkgs/games/minecraft/default.nix
@@ -139,7 +139,7 @@ stdenv.mkDerivation rec {
       --prefix LD_LIBRARY_PATH : ${envLibPath} \
       --prefix PATH : ${lib.makeBinPath [ jre ]} \
       --set JAVA_HOME ${lib.getBin jre} \
-      --run "cd /tmp" \
+      --chdir /tmp \
       "''${gappsWrapperArgs[@]}"
   '';
 
@@ -149,6 +149,7 @@ stdenv.mkDerivation rec {
     description = "Official launcher for Minecraft, a sandbox-building game";
     homepage = "https://minecraft.net";
     maintainers = with maintainers; [ cpages ryantm infinisil ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
     license = licenses.unfree;
     platforms = [ "x86_64-linux" ];
   };
diff --git a/nixpkgs/pkgs/games/minetest/default.nix b/nixpkgs/pkgs/games/minetest/default.nix
index e607fbc71134..36ab2bfe58d3 100644
--- a/nixpkgs/pkgs/games/minetest/default.nix
+++ b/nixpkgs/pkgs/games/minetest/default.nix
@@ -1,9 +1,42 @@
-{ lib, stdenv, fetchFromGitHub, cmake, irrlicht, libpng, bzip2, curl, libogg, jsoncpp
-, libjpeg, libXxf86vm, libGLU, libGL, openal, libvorbis, sqlite, luajit
-, freetype, gettext, doxygen, ncurses, graphviz, xorg, gmp, libspatialindex
-, leveldb, postgresql, hiredis, libiconv, zlib, libXrandr, libX11, ninja, prometheus-cpp
-, OpenGL, OpenAL ? openal, Carbon, Cocoa
-, Kernel
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, irrlichtmt
+, coreutils
+, libpng
+, bzip2
+, curl
+, libogg
+, jsoncpp
+, libjpeg
+, libGLU
+, openal
+, libvorbis
+, sqlite
+, luajit
+, freetype
+, gettext
+, doxygen
+, ncurses
+, graphviz
+, xorg
+, gmp
+, libspatialindex
+, leveldb
+, postgresql
+, hiredis
+, libiconv
+, zlib
+, libXrandr
+, libX11
+, ninja
+, prometheus-cpp
+, OpenGL
+, OpenAL ? openal
+, Carbon
+, Cocoa
+, withTouchSupport ? false
 }:
 
 with lib;
@@ -11,21 +44,7 @@ with lib;
 let
   boolToCMake = b: if b then "ON" else "OFF";
 
-  irrlichtMt = stdenv.mkDerivation rec {
-    pname = "irrlichtMt";
-    version = "1.9.0mt4";
-    src = fetchFromGitHub {
-      owner = "minetest";
-      repo = "irrlicht";
-      rev = version;
-      sha256 = "sha256-YlXn9LrfGkjdb8+zQGDgrInolUYj9nVSF2AXWFpEEkw=";
-    };
-    nativeBuildInputs = [ cmake ];
-    buildInputs = [ zlib libjpeg libpng libGLU libGL libXrandr libX11 libXxf86vm ]
-    ++ lib.optionals stdenv.isDarwin [ Cocoa Kernel ];
-    outputs = [ "out" "dev" ];
-    meta = irrlicht.meta;
-  };
+  irrlichtmtInput = irrlichtmt.override { inherit withTouchSupport; };
 
   generic = { version, rev ? version, sha256, dataRev ? version, dataSha256, buildClient ? true, buildServer ? false }: let
     sources = {
@@ -54,7 +73,6 @@ let
       "-DENABLE_GETTEXT=1"
       "-DENABLE_SPATIAL=1"
       "-DENABLE_SYSTEM_JSONCPP=1"
-      "-DIRRLICHT_INCLUDE_DIR=${irrlichtMt.dev}/include/irrlicht"
 
       # Remove when https://github.com/NixOS/nixpkgs/issues/144170 is fixed
       "-DCMAKE_INSTALL_BINDIR=bin"
@@ -64,10 +82,10 @@ let
       "-DCMAKE_INSTALL_MANDIR=share/man"
       "-DCMAKE_INSTALL_LOCALEDIR=share/locale"
 
-    ] ++ optionals buildClient [
-      "-DOpenGL_GL_PREFERENCE=GLVND"
     ] ++ optionals buildServer [
       "-DENABLE_PROMETHEUS=1"
+    ] ++ optionals withTouchSupport [
+      "-DENABLE_TOUCH=TRUE"
     ];
 
     NIX_CFLAGS_COMPILE = "-DluaL_reg=luaL_Reg"; # needed since luajit-2.1.0-beta3
@@ -75,19 +93,24 @@ let
     nativeBuildInputs = [ cmake doxygen graphviz ninja ];
 
     buildInputs = [
-      irrlichtMt luajit jsoncpp gettext freetype sqlite curl bzip2 ncurses
+      irrlichtmtInput luajit jsoncpp gettext freetype sqlite curl bzip2 ncurses
       gmp libspatialindex
     ] ++ optionals stdenv.isDarwin [
       libiconv OpenGL OpenAL Carbon Cocoa
     ] ++ optionals buildClient [
-      libpng libjpeg libGLU libGL openal libogg libvorbis xorg.libX11 libXxf86vm
+      libpng libjpeg libGLU openal libogg libvorbis xorg.libX11
     ] ++ optionals buildServer [
       leveldb postgresql hiredis prometheus-cpp
     ];
 
+    postPatch = ''
+      substituteInPlace src/filesys.cpp --replace "/bin/rm" "${coreutils}/bin/rm"
+    '';
+
     postInstall = ''
       mkdir -pv $out/share/minetest/games/minetest_game/
       cp -rv ${sources.data}/* $out/share/minetest/games/minetest_game/
+      patchShebangs $out
     '';
 
     meta = with lib; {
@@ -104,12 +127,14 @@ let
   };
 
   v5 = {
-    version = "5.5.0";
-    sha256 = "sha256-V+ggqvZibSQrJbrtNCEkmRYHhgSKTQsdBh3c8+t6WeA=";
-    dataSha256 = "sha256-6ZS3EET3nm09eL0czCGadwzon35/EBfAg2KjPX3ZP/0=";
+    version = "5.6.0";
+    sha256 = "sha256-wcbYcVHs4L0etOwUBjKvzsmZtnpOxpFgLV8nx3UfJQI=";
+    dataSha256 = "sha256-TVaDHYstFEuT0nBExwLE1PtM1CZh71t9CRxC9rEYTd4=";
   };
 
+  mkClient = version: generic (version // { buildClient = true; buildServer = false; });
+  mkServer = version: generic (version // { buildClient = false; buildServer = true; });
 in {
-  minetestclient_5 = generic (v5 // { buildClient = true; buildServer = false; });
-  minetestserver_5 = generic (v5 // { buildClient = false; buildServer = true; });
+  minetestclient_5 = mkClient v5;
+  minetestserver_5 = mkServer v5;
 }
diff --git a/nixpkgs/pkgs/games/mudlet/default.nix b/nixpkgs/pkgs/games/mudlet/default.nix
index 46ae45b2202b..b2696d727887 100644
--- a/nixpkgs/pkgs/games/mudlet/default.nix
+++ b/nixpkgs/pkgs/games/mudlet/default.nix
@@ -62,6 +62,11 @@ stdenv.mkDerivation rec {
     yajl
   ];
 
+  cmakeFlags = [
+    # RPATH of binary /nix/store/.../bin/... contains a forbidden reference to /build/
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+  ];
+
   WITH_FONTS = "NO";
   WITH_UPDATER = "NO";
 
@@ -85,7 +90,7 @@ stdenv.mkDerivation rec {
       --set LUA_CPATH "${luaEnv}/lib/lua/${lua.luaversion}/?.so" \
       --prefix LUA_PATH : "$NIX_LUA_PATH" \
       --prefix LD_LIBRARY_PATH : "${libsForQt5.qtkeychain}/lib/" \
-      --run "cd $out";
+      --chdir "$out";
 
     runHook postInstall
   '';
diff --git a/nixpkgs/pkgs/games/nanosaur/default.nix b/nixpkgs/pkgs/games/nanosaur/default.nix
index d5ebee755da6..0d5ea528a92d 100644
--- a/nixpkgs/pkgs/games/nanosaur/default.nix
+++ b/nixpkgs/pkgs/games/nanosaur/default.nix
@@ -12,9 +12,9 @@ stdenv.mkDerivation rec {
     fetchSubmodules = true;
   };
 
+  nativeBuildInputs = [ cmake ];
   buildInputs = [
     SDL2
-    cmake
     makeWrapper
   ];
 
@@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
 
   installPhase = ''
     mv build $out
-    makeWrapper $out/Nanosaur $out/bin/Nanosaur --run "cd $out"
+    makeWrapper $out/Nanosaur $out/bin/Nanosaur --chdir "$out"
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/games/nethack/default.nix b/nixpkgs/pkgs/games/nethack/default.nix
index 2b29bddad93c..f6de3d57c130 100644
--- a/nixpkgs/pkgs/games/nethack/default.nix
+++ b/nixpkgs/pkgs/games/nethack/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchurl, coreutils, ncurses, gzip, flex, bison
+{ stdenv, lib, fetchurl, coreutils, ncurses, gzip, flex, bison, fetchpatch
 , less
 , buildPackages
 , x11Mode ? false, qtMode ? false, libXaw, libXext, libXpm, bdftopcf, mkfontdir, pkg-config, qt5
@@ -24,6 +24,15 @@ in stdenv.mkDerivation rec {
          else if qtMode then "nethack-qt"
          else "nethack";
 
+  patches = [
+    # Don't unset `__warn_unused_result__`, breaks on glibc-2.34
+    (fetchpatch {
+      url = "https://github.com/NetHack/NetHack/commit/81d73ce417dda6a98e2e918e06922e68b67c53f7.patch";
+      sha256 = "sha256-PX9XtJTEE3K1yg/IwIzEIT+EZWi02gU+9msrsG9ZWQY=";
+      revert = true;
+    })
+  ];
+
   src = fetchurl {
     url = "https://nethack.org/download/${version}/nethack-${lib.replaceStrings ["."] [""] version}-src.tgz";
     sha256 = "1liyckjp34j354qnxc1zn9730lh1p2dabrg1hap24z6xnqx0rpng";
diff --git a/nixpkgs/pkgs/games/neverball/default.nix b/nixpkgs/pkgs/games/neverball/default.nix
index ba1d403207a9..5e8e3f41c784 100644
--- a/nixpkgs/pkgs/games/neverball/default.nix
+++ b/nixpkgs/pkgs/games/neverball/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, SDL2, libGL, libpng, libjpeg, SDL2_ttf, libvorbis, gettext
+{ lib, stdenv, fetchurl, fetchpatch, SDL2, libGL, libpng, libjpeg, SDL2_ttf, libvorbis, gettext
 , physfs }:
 
 stdenv.mkDerivation rec {
@@ -8,12 +8,21 @@ stdenv.mkDerivation rec {
     url = "https://neverball.org/neverball-${version}.tar.gz";
     sha256 = "184gm36c6p6vaa6gwrfzmfh86klhnb03pl40ahsjsvprlk667zkk";
   };
+  patches = [
+    # Pull upstream fix for -fno-common toolchains
+    #   https://github.com/Neverball/neverball/pull/198
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/Neverball/neverball/commit/a42492b8db06934c7a794630db92e3ff6ebaadaa.patch";
+      sha256 = "0sqyxfwpl4xxra8iz87j5rxzwani16xra2xl4l5z61shvq30308h";
+    })
+  ];
 
   buildInputs = [ libpng SDL2 libGL libjpeg SDL2_ttf libvorbis gettext physfs ];
 
   dontPatchELF = true;
 
-  patchPhase = ''
+  postPatch = ''
     sed -i -e 's@\./data@'$out/share/neverball/data@ share/base_config.h Makefile
     sed -i -e 's@\./locale@'$out/share/neverball/locale@ share/base_config.h Makefile
     sed -i -e 's@-lvorbisfile@-lvorbisfile -lX11 -lgcc_s@' Makefile
diff --git a/nixpkgs/pkgs/games/npush/default.nix b/nixpkgs/pkgs/games/npush/default.nix
index d4124557f6e6..25748a9983c8 100644
--- a/nixpkgs/pkgs/games/npush/default.nix
+++ b/nixpkgs/pkgs/games/npush/default.nix
@@ -38,6 +38,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     homepage = "http://npush.sourceforge.net/";
     description = "A Sokoban-like game";
     license = licenses.gpl2Plus;
diff --git a/nixpkgs/pkgs/games/oh-my-git/default.nix b/nixpkgs/pkgs/games/oh-my-git/default.nix
index 57fbad34057b..cd4fd216eaa6 100644
--- a/nixpkgs/pkgs/games/oh-my-git/default.nix
+++ b/nixpkgs/pkgs/games/oh-my-git/default.nix
@@ -19,19 +19,20 @@
 , libXrender
 , libglvnd
 , libpulseaudio
+, perl
 , zlib
 , udev # for libudev
 }:
 
 stdenv.mkDerivation rec {
   pname = "oh-my-git";
-  version = "0.6.4";
+  version = "0.6.5";
 
   src = fetchFromGitHub {
     owner = "git-learning-game";
     repo = "oh-my-git";
     rev = version;
-    sha256 = "sha256-GQLHyBUXF+yqEZ/LYutAn6TBCXFX8ViOaERQEm2J6CY=";
+    sha256 = "sha256-XqxliMVU55D5JSt7Yo5btvZnnTlagSukyhXv6Akgklo=";
   };
 
   nativeBuildInputs = [
@@ -54,6 +55,7 @@ stdenv.mkDerivation rec {
     libXrender
     libglvnd
     libpulseaudio
+    perl
     zlib
     udev
   ];
@@ -70,6 +72,13 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  # patch shebangs so that e.g. the fake-editor script works:
+  # error: /usr/bin/env 'perl': No such file or directory
+  # error: There was a problem with the editor
+  postPatch = ''
+    patchShebangs scripts
+  '';
+
   buildPhase = ''
     runHook preBuild
 
diff --git a/nixpkgs/pkgs/games/onscripter-en/default.nix b/nixpkgs/pkgs/games/onscripter-en/default.nix
index 82de61e41893..a1a2d4ed7d9f 100644
--- a/nixpkgs/pkgs/games/onscripter-en/default.nix
+++ b/nixpkgs/pkgs/games/onscripter-en/default.nix
@@ -27,6 +27,7 @@ stdenv.mkDerivation {
   '';
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     description = "Japanese visual novel scripting engine";
     homepage = "http://unclemion.com/onscripter/";
     license = licenses.gpl2;
diff --git a/nixpkgs/pkgs/games/opendungeons/default.nix b/nixpkgs/pkgs/games/opendungeons/default.nix
index 734be8e999ae..9afcbd898785 100644
--- a/nixpkgs/pkgs/games/opendungeons/default.nix
+++ b/nixpkgs/pkgs/games/opendungeons/default.nix
@@ -11,7 +11,10 @@ stdenv.mkDerivation rec {
     sha256 = "0xf7gkpy8ll1h59wyaljf0hr8prg7p4ixz80mxqwcnm9cglpgn63";
   };
 
-  patches = [ ./cmakepaths.patch ];
+  patches = [
+    ./cmakepaths.patch
+    ./fix_link_date_time.patch
+  ];
 
   nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [ ogre cegui boost sfml openal ois ];
diff --git a/nixpkgs/pkgs/games/opendungeons/fix_link_date_time.patch b/nixpkgs/pkgs/games/opendungeons/fix_link_date_time.patch
new file mode 100644
index 000000000000..884aa9901ba7
--- /dev/null
+++ b/nixpkgs/pkgs/games/opendungeons/fix_link_date_time.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f8ff3c2..689c463 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -538,7 +538,7 @@ endif()
+ #This has to cover the versions not already known by CMake
+ set(Boost_ADDITIONAL_VERSIONS 1.47 1.47.0 1.47.1 1.55.0)
+ 
+-set(OD_BOOST_COMPONENTS system filesystem locale program_options thread)
++set(OD_BOOST_COMPONENTS system date_time filesystem locale program_options thread)
+ 
+ if(BUILD_TESTING AND OD_BUILD_TESTING)
+     set(OD_BOOST_COMPONENTS ${OD_BOOST_COMPONENTS} unit_test_framework)
diff --git a/nixpkgs/pkgs/games/openjk/default.nix b/nixpkgs/pkgs/games/openjk/default.nix
index d2844809eea8..092f442669a6 100644
--- a/nixpkgs/pkgs/games/openjk/default.nix
+++ b/nixpkgs/pkgs/games/openjk/default.nix
@@ -19,15 +19,24 @@ let
     genericName = "Jedi Academy";
     categories = [ "Game" ];
   };
+  josp = makeDesktopItem rec {
+    name = "josp";
+    exec = name;
+    icon = "OpenJK_Icon_128";
+    comment = "Open Source Jedi Outcast game released by Raven Software";
+    desktopName = "Jedi Outcast (Single Player)";
+    genericName = "Jedi Outcast";
+    categories = [ "Game" ];
+  };
 in stdenv.mkDerivation {
   pname = "OpenJK";
-  version = "2020-07-03";
+  version = "unstable-2022-01-30";
 
   src = fetchFromGitHub {
     owner = "JACoders";
     repo = "OpenJK";
-    rev = "0a336ce4dffe6505e3f754b59732402a1db95752";
-    sha256 = "1xagbz42hi3ivs208mnay2dbgh90pmwwbar2p1yfhj3zl3cghcs8";
+    rev = "235fb9e1a9c4537a603b2e54e444327d20d198a3";
+    sha256 = "sha256-DqP6wnu5sE7lQJGEdsEPOc6FIaJjqxt5ANKZ5eiabC4=";
   };
 
   dontAddPrefix = true;
@@ -35,22 +44,39 @@ in stdenv.mkDerivation {
   nativeBuildInputs = [ makeWrapper cmake ];
   buildInputs = [ libjpeg zlib libpng libGL SDL2 ];
 
+  outputs = [ "out" "openjo" "openja" ];
+
   # move from $out/JediAcademy to $out/opt/JediAcademy
   preConfigure = ''
     cmakeFlagsArray=("-DCMAKE_INSTALL_PREFIX=$out/opt")
   '';
+  cmakeFlags = ["-DBuildJK2SPEngine:BOOL=ON"
+                "-DBuildJK2SPGame:BOOL=ON"
+                "-DBuildJK2SPRdVanilla:BOOL=ON"];
 
   postInstall = ''
-    mkdir -p $out/bin $out/share/applications $out/share/icons/hicolor/128x128/apps
-    prefix=$out/opt/JediAcademy
+    mkdir -p $out/bin $openja/bin $openjo/bin
+    mkdir -p $openja/share/applications $openjo/share/applications
+    mkdir -p $openja/share/icons/hicolor/128x128/apps $openjo/share/icons/hicolor/128x128/apps
+    mkdir -p $openja/opt $openjo/opt
+    mv $out/opt/JediAcademy $openja/opt/
+    mv $out/opt/JediOutcast $openjo/opt/
+    jaPrefix=$openja/opt/JediAcademy
+    joPrefix=$openjo/opt/JediOutcast
 
-    makeWrapper $prefix/openjk.* $out/bin/jamp --run "cd $prefix"
-    makeWrapper $prefix/openjk_sp.* $out/bin/jasp --run "cd $prefix"
-    makeWrapper $prefix/openjkded.* $out/bin/openjkded --run "cd $prefix"
+    makeWrapper $jaPrefix/openjk.* $openja/bin/jamp --chdir "$jaPrefix"
+    makeWrapper $jaPrefix/openjk_sp.* $openja/bin/jasp --chdir "$jaPrefix"
+    makeWrapper $jaPrefix/openjkded.* $openja/bin/openjkded --chdir "$jaPrefix"
+    makeWrapper $joPrefix/openjo_sp.* $openjo/bin/josp --chdir "$joPrefix"
 
-    cp $src/shared/icons/OpenJK_Icon_128.png $out/share/icons/hicolor/128x128/apps
-    ln -s ${jamp}/share/applications/* $out/share/applications
-    ln -s ${jasp}/share/applications/* $out/share/applications
+    cp $src/shared/icons/OpenJK_Icon_128.png $openjo/share/icons/hicolor/128x128/apps
+    cp $src/shared/icons/OpenJK_Icon_128.png $openja/share/icons/hicolor/128x128/apps
+    ln -s ${jamp}/share/applications/* $openja/share/applications
+    ln -s ${jasp}/share/applications/* $openja/share/applications
+    ln -s ${josp}/share/applications/* $openjo/share/applications
+    ln -s $openja/bin/* $out/bin
+    ln -s $openjo/bin/* $out/bin
+    rm -rf $out/opt
   '';
 
   meta = with lib; {
@@ -58,6 +84,6 @@ in stdenv.mkDerivation {
     homepage = "https://github.com/JACoders/OpenJK";
     license = licenses.gpl2;
     platforms = platforms.linux;
-    maintainers = with maintainers; [ ];
+    maintainers = with maintainers; [ tgunnoe ];
   };
 }
diff --git a/nixpkgs/pkgs/games/openmw/default.nix b/nixpkgs/pkgs/games/openmw/default.nix
index edc8147a2b77..389f59f91a6a 100644
--- a/nixpkgs/pkgs/games/openmw/default.nix
+++ b/nixpkgs/pkgs/games/openmw/default.nix
@@ -1,6 +1,7 @@
 { lib
 , mkDerivation
 , fetchFromGitHub
+, fetchpatch
 , cmake
 , pkg-config
 , wrapQtAppsHook
@@ -55,6 +56,13 @@ mkDerivation rec {
     sha256 = "sha256-Xq9hDUTCQr79Zzjk0CsiXclVTHK6nrSowukIQqVdrKY=";
   };
 
+  patches = [
+    (fetchpatch {
+      url = "https://gitlab.com/OpenMW/openmw/-/merge_requests/1239.diff";
+      sha256 = "sha256-RhbIGeE6GyqnipisiMTwWjcFnIiR055hUPL8IkjPgZw=";
+    })
+  ];
+
   nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
 
   buildInputs = [
diff --git a/nixpkgs/pkgs/games/openmw/tes3mp.nix b/nixpkgs/pkgs/games/openmw/tes3mp.nix
index 37ad603d7cf5..0f91a3c0028b 100644
--- a/nixpkgs/pkgs/games/openmw/tes3mp.nix
+++ b/nixpkgs/pkgs/games/openmw/tes3mp.nix
@@ -87,7 +87,7 @@ let
     '';
 
     # https://github.com/TES3MP/openmw-tes3mp/issues/552
-    patches = [ ./tes3mp.patch ];
+    patches = oldAttrs.patches ++ [ ./tes3mp.patch ];
 
     NIX_CFLAGS_COMPILE = "-fpermissive";
 
@@ -108,6 +108,7 @@ let
       license = licenses.gpl3Only;
       maintainers = with maintainers; [ peterhoeg ];
       platforms = [ "x86_64-linux" "i686-linux" ];
+      broken = true;
     };
   });
 
@@ -131,11 +132,11 @@ symlinkJoin rec {
     dir=\''${XDG_CONFIG_HOME:-\$HOME/.config}/openmw
 
     makeWrapper ${unwrapped}/libexec/tes3mp-browser $out/bin/tes3mp-browser \
-      --run "cd $out/bin"
+      --chdir "$out/bin"
 
     makeWrapper ${unwrapped}/libexec/tes3mp-server $out/bin/tes3mp-server \
       --run "mkdir -p $dir" \
       --run "${crudini}/bin/crudini --merge $dir/${cfgFile.name} < ${cfgFile}" \
-      --run "cd $out/bin"
+      --chdir "$out/bin"
   '';
 }
diff --git a/nixpkgs/pkgs/games/openra/common.nix b/nixpkgs/pkgs/games/openra/common.nix
index 01bd44ee244a..67060f9ef388 100644
--- a/nixpkgs/pkgs/games/openra/common.nix
+++ b/nixpkgs/pkgs/games/openra/common.nix
@@ -34,7 +34,7 @@ in {
       --set TERM xterm
 
     makeWrapper $out/lib/openra${openraSuffix}/launch-game.sh $(mkdirp $out/bin)/openra${openraSuffix} \
-      --run "cd $out/lib/openra${openraSuffix}"
+      --chdir "$out/lib/openra${openraSuffix}"
   '';
 
   packageAttrs = {
diff --git a/nixpkgs/pkgs/games/openra/default.nix b/nixpkgs/pkgs/games/openra/default.nix
index 22d3c6c879ed..d99663091474 100644
--- a/nixpkgs/pkgs/games/openra/default.nix
+++ b/nixpkgs/pkgs/games/openra/default.nix
@@ -43,7 +43,7 @@ let
   callWithName = name: value: if isFunction value then value name else value;
   buildOpenRASet = f: args: pkgs.recurseIntoAttrs (mapAttrs callWithName (f ({
     inherit (pkgs) fetchFromGitHub;
-    extraPostFetch = ''
+    postFetch = ''
       sed -i 's/curl/curl --insecure/g' $out/thirdparty/{fetch-thirdparty-deps,noget}.sh
       $out/thirdparty/fetch-thirdparty-deps.sh
     '';
diff --git a/nixpkgs/pkgs/games/openra/engines.nix b/nixpkgs/pkgs/games/openra/engines.nix
index 933f8411f75a..bbb4947acd23 100644
--- a/nixpkgs/pkgs/games/openra/engines.nix
+++ b/nixpkgs/pkgs/games/openra/engines.nix
@@ -1,4 +1,4 @@
-{ buildOpenRAEngine, fetchFromGitHub, extraPostFetch }:
+{ buildOpenRAEngine, fetchFromGitHub, postFetch }:
 
 let
   buildUpstreamOpenRAEngine = { version, rev, sha256 }: name: (buildOpenRAEngine {
@@ -9,7 +9,7 @@ let
     src = fetchFromGitHub {
       owner = "OpenRA";
       repo = "OpenRA" ;
-      inherit rev sha256 extraPostFetch;
+      inherit rev sha256 postFetch;
     };
   } name).overrideAttrs (origAttrs: {
     postInstall = ''
diff --git a/nixpkgs/pkgs/games/openra/mods.nix b/nixpkgs/pkgs/games/openra/mods.nix
index cf8cd433c294..47e86fd09a7d 100644
--- a/nixpkgs/pkgs/games/openra/mods.nix
+++ b/nixpkgs/pkgs/games/openra/mods.nix
@@ -1,4 +1,4 @@
-{ buildOpenRAMod, fetchFromGitHub, extraPostFetch }:
+{ buildOpenRAMod, fetchFromGitHub, postFetch }:
 
 let
   unsafeBuildOpenRAMod = attrs: name: (buildOpenRAMod attrs name).overrideAttrs (_: {
@@ -25,7 +25,7 @@ in {
         rev = "b8a7dd52ff893ed8225726d4ed4e14ecad748404";
         sha256 = "0dyk861qagibx8ldshz7d2nrki9q550f6f0wy8pvayvf1gv1dbxj";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
   };
@@ -50,7 +50,7 @@ in {
         rev = version;
         sha256 = "0p0izykjnz7pz02g2khp7msqa00jhjsrzk9y0g29dirmdv75qa4r";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
     assetsError = ''
@@ -78,7 +78,7 @@ in {
         rev = "f91d3f2603bbf51afaa89357e4defcdc36138102";
         sha256 = "05g900ri6q0zrkrk8rmjaz576vjggmi2y6jm0xz3cwli54prn11w";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
   };
@@ -102,7 +102,7 @@ in {
         rev = version;
         sha256 = "1x6byz37s8qcpqj902zvkvbv95rv2mv2kj35c12gbpyc92xkqkq0";
         name = "generals-alpha-engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
   };
@@ -127,7 +127,7 @@ in {
         rev = "4e8eab4ca00d1910203c8a103dfd2c002714daa8";
         sha256 = "1yyqparf93x8yzy1f46gsymgkj5jls25v2yc7ighr3f7mi3igdvq";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
   } name).overrideAttrs (origAttrs: {
@@ -156,7 +156,7 @@ in {
         rev = "52109c0910f479753704c46fb19e8afaab353c83";
         sha256 = "0ga3855j6bc7h81q03cw6laiaiz12915zg8aqah1idvxbzicfy7l";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
   };
@@ -180,7 +180,7 @@ in {
         rev = version;
         sha256 = "1pgi3zaq9fwwdq6yh19bwxscslqgabjxkvl9bcn1a5agy4bfbqk5";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
     assetsError = ''
@@ -208,7 +208,7 @@ in {
         rev = version;
         sha256 = "15pvn5cx3g0nzbrgpsfz8dngad5wkzp5dz25ydzn8bmxafiijvcr";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
   };
@@ -233,7 +233,7 @@ in {
         rev = "f3873ae242803051285994d77eb26f4b951594b5";
         sha256 = "02rv29wja0p5d083pd087daz7x7pp5b9ym7sci2fhg3mrnaqgwkp";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
     assetsError = ''
@@ -262,7 +262,7 @@ in {
         rev = "bb0930008a57c07f3002421023f6b446e3e3af69";
         sha256 = "1jvgpbf56hd02ikhklv49br4d1jiv5hphc5kl79qnjlaacnj222x";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
   };
@@ -286,7 +286,7 @@ in {
         rev = "6de92de8d982094a766eab97a92225c240d85493";
         sha256 = "0ps9x379plrrj1hnj4fpr26lc46mzgxknv5imxi0bmrh5y4781ql";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
   };
@@ -310,7 +310,7 @@ in {
         rev = version;
         sha256 = "1p5hgxxvxlz8480vj0qkmnxjh7zj3hahk312m0zljxfdb40652w1";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
   };
@@ -334,7 +334,7 @@ in {
         rev = version;
         sha256 = "15pvn5cx3g0nzbrgpsfz8dngad5wkzp5dz25ydzn8bmxafiijvcr";
         name = "engine";
-        inherit extraPostFetch;
+        inherit postFetch;
       };
     };
     assetsError = ''
diff --git a/nixpkgs/pkgs/games/openra/packages.nix b/nixpkgs/pkgs/games/openra/packages.nix
index 2f4c83c7d5a3..e98ebcaee44f 100644
--- a/nixpkgs/pkgs/games/openra/packages.nix
+++ b/nixpkgs/pkgs/games/openra/packages.nix
@@ -32,7 +32,7 @@ let
   */
   buildOpenRASet = f: args: builtins.mapAttrs (name: value: if builtins.isFunction value then value name else value) (f ({
     inherit (pkgs) fetchFromGitHub;
-    extraPostFetch = ''
+    postFetch = ''
       sed -i 's/curl/curl --insecure/g' $out/thirdparty/{fetch-thirdparty-deps,noget}.sh
       $out/thirdparty/fetch-thirdparty-deps.sh
     '';
diff --git a/nixpkgs/pkgs/games/openrct2/default.nix b/nixpkgs/pkgs/games/openrct2/default.nix
index 4e07148761b7..b9ffec66bcc1 100644
--- a/nixpkgs/pkgs/games/openrct2/default.nix
+++ b/nixpkgs/pkgs/games/openrct2/default.nix
@@ -1,36 +1,57 @@
 { lib, stdenv, fetchFromGitHub
-, SDL2, cmake, curl, duktape, fontconfig, freetype, icu, jansson, libGLU
-, libiconv, libpng, libpthreadstubs, libzip, nlohmann_json, openssl, pkg-config
-, speexdsp, zlib
+
+, SDL2
+, cmake
+, curl
+, discord-rpc
+, duktape
+, flac
+, fontconfig
+, freetype
+, gbenchmark
+, icu
+, jansson
+, libGLU
+, libiconv
+, libogg
+, libpng
+, libpthreadstubs
+, libvorbis
+, libzip
+, nlohmann_json
+, openssl
+, pkg-config
+, speexdsp
+, zlib
 }:
 
 let
-  openrct2-version = "0.3.5.1";
+  openrct2-version = "0.4.1";
 
   # Those versions MUST match the pinned versions within the CMakeLists.txt
   # file. The REPLAYS repository from the CMakeLists.txt is not necessary.
-  objects-version = "1.0.21";
-  title-sequences-version = "0.1.2c";
+  objects-version = "1.3.2";
+  title-sequences-version = "0.4.0";
 
   openrct2-src = fetchFromGitHub {
     owner = "OpenRCT2";
     repo = "OpenRCT2";
     rev = "v${openrct2-version}";
-    sha256 = "01v9nsabqjq8hjmyshcp7f5liagfq8sxx9i3yqqab7zk4iixag1h";
+    sha256 = "sha256-fMs0zrMzv9jXreZE4QyYIdvWUU/FUFVPuo4EzAF/2rU=";
   };
 
   objects-src = fetchFromGitHub {
     owner = "OpenRCT2";
     repo = "objects";
     rev = "v${objects-version}";
-    sha256 = "0r2vp2y67jc1mpfl4j83sx5khvvaddx7xs26ppkigmr2d1xpxgr7";
+    sha256 = "sha256-BG0IRiNb2l6/3P7tvuUqMoYNh1zkOS0lCFDDh7m9Q7Y=";
   };
 
   title-sequences-src = fetchFromGitHub {
     owner = "OpenRCT2";
     repo = "title-sequences";
     rev = "v${title-sequences-version}";
-    sha256 = "1qdrm4q75bznmgdrpjdaiqvbf3q4vwbkkmls45izxvyg1djrpsdf";
+    sha256 = "sha256-anqCZkhYoaxPu3MYCYSsFFngOmPp2wnx2MGb0hj6W5U=";
   };
 in
 stdenv.mkDerivation {
@@ -47,15 +68,20 @@ stdenv.mkDerivation {
   buildInputs = [
     SDL2
     curl
+    discord-rpc
     duktape
+    flac
     fontconfig
     freetype
+    gbenchmark
     icu
     jansson
     libGLU
     libiconv
+    libogg
     libpng
     libpthreadstubs
+    libvorbis
     libzip
     nlohmann_json
     openssl
diff --git a/nixpkgs/pkgs/games/soldat-unstable/default.nix b/nixpkgs/pkgs/games/opensoldat/default.nix
index b3ae3b58cfe7..625fc0dce5ae 100644
--- a/nixpkgs/pkgs/games/soldat-unstable/default.nix
+++ b/nixpkgs/pkgs/games/opensoldat/default.nix
@@ -5,12 +5,12 @@
 
 let
   base = stdenv.mkDerivation rec {
-    pname = "soldat-base";
+    pname = "opensoldat-base";
     version = "unstable-2021-09-05";
 
     src = fetchFromGitHub {
       name = "base";
-      owner = "Soldat";
+      owner = "opensoldat";
       repo = "base";
       rev = "6c74d768d511663e026e015dde788006c74406b5";
       sha256 = "175gmkdccy8rnkd95h2zqldqfydyji1hfby8b1qbnl8wz4dh08mz";
@@ -28,7 +28,7 @@ let
     '';
 
     meta = with lib; {
-      description = "Soldat's base game content";
+      description = "Opensoldat's base game content";
       license = licenses.cc-by-40;
       platforms = platforms.all;
       inherit (src.meta) homepage;
@@ -38,27 +38,22 @@ let
 in
 
 stdenv.mkDerivation rec {
-  pname = "soldat";
-  version = "unstable-2021-11-01";
+  pname = "opensoldat";
+  version = "unstable-2022-07-02";
 
   src = fetchFromGitHub {
-    name = "soldat";
-    owner = "Soldat";
-    repo = "soldat";
-    rev = "7780d2948b724970af9f2aaf4fb4e4350d5438d9";
-    sha256 = "0r39d1394q7kabsgq6vpdlzwsajxafsg23i0r273nggfvs3m805z";
+    name = "opensoldat";
+    owner = "opensoldat";
+    repo = "opensoldat";
+    rev = "9574f5791b7993067f03d2df03d625908bc3762f";
+    sha256 = "0kyxzikd4ngx3nshjw0411x61zqq1b7l01lxw41rlcy4nad3r0vi";
   };
 
-  patches = [
-    # Don't build GameNetworkingSockets as an ExternalProject,
-    # see https://github.com/Soldat/soldat/issues/73
-    ./gamenetworkingsockets-no-external.patch
-  ];
-
   nativeBuildInputs = [ fpc makeWrapper autoPatchelfHook cmake ];
 
   cmakeFlags = [
     "-DADD_ASSETS=OFF" # We provide base's smods via nix
+    "-DBUILD_GNS=OFF" # Don't build GameNetworkingSockets as an ExternalProject
   ];
 
   buildInputs = [ SDL2 freetype physfs openal gamenetworkingsockets ];
@@ -69,6 +64,7 @@ stdenv.mkDerivation rec {
   # let them write their state and configuration files
   # to $XDG_CONFIG_HOME/soldat/soldat{,server} unless
   # the user specifies otherwise.
+  # TODO(@sternenseemann): rename config dir to opensoldat
   postInstall = ''
     for p in $out/bin/soldatserver $out/bin/soldat; do
       configDir="\''${XDG_CONFIG_HOME:-\$HOME/.config}/soldat/$(basename "$p")"
@@ -82,7 +78,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "Soldat is a unique 2D (side-view) multiplayer action game";
+    description = "Opensoldat is a unique 2D (side-view) multiplayer action game";
     license = [ licenses.mit base.meta.license ];
     inherit (src.meta) homepage;
     maintainers = [ maintainers.sternenseemann ];
@@ -90,6 +86,6 @@ stdenv.mkDerivation rec {
     # portability currently mainly limited by fpc
     # in nixpkgs which doesn't work on darwin,
     # aarch64 and arm support should be possible:
-    # https://github.com/Soldat/soldat/issues/45
+    # https://github.com/opensoldat/opensoldat/issues/45
   };
 }
diff --git a/nixpkgs/pkgs/games/openspades/default.nix b/nixpkgs/pkgs/games/openspades/default.nix
index 58ac3f8df799..488301a1b555 100644
--- a/nixpkgs/pkgs/games/openspades/default.nix
+++ b/nixpkgs/pkgs/games/openspades/default.nix
@@ -58,6 +58,7 @@ stdenv.mkDerivation rec {
   NIX_CFLAGS_LINK = "-lopenal";
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     description = "A compatible client of Ace of Spades 0.75";
     homepage    = "https://github.com/yvt/openspades/";
     license     = licenses.gpl3;
diff --git a/nixpkgs/pkgs/games/opensupaplex/default.nix b/nixpkgs/pkgs/games/opensupaplex/default.nix
index d3f8155f546c..dc5d9aae690c 100644
--- a/nixpkgs/pkgs/games/opensupaplex/default.nix
+++ b/nixpkgs/pkgs/games/opensupaplex/default.nix
@@ -4,7 +4,7 @@
 , fetchurl
 , makeDesktopItem
 , copyDesktopItems
-, testVersion
+, testers
 , opensupaplex
 , SDL2
 , SDL2_mixer
@@ -62,7 +62,7 @@ stdenv.mkDerivation rec {
     runHook postInstall
   '';
 
-  passthru.tests.version = testVersion {
+  passthru.tests.version = testers.testVersion {
     package = opensupaplex;
     command = "opensupaplex --help";
     version = "v${version}";
diff --git a/nixpkgs/pkgs/games/openttd/default.nix b/nixpkgs/pkgs/games/openttd/default.nix
index 3219ec50760d..7aac53ae9403 100644
--- a/nixpkgs/pkgs/games/openttd/default.nix
+++ b/nixpkgs/pkgs/games/openttd/default.nix
@@ -29,11 +29,11 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "openttd";
-  version = "12.1";
+  version = "12.2";
 
   src = fetchurl {
     url = "https://cdn.openttd.org/openttd-releases/${version}/${pname}-${version}-source.tar.xz";
-    sha256 = "sha256-JYv1uZgwEIkLoQUYtQa8SrgPfAjM7FlJfpulWkqj5+M=";
+    hash = "sha256-gVCPDek6DCZLIW71agX4OB//e/+m0BASGiFJC02s6Vw=";
   };
 
   nativeBuildInputs = [ cmake makeWrapper ];
diff --git a/nixpkgs/pkgs/games/openttd/jgrpp.nix b/nixpkgs/pkgs/games/openttd/jgrpp.nix
index 19f50ab780e3..a0c70e463b20 100644
--- a/nixpkgs/pkgs/games/openttd/jgrpp.nix
+++ b/nixpkgs/pkgs/games/openttd/jgrpp.nix
@@ -1,13 +1,15 @@
-{ fetchFromGitHub, openttd, ... }:
+{ fetchFromGitHub, openttd, zstd, ... }:
 
 openttd.overrideAttrs (oldAttrs: rec {
   pname = "openttd-jgrpp";
-  version = "0.44.0";
+  version = "0.47.1";
 
   src = fetchFromGitHub rec {
     owner = "JGRennison";
     repo = "OpenTTD-patches";
     rev = "jgrpp-${version}";
-    sha256 = "sha256-/kqwMZGXUYWlCnjk6uShJ5UARtvBSZWPExVel5o4xA8=";
+    hash = "sha256-AMd2KXy/ODByeV9CkEd51KbE/+fZ8Us3WzsWCnn7nh0=";
   };
+
+  buildInputs = oldAttrs.buildInputs ++ [ zstd ];
 })
diff --git a/nixpkgs/pkgs/games/openttd/nml.nix b/nixpkgs/pkgs/games/openttd/nml.nix
index bb44d9eee0b6..2f7405725ab9 100644
--- a/nixpkgs/pkgs/games/openttd/nml.nix
+++ b/nixpkgs/pkgs/games/openttd/nml.nix
@@ -1,6 +1,10 @@
-{ stdenv, lib, fetchFromGitHub, python3Packages }:
+{ stdenv
+, lib
+, fetchFromGitHub
+, python3
+}:
 
-python3Packages.buildPythonApplication rec {
+python3.pkgs.buildPythonApplication rec {
   pname = "openttd-nml";
   version = "0.6.1";
 
@@ -8,15 +12,18 @@ python3Packages.buildPythonApplication rec {
     owner = "OpenTTD";
     repo = "nml";
     rev = version;
-    sha256 = "0z0n4lqvnqigfjjhmmz7mvis7iivd4a8d287ya2yscfg5hznnqh2";
+    hash = "sha256-AmJrPyzPMe2F8geJhhRpO8aj467n1wqldC9iuzElFnw=";
   };
 
-  propagatedBuildInputs = with python3Packages; [ply pillow];
+  propagatedBuildInputs = with python3.pkgs; [
+    pillow
+    ply
+  ];
 
   meta = with lib; {
+    homepage = "http://openttdcoop.org/";
     description = "Compiler for OpenTTD NML files";
-    homepage    = "http://openttdcoop.org/";
-    license     = licenses.gpl2;
+    license = licenses.gpl2;
     maintainers = with maintainers; [ ToxicFrog ];
   };
 }
diff --git a/nixpkgs/pkgs/games/opentyrian/default.nix b/nixpkgs/pkgs/games/opentyrian/default.nix
index 43c8e08c79f5..5d386bce6db9 100644
--- a/nixpkgs/pkgs/games/opentyrian/default.nix
+++ b/nixpkgs/pkgs/games/opentyrian/default.nix
@@ -1,35 +1,43 @@
-{ lib, stdenv, fetchurl, fetchzip, SDL, SDL_net }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchzip
+, SDL2
+, SDL2_net
+, pkg-config
+}:
 
 stdenv.mkDerivation rec {
   pname = "opentyrian";
-  version = "2.1.20130907";
+  version = "2.1.20220318";
 
-  src = fetchurl {
-    url = "https://bitbucket.org/opentyrian/opentyrian/get/${version}.tar.gz";
-    sha256 = "1jnrkq616pc4dhlbd4n30d65vmn25q84w6jfv9383l9q20cqf2ph";
+  src = fetchFromGitHub {
+    owner = "opentyrian";
+    repo = "opentyrian";
+    rev = "v${version}";
+    sha256 = "01z1zxpps4ils0bnwazl9lmqdbfhfd8fkacahnh6kqyczavg40xg";
   };
 
   data = fetchzip {
-    url = "http://sites.google.com/a/camanis.net/opentyrian/tyrian/tyrian21.zip";
+    url = "https://camanis.net/tyrian/tyrian21.zip";
     sha256 = "1biz6hf6s7qrwn8ky0g6p8w7yg715w7yklpn6258bkks1s15hpdb";
   };
 
-  buildInputs = [SDL SDL_net];
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ SDL2 SDL2_net ];
 
-  patchPhase = "
-    substituteInPlace src/file.c --replace /usr/share $out/share
-  ";
-  buildPhase = "make release";
-  installPhase = "
-    mkdir -p $out/bin
-    cp ./opentyrian $out/bin
-    mkdir -p $out/share/opentyrian/data
-    cp -r $data/* $out/share/opentyrian/data
-  ";
+  enableParallelBuilding = true;
+
+  makeFlags = [ "prefix=${placeholder "out"}" ];
+
+  postInstall = ''
+    mkdir -p $out/share/games/tyrian
+    cp -r $data/* $out/share/games/tyrian/
+  '';
 
   meta = {
     description = ''Open source port of the game "Tyrian"'';
-    homepage = "https://bitbucket.org/opentyrian/opentyrian";
+    homepage = "https://github.com/opentyrian/opentyrian";
     # This does not account of Tyrian data.
     # license = lib.licenses.gpl2;
   };
diff --git a/nixpkgs/pkgs/games/openxcom/default.nix b/nixpkgs/pkgs/games/openxcom/default.nix
index b877c3aac2fd..61f209aae4dc 100644
--- a/nixpkgs/pkgs/games/openxcom/default.nix
+++ b/nixpkgs/pkgs/games/openxcom/default.nix
@@ -1,26 +1,38 @@
-{lib, stdenv, fetchFromGitHub, cmake, libGLU, libGL, zlib, openssl, libyamlcpp, boost
-, SDL, SDL_image, SDL_mixer, SDL_gfx }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, libGLU
+, libGL
+, zlib
+, openssl
+, libyamlcpp
+, boost
+, SDL
+, SDL_image
+, SDL_mixer
+, SDL_gfx
+}:
 
-let version = "1.0.0.2019.10.18"; in
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "openxcom";
-  inherit version;
+  version = "1.0.0.2019.10.18";
+
   src = fetchFromGitHub {
     owner = "OpenXcom";
     repo = "OpenXcom";
     rev = "f9853b2cb8c8f741ac58707487ef493416d890a3";
-    sha256 = "0kbfawj5wsp1mwfcm5mwpkq6s3d13pailjm5w268gqpxjksziyq0";
+    hash = "sha256-APv49ZT94oeM4KVKGtUdoQ1t8Ly8lsocr+FqXiRXbk0=";
   };
 
   nativeBuildInputs = [ cmake ];
   buildInputs = [ SDL SDL_gfx SDL_image SDL_mixer boost libyamlcpp libGLU libGL openssl zlib ];
 
-  meta = {
+  meta = with lib; {
     description = "Open source clone of UFO: Enemy Unknown";
     homepage = "https://openxcom.org";
-    maintainers = [ lib.maintainers.cpages ];
-    platforms = lib.platforms.linux;
-    license = lib.licenses.gpl3;
+    maintainers = with maintainers; [ cpages ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
   };
-
 }
diff --git a/nixpkgs/pkgs/games/openxray/default.nix b/nixpkgs/pkgs/games/openxray/default.nix
index 58c82aec3659..aef6c0c2e92a 100644
--- a/nixpkgs/pkgs/games/openxray/default.nix
+++ b/nixpkgs/pkgs/games/openxray/default.nix
@@ -1,68 +1,53 @@
-{ lib, stdenv, fetchFromGitHub, cmake, glew, freeimage,  liblockfile
-, openal, libtheora, SDL2, lzo, libjpeg, libogg, tbb
-, pcre, makeWrapper, fetchpatch }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, glew
+, freeimage
+, liblockfile
+, openal
+, libtheora
+, SDL2
+, lzo
+, libjpeg
+, libogg
+, pcre
+, makeWrapper
+}:
 
-let
-  version = "822-december-preview";
+stdenv.mkDerivation rec {
+  pname = "openxray";
+  version = "1144-december-2021-rc1";
 
   src = fetchFromGitHub {
     owner = "OpenXRay";
     repo = "xray-16";
     rev = version;
     fetchSubmodules = true;
-    sha256 = "06f3zjnib7hipyl3hnc6mwcj9f50kbwn522wzdjydz8qgdg60h3m";
+    sha256 = "07qj1lpp21g4p583gvz5h66y2q71ymbsz4g5nr6dcys0vm7ph88v";
   };
 
-  # https://github.com/OpenXRay/xray-16/issues/518
-  cryptopp = stdenv.mkDerivation {
-    pname = "cryptopp";
-    version = "5.6.5";
-
-    inherit src;
-
-    sourceRoot = "source/Externals/cryptopp";
-
-    makeFlags = [ "PREFIX=${placeholder "out"}" ];
-    enableParallelBuilding = true;
-
-    doCheck = true;
-
-    meta = with lib; {
-      description = "Crypto++, a free C++ class library of cryptographic schemes";
-      homepage = "https://cryptopp.com/";
-      license = with licenses; [ boost publicDomain ];
-      platforms = platforms.all;
-    };
-  };
-in stdenv.mkDerivation rec {
-  pname = "openxray";
-  inherit version src;
-
-  # TODO https://github.com/OpenXRay/GameSpy/pull/6, check if merged in version > 822
-  # Fixes format hardening
-  patches = [
-    (fetchpatch {
-      url = "https://github.com/OpenXRay/GameSpy/pull/6/commits/155af876281f5d94f0142886693314d97deb2d4c.patch";
-      sha256 = "1l0vcgvzzx8n56shpblpfdhvpr6c12fcqf35r0mflaiql8q7wn88";
-      stripLen = 1;
-      extraPrefix = "Externals/GameSpy/";
-    })
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
   ];
 
-  cmakeFlags = [ "-DCMAKE_INCLUDE_PATH=${cryptopp}/include/cryptopp" ];
-
   buildInputs = [
-    glew freeimage liblockfile openal cryptopp libtheora SDL2 lzo
-    libjpeg libogg tbb pcre
+    glew
+    freeimage
+    liblockfile
+    openal
+    libtheora
+    SDL2
+    lzo
+    libjpeg
+    libogg
+    pcre
   ];
 
-  nativeBuildInputs = [ cmake makeWrapper ];
-
-  # https://github.com/OpenXRay/xray-16/issues/786
-  preConfigure = ''
-    substituteInPlace src/xrCore/xrCore.cpp \
-      --replace /usr/share $out/share
-  '';
+  # Crashes can happen, we'd like them to be reasonably debuggable
+  cmakeBuildType = "RelWithDebInfo";
+  dontStrip = true;
 
   postInstall = ''
     # needed because of SDL_LoadObject library loading code
@@ -71,10 +56,11 @@ in stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
+    mainProgram = "xray-16";
     description = "Improved version of the X-Ray Engine, the game engine used in the world-famous S.T.A.L.K.E.R. game series by GSC Game World";
-    homepage = src.meta.homepage;
+    homepage = "https://github.com/OpenXRay/xray-16/";
     license = licenses.unfree // {
-      url = "https://github.com/OpenXRay/xray-16/blob/xd_dev/License.txt";
+      url = "https://github.com/OpenXRay/xray-16/blob/${version}/License.txt";
     };
     maintainers = with maintainers; [ OPNA2608 ];
     platforms = [ "x86_64-linux" "i686-linux" ];
diff --git a/nixpkgs/pkgs/games/osu-lazer/default.nix b/nixpkgs/pkgs/games/osu-lazer/default.nix
index 2b1a2f044fa0..262df2e853a6 100644
--- a/nixpkgs/pkgs/games/osu-lazer/default.nix
+++ b/nixpkgs/pkgs/games/osu-lazer/default.nix
@@ -9,17 +9,18 @@
 , SDL2
 , lttng-ust
 , numactl
+, dotnetCorePackages
 }:
 
 buildDotnetModule rec {
   pname = "osu-lazer";
-  version = "2022.205.0";
+  version = "2022.723.0";
 
   src = fetchFromGitHub {
     owner = "ppy";
     repo = "osu";
     rev = version;
-    sha256 = "sha256-CzXgj3990qWOwIjhbU8vO29nDO/7HrGDtsc67VIenPI=";
+    sha256 = "sha256-j3NxT/WCOCSB62JUO8hYCRUoF+GL1QAdaUaynY7aGj8=";
   };
 
   projectFile = "osu.Desktop/osu.Desktop.csproj";
@@ -27,11 +28,9 @@ buildDotnetModule rec {
 
   nativeBuildInputs = [ copyDesktopItems ];
 
-  preConfigure = ''
-    dotnetFlags+=(
-      --runtime linux-x64
-    )
-  '';
+  dotnetFlags = [
+    "--runtime linux-x64"
+  ];
 
   runtimeDeps = [
     ffmpeg
@@ -74,7 +73,7 @@ buildDotnetModule rec {
       cc-by-nc-40
       unfreeRedistributable # osu-framework contains libbass.so in repository
     ];
-    maintainers = with maintainers; [ oxalica ];
+    maintainers = with maintainers; [ oxalica thiagokokada ];
     platforms = [ "x86_64-linux" ];
     mainProgram = "osu!";
   };
diff --git a/nixpkgs/pkgs/games/osu-lazer/deps.nix b/nixpkgs/pkgs/games/osu-lazer/deps.nix
index 6ff9f6dfaf80..52c3b6f7a921 100644
--- a/nixpkgs/pkgs/games/osu-lazer/deps.nix
+++ b/nixpkgs/pkgs/games/osu-lazer/deps.nix
@@ -1,150 +1,137 @@
 { fetchNuGet }: [
-  (fetchNuGet { pname = "AutoMapper"; version = "11.0.0"; sha256 = "1ni9mmrqfbspwf7xz6by5415ci5zhg15z3f7596qqpmbn8bqg7wq"; })
-  (fetchNuGet { pname = "DeltaCompressionDotNet"; version = "2.0.0.0"; sha256 = "0zhj7m3zaf9wcg51385in9qg1xgkvp8yyzgq3r5k4sagm7y68aqy"; })
-  (fetchNuGet { pname = "DiffPlex"; version = "1.7.0"; sha256 = "09a8hkbx99iwikfl8war629945yv7i8llj9480dbc4kyp6qqlr00"; })
+  (fetchNuGet { pname = "AutoMapper"; version = "11.0.1"; sha256 = "1z1x5c1dkwk6142km5q6jglhpq9x82alwjjy5a72c8qnq9ppdfg3"; })
+  (fetchNuGet { pname = "Clowd.Squirrel"; version = "2.9.42"; sha256 = "1xxrr9jmgn343d467nz40569mkybinnmxaxyc4fhgy6yddvzk1y0"; })
+  (fetchNuGet { pname = "DiffPlex"; version = "1.7.1"; sha256 = "1q78r70pirgb7j5wkh454ws237lihh0fig212cpbj02cz53c2h6j"; })
   (fetchNuGet { pname = "DiscordRichPresence"; version = "1.0.175"; sha256 = "180sax976327d70qbinv07f65g3w2zbw80n49hckg8wd4rw209vd"; })
   (fetchNuGet { pname = "FFmpeg.AutoGen"; version = "4.3.0.1"; sha256 = "0n6x57mnnvcjnrs8zyvy07h5zm4bcfy9gh4n4bvd9fx5ys4pxkvv"; })
-  (fetchNuGet { pname = "Fody"; version = "6.6.0"; sha256 = "0cx708ah61cxmvpaq040mhqwrv937rvlmskwihg1w118729k9yv0"; })
+  (fetchNuGet { pname = "Fody"; version = "6.6.2"; sha256 = "1jnpvqzi7bdk96skqax82765q1kjpx921yqakqawkx5b3bhqpihs"; })
   (fetchNuGet { pname = "HidSharpCore"; version = "1.2.1.1"; sha256 = "1zkndglmz0s8rblfhnqcvv90rkq2i7lf4bc380g7z8h1avf2ikll"; })
-  (fetchNuGet { pname = "HtmlAgilityPack"; version = "1.11.40"; sha256 = "0k1cpkfgz4v5qigvmmvlk8lv2a731kqkmx6acf3rzr8rlj3cfnc4"; })
-  (fetchNuGet { pname = "Humanizer"; version = "2.13.14"; sha256 = "155g2700x6sbym2jd4dshm4rf3jjr8flx6w9xnw28zrrv7r2rdy8"; })
-  (fetchNuGet { pname = "Humanizer.Core"; version = "2.13.14"; sha256 = "1ni4mcyhcs46ih9b8c8l3xq3iai56rdlcw0afwhji3hxwbxqbk7i"; })
-  (fetchNuGet { pname = "Humanizer.Core"; version = "2.2.0"; sha256 = "08mzg65y9d3zvq16rsmpapcdan71ggq2mpks6k777h3wlm2sh3p5"; })
-  (fetchNuGet { pname = "Humanizer.Core.af"; version = "2.13.14"; sha256 = "0w7n9qfxlqayw2dwgajqjks5b2qxcy2853v5h0rbaq5r5yb84874"; })
-  (fetchNuGet { pname = "Humanizer.Core.ar"; version = "2.13.14"; sha256 = "1nxdh3hg9hkvi7q0ffaflb738kkdl0kmpry9jxdkkvg4mhrmfs2i"; })
-  (fetchNuGet { pname = "Humanizer.Core.az"; version = "2.13.14"; sha256 = "1rjhpbzy49rrf0mypkf7ksjlmx6iywdbra1caj1mr970gfm1j4zb"; })
-  (fetchNuGet { pname = "Humanizer.Core.bg"; version = "2.13.14"; sha256 = "101zwkys4w7dwwa7dzsc10gdrk6bnfmm3hqc09a4jvxj2p8i6hds"; })
-  (fetchNuGet { pname = "Humanizer.Core.bn-BD"; version = "2.13.14"; sha256 = "1d0flbhk4f0kc1dqzgqnimlp3gcj490qchrbl4yb4ilmsyaws0gm"; })
-  (fetchNuGet { pname = "Humanizer.Core.cs"; version = "2.13.14"; sha256 = "11hfxdpncbrbj9d779b24hw43sfpbjynmkxlv636sg532j5vd58g"; })
-  (fetchNuGet { pname = "Humanizer.Core.da"; version = "2.13.14"; sha256 = "0bfl1zx6x58i75l57k8xfky264hh2ziv068yx9w0zshil0d74iw5"; })
-  (fetchNuGet { pname = "Humanizer.Core.de"; version = "2.13.14"; sha256 = "1bhhmp9rza2p4j5zs11sk2xvrbbvckr1v8d97aramqzqmv4x20pd"; })
-  (fetchNuGet { pname = "Humanizer.Core.el"; version = "2.13.14"; sha256 = "1kym97876jspj72y9fhpc2y1jn3j12y5l95222r53mbrrpwz1m6p"; })
-  (fetchNuGet { pname = "Humanizer.Core.es"; version = "2.13.14"; sha256 = "0v5fmy7cjdk3bs13pi09v3g7sbmdnvijn0w8gnif0krmg2rdm2z7"; })
-  (fetchNuGet { pname = "Humanizer.Core.fa"; version = "2.13.14"; sha256 = "12m3d0cr9qa0f7sx58rqw835awi01j0frvbp1q796s6amlvhrcyc"; })
-  (fetchNuGet { pname = "Humanizer.Core.fi-FI"; version = "2.13.14"; sha256 = "0j8gl6kajazjw64xpf4ws5v6hv5dz43gnm0vcnfm5l2kizd87wxh"; })
-  (fetchNuGet { pname = "Humanizer.Core.fr"; version = "2.13.14"; sha256 = "053jcc9rdxxnwiccqmcxnvq40a4fm6h6lr0mlqdxjdfdj07s29i9"; })
-  (fetchNuGet { pname = "Humanizer.Core.fr-BE"; version = "2.13.14"; sha256 = "00xff7shwclns2v8mknwnh2y6ycfa9zj7ssgrkdyqa9k8ppq26dh"; })
-  (fetchNuGet { pname = "Humanizer.Core.he"; version = "2.13.14"; sha256 = "10qhxb6fin6w595f7h7nnfvvh5xi0vmca9ynsggq74rpjzgmvyzr"; })
-  (fetchNuGet { pname = "Humanizer.Core.hr"; version = "2.13.14"; sha256 = "1xgd3had8gsfy4l5835vn9ngr5i5ys38mggzmm4s6j1id49920g4"; })
-  (fetchNuGet { pname = "Humanizer.Core.hu"; version = "2.13.14"; sha256 = "0gfrkjp9c38c671d8rc468hphkixarjzss754rqsk4j5x1p13wml"; })
-  (fetchNuGet { pname = "Humanizer.Core.hy"; version = "2.13.14"; sha256 = "01691rwvrh6spks5jc1vcg961p1awy34ynkaxqlhr5d49dw5qgdd"; })
-  (fetchNuGet { pname = "Humanizer.Core.id"; version = "2.13.14"; sha256 = "177vbbn8q0xl2cdak4xyk38w4w8c1y2vlq9i2fm7va4x6awdyxjk"; })
-  (fetchNuGet { pname = "Humanizer.Core.is"; version = "2.13.14"; sha256 = "08d8zknnxlvbshlvlnj1m954ddf7khw1n24pphsa9i0brww9wxfv"; })
-  (fetchNuGet { pname = "Humanizer.Core.it"; version = "2.13.14"; sha256 = "0873ijf8cxm7skwp622ddnh8pdl30nlrwmil89icf67z3flis60d"; })
-  (fetchNuGet { pname = "Humanizer.Core.ja"; version = "2.13.14"; sha256 = "1bshhkiv57010zij7pcmm1709n0y4pk3kp9xx7ar3gnra3jmm6za"; })
-  (fetchNuGet { pname = "Humanizer.Core.ko-KR"; version = "2.13.14"; sha256 = "0rhq6471pjaypnh4k08y124i7sa6cj3i71v2frv66qpynl6hi0y0"; })
-  (fetchNuGet { pname = "Humanizer.Core.ku"; version = "2.13.14"; sha256 = "1ircd4lw3ryl3zzdv85wpk8by44rzhn4ln85ycml2b6a21arq1rw"; })
-  (fetchNuGet { pname = "Humanizer.Core.lv"; version = "2.13.14"; sha256 = "0y7m6zvns8wr0sy5ksjb51wrypgplfdwprz96xw1ajmdj4fjh9sr"; })
-  (fetchNuGet { pname = "Humanizer.Core.ms-MY"; version = "2.13.14"; sha256 = "1cpnjjgybh9dp9snq3r6wm3l4zy1ssjyb64bayjnd8770lpvyfjs"; })
-  (fetchNuGet { pname = "Humanizer.Core.mt"; version = "2.13.14"; sha256 = "0n5zjsq71nvxnhghsk321cqrwz7kf1jzfcq4vhsksyv7q9na74ak"; })
-  (fetchNuGet { pname = "Humanizer.Core.nb"; version = "2.13.14"; sha256 = "07b1fj3ac2wcj7ql1gc7vaa4q4dmyd0prj7bxr52z04ar3nxjlsc"; })
-  (fetchNuGet { pname = "Humanizer.Core.nb-NO"; version = "2.13.14"; sha256 = "0v1vljlzjlslj5y3c5xd2pbp1g29ghjd02s0z2bri5zk9zcgysvq"; })
-  (fetchNuGet { pname = "Humanizer.Core.nl"; version = "2.13.14"; sha256 = "15imi9m1lvfrx0fvfmlx74p8y59na2rkgdrbfyy3dvgvd74b9k5v"; })
-  (fetchNuGet { pname = "Humanizer.Core.pl"; version = "2.13.14"; sha256 = "06ix2xilgi7w7306hs4v41ai6jwank384cyz0885b53dic5kgq7r"; })
-  (fetchNuGet { pname = "Humanizer.Core.pt"; version = "2.13.14"; sha256 = "1qd1w1xrxap7nwmfl9yjx6z71r03p53kw8y4dnjn7xdn85xc7z4b"; })
-  (fetchNuGet { pname = "Humanizer.Core.ro"; version = "2.13.14"; sha256 = "1qifvw6y6g7014q0s8xaprsk79bqlgg0rmvbyn21qalc0ayab97v"; })
-  (fetchNuGet { pname = "Humanizer.Core.ru"; version = "2.13.14"; sha256 = "0wg4p84m9r6slbz9gxrjnidc1j7xfmwncpp14x3f86a37791rz61"; })
-  (fetchNuGet { pname = "Humanizer.Core.sk"; version = "2.13.14"; sha256 = "1qm0nsbw3z9n011fnnhyhzgpxyz41f01dxl13bs8mjzy0f1v3gvj"; })
-  (fetchNuGet { pname = "Humanizer.Core.sl"; version = "2.13.14"; sha256 = "1fhkjyxjk9icj705qysk8yc11hpdml2cjcxm7mfdv5z2f93sa4hz"; })
-  (fetchNuGet { pname = "Humanizer.Core.sr"; version = "2.13.14"; sha256 = "02f15q3i9npvvxwjyp14rxd8rlhd9qricrah3cmc8lw9fca26bb4"; })
-  (fetchNuGet { pname = "Humanizer.Core.sr-Latn"; version = "2.13.14"; sha256 = "0mnycpjl51cd4nz9kwijr66zrgxqjbcsp5jqgr660l4bq16yxjad"; })
-  (fetchNuGet { pname = "Humanizer.Core.sv"; version = "2.13.14"; sha256 = "13vdyrg1jp2al96w08vfkw5yjdqdnp7pksxz907i89w6cp9wbfvm"; })
-  (fetchNuGet { pname = "Humanizer.Core.th-TH"; version = "2.13.14"; sha256 = "0ganp6zjjj07lcpy9h88q2441f1lfv3a7mgncrqw36bliv37pr8m"; })
-  (fetchNuGet { pname = "Humanizer.Core.tr"; version = "2.13.14"; sha256 = "1sgfzh9dabdhhk5i97c0d13rz5yghcp2qpjidqsizpi2k8h8rl0r"; })
-  (fetchNuGet { pname = "Humanizer.Core.uk"; version = "2.13.14"; sha256 = "1ns33byx9p6fv6gffdxly3fm3wvjl6ndscribwr37134pa6nvqc9"; })
-  (fetchNuGet { pname = "Humanizer.Core.uz-Cyrl-UZ"; version = "2.13.14"; sha256 = "1qm27qz989nwnkpg26phi60qqahivssx906znwkldml2h2rz8k0g"; })
-  (fetchNuGet { pname = "Humanizer.Core.uz-Latn-UZ"; version = "2.13.14"; sha256 = "1hd2d7js8cng50ir56l8lhc9qc1rwzjvqrv98ly9ggnv8n63iiws"; })
-  (fetchNuGet { pname = "Humanizer.Core.vi"; version = "2.13.14"; sha256 = "0xh33ml7aspslj4gnbd7anjvp3463djhcc51bh2ji67rbw1an6rw"; })
-  (fetchNuGet { pname = "Humanizer.Core.zh-CN"; version = "2.13.14"; sha256 = "062wgs0qnhvikvfz37jmqw6sx7xwzs24ncl89paq3640id32aivd"; })
-  (fetchNuGet { pname = "Humanizer.Core.zh-Hans"; version = "2.13.14"; sha256 = "0s01h733ihxjg64bznjvnij76lflqfcmwznjwmd8p2axmn8688s0"; })
-  (fetchNuGet { pname = "Humanizer.Core.zh-Hant"; version = "2.13.14"; sha256 = "07xsdx8j1rhp712kwy8jx9ang6f9zljqrvaggf0ssj5zqbliz93p"; })
+  (fetchNuGet { pname = "HtmlAgilityPack"; version = "1.11.43"; sha256 = "08xh6fm5l9f8lhhkk0h9vrp8qa60qmiq8k6wyip8lqn810jld50m"; })
+  (fetchNuGet { pname = "Humanizer"; version = "2.14.1"; sha256 = "18cycx9gvbc3735chdi2r583x73m2fkz1ws03yi3g640j9zv00fp"; })
+  (fetchNuGet { pname = "Humanizer.Core"; version = "2.14.1"; sha256 = "1ai7hgr0qwd7xlqfd92immddyi41j3ag91h3594yzfsgsy6yhyqi"; })
+  (fetchNuGet { pname = "Humanizer.Core"; version = "2.8.26"; sha256 = "1v8xd12yms4qq1md4vh6faxicmqrvahqdd7sdkyzrphab9v44nsm"; })
+  (fetchNuGet { pname = "Humanizer.Core.af"; version = "2.14.1"; sha256 = "197lsky6chbmrixgsg6dvxbdbbpis0an8mn6vnwjcydhncis087h"; })
+  (fetchNuGet { pname = "Humanizer.Core.ar"; version = "2.14.1"; sha256 = "03rz12mxrjv5afm1hn4rrpimkkb8wdzp17634dcq10fhpbwhy6i5"; })
+  (fetchNuGet { pname = "Humanizer.Core.az"; version = "2.14.1"; sha256 = "138kdhy86afy5n72wy12qlb25q4034z73lz5nbibmkixxdnj9g5r"; })
+  (fetchNuGet { pname = "Humanizer.Core.bg"; version = "2.14.1"; sha256 = "0scwzrvv8332prijkbp4y11n172smjb4sf7ygia6bi3ibhzq7zjy"; })
+  (fetchNuGet { pname = "Humanizer.Core.bn-BD"; version = "2.14.1"; sha256 = "1322kn7ym46mslh32sgwkv07l3jkkx7cw5wjphql2ziphxw536p8"; })
+  (fetchNuGet { pname = "Humanizer.Core.cs"; version = "2.14.1"; sha256 = "1zl3vsdd2pw3nm05qpnr6c75y7gacgaghg9sj07ksvsjmklgqqih"; })
+  (fetchNuGet { pname = "Humanizer.Core.da"; version = "2.14.1"; sha256 = "10rmrvzwp212fpxv0sdq8f0sjymccsdn71k99f845kz0js83r70s"; })
+  (fetchNuGet { pname = "Humanizer.Core.de"; version = "2.14.1"; sha256 = "0j7kld0jdiqwin83arais9gzjj85mpshmxls64yi58qhl7qjzk0j"; })
+  (fetchNuGet { pname = "Humanizer.Core.el"; version = "2.14.1"; sha256 = "143q1321qh5506wwvcpy0fj7hpbd9i1k75247mqs2my05x9vc8n0"; })
+  (fetchNuGet { pname = "Humanizer.Core.es"; version = "2.14.1"; sha256 = "011kscy671mgyx412h55b0x9a1ngmdsgqzqq1w0l10xhf90y4hc8"; })
+  (fetchNuGet { pname = "Humanizer.Core.fa"; version = "2.14.1"; sha256 = "184dxwkf251c27h7gg9y5zciixgcwy1cmdrs0bqrph7gg69kp6yq"; })
+  (fetchNuGet { pname = "Humanizer.Core.fi-FI"; version = "2.14.1"; sha256 = "144jlnlipr3pnbcyhbgrd2lxibx8vy00lp2zn60ihxppgbisircc"; })
+  (fetchNuGet { pname = "Humanizer.Core.fr"; version = "2.14.1"; sha256 = "0klnfy8n659sp8zngd87gy7qakd56dwr1axjjzk0zph1zvww09jq"; })
+  (fetchNuGet { pname = "Humanizer.Core.fr-BE"; version = "2.14.1"; sha256 = "0b70illi4m58xvlqwcvar0smh6292zadzk2r8c25ryijh6d5a9qv"; })
+  (fetchNuGet { pname = "Humanizer.Core.he"; version = "2.14.1"; sha256 = "08xkiv88qqd1b0frpalb2npq9rvz2q1yz48k6dikrjvy6amggirh"; })
+  (fetchNuGet { pname = "Humanizer.Core.hr"; version = "2.14.1"; sha256 = "12djmwxfg03018j2bqq5ikwkllyma8k7zmvpw61vxs7cv4izc6wh"; })
+  (fetchNuGet { pname = "Humanizer.Core.hu"; version = "2.14.1"; sha256 = "0lw13p9b2kbqf96lif5kx59axxiahd617h154iswjfka9kxdw65x"; })
+  (fetchNuGet { pname = "Humanizer.Core.hy"; version = "2.14.1"; sha256 = "1bgm0yabhvsv70amzmkvf3mls32lvd7yyr59yxf3xc96msqczgjh"; })
+  (fetchNuGet { pname = "Humanizer.Core.id"; version = "2.14.1"; sha256 = "1w0bnyac46f2321l09ckb6vz66s1bxl27skfww1iwrmf03i7m2cw"; })
+  (fetchNuGet { pname = "Humanizer.Core.is"; version = "2.14.1"; sha256 = "10w1fprlhxm1qy3rh0qf6z86ahrv8fcza3wrsx55idlmar1x9jyz"; })
+  (fetchNuGet { pname = "Humanizer.Core.it"; version = "2.14.1"; sha256 = "1msrmih8cp7r4yj7r85kr0l5h4yln80450mivliy1x322dav8xz2"; })
+  (fetchNuGet { pname = "Humanizer.Core.ja"; version = "2.14.1"; sha256 = "04ry6z0v85y4y5vzbqlbxppfdm04i02dxbxaaykbps09rwqaa250"; })
+  (fetchNuGet { pname = "Humanizer.Core.ko-KR"; version = "2.14.1"; sha256 = "156641v0ilrpbzprscvbzfha57pri4y1i66n9v056nc8bm10ggbg"; })
+  (fetchNuGet { pname = "Humanizer.Core.ku"; version = "2.14.1"; sha256 = "1scz21vgclbm1xhaw89f0v8s0vx46yv8yk3ij0nr6shsncgq9f7h"; })
+  (fetchNuGet { pname = "Humanizer.Core.lv"; version = "2.14.1"; sha256 = "1909dsbxiv2sgj6myfhn8lbbmvkp2hjahj0knawypyq3jw9sq86g"; })
+  (fetchNuGet { pname = "Humanizer.Core.ms-MY"; version = "2.14.1"; sha256 = "1dmjrxb0kb297ycr8xf7ni3l7y4wdqrdhqbhy8xnm8dx90nmj9x5"; })
+  (fetchNuGet { pname = "Humanizer.Core.mt"; version = "2.14.1"; sha256 = "0b183r1apzfa1hasimp2f27yfjkfp87nfbd8qdyrqdigw6nzcics"; })
+  (fetchNuGet { pname = "Humanizer.Core.nb"; version = "2.14.1"; sha256 = "12rd75f83lv6z12b5hbwnarv3dkk29pvc836jpg2mzffm0g0kxj2"; })
+  (fetchNuGet { pname = "Humanizer.Core.nb-NO"; version = "2.14.1"; sha256 = "1n033yfw44sjf99mv51c53wggjdffz8b9wv7gwm3q7i6g7ck4vv1"; })
+  (fetchNuGet { pname = "Humanizer.Core.nl"; version = "2.14.1"; sha256 = "0q4231by40bsr6mjy93n0zs365pz6da32pwkxcz1cc2hfdlkn0vd"; })
+  (fetchNuGet { pname = "Humanizer.Core.pl"; version = "2.14.1"; sha256 = "0h2wbwrlcmjk8b2mryyd8rbb1qmripvg0zyg61gg0hifiqfg3cr2"; })
+  (fetchNuGet { pname = "Humanizer.Core.pt"; version = "2.14.1"; sha256 = "0pg260zvyhqz8h1c96px1vs9q5ywvd0j2ixsq21mj96dj7bl5fay"; })
+  (fetchNuGet { pname = "Humanizer.Core.ro"; version = "2.14.1"; sha256 = "04mr28bjcb9hs0wmpb4nk2v178i0fjr0ymc78dv9bbqkmrzfsmcn"; })
+  (fetchNuGet { pname = "Humanizer.Core.ru"; version = "2.14.1"; sha256 = "060abvk7mrgawipjgw0h4hrvizby7acmj58w2g35fv54g43isgcl"; })
+  (fetchNuGet { pname = "Humanizer.Core.sk"; version = "2.14.1"; sha256 = "182xiqf71kiqp42b8yqrag6z57wzqraqi10bnhx0crrc1gxq8v0j"; })
+  (fetchNuGet { pname = "Humanizer.Core.sl"; version = "2.14.1"; sha256 = "12ygvzyqa0km7a0wz42zssq8qqakvghh96x1ng7qvwcrna3v2rdi"; })
+  (fetchNuGet { pname = "Humanizer.Core.sr"; version = "2.14.1"; sha256 = "1ggj15qksyr16rilq2w76x38bxp6a6z75b30c9b7w5ni88nkgc7x"; })
+  (fetchNuGet { pname = "Humanizer.Core.sr-Latn"; version = "2.14.1"; sha256 = "0lwr0gnashirny8lgaw0qnbb7x0qrjg8fs11594x8l7li3mahzz3"; })
+  (fetchNuGet { pname = "Humanizer.Core.sv"; version = "2.14.1"; sha256 = "1c7yx59haikdqx7k7vqll6223jjmikgwbl3dzmrcs3laywgfnmgn"; })
+  (fetchNuGet { pname = "Humanizer.Core.th-TH"; version = "2.14.1"; sha256 = "0kyyi5wc23i2lcag3zvrhga9gsnba3ahl4kdlaqvvg2jhdfarl4m"; })
+  (fetchNuGet { pname = "Humanizer.Core.tr"; version = "2.14.1"; sha256 = "0rdvp0an263b2nj3c5v11hvdwgmj86ljf2m1h3g1x28pygbcx6am"; })
+  (fetchNuGet { pname = "Humanizer.Core.uk"; version = "2.14.1"; sha256 = "0a2p6mhh0ajn0y7x98zbfasln1l04iiknd50sgf3svna99wybnxd"; })
+  (fetchNuGet { pname = "Humanizer.Core.uz-Cyrl-UZ"; version = "2.14.1"; sha256 = "1jfzfgnk6wz5na2md800vq0djm6z194x618yvwxbnk2c7wikbjj2"; })
+  (fetchNuGet { pname = "Humanizer.Core.uz-Latn-UZ"; version = "2.14.1"; sha256 = "0vimhw500rq60naxfari8qm6gjmjm8h9j6c04k67fs447djy8ndi"; })
+  (fetchNuGet { pname = "Humanizer.Core.vi"; version = "2.14.1"; sha256 = "1yr0l73cy2qypkssmmjwfbbqgdplam62dqnzk9vx6x47dzpys077"; })
+  (fetchNuGet { pname = "Humanizer.Core.zh-CN"; version = "2.14.1"; sha256 = "1k6nnawd016xpwgzdzy84z1lcv2vc1cygcksw19wbgd8dharyyk7"; })
+  (fetchNuGet { pname = "Humanizer.Core.zh-Hans"; version = "2.14.1"; sha256 = "0zn99311zfn602phxyskfjq9vly0w5712z6fly8r4q0h94qa8c85"; })
+  (fetchNuGet { pname = "Humanizer.Core.zh-Hant"; version = "2.14.1"; sha256 = "0qxjnbdj645l5sd6y3100yyrq1jy5misswg6xcch06x8jv7zaw1p"; })
   (fetchNuGet { pname = "JetBrains.Annotations"; version = "2021.3.0"; sha256 = "01ssylllbwpana2w3iybi533zlvcsbhzjc8kr0g4kg307kjbfn8v"; })
+  (fetchNuGet { pname = "managed-midi"; version = "1.9.14"; sha256 = "025jh146zy98699y4civ7nxlkx312lwkl4sr8pha626q7q1kg89h"; })
   (fetchNuGet { pname = "ManagedBass"; version = "3.1.0"; sha256 = "0p4kzpq86h00z7rwzmwxyk1yg627mm5376ssjv1wgqgls0dl7gkh"; })
   (fetchNuGet { pname = "ManagedBass.Fx"; version = "3.1.0"; sha256 = "130rrf6sb64dcq58mr1gigma3pzr7hg5mxn5fbryg375x3vphbs8"; })
   (fetchNuGet { pname = "ManagedBass.Mix"; version = "3.1.0"; sha256 = "1ppxczh1i67k5xicr0q4n0k7zdzghs99wwkcpjmh726hkdsshnib"; })
-  (fetchNuGet { pname = "managed-midi"; version = "1.9.14"; sha256 = "025jh146zy98699y4civ7nxlkx312lwkl4sr8pha626q7q1kg89h"; })
   (fetchNuGet { pname = "Markdig"; version = "0.23.0"; sha256 = "1bwn885w7balwncmr764vidyyp9bixqlq6r3lhsapj8ykrpxxa70"; })
-  (fetchNuGet { pname = "MessagePack"; version = "2.3.85"; sha256 = "0n7kv4i6knhv1dd35cv45sfpidsiy9albfdmbrdschykd1mzxmiy"; })
-  (fetchNuGet { pname = "MessagePack.Annotations"; version = "2.3.85"; sha256 = "0axjgy9r533bw00lflnc6acjyza76mf2x1nn6fw7qacvak9rqxm3"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; version = "5.0.12"; sha256 = "1asph5v7kgmscfgsyv9gg7cwvg52gnm6m0ldm2m4pfkpsxqyp2mi"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.Connections.Abstractions"; version = "5.0.11"; sha256 = "0x6c6m8s4mq1j21sys8j1xp8sqvy5n3shcpcm0yyx4r2ld2cpdkr"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Connections.Client"; version = "5.0.11"; sha256 = "1b60rhlbn8s4c39nl2kb1xfq0m3kzy407hdvz2s5r9qc8y9p55ps"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Connections.Common"; version = "5.0.11"; sha256 = "1rq6lildicnz6ngrf1m46ynya0hbn0hzazdqp6c3lkmkw3pgd8wp"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Features"; version = "5.0.11"; sha256 = "0n09fldmy60ggffznfwzr99hfpa0p9qxq4hp2zy4j94cmqkqm1pg"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Client"; version = "5.0.11"; sha256 = "1iyxkr2lks5xfay4h70z94dnjm5dpbygyyi9krrx1lin1na235ly"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Client.Core"; version = "5.0.11"; sha256 = "13hpp6sq0ad56v1l09gq4mnmj5y1f9lykd2x12hjrdpk3g7gqdix"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Common"; version = "5.0.11"; sha256 = "1vsskslaz7428f13q0hjf81hvfxip9wsc53z5j37ysk9qmixlnyd"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.Json"; version = "5.0.11"; sha256 = "0vdr2n9lfjybkv0m21lhpnxv0shlyfnyffv32vziiglhssdza15g"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.MessagePack"; version = "5.0.11"; sha256 = "0w60z54wxv1nndv7mz9rqswdh8k4rxmgihnxkirp4gr0idr7ln7j"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson"; version = "5.0.11"; sha256 = "1qrmrkdrzm4bn5zq6a1dk88rpb6pajcs6jh23h43yny68y80jcnr"; })
-  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "1.0.0"; sha256 = "00dx5armvkqjxvkldz3invdlck9nj7w21dlsr2aqp1rqbyrbsbbh"; })
+  (fetchNuGet { pname = "MessagePack"; version = "2.4.35"; sha256 = "0y8pz073ync51cv39lxldc797nmcm39r4pdhy2il6r95rppjqg5h"; })
+  (fetchNuGet { pname = "MessagePack.Annotations"; version = "2.4.35"; sha256 = "1jny2r6rwq7xzwymm779w9x8a5rhyln97mxzplxwd53wwbb0wbzd"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; version = "6.0.6"; sha256 = "0ndah9cqkgswhi60wrnni10j1d2hdg8jljij83lk1wbfqbng86jm"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Connections.Abstractions"; version = "6.0.6"; sha256 = "1xdck1rg6flfh8l4gsfcq72yk0vh81k646i503s73573qhlc3hr4"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Connections.Client"; version = "6.0.6"; sha256 = "0jkr96x382hdcjnfw6m8lglamcnrmaxi3pjc6w8si7lgacn6h0jz"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Connections.Common"; version = "6.0.6"; sha256 = "19hsxybw189v07d618pf7n8ib3sgwl6rd3r9dyincbp4qfgp20zr"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Client"; version = "6.0.6"; sha256 = "1cnyw4cx4pvw2086anlz734c60iqb5j9y6xwx26ppgimrm54py3h"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Client.Core"; version = "6.0.6"; sha256 = "0snmcxssxaig920g7vj5hj79f2hyisxj6npy8hgg8v3rh0948iia"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Common"; version = "6.0.6"; sha256 = "0js5n6chb9vrmrn5rxip3d241ml9f091k50k0cak8yvmz7v531x0"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.Json"; version = "6.0.6"; sha256 = "197dx2311dxm1fl22b9x7a8kbsjjgq5r88qk487d337clsbbq4gc"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.MessagePack"; version = "6.0.6"; sha256 = "1lq2l95m1x9xsw8a9dh7dp0pxs4kjjwa6v8l485bj4yx1icb8w0k"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson"; version = "6.0.6"; sha256 = "1ihg09dqsx03z90im0nwyypakz3hla79mjy7mas5rdymnm6k0lbw"; })
   (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "5.0.0"; sha256 = "0cp5jbax2mf6xr3dqiljzlwi05fv6n9a35z337s92jcljiq674kf"; })
-  (fetchNuGet { pname = "Microsoft.Build.Framework"; version = "16.5.0"; sha256 = "1xgr02r7s9i6s70n237hss4yi9zicssia3zd2ny6s8vyxb7jpdyb"; })
-  (fetchNuGet { pname = "Microsoft.Build.Locator"; version = "1.4.1"; sha256 = "0j119rri7a401rca67cxdyrn3rprzdl1b2wrblqc23xsff1xvlrx"; })
-  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.3.2"; sha256 = "162vb5894zxps0cf5n9gc08an7gwybzz87allx3lsszvllr9ldx4"; })
+  (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "6.0.0"; sha256 = "15gqy2m14fdlvy1g59207h5kisznm355kbw010gy19vh47z8gpz3"; })
   (fetchNuGet { pname = "Microsoft.CodeAnalysis.BannedApiAnalyzers"; version = "3.3.3"; sha256 = "1z6x0d8lpcfjr3sxy25493i17vvcg5bsay6c03qan6mnj5aqzw2k"; })
-  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "3.11.0"; sha256 = "0pwidgg4ifm7cirdy3hf61dyvg6lk4vgb6q7lyb4y0h0b6mvkrcl"; })
-  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "3.11.0"; sha256 = "1h16b7dsp1mq7d7picyfhkssqr6xiyywi5x1fd4jwclyrvanyl81"; })
-  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Workspaces"; version = "3.11.0"; sha256 = "16myshcix4a37c4vlig4gi9jnhb6p6py171xgn6b0ab6wz020r71"; })
-  (fetchNuGet { pname = "Microsoft.CodeAnalysis.NetAnalyzers"; version = "5.0.3"; sha256 = "1l0zg9wl8yapjq9g2d979zhsmdkr8kfybmxnl7kvgkgldf114fbg"; })
-  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Workspaces.Common"; version = "3.11.0"; sha256 = "07iaqjdhp55cw3y159i3h4j30l9s69gn5q6rv08bkizv8yk7yhls"; })
-  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Workspaces.MSBuild"; version = "3.11.0"; sha256 = "0jmcjx37b3649b16kisg9pjmz3m86pba9b1p1y0vlq1r4hyzvn3m"; })
-  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
   (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.5.0"; sha256 = "01i28nvzccxbqmiz217fxs6hnjwmd5fafs37rd49a6qp53y6623l"; })
   (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
-  (fetchNuGet { pname = "Microsoft.Data.Sqlite.Core"; version = "2.2.6"; sha256 = "0fx8698k71vzr8pdc6q8bsbzg6r8a42s4hkzmiyv13ibmyb5q68k"; })
+  (fetchNuGet { pname = "Microsoft.Data.Sqlite.Core"; version = "5.0.14"; sha256 = "0zh5g6275sx0zrlyqxymcw9rd78ygisc4wqzvrq5gkh557nrqr0n"; })
   (fetchNuGet { pname = "Microsoft.Diagnostics.NETCore.Client"; version = "0.2.61701"; sha256 = "1ic1607jj4ln8dbibf1fz5v9svk9x2kqlgvhndc6ijaqnbc4wcr1"; })
   (fetchNuGet { pname = "Microsoft.Diagnostics.Runtime"; version = "2.0.161401"; sha256 = "02qcm8nv1ch07g8b0i60ynrjn33b8y5ivyk4rxal3vd9zfi6pvwi"; })
-  (fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "2.1.0"; sha256 = "1qydvyyinj3b5mraazjal3n2k7jqhn05b6n1a2f3qjkqkxi63dmy"; })
-  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore"; version = "2.2.6"; sha256 = "18j2cr50wsikwv7gy3vrjvmpdxckvv537qma8afdpr3yn2klayh5"; })
-  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Abstractions"; version = "2.2.6"; sha256 = "1dyxb5ibx24frlgbqy7zch0falq9p1189zvlbxgl94m0hvpml5j3"; })
-  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Analyzers"; version = "2.2.6"; sha256 = "10f2lxxmh0xrdjvnam31fqfnjkaick23mpfvahj3ca5l07bph0rc"; })
-  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Design"; version = "2.2.6"; sha256 = "0kjjkh1yfb56wnkmciqzfn9vymqfjap364y5amia0lmqmhfz8g7f"; })
-  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Relational"; version = "2.2.6"; sha256 = "0c0z4mrqldjfslyxywb2ydk8hn9ybhkvz6lxx3idrfalq3ni5f1z"; })
-  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Sqlite"; version = "2.2.6"; sha256 = "0z8k5ns841imaqha5abb1ka0rsfzy90k6qkrvix11sp6k9i7lsam"; })
-  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Sqlite.Core"; version = "2.2.6"; sha256 = "0jzqw4672mzxjvzas09sl0zyzzayfgkv003a7bw5g2gjyiphf630"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Abstractions"; version = "2.2.0"; sha256 = "0hhxc5dp52faha1bdqw0k426zicsv6x1kfqi30m9agr0b2hixj52"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Memory"; version = "2.2.0"; sha256 = "0bzrsn5vas86w66bd04xilnlb21nx4l6lz7d3acvy6y8ir2vb5dv"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.Configuration"; version = "2.2.0"; sha256 = "02250qrs3jqqbggfvd0mkim82817f79x6jh8fx2i7r58d0m66qkl"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "2.2.0"; sha256 = "1fv5277hyhfqmc0gqszyqb1ilwnijm8kc9606yia6hwr8pxyg674"; })
+  (fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "3.1.6"; sha256 = "0b9myd7gqbpaw9pkd2bx45jhik9mwj0f1ss57sk2cxmag2lkdws5"; })
+  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore"; version = "5.0.14"; sha256 = "0r2a2lk11g2qx6s1nns3jnxhpifg60qs4lqz6qfcjfg24nw2lp2b"; })
+  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Abstractions"; version = "5.0.14"; sha256 = "1sbv1bysybbn5s7kzmxy0rc4khwxj598ajdgz533d6vj66y7v4f2"; })
+  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Analyzers"; version = "5.0.14"; sha256 = "0vfc5dv1bc1ghv87rpq581jxy4vyfscdw943jrb0gbgcsbbbkw5s"; })
+  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Design"; version = "5.0.14"; sha256 = "0lbbj3lixrplq01kgg5i7siayh7jqrld0cmmylhkgncj45jkk4d5"; })
+  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Relational"; version = "5.0.14"; sha256 = "08008jsk46a6lvz2jjj5rjp6g69r1d4zfdwnff9z1nyi99hnsm5h"; })
+  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Sqlite"; version = "5.0.14"; sha256 = "0x02b0x7gwgq2dymkxcw8qs6fcaxbkv3xckqfhc0amsi6ygcia8f"; })
+  (fetchNuGet { pname = "Microsoft.EntityFrameworkCore.Sqlite.Core"; version = "5.0.14"; sha256 = "0ps8f58nw0xl3mh49a772fc38nsiv7jicg8rbr70rdpls02i3biq"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Abstractions"; version = "5.0.0"; sha256 = "0j83zapqhgqb4v5f6kn891km095pfhvsqha357a86ccclmv2czvb"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Caching.Memory"; version = "5.0.0"; sha256 = "0l8spndl3kvccjlay202msm31iy5iig0i9ddbsdy92wbcjr97lca"; })
   (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "5.0.0"; sha256 = "0fqxkc9pjxkqylsdf26s9q21ciyk56h1w33pz3v1v4wcv8yv1v6k"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Binder"; version = "2.2.0"; sha256 = "10qyjdkymdmag3r807kvbnwag4j3nz65i4cwikbd77jjvz92ya3j"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "2.2.0"; sha256 = "0lvv45rvq1xbf47lz818rjydc776zk8mf7svpzh1dml4qwlx9zck"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Configuration.Abstractions"; version = "6.0.0"; sha256 = "0w6wwxv12nbc3sghvr68847wc9skkdgsicrz3fx4chgng1i3xy0j"; })
   (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "5.0.2"; sha256 = "0db6d1b076nfqfn5mhy63l3gkfn5kr29hwcrx81ldr7y062r1b9y"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "6.0.0"; sha256 = "1wlhb2vygzfdjbdzy7waxblmrx0q3pdcqvpapnpmq9fcx5m8r6w1"; })
   (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "6.0.0-rc.1.21451.13"; sha256 = "0r6945jq7c2f1wjifq514zvngicndjqfnsjya6hqw0yzah0jr56c"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "2.2.0"; sha256 = "1jyzfdr9651h3x6pxwhpfbb9mysfh8f8z1jvy4g117h9790r9zx5"; })
   (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "5.0.0"; sha256 = "17cz6s80va0ch0a6nqa1wbbbp3p8sqxb96lj4qcw67ivkp2yxiyj"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "6.0.0"; sha256 = "1vi67fw7q99gj7jd64gnnfr4d2c0ijpva7g9prps48ja6g91x6a9"; })
   (fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "6.0.0-rc.1.21451.13"; sha256 = "11dg16x6g0gssb143qpghxz1s41himvhr7yhjwxs9hacx4ij2dm1"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "2.1.0"; sha256 = "0dl4qhjgifm6v3jsfzvzkvddyic77ggp9fq49ah661v45gk6ilgd"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "2.2.0"; sha256 = "0bx3ljyvvcbikradq2h583rl72h8bxdz33aghk026cxzpv2mm3wm"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "5.0.0"; sha256 = "1mma1zxi0b40972cwfvkj9y0w9r7vjbi74784jzcb22pric00k5x"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Features"; version = "6.0.6"; sha256 = "0w94hm2r2dsqhd1q8xqf0v9cbf4sxash7pmw9f2pjr91c34lrvw0"; })
   (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "5.0.0"; sha256 = "1qa1l18q2jh9azya8gv1p8anzcdirjzd9dxxisb4911i9m1648i3"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "2.2.0"; sha256 = "02w7hp6jicr7cl5p456k2cmrjvvhm6spg5kxnlncw3b72358m5wl"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "6.0.0"; sha256 = "0fd9jii3y3irfcwlsiww1y9npjgabzarh33rn566wpcz24lijszi"; })
   (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "5.0.0"; sha256 = "1yza38675dbv1qqnnhqm23alv2bbaqxp0pb7zinjmw8j2mr5r6wc"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "6.0.0"; sha256 = "0b75fmins171zi6bfdcq1kcvyrirs8n91mknjnxy4c3ygi1rrnj0"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "6.0.1"; sha256 = "17w4x7iakwpn7crg4yk5qkkv5gkx0lfl6anwwhb1554pwak5cwdz"; })
   (fetchNuGet { pname = "Microsoft.Extensions.ObjectPool"; version = "5.0.11"; sha256 = "0i7li76gmk6hml12aig4cvyvja9mgl16qr8pkwvx5vm6lc9a3nn4"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "2.2.0"; sha256 = "1b20yh03fg4nmmi3vlf6gf13vrdkmklshfzl3ijygcs4c2hly6v0"; })
   (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "5.0.0"; sha256 = "1rdmgpg770x8qwaaa6ryc27zh93p697fcyvn5vkxp0wimlhqkbay"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "2.2.0"; sha256 = "0znah6arbcqari49ymigg3wiy2hgdifz8zsq8vdc3ynnf45r7h0c"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "6.0.0"; sha256 = "008pnk2p50i594ahz308v81a41mbjz9mwcarqhmrjpl2d20c868g"; })
   (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "5.0.0"; sha256 = "0swqcknyh87ns82w539z1mvy804pfwhgzs97cr3nwqk6g5s42gd6"; })
-  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "5.0.1"; sha256 = "01ar5ba2sal9wnpa1xnnikhgb37vzhg2cspz45wf760jflpai2vv"; })
-  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; version = "5.0.12"; sha256 = "1fdbrjrmjd31y1amp0inlmki9w3fwzv8nz41pqmc943g3cpmyg9f"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "6.0.0"; sha256 = "1kjiw6s4yfz9gm7mx3wkhp06ghnbs95icj9hi505shz9rjrg42q2"; })
+  (fetchNuGet { pname = "Microsoft.NET.StringTools"; version = "1.0.0"; sha256 = "06yakiyzgss399giivfx6xdrnfxqfsvy5fzm90scjanvandv0sdj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; version = "6.0.6"; sha256 = "0fjbjh7yxqc9h47ix37y963xi9f9y99jvl26cw3x3kvjlb8x0bgj"; })
   (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
   (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
-  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.1.2"; sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.0.0"; sha256 = "1fk2fk2639i7nzy58m9dvpdnzql4vb8yl8vr19r2fp8lmj9w2jr0"; })
   (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "5.0.0"; sha256 = "0mwpwdflidzgzfx2dlpkvvnkgkr2ayaf0s80737h4wa35gaj11rc"; })
-  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "3.1.0"; sha256 = "04cc2wl90p7g9zscnxgyj55vzl7srrrjwadl2dxgicfb2x2499ca"; })
-  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "5.0.0"; sha256 = "0z3qyv7qal5irvabc8lmkh58zsl42mrzd1i0sssvzhv4q4kl3cg6"; })
-  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.0.1"; sha256 = "1n8ap0cmljbqskxpf8fjzn7kh1vvlndsa75k01qig26mbw97k2q7"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.Toolkit.HighPerformance"; version = "7.1.2"; sha256 = "18l950mq0l8s1z771l9p332ni7jryidjh4hi9p37l6p8frcnccxb"; })
   (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.5.0"; sha256 = "1zapbz161ji8h82xiajgriq6zgzmb1f3ar517p2h63plhsq5gh2q"; })
   (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "5.0.0"; sha256 = "102hvhq2gmlcbq8y2cb7hdr2dnmjzfp2k3asr1ycwrfacwyaak7n"; })
   (fetchNuGet { pname = "MongoDB.Bson"; version = "2.11.3"; sha256 = "0fn900i51rwgk3ywpcp4dsf7c9v5glch7hia9l9w8aj8s10qjf1r"; })
-  (fetchNuGet { pname = "Mono.Cecil"; version = "0.9.6.1"; sha256 = "1fr7969h5q611l5227xw6nvv5rzap76vbpk0wg9hxbcxk3hn7szf"; })
   (fetchNuGet { pname = "Mono.Posix.NETStandard"; version = "1.0.0"; sha256 = "0xlja36hwpjm837haq15mjh2prcf68lyrmn72nvgpz8qnf9vappw"; })
-  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.0"; sha256 = "0nmmv4yw7gw04ik8ialj3ak0j6pxa9spih67hnn1h2c38ba8h58k"; })
   (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
   (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.0"; sha256 = "1bc4ba8ahgk15m8k4nd7x406nhi0kwqzbgjk2dmw52ss553xz7iy"; })
   (fetchNuGet { pname = "Newtonsoft.Json"; version = "12.0.2"; sha256 = "0w2fbji1smd2y7x25qqibf1qrznmv4s6s0jvrbvr6alb7mfyqvh5"; })
   (fetchNuGet { pname = "Newtonsoft.Json"; version = "13.0.1"; sha256 = "0fijg0w6iwap8gvzyjnndds0q4b8anwxxvik7y8vgq97dram4srb"; })
-  (fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
   (fetchNuGet { pname = "NuGet.Common"; version = "5.11.0"; sha256 = "1amf6scr5mcjdvd1fflag6i4qjwmydq5qwp6g3f099n901zq0dr3"; })
   (fetchNuGet { pname = "NuGet.Configuration"; version = "5.11.0"; sha256 = "1s9pbrh7xy9jz7npz0sahdsj1cw8gfx1fwf3knv0ms1n0c9bk53l"; })
   (fetchNuGet { pname = "NuGet.DependencyResolver.Core"; version = "5.11.0"; sha256 = "0yllxfv8lx1b7zj114mpxw03186q5ynsdvza6llp3wypxp367inr"; })
@@ -154,31 +141,43 @@
   (fetchNuGet { pname = "NuGet.ProjectModel"; version = "5.11.0"; sha256 = "1i0dcak9qdj8s68c5f3zhrjs5sc4rsim92dy1qw4x9cavv5jrp05"; })
   (fetchNuGet { pname = "NuGet.Protocol"; version = "5.11.0"; sha256 = "041pva6ykc5h6az7bb87mkg32c95cvxlixgspnd34zbdldr4ypdb"; })
   (fetchNuGet { pname = "NuGet.Versioning"; version = "5.11.0"; sha256 = "041351n1rbyqpfxqyxbvjgfrcbbawymbq96givz5pvdbabvyf5vq"; })
-  (fetchNuGet { pname = "NUnit"; version = "3.13.2"; sha256 = "00bkjgarkwbj497da9d7lajala1ns67h1kx53w4bapwkf32jlcvn"; })
-  (fetchNuGet { pname = "OpenTabletDriver"; version = "0.6.0.2"; sha256 = "0blwfs1cacxq0vs6fy7zjnsny8qdsr5jlxix3icmphyqgz0g4g39"; })
-  (fetchNuGet { pname = "OpenTabletDriver.Configurations"; version = "0.6.0.2"; sha256 = "18q6gjayqrwk6n1kf359z94z8zyb3yz4hr1dpgglk51sq6wi2z84"; })
-  (fetchNuGet { pname = "OpenTabletDriver.Native"; version = "0.6.0.2"; sha256 = "12hf4v8j8asc9wlywpykajb8yrzx10w6h11qbykckmrfxvz8pc0a"; })
-  (fetchNuGet { pname = "OpenTabletDriver.Plugin"; version = "0.6.0.2"; sha256 = "0z2n5jysw06zp2cxmfqddbg3g88jdm1irr2hv04q8valq0plaq5c"; })
-  (fetchNuGet { pname = "ppy.LocalisationAnalyser"; version = "2021.1210.0"; sha256 = "0dn6fc31yllr5nizylvkfl2b603b5m9694nsn5mmkh8w43h0rkbq"; })
-  (fetchNuGet { pname = "ppy.osu.Framework"; version = "2022.204.0"; sha256 = "1dwg45k1qhxj4mhxw49djmab800yi7z7qnvl8ipicli4lg9k5lvf"; })
-  (fetchNuGet { pname = "ppy.osu.Framework.NativeLibs"; version = "2021.1221.0"; sha256 = "1ffxp4nsgbqw1f6nypirmc0a3h203qikbmxm2x8w3kgcfga5dx3k"; })
-  (fetchNuGet { pname = "ppy.osu.Game.Resources"; version = "2022.204.0"; sha256 = "1v4kfphjbkcxswx11c7xh93jwpsyvnskc0zia91d5bp5d11y3z32"; })
-  (fetchNuGet { pname = "ppy.osuTK.NS20"; version = "1.0.187"; sha256 = "0ididsxn3005dvs0hvx7bz2xzjsfpa8kmnyfqq4c2ybjxlx15gkw"; })
-  (fetchNuGet { pname = "ppy.SDL2-CS"; version = "1.0.501-alpha"; sha256 = "03ixv0nhszsyyf0bvyd25nkyn3c3cndzbxnva19lagvf0l9gnvjg"; })
-  (fetchNuGet { pname = "ppy.squirrel.windows"; version = "1.9.0.5"; sha256 = "0nmhrg3q6izapfpwdslq80fqkvjj12ad9r94pd0nr2xx1zw0x1zl"; })
-  (fetchNuGet { pname = "Realm"; version = "10.8.0"; sha256 = "1ixpms8x9z5ia9yiqvhmgdlcrjvqrhbqnr8b9z6mlxwcms1z2f45"; })
-  (fetchNuGet { pname = "Realm.Fody"; version = "10.8.0"; sha256 = "0hj3cqan96y01k5qgs0knkqzg3rlr2794az68xqffd2vqphvqvqq"; })
+  (fetchNuGet { pname = "NUnit"; version = "3.13.3"; sha256 = "0wdzfkygqnr73s6lpxg5b1pwaqz9f414fxpvpdmf72bvh4jaqzv6"; })
+  (fetchNuGet { pname = "OpenTabletDriver"; version = "0.6.0.4"; sha256 = "1fk0029b1183pxd6qvzkmy8byx5dhjka3f8x20sd7drbzvqpn6am"; })
+  (fetchNuGet { pname = "OpenTabletDriver.Configurations"; version = "0.6.0.4"; sha256 = "0ahxg4mckzljav5y9g7c1795wgyx2banysg5l7ix3xrl4xmjfmp3"; })
+  (fetchNuGet { pname = "OpenTabletDriver.Native"; version = "0.6.0.4"; sha256 = "1zz9afqbaif6sl7gzayl0ww9jhysi4q06jicmx4g35yk82w07vzn"; })
+  (fetchNuGet { pname = "OpenTabletDriver.Plugin"; version = "0.6.0.4"; sha256 = "0lim2aqw42c1cc73fbbw0h41wcwaxa5d89srzalgg8dpi3bds1mp"; })
+  (fetchNuGet { pname = "ppy.LocalisationAnalyser"; version = "2022.607.0"; sha256 = "07rf10lpnly9d8wf7mwys3jsr4kh0rkf86rjck1hmb73b8524jq9"; })
+  (fetchNuGet { pname = "ppy.osu.Framework"; version = "2022.722.0"; sha256 = "1ps8cfny35hyairw32bjz3cvkdhqch27yfzz83zbv6rdbk687zjq"; })
+  (fetchNuGet { pname = "ppy.osu.Framework.NativeLibs"; version = "2022.525.0"; sha256 = "1zsqj3xng06bb46vg79xx35n2dsh3crqg951r1ga2gxqzgzy4nk0"; })
+  (fetchNuGet { pname = "ppy.osu.Game.Resources"; version = "2022.722.0"; sha256 = "0ilzm9cfvhzxwlv1irzcsbwnm3p5qjbc3hzh5ss992s0y5v6xray"; })
+  (fetchNuGet { pname = "ppy.osuTK.NS20"; version = "1.0.192"; sha256 = "0k6nlsxdl6qa5kbn66nbxh5x43hkgpnz8h3zjlbr5siqdjcrvcvg"; })
+  (fetchNuGet { pname = "ppy.SDL2-CS"; version = "1.0.563-alpha"; sha256 = "09bk81nibfwicjmy8bg4h14myp3x0a7yz4axwdfnk33pj5dsn953"; })
+  (fetchNuGet { pname = "Realm"; version = "10.14.0"; sha256 = "0pbnqp2z27lm6i8j8pbb2500gyyv8gb73kskv49ympvpa09mzcrv"; })
+  (fetchNuGet { pname = "Realm.Fody"; version = "10.14.0"; sha256 = "0k182hsz4b4z61p4hh4ac7l9rg11xhk1r5p0ylhv6qggyq1p2zjj"; })
   (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"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.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.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
   (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
-  (fetchNuGet { pname = "runtime.native.System"; version = "4.0.0"; sha256 = "1ppk69xk59ggacj9n7g6fyxvzmk1g5p4fkijm0d7xqfkig98qrkf"; })
   (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
-  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.1.0"; sha256 = "0d720z4lzyfcabmmnvh0bnj76ll7djhji2hmfh3h44sdkjnlkknk"; })
   (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
-  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.0.1"; sha256 = "1hgv2bmbaskx77v8glh7waxws973jn4ah35zysnkxmf0196sfxg6"; })
   (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
-  (fetchNuGet { pname = "runtime.native.System.Security.Cryptography"; version = "4.0.0"; sha256 = "0k57aa2c3b10wl3hfqbgrl7xq7g8hh3a3ir44b31dn5p61iiw3z9"; })
   (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.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
@@ -189,102 +188,83 @@
   (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
   (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
   (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
-  (fetchNuGet { pname = "Sentry"; version = "3.13.0"; sha256 = "0wnivy7rhzghr94pdczv7kw72y1hv5kp6hw0fkmw1nfgnsh4qjfm"; })
-  (fetchNuGet { pname = "SharpCompress"; version = "0.17.1"; sha256 = "1ffiacghbcnr3fkgvdcad7b1nky54nhmmn2sm43sks9zm8grvva4"; })
-  (fetchNuGet { pname = "SharpCompress"; version = "0.30.1"; sha256 = "1hib2hxjrlikwsczym1qn2slaapgjw8qzd8gmid8bryaz8hv044h"; })
+  (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"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "Sentry"; version = "3.19.0"; sha256 = "0nkkzy7xzaij2cbj7y6v227f2s26fs1i1arbmg8i48q4gllb4pr0"; })
+  (fetchNuGet { pname = "SharpCompress"; version = "0.31.0"; sha256 = "01az7amjkxjbya5rdcqwxzrh2d3kybf1gsd3617rsxvvxadyra1r"; })
+  (fetchNuGet { pname = "SharpCompress"; version = "0.32.1"; sha256 = "0n7iv6kp7gzgqrxxvwdxklvhia3ngpydc6l2nw7hzw637v4bjfl6"; })
   (fetchNuGet { pname = "SharpFNT"; version = "2.0.0"; sha256 = "1bgacgh9hbck0qvji6frbb50sdiqfdng2fvvfgfw8b9qaql91mx0"; })
-  (fetchNuGet { pname = "SixLabors.ImageSharp"; version = "1.0.4"; sha256 = "0fmgn414my76gjgp89qlc210a0lqvnvkvk2fcwnpwxdhqpfvyilr"; })
-  (fetchNuGet { pname = "Splat"; version = "1.6.2"; sha256 = "154w9q0z8697rcpqs4x233crx5ap1z4pl4xc21hsd3csbhw13ykf"; })
-  (fetchNuGet { pname = "SQLitePCLRaw.bundle_green"; version = "1.1.12"; sha256 = "0jbyd25ag15fyn9nawjikv0v5ylk2zh5pxgr6gm4kpbpqys86sq9"; })
-  (fetchNuGet { pname = "SQLitePCLRaw.core"; version = "1.1.12"; sha256 = "03gflsn2wl6v0a8zvh6y5xdhx0xxmfrn6jfldiy829x3fx74zgdl"; })
-  (fetchNuGet { pname = "SQLitePCLRaw.lib.e_sqlite3.linux"; version = "1.1.12"; sha256 = "10mlq914d3zggdjf4bv27w6jx0gqqjf6f91y5ri6pbvaqyhi28h5"; })
-  (fetchNuGet { pname = "SQLitePCLRaw.lib.e_sqlite3.osx"; version = "1.1.12"; sha256 = "1hixg6n9sqllfrcihj145lh1l38inv827808difvazd4zr3mi0z1"; })
-  (fetchNuGet { pname = "SQLitePCLRaw.lib.e_sqlite3.v110_xp"; version = "1.1.12"; sha256 = "107sivk5p38dg1kyvqrxgp67dj89s8l6brf9l52k6s4vrn4hrrk7"; })
-  (fetchNuGet { pname = "SQLitePCLRaw.provider.e_sqlite3.netstandard11"; version = "1.1.12"; sha256 = "0qr2d7ka6f5c7bybdhiyq7nl90c9575szmi0nfpknd9c0w024if4"; })
-  (fetchNuGet { pname = "StbiSharp"; version = "1.0.13"; sha256 = "0yaspwlh4x93d7xnqj5w5pxlwzlv9lixvksyvdh176krfa4mjw3q"; })
-  (fetchNuGet { pname = "System.AppContext"; version = "4.1.0"; sha256 = "0fv3cma1jp4vgj7a8hqc9n7hr1f1kjp541s6z0q1r6nazb4iz9mz"; })
+  (fetchNuGet { pname = "SixLabors.ImageSharp"; version = "2.1.0"; sha256 = "0lmj3qs39v5jcf2rjwav43nqnc7g6sd4l226l2jw85nidzmpvkwr"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.bundle_e_sqlite3"; version = "2.0.4"; sha256 = "1l3vbkwismsx5jcy3d5bj4bzh8bni8bk2gq4lqplz82pz5phjpxm"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.core"; version = "2.0.4"; sha256 = "0lb5vwfl1hd24xzzdaj2p4k2hv2k0i3mgdri6fjj0ssb37mcyir1"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.lib.e_sqlite3"; version = "2.0.4"; sha256 = "0kmx1w5qllmwxldr8338qxwmpfzc6g2lmyrah7wfaxd3mvfzky5c"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.provider.dynamic_cdecl"; version = "2.0.4"; sha256 = "084r98kilpm0q1aw41idq8slncpd7cz65g0m1wr0p8d12x8z5g6j"; })
+  (fetchNuGet { pname = "SQLitePCLRaw.provider.e_sqlite3"; version = "2.0.4"; sha256 = "1vm8w8xvqi11sihdz5s6y4w7ghq4pp5f2ksixdhlbycvs6m4h7i7"; })
+  (fetchNuGet { pname = "StbiSharp"; version = "1.1.0"; sha256 = "0wbw20m7nyhxj32k153l668sxigamlwig0qpz8l8d0jqz35vizm0"; })
   (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
-  (fetchNuGet { pname = "System.Buffers"; version = "4.0.0"; sha256 = "13s659bcmg9nwb6z78971z1lr6bmh2wghxi1ayqyzl4jijd351gr"; })
   (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
   (fetchNuGet { pname = "System.Buffers"; version = "4.4.0"; sha256 = "183f8063w8zqn99pv0ni0nnwh7fgx46qzxamwnans55hhs2l0g19"; })
   (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
   (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
   (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
-  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.0.12"; sha256 = "07y08kvrzpak873pmyxs129g1ch8l27zmg51pcyj2jvq03n0r0fc"; })
   (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
-  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.5.0"; sha256 = "1d5gjn5afnrf461jlxzawcvihz195gayqpcfbv6dd7pxa9ialn06"; })
   (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.7.1"; sha256 = "1nh4nlxfc7lbnbl86wwk1a3jwl6myz5j6hvgh5sp4krim9901hsq"; })
   (fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; })
-  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.5.0"; sha256 = "1jj6f6g87k0iwsgmg3xmnn67a14mq88np0l1ys5zkxhkvbc8976p"; })
   (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "5.0.0"; sha256 = "021h7x98lblq9avm1bgpa4i31c2kgsa7zn4sqhxf39g087ar756j"; })
-  (fetchNuGet { pname = "System.Composition"; version = "1.0.31"; sha256 = "0aa27jz73qb0xm6dyxv22qhfrmyyqjyn2dvvsd9asi82lcdh9i61"; })
-  (fetchNuGet { pname = "System.Composition.AttributedModel"; version = "1.0.31"; sha256 = "1ipyb86hvw754kmk47vjmzyilvj5hymg9nqabz70sbgsz1fygrdv"; })
-  (fetchNuGet { pname = "System.Composition.Convention"; version = "1.0.31"; sha256 = "00gqcdrql7vhynxh4xq0s9j5nw27kghmn2n773v7lhzjh3ash18r"; })
-  (fetchNuGet { pname = "System.Composition.Hosting"; version = "1.0.31"; sha256 = "1f1bnk3j7ndx9r7zpzibmrhw78clys1pspl20j2dhnmkiwhl23vy"; })
-  (fetchNuGet { pname = "System.Composition.Runtime"; version = "1.0.31"; sha256 = "1shfybfzsn4g6aim4pggb5ha31g0fz2kkk0519c4vj6m166g39ws"; })
-  (fetchNuGet { pname = "System.Composition.TypedParts"; version = "1.0.31"; sha256 = "1m4j19zx50lbbdx1xxbgpsd1dai2r3kzkyapw47kdvkb89qjkl63"; })
-  (fetchNuGet { pname = "System.Console"; version = "4.0.0"; sha256 = "0ynxqbc3z1nwbrc11hkkpw9skw116z4y9wjzn7id49p9yi7mzmlf"; })
   (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
   (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.0.11"; sha256 = "0gmjghrqmlgzxivd2xl50ncbglb7ljzb66rlx8ws6dv8jm0d5siz"; })
   (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
-  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.0.0"; sha256 = "1n6c3fbz7v8d3pn77h4v5wvsfrfg7v1c57lg3nff3cjyh597v23m"; })
   (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
-  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.5.0"; sha256 = "1y8m0p3127nak5yspapfnz25qc9x53gqpvwr3hdpsvrcd2r1pgyj"; })
-  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "5.0.0"; sha256 = "0phd2qizshjvglhzws1jd0cq4m54gscz4ychzr3x6wbgl4vvfrga"; })
-  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "5.0.1"; sha256 = "0mzw44wsm87vpslb9sn7rirxynpq9m3b00l7gl0q71m8shfh66qs"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "6.0.0"; sha256 = "0rrihs9lnb1h6x4h0hn6kgfnh58qq7hx8qq99gh6fayx4dcnx3s5"; })
   (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
-  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.1.0"; sha256 = "1d2r76v1x610x61ahfpigda89gd13qydz6vbwzhpqlyvq8jj6394"; })
   (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
-  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
   (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
   (fetchNuGet { pname = "System.Formats.Asn1"; version = "5.0.0"; sha256 = "1axc8z0839yvqi2cb63l73l6d9j6wd20lsbdymwddz9hvrsgfwpn"; })
   (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
   (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
-  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.0.1"; sha256 = "0bv0alrm2ck2zk3rz25lfyk9h42f3ywq77mx1syl6vvyncnpg4qh"; })
   (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
-  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.0.1"; sha256 = "0hjhdb5ri8z9l93bw04s7ynwrjrhx2n0p34sf33a9hl9phz69fyc"; })
   (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
-  (fetchNuGet { pname = "System.Interactive.Async"; version = "3.2.0"; sha256 = "0y5r5y7dlccjpgg17rjrrzi3jya4ysyydamxs33qckkv4jb3534d"; })
   (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
   (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
-  (fetchNuGet { pname = "System.IO.Compression"; version = "4.1.0"; sha256 = "0iym7s3jkl8n0vzm3jd6xqg9zjjjqni05x45dwxyjr2dy88hlgji"; })
   (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
-  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.0.1"; sha256 = "0h72znbagmgvswzr46mihn7xm7chfk2fhrp5krzkjf29pz0i6z82"; })
   (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
-  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
   (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
-  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
   (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
-  (fetchNuGet { pname = "System.IO.Packaging"; version = "5.0.0"; sha256 = "08l85pi8jy65las973szqdnir2awxp0r16h21c0bgrz19gxhs11n"; })
-  (fetchNuGet { pname = "System.IO.Pipelines"; version = "5.0.1"; sha256 = "1zvfcd2l1d5qxifsqd0cjyv57nr61a9ac2ca5jinyqmj32wgjd6v"; })
+  (fetchNuGet { pname = "System.IO.Packaging"; version = "6.0.0"; sha256 = "112nq0k2jc4vh71rifqqmpjxkaanxfapk7g8947jkfgq3lmfmaac"; })
+  (fetchNuGet { pname = "System.IO.Pipelines"; version = "6.0.3"; sha256 = "1jgdazpmwc21dd9naq3l9n5s8a1jnbwlvgkf1pnm0aji6jd4xqdz"; })
   (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
   (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
   (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
   (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
   (fetchNuGet { pname = "System.Linq.Queryable"; version = "4.0.1"; sha256 = "11jn9k34g245yyf260gr3ldzvaqa9477w2c5nhb1p8vjx4xm3qaw"; })
-  (fetchNuGet { pname = "System.Memory"; version = "4.5.1"; sha256 = "0f07d7hny38lq9w69wx4lxkn4wszrqf9m9js6fh9is645csm167c"; })
   (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
   (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
-  (fetchNuGet { pname = "System.Net.Http"; version = "4.1.0"; sha256 = "1i5rqij1icg05j8rrkw4gd4pgia1978mqhjzhsjg69lvwcdfg8yb"; })
   (fetchNuGet { pname = "System.Net.Http"; version = "4.3.0"; sha256 = "1i4gc757xqrzflbk7kc5ksn20kwwfjhw9w7pgdkn19y3cgnl302j"; })
-  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.0.11"; sha256 = "10xzzaynkzkakp7jai1ik3r805zrqjxiz7vcagchyxs2v26a516r"; })
+  (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.Sockets"; version = "4.1.0"; sha256 = "1385fvh8h29da5hh58jm1v78fzi9fi5vj93vhlm2kvqpfahvpqls"; })
   (fetchNuGet { pname = "System.Net.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
   (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; })
   (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
   (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
   (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
   (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
   (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
   (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
   (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
-  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.6.0"; sha256 = "18h375q5bn9h7swxnk4krrxym1dxmi9bm26p89xps9ygrj4q6zqw"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; })
   (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
   (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
   (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
   (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
-  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.6.0"; sha256 = "0hry2k6b7kicg4zxnq0hhn0ys52711pxy7l9v5sp7gvp9cicwpgp"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.7.0"; sha256 = "0mbjfajmafkca47zr8v36brvknzks5a7pgb49kfq2d188pyv6iap"; })
   (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
   (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
   (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.8.1"; sha256 = "17xxl3m99wa4hcpqy42vl8qb1jk2jfq32rj3sfjc1a46hi2si5jj"; })
@@ -297,68 +277,57 @@
   (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
   (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
   (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
-  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.1"; sha256 = "1xcrjx5fwg284qdnxyi2d0lzdm5q4frlpkp0nf6vvkx1kdz2prrf"; })
   (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; })
   (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.3"; sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln"; })
   (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j"; })
   (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
   (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0-rc.1.21451.13"; sha256 = "0v5bc80p35jj5b5xdgsn5r1v4w68gqz0sahi214rprrrlr3sl206"; })
   (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
   (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
-  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
   (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
-  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.1.0"; sha256 = "01kxqppx3dr3b6b286xafqilv4s2n0gqvfgzfd4z943ga9i81is1"; })
   (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
-  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.0.0"; sha256 = "0glmvarf3jz5xh22iy3w9v3wyragcm4hfdr17v90vs7vcrm7fgp6"; })
   (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
-  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.0.1"; sha256 = "1y308zfvy0l5nrn46mqqr4wb4z1xk758pkk8svbz8b5ij7jnv4nn"; })
   (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
-  (fetchNuGet { pname = "System.Runtime.Serialization.Primitives"; version = "4.1.1"; sha256 = "042rfjixknlr6r10vx2pgf56yming8lkjikamg3g4v29ikk78h7k"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "4.5.0"; sha256 = "1wvwanz33fzzbnd2jalar0p0z3x0ba53vzx1kazlskp7pwyhlnq0"; })
   (fetchNuGet { pname = "System.Security.AccessControl"; version = "5.0.0"; sha256 = "17n3lrrl6vahkqmhlpn3w20afgz09n7i6rv0r3qypngwi7wqdr5r"; })
-  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.2.0"; sha256 = "148s9g5dgm33ri7dnh19s4lgnlxbpwvrw2jnzllq2kijj4i4vs85"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
   (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
-  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.2.0"; sha256 = "118jijz446kix20blxip0f0q8mhsh9bz118mwc2ch1p6g7facpzc"; })
   (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
   (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "5.0.0"; sha256 = "06hkx2za8jifpslkh491dfwzm5dxrsyxzj5lsc0achb6yzg4zqlw"; })
-  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.0.0"; sha256 = "1cwv8lqj8r15q81d2pz2jwzzbaji0l28xfrpw29kdpsaypm92z2q"; })
   (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
-  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.0.0"; sha256 = "0a8y1a5wkmpawc787gfmnrnbzdgxmx1a14ax43jf3rj9gxmy3vk4"; })
   (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
-  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.0.0"; sha256 = "16sx3cig3d0ilvzl8xxgffmxbiqx87zdi8fc73i3i7zjih1a7f4q"; })
   (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
   (fetchNuGet { pname = "System.Security.Cryptography.Pkcs"; version = "5.0.0"; sha256 = "0hb2mndac3xrw3786bsjxjfh19bwnr991qib54k6wsqjhjyyvbwj"; })
-  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.0.0"; sha256 = "0i7cfnwph9a10bm26m538h5xcr8b36jscp9sy1zhgifksxz4yixh"; })
   (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
   (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "4.4.0"; sha256 = "1q8ljvqhasyynp94a1d7jknk946m20lkwy2c3wa8zw2pc517fbj6"; })
-  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.1.0"; sha256 = "0clg1bv55mfv5dq00m19cp634zx6inm31kf8ppbq1jgyjf2185dh"; })
   (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.5.0"; sha256 = "0rmj89wsl5yzwh0kqjgx45vzf694v9p92r4x4q6yxldk1cv1hi86"; })
   (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "5.0.0"; sha256 = "1mpk7xj76lxgz97a5yg93wi8lj0l8p157a5d50mmjy3gbz1904q8"; })
   (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
   (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
-  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
   (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "5.0.0"; sha256 = "1bn2pzaaq4wx9ixirr8151vm5hynn3lmrljcgjx9yghmm4k677k0"; })
-  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "6.0.0"; sha256 = "0gm2kiz2ndm9xyzxgi0jhazgwslcs427waxgfa30m7yqll1kcrww"; })
   (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "5.0.0"; sha256 = "144pgy65jc3bkar7d4fg1c0rq6qmkx68gj9k1ldk97558w22v1r1"; })
   (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "5.0.1"; sha256 = "00yg63qnp94q2qryxxggzigi276bibb8b3b96gcvsyrxy7b703n9"; })
-  (fetchNuGet { pname = "System.Text.Json"; version = "4.7.0"; sha256 = "0fp3xrysccm5dkaac4yb51d793vywxks978kkl5x4db9gw29rfdr"; })
+  (fetchNuGet { pname = "System.Text.Encodings.Web"; version = "6.0.0"; sha256 = "06n9ql3fmhpjl32g3492sj181zjml5dlcc5l76xq2h38c4f87sai"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "5.0.0"; sha256 = "1gpgl18z6qrgmqrikgh99xkjwzb1didrjp77bch7nrlra21gr4ks"; })
   (fetchNuGet { pname = "System.Text.Json"; version = "5.0.2"; sha256 = "0vd0wd29cdhgcjngl9sw391sn2s8xm974y15zvym0whsdgjwiqfx"; })
-  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "6.0.5"; sha256 = "12fg196sdq3gcjcz365kypfkkmdrprpcw2fvjnww9jqa4yn8v99l"; })
   (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
   (fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
   (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
-  (fetchNuGet { pname = "System.Threading.Channels"; version = "5.0.0"; sha256 = "11z28x3cawry60l5phkqrvavm0mshz84n4c79hrz0p65lq8jpxgs"; })
+  (fetchNuGet { pname = "System.Threading.Channels"; version = "6.0.0"; sha256 = "1qbyi7yymqc56frqy7awvcqc1m7x3xrpx87a37dgb3mbrjg9hlcj"; })
   (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
   (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
-  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
   (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
-  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.3"; sha256 = "0g7r6hm572ax8v28axrdxz1gnsblg6kszq17g51pj14a5rn2af7i"; })
   (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
-  (fetchNuGet { pname = "System.Threading.Thread"; version = "4.0.0"; sha256 = "1gxxm5fl36pjjpnx1k688dcw8m9l7nmf802nxis6swdaw8k54jzc"; })
-  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.0.1"; sha256 = "15n54f1f8nn3mjcjrlzdg6q3520571y012mx7v991x2fvp73lmg6"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
   (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
-  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
   (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
-  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
   (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
   (fetchNuGet { pname = "TagLibSharp"; version = "2.2.0"; sha256 = "0jb0f84p4jd59ha36spyk9q08g6fjap3xywq32rcs2xwzhhqiq0y"; })
 ]
diff --git a/nixpkgs/pkgs/games/osu-lazer/osu.runtimeconfig.json b/nixpkgs/pkgs/games/osu-lazer/osu.runtimeconfig.json
index a1a197b1b671..4148c494fbc7 100644
--- a/nixpkgs/pkgs/games/osu-lazer/osu.runtimeconfig.json
+++ b/nixpkgs/pkgs/games/osu-lazer/osu.runtimeconfig.json
@@ -1,9 +1,9 @@
 {
   "runtimeOptions": {
-    "tfm": "net5.0",
+    "tfm": "net6.0",
     "framework": {
       "name": "Microsoft.NETCore.App",
-      "version": "5.0.0"
+      "version": "6.0.0"
     }
   }
 }
diff --git a/nixpkgs/pkgs/games/osu-lazer/update.sh b/nixpkgs/pkgs/games/osu-lazer/update.sh
index 21f9eb80f452..ae130e187ccf 100755
--- a/nixpkgs/pkgs/games/osu-lazer/update.sh
+++ b/nixpkgs/pkgs/games/osu-lazer/update.sh
@@ -1,5 +1,5 @@
 #!/usr/bin/env nix-shell
-#!nix-shell -i bash -p curl jq common-updater-scripts nuget-to-nix dotnet-sdk_5
+#!nix-shell -I nixpkgs=../../../. -i bash -p curl jq common-updater-scripts nuget-to-nix dotnet-sdk
 set -eo pipefail
 cd "$(dirname "${BASH_SOURCE[0]}")"
 
@@ -13,7 +13,11 @@ if [[ "$new_version" == "$old_version" ]]; then
 fi
 
 cd ../../..
-update-source-version osu-lazer "$new_version"
+
+if [[ "$1" != "--deps-only" ]]; then
+    update-source-version osu-lazer "$new_version"
+fi
+
 store_src="$(nix-build . -A osu-lazer.src --no-out-link)"
 src="$(mktemp -d /tmp/osu-src.XXX)"
 echo "Temp src dir: $src"
@@ -26,6 +30,7 @@ export DOTNET_NOLOGO=1
 export DOTNET_CLI_TELEMETRY_OPTOUT=1
 
 mkdir ./nuget_tmp.packages
+dotnet --info
 dotnet restore osu.Desktop --packages ./nuget_tmp.packages --runtime linux-x64
 
 nuget-to-nix ./nuget_tmp.packages > "$deps_file"
diff --git a/nixpkgs/pkgs/games/otto-matic/default.nix b/nixpkgs/pkgs/games/otto-matic/default.nix
index e213deabe859..2257b50e0c8d 100644
--- a/nixpkgs/pkgs/games/otto-matic/default.nix
+++ b/nixpkgs/pkgs/games/otto-matic/default.nix
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     owner = "jorio";
     repo = pname;
     rev = version;
-    sha256 = "sha256:1yd4clks7kr2hn69c4q1ykc92sw6axbspambm03viapr834bjz3q";
+    sha256 = "sha256-eHy5yED5qrgHqKuqq1dXhmuR2PQBE5aMhSLPoydlpPk=";
     fetchSubmodules = true;
   };
 
@@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
     mkdir -p $out/share/OttoMatic
     mv Data $out/share/OttoMatic
     install -Dm755 {.,$out/bin}/OttoMatic
-    wrapProgram $out/bin/OttoMatic --run "cd $out/share/OttoMatic"
+    wrapProgram $out/bin/OttoMatic --chdir "$out/share/OttoMatic"
 
     runHook postInstall
   '';
diff --git a/nixpkgs/pkgs/games/papermc/default.nix b/nixpkgs/pkgs/games/papermc/default.nix
index 09dbfb6c3c83..31c9467109e9 100644
--- a/nixpkgs/pkgs/games/papermc/default.nix
+++ b/nixpkgs/pkgs/games/papermc/default.nix
@@ -1,10 +1,10 @@
 { lib, stdenv, fetchurl, bash, jre }:
 let
-  mcVersion = "1.18.1";
-  buildNum = "132";
+  mcVersion = "1.18.2";
+  buildNum = "313";
   jar = fetchurl {
     url = "https://papermc.io/api/v2/projects/paper/versions/${mcVersion}/builds/${buildNum}/downloads/paper-${mcVersion}-${buildNum}.jar";
-    sha256 = "af26babef1e9134804bdf61e14eed7677d603516638f5a2ffe97e176ebd9839b";
+    sha256 = "sha256-wotk0Pu1wKomj83nMCyzzPZ+Y9RkQUbfeWjRGaSt7lE=";
   };
 in stdenv.mkDerivation {
   pname = "papermc";
@@ -29,8 +29,10 @@ in stdenv.mkDerivation {
   meta = {
     description = "High-performance Minecraft Server";
     homepage    = "https://papermc.io/";
+    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
     license     = lib.licenses.gpl3Only;
     platforms   = lib.platforms.unix;
     maintainers = with lib.maintainers; [ aaronjanse neonfuz ];
+    mainProgram = "minecraft-server";
   };
 }
diff --git a/nixpkgs/pkgs/games/performous/default.nix b/nixpkgs/pkgs/games/performous/default.nix
index c4af373cdcdd..10ce4dd06fcd 100644
--- a/nixpkgs/pkgs/games/performous/default.nix
+++ b/nixpkgs/pkgs/games/performous/default.nix
@@ -1,32 +1,57 @@
-{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, gettext
-, glibmm, libxmlxx, pango, librsvg
-, SDL2, glew, boost, ffmpeg, portaudio, libepoxy
+{ lib
+, stdenv
+, fetchFromGitHub
+, SDL2
+, boost
+, cmake
+, ffmpeg
+, gettext
+, glew
+, glibmm
+, libepoxy
+, librsvg
+, libxmlxx
+, pango
+, pkg-config
+, portaudio
 }:
 
 stdenv.mkDerivation rec {
   pname = "performous";
   version = "1.1";
 
-  meta = with lib; {
-    description = "Karaoke, band and dancing game";
-    homepage    = "http://performous.org/";
-    license     = licenses.gpl2Plus;
-    platforms   = platforms.linux;
-  };
-
   src = fetchFromGitHub {
     owner = "performous";
     repo = "performous";
     rev = version;
-    sha256 = "08j0qhr65l7qnd5vxl4l07523qpvdwi31h4vzl3lfiinx1zcgr4x";
+    hash = "sha256-neTHfug2RkcH/ZvAMCJv++IhygGU0L5Ls/jQYjLEQCI=";
   };
 
   patches = [ ./performous-cmake.patch ];
 
-  nativeBuildInputs = [ cmake pkg-config gettext ];
+  nativeBuildInputs = [
+    cmake
+    gettext
+    pkg-config
+  ];
 
   buildInputs = [
-    glibmm libxmlxx pango librsvg
-    SDL2 glew boost ffmpeg portaudio libepoxy
+    SDL2
+    boost
+    ffmpeg
+    glew
+    glibmm
+    libepoxy
+    librsvg
+    libxmlxx
+    pango
+    portaudio
   ];
+
+  meta = with lib; {
+    homepage = "http://performous.org/";
+    description = "Karaoke, band and dancing game";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+  };
 }
diff --git a/nixpkgs/pkgs/games/planetaryannihilation/default.nix b/nixpkgs/pkgs/games/planetaryannihilation/default.nix
index 2debd15f814e..73adffab475a 100644
--- a/nixpkgs/pkgs/games/planetaryannihilation/default.nix
+++ b/nixpkgs/pkgs/games/planetaryannihilation/default.nix
@@ -23,12 +23,12 @@ stdenv.mkDerivation rec {
     ln -s ${systemd}/lib/libudev.so.1 $out/lib/libudev.so.0
 
     patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$out/PA"
-    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc.lib xorg.libXdamage xorg.libXfixes gtk2 glib stdenv.glibc.out "$out" xorg.libXext pango udev xorg.libX11 xorg.libXcomposite alsa-lib atk nspr fontconfig cairo pango nss freetype gnome2.GConf gdk-pixbuf xorg.libXrender ]}:{stdenv.cc.cc.lib}/lib64:${stdenv.glibc.out}/lib64" "$out/host/CoherentUI_Host"
+    patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc.lib xorg.libXdamage xorg.libXfixes gtk2 glib stdenv.cc.libc "$out" xorg.libXext pango udev xorg.libX11 xorg.libXcomposite alsa-lib atk nspr fontconfig cairo pango nss freetype gnome2.GConf gdk-pixbuf xorg.libXrender ]}:{stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64" "$out/host/CoherentUI_Host"
 
-    wrapProgram $out/PA --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc.lib stdenv.glibc.out xorg.libX11 xorg.libXcursor gtk2 glib curl "$out" ]}:${stdenv.cc.cc.lib}/lib64:${stdenv.glibc.out}/lib64"
+    wrapProgram $out/PA --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc.lib stdenv.cc.libc xorg.libX11 xorg.libXcursor gtk2 glib curl "$out" ]}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64"
 
     for f in $out/lib/*; do
-      patchelf --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc.lib curl xorg.libX11 stdenv.glibc.out xorg.libXcursor "$out" ]}:${stdenv.cc.cc.lib}/lib64:${stdenv.glibc.out}/lib64" $f
+      patchelf --set-rpath "${lib.makeLibraryPath [ stdenv.cc.cc.lib curl xorg.libX11 stdenv.cc.libc xorg.libXcursor "$out" ]}:${stdenv.cc.cc.lib}/lib64:${stdenv.cc.libc}/lib64" $f
     done
   '';
 
diff --git a/nixpkgs/pkgs/games/pokerth/default.nix b/nixpkgs/pkgs/games/pokerth/default.nix
index ffae1b5cd8f6..f07b2a614d48 100644
--- a/nixpkgs/pkgs/games/pokerth/default.nix
+++ b/nixpkgs/pkgs/games/pokerth/default.nix
@@ -59,7 +59,7 @@ mkDerivation rec {
     "pokerth.pro"
   ];
 
-  NIX_CFLAGS_COMPILE = "-I${SDL.dev}/include/SDL";
+  NIX_CFLAGS_COMPILE = "-I${lib.getDev SDL}/include/SDL";
 
   meta = with lib; {
     homepage = "https://www.pokerth.net";
diff --git a/nixpkgs/pkgs/games/pokete/default.nix b/nixpkgs/pkgs/games/pokete/default.nix
new file mode 100644
index 000000000000..391faaa52b76
--- /dev/null
+++ b/nixpkgs/pkgs/games/pokete/default.nix
@@ -0,0 +1,54 @@
+{ lib
+, python3
+, fetchFromGitHub
+, testers
+, pokete
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "pokete";
+  version = "0.8.2";
+
+  format = "other";
+
+  src = fetchFromGitHub {
+    owner = "lxgr-linux";
+    repo = "pokete";
+    rev = "v${version}";
+    sha256 = "sha256-carQ/m7akdXLO4h5o0cE0EiQmsAyarMAV4AtG3KATYQ=";
+  };
+
+  pythonPath = with python3.pkgs; [
+    scrap-engine
+    pynput
+  ];
+
+  buildPhase = ''
+    ${python3.interpreter} -O -m compileall .
+  '';
+
+  installPhase = ''
+    mkdir -p $out/share/pokete
+    cp -r assets pokete_classes pokete_data mods *.py $out/share/pokete/
+    mkdir -p $out/bin
+    ln -s $out/share/pokete/pokete.py $out/bin/pokete
+  '';
+
+  postFixup = ''
+    wrapPythonProgramsIn $out/share/pokete "$pythonPath"
+  '';
+
+  passthru.tests = {
+    pokete-version = testers.testVersion {
+      package = pokete;
+      command = "pokete --help";
+    };
+  };
+
+  meta = with lib; {
+    description = "A terminal based Pokemon like game";
+    homepage = "https://lxgr-linux.github.io/pokete";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ fgaz ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/polymc/default.nix b/nixpkgs/pkgs/games/polymc/default.nix
index 0ec60d617f02..e2ceec0e970b 100644
--- a/nixpkgs/pkgs/games/polymc/default.nix
+++ b/nixpkgs/pkgs/games/polymc/default.nix
@@ -1,45 +1,40 @@
 { lib
-, mkDerivation
+, stdenv
 , fetchFromGitHub
 , cmake
 , jdk8
 , jdk
 , zlib
 , file
-, makeWrapper
+, wrapQtAppsHook
 , xorg
 , libpulseaudio
 , qtbase
 , libGL
+, quazip
 , glfw
 , openal
 , msaClientID ? ""
+, jdks ? [ jdk jdk8 ]
+, extra-cmake-modules
 }:
 
-mkDerivation rec {
+stdenv.mkDerivation rec {
   pname = "polymc";
-  version = "1.1.0";
+  version = "1.4.1";
 
   src = fetchFromGitHub {
     owner = "PolyMC";
     repo = "PolyMC";
     rev = version;
-    sha256 = "sha256-p5vbpNZI/JiQJclEo/Pu/46qVul+3DAzaoow8jabHrI=";
+    sha256 = "sha256-Pu2Eb3g6gwCZjJN0N6S/N82eBMLduQQUzXo8nMmtE+Y=";
     fetchSubmodules = true;
   };
 
-  nativeBuildInputs = [ cmake file makeWrapper ];
-  buildInputs = [ qtbase jdk8 zlib ];
+  nativeBuildInputs = [ extra-cmake-modules cmake file jdk wrapQtAppsHook ];
+  buildInputs = [ qtbase zlib quazip ];
 
-  postPatch = ''
-    # hardcode jdk paths
-    substituteInPlace launcher/java/JavaUtils.cpp \
-      --replace 'scanJavaDir("/usr/lib/jvm")' 'javas.append("${jdk}/lib/openjdk/bin/java")' \
-      --replace 'scanJavaDir("/usr/lib32/jvm")' 'javas.append("${jdk8}/lib/openjdk/bin/java")'
-  '';
-
-  cmakeFlags = [ "-DLauncher_PORTABLE=0" ] ++
-               lib.optionals (msaClientID != "") [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ];
+  cmakeFlags = lib.optionals (msaClientID != "") [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ];
 
   dontWrapQtApps = true;
 
@@ -54,12 +49,13 @@ mkDerivation rec {
       libGL
       glfw
       openal
+      stdenv.cc.cc.lib
     ];
   in ''
     # xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128
-    wrapProgram $out/bin/polymc \
-      "''${qtWrapperArgs[@]}" \
-      --set GAME_LIBRARY_PATH /run/opengl-driver/lib:${libpath} \
+    wrapQtApp $out/bin/polymc \
+      --set LD_LIBRARY_PATH /run/opengl-driver/lib:${libpath} \
+      --prefix POLYMC_JAVA_PATHS : ${lib.makeSearchPath "bin/java" jdks} \
       --prefix PATH : ${lib.makeBinPath [ xorg.xrandr ]}
   '';
 
@@ -73,7 +69,7 @@ mkDerivation rec {
     '';
     platforms = platforms.linux;
     changelog = "https://github.com/PolyMC/PolyMC/releases/tag/${version}";
-    license = licenses.gpl3Plus;
+    license = licenses.gpl3Only;
     maintainers = with maintainers; [ cleverca22 starcraft66 ];
   };
 }
diff --git a/nixpkgs/pkgs/games/prboom-plus/default.nix b/nixpkgs/pkgs/games/prboom-plus/default.nix
new file mode 100644
index 000000000000..a249a4585bd8
--- /dev/null
+++ b/nixpkgs/pkgs/games/prboom-plus/default.nix
@@ -0,0 +1,62 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, SDL2
+, SDL2_mixer
+, SDL2_image
+, SDL2_net
+, fluidsynth
+, soundfont-fluid
+, portmidi
+, dumb
+, libvorbis
+, libmad
+, pcre
+}:
+
+stdenv.mkDerivation rec {
+  pname = "prboom-plus";
+  version = "2.6.2";
+
+  src = fetchFromGitHub {
+    owner = "coelckers";
+    repo = "prboom-plus";
+    rev = "v${version}";
+    sha256 = "iK70PMRLJiZHcK1jCQ2s88LgEMbcfG2pXjwCDVG7zUM=";
+  };
+
+  sourceRoot = "source/prboom2";
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  buildInputs = [
+    SDL2
+    SDL2_mixer
+    SDL2_image
+    SDL2_net
+    fluidsynth
+    portmidi
+    dumb
+    libvorbis
+    libmad
+    pcre
+  ];
+
+  # Fixes impure path to soundfont
+  prePatch = ''
+    substituteInPlace src/m_misc.c --replace \
+      "/usr/share/sounds/sf3/default-GM.sf3" \
+      "${soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/coelckers/prboom-plus";
+    description = "An advanced, Vanilla-compatible Doom engine based on PrBoom";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.ashley ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/prboom/default.nix b/nixpkgs/pkgs/games/prboom/default.nix
deleted file mode 100644
index 8adc9645b7ae..000000000000
--- a/nixpkgs/pkgs/games/prboom/default.nix
+++ /dev/null
@@ -1,35 +0,0 @@
-{ lib, stdenv, fetchurl, SDL, SDL_mixer, SDL_net
-, libGLU ? null
-, libGL ? null
-, useOpenGL ? stdenv.hostPlatform == stdenv.buildPlatform
-}:
-
-assert useOpenGL -> libGL != null && libGLU != null;
-
-stdenv.mkDerivation rec {
-  pname = "prboom";
-  version = "2.5.0";
-  src = fetchurl {
-    url = "mirror://sourceforge/prboom/prboom-${version}.tar.gz";
-    sha256 = "1bjb04q8dk232956k30qlpq6q0hxb904yh1nflr87jcc1x3iqv12";
-  };
-
-  buildInputs = [ SDL SDL_mixer SDL_net ]
-    ++ lib.optionals useOpenGL [ libGL libGLU ];
-
-  doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
-
-  configureFlags = [
-    (lib.enableFeature useOpenGL "gl")
-    (lib.enableFeature doCheck "sdltest")
-  ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
-    "--disable-cpu-opt"
-    "--without-x"
-    "ac_cv_type_uid_t=yes"
-    "ac_cv_type_gid_t=yes"
-  ];
-
-  postInstall = lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
-    mv $out/games/ $out/bin
-  '';
-}
diff --git a/nixpkgs/pkgs/games/purpur/default.nix b/nixpkgs/pkgs/games/purpur/default.nix
index b12c54449a48..e28106183e85 100644
--- a/nixpkgs/pkgs/games/purpur/default.nix
+++ b/nixpkgs/pkgs/games/purpur/default.nix
@@ -34,8 +34,10 @@ stdenv.mkDerivation rec {
       gameplay features, and performance built on top of Airplane.
     '';
     homepage = "https://purpurmc.org/";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.mit;
     platforms = platforms.unix;
     maintainers = with maintainers; [ jyooru ];
+    mainProgram = "minecraft-server";
   };
 }
diff --git a/nixpkgs/pkgs/games/qqwing/default.nix b/nixpkgs/pkgs/games/qqwing/default.nix
index 3fadd73ce18e..244a826cb165 100644
--- a/nixpkgs/pkgs/games/qqwing/default.nix
+++ b/nixpkgs/pkgs/games/qqwing/default.nix
@@ -21,7 +21,8 @@ stdenv.mkDerivation rec {
       --replace "sudo " ""
   '';
 
-  buildInputs = [ perl autoconf automake libtool ];
+  nativeBuildInputs = [ autoconf automake ];
+  buildInputs = [ perl libtool ];
 
   makeFlags = [ "prefix=$(out)" "tgz" ];
 
diff --git a/nixpkgs/pkgs/games/quake2/yquake2/default.nix b/nixpkgs/pkgs/games/quake2/yquake2/default.nix
index d251c48d3823..7d75b4cc1d8e 100644
--- a/nixpkgs/pkgs/games/quake2/yquake2/default.nix
+++ b/nixpkgs/pkgs/games/quake2/yquake2/default.nix
@@ -1,63 +1,55 @@
-{ stdenv, lib, fetchFromGitHub, buildEnv, cmake, makeWrapper
+{ stdenv, lib, fetchFromGitHub, buildEnv, makeWrapper
 , SDL2, libGL, curl
-, oggSupport ? true, libogg, libvorbis
 , openalSupport ? true, openal
-, zipSupport ? true, zlib
 , Cocoa, OpenAL
 }:
 
 let
-  mkFlag = b: if b then "ON" else "OFF";
+  mkFlag = b: if b then "yes" else "no";
 
-  games = import ./games.nix { inherit stdenv lib fetchFromGitHub cmake; };
+  games = import ./games.nix { inherit stdenv lib fetchFromGitHub; };
 
   wrapper = import ./wrapper.nix { inherit stdenv lib buildEnv makeWrapper yquake2; };
 
   yquake2 = stdenv.mkDerivation rec {
     pname = "yquake2";
-    version = "8.00";
+    version = "8.01";
 
     src = fetchFromGitHub {
       owner = "yquake2";
       repo = "yquake2";
       rev = "QUAKE2_${builtins.replaceStrings ["."] ["_"] version}";
-      sha256 = "0xnpmh0pl1095dykhc76rp242x587yh9zh6wayqzaam6cn3xlz3w";
+      sha256 = "1dll5lx4bnls5w5f2zwjhwpcpxa97rjn6ymb2v3vrjm19jbd16yd";
     };
 
     postPatch = ''
-      substituteInPlace src/common/filesystem.c \
-        --replace /usr/share/games/quake2 $out/share/games/quake2
+      substituteInPlace src/client/curl/qcurl.c \
+        --replace "\"libcurl.so.3\", \"libcurl.so.4\"" "\"${curl.out}/lib/libcurl.so\", \"libcurl.so.3\", \"libcurl.so.4\""
+    '' + lib.optionalString (openalSupport && !stdenv.isDarwin) ''
+      substituteInPlace Makefile \
+        --replace "\"libopenal.so.1\"" "\"${openal}/lib/libopenal.so.1\""
     '';
 
-    nativeBuildInputs = [ cmake ];
-
     buildInputs = [ SDL2 libGL curl ]
       ++ lib.optionals stdenv.isDarwin [ Cocoa OpenAL ]
-      ++ lib.optionals oggSupport [ libogg libvorbis ]
-      ++ lib.optional openalSupport openal
-      ++ lib.optional zipSupport zlib;
-
-    cmakeFlags = [
-      "-DCMAKE_BUILD_TYPE=Release"
-      "-DOGG_SUPPORT=${mkFlag oggSupport}"
-      "-DOPENAL_SUPPORT=${mkFlag openalSupport}"
-      "-DZIP_SUPPORT=${mkFlag zipSupport}"
-      "-DSYSTEMWIDE_SUPPORT=ON"
+      ++ lib.optional openalSupport openal;
+
+    makeFlags = [
+      "WITH_OPENAL=${mkFlag openalSupport}"
+      "WITH_SYSTEMWIDE=yes"
+      "WITH_SYSTEMDIR=$\{out}/share/games/quake2"
     ];
 
-    preConfigure = ''
-      # Since we can't expand $out in `cmakeFlags`
-      cmakeFlags="$cmakeFlags -DSYSTEMDIR=$out/share/games/quake2"
-    '';
+    enableParallelBuilding = true;
 
     installPhase = ''
       # Yamagi Quake II expects all binaries (executables and libs) to be in the
       # same directory.
-      mkdir -p $out/bin $out/lib/yquake2 $out/share/games/quake2
+      mkdir -p $out/bin $out/lib/yquake2 $out/share/games/quake2/baseq2
       cp -r release/* $out/lib/yquake2
       ln -s $out/lib/yquake2/quake2 $out/bin/yquake2
       ln -s $out/lib/yquake2/q2ded $out/bin/yq2ded
-      cp $src/stuff/yq2.cfg $out/share/games/quake2
+      cp $src/stuff/yq2.cfg $out/share/games/quake2/baseq2
     '';
 
     meta = with lib; {
diff --git a/nixpkgs/pkgs/games/quake2/yquake2/games.nix b/nixpkgs/pkgs/games/quake2/yquake2/games.nix
index 0c9b24963ba7..c78689971a63 100644
--- a/nixpkgs/pkgs/games/quake2/yquake2/games.nix
+++ b/nixpkgs/pkgs/games/quake2/yquake2/games.nix
@@ -1,4 +1,4 @@
-{ stdenv, lib, fetchFromGitHub, cmake }:
+{ stdenv, lib, fetchFromGitHub }:
 
 let
   games = {
@@ -37,11 +37,9 @@ let
       rev = "${lib.toUpper id}_${builtins.replaceStrings ["."] ["_"] version}";
     };
 
-    nativeBuildInputs = [ cmake ];
-
     installPhase = ''
       mkdir -p $out/lib/yquake2/${id}
-      cp Release/* $out/lib/yquake2/${id}
+      cp release/* $out/lib/yquake2/${id}
     '';
 
     meta = with lib; {
diff --git a/nixpkgs/pkgs/games/quake3/quake3e/default.nix b/nixpkgs/pkgs/games/quake3/quake3e/default.nix
index 7a1da6f6398c..2346e6022d94 100644
--- a/nixpkgs/pkgs/games/quake3/quake3e/default.nix
+++ b/nixpkgs/pkgs/games/quake3/quake3e/default.nix
@@ -1,31 +1,44 @@
-{ lib, stdenv, curl, libGL, libX11, libXxf86dga, alsa-lib, libXrandr, libXxf86vm, libXext, fetchFromGitHub }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper
+, curl, libGL, libX11, libXxf86dga, alsa-lib, libXrandr, libXxf86vm, libXext, SDL2, glibc
+}:
 
 stdenv.mkDerivation rec {
   pname = "Quake3e";
-  version = "2020-04-04";
+  version = "2022-04-01-dev";
 
   src = fetchFromGitHub {
     owner = "ec-";
     repo = pname;
-    rev = version;
-    sha256 = "1jvk8qd0mi0x8lslknhkfd8h6ridwca34c6qahsbmmpcgsvdv16s";
+    rev = "c6cec00b858aa5955eb1d6eb65b9bfd41fd869cb";
+    sha256 = "0qd13fndbhgkkmhxbprpzmj2l2v9ihacxagpdqi9sg9nrzvahr9h";
   };
 
-  buildInputs = [ curl libGL libX11 libXxf86dga alsa-lib libXrandr libXxf86vm libXext ];
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ curl libGL libX11 libXxf86dga alsa-lib libXrandr libXxf86vm libXext SDL2 glibc ];
+  NIX_CFLAGS_COMPILE = "-I${SDL2.dev}/include/SDL2";
   enableParallelBuilding = true;
 
   postPatch = ''
     sed -i -e 's#OpenGLLib = dlopen( dllname#OpenGLLib = dlopen( "${libGL}/lib/libGL.so"#' code/unix/linux_qgl.c
+    sed -i -e 's#Sys_LoadLibrary( "libpthread.so.0" )#Sys_LoadLibrary( "${glibc}/lib/libpthread.so.0" )#' code/unix/linux_snd.c
     sed -i -e 's#Sys_LoadLibrary( "libasound.so.2" )#Sys_LoadLibrary( "${alsa-lib}/lib/libasound.so.2" )#' code/unix/linux_snd.c
+    sed -i -e 's#Sys_LoadLibrary( "libXxf86dga.so.1" )#Sys_LoadLibrary( "${libXxf86dga}/lib/libXxf86dga.so.1" )#' code/unix/x11_dga.c
     sed -i -e 's#Sys_LoadLibrary( "libXrandr.so.2" )#Sys_LoadLibrary( "${libXrandr}/lib/libXrandr.so.2" )#' code/unix/x11_randr.c
     sed -i -e 's#Sys_LoadLibrary( "libXxf86vm.so.1" )#Sys_LoadLibrary( "${libXxf86vm}/lib/libXxf86vm.so.1" )#' code/unix/x11_randr.c
-    sed -i -e 's#Sys_LoadLibrary( "libXxf86dga.so.1" )#Sys_LoadLibrary( "${libXxf86dga}/lib/libXxf86dga.so.1" )#' code/unix/x11_dga.c
+    sed -i -e 's#Sys_LoadLibrary( "libXxf86vm.so.1" )#Sys_LoadLibrary( "${libXxf86vm}/lib/libXxf86vm.so.1" )#' code/unix/x11_vidmode.c
     sed -i -e 's#"libcurl.so.4"#"${curl.out}/lib/libcurl.so.4"#' code/client/cl_curl.h
   '';
 
+  # Default value for `USE_SDL` changed (from 0 to 1) in 5f8ce6d (2020-12-26)
+  # Setting `USE_SDL=0` in `makeFlags` doesn't work
+  preConfigure = ''
+    sed -i 's/USE_SDL *= 1/USE_SDL = 0/' Makefile
+  '';
+
   installPhase = ''
-    mkdir -p $out/bin
-    cp build/*/*x64 $out/bin
+    make install DESTDIR=$out/lib
+    makeWrapper $out/lib/quake3e.x64 $out/bin/quake3e
+    makeWrapper $out/lib/quake3e.ded.x64 $out/bin/quake3e.ded
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/games/quakespasm/default.nix b/nixpkgs/pkgs/games/quakespasm/default.nix
index 137b86f57b6b..d130df696b45 100644
--- a/nixpkgs/pkgs/games/quakespasm/default.nix
+++ b/nixpkgs/pkgs/games/quakespasm/default.nix
@@ -6,11 +6,11 @@
 
 stdenv.mkDerivation rec {
   pname = "quakespasm";
-  version = "0.94.3";
+  version = "0.94.7";
 
   src = fetchurl {
     url = "mirror://sourceforge/quakespasm/quakespasm-${version}.tar.gz";
-    sha256 = "sha256-PpX20+XHIF4aRosErKGnylXIqdMtG3Ubsi70zNG9Dq0=";
+    sha256 = "sha256-xkXG+PBCCM+vzSZESgP2kOsD0rSg6pRupJdH5Y+fc/4=";
   };
 
   sourceRoot = "${pname}-${version}/Quake";
@@ -93,6 +93,7 @@ stdenv.mkDerivation rec {
     '';
 
     platforms = platforms.unix;
-    maintainers = with maintainers; [ mikroskeem m3tti ];
+    maintainers = with maintainers; [ mikroskeem ];
+    mainProgram = "quake";
   };
 }
diff --git a/nixpkgs/pkgs/games/quakespasm/vulkan.nix b/nixpkgs/pkgs/games/quakespasm/vulkan.nix
index f3a5c67ba13d..eedab296ce93 100644
--- a/nixpkgs/pkgs/games/quakespasm/vulkan.nix
+++ b/nixpkgs/pkgs/games/quakespasm/vulkan.nix
@@ -1,14 +1,16 @@
-{ lib, stdenv, fetchFromGitHub, makeWrapper, SDL2, gzip, libvorbis, libmad, vulkan-headers, vulkan-loader }:
+{ lib, stdenv, fetchFromGitHub, makeWrapper
+, SDL2, gzip, libvorbis, libmad, vulkan-headers, vulkan-loader, moltenvk
+}:
 
 stdenv.mkDerivation rec {
   pname = "vkquake";
-  version = "1.12.2";
+  version = "1.13.0";
 
   src = fetchFromGitHub {
     owner = "Novum";
     repo = "vkQuake";
     rev = version;
-    sha256 = "sha256-+AUSsqarDW40JKgDUIF3G9RNOKqQLuQHOGF23L8anPQ=";
+    sha256 = "sha256-dRPeUsBLliBevjMOSMU+uPSAivrQ0tbuh4QeLmowrAI=";
   };
 
   sourceRoot = "source/Quake";
@@ -24,7 +26,7 @@ stdenv.mkDerivation rec {
     libvorbis
     libmad
     vulkan-loader
-  ];
+  ] ++ lib.optional stdenv.isDarwin moltenvk;
 
   buildFlags = [ "DO_USERDIRS=1" ];
 
@@ -53,7 +55,7 @@ stdenv.mkDerivation rec {
       specialization constants, CPU/GPU parallelism and memory pooling.
     '';
 
-    platforms = platforms.linux;
-    maintainers = with maintainers; [ ];
+    platforms = with platforms; linux ++ darwin;
+    maintainers = with maintainers; [ ylh ];
   };
 }
diff --git a/nixpkgs/pkgs/games/quantumminigolf/default.nix b/nixpkgs/pkgs/games/quantumminigolf/default.nix
index 26a327dd3f52..d0e50a361582 100644
--- a/nixpkgs/pkgs/games/quantumminigolf/default.nix
+++ b/nixpkgs/pkgs/games/quantumminigolf/default.nix
@@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
   ];
 
   preBuild = ''
-    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${SDL.dev}/include/SDL -I${SDL_ttf}/include/SDL"
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -I${lib.getDev SDL}/include/SDL -I${SDL_ttf}/include/SDL"
 
     sed -re 's@"(gfx|fonts|tracks)/@"'"$out"'/share/quantumminigolf/\1/@g' -i *.cpp
   '';
diff --git a/nixpkgs/pkgs/games/r2mod_cli/default.nix b/nixpkgs/pkgs/games/r2mod_cli/default.nix
index 607a53579c7e..eb1dd25811aa 100644
--- a/nixpkgs/pkgs/games/r2mod_cli/default.nix
+++ b/nixpkgs/pkgs/games/r2mod_cli/default.nix
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
     homepage = "https://github.com/foldex/r2mod_cli";
     license = licenses.gpl3Only;
     maintainers = [ maintainers.reedrw ];
+    mainProgram = "r2mod";
     platforms = platforms.unix;
   };
 }
diff --git a/nixpkgs/pkgs/games/rare/default.nix b/nixpkgs/pkgs/games/rare/default.nix
index 9bf3aca75422..d23645242fdf 100644
--- a/nixpkgs/pkgs/games/rare/default.nix
+++ b/nixpkgs/pkgs/games/rare/default.nix
@@ -1,23 +1,23 @@
-{ lib, fetchPypi, buildPythonApplication, makeDesktopItem, copyDesktopItems, qt5
-, pillow, psutil, pypresence, pyqt5, python, qtawesome, requests }:
+{ lib, fetchFromGitHub, buildPythonApplication, qt5
+, psutil, pypresence, pyqt5, python, qtawesome, requests }:
 
 buildPythonApplication rec {
   pname = "rare";
-  version = "1.8.8";
-
-  src = fetchPypi {
-    inherit version;
-    pname = "Rare";
-    sha256 = "sha256-00CtvBqSrT9yJUHZ5529VrIQtCOYkHRc8+rJHmrTSpg=";
+  version = "1.8.9";
+
+  src = fetchFromGitHub {
+    owner = "Dummerle";
+    repo = "Rare";
+    rev = version;
+    sha256 = "sha256-2l8Id+bA5Ugb8+3ioiZ78dUtDusU8cvZEAMhmYBcJFc=";
+    fetchSubmodules = true;
   };
 
   nativeBuildInputs = [
-    copyDesktopItems
     qt5.wrapQtAppsHook
   ];
 
   propagatedBuildInputs = [
-    pillow
     psutil
     pypresence
     pyqt5
@@ -25,17 +25,6 @@ buildPythonApplication rec {
     requests
   ];
 
-  desktopItems = [
-    (makeDesktopItem {
-      name = pname;
-      exec = "rare";
-      icon = "Rare";
-      comment = meta.description;
-      desktopName = "Rare";
-      genericName = "Rare (Epic Games Launcher Open Source Alternative)";
-    })
-  ];
-
   dontWrapQtApps = true;
 
   preBuild = ''
@@ -44,7 +33,8 @@ buildPythonApplication rec {
   '';
 
   postInstall = ''
-    install -Dm644 $out/${python.sitePackages}/rare/resources/images/Rare.png -t $out/share/pixmaps/
+    install -Dm644 misc/rare.desktop -t $out/share/applications/
+    install -Dm644 $out/${python.sitePackages}/rare/resources/images/Rare.png $out/share/pixmaps/rare.png
   '';
 
   preFixup = ''
diff --git a/nixpkgs/pkgs/games/rili/default.nix b/nixpkgs/pkgs/games/rili/default.nix
index a0082d28d506..9c6252a6dda3 100644
--- a/nixpkgs/pkgs/games/rili/default.nix
+++ b/nixpkgs/pkgs/games/rili/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, SDL_mixer, SDL, autoreconfHook }:
+{ lib, stdenv, fetchurl, fetchpatch, SDL_mixer, SDL, autoreconfHook }:
 
 stdenv.mkDerivation rec {
   pname = "ri_li";
@@ -9,9 +9,19 @@ stdenv.mkDerivation rec {
     sha256 = "f71ccc20c37c601358d963e087ac0d524de8c68e96df09c3aac1ae65edd38dbd";
   };
 
-  patches = [ ./moderinze_cpp.patch ];
+  patches = [
+    ./moderinze_cpp.patch
 
-  CPPFLAGS = "-I${SDL.dev}/include -I${SDL.dev}/include/SDL -I${SDL_mixer}/include";
+    # Build fix for gcc-11 pending upstream inclusion:
+    #  https://sourceforge.net/p/ri-li/bugs/2/
+    (fetchpatch {
+      name = "gcc-11.patch";
+      url = "https://sourceforge.net/p/ri-li/bugs/2/attachment/0001-Fix-build-on-gcc-11.patch";
+      sha256 = "01il9lm3amwp3b435ka9q63p0jwlzajwnbshyazx6n9vcnrr17yw";
+    })
+  ];
+
+  CPPFLAGS = "-I${lib.getDev SDL}/include -I${lib.getDev SDL}/include/SDL -I${SDL_mixer}/include";
 
   nativeBuildInputs = [ autoreconfHook ];
   buildInputs = [ SDL SDL_mixer ];
diff --git a/nixpkgs/pkgs/games/rocksndiamonds/default.nix b/nixpkgs/pkgs/games/rocksndiamonds/default.nix
index b01d616452bb..39df9615154c 100644
--- a/nixpkgs/pkgs/games/rocksndiamonds/default.nix
+++ b/nixpkgs/pkgs/games/rocksndiamonds/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, makeDesktopItem, SDL2, SDL2_image, SDL2_mixer, SDL2_net }:
+{ lib, stdenv, fetchurl, fetchpatch, makeDesktopItem, SDL2, SDL2_image, SDL2_mixer, SDL2_net }:
 
 stdenv.mkDerivation rec {
   pname = "rocksndiamonds";
@@ -9,6 +9,20 @@ stdenv.mkDerivation rec {
     sha256 = "1k0m6l5g886d9mwwh6q0gw75qsb85mpf8i0rglh047app56nsk72";
   };
 
+  patches = [
+    # Pull upstream fix for -fno-common toolchain.
+    (fetchpatch {
+      name = "fno-common-p1.patch";
+      url = "https://git.artsoft.org/?p=rocksndiamonds.git;a=patch;h=b4271393b10b7c664a58f3db7349a3875c1676fe";
+      sha256 = "0bdy4d2ril917radmm0c2yh2gqfyh7q1c8kahig5xknn2rkf2iac";
+    })
+    (fetchpatch {
+      name = "fno-common-p2.patch";
+      url = "https://git.artsoft.org/?p=rocksndiamonds.git;a=patch;h=81dbde8a570a94dd2e938eff2f52dc5a3ecced21";
+      sha256 = "1mk5yb8pxrpxvvsxw3pjcbgx2c658baq9vmqqipbj5byhkkw7v2l";
+    })
+  ];
+
   desktopItem = makeDesktopItem {
     name = "rocksndiamonds";
     exec = "rocksndiamonds";
diff --git a/nixpkgs/pkgs/games/rott/default.nix b/nixpkgs/pkgs/games/rott/default.nix
index b3a517dab02b..131745ac03eb 100644
--- a/nixpkgs/pkgs/games/rott/default.nix
+++ b/nixpkgs/pkgs/games/rott/default.nix
@@ -1,5 +1,26 @@
-{stdenv, lib, fetchurl, SDL, SDL_mixer, makeDesktopItem, copyDesktopItems, runtimeShell, buildShareware ? false}:
+{ stdenv
+, lib
+, fetchurl
+, writeShellScript
+, SDL
+, SDL_mixer
+, makeDesktopItem
+, copyDesktopItems
+, runtimeShell
+, buildShareware ? false
+}:
 
+let
+  # Allow the game to be launched from a user's PATH and load the game data from the user's home directory.
+  launcher = writeShellScript "rott" ''
+    set -eEuo pipefail
+    dir=$HOME/.rott/data
+    test -e $dir || mkdir -p $dir
+    cd $dir
+    exec @out@/libexec/rott "$@"
+  '';
+
+in
 stdenv.mkDerivation rec {
   pname = "rott";
   version = "1.1.2";
@@ -10,27 +31,27 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [ copyDesktopItems ];
+
   buildInputs = [ SDL SDL_mixer ];
 
-  preBuild = ''
-    cd rott
-    make clean
-    make SHAREWARE=${if buildShareware then "1" else "0"}
-  '';
+  sourceRoot = "rott-${version}/rott";
 
-  # Include a wrapper script to allow the game to be launched from a user's PATH and load the game data from the user's home directory.
+  makeFlags = [
+    "SHAREWARE=${if buildShareware then "1" else "0"}"
+  ];
 
-  installPhase = ''
-    mkdir -p $out/bin
-    cp rott $out/bin
+  # when using SDL_compat instead of SDL_classic, SDL_mixer isn't correctly
+  # detected, but there is no harm just specifying it
+  NIX_CFLAGS_COMPILE = [
+    "-I${lib.getDev SDL_mixer}/include/SDL"
+  ];
 
-    cat > $out/bin/launch-rott <<EOF
-    #! ${runtimeShell} -e
-    cd ~/.rott/data
-    exec $out/bin/rott
-    EOF
+  installPhase = ''
+    runHook preInstall
 
-    chmod +x $out/bin/launch-rott
+    install -Dm555 -t $out/libexec rott
+    install -Dm555 ${launcher} $out/bin/${launcher.name}
+    substituteInPlace $out/bin/rott --subst-var out
 
     runHook postInstall
   '';
@@ -38,7 +59,7 @@ stdenv.mkDerivation rec {
   desktopItems = [
     (makeDesktopItem {
       name = "rott";
-      exec = "launch-rott";
+      exec = "rott";
       desktopName = "Rise of the Triad: ${if buildShareware then "The HUNT Begins" else "Dark War"}";
       categories = [ "Game" ];
     })
diff --git a/nixpkgs/pkgs/games/runelite/default.nix b/nixpkgs/pkgs/games/runelite/default.nix
index d342d543e2fc..a3c686eee9fe 100644
--- a/nixpkgs/pkgs/games/runelite/default.nix
+++ b/nixpkgs/pkgs/games/runelite/default.nix
@@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
 
     # RuneLite looks for `.so` files in $PWD/natives, so ensure that we set the PWD to the right place
     makeWrapper ${jre}/bin/java $out/bin/runelite \
-      --run "cd $out" \
+      --chdir "$out" \
       --prefix LD_LIBRARY_PATH : "${xorg.libXxf86vm}/lib" \
       --add-flags "-jar $out/share/runelite/RuneLite.jar"
   '';
@@ -58,6 +58,10 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     description = "Open source Old School RuneScape client";
     homepage = "https://runelite.net/";
+    sourceProvenance = with sourceTypes; [
+      binaryBytecode
+      binaryNativeCode
+    ];
     license = licenses.bsd2;
     maintainers = with maintainers; [ kmeakin ];
     platforms = [ "x86_64-linux" ];
diff --git a/nixpkgs/pkgs/games/runescape-launcher/default.nix b/nixpkgs/pkgs/games/runescape-launcher/default.nix
index 8b678d792fcb..e671e5589b82 100644
--- a/nixpkgs/pkgs/games/runescape-launcher/default.nix
+++ b/nixpkgs/pkgs/games/runescape-launcher/default.nix
@@ -10,9 +10,11 @@ let
     pname = "runescape-launcher";
     version = "2.2.9";
 
+    # Packages: https://content.runescape.com/downloads/ubuntu/dists/trusty/non-free/binary-amd64/Packages
+    # upstream is https://content.runescape.com/downloads/ubuntu/pool/non-free/r/${pname}/${pname}_${version}_amd64.deb
     src = fetchurl {
-      url = "https://content.runescape.com/downloads/ubuntu/pool/non-free/r/${pname}/${pname}_${version}_amd64.deb";
-      sha256 = "0r5v1pwh0aas31b1d3pkrc8lqmqz9b4fml2b4kxmg5xzp677h271";
+      url = "https://archive.org/download/${pname}_${version}_amd64/${pname}_${version}_amd64.deb";
+      sha256 = "1zilpxh8k8baylbl9nqq9kgjiv2xzw4lizbgcmzky5rhmych8n4g";
     };
 
     nativeBuildInputs = [
@@ -75,8 +77,9 @@ let
     meta = with lib; {
       description = "Launcher for RuneScape 3, the current main RuneScape";
       homepage = "https://www.runescape.com/";
+      sourceProvenance = with sourceTypes; [ binaryNativeCode ];
       license = licenses.unfree;
-      maintainers = with lib.maintainers; [ grburst ];
+      maintainers = with maintainers; [ grburst ];
       platforms = [ "x86_64-linux" ];
     };
   };
@@ -89,15 +92,23 @@ in
   * FHS simulates a classic linux shell
   */
   buildFHSUserEnv {
-   name = "RuneScape";
-   targetPkgs = pkgs: [
-     runescape
-     dpkg glibc gcc-unwrapped
-     libSM libXxf86vm libX11 glib pango cairo gtk2-x11 zlib openssl
-     libpulseaudio
-     xorg.libX11
-     SDL2 xorg_sys_opengl libGL
-   ];
-   multiPkgs = pkgs: [ libGL ];
-   runScript = "runescape-launcher";
-}
+    name = "RuneScape";
+    targetPkgs = pkgs: [
+      runescape
+      dpkg glibc gcc-unwrapped
+      libSM libXxf86vm libX11 glib pango cairo gtk2-x11 zlib openssl
+      libpulseaudio
+      xorg.libX11
+      SDL2 xorg_sys_opengl libGL
+    ];
+    multiPkgs = pkgs: [ libGL ];
+    runScript = "runescape-launcher";
+
+    meta = with lib; {
+      description = "RuneScape Game Client (NXT) - Launcher for RuneScape 3";
+      homepage = "https://www.runescape.com/";
+      license = licenses.unfree;
+      maintainers = with maintainers; [ grburst ];
+      platforms = [ "x86_64-linux" ];
+    };
+  }
diff --git a/nixpkgs/pkgs/games/sauerbraten/default.nix b/nixpkgs/pkgs/games/sauerbraten/default.nix
index 1d2e39d4164e..934c590138d9 100644
--- a/nixpkgs/pkgs/games/sauerbraten/default.nix
+++ b/nixpkgs/pkgs/games/sauerbraten/default.nix
@@ -56,9 +56,9 @@ stdenv.mkDerivation rec {
     ln -s $out/share/sauerbraten/cube.png $out/share/icon/sauerbraten.png
 
     makeWrapper $out/share/sauerbraten/sauer_server $out/bin/sauerbraten_server \
-      --run "cd $out/share/sauerbraten"
+      --chdir "$out/share/sauerbraten"
     makeWrapper $out/share/sauerbraten/sauer_client $out/bin/sauerbraten_client \
-      --run "cd $out/share/sauerbraten" \
+      --chdir "$out/share/sauerbraten" \
       --add-flags "-q\''${HOME}/.config/sauerbraten"
 
     runHook postInstall
diff --git a/nixpkgs/pkgs/games/sgt-puzzles/default.nix b/nixpkgs/pkgs/games/sgt-puzzles/default.nix
index 1c0b7aeda493..4c537d4dd372 100644
--- a/nixpkgs/pkgs/games/sgt-puzzles/default.nix
+++ b/nixpkgs/pkgs/games/sgt-puzzles/default.nix
@@ -1,39 +1,41 @@
 { lib, stdenv, fetchurl, desktop-file-utils
-, gtk3, libX11
-, makeWrapper, pkg-config, perl, autoreconfHook, wrapGAppsHook
+, gtk3, libX11, cmake, imagemagick
+, pkg-config, perl, wrapGAppsHook
+, isMobile ? false
 }:
 
 stdenv.mkDerivation rec {
   pname = "sgt-puzzles";
-  version = "20200610.9aa7b7c";
+  version = "20220802.8399cff";
 
   src = fetchurl {
     url = "http://www.chiark.greenend.org.uk/~sgtatham/puzzles/puzzles-${version}.tar.gz";
-    sha256 = "0rrd1c77ar91zqy4rr4xp1z7x3ywnshlac99cga4hnrgwb7vwl3f";
+    hash = "sha256-f68Nj8P8oIJj1LWyq8Iamv32ex+boPH/lsV5t+YhM9o=";
   };
 
   sgt-puzzles-menu = fetchurl {
-    url = "https://raw.githubusercontent.com/Oleh-Kravchenko/portage/master/games-puzzle/sgt-puzzles/files/sgt-puzzles.menu";
+    url = "https://raw.githubusercontent.com/gentoo/gentoo/720e614d0107e86fc1e520bac17726578186843d/games-puzzle/sgt-puzzles/files/sgt-puzzles.menu";
     sha256 = "088w0x9g3j8pn725ix8ny8knhdsfgjr3hpswsh9fvfkz5vlg2xkm";
   };
 
-  nativeBuildInputs = [ autoreconfHook desktop-file-utils makeWrapper
-    pkg-config perl wrapGAppsHook ];
+  nativeBuildInputs = [
+    cmake
+    desktop-file-utils
+    imagemagick
+    perl
+    pkg-config
+    wrapGAppsHook
+  ];
 
-  buildInputs = [ gtk3 libX11 ];
-
-  makeFlags = [ "prefix=$(out)" "gamesdir=$(out)/bin"];
+  NIX_CFLAGS_COMPILE = if isMobile then "-DSTYLUS_BASED" else "";
 
-  preInstall = ''
-    mkdir -p "$out"/{bin,share/doc/sgtpuzzles}
-    cp gamedesc.txt LICENCE README "$out/share/doc/sgtpuzzles"
-  '';
+  buildInputs = [ gtk3 libX11 ];
 
   postInstall = ''
     for i in  $(basename -s $out/bin/*); do
 
       ln -s $out/bin/$i $out/bin/sgt-puzzle-$i
-      install -Dm644 icons/$i-48d24.png -t $out/share/icons/hicolor/48x48/apps/
+      install -Dm644 icons/$i-96d24.png -t $out/share/icons/hicolor/96x96/apps/
 
       # Generate/validate/install .desktop files.
       echo "[Desktop Entry]" > $i.desktop
@@ -43,7 +45,7 @@ stdenv.mkDerivation rec {
         --set-key Name --set-value $i \
         --set-key Comment --set-value "${meta.description}" \
         --set-key Categories --set-value "Game;LogicGame;X-sgt-puzzles;" \
-        --set-key Icon --set-value $out/share/icons/hicolor/48x48/apps/$i-48d24 \
+        --set-key Icon --set-value $out/share/icons/hicolor/96x96/apps/$i-96d24.png \
         $i.desktop
     done
 
@@ -57,16 +59,10 @@ stdenv.mkDerivation rec {
     install -Dm644 ${sgt-puzzles-menu} -t $out/etc/xdg/menus/applications-merged/
   '';
 
-  preConfigure = ''
-    perl mkfiles.pl
-    export NIX_LDFLAGS="$NIX_LDFLAGS -lX11"
-    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -Wno-error"
-    cp Makefile.gtk Makefile
-  '';
   meta = with lib; {
     description = "Simon Tatham's portable puzzle collection";
     license = licenses.mit;
-    maintainers = [ maintainers.raskin ];
+    maintainers = with maintainers; [ raskin tomfitzhenry ];
     platforms = platforms.linux;
     homepage = "https://www.chiark.greenend.org.uk/~sgtatham/puzzles/";
   };
diff --git a/nixpkgs/pkgs/games/shattered-pixel-dungeon/default.nix b/nixpkgs/pkgs/games/shattered-pixel-dungeon/default.nix
index d8bf9d5f3235..81baf3b664ba 100644
--- a/nixpkgs/pkgs/games/shattered-pixel-dungeon/default.nix
+++ b/nixpkgs/pkgs/games/shattered-pixel-dungeon/default.nix
@@ -80,6 +80,10 @@ in stdenv.mkDerivation rec {
     homepage = "https://shatteredpixel.com/";
     downloadPage = "https://github.com/00-Evan/shattered-pixel-dungeon/releases";
     description = "Traditional roguelike game with pixel-art graphics and simple interface";
+    sourceProvenance = with sourceTypes; [
+      fromSource
+      binaryBytecode  # deps
+    ];
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ fgaz ];
     platforms = platforms.all;
diff --git a/nixpkgs/pkgs/games/sil-q/default.nix b/nixpkgs/pkgs/games/sil-q/default.nix
new file mode 100644
index 000000000000..e4299bd8aca7
--- /dev/null
+++ b/nixpkgs/pkgs/games/sil-q/default.nix
@@ -0,0 +1,73 @@
+{ pkgs, lib, stdenv, fetchFromGitHub, writeScript, makeWrapper, ncurses, libX11 }:
+
+let
+  setup = writeScript "setup" ''
+    mkdir -p "$ANGBAND_PATH"
+    # copy all the data files into place
+    cp -ar $1/* "$ANGBAND_PATH"
+    # the copied files need to be writable
+    chmod +w -R "$ANGBAND_PATH"
+  '';
+in stdenv.mkDerivation rec {
+  pname = "sil-q";
+  version = "1.5.0";
+
+  src = fetchFromGitHub {
+    owner = "sil-quirk";
+    repo = "sil-q";
+    rev = "v${version}";
+    sha256 = "sha256-v/sWhPWF9cCKD8N0RHpwzChMM1t9G2yrMDmi1cZxdOs=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  buildInputs = [ ncurses libX11 ];
+
+  # Makefile(s) and config are not top-level
+  sourceRoot = "source/src";
+
+  postPatch = ''
+    # allow usage of ANGBAND_PATH
+    substituteInPlace config.h --replace "#define FIXED_PATHS" ""
+
+    # change Makefile.std for ncurses according to its own comment
+    substituteInPlace Makefile.std --replace "-lcurses" "-lncurses"
+  '';
+
+  makefile = "Makefile.std";
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp sil $out/bin/sil-q
+    wrapProgram $out/bin/sil-q \
+      --run "export ANGBAND_PATH=\$HOME/.sil" \
+      --run "${setup} ${src}/lib"
+
+    runHook postInstall
+  '';
+
+  passthru.tests = {
+    saveDirCreation = pkgs.runCommand "save-dir-creation" {} ''
+      HOME=$(pwd) ${lib.getExe pkgs.sil-q} --help
+      test -d .sil && touch $out
+    '';
+  };
+
+  meta = {
+    description = "A roguelike game set in the First Age of Middle-earth";
+    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.
+
+      Walk the dark halls of Angband.  Slay creatures black and fell.  Wrest a shining
+      Silmaril from Morgoth’s iron crown.
+
+      A fork of Sil that's still actively developed.
+    '';
+    homepage = "https://github.com/sil-quirk/sil-q";
+    license = lib.licenses.gpl2;
+    maintainers = [ lib.maintainers.kenran ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/games/sil/default.nix b/nixpkgs/pkgs/games/sil/default.nix
index 5f589ede2bc4..7d446a684aae 100644
--- a/nixpkgs/pkgs/games/sil/default.nix
+++ b/nixpkgs/pkgs/games/sil/default.nix
@@ -1,4 +1,6 @@
-{ lib, stdenv, fetchzip, ncurses, libX11, libXaw, libXt, libXext, libXmu, makeWrapper, writeScript, ... }:
+{ pkgs, lib, stdenv, fetchzip, ncurses, libX11, libXaw, libXt, libXext, libXmu
+, makeWrapper, writeScript }:
+
 let
   setup = writeScript "setup" ''
     mkdir -p "$ANGBAND_PATH"
@@ -15,7 +17,7 @@ stdenv.mkDerivation rec {
   src = fetchzip {
     url = "http://www.amirrorclear.net/flowers/game/sil/Sil-130-src.zip";
     sha256 = "1amp2mr3fxascra0k76sdsvikjh8g76nqh46kka9379zd35lfq8w";
-    stripRoot=false;
+    stripRoot = false;
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -25,7 +27,7 @@ stdenv.mkDerivation rec {
 
   makefile = "Makefile.std";
 
-  prePatch = ''
+  postPatch = ''
     # Allow usage of ANGBAND_PATH
     substituteInPlace config.h --replace "#define FIXED_PATHS" ""
   '';
@@ -34,31 +36,49 @@ stdenv.mkDerivation rec {
     buildFlagsArray+=("LIBS=-lXaw -lXext -lSM -lICE -lXmu -lXt -lX11 -lncurses")
   '';
 
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: main.o:/build/source/Sil/src/externs.h:57: multiple definition of
+  #     `mini_screenshot_char'; variable.o:/build/source/Sil/src/externs.h:57: first defined here
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   installPhase = ''
-    # the makefile doesn't have a sensible install target, so we hav to do it ourselves
+    runHook preInstall
+
+    # the makefile doesn't have a sensible install target, so we have to do it ourselves
     mkdir -p $out/bin
     cp sil $out/bin/sil
-    # Wrap the program to set a user-local ANGBAND_PATH, and run the setup script to copy files into place
+
+    # Wrap the program to set a user-local ANGBAND_PATH, and run the setup script to copy files into place.
     # We could just use the options for a user-local save and scores dir, but it tried to write to the
     # lib directory anyway, so we might as well give everyone a copy
     wrapProgram $out/bin/sil \
-      --run "set -u" \
       --run "export ANGBAND_PATH=\$HOME/.sil" \
       --run "${setup} ${src}/Sil/lib"
+
+    runHook postInstall
   '';
 
+  passthru.tests = {
+    saveDirCreation = pkgs.runCommand "save-dir-creation" {} ''
+      HOME=$(pwd) ${lib.getExe pkgs.sil} --help
+      test -d .sil && touch $out
+    '';
+  };
+
   meta = {
-    description = "A rouge-like game set in the first age of Middle-earth";
+    description = "A rogue-like game set in the First Age of Middle-earth";
     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.
+      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.
 
       Walk the dark halls of Angband.  Slay creatures black and fell.  Wrest a shining
       Silmaril from Morgoth’s iron crown.
     '';
     homepage = "http://www.amirrorclear.net/flowers/game/sil/index.html";
     license = lib.licenses.gpl2;
-    maintainers = [ lib.maintainers.michaelpj ];
+    maintainers = with lib.maintainers; [ michaelpj kenran ];
     platforms = lib.platforms.linux;
+    mainProgram = "sil";
   };
 }
diff --git a/nixpkgs/pkgs/games/simutrans/default.nix b/nixpkgs/pkgs/games/simutrans/default.nix
index 60b2bc5faf77..1f051242ad90 100644
--- a/nixpkgs/pkgs/games/simutrans/default.nix
+++ b/nixpkgs/pkgs/games/simutrans/default.nix
@@ -163,7 +163,7 @@ let
 
       homepage = "http://www.simutrans.com/";
       license = with licenses; [ artistic1 gpl1Plus ];
-      maintainers = with maintainers; [ kkallio vcunat phile314 ];
+      maintainers = with maintainers; [ phile314 ];
       platforms = with platforms; linux; # TODO: ++ darwin;
     };
   };
diff --git a/nixpkgs/pkgs/games/sm64ex/default.nix b/nixpkgs/pkgs/games/sm64ex/default.nix
index c6df2099d3ce..a6bf7202adcf 100644
--- a/nixpkgs/pkgs/games/sm64ex/default.nix
+++ b/nixpkgs/pkgs/games/sm64ex/default.nix
@@ -1,71 +1,55 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchFromGitHub
-, python3
-, pkg-config
-, audiofile
-, SDL2
-, hexdump
-, requireFile
-, compileFlags ? [ ]
-, region ? "us"
-, baseRom ? requireFile {
-    name = "baserom.${region}.z64";
-    message = ''
-      This nix expression requires that baserom.${region}.z64 is
-      already part of the store. To get this file you can dump your Super Mario 64 cartridge's contents
-      and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
-      Note that if you are not using a US baserom, you must overwrite the "region" attribute with either "eu" or "jp".
-    '';
-    sha256 = {
-      "us" = "17ce077343c6133f8c9f2d6d6d9a4ab62c8cd2aa57c40aea1f490b4c8bb21d91";
-      "eu" = "c792e5ebcba34c8d98c0c44cf29747c8ee67e7b907fcc77887f9ff2523f80572";
-      "jp" = "9cf7a80db321b07a8d461fe536c02c87b7412433953891cdec9191bfad2db317";
-    }.${region};
-  }
+, callPackage
+, autoPatchelfHook
+, branch
 }:
 
-stdenv.mkDerivation rec {
-  pname = "sm64ex";
-  version = "unstable-2021-11-30";
-
-  src = fetchFromGitHub {
-    owner = "sm64pc";
-    repo = "sm64ex";
-    rev = "db9a6345baa5acb41f9d77c480510442cab26025";
-    sha256 = "sha256-q7JWDvNeNrDpcKVtIGqB1k7I0FveYwrfqu7ZZK7T8F8=";
+{
+  sm64ex = callPackage ./generic.nix {
+    pname = "sm64ex";
+    version = "0.pre+date=2021-11-30";
+
+    src = fetchFromGitHub {
+      owner = "sm64pc";
+      repo = "sm64ex";
+      rev = "db9a6345baa5acb41f9d77c480510442cab26025";
+      sha256 = "sha256-q7JWDvNeNrDpcKVtIGqB1k7I0FveYwrfqu7ZZK7T8F8=";
+    };
+
+    extraMeta = {
+      homepage = "https://github.com/sm64pc/sm64ex";
+      description = "Super Mario 64 port based off of decompilation";
+    };
   };
 
-  nativeBuildInputs = [ python3 pkg-config ];
-  buildInputs = [ audiofile SDL2 hexdump ];
-
-  makeFlags = [ "VERSION=${region}" ] ++ compileFlags
-    ++ lib.optionals stdenv.isDarwin [ "OSX_BUILD=1" ];
-
-  inherit baseRom;
-
-  preBuild = ''
-    patchShebangs extract_assets.py
-    cp $baseRom ./baserom.${region}.z64
-  '';
-
-  installPhase = ''
-    mkdir -p $out/bin
-    cp build/${region}_pc/sm64.${region}.f3dex2e $out/bin/sm64ex
-  '';
-
-  enableParallelBuilding = true;
-
-  meta = with lib; {
-    homepage = "https://github.com/sm64pc/sm64ex";
-    description = "Super Mario 64 port based off of decompilation";
-    longDescription = ''
-      Super Mario 64 port based off of decompilation.
-      Note that you must supply a baserom yourself to extract assets from.
-      If you are not using an US baserom, you must overwrite the "region" attribute with either "eu" or "jp".
-      If you would like to use patches sm64ex distributes as makeflags, add them to the "compileFlags" attribute.
+  sm64ex-coop = callPackage ./generic.nix {
+    pname = "sm64ex-coop";
+    version = "0.pre+date=2022-05-14";
+
+    src = fetchFromGitHub {
+      owner = "djoslin0";
+      repo = "sm64ex-coop";
+      rev = "8200b175607fe2939f067d496627c202a15fe24c";
+      sha256 = "sha256-c1ZmMBtvYYcaJ/WxkZBVvNGVCeSXfm8NKe/BiAIJtks=";
+    };
+
+    extraNativeBuildInputs = [
+      autoPatchelfHook
+    ];
+
+    postInstall = let
+      sharedLib = stdenv.hostPlatform.extensions.sharedLibrary;
+    in ''
+      mkdir -p $out/lib
+      cp $src/lib/bass/libbass{,_fx}${sharedLib} $out/lib
+      cp $src/lib/discordsdk/libdiscord_game_sdk${sharedLib} $out/lib
     '';
-    license = licenses.unfree;
-    maintainers = with maintainers; [ ivar ];
-    platforms = platforms.unix;
+
+    extraMeta = {
+      homepage = "https://github.com/djoslin0/sm64ex-coop";
+      description = "Super Mario 64 online co-op mod, forked from sm64ex";
+    };
   };
-}
+}.${branch}
diff --git a/nixpkgs/pkgs/games/sm64ex/generic.nix b/nixpkgs/pkgs/games/sm64ex/generic.nix
new file mode 100644
index 000000000000..ab75ac70b9c5
--- /dev/null
+++ b/nixpkgs/pkgs/games/sm64ex/generic.nix
@@ -0,0 +1,83 @@
+{ pname
+, version
+, src
+, extraNativeBuildInputs ? [ ]
+, extraMeta ? {}
+, compileFlags ? [ ]
+, postInstall ? ""
+, region ? "us"
+
+, lib
+, stdenv
+, fetchFromGitHub
+, python3
+, pkg-config
+, audiofile
+, SDL2
+, hexdump
+, requireFile
+, baseRom ? requireFile {
+    name = "baserom.${region}.z64";
+    message = ''
+      This nix expression requires that baserom.${region}.z64 is
+      already part of the store. To get this file you can dump your Super Mario 64 cartridge's contents
+      and add it to the nix store with nix-store --add-fixed sha256 <FILE>.
+      Note that if you are not using a US baserom, you must overwrite the "region" attribute with either "eu" or "jp".
+    '';
+    sha256 = {
+      "us" = "17ce077343c6133f8c9f2d6d6d9a4ab62c8cd2aa57c40aea1f490b4c8bb21d91";
+      "eu" = "c792e5ebcba34c8d98c0c44cf29747c8ee67e7b907fcc77887f9ff2523f80572";
+      "jp" = "9cf7a80db321b07a8d461fe536c02c87b7412433953891cdec9191bfad2db317";
+    }.${region};
+  }
+}:
+
+stdenv.mkDerivation rec {
+  inherit pname version src postInstall;
+
+  nativeBuildInputs = [
+    python3
+    pkg-config
+    hexdump
+  ] ++ extraNativeBuildInputs;
+
+  buildInputs = [
+    audiofile
+    SDL2
+  ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "VERSION=${region}"
+  ] ++ lib.optionals stdenv.isDarwin [
+    "OSX_BUILD=1"
+  ] ++ compileFlags;
+
+  preBuild = ''
+    patchShebangs extract_assets.py
+    ln -s ${baseRom} ./baserom.${region}.z64
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp build/${region}_pc/sm64.${region}.f3dex2e $out/bin/sm64ex
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    longDescription =
+      extraMeta.description or "Super Mario 64 port based off of decompilation" + "\n" + ''
+        Note that you must supply a baserom yourself to extract assets from.
+        If you are not using an US baserom, you must overwrite the "region" attribute with either "eu" or "jp".
+        If you would like to use patches sm64ex distributes as makeflags, add them to the "compileFlags" attribute.
+      '';
+    mainProgram = "sm64ex";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ ivar ];
+    platforms = platforms.unix;
+  } // extraMeta;
+}
diff --git a/nixpkgs/pkgs/games/solarus/default.nix b/nixpkgs/pkgs/games/solarus/default.nix
index c42464feaed2..9dc0e1863cfa 100644
--- a/nixpkgs/pkgs/games/solarus/default.nix
+++ b/nixpkgs/pkgs/games/solarus/default.nix
@@ -35,7 +35,7 @@ mkDerivation rec {
     '';
     homepage = "http://www.solarus-games.org";
     license = licenses.gpl3;
-    maintainers = [ maintainers.Nate-Devv ];
+    maintainers = [ ];
     platforms = platforms.linux;
   };
 
diff --git a/nixpkgs/pkgs/games/soldat-unstable/gamenetworkingsockets-no-external.patch b/nixpkgs/pkgs/games/soldat-unstable/gamenetworkingsockets-no-external.patch
deleted file mode 100644
index 629ca6c67518..000000000000
--- a/nixpkgs/pkgs/games/soldat-unstable/gamenetworkingsockets-no-external.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 1084048..1ea4c84 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -143,7 +143,8 @@ if(BUILD_CLIENT OR BUILD_SERVER)
-     file(WRITE ${PROJECT_BINARY_DIR}/bin/steam_appid.txt "638490")
-   else()
-     # GameNetworkingSockets
--    add_subdirectory(shared/libs/GameNetworkingSockets)
-+    # add_subdirectory(shared/libs/GameNetworkingSockets)
-+    find_package(GameNetworkingSockets REQUIRED)
-   endif()
- endif()
- 
diff --git a/nixpkgs/pkgs/games/space-cadet-pinball/default.nix b/nixpkgs/pkgs/games/space-cadet-pinball/default.nix
index 312b2e32823b..0c991d727e28 100644
--- a/nixpkgs/pkgs/games/space-cadet-pinball/default.nix
+++ b/nixpkgs/pkgs/games/space-cadet-pinball/default.nix
@@ -1,5 +1,5 @@
 { lib, stdenv, fetchFromGitHub, fetchzip
-, cmake, SDL2, SDL2_mixer
+, cmake, SDL2, SDL2_mixer, Cocoa
 , unrar-wrapper, makeWrapper
 , fetchpatch
 }:
@@ -33,12 +33,21 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  nativeBuildInputs = [ cmake ];
   buildInputs = [
     SDL2
     SDL2_mixer
-    cmake
     makeWrapper
-  ];
+  ] ++ lib.optional stdenv.isDarwin Cocoa;
+
+  # Darwin needs a custom installphase since it is excluded from the cmake install
+  # https://github.com/k4zmu2a/SpaceCadetPinball/blob/0f88e43ba261bc21fa5c3ef9d44969a2a079d0de/CMakeLists.txt#L221
+  installPhase = lib.optionalString stdenv.isDarwin ''
+    runHook preInstall
+    mkdir -p $out/bin
+    install ../bin/SpaceCadetPinball $out/bin
+    runHook postInstall
+  '';
 
   postInstall = ''
     mkdir -p $out/lib/SpaceCadetPinball
@@ -57,5 +66,6 @@ stdenv.mkDerivation rec {
     license = with licenses; [ unfree mit ];
     maintainers = [ maintainers.hqurve ];
     platforms = platforms.all;
+    mainProgram = "SpaceCadetPinball";
   };
 }
diff --git a/nixpkgs/pkgs/games/space-orbit/default.nix b/nixpkgs/pkgs/games/space-orbit/default.nix
index 6794a340310a..7e51d7a4b290 100644
--- a/nixpkgs/pkgs/games/space-orbit/default.nix
+++ b/nixpkgs/pkgs/games/space-orbit/default.nix
@@ -38,6 +38,7 @@ EOF
   '';
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     description = "A space combat simulator";
     license = licenses.gpl2;
     platforms = platforms.all;
diff --git a/nixpkgs/pkgs/games/speed-dreams/default.nix b/nixpkgs/pkgs/games/speed-dreams/default.nix
index c0bb7b67e04b..b97e755b2753 100644
--- a/nixpkgs/pkgs/games/speed-dreams/default.nix
+++ b/nixpkgs/pkgs/games/speed-dreams/default.nix
@@ -3,7 +3,7 @@ libXext, libSM, libICE, libXi, libXt, libXrender, libXxf86vm, openscenegraph, ex
 libpng, zlib, bash, SDL2, enet, libjpeg, cmake, pkg-config, libvorbis, runtimeShell, curl }:
 
 let
-  version = "2.2.2-r6553";
+  version = "2.2.3-r7616";
   shortVersion = builtins.substring 0 5 version;
 in
 stdenv.mkDerivation rec {
@@ -12,22 +12,22 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "mirror://sourceforge/speed-dreams/${shortVersion}/speed-dreams-src-base-${version}.tar.xz";
-    sha256 = "1l47d2619kpfkvdwbkwr311qss6jjfwvgl5h9z2w3bwdgz0mbaij";
+    sha256 = "sha256-GvB8SDZB9UivJSsQfMMon9N5MURdxTOwsaN4F0XQUCE=";
   };
 
   cars-and-tracks = fetchurl {
     url = "mirror://sourceforge/speed-dreams/${shortVersion}/speed-dreams-src-hq-cars-and-tracks-${version}.tar.xz";
-    sha256 = "0l8ba5pzqqcfy4inyxy2lrrhhgfs43xab7fy751xz2xqpqpfksyq";
+    sha256 = "sha256-BuryCUvBD7rKmApCNsTkRN0UJ1q6P3sdYrSzpTqdTHc=";
   };
 
   more-cars-and-tracks = fetchurl {
     url = "mirror://sourceforge/speed-dreams/${shortVersion}/speed-dreams-src-more-hq-cars-and-tracks-${version}.tar.xz";
-    sha256 = "10w180mhhk6dw4cza6mqa0hp5qgym9lcizfwykqbgcvs01yl2yqb";
+    sha256 = "sha256-GSCHYbJS352yAMczzss7tYSQXwLQV68rv/XkyGy+GoY=";
   };
 
   wip-cars-and-tracks = fetchurl {
     url = "mirror://sourceforge/speed-dreams/${shortVersion}/speed-dreams-src-wip-cars-and-tracks-${version}.tar.xz";
-    sha256 = "1wad9yaydaryhyi7ckyaii124h0z7kziqgcl475a5jr7ggbxc24q";
+    sha256 = "sha256-r/IOSf+UZg2e+WIHn2QNDO6qQUhpIJvh7EF2jQ7lyyA=";
   };
 
   sourceRoot = ".";
diff --git a/nixpkgs/pkgs/games/srb2/default.nix b/nixpkgs/pkgs/games/srb2/default.nix
new file mode 100644
index 000000000000..1a4862904abe
--- /dev/null
+++ b/nixpkgs/pkgs/games/srb2/default.nix
@@ -0,0 +1,93 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchFromGitHub
+, substituteAll
+, cmake
+, curl
+, nasm
+, libopenmpt
+, p7zip
+, libgme
+, libpng
+, SDL2
+, SDL2_mixer
+, zlib
+}:
+
+let
+
+assets_version = "2.2.5";
+
+assets = fetchurl {
+  url = "https://github.com/mazmazz/SRB2/releases/download/SRB2_assets_220/srb2-${assets_version}-assets.7z";
+  sha256 = "1m9xf3vraq9nipsi09cyvvfa4i37gzfxg970rnqfswd86z9v6v00";
+};
+
+assets_optional = fetchurl {
+  url = "https://github.com/mazmazz/SRB2/releases/download/SRB2_assets_220/srb2-${assets_version}-optional-assets.7z";
+  sha256 = "1j29jrd0r1k2bb11wyyl6yv9b90s2i6jhrslnh77qkrhrwnwcdz4";
+};
+
+in stdenv.mkDerivation rec {
+  pname = "srb2";
+  version = "2.2.10";
+
+  src = fetchFromGitHub {
+    owner = "STJr";
+    repo = "SRB2";
+    rev = "SRB2_release_${version}";
+    sha256 = "03388n094d2yr5si6ngnggbqhm8b2l0s0qvfnkz49li9bd6a81gg";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    nasm
+    p7zip
+  ];
+
+  buildInputs = [
+    curl
+    libgme
+    libpng
+    libopenmpt
+    SDL2
+    SDL2_mixer
+    zlib
+  ];
+
+  cmakeFlags = [
+    "-DSRB2_ASSET_DIRECTORY=/build/source/assets"
+    "-DGME_INCLUDE_DIR=${libgme}/include"
+    "-DOPENMPT_INCLUDE_DIR=${libopenmpt.dev}/include"
+    "-DSDL2_MIXER_INCLUDE_DIR=${SDL2_mixer}/include/SDL2"
+    "-DSDL2_INCLUDE_DIR=${SDL2.dev}/include/SDL2"
+  ];
+
+  patches = [
+    ./wadlocation.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace src/sdl/i_system.c \
+        --replace '@wadlocation@' $out
+  '';
+
+  preConfigure = ''
+    7z x ${assets} -o"/build/source/assets" -aos
+    7z x ${assets_optional} -o"/build/source/assets" -aos
+  '';
+
+  postInstall = ''
+    mkdir $out/bin
+    mv $out/lsdlsrb2-${version} $out/bin/srb2
+  '';
+
+  meta = with lib; {
+    description = "Sonic Robo Blast 2 is a 3D Sonic the Hedgehog fangame based on a modified version of Doom Legacy";
+    homepage = "https://www.srb2.org/";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ zeratax ];
+  };
+}
diff --git a/nixpkgs/pkgs/games/srb2/wadlocation.patch b/nixpkgs/pkgs/games/srb2/wadlocation.patch
new file mode 100644
index 000000000000..ee3e1111e6f0
--- /dev/null
+++ b/nixpkgs/pkgs/games/srb2/wadlocation.patch
@@ -0,0 +1,72 @@
+diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c
+index 10c0747bf..861f00728 100644
+--- a/src/sdl/i_system.c
++++ b/src/sdl/i_system.c
+@@ -145,13 +145,7 @@ int TimeFunction(int requested_frequency);
+ 
+ // Locations for searching the srb2.pk3
+ #if defined (__unix__) || defined(__APPLE__) || defined (UNIXCOMMON)
+-#define DEFAULTWADLOCATION1 "/usr/local/share/games/SRB2"
+-#define DEFAULTWADLOCATION2 "/usr/local/games/SRB2"
+-#define DEFAULTWADLOCATION3 "/usr/share/games/SRB2"
+-#define DEFAULTWADLOCATION4 "/usr/games/SRB2"
+-#define DEFAULTSEARCHPATH1 "/usr/local/games"
+-#define DEFAULTSEARCHPATH2 "/usr/games"
+-#define DEFAULTSEARCHPATH3 "/usr/local"
++#define DEFAULTWADLOCATION1 "@wadlocation@"
+ #elif defined (_WIN32)
+ #define DEFAULTWADLOCATION1 "c:\\games\\srb2"
+ #define DEFAULTWADLOCATION2 "\\games\\srb2"
+@@ -2812,34 +2806,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 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
+@@ -2884,16 +2850,7 @@ static const char *locateWad(void)
+ 	if (isWadPathOk(returnWadPath))
+ 		return returnWadPath;
+ #endif
+-#ifndef NOHOME
+-	// find in $HOME
+-	I_OutputMsg(",HOME");
+-	if ((envstr = I_GetEnv("HOME")) != NULL)
+-	{
+-		WadPath = searchWad(envstr);
+-		if (WadPath)
+-			return WadPath;
+-	}
+-#endif
++
+ #ifdef DEFAULTSEARCHPATH1
+ 	// find in /usr/local
+ 	I_OutputMsg(", in:"DEFAULTSEARCHPATH1);
diff --git a/nixpkgs/pkgs/games/srb2kart/default.nix b/nixpkgs/pkgs/games/srb2kart/default.nix
new file mode 100644
index 000000000000..62f2915098de
--- /dev/null
+++ b/nixpkgs/pkgs/games/srb2kart/default.nix
@@ -0,0 +1,88 @@
+{ lib
+, stdenv
+, fetchurl
+, fetchFromGitHub
+, substituteAll
+, cmake
+, curl
+, nasm
+, unzip
+, libgme
+, libpng
+, SDL2
+, SDL2_mixer
+, zlib
+}:
+
+let
+
+release_tag = "v1.3";
+
+installer = fetchurl {
+  url = "https://github.com/STJr/Kart-Public/releases/download/${release_tag}/srb2kart-v13-Installer.exe";
+  sha256 = "0bk36y7wf6xfdg6j0b8qvk8671hagikzdp5nlfqg478zrj0qf6cs";
+};
+
+in stdenv.mkDerivation rec {
+  pname = "srb2kart";
+  version = "1.3.0";
+
+  src = fetchFromGitHub {
+    owner = "STJr";
+    repo = "Kart-Public";
+    rev = release_tag;
+    sha256 = "131g9bmc9ihvz0klsc3yzd0pnkhx3mz1vzm8y7nrrsgdz5278y49";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    nasm
+    unzip
+  ];
+
+  buildInputs = [
+    curl
+    libgme
+    libpng
+    SDL2
+    SDL2_mixer
+    zlib
+  ];
+
+  cmakeFlags = [
+    #"-DSRB2_ASSET_DIRECTORY=/build/source/assets"
+    "-DGME_INCLUDE_DIR=${libgme}/include"
+    "-DSDL2_MIXER_INCLUDE_DIR=${SDL2_mixer}/include/SDL2"
+    "-DSDL2_INCLUDE_DIR=${SDL2.dev}/include/SDL2"
+  ];
+
+  patches = [
+    ./wadlocation.patch
+  ];
+
+  postPatch = ''
+    substituteInPlace src/sdl/i_system.c \
+        --replace '@wadlocation@' $out
+  '';
+
+  preConfigure = ''
+    mkdir assets/installer
+    pushd assets/installer
+    unzip ${installer} "*.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/nixpkgs/pkgs/games/srb2kart/wadlocation.patch b/nixpkgs/pkgs/games/srb2kart/wadlocation.patch
new file mode 100644
index 000000000000..1923cda041d2
--- /dev/null
+++ b/nixpkgs/pkgs/games/srb2kart/wadlocation.patch
@@ -0,0 +1,61 @@
+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/nixpkgs/pkgs/games/starsector/default.nix b/nixpkgs/pkgs/games/starsector/default.nix
index 95fb3988f28e..e929ef98fbf6 100644
--- a/nixpkgs/pkgs/games/starsector/default.nix
+++ b/nixpkgs/pkgs/games/starsector/default.nix
@@ -57,7 +57,8 @@ stdenv.mkDerivation rec {
     wrapProgram $out/starsector.sh \
       --prefix PATH : ${lib.makeBinPath [ openjdk ]} \
       --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath buildInputs} \
-      --run 'mkdir -p ''${XDG_DATA_HOME:-~/.local/share}/starsector; cd '"$out"
+      --run 'mkdir -p ''${XDG_DATA_HOME:-~/.local/share}/starsector' \
+      --chdir "$out"
     ln -s $out/starsector.sh $out/bin/starsector
 
     runHook postInstall
@@ -74,6 +75,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     description = "Open-world single-player space-combat, roleplaying, exploration, and economic game";
     homepage = "https://fractalsoftworks.com";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.unfree;
     maintainers = with maintainers; [ bbigras ];
   };
diff --git a/nixpkgs/pkgs/games/steam/default.nix b/nixpkgs/pkgs/games/steam/default.nix
index 430a2b3a67de..395980e8ee6f 100644
--- a/nixpkgs/pkgs/games/steam/default.nix
+++ b/nixpkgs/pkgs/games/steam/default.nix
@@ -29,7 +29,7 @@ let
     selfBuildHost = pkgsBuildHost.${steamPackagesAttr};
     selfBuildTarget = pkgsBuildTarget.${steamPackagesAttr};
     selfHostHost = pkgsHostHost.${steamPackagesAttr};
-    selfTargetTarget = pkgsTargetTarget.${steamPackagesAttr};
+    selfTargetTarget = pkgsTargetTarget.${steamPackagesAttr} or {}; # might be missing;
   };
   keep = self: { };
   extra = spliced0: { };
diff --git a/nixpkgs/pkgs/games/steam/fhsenv.nix b/nixpkgs/pkgs/games/steam/fhsenv.nix
index c5fba68b22a1..f32f46f1f145 100644
--- a/nixpkgs/pkgs/games/steam/fhsenv.nix
+++ b/nixpkgs/pkgs/games/steam/fhsenv.nix
@@ -95,9 +95,11 @@ in buildFHSUserEnv rec {
     json-glib # paradox launcher (Stellaris)
     libdrm
     libxkbcommon # paradox launcher
+    libvorbis # Dead Cells
     mono
     xorg.xkeyboardconfig
     xorg.libpciaccess
+    xorg.libXScrnSaver # Dead Cells
     udev # shadow of the tomb raider
     icu # dotnet runtime, e.g. stardew valley
 
@@ -155,7 +157,7 @@ in buildFHSUserEnv rec {
     xorg.libSM
     xorg.libICE
     gnome2.GConf
-    (curl.override { gnutlsSupport = true; opensslSupport = false; })
+    curlWithGnuTls
     nspr
     nss
     cups
@@ -182,6 +184,7 @@ in buildFHSUserEnv rec {
     flac
     freeglut
     libjpeg
+    libpng
     libpng12
     libsamplerate
     libmikmod
@@ -195,6 +198,8 @@ in buildFHSUserEnv rec {
     SDL2_ttf
     SDL2_mixer
     libappindicator-gtk2
+    libdbusmenu-gtk2
+    libindicator-gtk2
     libcaca
     libcanberra
     libgcrypt
@@ -206,12 +211,6 @@ in buildFHSUserEnv rec {
   ++ steamPackages.steam-runtime-wrapped.overridePkgs
   ++ extraLibraries pkgs;
 
-  extraBuildCommands = ''
-    ln -s /usr/lib/libbz2.so usr/lib/libbz2.so.1.0
-  '' + lib.optionalString (steam-runtime-wrapped-i686 != null) ''
-    ln -s /usr/lib32/libbz2.so usr/lib32/libbz2.so.1.0
-  '';
-
   extraInstallCommands = ''
     mkdir -p $out/share/applications
     ln -s ${steam}/share/icons $out/share
@@ -269,7 +268,7 @@ in buildFHSUserEnv rec {
     name = "steam-run";
 
     targetPkgs = commonTargetPkgs;
-    inherit multiPkgs extraBuildCommands profile extraInstallCommands;
+    inherit multiPkgs profile extraInstallCommands;
 
     inherit unshareIpc unsharePid;
 
diff --git a/nixpkgs/pkgs/games/steam/runtime.nix b/nixpkgs/pkgs/games/steam/runtime.nix
index 8f2398255a41..c8c67e94b4a4 100644
--- a/nixpkgs/pkgs/games/steam/runtime.nix
+++ b/nixpkgs/pkgs/games/steam/runtime.nix
@@ -8,11 +8,11 @@ stdenv.mkDerivation rec {
 
   pname = "steam-runtime";
   # from https://repo.steampowered.com/steamrt-images-scout/snapshots/latest-steam-client-general-availability/VERSION.txt
-  version = "0.20211102.0";
+  version = "0.20220601.1";
 
   src = fetchurl {
     url = "https://repo.steampowered.com/steamrt-images-scout/snapshots/${version}/steam-runtime.tar.xz";
-    sha256 = "sha256-/ve4oVxKQ4uTaTiTg8Qc0Kyb4GRJKGZ5SQVLIyeJSpI=";
+    sha256 = "sha256-uYauNtbUlvrnATGks7hWy1zt4Y7AEeADrCr1eVylPbY=";
     name = "scout-runtime-${version}.tar.gz";
   };
 
diff --git a/nixpkgs/pkgs/games/stockfish/default.nix b/nixpkgs/pkgs/games/stockfish/default.nix
index 5a35ac51754c..2f40b2a34697 100644
--- a/nixpkgs/pkgs/games/stockfish/default.nix
+++ b/nixpkgs/pkgs/games/stockfish/default.nix
@@ -11,23 +11,23 @@ let
            if stdenv.isAarch64 then "armv8" else
            "unknown";
 
-    nnueFile = "nn-13406b1dcbe0.nnue";
+    nnueFile = "nn-6877cd24400e.nnue";
     nnue = fetchurl {
       name = nnueFile;
       url = "https://tests.stockfishchess.org/api/nn/${nnueFile}";
-      sha256 = "sha256-E0BrHcvgo238XgfaUdjbOLekXX2kMHjsJadiTCuDI28=";
+      sha256 = "sha256-aHfNJEAOAbGf8SrjBoriQhUoAr3TMOZve2cDhlJR1uM=";
     };
 in
 
 stdenv.mkDerivation rec {
   pname = "stockfish";
-  version = "14.1";
+  version = "15";
 
   src = fetchFromGitHub {
     owner = "official-stockfish";
     repo = "Stockfish";
     rev = "sf_${version}";
-    sha256 = "sha256-bb62yezHKXu0J7NKavX8xhHghaUjUFYNG5U6dh/D+Co=";
+    sha256 = "sha256-sK4Jw9BPGRvlm9oIcgGcmHe8G4GR4cEuD8MtDrHZKew=";
   };
 
   # This addresses a linker issue with Darwin
diff --git a/nixpkgs/pkgs/games/stuntrally/default.nix b/nixpkgs/pkgs/games/stuntrally/default.nix
index 64e2dcc379b1..537a3f83a036 100644
--- a/nixpkgs/pkgs/games/stuntrally/default.nix
+++ b/nixpkgs/pkgs/games/stuntrally/default.nix
@@ -18,25 +18,21 @@
 
 stdenv.mkDerivation rec {
   pname = "stunt-rally";
-  version = "2.6.1";
+  version = "2.6.2";
 
   src = fetchFromGitHub {
     owner = "stuntrally";
     repo = "stuntrally";
     rev = version;
-    hash = "sha256-1+Cc9I6TTa3b++/7Z2V+vAXcmFb2+wX7TnXEH6CRDWU=";
+    hash = "sha256-9I6hXsosqx+yYiEOEnPXQJHZkGtSU+JqThorwjemlc0=";
   };
   tracks = fetchFromGitHub {
     owner = "stuntrally";
     repo = "tracks";
     rev = version;
-    hash = "sha256-FbZc87j/9cp4LxNaEO2wNTvwk1Aq/IWcKD3rTGkzqj0=";
+    hash = "sha256-eZJAvkKe3PrXDzxTa5WFBHfltB3jhQh8puzOFDO9lso=";
   };
 
-  # include/OGRE/OgreException.h:265:126: error: invalid conversion from
-  # 'int' to 'Ogre::Exception::ExceptionCodes' [-fpermissive]
-  NIX_CFLAGS_COMPILE = "-fpermissive";
-
   preConfigure = ''
     ln -s ${tracks} data/tracks
   '';
diff --git a/nixpkgs/pkgs/games/system-syzygy/default.nix b/nixpkgs/pkgs/games/system-syzygy/default.nix
index 67bb6b716616..bdaded982add 100644
--- a/nixpkgs/pkgs/games/system-syzygy/default.nix
+++ b/nixpkgs/pkgs/games/system-syzygy/default.nix
@@ -1,4 +1,4 @@
-{lib, rustPlatform, fetchFromGitHub, fetchurl, SDL2, makeWrapper, makeDesktopItem}:
+{ stdenv, lib, rustPlatform, fetchFromGitHub, fetchurl, SDL2, makeWrapper, makeDesktopItem}:
 
 let
   desktopFile = makeDesktopItem {
@@ -35,6 +35,7 @@ rustPlatform.buildRustPackage rec {
 
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     description = "A story and a puzzle game, where you solve a variety of puzzle";
     homepage = "https://mdsteele.games/syzygy";
     license = licenses.gpl3Plus;
diff --git a/nixpkgs/pkgs/games/t4kcommon/default.nix b/nixpkgs/pkgs/games/t4kcommon/default.nix
index 74757c236c51..4a7a2e92b106 100644
--- a/nixpkgs/pkgs/games/t4kcommon/default.nix
+++ b/nixpkgs/pkgs/games/t4kcommon/default.nix
@@ -19,6 +19,13 @@ stdenv.mkDerivation rec {
     })
   ];
 
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: CMakeFiles/t4k_common.dir/t4k_throttle.c.o:(.bss+0x0): multiple definition of
+  #     `wrapped_lines'; CMakeFiles/t4k_common.dir/t4k_audio.c.o:(.bss+0x0): first defined here
+  # TODO: revisit https://github.com/tux4kids/t4kcommon/pull/10 when merged.
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [ SDL SDL_image SDL_mixer SDL_net SDL_ttf libpng librsvg libxml2 ];
 
diff --git a/nixpkgs/pkgs/games/taisei/default.nix b/nixpkgs/pkgs/games/taisei/default.nix
index 4bc04a336f83..886768786c10 100644
--- a/nixpkgs/pkgs/games/taisei/default.nix
+++ b/nixpkgs/pkgs/games/taisei/default.nix
@@ -3,16 +3,16 @@
 , docutils, meson, ninja, pkg-config, python3
 # Runtime depends
 , glfw, SDL2, SDL2_mixer
-, freetype, libpng, libwebp, libzip, zlib
+, cglm, freetype, libpng, libwebp, libzip, zlib
 }:
 
 stdenv.mkDerivation rec {
   pname = "taisei";
-  version = "1.3.1";
+  version = "1.3.2";
 
   src = fetchurl {
     url = "https://github.com/taisei-project/${pname}/releases/download/v${version}/${pname}-v${version}.tar.xz";
-    sha256 = "11f9mlqmzy1lszwcc1nsbar9q1hs4ml6pbm52hqfd4q0f4x3ln46";
+    sha256 = "1g53fcyrlzmvlsb40pw90gaglysv6n1w42hk263iv61ibhdmzh6v";
   };
 
   nativeBuildInputs = [
@@ -21,7 +21,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [
     glfw SDL2 SDL2_mixer
-    freetype libpng libwebp libzip zlib
+    cglm freetype libpng libwebp libzip zlib
   ];
 
   patches = [ ./0001-lto-fix.patch ];
@@ -31,6 +31,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     description = "A free and open-source Touhou Project clone and fangame";
     longDescription = ''
       Taisei is an open clone of the Tōhō Project series. Tōhō is a one-man
@@ -43,4 +44,3 @@ stdenv.mkDerivation rec {
     platforms = platforms.all;
   };
 }
-
diff --git a/nixpkgs/pkgs/games/tcl2048/default.nix b/nixpkgs/pkgs/games/tcl2048/default.nix
index b2796225a6c7..b74d3630e0e6 100644
--- a/nixpkgs/pkgs/games/tcl2048/default.nix
+++ b/nixpkgs/pkgs/games/tcl2048/default.nix
@@ -21,7 +21,8 @@ tcl.mkTclDerivation rec {
     homepage = "https://github.com/dbohdan/2048.tcl";
     description = "The game of 2048 implemented in Tcl";
     license = lib.licenses.mit;
-    platforms = lib.platforms.all;
     maintainers = with lib.maintainers; [ dbohdan ];
+    mainProgram = "2048";
+    platforms = lib.platforms.all;
   };
 }
diff --git a/nixpkgs/pkgs/games/the-butterfly-effect/default.nix b/nixpkgs/pkgs/games/the-butterfly-effect/default.nix
index f5330485eddc..cc753783f035 100644
--- a/nixpkgs/pkgs/games/the-butterfly-effect/default.nix
+++ b/nixpkgs/pkgs/games/the-butterfly-effect/default.nix
@@ -13,8 +13,9 @@ mkDerivation rec {
 
   postPatch = "sed '1i#include <vector>' -i src/model/World.h";
 
+  nativeBuildInputs = [ cmake ];
   buildInputs = [
-    qt5.qtbase qt5.qtsvg qt5.qttranslations box2d which cmake
+    qt5.qtbase qt5.qtsvg qt5.qttranslations box2d which
     gettext
   ];
 
diff --git a/nixpkgs/pkgs/games/the-powder-toy/default.nix b/nixpkgs/pkgs/games/the-powder-toy/default.nix
index ba2112617bbb..6b739c8049d5 100644
--- a/nixpkgs/pkgs/games/the-powder-toy/default.nix
+++ b/nixpkgs/pkgs/games/the-powder-toy/default.nix
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     description = "A free 2D physics sandbox game";
     homepage = "http://powdertoy.co.uk/";
-    platforms = [ "i686-linux" "x86_64-linux" "x86_64-darwin" ];
+    platforms = platforms.unix;
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ abbradar siraben ];
     mainProgram = "powder";
diff --git a/nixpkgs/pkgs/games/tintin/default.nix b/nixpkgs/pkgs/games/tintin/default.nix
index 2388158a36ac..7add5af64fc7 100644
--- a/nixpkgs/pkgs/games/tintin/default.nix
+++ b/nixpkgs/pkgs/games/tintin/default.nix
@@ -1,24 +1,21 @@
-{ stdenv, fetchurl, lib, zlib, pcre
+{ stdenv, fetchFromGitHub, lib, zlib, pcre
 , memorymappingHook, memstreamHook
-, tlsSupport ? true, gnutls ? null
-# ^ set { tlsSupport = false; } to reduce closure size by ~= 18.6 MB
+, gnutls
 }:
 
-assert tlsSupport -> gnutls != null;
-
 stdenv.mkDerivation rec {
   pname = "tintin";
-  version = "2.02.12";
+  version = "2.02.20";
 
-  src = fetchurl {
-    url    = "mirror://sourceforge/tintin/tintin-${version}.tar.gz";
-    sha256 = "sha256-tvn9TywefNyM/0Fy16gAFJYbA5Q4DO2RgiCdw014GgA=";
+  src = fetchFromGitHub {
+    owner = "scandum";
+    repo = "tintin";
+    rev = version;
+    hash = "sha256-H9Cjg/GkyV50pgewv77zOJ8/Op78P9sQmZ5LorO4L+A=";
   };
 
-  nativeBuildInputs = lib.optional tlsSupport gnutls.dev;
-  buildInputs = [ zlib pcre ]
-    ++ lib.optionals (stdenv.system == "x86_64-darwin") [ memorymappingHook memstreamHook ]
-    ++ lib.optional tlsSupport gnutls;
+  buildInputs = [ zlib pcre gnutls ]
+    ++ lib.optionals (stdenv.system == "x86_64-darwin") [ memorymappingHook memstreamHook ];
 
   preConfigure = ''
     cd src
@@ -26,9 +23,10 @@ stdenv.mkDerivation rec {
 
   meta = with lib; {
     description = "A free MUD client for macOS, Linux and Windows";
-    homepage    = "http://tintin.sourceforge.net";
-    license     = licenses.gpl2;
-    maintainers = with maintainers; [ lovek323 ];
+    homepage    = "https://tintin.mudhalla.net/index.php";
+    license     = licenses.gpl3Plus;
+    maintainers = with maintainers; [ abathur ];
+    mainProgram = "tt++";
     platforms   = platforms.unix;
   };
 }
diff --git a/nixpkgs/pkgs/games/tinyfugue/default.nix b/nixpkgs/pkgs/games/tinyfugue/default.nix
index 763241f2909d..e75d2f12b945 100644
--- a/nixpkgs/pkgs/games/tinyfugue/default.nix
+++ b/nixpkgs/pkgs/games/tinyfugue/default.nix
@@ -23,6 +23,12 @@ stdenv.mkDerivation rec {
     [ ncurses zlib ]
     ++ optional sslSupport openssl;
 
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: world.o:/build/tf-50b8/src/socket.h:24: multiple definition of
+  #     `world_decl'; command.o:/build/tf-50b8/src/socket.h:24: first defined here
+  NIX_CFLAGS_COMPILE="-fcommon";
+
   meta = {
     homepage = "http://tinyfugue.sourceforge.net/";
     description = "A terminal UI, screen-oriented MUD client";
diff --git a/nixpkgs/pkgs/games/titanion/default.nix b/nixpkgs/pkgs/games/titanion/default.nix
new file mode 100644
index 000000000000..47db68aa483e
--- /dev/null
+++ b/nixpkgs/pkgs/games/titanion/default.nix
@@ -0,0 +1,91 @@
+{ lib
+, stdenv
+, fetchpatch
+, fetchurl
+, unzip
+, gdc
+, SDL
+, SDL_mixer
+, bulletml
+}:
+
+let
+debianPatch = patchname: hash: fetchpatch {
+  name = "${patchname}.patch";
+  url = "https://sources.debian.org/data/main/t/titanion/0.3.dfsg1-7/debian/patches/${patchname}";
+  sha256 = hash;
+};
+
+in stdenv.mkDerivation rec {
+  pname = "titanion";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "http://abagames.sakura.ne.jp/windows/ttn${lib.replaceStrings ["."] ["_"] version}.zip";
+    sha256 = "sha256-fR0cufi6dU898wP8KGl/vxbfQJzMmMxlYZ3QNGLajfM=";
+  };
+
+  patches = [
+    (debianPatch
+      "imports.patch"
+      "sha256-kSXpaTpYq6w9e0yLES2QGNQ8+vFIiOpw2P9MA8gZr8s=")
+    (debianPatch
+      "fix.diff"
+      "sha256-0WkkfuhJaAMY46VVyc3ldMQwgOVoQJDw/8zbm6H2sHU=")
+    (debianPatch
+      "directories.patch"
+      "sha256-fhQJuy2+r0YOQNwMqG85Gr7fJehmf00Scran+NPYQrw=")
+    (debianPatch
+      "windowed.patch"
+      "sha256-xouXIuIKfKFGsoOEJqL9jdsdnkX4nqwPGcoB+32Wvgo=")
+    (debianPatch
+      "dotfile.patch"
+      "sha256-sAml53Hh0ltbqN8xZDZuUJcaPfjK56jf4ymFXYD38v0=")
+    (debianPatch
+      "window-resize.patch"
+      "sha256-WwAi1aU4CmaX+O8fw0TfLhNSXFaObExrn7nuhesVkKM=")
+    (debianPatch
+      "makefile.patch"
+      "sha256-g0jDPmc0SWXkTLhiczeTse/WGCtgMUsbyPNZzwK3U+o=")
+    (debianPatch
+      "dlang_v2.patch"
+      "sha256-tfTAAKlPFSjbfAK1EjeB3unj9tbMlNaajJ+VVSMMiYw=")
+    (debianPatch
+      "gdc-8.patch"
+      "sha256-BxkPfSEymq7TDA+yjJHaYsjtGr0Tuu1/sWLwRBAMga4=")
+  ];
+
+  postPatch = ''
+    rm *.dll ttn.exe
+    rm -r lib
+    for f in src/abagames/ttn/screen.d src/abagames/util/sdl/sound.d src/abagames/util/sdl/texture.d; do
+      substituteInPlace $f \
+        --replace "/usr/" "$out/"
+    done
+  '';
+
+  nativeBuildInputs = [
+    unzip
+    gdc
+  ];
+
+  buildInputs = [
+    SDL
+    SDL_mixer
+    bulletml
+  ];
+
+  installPhase = ''
+    install -Dm755 titanion $out/bin/titanion
+    mkdir -p $out/share/games/titanion
+    cp -r sounds images $out/share/games/titanion/
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.asahi-net.or.jp/~cs8k-cyu/windows/ttn_e.html";
+    description = "Strike down super high-velocity swooping insects";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ fgaz ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/games/tome4/default.nix b/nixpkgs/pkgs/games/tome4/default.nix
index 70fbebe084c7..704d09d72de9 100644
--- a/nixpkgs/pkgs/games/tome4/default.nix
+++ b/nixpkgs/pkgs/games/tome4/default.nix
@@ -52,7 +52,7 @@ stdenv.mkDerivation rec {
     install -Dm755 t-engine $dir/t-engine
     cp -r bootstrap game $dir
     makeWrapper $dir/t-engine $out/bin/${pname} \
-      --run "cd $dir"
+      --chdir "$dir"
 
     install -Dm755 ${desktop}/share/applications/${pname}.desktop $out/share/applications/${pname}.desktop
     substituteInPlace $out/share/applications/${pname}.desktop \
@@ -70,7 +70,7 @@ stdenv.mkDerivation rec {
     description = "Tales of Maj'eyal (rogue-like game)";
     homepage = "https://te4.org/";
     license = licenses.gpl3;
-    maintainers = with maintainers; [ chattered peterhoeg ];
-    platforms = with platforms; [ "i686-linux" "x86_64-linux" ];
+    maintainers = with maintainers; [ peterhoeg ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
   };
 }
diff --git a/nixpkgs/pkgs/games/tr-patcher/default.nix b/nixpkgs/pkgs/games/tr-patcher/default.nix
index 68e3eb608954..0336ed1ac02f 100644
--- a/nixpkgs/pkgs/games/tr-patcher/default.nix
+++ b/nixpkgs/pkgs/games/tr-patcher/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     description = "Allow to update dependancies of the Tamriel-Data mod for morrowind";
     homepage = "https://gitlab.com/bmwinger/tr-patcher";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.gpl3;
     maintainers = [ maintainers.marius851000 ];
     platforms = platforms.linux;
diff --git a/nixpkgs/pkgs/games/tremulous/default.nix b/nixpkgs/pkgs/games/tremulous/default.nix
deleted file mode 100644
index e07697f7c0e1..000000000000
--- a/nixpkgs/pkgs/games/tremulous/default.nix
+++ /dev/null
@@ -1,82 +0,0 @@
-{ lib, stdenv, fetchurl, unzip, libGLU, libGL, libX11, SDL, openal, runtimeShell }:
-stdenv.mkDerivation rec {
-  pname = "tremulous";
-  version = "1.1.0";
-  src1 = fetchurl {
-    url = "mirror://sourceforge/tremulous/${pname}-${version}.zip";
-    sha256 = "11w96y7ggm2sn5ncyaffsbg0vy9pblz2av71vqp9725wbbsndfy7";
-  };
-  # http://tremulous.net/wiki/Client_versions
-  src2 = fetchurl {
-    url = "http://releases.mercenariesguild.net/client/mgclient_source_Release_1.011.tar.gz";
-    sha256 = "1vrsi7va7hdp8k824663s1pyw9zpsd4bwwr50j7i1nn72b0v9a26";
-  };
-  src3 = fetchurl {
-    url = "http://releases.mercenariesguild.net/tremded/mg_tremded_source_1.01.tar.gz";
-    sha256 = "1njrqlhzjvy9myddzkagszwdcf3m4h08wip888w2rmbshs6kz6ql";
-  };
-  nativeBuildInputs = [ unzip ];
-  buildInputs = [ libGLU libGL libX11 SDL openal ];
-  unpackPhase = ''
-    unzip $src1
-    cd tremulous
-    tar xvf $src2
-    mkdir mg_tremded_source
-    cd mg_tremded_source
-    tar xvf $src3
-    cd ..
-  '';
-  patches = [ ./parse.patch ];
-  patchFlags = [ "-p" "0" ];
-  NIX_LD_FLAGS = ''
-    -rpath ${stdenv.cc}/lib
-    -rpath ${stdenv.cc}/lib64
-  '';
-  buildPhase = ''
-    cd Release_1.011
-    make
-    cd ..
-    cd mg_tremded_source
-    make
-    cd ..
-  '';
-  installPhase = ''
-    arch=$(uname -m | sed -e s/i.86/x86/)
-    mkdir -p $out/opt/tremulous
-    cp -v Release_1.011/build/release-linux-$arch/tremulous.$arch $out/opt/tremulous/
-    cp -v mg_tremded_source/build/release-linux-$arch/tremded.$arch $out/opt/tremulous/
-    cp -rv base $out/opt/tremulous
-    mkdir -p $out/bin
-    for b in tremulous tremded
-    do
-        cat << EOF > $out/bin/$b
-    #!${runtimeShell}
-    cd $out/opt/tremulous
-    exec ./$b.$arch "\$@"
-    EOF
-        chmod +x $out/bin/$b
-    done
-  '';
-  dontPatchELF = true;
-  meta = with lib; {
-    description = "A game that blends a team based FPS with elements of an RTS";
-    longDescription = ''
-      Tremulous is a free, open source game that blends a team based FPS with
-      elements of an RTS. Players can choose from 2 unique races, aliens and
-      humans. Players on both teams are able to build working structures
-      in-game like an RTS. These structures provide many functions, the most
-      important being spawning. The designated builders must ensure there are
-      spawn structures or other players will not be able to rejoin the game
-      after death. Other structures provide automated base defense (to some
-      degree), healing functions and much more...
-    '';
-    homepage = "http://www.tremulous.net";
-    license = with licenses; [
-      gpl2
-      cc-by-sa-25 /* media */
-    ];
-    maintainers = with maintainers; [ astsmtl ];
-    platforms = platforms.linux;
-    broken = true;
-  };
-}
diff --git a/nixpkgs/pkgs/games/tremulous/parse.patch b/nixpkgs/pkgs/games/tremulous/parse.patch
deleted file mode 100644
index 12a73138c099..000000000000
--- a/nixpkgs/pkgs/games/tremulous/parse.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -ruN Release_1.011-old/src/qcommon/parse.c Release_1.011/src/qcommon/parse.c
---- Release_1.011-old/src/qcommon/parse.c	2011-12-02 19:11:49.307368651 -0500
-+++ Release_1.011/src/qcommon/parse.c	2011-12-02 19:13:27.556836387 -0500
-@@ -981,7 +981,7 @@
- {
-   if (*string == '\"')
-   {
--    strcpy(string, string+1);
-+    memmove(string, string+1, strlen(string));
-   }
-   if (string[strlen(string)-1] == '\"')
-   {
-@@ -1784,7 +1784,7 @@
-     if ((*ptr == '\\' || *ptr == '/') &&
-         (*(ptr+1) == '\\' || *(ptr+1) == '/'))
-     {
--      strcpy(ptr, ptr+1);
-+      memmove(ptr, ptr+1, strlen(ptr));
-     }
-     else
-     {
diff --git a/nixpkgs/pkgs/games/tworld2/default.nix b/nixpkgs/pkgs/games/tworld2/default.nix
index 1db1dcf5f065..158d494fb32d 100644
--- a/nixpkgs/pkgs/games/tworld2/default.nix
+++ b/nixpkgs/pkgs/games/tworld2/default.nix
@@ -1,8 +1,8 @@
 { stdenv
 , lib
 , fetchurl
-, qt4
 , SDL
+, qt4
 }:
 
 stdenv.mkDerivation rec {
@@ -11,10 +11,11 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "https://tw2.bitbusters.club/downloads/tworld-${version}-src.tar.gz";
-    sha256 = "sha256:1y55v2shk2xxcds7bdwdjaq9lka31sgdp2469zqnvldchwbvcb2i";
+    hash = "sha256-USy2F4es0W3xT4aI254OQ02asJKNt3V0Y72LCbXYpfg=";
   };
 
-  buildInputs = [ qt4 SDL ];
+  buildInputs = [ SDL qt4 ];
+
   enableParallelBuilding = true;
 
   postConfigure = ''
@@ -36,10 +37,10 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "Tile World 2: Tile World is a reimplementation of the game Chip's Challenge";
     homepage = "https://tw2.bitbusters.club/";
+    description = "Tile World 2: Tile World is a reimplementation of the game Chip's Challenge";
     license = licenses.gpl2Plus;
-    platforms = platforms.linux;
     maintainers = with maintainers; [ drperceptron ];
+    platforms = platforms.linux;
   };
 }
diff --git a/nixpkgs/pkgs/games/typespeed/default.nix b/nixpkgs/pkgs/games/typespeed/default.nix
index 1581ab138945..0c2d928dd5ea 100644
--- a/nixpkgs/pkgs/games/typespeed/default.nix
+++ b/nixpkgs/pkgs/games/typespeed/default.nix
@@ -11,6 +11,12 @@ stdenv.mkDerivation rec {
 
   patches = [ ./typespeed-config-in-home.patch ];
 
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: typespeed-typespeed.o:/build/typespeed-0.6.5/src/typespeed.h:69: multiple definition of
+  #     `opt'; typespeed-file.o:/build/typespeed-0.6.5/src/typespeed.h:69: first defined here
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   configureFlags = [ "--datadir=\${out}/share/" ];
   makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
 
diff --git a/nixpkgs/pkgs/games/ue4/default.nix b/nixpkgs/pkgs/games/ue4/default.nix
index 95f0d64f1975..0260e4f2e20d 100644
--- a/nixpkgs/pkgs/games/ue4/default.nix
+++ b/nixpkgs/pkgs/games/ue4/default.nix
@@ -76,7 +76,8 @@ stdenv.mkDerivation rec {
     homepage = "https://www.unrealengine.com/what-is-unreal-engine-4";
     license = lib.licenses.unfree;
     platforms = lib.platforms.linux;
-    maintainers = [ lib.maintainers.puffnfresh ];
+    maintainers = [ ];
+    # See issue https://github.com/NixOS/nixpkgs/issues/17162
     broken = true;
   };
 }
diff --git a/nixpkgs/pkgs/games/ue4demos/default.nix b/nixpkgs/pkgs/games/ue4demos/default.nix
index 51148e42e8e1..ce3f3ad38f8d 100644
--- a/nixpkgs/pkgs/games/ue4demos/default.nix
+++ b/nixpkgs/pkgs/games/ue4demos/default.nix
@@ -24,7 +24,7 @@ let
         cd $out
         unzip $src
 
-        interpreter=$(echo ${stdenv.glibc.out}/lib/ld-linux*.so.2)
+        interpreter=$(echo ${stdenv.cc.libc}/lib/ld-linux*.so.2)
         binary=$(find . -executable -type f)
         patchelf \
           --set-interpreter $interpreter \
diff --git a/nixpkgs/pkgs/games/ufoai/default.nix b/nixpkgs/pkgs/games/ufoai/default.nix
index 1dc2abbf7624..f596ac2756b6 100644
--- a/nixpkgs/pkgs/games/ufoai/default.nix
+++ b/nixpkgs/pkgs/games/ufoai/default.nix
@@ -14,6 +14,13 @@ stdenv.mkDerivation rec {
     sha256 = "1drhh08cqqkwv1yz3z4ngkplr23pqqrdx6cp8c3isy320gy25cvb";
   };
 
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: r_gl.h:52: multiple definition of `qglGenBuffers';
+  #     r_gl.h:52: first defined here
+  # TODO: drop once release contains upstream fix:
+  #   https://github.com/ufoai/ufoai/commit/8a3075fffdad294e
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   preConfigure = ''tar xvf "${srcData}"'';
 
   configureFlags = [ "--enable-release" "--enable-sse" ]
diff --git a/nixpkgs/pkgs/games/uhexen2/default.nix b/nixpkgs/pkgs/games/uhexen2/default.nix
index 78c38753f790..c76dd9ec2524 100644
--- a/nixpkgs/pkgs/games/uhexen2/default.nix
+++ b/nixpkgs/pkgs/games/uhexen2/default.nix
@@ -51,6 +51,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     description = "A cross-platform port of Hexen II game";
     longDescription = ''
       Hammer of Thyrion (uHexen2) is a cross-platform port of Raven Software's Hexen II source.
diff --git a/nixpkgs/pkgs/games/umoria/default.nix b/nixpkgs/pkgs/games/umoria/default.nix
new file mode 100644
index 000000000000..13ec037afba7
--- /dev/null
+++ b/nixpkgs/pkgs/games/umoria/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, gcc9Stdenv
+, fetchFromGitHub
+, autoreconfHook
+, cmake
+, ncurses6
+, runtimeShell
+}:
+
+let
+  savesDir = "~/.umoria";
+in
+gcc9Stdenv.mkDerivation rec {
+  pname = "umoria";
+  version = "5.7.15";
+
+  src = fetchFromGitHub {
+    owner = "dungeons-of-moria";
+    repo = "umoria";
+    rev = "v${version}";
+    sha256 = "sha256-1j4QkE33UcTzM06qAjk1/PyK5uNA7E/kyDe3bZcFKUM=";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ ncurses6 ];
+  enableParallelBuilding = true;
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/data $out/bin
+    cp -r umoria/data/* $out/data
+    cp umoria/umoria $out/.umoria-unwrapped
+
+    mkdir -p $out/bin
+    cat <<EOF >$out/bin/umoria
+    #! ${runtimeShell} -e
+
+    RUNDIR=\$(mktemp -d)
+
+    # Print the directory, so users have access to dumps, and let the system
+    # take care of cleaning up temp files.
+    echo "Running umoria in \$RUNDIR"
+
+    cd \$RUNDIR
+    ln -sn $out/data \$RUNDIR/data
+
+    mkdir -p ${savesDir}
+    [[ ! -f ${savesDir}/scores.dat ]] && touch ${savesDir}/scores.dat
+    ln -s ${savesDir}/scores.dat scores.dat
+
+    if [ \$# -eq 0 ]; then
+       $out/.umoria-unwrapped ${savesDir}/game.sav
+    else
+       $out/.umoria-unwrapped "\$@"
+    fi
+    EOF
+
+    chmod +x $out/bin/umoria
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://umoria.org/";
+    description = "The Dungeons of Moria - the original roguelike";
+    longDescription = ''
+      The Dungeons of Moria is a single player dungeon simulation originally written
+      by Robert Alan Koeneke, with its first public release in 1983.
+      The game was originally developed using VMS Pascal before being ported to the C
+      language by James E. Wilson in 1988, and released a Umoria.
+    '';
+    platforms = platforms.unix;
+    badPlatforms = [ "aarch64-darwin" ];
+    maintainers = with maintainers; [ aciceri kenran ];
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/games/unciv/default.nix b/nixpkgs/pkgs/games/unciv/default.nix
index 50db51b4e89e..49b07f3ad654 100644
--- a/nixpkgs/pkgs/games/unciv/default.nix
+++ b/nixpkgs/pkgs/games/unciv/default.nix
@@ -25,11 +25,11 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "unciv";
-  version = "3.19.12";
+  version = "3.19.14";
 
   src = fetchurl {
     url = "https://github.com/yairm210/Unciv/releases/download/${version}/Unciv.jar";
-    sha256 = "sha256-PALrOyaUYXyNH+QdE8oy1TM5U4SZjw1N0NJ2BKiqjtU=";
+    sha256 = "sha256-Q0OiXjqZ6RmQg3Ob6k4NjaHsc+K50a0bAGBaaaUcP3I=";
   };
 
   dontUnpack = true;
@@ -53,6 +53,7 @@ stdenv.mkDerivation rec {
     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 = [ "x86_64-linux" ];
   };
diff --git a/nixpkgs/pkgs/games/unvanquished/default.nix b/nixpkgs/pkgs/games/unvanquished/default.nix
index 191d8c218070..8b0ff1ca989d 100644
--- a/nixpkgs/pkgs/games/unvanquished/default.nix
+++ b/nixpkgs/pkgs/games/unvanquished/default.nix
@@ -1,8 +1,35 @@
-{ lib, stdenv, fetchzip, fetchFromGitHub, buildFHSUserEnv, makeDesktopItem
-, copyDesktopItems, gcc, cmake, gmp , libGL, zlib, ncurses, geoip, lua5
-, nettle, curl, SDL2, freetype, glew , openal, libopus, opusfile, libogg
-, libvorbis, libjpeg, libwebp, libpng
-, cacert, aria2 # to download assets
+{ lib
+, stdenv
+, fetchzip
+, fetchFromGitHub
+, fetchpatch
+, SDL2
+, buildFHSUserEnv
+, cmake
+, copyDesktopItems
+, curl
+, freetype
+, gcc
+, geoip
+, glew
+, gmp
+, libGL
+, libjpeg
+, libogg
+, libopus
+, libpng
+, libvorbis
+, libwebp
+, lua5
+, makeDesktopItem
+, ncurses
+, nettle
+, openal
+, opusfile
+, zlib
+# to download assets
+, aria2
+, cacert
 }:
 
 let
@@ -14,18 +41,21 @@ let
     repo = "Unvanquished";
     rev = "v${version}";
     fetchSubmodules = true;
-    sha256 = "1fiqn9f6nsh4cfjy7gfsv950hphwi9ca0ddgsjvn77g7yc0arp6c";
+    sha256 = "sha256-zNysAPPnnWO31K81oFiKHF4IStraveOlYwRqa1yyOLo=";
   };
 
   unvanquished-binary-deps = stdenv.mkDerivation rec {
     # DISCLAIMER: this is selected binary crap from the NaCl SDK
     name = "unvanquished-binary-deps";
     version = binary-deps-version;
+
     src = fetchzip {
       url = "https://dl.unvanquished.net/deps/linux64-${version}.tar.bz2";
-      sha256 = "08bpyavbh5lmyprvqqi59gnm8s1fjmlk9f1785wlv7f52d9f9z1p";
+      sha256 = "sha256-N/zkUhPFnU15QSe4NGmVLmhU7UslYrzz9ZUWuLbydyE=";
     };
+
     dontPatchELF = true;
+
     preFixup = ''
       # We are not using the autoPatchelfHook, because it would make
       # nacl_bootstrap_helper unable to load nacl_loader:
@@ -38,7 +68,12 @@ let
         fi
       done
     '';
-    preCheck = "pnacl/bin/clang -v"; # check it links correctly
+
+    preCheck = ''
+      # check it links correctly
+      pnacl/bin/clang -v
+    '';
+
     installPhase = ''
       runHook preInstall
 
@@ -51,15 +86,18 @@ let
 
   libstdcpp-preload-for-unvanquished-nacl = stdenv.mkDerivation {
     name = "libstdcpp-preload-for-unvanquished-nacl";
+
+    propagatedBuildInputs = [ gcc.cc.lib ];
+
     buildCommand = ''
       mkdir $out/etc -p
       echo ${gcc.cc.lib}/lib/libstdc++.so.6 > $out/etc/ld-nix.so.preload
     '';
-    propagatedBuildInputs = [ gcc.cc.lib ];
   };
 
   fhsEnv = buildFHSUserEnv {
     name = "unvanquished-fhs-wrapper";
+
     targetPkgs = pkgs: [ libstdcpp-preload-for-unvanquished-nacl ];
   };
 
@@ -81,10 +119,14 @@ let
     pname = "unvanquished-assets";
     inherit version src;
 
-    outputHash = "sha256:084jdisb48xyk9agjifn0nlnsdnjgg32si8zd1khsywd0kffplzx";
+    outputHash = "sha256-/dPr3ASNew1naB9FLcZ70jZtqQXWRflUmr4jsnRskiA=";
     outputHashMode = "recursive";
+
     nativeBuildInputs = [ aria2 cacert ];
-    buildCommand = "bash $src/download-paks --cache=$(pwd) --version=${version} $out";
+
+    buildCommand = ''
+      bash $src/download-paks --cache=$(pwd) --version=${version} $out
+    '';
   };
 
 # this really is the daemon game engine, the game itself is in the assets
@@ -98,7 +140,30 @@ in stdenv.mkDerivation rec {
     chmod +w -R daemon/external_deps/linux64-${binary-deps-version}/
   '';
 
-  nativeBuildInputs = [ cmake unvanquished-binary-deps copyDesktopItems ];
+  patches = [
+    (fetchpatch {
+      name = "fix-sdl-eventqueue-part1.patch";
+      url = "https://github.com/DaemonEngine/Daemon/commit/3a978c485f2a7e02c0bc5aeed2c7c4378026cb33.patch";
+      sha256 = "sha256-wVDscGf5zOOmivItNK913l0cfNFR6RpApewrxbmfG8s=";
+      stripLen = 1;
+      extraPrefix = "daemon/";
+    })
+    (fetchpatch {
+      name = "fix-sdl-eventqueue-part2.patch";
+      url = "https://github.com/DaemonEngine/Daemon/commit/54f98909c8871a57efb40263b215b81f22010b22.patch";
+      sha256 = "sha256-9qlyJnUEyZgFaclpXthKHm3qq+cW4E4LMOpLukcwBCU=";
+      stripLen = 1;
+      extraPrefix = "daemon/";
+      excludes = [ "*/CMakeLists.txt" ];
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    unvanquished-binary-deps
+    copyDesktopItems
+  ];
+
   buildInputs = [
     gmp
     libGL
@@ -168,17 +233,22 @@ in stdenv.mkDerivation rec {
 
     runHook postInstall
   '';
+
   meta = {
-    platforms = [ "x86_64-linux" ];
     homepage = "https://unvanquished.net/";
     downloadPage = "https://unvanquished.net/download/";
     description = "A fast paced, first person strategy game";
-    maintainers = with lib.maintainers; [ afontain ];
     # don't replace the following lib.licenses.zlib with just "zlib",
     # or you would end up with the package instead
     license = with lib.licenses; [
       mit gpl3Plus lib.licenses.zlib bsd3 # engine
       cc-by-sa-25 cc-by-sa-30 cc-by-30 cc-by-sa-40 cc0 # assets
     ];
+    sourceProvenance = with lib.sourceTypes; [
+      fromSource
+      binaryNativeCode  # unvanquished-binary-deps
+    ];
+    maintainers = with lib.maintainers; [ afontain ];
+    platforms = [ "x86_64-linux" ];
   };
 }
diff --git a/nixpkgs/pkgs/games/uqm/default.nix b/nixpkgs/pkgs/games/uqm/default.nix
index 5b67b9bce94e..797c41916f1c 100644
--- a/nixpkgs/pkgs/games/uqm/default.nix
+++ b/nixpkgs/pkgs/games/uqm/default.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, fetchurl, fetchFromGitHub, pkg-config, libGLU, libGL
-, SDL, SDL_image, libpng, libvorbis, libogg, libmikmod
+, SDL2, libpng, libvorbis, libogg, libmikmod
 
 , use3DOVideos ? false, requireFile ? null, writeText ? null
 , haskellPackages ? null
@@ -28,37 +28,37 @@ let
 
 in stdenv.mkDerivation rec {
   pname = "uqm";
-  version = "0.7.0";
+  version = "0.8.0";
 
   src = fetchurl {
-    url = "mirror://sourceforge/sc2/uqm-${version}-source.tgz";
-    sha256 = "08dj7fsvflxx69an6vpf3wx050mk0ycmdv401yffrrqbgxgmqsd3";
+    url = "mirror://sourceforge/sc2/uqm-${version}-src.tgz";
+    sha256 = "JPL325z3+vU7lfniWA5vWWIFqY7QwzXP6DTGR4WtT1o=";
   };
 
   content = fetchurl {
     url = "mirror://sourceforge/sc2/uqm-${version}-content.uqm";
-    sha256 = "1gx39ns698hyczd4nx73mr0z86bbi4q3h8sw3pxjh1lzla5xpxmq";
+    sha256 = "d9dawl5vt1WjPEujs4p7e8Qfy8AolokbDMmskhS3Lu8=";
   };
 
   voice = fetchurl {
     url = "mirror://sourceforge/sc2/uqm-${version}-voice.uqm";
-    sha256 = "0yf9ff5sxk229202gsa7ski6wn7a8hkjjyr1yr7mjdxsnh0zik5w";
+    sha256 = "ntv1HXfYtTM5nF86+1STFKghDXqrccosUbTySDIzekU=";
   };
 
   music = fetchurl {
     url = "mirror://sourceforge/sc2/uqm-${version}-3domusic.uqm";
-    sha256 = "10nbvcrr0lc0mxivxfkcbxnibwk3vwmamabrlvwdsjxd9pk8aw65";
+    sha256 = "RM087H6VabQRettNd/FSKJCXJWYmc5GuCWMUhdIx2Lk=";
   };
 
   nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ SDL SDL_image libpng libvorbis libogg libmikmod libGLU libGL ];
+  buildInputs = [ SDL2 libpng libvorbis libogg libmikmod libGLU libGL ];
 
   postUnpack = ''
     mkdir -p uqm-${version}/content/packages
     mkdir -p uqm-${version}/content/addons
-    ln -s "$content" "uqm-${version}/content/packages/uqm-0.7.0-content.uqm"
-    ln -s "$music" "uqm-${version}/content/addons/uqm-0.7.0-3domusic.uqm"
-    ln -s "$voice" "uqm-${version}/content/addons/uqm-0.7.0-voice.uqm"
+    ln -s "$content" "uqm-${version}/content/packages/uqm-${version}-content.uqm"
+    ln -s "$music" "uqm-${version}/content/addons/uqm-${version}-3domusic.uqm"
+    ln -s "$voice" "uqm-${version}/content/addons/uqm-${version}-voice.uqm"
   '' + lib.optionalString useRemixPacks (lib.concatMapStrings (disc: ''
     ln -s "${disc}" "uqm-$version/content/addons/${disc.name}"
   '') remixPacks) + lib.optionalString use3DOVideos ''
diff --git a/nixpkgs/pkgs/games/urbanterror/default.nix b/nixpkgs/pkgs/games/urbanterror/default.nix
index dfbad29fa9e0..fbb633bb657b 100644
--- a/nixpkgs/pkgs/games/urbanterror/default.nix
+++ b/nixpkgs/pkgs/games/urbanterror/default.nix
@@ -68,7 +68,7 @@ stdenv.mkDerivation rec {
     '';
     homepage = "http://www.urbanterror.info";
     license = licenses.unfreeRedistributable;
-    maintainers = with maintainers; [ astsmtl fpletz ];
+    maintainers = with maintainers; [ astsmtl ];
     platforms = platforms.linux;
     hydraPlatforms = [];
   };
diff --git a/nixpkgs/pkgs/games/ut2004/wrapper.nix b/nixpkgs/pkgs/games/ut2004/wrapper.nix
index bf344372933d..cc5b0e400bc1 100644
--- a/nixpkgs/pkgs/games/ut2004/wrapper.nix
+++ b/nixpkgs/pkgs/games/ut2004/wrapper.nix
@@ -38,7 +38,7 @@ in runCommand "ut2004" {
   for i in ${game}/System/*-bin; do
     name="$(basename "$i")"
     makeWrapper $i $out/bin/''${name%-bin} \
-      --run "cd ${game}/System"
+      --chdir "${game}/System"
   done
 
   mkdir -p $out/share/applications
diff --git a/nixpkgs/pkgs/games/vassal/default.nix b/nixpkgs/pkgs/games/vassal/default.nix
index 905d51438b68..fd3df36bdb51 100644
--- a/nixpkgs/pkgs/games/vassal/default.nix
+++ b/nixpkgs/pkgs/games/vassal/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "VASSAL";
-  version = "3.6.5";
+  version = "3.6.7";
 
   src = fetchzip {
     url = "https://github.com/vassalengine/vassal/releases/download/${version}/${pname}-${version}-linux.tar.bz2";
-    sha256 = "sha256-wnaT0+r599/RboeUfpCZTNd/M2kaCsckI9F+7r7leEE=";
+    sha256 = "sha256-WTYMbVtAciscnBzR4uHmVVXpuge53e32uLmUF8/w6I0=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
       description = "A free, open-source boardgame engine";
       homepage = "https://vassalengine.org/";
+      sourceProvenance = with sourceTypes; [ binaryBytecode ];
       license = licenses.lgpl21Only;
       maintainers = with maintainers; [ tvestelind ];
       platforms = platforms.unix;
diff --git a/nixpkgs/pkgs/games/vectoroids/default.nix b/nixpkgs/pkgs/games/vectoroids/default.nix
index 765f21465805..82c157104439 100644
--- a/nixpkgs/pkgs/games/vectoroids/default.nix
+++ b/nixpkgs/pkgs/games/vectoroids/default.nix
@@ -1,14 +1,25 @@
-{lib, stdenv, fetchurl, SDL, SDL_image, SDL_mixer}:
+{ lib
+, stdenv
+, fetchurl
+, SDL
+, SDL_image
+, SDL_mixer
+}:
 
 stdenv.mkDerivation rec {
   pname = "vectoroids";
   version = "1.1.0";
+
   src = fetchurl {
     url = "ftp://ftp.tuxpaint.org/unix/x/vectoroids/src/vectoroids-${version}.tar.gz";
     sha256 = "0bkvd4a1v496w0vlvqyi1a6p25ssgpkchxxxi8899sb72wlds54d";
   };
 
-  buildInputs = [ SDL SDL_image SDL_mixer];
+  buildInputs = [
+    SDL
+    SDL_image
+    SDL_mixer
+  ];
 
   preConfigure = ''
     sed -i s,/usr/local,$out, Makefile
diff --git a/nixpkgs/pkgs/games/vintagestory/default.nix b/nixpkgs/pkgs/games/vintagestory/default.nix
index e6e7d28e17bd..4c94fa4f1ae3 100644
--- a/nixpkgs/pkgs/games/vintagestory/default.nix
+++ b/nixpkgs/pkgs/games/vintagestory/default.nix
@@ -17,11 +17,11 @@
 
 stdenv.mkDerivation rec {
   pname = "vintagestory";
-  version = "1.16.4";
+  version = "1.16.5";
 
   src = fetchurl {
     url = "https://cdn.vintagestory.at/gamefiles/stable/vs_archive_${version}.tar.gz";
-    sha256 = "sha256-wdwQ1Dv0872nEOYIB+rEzYtG5rnSw8DZgoSlSvCvtrI=";
+    sha256 = "sha256-qqrQ+cs/ujzeXAa0xX5Yee3l5bo9DaH+kS1pkCt/UoU=";
   };
 
   nativeBuildInputs = [ makeWrapper copyDesktopItems ];
diff --git a/nixpkgs/pkgs/games/wargus/default.nix b/nixpkgs/pkgs/games/wargus/default.nix
index fda4f792c7b2..ca4b70923eca 100644
--- a/nixpkgs/pkgs/games/wargus/default.nix
+++ b/nixpkgs/pkgs/games/wargus/default.nix
@@ -1,11 +1,30 @@
 { stdenv, lib, callPackage, fetchFromGitHub
+, fetchurl, runCommand, unzip, bchunk, p7zip
 , cmake, pkg-config, makeWrapper
 , zlib, bzip2, libpng
-, dialog, python3, cdparanoia
+, dialog, python3, cdparanoia, ffmpeg
 }:
 
 let
   stratagus = callPackage ./stratagus.nix {};
+
+  dataDownload = fetchurl {
+    url = "https://archive.org/download/warcraft-ii-tides-of-darkness_202105/Warcess.zip";
+    sha256 = "0yxgvf8xpv1w2bjmny4a38pa3xcdgqckk9abj21ilkc5zqzqmm9b";
+  };
+
+  data = runCommand "warcraft2" {
+    buildInputs = [ unzip bchunk p7zip ];
+    meta.license = lib.licenses.unfree;
+  } ''
+    unzip ${dataDownload} "Warcraft.II.Tides.of.Darkness/Warcraft II - Tides of Darkness (1995)/games/WarcrafD/cd/"{WC2BTDP.img,WC2BTDP.cue}
+    bchunk "Warcraft.II.Tides.of.Darkness/Warcraft II - Tides of Darkness (1995)/games/WarcrafD/cd/"{WC2BTDP.img,WC2BTDP.cue} WC2BTDP
+    rm -r Warcraft.II.Tides.of.Darkness
+    7z x WC2BTDP01.iso
+    rm WC2BTDP*.{iso,cdr}
+    cp -r DATA $out
+  '';
+
 in
 stdenv.mkDerivation rec {
   pname = "wargus";
@@ -15,10 +34,10 @@ stdenv.mkDerivation rec {
     owner = "wargus";
     repo = "wargus";
     rev = "v${version}";
-    sha256 = "0dibm68jxaqzgzcyblfj2bmwyz9v5ax0njnnbvak7xjk1zlh11sx";
+    sha256 = "sha256-yJeMFxCD0ikwVPQApf+IBuMQ6eOjn1fVKNmqh6r760c=";
   };
 
-  nativeBuildInputs = [ cmake pkg-config makeWrapper ];
+  nativeBuildInputs = [ cmake pkg-config makeWrapper ffmpeg ];
   buildInputs = [ zlib bzip2 libpng ];
   cmakeFlags = [
     "-DSTRATAGUS=${stratagus}/games/stratagus"
@@ -26,7 +45,12 @@ stdenv.mkDerivation rec {
   ];
   postInstall = ''
     makeWrapper $out/games/wargus $out/bin/wargus \
-      --prefix PATH : ${lib.makeBinPath [ "$out" cdparanoia python3 ]}
+      --prefix PATH : ${lib.makeBinPath [ "$out" ]}
+    substituteInPlace $out/share/applications/wargus.desktop \
+      --replace $out/games/wargus $out/bin/wargus
+
+    $out/bin/wartool -v -r ${data} $out/share/games/stratagus/wargus
+    ln -s $out/share/games/stratagus/wargus/{contrib/black_title.png,graphics/ui/black_title.png}
   '';
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/games/wargus/stratagus.nix b/nixpkgs/pkgs/games/wargus/stratagus.nix
index f029e284f336..fc4f23427994 100644
--- a/nixpkgs/pkgs/games/wargus/stratagus.nix
+++ b/nixpkgs/pkgs/games/wargus/stratagus.nix
@@ -1,25 +1,25 @@
 { lib, stdenv, fetchFromGitHub
 , cmake, pkg-config, makeWrapper
 , zlib, bzip2, libpng, lua5_1, toluapp
-, SDL, SDL_mixer, SDL_image, libGL
+, SDL2, SDL2_mixer, SDL2_image, libGL
 }:
 
 stdenv.mkDerivation rec {
   pname = "stratagus";
-  version = "2.4.3";
+  version = "3.3.1";
 
   src = fetchFromGitHub {
     owner = "wargus";
     repo = "stratagus";
     rev = "v${version}";
-    sha256 = "128m5n9axq007xi8a002ig7d4dyw8j060542x220ld66ibfprhcn";
+    sha256 = "sha256-q8AvIWr/bOzI0wV0D2emxIXYEKDYmFxbtwr2BS+xYfA=";
   };
 
   nativeBuildInputs = [ cmake pkg-config ];
   buildInputs = [
     zlib bzip2 libpng
     lua5_1 toluapp
-    SDL.dev SDL_image SDL_mixer libGL
+    (lib.getDev SDL2) SDL2_image SDL2_mixer libGL
   ];
   cmakeFlags = [
     "-DCMAKE_CXX_FLAGS=-Wno-error=format-overflow"
diff --git a/nixpkgs/pkgs/games/warsow/default.nix b/nixpkgs/pkgs/games/warsow/default.nix
index 81c467dd9db7..007b124ba58c 100644
--- a/nixpkgs/pkgs/games/warsow/default.nix
+++ b/nixpkgs/pkgs/games/warsow/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
 
     mkdir -p $out/bin
     for i in ${warsow-engine}/bin/*; do
-      makeWrapper "$i" "$out/bin/$(basename "$i")" --run "cd $out/share/warsow"
+      makeWrapper "$i" "$out/bin/$(basename "$i")" --chdir "$out/share/warsow"
     done
   '';
 
diff --git a/nixpkgs/pkgs/games/warsow/engine.nix b/nixpkgs/pkgs/games/warsow/engine.nix
index e796c589290a..51974034b3f0 100644
--- a/nixpkgs/pkgs/games/warsow/engine.nix
+++ b/nixpkgs/pkgs/games/warsow/engine.nix
@@ -25,6 +25,11 @@ stdenv.mkDerivation rec {
     libpng
   ];
 
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: CMakeFiles/wswtv_server.dir/__/unix/unix_time.c.o:(.bss+0x8): multiple definition of
+  #     `c_pointcontents'; CMakeFiles/wswtv_server.dir/__/null/ascript_null.c.o:(.bss+0x8): first defined here
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   cmakeFlags = [ "-DQFUSION_GAME=Warsow" ];
 
   preConfigure = ''
diff --git a/nixpkgs/pkgs/games/warzone2100/default.nix b/nixpkgs/pkgs/games/warzone2100/default.nix
index a44f965b0e55..2df306d686f2 100644
--- a/nixpkgs/pkgs/games/warzone2100/default.nix
+++ b/nixpkgs/pkgs/games/warzone2100/default.nix
@@ -26,7 +26,7 @@
 , vulkan-loader
 , shaderc
 
-, testVersion
+, testers
 , warzone2100
 
 , withVideos ? false
@@ -104,7 +104,7 @@ stdenv.mkDerivation rec {
   '';
 
   passthru.tests = {
-    version = testVersion {
+    version = testers.testVersion {
       package = warzone2100;
       # The command always exits with code 1
       command = "(warzone2100 --version || [ $? -eq 1 ])";
diff --git a/nixpkgs/pkgs/games/wesnoth/default.nix b/nixpkgs/pkgs/games/wesnoth/default.nix
index fa6b8cb631fc..b6ee5ac7d7b2 100644
--- a/nixpkgs/pkgs/games/wesnoth/default.nix
+++ b/nixpkgs/pkgs/games/wesnoth/default.nix
@@ -5,13 +5,13 @@
 
 stdenv.mkDerivation rec {
   pname = "wesnoth";
-  version = "1.16.1";
+  version = "1.16.5";
 
   src = fetchFromGitHub {
     rev = version;
     owner = "wesnoth";
     repo = "wesnoth";
-    sha256 = "sha256-eRegE+Q5dEtuT2XRKAK0sycRuK6sdSXKS6aLCsBDU8g=";
+    sha256 = "sha256-U01dMrbPRBliag/RKnwG1G2YEv7fiTh6+S+S5cO1Fx8=";
   };
 
   nativeBuildInputs = [ cmake pkg-config ];
diff --git a/nixpkgs/pkgs/games/xboard/default.nix b/nixpkgs/pkgs/games/xboard/default.nix
index 663207bd23c4..eefbb90114ff 100644
--- a/nixpkgs/pkgs/games/xboard/default.nix
+++ b/nixpkgs/pkgs/games/xboard/default.nix
@@ -1,6 +1,7 @@
 { lib
 , stdenv
 , fetchurl
+, fetchpatch
 , libX11
 , xorgproto
 , libXt
@@ -28,6 +29,16 @@ stdenv.mkDerivation rec {
     sha256 = "sha256-Ky5T6EKK2bbo3IpVs6UYM4GRGk2uLABy+pYpa7sZcNY=";
   };
 
+  patches = [
+    # Pull patch pending upstream inclusion for -fno-common toolchain support:
+    #   https://savannah.gnu.org/patch/index.php?10211
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://savannah.gnu.org/patch/download.php?file_id=53275";
+      sha256 = "sha256-ZOo9jAy1plFjhC5HXJQvXL+Zf7FL14asV3G4AwfgqTY=";
+    })
+  ];
+
   buildInputs = [
     libX11
     xorgproto
diff --git a/nixpkgs/pkgs/games/xconq/default.nix b/nixpkgs/pkgs/games/xconq/default.nix
index 10a959a676b4..2d28090c595c 100644
--- a/nixpkgs/pkgs/games/xconq/default.nix
+++ b/nixpkgs/pkgs/games/xconq/default.nix
@@ -19,6 +19,8 @@ stdenv.mkDerivation rec {
     "--with-tkconfig=${tk}/lib"
   ];
 
+  CXXFLAGS = " --std=c++11 ";
+
   hardeningDisable = [ "format" ];
 
   patchPhase = ''
diff --git a/nixpkgs/pkgs/games/xivlauncher/default.nix b/nixpkgs/pkgs/games/xivlauncher/default.nix
new file mode 100644
index 000000000000..1da8e4838956
--- /dev/null
+++ b/nixpkgs/pkgs/games/xivlauncher/default.nix
@@ -0,0 +1,70 @@
+{ lib, buildDotnetModule, fetchFromGitHub, dotnetCorePackages, SDL2, libsecret, glib, gnutls, aria2, steam-run
+, copyDesktopItems, makeDesktopItem
+, useSteamRun ? true }:
+
+let
+  rev = "6a1a59f687ac7b98698e2ebb97d82a94865e50f6";
+in
+  buildDotnetModule rec {
+    pname = "XIVLauncher";
+    version = "1.0.0.9";
+
+    src = fetchFromGitHub {
+      owner = "goatcorp";
+      repo = "FFXIVQuickLauncher";
+      inherit rev;
+      sha256 = "sha256-jRyYeTg73W58OH2fWmuVkjxEdyPNqDGRbEZwxBMfdCo=";
+    };
+
+    nativeBuildInputs = [ copyDesktopItems ];
+
+    projectFile = "src/XIVLauncher.Core/XIVLauncher.Core.csproj";
+    nugetDeps = ./deps.nix; # File generated with `nuget-to-nix path/to/src > deps.nix`
+
+    dotnetFlags = [
+      "--runtime linux-x64"
+      "-p:BuildHash=${rev}"
+    ];
+
+    dotnetBuildFlags = [
+      "--no-self-contained"
+    ];
+
+    postPatch = ''
+      substituteInPlace src/XIVLauncher.Common/Game/Patch/Acquisition/Aria/AriaHttpPatchAcquisition.cs \
+        --replace 'ariaPath = "aria2c"' 'ariaPath = "${aria2}/bin/aria2c"'
+    '';
+
+    postInstall = ''
+      mkdir -p $out/share/pixmaps
+      cp src/XIVLauncher.Core/Resources/logo.png $out/share/pixmaps/xivlauncher.png
+    '';
+
+    postFixup = lib.optionalString useSteamRun ''
+      substituteInPlace $out/bin/XIVLauncher.Core \
+        --replace 'exec' 'exec ${steam-run}/bin/steam-run'
+    '';
+
+    executables = [ "XIVLauncher.Core" ];
+
+    runtimeDeps = [ SDL2 libsecret glib gnutls ];
+
+    desktopItems = [
+      (makeDesktopItem {
+        name = "xivlauncher";
+        exec = "XIVLauncher.Core";
+        icon = "xivlauncher";
+        desktopName = "XIVLauncher";
+        comment = meta.description;
+        categories = [ "Game" ];
+      })
+    ];
+
+    meta = with lib; {
+      description = "Custom launcher for FFXIV";
+      homepage = "https://github.com/goatcorp/FFXIVQuickLauncher";
+      license = licenses.gpl3;
+      maintainers = with maintainers; [ ashkitten ];
+      platforms = [ "x86_64-linux" ];
+    };
+  }
diff --git a/nixpkgs/pkgs/games/xivlauncher/deps.nix b/nixpkgs/pkgs/games/xivlauncher/deps.nix
new file mode 100644
index 000000000000..9e1f7f17c2ff
--- /dev/null
+++ b/nixpkgs/pkgs/games/xivlauncher/deps.nix
@@ -0,0 +1,197 @@
+{ fetchNuGet }: [
+  (fetchNuGet { pname = "Castle.Core"; version = "4.4.1"; sha256 = "13dja1jxl5zwhi0ghkgvgmqdrixn57f9hk52jy5vpaaakzr550r7"; })
+  (fetchNuGet { pname = "CheapLoc"; version = "1.1.6"; sha256 = "1m6cgx9yh7h3vrq2d4f99xyvsxc9jvz8zjq1q14qgylfmyq4hx4l"; })
+  (fetchNuGet { pname = "Config.Net"; version = "4.19.0"; sha256 = "17iv0vy0693s6d8626lbz3w1ppn5abn77aaki7h4qi4izysizgim"; })
+  (fetchNuGet { pname = "Downloader"; version = "2.2.8"; sha256 = "0farwh3pc6m8hsgqywigdpcb4gr2m9myyxm2idzjmhhkzfqghj28"; })
+  (fetchNuGet { pname = "Facepunch.Steamworks"; version = "2.3.3"; sha256 = "1r3m7cyzfy8ms9xxfa13xcwha02yk22givkaamw166im89m8wqyc"; })
+  (fetchNuGet { pname = "goaaats.NativeLibraryLoader"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "1bjjgsw4ry9cz8dzsgwx428hn06wms194pqz8nclwrqcwfx7gmxk"; })
+  (fetchNuGet { pname = "goaaats.Veldrid"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "0b35bn4190hxbvrwsygpbpg00gnrj6crxyk8b0d7ian611v4jj0m"; })
+  (fetchNuGet { pname = "goaaats.Veldrid.ImageSharp"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "1zihi2n9qz18kfkz4qnj3412bfsqvx49809hqkknixdrgn8323i2"; })
+  (fetchNuGet { pname = "goaaats.Veldrid.MetalBindings"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "13cs5jr8bpkrkzziz8b71l3npr14shxryrpsiw0zm7jcx69vg2qf"; })
+  (fetchNuGet { pname = "goaaats.Veldrid.OpenGLBindings"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "1p7gv2234r3f1pskcr1ah7p3ak6zn1rrmvxy5xqc9d5y4zdrnzlb"; })
+  (fetchNuGet { pname = "goaaats.Veldrid.SDL2"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "14xj3z0yc25vq17bvv2193cbqxj7k9iimxbaqk2rpvlpmrbg20xi"; })
+  (fetchNuGet { pname = "goaaats.Veldrid.StartupUtilities"; version = "4.9.0-beta1-g70f642e82e"; sha256 = "03r3x9h0fyb07d6d28ny6r5s688m50xc0lgc6zf2cy684kfnvmp5"; })
+  (fetchNuGet { pname = "ImGui.NET"; version = "1.87.2"; sha256 = "0rv0n18fvz1gbh45crhzn1f8xw8zkc8qyiyj91vajjcry8mq1x7q"; })
+  (fetchNuGet { pname = "KeySharp"; version = "1.0.5"; sha256 = "1ic10v0a174fw6w89iyg4yzji36bsj15573y676cj5n09n6s75d4"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; version = "6.0.6"; sha256 = "0ndah9cqkgswhi60wrnni10j1d2hdg8jljij83lk1wbfqbng86jm"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.3.3"; sha256 = "09m4cpry8ivm9ga1abrxmvw16sslxhy2k5sl14zckhqb1j164im6"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.BannedApiAnalyzers"; version = "3.3.3"; sha256 = "1z6x0d8lpcfjr3sxy25493i17vvcg5bsay6c03qan6mnj5aqzw2k"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "4.0.1"; sha256 = "0axjv1nhk1z9d4c51d9yxdp09l8yqqnqaifhqcwnxnv0r4y5cka9"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "4.0.1"; sha256 = "1h6jfifg7pw2vacpdds4v4jqnaydg9b108irf315wzx6rh8yv9cb"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.NetAnalyzers"; version = "6.0.0"; sha256 = "06zy947m5lrbwb684g42ijb07r5jsqycvfnphc6cqfdrfnzqv6k9"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; version = "6.0.6"; sha256 = "0fjbjh7yxqc9h47ix37y963xi9f9y99jvl26cw3x3kvjlb8x0bgj"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
+  (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "6.0.0-preview.5.21301.5"; sha256 = "02712s86n2i8s5j6vxdayqwcc7r538yw3frhf1gfrc6ah6hvqnzc"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; })
+  (fetchNuGet { pname = "Mono.Cecil"; version = "0.9.6.1"; sha256 = "1fr7969h5q611l5227xw6nvv5rzap76vbpk0wg9hxbcxk3hn7szf"; })
+  (fetchNuGet { pname = "Mono.Nat"; version = "3.0.1"; sha256 = "1xy3c9wsiz8k3rx8v60y6gnps337rsb5jpyj0r6g384prg6z4vh0"; })
+  (fetchNuGet { pname = "MonoTorrent"; version = "2.0.0"; sha256 = "016cbjsy1gp60g6w0mdya11ky3lfr3scg20k1p7lglbnzv7ixycq"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
+  (fetchNuGet { pname = "Newtonsoft.Json"; version = "12.0.2"; sha256 = "0w2fbji1smd2y7x25qqibf1qrznmv4s6s0jvrbvr6alb7mfyqvh5"; })
+  (fetchNuGet { pname = "ReusableTasks"; version = "2.0.0"; sha256 = "0qag69n8kx164minz3h50g6f7cdq15r89vikcd1llbkdwq4qldaa"; })
+  (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
+  (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "00j6nv2xgmd3bi347k00m7wr542wjlig53rmj28pmw7ddcn97jbn"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
+  (fetchNuGet { pname = "runtime.any.System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1ghhhk5psqxcg6w88sxkqrc35bxcz27zbqm2y5p5298pv3v7g201"; })
+  (fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
+  (fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
+  (fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
+  (fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
+  (fetchNuGet { pname = "runtime.any.System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "0lqhgqi0i8194ryqq6v2gqx0fb86db2gqknbm0aq31wb378j7ip8"; })
+  (fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
+  (fetchNuGet { pname = "runtime.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.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
+  (fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
+  (fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
+  (fetchNuGet { pname = "runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1vvivbqsk6y4hzcid27pqpm5bsi6sc50hvqwbcx8aap5ifrxfs8d"; })
+  (fetchNuGet { pname = "runtime.native.System.Net.Http"; version = "4.3.0"; sha256 = "1n6rgz5132lcibbch1qlf0g9jk60r0kqv087hxc0lisy50zpm7kk"; })
+  (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.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
+  (fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
+  (fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.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.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
+  (fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
+  (fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
+  (fetchNuGet { pname = "runtime.unix.Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0y61k9zbxhdi0glg154v30kkq7f8646nif8lnnxbvkjpakggd5id"; })
+  (fetchNuGet { pname = "runtime.unix.System.Console"; version = "4.3.0"; sha256 = "1pfpkvc6x2if8zbdzg9rnc5fx51yllprl8zkm5npni2k50lisy80"; })
+  (fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
+  (fetchNuGet { pname = "runtime.unix.System.IO.FileSystem"; version = "4.3.0"; sha256 = "14nbkhvs7sji5r1saj2x8daz82rnf9kx28d3v2qss34qbr32dzix"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Primitives"; version = "4.3.0"; sha256 = "0bdnglg59pzx9394sy4ic66kmxhqp8q8bvmykdxcbs5mm0ipwwm4"; })
+  (fetchNuGet { pname = "runtime.unix.System.Net.Sockets"; version = "4.3.0"; sha256 = "03npdxzy8gfv035bv1b9rz7c7hv0rxl5904wjz51if491mw0xy12"; })
+  (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
+  (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
+  (fetchNuGet { pname = "Serilog"; version = "2.10.0"; sha256 = "08bih205i632ywryn3zxkhb15dwgyaxbhmm1z3b5nmby9fb25k7v"; })
+  (fetchNuGet { pname = "Serilog"; version = "2.9.0"; sha256 = "0z0ib82w9b229a728bbyhzc2hnlbl0ki7nnvmgnv3l741f2vr4i6"; })
+  (fetchNuGet { pname = "Serilog.Enrichers.Thread"; version = "3.1.0"; sha256 = "1y75aiv2k1sxnh012ixkx92fq1yl8srqggy8l439igg4p223hcqi"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Async"; version = "1.4.0"; sha256 = "00kqrn3xmfzg469y155vihsiby8dbbs382fi6qg8p2zg3i5dih1d"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "3.1.1"; sha256 = "0j99as641y1k6havwwkhyr0n08vibiblmfjj6nz051mz8g3864fn"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "4.0.1"; sha256 = "080vh9kcyn9lx4j7p34146kp9byvhqlaz5jn9wzx70ql9cwd0hlz"; })
+  (fetchNuGet { pname = "Serilog.Sinks.Debug"; version = "1.0.1"; sha256 = "0969mb254kr59bgkq01ybyzca89z3f4n9ng5mdj8m53d5653zf22"; })
+  (fetchNuGet { pname = "Serilog.Sinks.File"; version = "4.1.0"; sha256 = "1ry7p9hf1zlnai1j5zjhjp4dqm2agsbpq6cvxgpf5l8m26x6mgca"; })
+  (fetchNuGet { pname = "Serilog.Sinks.File"; version = "5.0.0"; sha256 = "097rngmgcrdfy7jy8j7dq3xaq2qky8ijwg0ws6bfv5lx0f3vvb0q"; })
+  (fetchNuGet { pname = "SharedMemory"; version = "2.3.2"; sha256 = "078qaab0j8p2fjcc9n7r4sr5pr7567a9bspfiikkc85bsx7vfm8w"; })
+  (fetchNuGet { pname = "SharpGen.Runtime"; version = "2.0.0-beta.10"; sha256 = "0yxq0b4m96z71afc7sywfrlwz2pgr5nilacmssjk803v70f0ydr1"; })
+  (fetchNuGet { pname = "SharpGen.Runtime.COM"; version = "2.0.0-beta.10"; sha256 = "1qvpphja72x9r3yi96bnmwwy30b1n155v2yy2gzlxjil6qg3xjmb"; })
+  (fetchNuGet { pname = "SixLabors.ImageSharp"; version = "1.0.4"; sha256 = "0fmgn414my76gjgp89qlc210a0lqvnvkvk2fcwnpwxdhqpfvyilr"; })
+  (fetchNuGet { pname = "System.AppContext"; version = "4.3.0"; sha256 = "1649qvy3dar900z3g817h17nl8jp4ka5vcfmsr05kh0fshn7j3ya"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.4.0"; sha256 = "183f8063w8zqn99pv0ni0nnwh7fgx46qzxamwnans55hhs2l0g19"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
+  (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
+  (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.3.0"; sha256 = "0wi10md9aq33jrkh2c24wr2n9hrpyamsdhsxdcnf43b7y86kkii8"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; })
+  (fetchNuGet { pname = "System.Collections.NonGeneric"; version = "4.3.0"; sha256 = "07q3k0hf3mrcjzwj8fwk6gv3n51cb513w4mgkfxzm3i37sc9kz7k"; })
+  (fetchNuGet { pname = "System.Collections.Specialized"; version = "4.3.0"; sha256 = "1sdwkma4f6j85m3dpb53v9vcgd0zyc9jb33f8g63byvijcj39n20"; })
+  (fetchNuGet { pname = "System.ComponentModel"; version = "4.3.0"; sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb"; })
+  (fetchNuGet { pname = "System.ComponentModel.Primitives"; version = "4.3.0"; sha256 = "1svfmcmgs0w0z9xdw2f2ps05rdxmkxxhf0l17xk9l1l8xfahkqr0"; })
+  (fetchNuGet { pname = "System.ComponentModel.TypeConverter"; version = "4.3.0"; sha256 = "17ng0p7v3nbrg3kycz10aqrrlw4lz9hzhws09pfh8gkwicyy481x"; })
+  (fetchNuGet { pname = "System.Configuration.ConfigurationManager"; version = "6.0.0"; sha256 = "0sqapr697jbb4ljkq46msg0xx1qpmc31ivva6llyz2wzq3mpmxbw"; })
+  (fetchNuGet { pname = "System.Console"; version = "4.3.0"; sha256 = "1flr7a9x920mr5cjsqmsy9wgnv3lvd0h1g521pdr1lkb2qycy7ay"; })
+  (fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
+  (fetchNuGet { pname = "System.Diagnostics.DiagnosticSource"; version = "4.3.0"; sha256 = "0z6m3pbiy0qw6rn3n209rrzf9x1k4002zh90vwcrsym09ipm2liq"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "0in3pic3s2ddyibi8cvgl102zmvp9r9mchh82ns9f0ms4basylw1"; })
+  (fetchNuGet { pname = "System.Diagnostics.TraceSource"; version = "4.3.0"; sha256 = "1kyw4d7dpjczhw6634nrmg7yyyzq72k75x38y0l0nwhigdlp1766"; })
+  (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
+  (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
+  (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.3.0"; sha256 = "1xwl230bkakzzkrggy1l1lxmm3xlhk4bq2pkv790j5lm8g887lxq"; })
+  (fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.3.0"; sha256 = "02a5zfxavhv3jd437bsncbhd2fp1zv4gxzakp1an9l6kdq1mcqls"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
+  (fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
+  (fetchNuGet { pname = "System.IO.Compression"; version = "4.3.0"; sha256 = "084zc82yi6yllgda0zkgl2ys48sypiswbiwrv7irb3r0ai1fp4vz"; })
+  (fetchNuGet { pname = "System.IO.Compression.ZipFile"; version = "4.3.0"; sha256 = "1yxy5pq4dnsm9hlkg9ysh5f6bf3fahqqb6p8668ndy5c0lk7w2ar"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.0.1"; sha256 = "0kgfpw6w4djqra3w5crrg8xivbanh1w9dh3qapb28q060wb9flp1"; })
+  (fetchNuGet { pname = "System.IO.FileSystem"; version = "4.3.0"; sha256 = "0z2dfrbra9i6y16mm9v1v6k47f0fm617vlb7s5iybjjsz6g1ilmw"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.0.1"; sha256 = "1s0mniajj3lvbyf7vfb5shp4ink5yibsx945k6lvxa96r8la1612"; })
+  (fetchNuGet { pname = "System.IO.FileSystem.Primitives"; version = "4.3.0"; sha256 = "0j6ndgglcf4brg2lz4wzsh1av1gh8xrzdsn9f0yznskhqn1xzj9c"; })
+  (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
+  (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.Sockets"; version = "4.3.0"; sha256 = "1ssa65k6chcgi6mfmzrznvqaxk8jp0gvl77xhf1hbzakjnpxspla"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
+  (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.7.0"; sha256 = "0l8jpxhpgjlf1nkz5lvp61r4kfdbhr29qi8aapcxn3izd9wd0j8r"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
+  (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.7.0"; sha256 = "0mbjfajmafkca47zr8v36brvknzks5a7pgb49kfq2d188pyv6iap"; })
+  (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "5.0.0"; sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss"; })
+  (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
+  (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
+  (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
+  (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.4.0"; sha256 = "0a6ahgi5b148sl5qyfpyw383p3cb4yrkm802k29fsi4mxkiwir29"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.0"; sha256 = "17labczwqk3jng3kkky73m0jhi8wc21vbl7cz5c0hj2p1dswin43"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.3"; sha256 = "1afi6s2r1mh1kygbjmfba6l4f87pi5sg13p4a48idqafli94qxln"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
+  (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
+  (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
+  (fetchNuGet { pname = "System.Runtime.InteropServices.RuntimeInformation"; version = "4.3.0"; sha256 = "0q18r1sh4vn7bvqgd6dmqlw5v28flbpj349mkdish2vjyvmnb2ii"; })
+  (fetchNuGet { pname = "System.Runtime.Numerics"; version = "4.3.0"; sha256 = "19rav39sr5dky7afygh309qamqqmi9kcwvz3i0c5700v0c5cg61z"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "6.0.0"; sha256 = "0a678bzj8yxxiffyzy60z2w1nczzpi8v97igr4ip3byd2q89dv58"; })
+  (fetchNuGet { pname = "System.Security.AccessControl"; version = "6.0.0-preview.5.21301.5"; sha256 = "131f3z3ikv3n8442chr11nj4x46amq00mb53pb2ds42dabldkdgy"; })
+  (fetchNuGet { pname = "System.Security.Claims"; version = "4.3.0"; sha256 = "0jvfn7j22l3mm28qjy3rcw287y9h65ha4m940waaxah07jnbzrhn"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Algorithms"; version = "4.3.0"; sha256 = "03sq183pfl5kp7gkvq77myv7kbpdnq3y0xj7vi4q1kaw54sny0ml"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Cng"; version = "4.3.0"; sha256 = "1k468aswafdgf56ab6yrn7649kfqx2wm9aslywjam1hdmk5yypmv"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Csp"; version = "4.3.0"; sha256 = "1x5wcrddf2s3hb8j78cry7yalca4lb5vfnkrysagbn6r9x6xvrx1"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Encoding"; version = "4.3.0"; sha256 = "1jr6w70igqn07k5zs1ph6xja97hxnb3mqbspdrff6cvssgrixs32"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0givpvvj8yc7gv4lhb6s1prq6p2c4147204a0wib89inqzd87gqc"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.Primitives"; version = "4.3.0"; sha256 = "0pyzncsv48zwly3lw4f2dayqswcfvdwq2nz0dgwmi7fj3pn64wby"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.ProtectedData"; version = "6.0.0"; sha256 = "05kd3a8w7658hjxq9vvszxip30a479fjmfq4bq1r95nrsvs4hbss"; })
+  (fetchNuGet { pname = "System.Security.Cryptography.X509Certificates"; version = "4.3.0"; sha256 = "0valjcz5wksbvijylxijjxb1mp38mdhv03r533vnx1q3ikzdav9h"; })
+  (fetchNuGet { pname = "System.Security.Permissions"; version = "6.0.0"; sha256 = "0jsl4xdrkqi11iwmisi1r2f2qn5pbvl79mzq877gndw6ans2zhzw"; })
+  (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "6.0.0-preview.5.21301.5"; sha256 = "1q3iikvjcfrm5p89p1j7qlw1szvryq680qypk023wgy9phmlwi57"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
+  (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
+  (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
+  (fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.0.11"; sha256 = "0nr1r41rak82qfa5m0lhk9mp0k93bvfd7bbd9sdzwx9mb36g28p5"; })
+  (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
+  (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.0.1"; sha256 = "15n54f1f8nn3mjcjrlzdg6q3520571y012mx7v991x2fvp73lmg6"; })
+  (fetchNuGet { pname = "System.Threading.Timer"; version = "4.3.0"; sha256 = "1nx773nsx6z5whv8kaa1wjh037id2f1cxhb69pvgv12hd2b6qs56"; })
+  (fetchNuGet { pname = "System.Windows.Extensions"; version = "6.0.0"; sha256 = "1wy9pq9vn1bqg5qnv53iqrbx04yzdmjw4x5yyi09y3459vaa1sip"; })
+  (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
+  (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.3.0"; sha256 = "08h8fm4l77n0nd4i4fk2386y809bfbwqb7ih9d7564ifcxr5ssxd"; })
+  (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
+  (fetchNuGet { pname = "Vk"; version = "1.0.25"; sha256 = "18kx3g088215803yznnmf6621wgwvgakj8hlmrb726b7zwb3x53l"; })
+  (fetchNuGet { pname = "Vortice.D3DCompiler"; version = "2.1.0"; sha256 = "1ikw4k40m1vhl6q3v4lacbvmz09prqkk8zz0dms49hxjrpi0gfdh"; })
+  (fetchNuGet { pname = "Vortice.Direct3D11"; version = "2.1.0"; sha256 = "05hzmkk32agbk2617yhv3wm1zjkv25w57395an4vkp14rvsz82vf"; })
+  (fetchNuGet { pname = "Vortice.DirectX"; version = "2.1.0"; sha256 = "0mv3p7rs2p9rh4vylz24gmiqj0q63rmfa7mjvsqk1j1zlrkyyhlk"; })
+  (fetchNuGet { pname = "Vortice.DXGI"; version = "2.1.0"; sha256 = "1d7rmqf7q287w3l7clfvp66kd0giy4n6087n9r8jj0w5r65416ls"; })
+  (fetchNuGet { pname = "Vortice.Mathematics"; version = "1.3.24"; sha256 = "1fqni3lhaxddpdz060zbjjhkn5fgg7458ajxfrj3df3wjbld3bc3"; })
+]
diff --git a/nixpkgs/pkgs/games/xmage/default.nix b/nixpkgs/pkgs/games/xmage/default.nix
index 7552ce700f32..cc359f78822e 100644
--- a/nixpkgs/pkgs/games/xmage/default.nix
+++ b/nixpkgs/pkgs/games/xmage/default.nix
@@ -32,6 +32,7 @@ EOS
 
   meta = with lib; {
     description = "Magic Another Game Engine";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.mit;
     maintainers = with maintainers; [ matthiasbeyer ];
     homepage = "http://xmage.de/";
diff --git a/nixpkgs/pkgs/games/xonotic/default.nix b/nixpkgs/pkgs/games/xonotic/default.nix
index 46b0b594d724..8865e8f992de 100644
--- a/nixpkgs/pkgs/games/xonotic/default.nix
+++ b/nixpkgs/pkgs/games/xonotic/default.nix
@@ -16,7 +16,7 @@
 
 let
   pname = "xonotic";
-  version = "0.8.2";
+  version = "0.8.5";
   name = "${pname}-${version}";
   variant =
     if withSDL && withGLX then
@@ -41,7 +41,7 @@ let
     '';
     homepage = "https://www.xonotic.org/";
     license = lib.licenses.gpl2Plus;
-    maintainers = with lib.maintainers; [ astsmtl zalakain petabyteboy ];
+    maintainers = with lib.maintainers; [ astsmtl zalakain ];
     platforms = lib.platforms.linux;
   };
 
@@ -61,7 +61,7 @@ let
 
     src = fetchurl {
       url = "https://dl.xonotic.org/xonotic-${version}-source.zip";
-      sha256 = "0axxw04fyz6jlfqd0kp7hdrqa0li31sx1pbipf2j5qp9wvqicsay";
+      sha256 = "sha256-oagbpVqxUb8JdY5/WWFLLlFQ6EIkdT53lQvNB6KC6l0=";
     };
 
     nativeBuildInputs = [ unzip ];
@@ -137,8 +137,8 @@ in rec {
   xonotic-data = fetchzip {
     name = "xonotic-data";
     url = "https://dl.xonotic.org/xonotic-${version}.zip";
-    sha256 = "15caj11v9hhr7w55w3rs1rspblzr9lg1crqivbn9pyyq0rif8cpl";
-    extraPostFetch = ''
+    sha256 = "sha256-/malKGbDdUnqG+bJOJ2f3zHb7hAGiNZdprczr2Fgb5E=";
+    postFetch = ''
       cd $out
       rm -rf $(ls | grep -v "^data$" | grep -v "^key_0.d0pk$")
     '';
diff --git a/nixpkgs/pkgs/games/zandronum/sqlite.nix b/nixpkgs/pkgs/games/zandronum/sqlite.nix
index e38dedbb7f73..c7687f89589d 100644
--- a/nixpkgs/pkgs/games/zandronum/sqlite.nix
+++ b/nixpkgs/pkgs/games/zandronum/sqlite.nix
@@ -1,4 +1,7 @@
-{ lib, stdenv, fetchurl }:
+{ lib
+, stdenv
+, fetchurl
+}:
 
 stdenv.mkDerivation {
   pname = "sqlite-zandronum";
@@ -6,7 +9,7 @@ stdenv.mkDerivation {
 
   src = fetchurl {
     url = "https://www.sqlite.org/2017/sqlite-autoconf-3180000.tar.gz";
-    sha256 = "0p5cx7nbjxk7glcm277ypi5w4gv144qazw79ql47svlpccj62mrp";
+    hash = "sha256-N1dhJGOXbn0IxenwrzAhYT/CS7z+HFEZfWd2uezprFw=";
   };
 
   buildPhase = ''
diff --git a/nixpkgs/pkgs/games/zangband/default.nix b/nixpkgs/pkgs/games/zangband/default.nix
deleted file mode 100644
index e8daa9a20251..000000000000
--- a/nixpkgs/pkgs/games/zangband/default.nix
+++ /dev/null
@@ -1,58 +0,0 @@
-{ lib, stdenv, fetchurl, ncurses, flex, bison, autoconf, automake, m4, coreutils }:
-
-stdenv.mkDerivation rec {
-  pname = "zangband";
-  version = "2.7.4b";
-
-  src = fetchurl {
-    url = "mirror://sourceforge/project/${pname}/${pname}-src/${version}/${pname}-${version}.tar.gz";
-    sha256 = "0kkz6f9myhjnr3308sdab8q186rd55lapvcp38w8qmakdbhc828j";
-  };
-
-  buildInputs = [
-    ncurses flex bison autoconf automake m4
-  ];
-
-  preConfigure = ''
-    sed -re 's/ch(own|grp|mod)/true/' -i lib/*/makefile.zb makefile.in
-    sed -e '/FIXED_PATHS/d' -i src/z-config.h
-    autoconf
-  '';
-
-  preInstall = ''
-    mkdir -p $out/share/games/zangband
-    mkdir -p $out/share/man
-    mkdir -p $out/bin
-  '';
-
-  postInstall = ''
-    mv $out/bin/zangband $out/bin/.zangband.real
-    echo '#! ${stdenv.shell}
-      PATH="$PATH:${coreutils}/bin"
-
-      ZANGBAND_PATH="$HOME/.zangband"
-      ORIG_PATH="'$out'"/share/games/zangband
-      mkdir -p "$ZANGBAND_PATH"
-      cd "$ZANGBAND_PATH"
-      for i in $(find "$ORIG_PATH" -type f); do
-        REL_PATH="''${i#$ORIG_PATH/}"
-        mkdir -p "$(dirname "$REL_PATH")"
-        ln -s "$i" "$REL_PATH" &>/dev/null
-      done
-      mkdir -p lib/user lib/save
-      for i in lib/*/*.raw; do
-        test -L "$i" && rm "$i";
-      done
-      for i in $(find lib -type l); do if ! test -e $(readlink "$i"); then rm "$i"; fi; done;
-      export ANGBAND_PATH="$PWD"
-      "'$out'/bin/.zangband.real" "$@"
-    ' > $out/bin/zangband
-    chmod +x $out/bin/zangband
-  '';
-
-  meta = {
-    description = "Rogue-like game";
-    license = lib.licenses.unfree;
-    broken = true; # broken in runtime, will not get pass character generation
-  };
-}
diff --git a/nixpkgs/pkgs/games/zaz/default.nix b/nixpkgs/pkgs/games/zaz/default.nix
index 1925d6417175..81d42b1b2941 100644
--- a/nixpkgs/pkgs/games/zaz/default.nix
+++ b/nixpkgs/pkgs/games/zaz/default.nix
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     pkg-config
   ];
   buildInputs = [
-    SDL.dev
+    (lib.getDev SDL)
     SDL_image
     mesa
     libtheora
@@ -35,7 +35,7 @@ stdenv.mkDerivation rec {
   ];
 
   # Fix SDL include problems
-  NIX_CFLAGS_COMPILE="-I${SDL.dev}/include/SDL -I${SDL_image}/include/SDL";
+  NIX_CFLAGS_COMPILE="-I${lib.getDev SDL}/include/SDL -I${SDL_image}/include/SDL";
   # Fix linking errors
   makeFlags = [
     "ZAZ_LIBS+=-lSDL"
@@ -48,6 +48,7 @@ stdenv.mkDerivation rec {
   ];
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     description = "A puzzle game about arranging balls in triplets, like Luxor, Zuma, or Puzzle Bobble";
     homepage = "http://zaz.sourceforge.net/";
     license = licenses.gpl3;
diff --git a/nixpkgs/pkgs/games/zdoom/zdbsp.nix b/nixpkgs/pkgs/games/zdoom/zdbsp.nix
index e688b908e126..d18eb144292f 100644
--- a/nixpkgs/pkgs/games/zdoom/zdbsp.nix
+++ b/nixpkgs/pkgs/games/zdoom/zdbsp.nix
@@ -1,4 +1,9 @@
-{ lib, stdenv, fetchzip, cmake, zlib }:
+{ lib
+, stdenv
+, fetchzip
+, cmake
+, zlib
+}:
 
 stdenv.mkDerivation rec {
   pname = "zdbsp";
@@ -6,7 +11,7 @@ stdenv.mkDerivation rec {
 
   src = fetchzip {
     url = "https://zdoom.org/files/utils/zdbsp/zdbsp-${version}-src.zip";
-    sha256 = "1j6k0appgjjj3ffbll9hy9nnbqr17szd1s66q08zrbkfqf6g8f0d";
+    sha256 = "sha256-DTj0jMNurvwRwMbo0L4+IeNlbfIwUbqcG1LKd68C08g=";
     stripRoot = false;
   };
 
@@ -23,8 +28,8 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
-    description = "ZDoom's internal node builder for DOOM maps";
     homepage = "https://zdoom.org/wiki/ZDBSP";
+    description = "ZDoom's internal node builder for DOOM maps";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ lassulus siraben ];
     platforms = platforms.unix;
diff --git a/nixpkgs/pkgs/games/zod/default.nix b/nixpkgs/pkgs/games/zod/default.nix
index 6bf24ed6cb9f..ad576b464243 100644
--- a/nixpkgs/pkgs/games/zod/default.nix
+++ b/nixpkgs/pkgs/games/zod/default.nix
@@ -44,7 +44,7 @@ let
     installPhase = ''
       mkdir -p $out/bin
       install -m755 zod $out/bin/
-      wrapProgram $out/bin/zod --run "cd ${zod_assets}/usr/lib/commander-zod"
+      wrapProgram $out/bin/zod --chdir "${zod_assets}/usr/lib/commander-zod"
     '';
   };
   zod_map_editor = stdenv.mkDerivation {
@@ -56,7 +56,7 @@ let
     installPhase = ''
       mkdir -p $out/bin
       install -m755 zod_map_editor $out/bin
-      wrapProgram $out/bin/zod_map_editor --run "cd ${zod_assets}/usr/lib/commander-zod"
+      wrapProgram $out/bin/zod_map_editor --chdir "${zod_assets}/usr/lib/commander-zod"
     '';
   };
   zod_launcher = stdenv.mkDerivation {
diff --git a/nixpkgs/pkgs/games/zoom/default.nix b/nixpkgs/pkgs/games/zoom/default.nix
index 02cfc28ebeef..e281caee72a2 100644
--- a/nixpkgs/pkgs/games/zoom/default.nix
+++ b/nixpkgs/pkgs/games/zoom/default.nix
@@ -1,4 +1,11 @@
-{ lib, stdenv, fetchurl, perl, expat, xlibsWrapper, freetype }:
+{ lib
+, stdenv
+, fetchurl
+, perl
+, expat
+, xlibsWrapper
+, freetype
+}:
 
 # !!! assert freetype == xorg.freetype
 
@@ -8,7 +15,7 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "https://www.logicalshift.co.uk/unix/zoom/zoom-${version}.tar.gz";
-    sha256 = "1g6van7f7sg3zfcz80mncnnbccyg2hnm0hq4x558vpsm0lf7z5pj";
+    hash = "sha256-8pZ/HAVV341K6QRDUC0UzzO2rGW2AvSZ++Pp445V27w=";
   };
 
   buildInputs = [ perl expat xlibsWrapper freetype ];
@@ -16,6 +23,7 @@ stdenv.mkDerivation rec {
   NIX_CFLAGS_COMPILE = "-I${freetype}/include/freetype2 -fgnu89-inline";
 
   meta = with lib; {
+    homepage = "https://www.logicalshift.co.uk/unix/zoom/";
     description = "Player for Z-Code, TADS and HUGO stories or games";
     longDescription = ''
       Zoom is a player for Z-Code, TADS and HUGO stories or games. These are