about summary refs log tree commit diff
path: root/pkgs/games
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/games')
-rw-r--r--pkgs/games/airstrike/default.nix2
-rw-r--r--pkgs/games/assaultcube/default.nix88
-rw-r--r--pkgs/games/bugdom/default.nix66
-rw-r--r--pkgs/games/bzflag/default.nix4
-rw-r--r--pkgs/games/cataclysm-dda/common.nix2
-rw-r--r--pkgs/games/ddnet/default.nix16
-rw-r--r--pkgs/games/deliantra/arch.nix (renamed from pkgs/games/deliantra/deliantra-arch.nix)0
-rw-r--r--pkgs/games/deliantra/data.nix (renamed from pkgs/games/deliantra/deliantra-data.nix)0
-rw-r--r--pkgs/games/deliantra/default.nix10
-rw-r--r--pkgs/games/deliantra/maps.nix (renamed from pkgs/games/deliantra/deliantra-maps.nix)0
-rw-r--r--pkgs/games/deliantra/server.nix (renamed from pkgs/games/deliantra/deliantra-server.nix)4
-rw-r--r--pkgs/games/devilutionx/default.nix61
-rw-r--r--pkgs/games/domination/default.nix4
-rw-r--r--pkgs/games/enigma/default.nix29
-rw-r--r--pkgs/games/fheroes2/default.nix4
-rw-r--r--pkgs/games/flare/default.nix2
-rw-r--r--pkgs/games/frogatto/data.nix7
-rw-r--r--pkgs/games/frogatto/default.nix2
-rw-r--r--pkgs/games/frogatto/engine.nix15
-rw-r--r--pkgs/games/heroic/default.nix4
-rw-r--r--pkgs/games/iortcw/default.nix2
-rw-r--r--pkgs/games/iortcw/sp.nix2
-rw-r--r--pkgs/games/kabeljau/default.nix38
-rw-r--r--pkgs/games/katago/default.nix8
-rw-r--r--pkgs/games/koules/default.nix76
-rw-r--r--pkgs/games/lgames/barrage/default.nix31
-rw-r--r--pkgs/games/lgames/lbreakout2/default.nix (renamed from pkgs/games/lbreakout2/default.nix)23
-rw-r--r--pkgs/games/lgames/lbreakouthd/default.nix35
-rw-r--r--pkgs/games/lgames/lpairs2/default.nix33
-rw-r--r--pkgs/games/lgames/ltris/default.nix26
-rw-r--r--pkgs/games/lgogdownloader/default.nix4
-rw-r--r--pkgs/games/liberal-crime-squad/default.nix1
-rw-r--r--pkgs/games/ltris/default.nix22
-rw-r--r--pkgs/games/ltris/gcc5_compliance.diff299
-rw-r--r--pkgs/games/mindustry/default.nix4
-rw-r--r--pkgs/games/minecraft/default.nix2
-rw-r--r--pkgs/games/mudlet/default.nix2
-rw-r--r--pkgs/games/nanosaur/default.nix2
-rw-r--r--pkgs/games/nethack/default.nix11
-rw-r--r--pkgs/games/openjk/default.nix50
-rw-r--r--pkgs/games/openmw/default.nix5
-rw-r--r--pkgs/games/openmw/tes3mp.nix4
-rw-r--r--pkgs/games/openra/common.nix2
-rw-r--r--pkgs/games/openrct2/default.nix12
-rw-r--r--pkgs/games/opensupaplex/default.nix4
-rw-r--r--pkgs/games/osu-lazer/default.nix8
-rw-r--r--pkgs/games/osu-lazer/deps.nix332
-rw-r--r--pkgs/games/osu-lazer/osu.runtimeconfig.json4
-rwxr-xr-xpkgs/games/osu-lazer/update.sh9
-rw-r--r--pkgs/games/otto-matic/default.nix2
-rw-r--r--pkgs/games/papermc/default.nix1
-rw-r--r--pkgs/games/polymc/default.nix6
-rw-r--r--pkgs/games/prboom-plus/default.nix62
-rw-r--r--pkgs/games/prboom/default.nix35
-rw-r--r--pkgs/games/purpur/default.nix1
-rw-r--r--pkgs/games/quake3/quake3e/default.nix29
-rw-r--r--pkgs/games/quakespasm/default.nix1
-rw-r--r--pkgs/games/rare/default.nix4
-rw-r--r--pkgs/games/rili/default.nix14
-rw-r--r--pkgs/games/runelite/default.nix2
-rw-r--r--pkgs/games/runescape-launcher/default.nix40
-rw-r--r--pkgs/games/sauerbraten/default.nix4
-rw-r--r--pkgs/games/starsector/default.nix3
-rw-r--r--pkgs/games/steam/fhsenv.nix8
-rw-r--r--pkgs/games/tintin/default.nix1
-rw-r--r--pkgs/games/tome4/default.nix2
-rw-r--r--pkgs/games/unciv/default.nix4
-rw-r--r--pkgs/games/ut2004/wrapper.nix2
-rw-r--r--pkgs/games/warsow/default.nix2
-rw-r--r--pkgs/games/warzone2100/default.nix4
-rw-r--r--pkgs/games/xconq/default.nix2
-rw-r--r--pkgs/games/xonotic/default.nix11
-rw-r--r--pkgs/games/zod/default.nix4
73 files changed, 889 insertions, 726 deletions
diff --git a/pkgs/games/airstrike/default.nix b/pkgs/games/airstrike/default.nix
index 12b485764a5b1..8441ac7a2feef 100644
--- a/pkgs/games/airstrike/default.nix
+++ b/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/pkgs/games/assaultcube/default.nix b/pkgs/games/assaultcube/default.nix
index 1013be2694e93..7164e66feebf4 100644
--- a/pkgs/games/assaultcube/default.nix
+++ b/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/pkgs/games/bugdom/default.nix b/pkgs/games/bugdom/default.nix
new file mode 100644
index 0000000000000..c5170c9845cca
--- /dev/null
+++ b/pkgs/games/bugdom/default.nix
@@ -0,0 +1,66 @@
+{ lib, stdenv, fetchFromGitHub, SDL2, IOKit, Foundation, cmake, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "bugdom";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "jorio";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256:1371inw11rzfrxmc3v4gv5axp56bxjbcr0mhqm4x839401bfq5mf";
+    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 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/games/bzflag/default.nix b/pkgs/games/bzflag/default.nix
index 35a481fb2f42c..6715c1b362507 100644
--- a/pkgs/games/bzflag/default.nix
+++ b/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 ];
diff --git a/pkgs/games/cataclysm-dda/common.nix b/pkgs/games/cataclysm-dda/common.nix
index 1701d84e8df7a..af20169a6e088 100644
--- a/pkgs/games/cataclysm-dda/common.nix
+++ b/pkgs/games/cataclysm-dda/common.nix
@@ -49,7 +49,7 @@ stdenv.mkDerivation {
   '';
 
   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/pkgs/games/ddnet/default.nix b/pkgs/games/ddnet/default.nix
index 1663e17b14d29..54335279fedab 100644
--- a/pkgs/games/ddnet/default.nix
+++ b/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.0.3";
 
   src = fetchFromGitHub {
     owner = "ddnet";
     repo = pname;
     rev = version;
-    sha256 = "sha256-QGtXI4Dbua5LBXSvB17tnSTGEvCCoopvg1XKBuDIEoQ=";
+    sha256 = "sha256-9hjVAtnn+dTBNCu6E90CtjGTAStmVTsQFm2UYq68xcM=";
   };
 
   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/pkgs/games/deliantra/deliantra-arch.nix b/pkgs/games/deliantra/arch.nix
index 2201ca2d1f5fb..2201ca2d1f5fb 100644
--- a/pkgs/games/deliantra/deliantra-arch.nix
+++ b/pkgs/games/deliantra/arch.nix
diff --git a/pkgs/games/deliantra/deliantra-data.nix b/pkgs/games/deliantra/data.nix
index 31ed7d0f0118d..31ed7d0f0118d 100644
--- a/pkgs/games/deliantra/deliantra-data.nix
+++ b/pkgs/games/deliantra/data.nix
diff --git a/pkgs/games/deliantra/default.nix b/pkgs/games/deliantra/default.nix
deleted file mode 100644
index 76a06c9601875..0000000000000
--- a/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/pkgs/games/deliantra/deliantra-maps.nix b/pkgs/games/deliantra/maps.nix
index 1f87178102a0c..1f87178102a0c 100644
--- a/pkgs/games/deliantra/deliantra-maps.nix
+++ b/pkgs/games/deliantra/maps.nix
diff --git a/pkgs/games/deliantra/deliantra-server.nix b/pkgs/games/deliantra/server.nix
index e333b7a472f5e..4185a46120e5a 100644
--- a/pkgs/games/deliantra/deliantra-server.nix
+++ b/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/pkgs/games/devilutionx/default.nix b/pkgs/games/devilutionx/default.nix
index ac76ab5ad1897..c7943b24c95e9 100644
--- a/pkgs/games/devilutionx/default.nix
+++ b/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/pkgs/games/domination/default.nix b/pkgs/games/domination/default.nix
index b7eae5e5acd63..8ef45b8501982 100644
--- a/pkgs/games/domination/default.nix
+++ b/pkgs/games/domination/default.nix
@@ -63,10 +63,10 @@ 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 \
diff --git a/pkgs/games/enigma/default.nix b/pkgs/games/enigma/default.nix
index 131bd00e1857c..247d7b9dee196 100644
--- a/pkgs/games/enigma/default.nix
+++ b/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/pkgs/games/fheroes2/default.nix b/pkgs/games/fheroes2/default.nix
index 10d7a23aca4e0..ff3537cfae995 100644
--- a/pkgs/games/fheroes2/default.nix
+++ b/pkgs/games/fheroes2/default.nix
@@ -7,13 +7,13 @@
 
 stdenv.mkDerivation rec {
   pname = "fheroes2";
-  version = "0.9.13";
+  version = "0.9.14";
 
   src = fetchFromGitHub {
     owner = "ihhub";
     repo = "fheroes2";
     rev = version;
-    sha256 = "sha256-+VAgS7NR/D0HD/Fy7idSUTMJPp2ctpirMpcFooo+bEg=";
+    sha256 = "sha256-M5sUEOKU7KSenAAE7dUI8algB5XsbQQ1s3sDflZLsiA=";
   };
 
   buildInputs = [ gettext libpng SDL2 SDL2_image SDL2_mixer SDL2_ttf zlib ];
diff --git a/pkgs/games/flare/default.nix b/pkgs/games/flare/default.nix
index 3567a5886055d..c849b879ea32e 100644
--- a/pkgs/games/flare/default.nix
+++ b/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/pkgs/games/frogatto/data.nix b/pkgs/games/frogatto/data.nix
index 3ca955a09c39d..00e43582f6e1f 100644
--- a/pkgs/games/frogatto/data.nix
+++ b/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/pkgs/games/frogatto/default.nix b/pkgs/games/frogatto/default.nix
index f987992858da9..fa6b46e0751fb 100644
--- a/pkgs/games/frogatto/default.nix
+++ b/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/pkgs/games/frogatto/engine.nix b/pkgs/games/frogatto/engine.nix
index 9e8ee6fe8dd86..b848c414b7a3c 100644
--- a/pkgs/games/frogatto/engine.nix
+++ b/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/pkgs/games/heroic/default.nix b/pkgs/games/heroic/default.nix
index c0416d0dd7e8a..565bb87f7e01d 100644
--- a/pkgs/games/heroic/default.nix
+++ b/pkgs/games/heroic/default.nix
@@ -2,11 +2,11 @@
 
 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; };
 
diff --git a/pkgs/games/iortcw/default.nix b/pkgs/games/iortcw/default.nix
index 8af3dfe31f68a..9da055acc2184 100644
--- a/pkgs/games/iortcw/default.nix
+++ b/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/pkgs/games/iortcw/sp.nix b/pkgs/games/iortcw/sp.nix
index fa6f73a177b20..d9faa177c17da 100644
--- a/pkgs/games/iortcw/sp.nix
+++ b/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/pkgs/games/kabeljau/default.nix b/pkgs/games/kabeljau/default.nix
new file mode 100644
index 0000000000000..e4f77df3dfe89
--- /dev/null
+++ b/pkgs/games/kabeljau/default.nix
@@ -0,0 +1,38 @@
+{ stdenvNoCC, lib, fetchFromGitea, bash, dialog, makeWrapper }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "kabeljau";
+  version = "1.0.1";
+
+  src = fetchFromGitea {
+    domain = "codeberg.org";
+    owner = "papojari";
+    repo = "kabeljau";
+    rev = "v${version}";
+    sha256 = "sha256-LOvr5fgSUTXnYhbVmynCCjo0W098jKWQnFULtIprE3M=";
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+  postPatch = ''
+    patchShebangs --host ${pname}
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin
+    cp ${pname}.sh $out/bin/${pname}
+    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/papojari/kabeljau";
+    license = licenses.lgpl3Only;
+    maintainers = with maintainers; [ papojari ];
+  };
+}
diff --git a/pkgs/games/katago/default.nix b/pkgs/games/katago/default.nix
index 3265f3d63382f..a3d7ed5cba9df 100644
--- a/pkgs/games/katago/default.nix
+++ b/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/pkgs/games/koules/default.nix b/pkgs/games/koules/default.nix
new file mode 100644
index 0000000000000..e2c7c55cbb702
--- /dev/null
+++ b/pkgs/games/koules/default.nix
@@ -0,0 +1,76 @@
+{ stdenv
+, lib
+, fetchurl
+, fetchzip
+, makeDesktopItem
+, copyDesktopItems
+, imake
+, gccmakedep
+, libX11
+, libXext
+, installShellFiles
+}:
+
+let
+  debian-extras = fetchzip {
+    url = "mirror://debian/pool/main/k/koules/koules_1.4-27.debian.tar.xz";
+    sha256 = "0bq1rr6vxqmx2k0dhyrqnwwfiw4h2ycbj576v66vwr0jaq5plil3";
+  };
+in
+
+stdenv.mkDerivation rec {
+  pname = "koules";
+  version = "1.4";
+
+  src = fetchurl {
+    url = "https://www.ucw.cz/~hubicka/koules/packages/${pname}${version}-src.tar.gz";
+    sha256 = "06x2wkpns14kii9fxmxbmj5lma371qj00hgl7fc5kggfmzz96vy3";
+  };
+
+  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; {
+    description = "Fast arcade game based on the fundamental law of body attraction";
+    homepage = "https://www.ucw.cz/~hubicka/koules/English/";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.iblech ];
+  };
+}
diff --git a/pkgs/games/lgames/barrage/default.nix b/pkgs/games/lgames/barrage/default.nix
new file mode 100644
index 0000000000000..70f97b591001b
--- /dev/null
+++ b/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/pkgs/games/lbreakout2/default.nix b/pkgs/games/lgames/lbreakout2/default.nix
index 818cd31fa59a0..4645baf062441 100644
--- a/pkgs/games/lbreakout2/default.nix
+++ b/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/pkgs/games/lgames/lbreakouthd/default.nix b/pkgs/games/lgames/lbreakouthd/default.nix
new file mode 100644
index 0000000000000..4a6e2c31bbf6b
--- /dev/null
+++ b/pkgs/games/lgames/lbreakouthd/default.nix
@@ -0,0 +1,35 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lbreakouthd";
+  version = "1.0.9";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    hash = "sha256-MHwK4jeDfZSS4jh///jW0/q4ntM4IuB0fQ8Bsaq0d0s=";
+  };
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+  ];
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    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/pkgs/games/lgames/lpairs2/default.nix b/pkgs/games/lgames/lpairs2/default.nix
new file mode 100644
index 0000000000000..4011dd9a29486
--- /dev/null
+++ b/pkgs/games/lgames/lpairs2/default.nix
@@ -0,0 +1,33 @@
+{ lib
+, stdenv
+, fetchurl
+, SDL2
+, SDL2_image
+, SDL2_mixer
+, SDL2_ttf
+}:
+
+stdenv.mkDerivation rec {
+  pname = "lpairs2";
+  version = "2.1";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    hash = "sha256-35KYDnPWOjNPu9wz9AWvSBAo1tdVDo7I2TNxtxE5RRg=";
+  };
+
+  buildInputs = [
+    SDL2
+    SDL2_image
+    SDL2_mixer
+    SDL2_ttf
+  ];
+
+  meta = with lib; {
+    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/pkgs/games/lgames/ltris/default.nix b/pkgs/games/lgames/ltris/default.nix
new file mode 100644
index 0000000000000..acf0f64d8c2bf
--- /dev/null
+++ b/pkgs/games/lgames/ltris/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, fetchurl, SDL, SDL_mixer }:
+
+stdenv.mkDerivation rec {
+  pname = "ltris";
+  version = "1.2.4";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
+    hash = "sha256-1ut7MBAjJ4YE2SkqkvL9L1ED7kEqdaEm0lUOLsI2j4M=";
+  };
+
+  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/pkgs/games/lgogdownloader/default.nix b/pkgs/games/lgogdownloader/default.nix
index 0c40d537fcec9..ab029e055aa9c 100644
--- a/pkgs/games/lgogdownloader/default.nix
+++ b/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/pkgs/games/liberal-crime-squad/default.nix b/pkgs/games/liberal-crime-squad/default.nix
index d8048b01d21e3..f46bd3b50a388 100644
--- a/pkgs/games/liberal-crime-squad/default.nix
+++ b/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/pkgs/games/ltris/default.nix b/pkgs/games/ltris/default.nix
deleted file mode 100644
index d128f6c6c0178..0000000000000
--- a/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/pkgs/games/ltris/gcc5_compliance.diff b/pkgs/games/ltris/gcc5_compliance.diff
deleted file mode 100644
index bf53fcf8467b3..0000000000000
--- a/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/pkgs/games/mindustry/default.nix b/pkgs/games/mindustry/default.nix
index 82df3710c5770..2572cd60c4a45 100644
--- a/pkgs/games/mindustry/default.nix
+++ b/pkgs/games/mindustry/default.nix
@@ -13,6 +13,7 @@
 , stb
 , ant
 , alsa-lib
