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/amoeba/default.nix2
-rw-r--r--pkgs/games/among-sus/default.nix6
-rw-r--r--pkgs/games/blackshades/default.nix20
-rw-r--r--pkgs/games/crawl/default.nix2
-rw-r--r--pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix3
-rw-r--r--pkgs/games/dwarf-fortress/unfuck.nix3
-rw-r--r--pkgs/games/dwarf-fortress/wrapper/default.nix3
-rw-r--r--pkgs/games/factorio/versions.json48
-rw-r--r--pkgs/games/gnubg/default.nix6
-rw-r--r--pkgs/games/hawkthorne/default.nix39
-rw-r--r--pkgs/games/hawkthorne/makefile.patch33
-rw-r--r--pkgs/games/heroic/default.nix2
-rw-r--r--pkgs/games/hhexen/default.nix2
-rw-r--r--pkgs/games/instead/default.nix7
-rw-r--r--pkgs/games/legendary-gl/default.nix4
-rw-r--r--pkgs/games/lzwolf/default.nix44
-rwxr-xr-xpkgs/games/minecraft-server/update.sh21
-rw-r--r--pkgs/games/minecraft-servers/default.nix24
-rw-r--r--pkgs/games/minecraft-servers/derivation.nix (renamed from pkgs/games/minecraft-server/default.nix)14
-rwxr-xr-xpkgs/games/minecraft-servers/update.py155
-rw-r--r--pkgs/games/minecraft-servers/versions.json104
-rw-r--r--pkgs/games/moon-buggy/default.nix5
-rw-r--r--pkgs/games/n2048/default.nix31
-rw-r--r--pkgs/games/nethack/default.nix6
-rw-r--r--pkgs/games/nottetris2/default.nix49
-rw-r--r--pkgs/games/npush/default.nix47
-rw-r--r--pkgs/games/npush/run.nix31
-rw-r--r--pkgs/games/openra/common.nix6
-rw-r--r--pkgs/games/otto-matic/default.nix44
-rw-r--r--pkgs/games/planetaryannihilation/default.nix25
-rw-r--r--pkgs/games/r2mod_cli/default.nix4
-rw-r--r--pkgs/games/rimshot/default.nix55
-rw-r--r--pkgs/games/snis/default.nix73
-rw-r--r--pkgs/games/supertux/default.nix8
-rw-r--r--pkgs/games/tennix/default.nix4
-rw-r--r--pkgs/games/tetrio-desktop/default.nix85
-rw-r--r--pkgs/games/tlauncher/default.nix100
-rw-r--r--pkgs/games/vapor/default.nix61
-rw-r--r--pkgs/games/vassal/default.nix4
-rw-r--r--pkgs/games/vintagestory/default.nix4
-rw-r--r--pkgs/games/xconq/default.nix5
41 files changed, 710 insertions, 479 deletions
diff --git a/pkgs/games/amoeba/default.nix b/pkgs/games/amoeba/default.nix
index 61f5a5bf824df..0e21a9a1b9ea3 100644
--- a/pkgs/games/amoeba/default.nix
+++ b/pkgs/games/amoeba/default.nix
@@ -1,7 +1,7 @@
 { lib, stdenv, fetchurl, amoeba-data, alsa-lib, expat, freetype, gtk2, libvorbis, libGLU, xorg, pkg-config }:
 
 stdenv.mkDerivation rec {
-  name = "amoeba-${version}-${debver}";
+  pname = "amoeba";
   version = "1.1";
   debver = "29.1";
 
diff --git a/pkgs/games/among-sus/default.nix b/pkgs/games/among-sus/default.nix
index 454c7d181f951..be9ecc7adf57e 100644
--- a/pkgs/games/among-sus/default.nix
+++ b/pkgs/games/among-sus/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation {
   pname = "among-sus-unstable";
-  version = "2020-10-29";
+  version = "2021-05-19";
 
   src = fetchFromSourcehut {
     owner = "~martijnbraam";
     repo = "among-sus";
-    rev = "1f4c8d800d025d36ac66826937161be3252fbc57";
-    sha256 = "19jq7ygh9l11dl1h6702bg57m04y35nqd6yqx1rgp1kxwhp45xyh";
+    rev = "554e60bf52e3fa931661b9414189a92bb8f69d78";
+    sha256 = "0j1158nczhvy5i1ykvzvhlv4ndhibgng0dq1lw2bmi8q6k1q1s0w";
   };
 
   patchPhase = ''
diff --git a/pkgs/games/blackshades/default.nix b/pkgs/games/blackshades/default.nix
index bd29c7b616c42..76f22e98d9e96 100644
--- a/pkgs/games/blackshades/default.nix
+++ b/pkgs/games/blackshades/default.nix
@@ -1,29 +1,27 @@
 { lib, stdenv, fetchFromSourcehut
-, SDL, stb, libGLU, libGL, openal, libvorbis, freealut }:
+, zig, glfw, libGLU, libGL, openal, libsndfile }:
 
 stdenv.mkDerivation rec {
   pname = "blackshades";
-  version = "1.3.1";
+  version = "2.4.7";
 
   src = fetchFromSourcehut {
     owner = "~cnx";
     repo = pname;
     rev = version;
-    sha256 = "0yzp74ynkcp6hh5m4zmvrgx5gwm186hq7p3m7qkww54qdyijb3rv";
+    fetchSubmodules = true;
+    sha256 = "sha256-hvJwWUUmGeb7MQgKe79cPS2ckPZ9z0Yc5S9IiwuXPD8=";
   };
 
-  buildInputs = [ SDL stb libGLU libGL openal libvorbis freealut ];
+  nativeBuildInputs = [ zig ];
+  buildInputs = [ glfw libGLU libGL openal libsndfile ];
 
-  postPatch = ''
-    sed -i -e s,Data/,$out/share/$pname/,g \
-      -e s,Data:,$out/share/$pname/,g \
-      src/*.cpp
+  preBuild = ''
+    export HOME=$TMPDIR
   '';
 
   installPhase = ''
-    mkdir -p $out/bin $out/share
-    cp build/blackshades $out/bin
-    cp -R Data $out/share/$pname
+    zig build -Drelease-fast -Dcpu=baseline --prefix $out install
   '';
 
   meta = {
diff --git a/pkgs/games/crawl/default.nix b/pkgs/games/crawl/default.nix
index 02e34e5f749df..e5eea7ece6286 100644
--- a/pkgs/games/crawl/default.nix
+++ b/pkgs/games/crawl/default.nix
@@ -7,7 +7,7 @@
 }:
 
 stdenv.mkDerivation rec {
-  name = "crawl-${version}${lib.optionalString tileMode "-tiles"}";
+  pname = "crawl${lib.optionalString tileMode "-tiles"}";
   version = "0.27.1";
 
   src = fetchFromGitHub {
diff --git a/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix b/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
index 93f51df1819d5..316d1308eb794 100644
--- a/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
+++ b/pkgs/games/dwarf-fortress/dwarf-therapist/wrapper.nix
@@ -9,7 +9,8 @@ let
 in
 
 stdenv.mkDerivation {
-  name = "dwarf-therapist-${dwarf-therapist.version}";
+  pname = "dwarf-therapist";
+  version = dwarf-therapist.version;
 
   wrapper = substituteAll {
     src = ./dwarf-therapist.in;
diff --git a/pkgs/games/dwarf-fortress/unfuck.nix b/pkgs/games/dwarf-fortress/unfuck.nix
index 5b25cf4ff4090..27b54667f0b9a 100644
--- a/pkgs/games/dwarf-fortress/unfuck.nix
+++ b/pkgs/games/dwarf-fortress/unfuck.nix
@@ -72,7 +72,8 @@ let
 in
 
 stdenv.mkDerivation {
-  name = "dwarf_fortress_unfuck-${release.unfuckRelease}";
+  pname = "dwarf_fortress_unfuck";
+  version = release.unfuckRelease;
 
   src = fetchFromGitHub {
     owner = "svenstaro";
diff --git a/pkgs/games/dwarf-fortress/wrapper/default.nix b/pkgs/games/dwarf-fortress/wrapper/default.nix
index ce989b98ffbd7..3d1c3ead06042 100644
--- a/pkgs/games/dwarf-fortress/wrapper/default.nix
+++ b/pkgs/games/dwarf-fortress/wrapper/default.nix
@@ -92,7 +92,8 @@ let
 in
 
 stdenv.mkDerivation {
-  name = "dwarf-fortress-${dwarf-fortress.dfVersion}";
+  pname = "dwarf-fortress";
+  version = dwarf-fortress.dfVersion;
 
   dfInit = substituteAll {
     name = "dwarf-fortress-init";
diff --git a/pkgs/games/factorio/versions.json b/pkgs/games/factorio/versions.json
index 37dc97d5597b5..663dffe249829 100644
--- a/pkgs/games/factorio/versions.json
+++ b/pkgs/games/factorio/versions.json
@@ -2,48 +2,56 @@
   "x86_64-linux": {
     "alpha": {
       "experimental": {
-        "name": "factorio_alpha_x64-1.1.50.tar.xz",
+        "name": "factorio_alpha_x64-1.1.53.tar.xz",
         "needsAuth": true,
-        "sha256": "1sb3kvpj3kikr1bvm4si4f3dmj7873dhbz6zj57kin6d5mbmhq4p",
+        "sha256": "1l5sk9rhf4pq9l87w5sv4a1ikqx8rpby5hf4xn7sdsm9mshd3wyw",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.50/alpha/linux64",
-        "version": "1.1.50"
+        "url": "https://factorio.com/get-download/1.1.53/alpha/linux64",
+        "version": "1.1.53"
       },
       "stable": {
-        "name": "factorio_alpha_x64-1.1.50.tar.xz",
+        "name": "factorio_alpha_x64-1.1.53.tar.xz",
         "needsAuth": true,
-        "sha256": "1sb3kvpj3kikr1bvm4si4f3dmj7873dhbz6zj57kin6d5mbmhq4p",
+        "sha256": "1l5sk9rhf4pq9l87w5sv4a1ikqx8rpby5hf4xn7sdsm9mshd3wyw",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.50/alpha/linux64",
-        "version": "1.1.50"
+        "url": "https://factorio.com/get-download/1.1.53/alpha/linux64",
+        "version": "1.1.53"
       }
     },
     "demo": {
+      "experimental": {
+        "name": "factorio_demo_x64-1.1.53.tar.xz",
+        "needsAuth": false,
+        "sha256": "0m3mk296w4azma2v5z6pay1caqql2jfnlcyyd120laxl4rdg2k76",
+        "tarDirectory": "x64",
+        "url": "https://factorio.com/get-download/1.1.53/demo/linux64",
+        "version": "1.1.53"
+      },
       "stable": {
-        "name": "factorio_demo_x64-1.1.50.tar.xz",
+        "name": "factorio_demo_x64-1.1.53.tar.xz",
         "needsAuth": false,
-        "sha256": "0i3r21i7s4yzjfqrwf82x87pfjg7d3bhkz3zqi0x398j9bykpw43",
+        "sha256": "0m3mk296w4azma2v5z6pay1caqql2jfnlcyyd120laxl4rdg2k76",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.50/demo/linux64",
-        "version": "1.1.50"
+        "url": "https://factorio.com/get-download/1.1.53/demo/linux64",
+        "version": "1.1.53"
       }
     },
     "headless": {
       "experimental": {
-        "name": "factorio_headless_x64-1.1.50.tar.xz",
+        "name": "factorio_headless_x64-1.1.53.tar.xz",
         "needsAuth": false,
-        "sha256": "0j75wbnszhlmyk655b2h8jd1lvmnplq44blixl959hh3lxvqn50m",
+        "sha256": "18ra52h32nhdqxz6vagp9nw3an5pgamariy0ny050xr2xpidw3v1",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.50/headless/linux64",
-        "version": "1.1.50"
+        "url": "https://factorio.com/get-download/1.1.53/headless/linux64",
+        "version": "1.1.53"
       },
       "stable": {
-        "name": "factorio_headless_x64-1.1.50.tar.xz",
+        "name": "factorio_headless_x64-1.1.53.tar.xz",
         "needsAuth": false,
-        "sha256": "0j75wbnszhlmyk655b2h8jd1lvmnplq44blixl959hh3lxvqn50m",
+        "sha256": "18ra52h32nhdqxz6vagp9nw3an5pgamariy0ny050xr2xpidw3v1",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.50/headless/linux64",
-        "version": "1.1.50"
+        "url": "https://factorio.com/get-download/1.1.53/headless/linux64",
+        "version": "1.1.53"
       }
     }
   }
diff --git a/pkgs/games/gnubg/default.nix b/pkgs/games/gnubg/default.nix
index 7402049a9d820..6f50869e6c694 100644
--- a/pkgs/games/gnubg/default.nix
+++ b/pkgs/games/gnubg/default.nix
@@ -1,8 +1,8 @@
 { lib, stdenv, fetchurl, pkg-config, glib, python3, gtk2, readline }:
 
-let version = "1.06.002"; in
-stdenv.mkDerivation {
-  name = "gnubg-"+version;
+stdenv.mkDerivation rec {
+  pname = "gnubg";
+  version = "1.06.002";
 
   src = fetchurl {
     url = "http://gnubg.org/media/sources/gnubg-release-${version}-sources.tar.gz";
diff --git a/pkgs/games/hawkthorne/default.nix b/pkgs/games/hawkthorne/default.nix
deleted file mode 100644
index 3da78349dbb19..0000000000000
--- a/pkgs/games/hawkthorne/default.nix
+++ /dev/null
@@ -1,39 +0,0 @@
-{ fetchgit, lib, stdenv, love, curl, zip }:
-
-stdenv.mkDerivation {
-  version = "0.12.1";
-  pname = "hawkthorne";
-
-  src = fetchgit {
-    url = "https://github.com/hawkthorne/hawkthorne-journey.git";
-    rev = "610b9b3907b2a1b21da2ae926e4c7c4c9e19959b";
-    sha256 = "013smhdf9sh91153fpk2bwhhnpg6pn7kfrpw77jmf0v48i3q44h2";
-  };
-
-  buildInputs = [
-    love curl zip
-  ];
-
-  patches = [
-    ./makefile.patch
-  ];
-
-  enableParallelBuilding = true;
-
-  meta = {
-    description = "Journey to the Center of Hawkthorne - A fan-made retro-style game based on the show Community";
-    longDescription = ''
-      Journey to the Center of Hawkthorne is an open source game written in Love2D.
-      It's based on the show Community, starring Jim Rash and Joel McHale as
-      the primary will-they-or-won't-they relationship.
-
-      This game has been entirely developed by fans of the show, who were inspired
-      to bring to life the video game used to determine the winner of Pierce
-      Hawthorne's inheritance.
-    '';
-    homepage = "https://www.reddit.com/r/hawkthorne";
-    license = lib.licenses.mit;
-    maintainers = with lib.maintainers; [ campadrenalin ];
-    broken = true;
-  };
-}
diff --git a/pkgs/games/hawkthorne/makefile.patch b/pkgs/games/hawkthorne/makefile.patch
deleted file mode 100644
index 16a79683149d0..0000000000000
--- a/pkgs/games/hawkthorne/makefile.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-diff --git a/Makefile b/Makefile
-index 55eb817..f3406aa 100644
---- a/Makefile
-+++ b/Makefile
-@@ -18,10 +18,14 @@ endif
-
- tilemaps := $(patsubst %.tmx,%.lua,$(wildcard src/maps/*.tmx))
-
--maps: $(tilemaps)
--
- love: build/hawkthorne.love
-
-+shebang: build/hawkthorne.love
-+	cat <(echo '#!/usr/bin/env love') build/hawkthorne.love > build/hawkthorne
-+	chmod +x build/hawkthorne
-+
-+maps: $(tilemaps)
-+
- build/hawkthorne.love: $(tilemaps) src/*
- 	mkdir -p build
- 	cd src && zip --symlinks -q -r ../build/hawkthorne.love . -x ".*" \
-@@ -30,6 +34,12 @@ build/hawkthorne.love: $(tilemaps) src/*
- run: $(tilemaps) $(LOVE)
- 	$(LOVE) src
-
-+check: test
-+
-+install: shebang
-+	mkdir -p $(out)/bin
-+	cp build/hawkthorne $(out)/bin
-+
- src/maps/%.lua: src/maps/%.tmx bin/tmx2lua
- 	bin/tmx2lua $<
diff --git a/pkgs/games/heroic/default.nix b/pkgs/games/heroic/default.nix
index a877eed6213f6..bcbe2a6c65352 100644
--- a/pkgs/games/heroic/default.nix
+++ b/pkgs/games/heroic/default.nix
@@ -1,4 +1,4 @@
-{ lib, fetchurl, appimageTools, python, gsettings-desktop-schemas, gtk3 }:
+{ lib, fetchurl, appimageTools, gsettings-desktop-schemas, gtk3 }:
 
 let
   pname = "heroic";
diff --git a/pkgs/games/hhexen/default.nix b/pkgs/games/hhexen/default.nix
index 0306c54ef4ee8..19a0b783efdd0 100644
--- a/pkgs/games/hhexen/default.nix
+++ b/pkgs/games/hhexen/default.nix
@@ -1,7 +1,7 @@
 { lib, fetchurl, SDL, stdenv }:
 
 stdenv.mkDerivation rec {
-  name = "hhexen";
+  pname = "hhexen";
   version = "1.6.3";
   src = fetchurl {
     url = "mirror://sourceforge/hhexen/hhexen-${version}-src.tgz";
diff --git a/pkgs/games/instead/default.nix b/pkgs/games/instead/default.nix
index 5c35219c19bf4..cafdd2b84f0d7 100644
--- a/pkgs/games/instead/default.nix
+++ b/pkgs/games/instead/default.nix
@@ -1,8 +1,6 @@
 { lib, stdenv, fetchurl, SDL2, SDL2_ttf, SDL2_image, SDL2_mixer, pkg-config, lua, zlib, unzip }:
 
 let
-  version = "3.3.2";
-
   # I took several games at random from https://instead.syscall.ru/games/
   games = [
     (fetchurl {
@@ -28,8 +26,9 @@ let
   ];
 in
 
-stdenv.mkDerivation {
-  name = "instead-" + version;
+stdenv.mkDerivation rec {
+  pname = "instead";
+  version = "3.3.2";
 
   src = fetchurl {
     url = "mirror://sourceforge/project/instead/instead/${version}/instead_${version}.tar.gz";
diff --git a/pkgs/games/legendary-gl/default.nix b/pkgs/games/legendary-gl/default.nix
index cbdfbc22891be..fe3761f12d338 100644
--- a/pkgs/games/legendary-gl/default.nix
+++ b/pkgs/games/legendary-gl/default.nix
@@ -7,13 +7,13 @@
 
 buildPythonApplication rec {
   pname = "legendary-gl"; # Name in pypi
-  version = "0.20.18";
+  version = "0.20.24";
 
   src = fetchFromGitHub {
     owner = "derrod";
     repo = "legendary";
     rev = version;
-    sha256 = "0d31c8grvcw7y3sh2x90cxhj612k6f491w2r12j1q33d2v9sqm4j";
+    sha256 = "sha256-4VN/2FoAXTaumPsplV9wgdUSQsFitC1hqWveAW/yt58=";
   };
 
   propagatedBuildInputs = [ requests ];
diff --git a/pkgs/games/lzwolf/default.nix b/pkgs/games/lzwolf/default.nix
new file mode 100644
index 0000000000000..4faa7419b7ab9
--- /dev/null
+++ b/pkgs/games/lzwolf/default.nix
@@ -0,0 +1,44 @@
+{ stdenv, lib, fetchFromBitbucket, p7zip, cmake
+, SDL2, bzip2, zlib, libjpeg
+, libsndfile, mpg123
+, SDL2_net, SDL2_mixer }:
+
+stdenv.mkDerivation rec {
+  pname = "lzwolf";
+  version = "unstable-2022-01-04";
+
+  src = fetchFromBitbucket {
+    owner = "linuxwolf6";
+    repo = "lzwolf";
+    rev = "6e470316382b87378966f441e233760ce0ff478c";
+    sha256 = "sha256-IbZleY2FPyW3ORIGO2YFXQyAf1l9nDthpJjEKTTsilM=";
+  };
+  nativeBuildInputs = [ p7zip cmake ];
+  buildInputs = [
+    SDL2 bzip2 zlib libjpeg SDL2_mixer SDL2_net libsndfile mpg123
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_BUILD_TYPE=Release"
+    "-DGPL=ON"
+  ];
+
+  doCheck = true;
+
+  installPhase = ''
+    install -Dm755 lzwolf "$out/lib/lzwolf/lzwolf"
+    for i in *.pk3; do
+      install -Dm644 "$i" "$out/lib/lzwolf/$i"
+    done
+    mkdir -p $out/bin
+    ln -s $out/lib/lzwolf/lzwolf $out/bin/lzwolf
+  '';
+
+  meta = with lib; {
+    homepage = "https://bitbucket.org/linuxwolf6/lzwolf";
+    description = "Enhanced fork of ECWolf, a Wolfenstein 3D source port";
+    license = licenses.gpl2Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ tgunnoe ];
+  };
+}
diff --git a/pkgs/games/minecraft-server/update.sh b/pkgs/games/minecraft-server/update.sh
deleted file mode 100755
index 433a12a9caf62..0000000000000
--- a/pkgs/games/minecraft-server/update.sh
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/env nix-shell
-#!nix-shell -i bash -p curl jq common-updater-scripts
-
-BASEDIR="$(dirname "$0")"
-
-# get current release version
-versions=$(curl -s 'https://launchermeta.mojang.com/mc/game/version_manifest.json')
-version=$(echo $versions | jq .latest.release)
-url=$(echo $versions | jq -r ".versions[] | select(.id == $version) | .url")
-
-# get current server.jar
-versions=$(curl -s $url | jq .downloads.server)
-sha1=$(echo $versions | jq .sha1)
-url=$(echo $versions | jq .url)
-
-echo $version: $url:$sha1
-
-# change default.nix
-sed -i "s/version = \"[0-9.]*\";/version = ${version};/g" "$BASEDIR/default.nix"
-sed -i "s+url = \"[a-zA-Z0-9/:.]*/server.jar\";+url = $url;+g" "$BASEDIR/default.nix"
-sed -i "s/sha1 = \"[a-zA-Z0-9]*\";/sha1 = ${sha1};/g" "$BASEDIR/default.nix"
diff --git a/pkgs/games/minecraft-servers/default.nix b/pkgs/games/minecraft-servers/default.nix
new file mode 100644
index 0000000000000..f3d4aad16698e
--- /dev/null
+++ b/pkgs/games/minecraft-servers/default.nix
@@ -0,0 +1,24 @@
+{ callPackage, lib, javaPackages }:
+let
+  versions = lib.importJSON ./versions.json;
+
+  latestVersion = lib.last (builtins.sort lib.versionOlder (builtins.attrNames versions));
+  escapeVersion = builtins.replaceStrings [ "." ] [ "-" ];
+
+  getJavaVersion = v: (builtins.getAttr "openjdk${toString v}" javaPackages.compiler).headless;
+
+  packages = lib.mapAttrs'
+    (version: value: {
+      name = "vanilla-${escapeVersion version}";
+      value = callPackage ./derivation.nix {
+        inherit (value) version url sha1;
+        jre_headless = getJavaVersion (if value.javaVersion == null then 8 else value.javaVersion); # versions <= 1.6 will default to 8
+      };
+    })
+    versions;
+in
+lib.recurseIntoAttrs (
+  packages // {
+    vanilla = builtins.getAttr "vanilla-${escapeVersion latestVersion}" packages;
+  }
+)
diff --git a/pkgs/games/minecraft-server/default.nix b/pkgs/games/minecraft-servers/derivation.nix
index 02054f1ad8b52..eda7da943ca54 100644
--- a/pkgs/games/minecraft-server/default.nix
+++ b/pkgs/games/minecraft-servers/derivation.nix
@@ -1,13 +1,9 @@
-{ lib, stdenv, fetchurl, nixosTests, jre_headless }:
+{ lib, stdenv, fetchurl, nixosTests, jre_headless, version, url, sha1 }:
 stdenv.mkDerivation {
   pname = "minecraft-server";
-  version = "1.18.1";
+  inherit version;
 
-  src = fetchurl {
-    url = "https://launcher.mojang.com/v1/objects/125e5adf40c659fd3bce3e66e67a16bb49ecc1b9/server.jar";
-    # sha1 because that comes from mojang via api
-    sha1 = "125e5adf40c659fd3bce3e66e67a16bb49ecc1b9";
-  };
+  src = fetchurl { inherit url sha1; };
 
   preferLocalBuild = true;
 
@@ -27,7 +23,7 @@ stdenv.mkDerivation {
 
   passthru = {
     tests = { inherit (nixosTests) minecraft-server; };
-    updateScript = ./update.sh;
+    updateScript = ./update.py;
   };
 
   meta = with lib; {
@@ -35,6 +31,6 @@ stdenv.mkDerivation {
     homepage = "https://minecraft.net";
     license = licenses.unfreeRedistributable;
     platforms = platforms.unix;
-    maintainers = with maintainers; [ thoughtpolice tomberek costrouc ];
+    maintainers = with maintainers; [ thoughtpolice tomberek costrouc jyooru ];
   };
 }
diff --git a/pkgs/games/minecraft-servers/update.py b/pkgs/games/minecraft-servers/update.py
new file mode 100755
index 0000000000000..4fe84ee21a590
--- /dev/null
+++ b/pkgs/games/minecraft-servers/update.py
@@ -0,0 +1,155 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i python3 -p python3Packages.requests python3Packages.dataclasses-json
+
+import json
+from dataclasses import dataclass, field
+from datetime import datetime
+from typing import Any, Dict, List, Optional
+
+import requests
+from dataclasses_json import DataClassJsonMixin, LetterCase, config
+from marshmallow import fields
+
+
+@dataclass
+class Download(DataClassJsonMixin):
+    sha1: str
+    size: int
+    url: str
+
+
+@dataclass
+class Version(DataClassJsonMixin):
+    id: str
+    type: str
+    url: str
+    time: datetime = field(
+        metadata=config(
+            encoder=datetime.isoformat,
+            decoder=datetime.fromisoformat,
+            mm_field=fields.DateTime(format="iso"),
+        )
+    )
+    release_time: datetime = field(
+        metadata=config(
+            encoder=datetime.isoformat,
+            decoder=datetime.fromisoformat,
+            mm_field=fields.DateTime(format="iso"),
+            letter_case=LetterCase.CAMEL,
+        )
+    )
+
+    def get_manifest(self) -> Any:
+        """Return the version's manifest."""
+        response = requests.get(self.url)
+        response.raise_for_status()
+        return response.json()
+
+    def get_downloads(self) -> Dict[str, Download]:
+        """
+        Return all downloadable files from the version's manifest, in Download
+        objects.
+        """
+        return {
+            download_name: Download.from_dict(download_info)
+            for download_name, download_info in self.get_manifest()["downloads"].items()
+        }
+
+    def get_java_version(self) -> Any:
+        """
+        Return the java version specified in a version's manifest, if it is
+        present. Versions <= 1.6 do not specify this.
+        """
+        return self.get_manifest().get("javaVersion", {}).get("majorVersion", None)
+
+    def get_server(self) -> Optional[Download]:
+        """
+        If the version has a server download available, return the Download
+        object for the server download. If the version does not have a server
+        download avilable, return None.
+        """
+        downloads = self.get_downloads()
+        if "server" in downloads:
+            return downloads["server"]
+        return None
+
+
+def get_versions() -> List[Version]:
+    """Return a list of Version objects for all available versions."""
+    response = requests.get(
+        "https://launchermeta.mojang.com/mc/game/version_manifest.json"
+    )
+    response.raise_for_status()
+    data = response.json()
+    return [Version.from_dict(version) for version in data["versions"]]
+
+
+def get_major_release(version_id: str) -> str:
+    """
+    Return the major release for a version. The major release for 1.17 and
+    1.17.1 is 1.17.
+    """
+    if not len(version_id.split(".")) >= 2:
+        raise ValueError(f"version not in expected format: '{version_id}'")
+    return ".".join(version_id.split(".")[:2])
+
+
+def group_major_releases(releases: List[Version]) -> Dict[str, List[Version]]:
+    """
+    Return a dictionary containing each version grouped by each major release.
+    The key "1.17" contains a list with two Version objects, one for "1.17"
+    and another for "1.17.1".
+    """
+    groups: Dict[str, List[Version]] = {}
+    for release in releases:
+        major_release = get_major_release(release.id)
+        if major_release not in groups:
+            groups[major_release] = []
+        groups[major_release].append(release)
+    return groups
+
+
+def get_latest_major_releases(releases: List[Version]) -> Dict[str, Version]:
+    """
+    Return a dictionary containing the latest version for each major release.
+    The latest major release for 1.16 is 1.16.5, so the key "1.16" contains a
+    Version object for 1.16.5.
+    """
+    return {
+        major_release: sorted(releases, key=lambda x: x.id, reverse=True)[0]
+        for major_release, releases in group_major_releases(releases).items()
+    }
+
+
+def generate() -> Dict[str, Dict[str, str]]:
+    """
+    Return a dictionary containing the latest url, sha1 and version for each major
+    release.
+    """
+    versions = get_versions()
+    releases = list(
+        filter(lambda version: version.type == "release", versions)
+    )  # remove snapshots and betas
+    latest_major_releases = get_latest_major_releases(releases)
+
+    servers = {
+        version: Download.schema().dump(download_info)  # Download -> dict
+        for version, download_info in {
+            version: value.get_server()
+            for version, value in latest_major_releases.items()
+        }.items()
+        if download_info is not None  # versions < 1.2 do not have a server
+    }
+    for server in servers.values():
+        del server["size"]  # don't need it
+
+    for version, server in servers.items():
+        server["version"] = latest_major_releases[version].id
+        server["javaVersion"] = latest_major_releases[version].get_java_version()
+    return servers
+
+
+if __name__ == "__main__":
+    with open("versions.json", "w") as file:
+        json.dump(generate(), file, indent=2)
+        file.write("\n")
diff --git a/pkgs/games/minecraft-servers/versions.json b/pkgs/games/minecraft-servers/versions.json
new file mode 100644
index 0000000000000..ba0b652a6bdc4
--- /dev/null
+++ b/pkgs/games/minecraft-servers/versions.json
@@ -0,0 +1,104 @@
+{
+  "1.18": {
+    "url": "https://launcher.mojang.com/v1/objects/125e5adf40c659fd3bce3e66e67a16bb49ecc1b9/server.jar",
+    "sha1": "125e5adf40c659fd3bce3e66e67a16bb49ecc1b9",
+    "version": "1.18.1",
+    "javaVersion": 17
+  },
+  "1.17": {
+    "url": "https://launcher.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar",
+    "sha1": "a16d67e5807f57fc4e550299cf20226194497dc2",
+    "version": "1.17.1",
+    "javaVersion": 16
+  },
+  "1.16": {
+    "url": "https://launcher.mojang.com/v1/objects/1b557e7b033b583cd9f66746b7a9ab1ec1673ced/server.jar",
+    "sha1": "1b557e7b033b583cd9f66746b7a9ab1ec1673ced",
+    "version": "1.16.5",
+    "javaVersion": 8
+  },
+  "1.15": {
+    "url": "https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar",
+    "sha1": "bb2b6b1aefcd70dfd1892149ac3a215f6c636b07",
+    "version": "1.15.2",
+    "javaVersion": 8
+  },
+  "1.14": {
+    "url": "https://launcher.mojang.com/v1/objects/3dc3d84a581f14691199cf6831b71ed1296a9fdf/server.jar",
+    "sha1": "3dc3d84a581f14691199cf6831b71ed1296a9fdf",
+    "version": "1.14.4",
+    "javaVersion": 8
+  },
+  "1.13": {
+    "url": "https://launcher.mojang.com/v1/objects/3737db93722a9e39eeada7c27e7aca28b144ffa7/server.jar",
+    "sha1": "3737db93722a9e39eeada7c27e7aca28b144ffa7",
+    "version": "1.13.2",
+    "javaVersion": 8
+  },
+  "1.12": {
+    "url": "https://launcher.mojang.com/v1/objects/886945bfb2b978778c3a0288fd7fab09d315b25f/server.jar",
+    "sha1": "886945bfb2b978778c3a0288fd7fab09d315b25f",
+    "version": "1.12.2",
+    "javaVersion": 8
+  },
+  "1.11": {
+    "url": "https://launcher.mojang.com/v1/objects/f00c294a1576e03fddcac777c3cf4c7d404c4ba4/server.jar",
+    "sha1": "f00c294a1576e03fddcac777c3cf4c7d404c4ba4",
+    "version": "1.11.2",
+    "javaVersion": 8
+  },
+  "1.10": {
+    "url": "https://launcher.mojang.com/v1/objects/3d501b23df53c548254f5e3f66492d178a48db63/server.jar",
+    "sha1": "3d501b23df53c548254f5e3f66492d178a48db63",
+    "version": "1.10.2",
+    "javaVersion": 8
+  },
+  "1.9": {
+    "url": "https://launcher.mojang.com/v1/objects/edbb7b1758af33d365bf835eb9d13de005b1e274/server.jar",
+    "sha1": "edbb7b1758af33d365bf835eb9d13de005b1e274",
+    "version": "1.9.4",
+    "javaVersion": 8
+  },
+  "1.8": {
+    "url": "https://launcher.mojang.com/v1/objects/b58b2ceb36e01bcd8dbf49c8fb66c55a9f0676cd/server.jar",
+    "sha1": "b58b2ceb36e01bcd8dbf49c8fb66c55a9f0676cd",
+    "version": "1.8.9",
+    "javaVersion": 8
+  },
+  "1.7": {
+    "url": "https://launcher.mojang.com/v1/objects/4cec86a928ec171fdc0c6b40de2de102f21601b5/server.jar",
+    "sha1": "4cec86a928ec171fdc0c6b40de2de102f21601b5",
+    "version": "1.7.9",
+    "javaVersion": 8
+  },
+  "1.6": {
+    "url": "https://launcher.mojang.com/v1/objects/050f93c1f3fe9e2052398f7bd6aca10c63d64a87/server.jar",
+    "sha1": "050f93c1f3fe9e2052398f7bd6aca10c63d64a87",
+    "version": "1.6.4",
+    "javaVersion": null
+  },
+  "1.5": {
+    "url": "https://launcher.mojang.com/v1/objects/f9ae3f651319151ce99a0bfad6b34fa16eb6775f/server.jar",
+    "sha1": "f9ae3f651319151ce99a0bfad6b34fa16eb6775f",
+    "version": "1.5.2",
+    "javaVersion": null
+  },
+  "1.4": {
+    "url": "https://launcher.mojang.com/v1/objects/2f0ec8efddd2f2c674c77be9ddb370b727dec676/server.jar",
+    "sha1": "2f0ec8efddd2f2c674c77be9ddb370b727dec676",
+    "version": "1.4.7",
+    "javaVersion": null
+  },
+  "1.3": {
+    "url": "https://launcher.mojang.com/v1/objects/3de2ae6c488135596e073a9589842800c9f53bfe/server.jar",
+    "sha1": "3de2ae6c488135596e073a9589842800c9f53bfe",
+    "version": "1.3.2",
+    "javaVersion": null
+  },
+  "1.2": {
+    "url": "https://launcher.mojang.com/v1/objects/d8321edc9470e56b8ad5c67bbd16beba25843336/server.jar",
+    "sha1": "d8321edc9470e56b8ad5c67bbd16beba25843336",
+    "version": "1.2.5",
+    "javaVersion": null
+  }
+}
diff --git a/pkgs/games/moon-buggy/default.nix b/pkgs/games/moon-buggy/default.nix
index b623d7bd53969..12eb6b24a806c 100644
--- a/pkgs/games/moon-buggy/default.nix
+++ b/pkgs/games/moon-buggy/default.nix
@@ -1,16 +1,15 @@
 {lib, stdenv, fetchurl, ncurses}:
 
 stdenv.mkDerivation rec {
-  baseName = "moon-buggy";
+  pname = "moon-buggy";
   version = "1.0.51";
-  name = "${baseName}-${version}";
 
   buildInputs = [
     ncurses
   ];
 
   src = fetchurl {
-    url = "http://m.seehuhn.de/programs/${name}.tar.gz";
+    url = "http://m.seehuhn.de/programs/moon-buggy-${version}.tar.gz";
     sha256 = "0gyjwlpx0sd728dwwi7pwks4zfdy9rm1w1xbhwg6zip4r9nc2b9m";
   };
 
diff --git a/pkgs/games/n2048/default.nix b/pkgs/games/n2048/default.nix
index b3d06a51fd3c8..ec3a4e2bbeecf 100644
--- a/pkgs/games/n2048/default.nix
+++ b/pkgs/games/n2048/default.nix
@@ -1,35 +1,26 @@
-{lib, stdenv, fetchurl, ncurses}:
-let
-  s =
-  rec {
-    baseName = "n2048";
-    version = "0.1";
-    name = "${baseName}-${version}";
-    url = "http://www.dettus.net/n2048/${baseName}_v${version}.tar.gz";
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "n2048";
+  version = "0.1";
+  src = fetchurl {
+    url = "http://www.dettus.net/n2048/n2048_v${version}.tar.gz";
     sha256 = "184z2rr0rnj4p740qb4mzqr6kgd76ynb5gw9bj8hrfshcxdcg1kk";
   };
   buildInputs = [
     ncurses
   ];
-in
-stdenv.mkDerivation {
-  inherit (s) name version;
-  inherit buildInputs;
-  src = fetchurl {
-    inherit (s) url sha256;
-  };
   makeFlags = [
     "DESTDIR=$(out)"
   ];
   preInstall = ''
     mkdir -p "$out"/{share/man,bin}
   '';
-  meta = {
-    inherit (s) version;
+  meta = with lib; {
     description = "Console implementation of 2048 game";
-    license = lib.licenses.bsd2;
-    maintainers = [lib.maintainers.raskin];
-    platforms = lib.platforms.linux;
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
     homepage = "http://www.dettus.net/n2048/";
   };
 }
diff --git a/pkgs/games/nethack/default.nix b/pkgs/games/nethack/default.nix
index f9939f063c809..2b29bddad93ca 100644
--- a/pkgs/games/nethack/default.nix
+++ b/pkgs/games/nethack/default.nix
@@ -20,9 +20,9 @@ let
 
 in stdenv.mkDerivation rec {
   version = "3.6.6";
-  name = if x11Mode then "nethack-x11-${version}"
-         else if qtMode then "nethack-qt-${version}"
-         else "nethack-${version}";
+  pname = if x11Mode then "nethack-x11"
+         else if qtMode then "nethack-qt"
+         else "nethack";
 
   src = fetchurl {
     url = "https://nethack.org/download/${version}/nethack-${lib.replaceStrings ["."] [""] version}-src.tgz";
diff --git a/pkgs/games/nottetris2/default.nix b/pkgs/games/nottetris2/default.nix
deleted file mode 100644
index 179673c05b633..0000000000000
--- a/pkgs/games/nottetris2/default.nix
+++ /dev/null
@@ -1,49 +0,0 @@
-{ lib, stdenv, fetchFromGitHub, zip, love_0_7, makeWrapper, makeDesktopItem }:
-
-let
-  pname = "nottetris2";
-  version = "2.0";
-
-  desktopItem = makeDesktopItem {
-    name = "nottetris2";
-    exec = pname;
-    comment = "It's like tetris, but it's not";
-    desktopName = "nottetris2";
-    genericName = "nottetris2";
-    categories = "Game";
-  };
-
-in
-
-stdenv.mkDerivation {
-  inherit pname version;
-
-  src = fetchFromGitHub {
-    owner = "Stabyourself";
-    repo = pname;
-    rev = "v${version}";
-    sha256 = "17iabh6rr8jim70n96rbhif4xq02g2kppscm8l339yqx6mhb64hs";
-  };
-
-  nativeBuildInputs = [ zip makeWrapper ];
-  buildInputs = [ love_0_7 ];
-
-  installPhase =
-  ''
-    mkdir -p $out/bin $out/share/games/lovegames $out/share/applications
-    zip -9 -r ${pname}.love ./*
-    mv ${pname}.love $out/share/games/lovegames/${pname}.love
-    makeWrapper ${love_0_7}/bin/love $out/bin/${pname} --add-flags $out/share/games/lovegames/${pname}.love
-    ln -s ${desktopItem}/share/applications/* $out/share/applications/
-    chmod +x $out/bin/${pname}
-  '';
-
-  meta = with lib; {
-    description = "It's like Tetris, but it's not";
-    platforms = platforms.linux;
-    license = licenses.wtfpl;
-    maintainers = with maintainers; [ yorickvp ];
-    downloadPage = "https://stabyourself.net/nottetris2/";
-  };
-
-}
diff --git a/pkgs/games/npush/default.nix b/pkgs/games/npush/default.nix
new file mode 100644
index 0000000000000..d4124557f6e6d
--- /dev/null
+++ b/pkgs/games/npush/default.nix
@@ -0,0 +1,47 @@
+{ lib
+, stdenv
+, fetchurl
+, ncurses
+}:
+
+stdenv.mkDerivation rec {
+  pname = "npush";
+  version = "0.7";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/project/npush/${pname}/${version}/${pname}-${version}.tgz";
+    hash = "sha256-8hbSsyeehzd4T3fUhDyebyI/oTHOHr3a8ArYAquivNk=";
+  };
+
+  outputs = [ "out" "doc" ];
+
+  buildInputs = [
+    ncurses
+  ];
+
+  dontConfigure = true;
+
+  makeFlags = [
+    "CC=${stdenv.cc.targetPrefix}c++"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/npush/levels $doc/share/doc/npush
+    cp npush $out/bin/
+    cp levels/* $out/share/npush/levels
+    cp CHANGES COPYING CREDITS index.html \
+       readme.txt screenshot1.png screenshot2.png $doc/share/doc/npush/
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "http://npush.sourceforge.net/";
+    description = "A Sokoban-like game";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ AndersonTorres ];
+    platforms = with platforms; unix;
+  };
+}
diff --git a/pkgs/games/npush/run.nix b/pkgs/games/npush/run.nix
new file mode 100644
index 0000000000000..bc4a3b5fda3f2
--- /dev/null
+++ b/pkgs/games/npush/run.nix
@@ -0,0 +1,31 @@
+{ runtimeShell
+, symlinkJoin
+, writeShellScriptBin
+, npush
+}:
+
+let
+  runScript = writeShellScriptBin "run-npush" ''
+    set -euo pipefail
+    CWD=$(pwd)
+
+    if [ -d "./levels" ]; then
+      echo "Directory ./levels found; skipping levelset copy"
+    else
+      echo "Directory ./levels not found; copying the official levelset to the current directory"
+      mkdir -p ./levels
+      cp ${npush}/share/npush/levels/* levels/
+      chmod 644 levels/*
+    fi
+    echo "Now calling npush"
+    exec "${npush}/bin/npush"
+  '';
+in
+symlinkJoin {
+  name = "run-npush-${npush.version}";
+
+  paths = [
+    npush
+    runScript
+  ];
+}
diff --git a/pkgs/games/openra/common.nix b/pkgs/games/openra/common.nix
index 41c903e101167..01bd44ee244ab 100644
--- a/pkgs/games/openra/common.nix
+++ b/pkgs/games/openra/common.nix
@@ -2,7 +2,7 @@
     and out-of-tree mod packages (mod.nix).
 */
 { lib, makeSetupHook, curl, unzip, dos2unix, pkg-config, makeWrapper
-, lua, mono, dotnetPackages, python
+, lua, mono, dotnetPackages, python2
 , libGL, freetype, openal, SDL2
 , zenity
 }:
@@ -10,7 +10,7 @@
 with lib;
 
 let
-  path = makeBinPath ([ mono python ] ++ optional (zenity != null) zenity);
+  path = makeBinPath ([ mono python2 ] ++ optional (zenity != null) zenity);
   rpath = makeLibraryPath [ lua freetype openal SDL2 ];
   mkdirp = makeSetupHook { } ./mkdirp.sh;
 
@@ -66,7 +66,7 @@ in {
       makeWrapper
       mkdirp
       mono
-      python
+      python2
     ];
 
     makeFlags = [ "prefix=$(out)" ];
diff --git a/pkgs/games/otto-matic/default.nix b/pkgs/games/otto-matic/default.nix
new file mode 100644
index 0000000000000..e213deabe8593
--- /dev/null
+++ b/pkgs/games/otto-matic/default.nix
@@ -0,0 +1,44 @@
+{ lib, stdenv, fetchFromGitHub, SDL2, cmake, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "OttoMatic";
+  version = "4.0.0";
+
+  src = fetchFromGitHub {
+    owner = "jorio";
+    repo = pname;
+    rev = version;
+    sha256 = "sha256:1yd4clks7kr2hn69c4q1ykc92sw6axbspambm03viapr834bjz3q";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [
+    SDL2
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    makeWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/share/OttoMatic
+    mv Data $out/share/OttoMatic
+    install -Dm755 {.,$out/bin}/OttoMatic
+    wrapProgram $out/bin/OttoMatic --run "cd $out/share/OttoMatic"
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "A port of Otto Matic, a 2001 Macintosh game by Pangea Software, for modern operating systems";
+    homepage = "https://github.com/jorio/OttoMatic";
+    license = with licenses; [
+      cc-by-sa-40
+    ];
+    maintainers = with maintainers; [ lux ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/games/planetaryannihilation/default.nix b/pkgs/games/planetaryannihilation/default.nix
index c29af6d810f5f..2debd15f814eb 100644
--- a/pkgs/games/planetaryannihilation/default.nix
+++ b/pkgs/games/planetaryannihilation/default.nix
@@ -1,26 +1,15 @@
 { lib, stdenv, config, fetchurl, patchelf, makeWrapper, gtk2, glib, udev, alsa-lib, atk
-, nspr, fontconfig, cairo, pango, nss, freetype, gnome2, gdk-pixbuf, curl, systemd, xorg }:
+, nspr, fontconfig, cairo, pango, nss, freetype, gnome2, gdk-pixbuf, curl, systemd, xorg, requireFile }:
 
-# TODO: use dynamic attributes once Nix 1.7 is out
-assert ((config.planetary_annihilation or null).url or null) != null;
-assert ((config.planetary_annihilation or null).sha256 or null) != null;
+stdenv.mkDerivation rec {
+  pname = "planetary-annihalation";
+  version = "62857";
 
-/* to setup:
- $ cat ~/.config/nixpkgs/config.nix
- {
-  planetary_annihilation = {
-    url = "file:///home/user/PA_Linux_62857.tar.bz2";
+  src = requireFile {
+    message = "This file has to be downloaded manually via nix-prefetch-url.";
+    name = "PA_Linux_${version}.tar.bz2";
     sha256 = "0imi3k5144dsn3ka9khx3dj76klkw46ga7m6rddqjk4yslwabh3k";
   };
-}
-*/
-
-stdenv.mkDerivation {
-  name = "planetary-annihalation";
-
-  src = fetchurl {
-    inherit (config.planetary_annihilation) url sha256;
-  };
 
   nativeBuildInputs = [ patchelf makeWrapper ];
 
diff --git a/pkgs/games/r2mod_cli/default.nix b/pkgs/games/r2mod_cli/default.nix
index 169385576ac5e..607a53579c7eb 100644
--- a/pkgs/games/r2mod_cli/default.nix
+++ b/pkgs/games/r2mod_cli/default.nix
@@ -8,13 +8,13 @@
 
 stdenv.mkDerivation rec {
   pname = "r2mod_cli";
-  version = "1.2.0";
+  version = "1.2.1";
 
   src = fetchFromGitHub {
     owner = "Foldex";
     repo = "r2mod_cli";
     rev = "v${version}";
-    sha256 = "sha256-VNqdVDBR6+eNOeUthPXLfz+0VoaNfSj4f04HLvjg6/0=";
+    sha256 = "sha256-FS9P/uTZU4d6zpM3TlEW6i6PLGHxqqO2fc8D7VsPCig=";
   };
 
   buildInputs = [ bashInteractive ];
diff --git a/pkgs/games/rimshot/default.nix b/pkgs/games/rimshot/default.nix
deleted file mode 100644
index 997da768c6d4a..0000000000000
--- a/pkgs/games/rimshot/default.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{ lib, stdenv, fetchurl, unzip, love, lua, makeWrapper, makeDesktopItem }:
-
-stdenv.mkDerivation rec {
-  pname = "rimshot";
-  version = "1.0";
-
-  src = fetchurl {
-    url = "https://stabyourself.net/dl.php?file=${pname}/${pname}-source.zip";
-    sha256 = "08pdkyvki92549605m9bqnr24ipkbwkp5nkr5aagdqnr8ai4rgmi";
-  };
-
-  icon = fetchurl {
-    url = "http://stabyourself.net/images/screenshots/rimshot-2.png";
-    sha256 = "08fyiqym3gcpq2vgb5dvafkban42fsbzfcr3iiyw03hz99q53psd";
-  };
-
-  desktopItem = makeDesktopItem {
-    name = "rimshot";
-    exec = pname;
-    icon = icon;
-    comment = "Create your own music";
-    desktopName = "Rimshot";
-    genericName = "rimshot";
-    categories = "Audio;AudioVideo;Music";
-  };
-
-  nativeBuildInputs = [ makeWrapper unzip ];
-  buildInputs = [ lua love ];
-
-  unpackPhase = ''
-    unzip -j $src
-  '';
-
-  installPhase =
-  ''
-    mkdir -p $out/bin
-    mkdir -p $out/share/games/lovegames
-
-    cp -v ./*.love $out/share/games/lovegames/${pname}.love
-    makeWrapper ${love}/bin/love $out/bin/${pname} --add-flags $out/share/games/lovegames/${pname}.love
-
-    chmod +x $out/bin/${pname}
-    mkdir -p $out/share/applications
-    ln -s ${desktopItem}/share/applications/* $out/share/applications/
-  '';
-
-  meta = with lib; {
-    description = "Create your own music";
-    maintainers = with maintainers; [ leenaars ];
-    platforms = platforms.linux;
-    license = licenses.free;
-    downloadPage = "http://stabyourself.net/rimshot/";
-  };
-
-}
diff --git a/pkgs/games/snis/default.nix b/pkgs/games/snis/default.nix
new file mode 100644
index 0000000000000..ed09ed46eff54
--- /dev/null
+++ b/pkgs/games/snis/default.nix
@@ -0,0 +1,73 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, coreutils
+, portaudio
+, libbsd
+, libpng
+, libvorbis
+, SDL2
+, makeWrapper
+, lua5_2
+, glew
+, openssl
+, picotts
+, alsa-utils
+, espeak-classic
+, sox
+, libopus
+, openscad
+}:
+
+stdenv.mkDerivation {
+  pname = "snis_launcher";
+  version = "unstable-2021-10-17";
+
+  src = fetchFromGitHub {
+    owner = "smcameron";
+    repo = "space-nerds-in-space";
+    rev = "e70d3c63e33c940feb53c8d818ce2d8ea2aadf00";
+    sha256 = "sha256-HVCb1iFn7GWNpedtFCgLyd0It8s4PEmUwDfb8ap1TDc=";
+  };
+
+  postPatch = ''
+    substituteInPlace Makefile \
+      --replace "OPUSARCHIVE=libopus.a" "OPUSARCHIVE=" \
+      --replace "-I./opus-1.3.1/include" "-I${libopus.dev}/include/opus"
+    substituteInPlace snis_launcher \
+      --replace "PREFIX=." "PREFIX=$out"
+    substituteInPlace snis_text_to_speech.sh \
+      --replace "pico2wave" "${sox}/bin/pico2wave" \
+      --replace "espeak" "${espeak-classic}/bin/espeak" \
+      --replace "play" "${sox}/bin/play" \
+      --replace "aplay" "${alsa-utils}/bin/aplay" \
+      --replace "/bin/rm" "${coreutils}/bin/rm"
+  '';
+
+  nativeBuildInputs = [ pkg-config openscad makeWrapper ];
+  buildInputs = [ coreutils portaudio libbsd libpng libvorbis SDL2 lua5_2 glew openssl picotts sox alsa-utils libopus ];
+
+  postBuild = ''
+    make models -j$NIX_BUILD_CORES
+  '';
+
+  installPhase = ''
+    runHook preInstall
+    mkdir -p $out
+    cp -R share $out/share
+    cp -R bin $out/bin
+    cp snis_launcher $out/bin/
+    # without this, snis_client crashes on Wayland
+    wrapProgram $out/bin/snis_client --set SDL_VIDEODRIVER x11
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Space Nerds In Space, a multi-player spaceship bridge simulator";
+    homepage = "https://smcameron.github.io/space-nerds-in-space/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ alyaeanyx ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/games/supertux/default.nix b/pkgs/games/supertux/default.nix
index 31b36efc4900e..067ce78fae9cd 100644
--- a/pkgs/games/supertux/default.nix
+++ b/pkgs/games/supertux/default.nix
@@ -1,21 +1,21 @@
 { lib, stdenv, fetchurl, cmake, pkg-config, SDL2, SDL2_image , curl
 , libogg, libvorbis, libGLU, libGL, openal, boost, glew
-, libpng, freetype
+, libpng, freetype, glm
 }:
 
 stdenv.mkDerivation rec {
   pname = "supertux";
-  version = "0.6.2";
+  version = "0.6.3";
 
   src = fetchurl {
     url = "https://github.com/SuperTux/supertux/releases/download/v${version}/SuperTux-v${version}-Source.tar.gz";
-    sha256 = "167m3z4m8n76dvbv42m1fnvabpbpsxvr28zk9641916jl9pfba96";
+    sha256 = "1xkr3ka2sxp5s0spp84iv294i29s1vxqzazb6kmjc0n415h0x57p";
   };
 
   nativeBuildInputs = [ pkg-config cmake ];
 
   buildInputs = [ SDL2 SDL2_image curl libogg libvorbis libGLU libGL openal boost glew
-    libpng freetype
+    libpng freetype glm
   ];
 
   cmakeFlags = [ "-DENABLE_BOOST_STATIC_LIBS=OFF" ];
diff --git a/pkgs/games/tennix/default.nix b/pkgs/games/tennix/default.nix
index f81ddb7edf953..809ed7a146d08 100644
--- a/pkgs/games/tennix/default.nix
+++ b/pkgs/games/tennix/default.nix
@@ -1,4 +1,4 @@
-{lib, stdenv, fetchurl, SDL, SDL_mixer, SDL_image, SDL_ttf, SDL_net, python } :
+{lib, stdenv, fetchurl, SDL, SDL_mixer, SDL_image, SDL_ttf, SDL_net, python2 } :
 
 stdenv.mkDerivation rec {
   pname = "tennix";
@@ -8,7 +8,7 @@ stdenv.mkDerivation rec {
     sha256 = "0np5kw1y7i0z0dsqx4r2nvmq86qj8hv3mmgavm3hxraqnds5z8cm";
   };
 
-  buildInputs = [ python SDL SDL_mixer SDL_image SDL_ttf SDL_net ];
+  buildInputs = [ python2 SDL SDL_mixer SDL_image SDL_ttf SDL_net ];
 
   patches = [ ./fix_FTBFS.patch ];
 
diff --git a/pkgs/games/tetrio-desktop/default.nix b/pkgs/games/tetrio-desktop/default.nix
new file mode 100644
index 0000000000000..c700aba72fc9c
--- /dev/null
+++ b/pkgs/games/tetrio-desktop/default.nix
@@ -0,0 +1,85 @@
+{ stdenv
+, lib
+, fetchurl
+, autoPatchelfHook
+, alsa-lib
+, cups
+, libX11
+, libXScrnSaver
+, libXtst
+, mesa
+, nss
+, systemd
+, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tetrio-desktop";
+  version = "8.0.0";
+
+  src = fetchurl {
+    url = "https://web.archive.org/web/20211130172544/https://tetr.io/about/desktop/builds/TETR.IO%20Setup.deb";
+    name = "tetrio-desktop.deb";
+    sha256 = "1nlblfhrph4cw8rpic9icrs78mzrxyskl7ggyy2i8bk9i07i21xf";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    cups
+    libX11
+    libXScrnSaver
+    libXtst
+    mesa
+    nss
+  ];
+
+  dontWrapGApps = true;
+
+  libPath = lib.makeLibraryPath [
+    alsa-lib
+    cups
+    libX11
+    libXScrnSaver
+    libXtst
+    mesa
+    nss
+    systemd
+  ];
+
+  unpackPhase = ''
+    mkdir -p $TMP/tetrio-desktop $out/bin
+    cp $src $TMP/tetrio-desktop.deb
+    ar vx $TMP/tetrio-desktop.deb
+    tar --no-overwrite-dir -xvf data.tar.xz -C $TMP/tetrio-desktop/
+  '';
+
+  installPhase = ''
+    cp -R $TMP/tetrio-desktop/{usr/share,opt} $out/
+
+    wrapProgram $out/opt/TETR.IO/tetrio-desktop \
+      --prefix LD_LIBRARY_PATH : ${libPath}:$out/opt/TETR.IO
+
+    ln -s $out/opt/TETR.IO/tetrio-desktop $out/bin/
+
+    substituteInPlace $out/share/applications/tetrio-desktop.desktop \
+      --replace "Exec=\"/opt/TETR.IO/tetrio-desktop\"" "Exec=\"$out/opt/TETR.IO/tetrio-desktop\""
+  '';
+
+  meta = with lib; {
+    homepage = "https://tetr.io";
+    downloadPage = "https://tetr.io/about/desktop/";
+    description = "TETR.IO desktop client";
+    longDescription = ''
+      TETR.IO is a modern yet familiar online stacker.
+      Play against friends and foes all over the world, or claim a spot on the leaderboards - the stacker future is yours!
+    '';
+    platforms = [ "x86_64-linux" ];
+    license = licenses.unfree;
+    maintainers = with maintainers; [ wackbyte ];
+  };
+}
diff --git a/pkgs/games/tlauncher/default.nix b/pkgs/games/tlauncher/default.nix
deleted file mode 100644
index 48cfac1f582ce..0000000000000
--- a/pkgs/games/tlauncher/default.nix
+++ /dev/null
@@ -1,100 +0,0 @@
-{ lib
-, stdenv
-, openjdk8
-, buildFHSUserEnv
-, fetchzip
-, fetchurl
-, copyDesktopItems
-, makeDesktopItem
-}:
-let
-  version = "2.839";
-  src = stdenv.mkDerivation {
-    pname = "tlauncher";
-    inherit version;
-    src = fetchzip {
-      name = "tlauncher.zip";
-      url = "https://dl2.tlauncher.org/f.php?f=files%2FTLauncher-${version}.zip";
-      sha256 = "sha256-KphpNuTucpuJhXspKxqDyYQN6vbpY0XCB3GAd5YCGbc=";
-      stripRoot = false;
-    };
-    installPhase = ''
-      cp $src/*.jar $out
-    '';
-  };
-  fhs = buildFHSUserEnv {
-    name = "tlauncher";
-    runScript = ''
-      ${openjdk8}/bin/java -jar "${src}" "$@"
-    '';
-    targetPkgs = pkgs: with pkgs; [
-      alsa-lib
-      cpio
-      cups
-      file
-      fontconfig
-      freetype
-      giflib
-      glib
-      gnome2.GConf
-      gnome2.gnome_vfs
-      gtk2
-      libjpeg
-      libGL
-      openjdk8-bootstrap
-      perl
-      which
-      xorg.libICE
-      xorg.libX11
-      xorg.libXcursor
-      xorg.libXext
-      xorg.libXi
-      xorg.libXinerama
-      xorg.libXrandr
-      xorg.xrandr
-      xorg.libXrender
-      xorg.libXt
-      xorg.libXtst
-      xorg.libXtst
-      xorg.libXxf86vm
-      zip
-      zlib
-    ];
-  };
-  desktopItem = makeDesktopItem {
-    name = "tlauncher";
-    exec = "tlauncher";
-    icon = fetchurl {
-      url = "https://styles.redditmedia.com/t5_2o8oax/styles/communityIcon_gu5r5v8eaiq51.png";
-      sha256 = "sha256-ma8zxaUxdAw5VYfOK8i8s1kjwMgs80Eomq43Cb0HZWw=";
-    };
-    comment = "Minecraft launcher";
-    desktopName = "TLauncher";
-    categories = "Game;";
-  };
-in stdenv.mkDerivation {
-  pname = "tlauncher-wrapper";
-  inherit version;
-
-  dontUnpack = true;
-
-  installPhase = ''
-    runHook preInstall
-
-    mkdir $out/{bin,share/applications} -p
-    install ${fhs}/bin/tlauncher $out/bin
-
-    runHook postInstall
-  '';
-
-  nativeBuildInputs = [ copyDesktopItems ];
-  desktopItems = [ desktopItem ];
-
-  meta = with lib; {
-    description = "Minecraft launcher that already deal with forge, optifine and mods";
-    homepage = "https://tlauncher.org/";
-    maintainers = with maintainers; [ lucasew ];
-    license = licenses.unfree;
-    platforms = openjdk8.meta.platforms;
-  };
-}
diff --git a/pkgs/games/vapor/default.nix b/pkgs/games/vapor/default.nix
deleted file mode 100644
index 2fa7ca1892701..0000000000000
--- a/pkgs/games/vapor/default.nix
+++ /dev/null
@@ -1,61 +0,0 @@
-{ lib, stdenv, fetchurl, love, lua, makeWrapper, makeDesktopItem }:
-
-let
-  pname = "vapor";
-  version = "0.2.3";
-  commitid = "dbf509f";
-
-  icon = fetchurl {
-    url = "http://vapor.love2d.org/sites/default/files/vapT240x90.png";
-    sha256 = "1xlra74lpm1y54z6zm6is0gldkswp3wdw09m6a306ch0xjf3f87f";
-  };
-
-  desktopItem = makeDesktopItem {
-    name = "Vapor";
-    exec = pname;
-    icon = icon;
-    comment = "LÖVE Distribution Client";
-    desktopName = "Vapor";
-    genericName = "vapor";
-    categories = "Game;";
-  };
-
-in
-
-stdenv.mkDerivation {
-  name = "${pname}-${version}";
-
-  src = fetchurl {
-    url =
-    "https://github.com/josefnpat/${pname}/releases/download/${version}/${pname}_${commitid}.love";
-    sha256 = "0w2qkrrkzfy4h4jld18apypmbi8a8r89y2l11axlv808i2rg68fk";
-  };
-
-  nativeBuildInputs = [ makeWrapper ];
-  buildInputs = [ lua love ];
-
-  dontUnpack = true;
-
-  installPhase =
-  ''
-    mkdir -p $out/bin
-    mkdir -p $out/share
-
-    cp -v $src $out/share/${pname}.love
-
-    makeWrapper ${love}/bin/love $out/bin/${pname} --add-flags $out/share/${pname}.love
-
-    chmod +x $out/bin/${pname}
-    mkdir -p $out/share/applications
-    ln -s ${desktopItem}/share/applications/* $out/share/applications/
-  '';
-
-  meta = with lib; {
-    description = "LÖVE Distribution Client allowing access to many games";
-    platforms = platforms.linux;
-    license = licenses.zlib;
-    maintainers = with maintainers; [ leenaars ];
-    downloadPage = "http://vapor.love2d.org/";
-  };
-
-}
diff --git a/pkgs/games/vassal/default.nix b/pkgs/games/vassal/default.nix
index 1a08fbb4dd0b4..fc32607adac77 100644
--- a/pkgs/games/vassal/default.nix
+++ b/pkgs/games/vassal/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "VASSAL";
-  version = "3.5.8";
+  version = "3.6.1";
 
   src = fetchzip {
     url = "https://github.com/vassalengine/vassal/releases/download/${version}/${pname}-${version}-linux.tar.bz2";
-    sha256 = "sha256-IJ3p7+0fs/2dCbE1BOb2580upR9W/1R2/e3xmkAsJ+M=";
+    sha256 = "sha256-elcSwm7KvDpGVBF7Gs6GFreQPyVwWBxYN0NO1N6JWDM=";
   };
 
   nativeBuildInputs = [ makeWrapper ];
diff --git a/pkgs/games/vintagestory/default.nix b/pkgs/games/vintagestory/default.nix
index d19611a08ffeb..5a4e8fe852c60 100644
--- a/pkgs/games/vintagestory/default.nix
+++ b/pkgs/games/vintagestory/default.nix
@@ -17,11 +17,11 @@
 
 stdenv.mkDerivation rec {
   pname = "vintagestory";
-  version = "1.15.10";
+  version = "1.16.0";
 
   src = fetchurl {
     url = "https://cdn.vintagestory.at/gamefiles/stable/vs_archive_${version}.tar.gz";
-    sha256 = "sha256-aT6vndo/SSAqd4omyW4qWvGetkqEpgvapqaqDBrbTmo=";
+    sha256 = "sha256-1lAcE+RwK16xPTGxGCz2Pdq6GhmXFwy60CSZyq3hgnM=";
   };
 
   nativeBuildInputs = [ makeWrapper copyDesktopItems ];
diff --git a/pkgs/games/xconq/default.nix b/pkgs/games/xconq/default.nix
index 8f4366fbcb87d..10a959a676b49 100644
--- a/pkgs/games/xconq/default.nix
+++ b/pkgs/games/xconq/default.nix
@@ -2,12 +2,11 @@
 , libXext, fontconfig, makeWrapper }:
 
 stdenv.mkDerivation rec {
-  name = "${baseName}-${version}";
-  baseName = "xconq";
+  pname = "xconq";
   version = "7.5.0-0pre.0.20050612";
 
   src = fetchurl {
-    url = "mirror://sourceforge/project/${baseName}/${baseName}/${name}/${name}.tar.gz";
+    url = "mirror://sourceforge/project/xconq/xconq/xconq-${version}/xconq-${version}.tar.gz";
     sha256 = "1za78yx57mgwcmmi33wx3533yz1x093dnqis8q2qmqivxav51lca";
   };