+, alsa-plugins
 , glew
 
 # Make the build version easily overridable.
@@ -180,7 +181,8 @@ 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/
     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
diff --git a/pkgs/games/minecraft/default.nix b/pkgs/games/minecraft/default.nix
index 08104310faa3d..dc4cd9087fc2c 100644
--- a/pkgs/games/minecraft/default.nix
+++ b/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[@]}"
   '';
 
diff --git a/pkgs/games/mudlet/default.nix b/pkgs/games/mudlet/default.nix
index 46ae45b2202b3..f4ca916aa4997 100644
--- a/pkgs/games/mudlet/default.nix
+++ b/pkgs/games/mudlet/default.nix
@@ -85,7 +85,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/pkgs/games/nanosaur/default.nix b/pkgs/games/nanosaur/default.nix
index 75e47fa179b9b..0d5ea528a92da 100644
--- a/pkgs/games/nanosaur/default.nix
+++ b/pkgs/games/nanosaur/default.nix
@@ -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/pkgs/games/nethack/default.nix b/pkgs/games/nethack/default.nix
index 2b29bddad93ca..f6de3d57c1304 100644
--- a/pkgs/games/nethack/default.nix
+++ b/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/pkgs/games/openjk/default.nix b/pkgs/games/openjk/default.nix
index d2844809eea87..092f442669a69 100644
--- a/pkgs/games/openjk/default.nix
+++ b/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/pkgs/games/openmw/default.nix b/pkgs/games/openmw/default.nix
index edc8147a2b77b..8746d3172ac83 100644
--- a/pkgs/games/openmw/default.nix
+++ b/pkgs/games/openmw/default.nix
@@ -83,5 +83,10 @@ mkDerivation rec {
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ abbradar marius851000 ];
     platforms = platforms.linux;
+
+    # 2021-10-13, doesn't compile with glibc-2.34, maintainers prefer a fix on glibc's end.
+    # Can be marked as un-broken as soon as https://gitlab.com/OpenMW/openmw/-/merge_requests/1239
+    # is resolved and a patch is appliable here.
+    broken = true;
   };
 }
diff --git a/pkgs/games/openmw/tes3mp.nix b/pkgs/games/openmw/tes3mp.nix
index 37ad603d7cf53..b92c31663fc60 100644
--- a/pkgs/games/openmw/tes3mp.nix
+++ b/pkgs/games/openmw/tes3mp.nix
@@ -131,11 +131,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/pkgs/games/openra/common.nix b/pkgs/games/openra/common.nix
index 01bd44ee244ab..67060f9ef3883 100644
--- a/pkgs/games/openra/common.nix
+++ b/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/pkgs/games/openrct2/default.nix b/pkgs/games/openrct2/default.nix
index 4e07148761b7a..41c3ccac1f9f9 100644
--- a/pkgs/games/openrct2/default.nix
+++ b/pkgs/games/openrct2/default.nix
@@ -5,32 +5,32 @@
 }:
 
 let
-  openrct2-version = "0.3.5.1";
+  openrct2-version = "0.4.0";
 
   # 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.2.7";
+  title-sequences-version = "0.4.0";
 
   openrct2-src = fetchFromGitHub {
     owner = "OpenRCT2";
     repo = "OpenRCT2";
     rev = "v${openrct2-version}";
-    sha256 = "01v9nsabqjq8hjmyshcp7f5liagfq8sxx9i3yqqab7zk4iixag1h";
+    sha256 = "sha256-4MDOLOPsKzk1vb1o/G90/NTyYJWBSrGRX6ZJETbBIaI=";
   };
 
   objects-src = fetchFromGitHub {
     owner = "OpenRCT2";
     repo = "objects";
     rev = "v${objects-version}";
-    sha256 = "0r2vp2y67jc1mpfl4j83sx5khvvaddx7xs26ppkigmr2d1xpxgr7";
+    sha256 = "sha256-R4+rEdGdvYwFrkm/S3+zXmU+UDam51dI/pWKmFXNrbE=";
   };
 
   title-sequences-src = fetchFromGitHub {
     owner = "OpenRCT2";
     repo = "title-sequences";
     rev = "v${title-sequences-version}";
-    sha256 = "1qdrm4q75bznmgdrpjdaiqvbf3q4vwbkkmls45izxvyg1djrpsdf";
+    sha256 = "sha256-anqCZkhYoaxPu3MYCYSsFFngOmPp2wnx2MGb0hj6W5U=";
   };
 in
 stdenv.mkDerivation {
diff --git a/pkgs/games/opensupaplex/default.nix b/pkgs/games/opensupaplex/default.nix
index d3f8155f546c5..dc5d9aae690ce 100644
--- a/pkgs/games/opensupaplex/default.nix
+++ b/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/pkgs/games/osu-lazer/default.nix b/pkgs/games/osu-lazer/default.nix
index 2b1a2f044fa0f..bb006abad574c 100644
--- a/pkgs/games/osu-lazer/default.nix
+++ b/pkgs/games/osu-lazer/default.nix
@@ -9,22 +9,26 @@
 , SDL2
 , lttng-ust
 , numactl
+, dotnetCorePackages
 }:
 
 buildDotnetModule rec {
   pname = "osu-lazer";
-  version = "2022.205.0";
+  version = "2022.409.0";
 
   src = fetchFromGitHub {
     owner = "ppy";
     repo = "osu";
     rev = version;
-    sha256 = "sha256-CzXgj3990qWOwIjhbU8vO29nDO/7HrGDtsc67VIenPI=";
+    sha256 = "sha256-qG9797SA0iMq9IF5SzQLgnhoUd2FKSAVXUPem1LQc1M=";
   };
 
   projectFile = "osu.Desktop/osu.Desktop.csproj";
   nugetDeps = ./deps.nix;
 
+  dotnet-sdk = dotnetCorePackages.sdk_6_0;
+  dotnet-runtime = dotnetCorePackages.runtime_6_0;
+
   nativeBuildInputs = [ copyDesktopItems ];
 
   preConfigure = ''
diff --git a/pkgs/games/osu-lazer/deps.nix b/pkgs/games/osu-lazer/deps.nix
index 6ff9f6dfaf802..2ceafca07b015 100644
--- a/pkgs/games/osu-lazer/deps.nix
+++ b/pkgs/games/osu-lazer/deps.nix
@@ -1,150 +1,136 @@
 { 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.8.28-pre"; sha256 = "0l4saz51pz8iwsbqj1c3zlf22hiab4vl671rby97kkfbjwv9ra4s"; })
+  (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 = "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.42"; sha256 = "0cvnc1qdfcjbqkh335bv4wp44zisb4hc69lq3zphiyzqfrjisnyb"; })
+  (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.AspNetCore.App.Runtime.linux-x64"; version = "6.0.4"; sha256 = "1fvv5ri32pbl43628zqnim6fbv6hjxf66p0v793xdh57dzkdyh0j"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Connections.Abstractions"; version = "6.0.3"; sha256 = "0mc84qjsbsi7m1yx42w4zh8bdkqyqlvvx9iw80g4wsbrflkq5pwi"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Connections.Client"; version = "6.0.3"; sha256 = "1vadkmcxj2nv01mg8027z0ywxk2fddyj5aqflanslbfclsz4779i"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.Http.Connections.Common"; version = "6.0.3"; sha256 = "11a5w8p0nkfyp21aafpmrf0lvjpbg2p4yqay4dxbjg0w99w2kwq6"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Client"; version = "6.0.3"; sha256 = "00kga3smvhc3a1hvv174wk3av6pn83diyrq8hz4fgww4qazzq2h9"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Client.Core"; version = "6.0.3"; sha256 = "02bsa301vznnysc8slapanwnzs382fc0hasvb6p053llayw7j3if"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Common"; version = "6.0.3"; sha256 = "11s22x9gr6yv705cb9pbgkak8vm9vgarr7y062vrnm0ys1spw5pf"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.Json"; version = "6.0.3"; sha256 = "0h0wqfd6m8qjx0x0pyikisglqhzswpr1lz0mv4y6lj0mkq88ndc8"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.MessagePack"; version = "6.0.3"; sha256 = "0rg93blnrg4aja1xsys3y90qrd3i11ljhsdpbmxl5jiimy2ldqml"; })
+  (fetchNuGet { pname = "Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson"; version = "6.0.3"; sha256 = "135yyj40z3azacl2zrrciy7n3dhc5y98jacv9lpv4am0ik9lgv72"; })
   (fetchNuGet { pname = "Microsoft.Bcl.AsyncInterfaces"; version = "1.0.0"; sha256 = "00dx5armvkqjxvkldz3invdlck9nj7w21dlsr2aqp1rqbyrbsbbh"; })
   (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.3"; sha256 = "0y7ja54mhqgwyimnzx6hnv0jcg06if0a5a78qh2n4djp1q8iqjpp"; })
   (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.NETCore.App.Runtime.linux-x64"; version = "6.0.4"; sha256 = "1gibwhplbanv6bz3l71w8vhzlgqsh21bms30dbf1n60v7p02fl3h"; })
   (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.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"; })
@@ -159,26 +145,38 @@
   (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.LocalisationAnalyser"; version = "2022.320.0"; sha256 = "1sjam1mskkcilngrbjah74j1nwjgb9vr2j09sj6ip2hic216hzcf"; })
+  (fetchNuGet { pname = "ppy.osu.Framework"; version = "2022.408.0"; sha256 = "1nkgsd14dwdq9xkx7c6c4fd6zfxwbrfk9cddp33s31xs6sppxn9c"; })
+  (fetchNuGet { pname = "ppy.osu.Framework.NativeLibs"; version = "2022.222.0"; sha256 = "13qkpkrqxvd6xz676f9wzzjwm7d6iq1h24x7d1q4bab0q4wfqj5c"; })
+  (fetchNuGet { pname = "ppy.osu.Game.Resources"; version = "2022.407.0"; sha256 = "0mnjfradvs49awfgn84nc5iqwaai08q7i8zm0clphf5dj8dx5w1v"; })
   (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 = "Realm"; version = "10.10.0"; sha256 = "0dgcirbrn0idxmrnl9rw8mi3irkxz75cqnxbxwnb8m34jv2g8gfy"; })
+  (fetchNuGet { pname = "Realm.Fody"; version = "10.10.0"; sha256 = "1sip0q0qiscf77qqm32a1hiwkn67c31yljkajwnxkp35dhz78140"; })
   (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,92 +187,73 @@
   (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 = "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.14.1"; sha256 = "1cpmh00k5dii61i3x7f6zln7077k0cscdcxg5izw6zq250vxxhyh"; })
   (fetchNuGet { pname = "SharpCompress"; version = "0.30.1"; sha256 = "1hib2hxjrlikwsczym1qn2slaapgjw8qzd8gmid8bryaz8hv044h"; })
   (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.2"; sha256 = "0faql0cpxgpm5rwygg5j08q13602i6brvsx9f9m4sv2ysadmk0gf"; })
   (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"; })
@@ -297,68 +276,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.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.2"; sha256 = "1lz6gx1r4if8sbx6yp9h0mi0g9ffr40x0cg518l0z2aiqgil3fk0"; })
   (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/pkgs/games/osu-lazer/osu.runtimeconfig.json b/pkgs/games/osu-lazer/osu.runtimeconfig.json
index a1a197b1b6710..4148c494fbc73 100644
--- a/pkgs/games/osu-lazer/osu.runtimeconfig.json
+++ b/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/pkgs/games/osu-lazer/update.sh b/pkgs/games/osu-lazer/update.sh
index 21f9eb80f4520..ae130e187ccf0 100755
--- a/pkgs/games/osu-lazer/update.sh
+++ b/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/pkgs/games/otto-matic/default.nix b/pkgs/games/otto-matic/default.nix
index e213deabe8593..5dd7f98e4569f 100644
--- a/pkgs/games/otto-matic/default.nix
+++ b/pkgs/games/otto-matic/default.nix
@@ -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/pkgs/games/papermc/default.nix b/pkgs/games/papermc/default.nix
index 09dbfb6c3c83a..52bd5c00d4392 100644
--- a/pkgs/games/papermc/default.nix
+++ b/pkgs/games/papermc/default.nix
@@ -32,5 +32,6 @@ in stdenv.mkDerivation {
     license     = lib.licenses.gpl3Only;
     platforms   = lib.platforms.unix;
     maintainers = with lib.maintainers; [ aaronjanse neonfuz ];
+    mainProgram = "minecraft-server";
   };
 }
diff --git a/pkgs/games/polymc/default.nix b/pkgs/games/polymc/default.nix
index 57d6a0c9faaef..4c5c8f6b7808b 100644
--- a/pkgs/games/polymc/default.nix
+++ b/pkgs/games/polymc/default.nix
@@ -18,18 +18,18 @@
 
 mkDerivation rec {
   pname = "polymc";
-  version = "1.1.1";
+  version = "1.2.1";
 
   src = fetchFromGitHub {
     owner = "PolyMC";
     repo = "PolyMC";
     rev = version;
-    sha256 = "sha256-virXfnjCzuR2cJoyzapIopT9B+Yi1neff2ZqfOvsmxY=";
+    sha256 = "sha256-pnMmmeIKAaX+z1YzzowotjaG/HKdiqcz2tJ5eGRR77I=";
     fetchSubmodules = true;
   };
 
   nativeBuildInputs = [ cmake file makeWrapper ];
-  buildInputs = [ qtbase jdk8 zlib ];
+  buildInputs = [ qtbase jdk zlib ];
 
   postPatch = ''
     # hardcode jdk paths
diff --git a/pkgs/games/prboom-plus/default.nix b/pkgs/games/prboom-plus/default.nix
new file mode 100644
index 0000000000000..a249a4585bd8c
--- /dev/null
+++ b/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/pkgs/games/prboom/default.nix b/pkgs/games/prboom/default.nix
deleted file mode 100644
index 8adc9645b7ae2..0000000000000
--- a/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/pkgs/games/purpur/default.nix b/pkgs/games/purpur/default.nix
index b12c54449a488..4f08010b45555 100644
--- a/pkgs/games/purpur/default.nix
+++ b/pkgs/games/purpur/default.nix
@@ -37,5 +37,6 @@ stdenv.mkDerivation rec {
     license = licenses.mit;
     platforms = platforms.unix;
     maintainers = with maintainers; [ jyooru ];
+    mainProgram = "minecraft-server";
   };
 }
diff --git a/pkgs/games/quake3/quake3e/default.nix b/pkgs/games/quake3/quake3e/default.nix
index 7a1da6f6398c0..2346e6022d94f 100644
--- a/pkgs/games/quake3/quake3e/default.nix
+++ b/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/pkgs/games/quakespasm/default.nix b/pkgs/games/quakespasm/default.nix
index 137b86f57b6bf..e67363fdc3cc1 100644
--- a/pkgs/games/quakespasm/default.nix
+++ b/pkgs/games/quakespasm/default.nix
@@ -94,5 +94,6 @@ stdenv.mkDerivation rec {
 
     platforms = platforms.unix;
     maintainers = with maintainers; [ mikroskeem m3tti ];
+    mainProgram = "quake";
   };
 }
diff --git a/pkgs/games/rare/default.nix b/pkgs/games/rare/default.nix
index 9bf3aca754223..93a6296f67594 100644
--- a/pkgs/games/rare/default.nix
+++ b/pkgs/games/rare/default.nix
@@ -3,12 +3,12 @@
 
 buildPythonApplication rec {
   pname = "rare";
-  version = "1.8.8";
+  version = "1.8.9";
 
   src = fetchPypi {
     inherit version;
     pname = "Rare";
-    sha256 = "sha256-00CtvBqSrT9yJUHZ5529VrIQtCOYkHRc8+rJHmrTSpg=";
+    sha256 = "sha256-UEvGwWjr4FCsvyFz6Db3VnhVS6MS3FYzYSucumzOoEA=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/games/rili/default.nix b/pkgs/games/rili/default.nix
index a0082d28d506b..3a87fc0523c7b 100644
--- a/pkgs/games/rili/default.nix
+++ b/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,7 +9,17 @@ stdenv.mkDerivation rec {
     sha256 = "f71ccc20c37c601358d963e087ac0d524de8c68e96df09c3aac1ae65edd38dbd";
   };
 
-  patches = [ ./moderinze_cpp.patch ];
+  patches = [
+    ./moderinze_cpp.patch
+
+    # 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${SDL.dev}/include -I${SDL.dev}/include/SDL -I${SDL_mixer}/include";
 
diff --git a/pkgs/games/runelite/default.nix b/pkgs/games/runelite/default.nix
index d342d543e2fca..39ff9c137dfb8 100644
--- a/pkgs/games/runelite/default.nix
+++ b/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"
   '';
diff --git a/pkgs/games/runescape-launcher/default.nix b/pkgs/games/runescape-launcher/default.nix
index 8b678d792fcbf..3208aa3b46122 100644
--- a/pkgs/games/runescape-launcher/default.nix
+++ b/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 = [
@@ -76,7 +78,7 @@ let
       description = "Launcher for RuneScape 3, the current main RuneScape";
       homepage = "https://www.runescape.com/";
       license = licenses.unfree;
-      maintainers = with lib.maintainers; [ grburst ];
+      maintainers = with maintainers; [ grburst ];
       platforms = [ "x86_64-linux" ];
     };
   };
@@ -89,15 +91,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/pkgs/games/sauerbraten/default.nix b/pkgs/games/sauerbraten/default.nix
index 1d2e39d4164ec..934c590138d9e 100644
--- a/pkgs/games/sauerbraten/default.nix
+++ b/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/pkgs/games/starsector/default.nix b/pkgs/games/starsector/default.nix
index 95fb3988f28e7..efba43e92dd4f 100644
--- a/pkgs/games/starsector/default.nix
+++ b/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
diff --git a/pkgs/games/steam/fhsenv.nix b/pkgs/games/steam/fhsenv.nix
index c5fba68b22a10..d18accd0d546a 100644
--- a/pkgs/games/steam/fhsenv.nix
+++ b/pkgs/games/steam/fhsenv.nix
@@ -206,12 +206,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 +263,7 @@ in buildFHSUserEnv rec {
     name = "steam-run";
 
     targetPkgs = commonTargetPkgs;
-    inherit multiPkgs extraBuildCommands profile extraInstallCommands;
+    inherit multiPkgs profile extraInstallCommands;
 
     inherit unshareIpc unsharePid;
 
diff --git a/pkgs/games/tintin/default.nix b/pkgs/games/tintin/default.nix
index 2388158a36acd..aac7cf8f6ab40 100644
--- a/pkgs/games/tintin/default.nix
+++ b/pkgs/games/tintin/default.nix
@@ -29,6 +29,7 @@ stdenv.mkDerivation rec {
     homepage    = "http://tintin.sourceforge.net";
     license     = licenses.gpl2;
     maintainers = with maintainers; [ lovek323 ];
+    mainProgram = "tt++";
     platforms   = platforms.unix;
   };
 }
diff --git a/pkgs/games/tome4/default.nix b/pkgs/games/tome4/default.nix
index 70fbebe084c78..1f148feb9320a 100644
--- a/pkgs/games/tome4/default.nix
+++ b/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 \
diff --git a/pkgs/games/unciv/default.nix b/pkgs/games/unciv/default.nix
index 50db51b4e89e8..e8b5d748b932c 100644
--- a/pkgs/games/unciv/default.nix
+++ b/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;
diff --git a/pkgs/games/ut2004/wrapper.nix b/pkgs/games/ut2004/wrapper.nix
index bf344372933d4..cc5b0e400bc18 100644
--- a/pkgs/games/ut2004/wrapper.nix
+++ b/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/pkgs/games/warsow/default.nix b/pkgs/games/warsow/default.nix
index 81c467dd9db74..007b124ba58ce 100644
--- a/pkgs/games/warsow/default.nix
+++ b/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/pkgs/games/warzone2100/default.nix b/pkgs/games/warzone2100/default.nix
index a44f965b0e557..2df306d686f23 100644
--- a/pkgs/games/warzone2100/default.nix
+++ b/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/pkgs/games/xconq/default.nix b/pkgs/games/xconq/default.nix
index 10a959a676b49..2d28090c595ce 100644
--- a/pkgs/games/xconq/default.nix
+++ b/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/pkgs/games/xonotic/default.nix b/pkgs/games/xonotic/default.nix
index 46b0b594d724b..208608f0c15b4 100644
--- a/pkgs/games/xonotic/default.nix
+++ b/pkgs/games/xonotic/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, fetchzip, makeWrapper, runCommand, makeDesktopItem
+{ lib, stdenv, fetchurl, fetchpatch, fetchzip, makeWrapper, runCommand, makeDesktopItem
 , xonotic-data, copyDesktopItems
 , # required for both
   unzip, libjpeg, zlib, libvorbis, curl
@@ -64,6 +64,15 @@ let
       sha256 = "0axxw04fyz6jlfqd0kp7hdrqa0li31sx1pbipf2j5qp9wvqicsay";
     };
 
+    patches = [
+      # Fix to make darkplaces compile under GCC 11
+      (fetchpatch {
+        name = "fix-darkplaces-gcc11";
+        url = "https://gitlab.com/xonotic/darkplaces/-/commit/5e9e998c1759bc0085c3273fc39f9ea6f72a7dc8.patch";
+        sha256 = "sha256-s0JettSg0AYr8V2mXKJ2QU125bBcX1BAu/yDciTWC5o=";
+      })
+    ];
+
     nativeBuildInputs = [ unzip ];
     buildInputs = [ libjpeg zlib libvorbis curl gmp ]
       ++ lib.optional withGLX [ libX11.dev libGLU.dev libGL.dev libXpm.dev libXext.dev libXxf86vm.dev alsa-lib.dev ]
diff --git a/pkgs/games/zod/default.nix b/pkgs/games/zod/default.nix
index 6bf24ed6cb9fa..ad576b4642436 100644
--- a/pkgs/games/zod/default.nix
+++ b/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 {