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/aaaaxy/default.nix6
-rw-r--r--pkgs/games/anki/Cargo.lock1496
-rw-r--r--pkgs/games/anki/default.nix78
-rw-r--r--pkgs/games/anki/patches/skip-formatting-python-code.patch (renamed from pkgs/games/anki/patches/0001-Skip-formatting-python-code.patch)0
-rw-r--r--pkgs/games/atlauncher/default.nix53
-rw-r--r--pkgs/games/ball-and-paddle/default.nix45
-rw-r--r--pkgs/games/ball-and-paddle/getenv-decl.patch13
-rw-r--r--pkgs/games/blightmud/default.nix7
-rw-r--r--pkgs/games/boohu/default.nix19
-rw-r--r--pkgs/games/boohu/deps.nix20
-rw-r--r--pkgs/games/brutalmaze/default.nix6
-rw-r--r--pkgs/games/chessx/default.nix47
-rw-r--r--pkgs/games/chiaki4deck/default.nix6
-rw-r--r--pkgs/games/clonehero/default.nix2
-rw-r--r--pkgs/games/cockatrice/default.nix4
-rw-r--r--pkgs/games/ddnet/default.nix6
-rw-r--r--pkgs/games/doom-ports/doomretro/default.nix4
-rw-r--r--pkgs/games/doom-ports/gzdoom/default.nix6
-rwxr-xr-xpkgs/games/dwarf-fortress/update.sh2
-rw-r--r--pkgs/games/eduke32/default.nix34
-rw-r--r--pkgs/games/empty-epsilon/0001-bundle-system-glm-in-seriousproton.patch34
-rw-r--r--pkgs/games/empty-epsilon/default.nix70
-rw-r--r--pkgs/games/etlegacy/default.nix1
-rw-r--r--pkgs/games/factorio/versions.json48
-rw-r--r--pkgs/games/fallout-ce/build.nix77
-rw-r--r--pkgs/games/fallout-ce/fallout-ce.nix20
-rw-r--r--pkgs/games/fallout-ce/fallout2-ce.nix23
-rw-r--r--pkgs/games/fheroes2/default.nix4
-rw-r--r--pkgs/games/freecell-solver/default.nix44
-rw-r--r--pkgs/games/gogdl/default.nix11
-rw-r--r--pkgs/games/gotypist/default.nix2
-rw-r--r--pkgs/games/grapejuice/default.nix4
-rw-r--r--pkgs/games/harmonist/default.nix2
-rw-r--r--pkgs/games/heroic/default.nix10
-rw-r--r--pkgs/games/heroic/fhsenv.nix10
-rw-r--r--pkgs/games/hmcl/default.nix2
-rw-r--r--pkgs/games/itch/butler.nix2
-rw-r--r--pkgs/games/klavaro/default.nix6
-rw-r--r--pkgs/games/klavaro/icons.patch146
-rw-r--r--pkgs/games/klavaro/trans_lang_get_similar.patch71
-rw-r--r--pkgs/games/ldmud/default.nix4
-rw-r--r--pkgs/games/lgames/lbreakouthd/default.nix4
-rw-r--r--pkgs/games/lgames/lpairs2/default.nix4
-rw-r--r--pkgs/games/lgames/ltris/default.nix4
-rw-r--r--pkgs/games/lunar-client/default.nix51
-rw-r--r--pkgs/games/lzwolf/default.nix1
-rw-r--r--pkgs/games/mindustry/default.nix8
-rw-r--r--pkgs/games/minesweep-rs/default.nix6
-rw-r--r--pkgs/games/nanosaur/default.nix2
-rw-r--r--pkgs/games/nanosaur2/default.nix2
-rw-r--r--pkgs/games/openmw/default.nix103
-rw-r--r--pkgs/games/openmw/tes3mp.nix13
-rw-r--r--pkgs/games/openttd/jgrpp.nix4
-rw-r--r--pkgs/games/osu-lazer/bin.nix10
-rw-r--r--pkgs/games/otto-matic/default.nix2
-rw-r--r--pkgs/games/papermc/default.nix64
-rw-r--r--pkgs/games/path-of-building/default.nix4
-rw-r--r--pkgs/games/performous/default.nix22
-rw-r--r--pkgs/games/performous/performous-cmake.patch36
-rw-r--r--pkgs/games/prismlauncher/0001-launcher-translations-explicitly-convert-QVector-ite.patch36
-rw-r--r--pkgs/games/prismlauncher/default.nix5
-rw-r--r--pkgs/games/prismlauncher/wrapper.nix6
-rw-r--r--pkgs/games/quakespasm/default.nix4
-rw-r--r--pkgs/games/r2modman/default.nix9
-rw-r--r--pkgs/games/r2modman/steam-launch-fix.patch21
-rw-r--r--pkgs/games/robotfindskitten/default.nix30
-rw-r--r--pkgs/games/sfrotz/default.nix4
-rw-r--r--pkgs/games/sgt-puzzles/default.nix19
-rw-r--r--pkgs/games/space-station-14-launcher/space-station-14-launcher.nix6
-rw-r--r--pkgs/games/srb2/cmake.patch56
-rw-r--r--pkgs/games/srb2/default.nix11
-rw-r--r--pkgs/games/srb2/thirdparty.patch12
-rw-r--r--pkgs/games/steam/fhsenv.nix4
-rw-r--r--pkgs/games/stockfish/default.nix8
-rw-r--r--pkgs/games/the-legend-of-edgar/default.nix75
-rw-r--r--pkgs/games/theforceengine/default.nix8
-rw-r--r--pkgs/games/uchess/default.nix2
-rw-r--r--pkgs/games/ultrastardx/default.nix9
-rw-r--r--pkgs/games/unciv/default.nix4
-rw-r--r--pkgs/games/vassal/default.nix4
-rw-r--r--pkgs/games/vcmi/default.nix6
-rw-r--r--pkgs/games/vintagestory/default.nix4
-rw-r--r--pkgs/games/wipeout-rewrite/default.nix71
-rw-r--r--pkgs/games/worldofgoo/default.nix2
-rw-r--r--pkgs/games/xivlauncher/default.nix4
-rw-r--r--pkgs/games/xivlauncher/deps.nix3
-rw-r--r--pkgs/games/xmage/default.nix24
87 files changed, 1534 insertions, 1698 deletions
diff --git a/pkgs/games/aaaaxy/default.nix b/pkgs/games/aaaaxy/default.nix
index 64f9de8c92b8f..c2fcc8a646c45 100644
--- a/pkgs/games/aaaaxy/default.nix
+++ b/pkgs/games/aaaaxy/default.nix
@@ -19,17 +19,17 @@
 
 buildGoModule rec {
   pname = "aaaaxy";
-  version = "1.4.42";
+  version = "1.4.50";
 
   src = fetchFromGitHub {
     owner = "divVerent";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-GD7SgxGZRivVbgrzAe7U0EgkTmrXFvSGzzZUOE7CwbY=";
+    hash = "sha256-J4SCmIwGlVD8MHs13NO3JFKfH1rvh2dgVV0/8BX9IcY=";
     fetchSubmodules = true;
   };
 
-  vendorHash = "sha256-1w+/tmF73hN5y5vj++JCX+T5RQ/PF747wmAbN9i7Bgs=";
+  vendorHash = "sha256-dugSK/5mowBfRqnzI3sZqCm69E0WtX2Tydh6Q06+vLU=";
 
   buildInputs = [
     alsa-lib
diff --git a/pkgs/games/anki/Cargo.lock b/pkgs/games/anki/Cargo.lock
index 2bc1a892b2a08..4c7b3ed815634 100644
--- a/pkgs/games/anki/Cargo.lock
+++ b/pkgs/games/anki/Cargo.lock
@@ -4,9 +4,9 @@ version = 3
 
 [[package]]
 name = "addr2line"
-version = "0.19.0"
+version = "0.20.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
+checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3"
 dependencies = [
  "gimli",
 ]
@@ -18,38 +18,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
 
 [[package]]
-name = "aes"
-version = "0.7.5"
+name = "ahash"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
 dependencies = [
  "cfg-if",
- "cipher 0.3.0",
- "cpufeatures",
- "opaque-debug",
+ "once_cell",
+ "version_check",
 ]
 
 [[package]]
-name = "ahash"
-version = "0.7.6"
+name = "aho-corasick"
+version = "0.7.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
+checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
 dependencies = [
- "getrandom 0.2.8",
- "once_cell",
- "version_check",
+ "memchr",
 ]
 
 [[package]]
 name = "aho-corasick"
-version = "0.7.20"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
+checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
+name = "allocator-api2"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56fc6cf8dc8c4158eed8649f9b8b0ea1518eb62b544fe9490d66fa0b349eafe9"
+
+[[package]]
 name = "ammonia"
 version = "3.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -63,6 +66,12 @@ dependencies = [
 ]
 
 [[package]]
+name = "android-tzdata"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
+
+[[package]]
 name = "android_system_properties"
 version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -83,6 +92,10 @@ version = "0.0.0"
 dependencies = [
  "ammonia",
  "anki_i18n",
+ "anki_io",
+ "anki_proto",
+ "anki_proto_gen",
+ "anyhow",
  "async-compression",
  "async-stream",
  "async-trait",
@@ -95,8 +108,10 @@ dependencies = [
  "convert_case",
  "criterion",
  "csv",
+ "data-encoding",
  "difflib",
- "env_logger",
+ "dirs",
+ "envy",
  "flate2",
  "fluent",
  "fluent-bundle",
@@ -106,18 +121,20 @@ dependencies = [
  "htmlescape",
  "hyper",
  "id_tree",
- "itertools",
+ "inflections",
+ "itertools 0.11.0",
  "lazy_static",
  "nom",
- "num-integer",
  "num_cpus",
  "num_enum",
  "once_cell",
  "percent-encoding-iri",
+ "phf 0.11.2",
  "pin-project",
+ "prettyplease 0.2.9",
  "prost",
- "prost-build",
- "pulldown-cmark 0.9.2",
+ "prost-reflect",
+ "pulldown-cmark 0.9.3",
  "rand 0.8.5",
  "regex",
  "reqwest",
@@ -125,13 +142,13 @@ dependencies = [
  "scopeguard",
  "serde",
  "serde-aux",
- "serde_derive",
  "serde_json",
  "serde_repr",
  "serde_tuple",
  "sha1",
  "snafu",
  "strum",
+ "syn 2.0.22",
  "tempfile",
  "tokio",
  "tokio-util",
@@ -143,81 +160,136 @@ dependencies = [
  "unicase",
  "unicode-normalization",
  "utime",
- "which",
  "windows",
  "wiremock",
- "workspace-hack",
  "zip",
- "zstd 0.12.3+zstd.1.5.2",
+ "zstd",
+]
+
+[[package]]
+name = "anki-sync-server"
+version = "0.0.0"
+dependencies = [
+ "anki",
 ]
 
 [[package]]
 name = "anki_i18n"
 version = "0.0.0"
 dependencies = [
+ "anki_io",
+ "anyhow",
  "fluent",
  "fluent-bundle",
  "fluent-syntax",
  "inflections",
  "intl-memoizer",
+ "itertools 0.11.0",
  "num-format",
- "phf 0.11.1",
+ "phf 0.11.2",
  "serde",
  "serde_json",
  "unic-langid",
- "workspace-hack",
 ]
 
 [[package]]
-name = "anki_i18n_helpers"
+name = "anki_io"
 version = "0.0.0"
 dependencies = [
- "fluent-syntax",
- "lazy_static",
+ "camino",
+ "snafu",
+ "tempfile",
+]
+
+[[package]]
+name = "anki_process"
+version = "0.0.0"
+dependencies = [
+ "itertools 0.11.0",
+ "snafu",
+]
+
+[[package]]
+name = "anki_proto"
+version = "0.0.0"
+dependencies = [
+ "anki_io",
+ "anki_proto_gen",
+ "anyhow",
+ "inflections",
+ "itertools 0.11.0",
+ "prost",
+ "prost-build",
+ "prost-reflect",
+ "prost-types",
+ "serde",
+ "snafu",
+ "strum",
+]
+
+[[package]]
+name = "anki_proto_gen"
+version = "0.0.0"
+dependencies = [
+ "anki_io",
+ "anyhow",
+ "camino",
+ "inflections",
+ "itertools 0.11.0",
+ "once_cell",
+ "prost-reflect",
+ "prost-types",
  "regex",
- "serde_json",
  "walkdir",
- "workspace-hack",
 ]
 
 [[package]]
 name = "anstream"
-version = "0.2.6"
+version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f"
+checksum = "0ca84f3628370c59db74ee214b3263d58f9aadd9b4fe7e711fd87dc452b7f163"
 dependencies = [
  "anstyle",
  "anstyle-parse",
+ "anstyle-query",
  "anstyle-wincon",
- "concolor-override",
- "concolor-query",
+ "colorchoice",
  "is-terminal",
  "utf8parse",
 ]
 
 [[package]]
 name = "anstyle"
-version = "0.3.5"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2"
+checksum = "3a30da5c5f2d5e72842e00bcb57657162cdabef0931f40e2deb9b4140440cecd"
 
 [[package]]
 name = "anstyle-parse"
-version = "0.1.1"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116"
+checksum = "938874ff5980b03a87c5524b3ae5b59cf99b1d6bc836848df7bc5ada9643c333"
 dependencies = [
  "utf8parse",
 ]
 
 [[package]]
+name = "anstyle-query"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+dependencies = [
+ "windows-sys 0.48.0",
+]
+
+[[package]]
 name = "anstyle-wincon"
-version = "0.2.0"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa"
+checksum = "180abfa45703aebe0093f79badacc01b8fd4ea2e35118747e5811127f926e188"
 dependencies = [
  "anstyle",
- "windows-sys 0.45.0",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -239,22 +311,6 @@ dependencies = [
 ]
 
 [[package]]
-name = "archives"
-version = "0.0.0"
-dependencies = [
- "camino",
- "flate2",
- "reqwest",
- "sha2",
- "tar",
- "tokio",
- "workspace-hack",
- "xz2",
- "zip",
- "zstd 0.12.3+zstd.1.5.2",
-]
-
-[[package]]
 name = "arrayref"
 version = "0.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -262,9 +318,9 @@ checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
 
 [[package]]
 name = "arrayvec"
-version = "0.7.2"
+version = "0.7.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
+checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
 
 [[package]]
 name = "assert-json-diff"
@@ -289,23 +345,23 @@ dependencies = [
 
 [[package]]
 name = "async-compression"
-version = "0.3.15"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a"
+checksum = "5b0122885821398cc923ece939e24d1056a2384ee719432397fa9db87230ff11"
 dependencies = [
  "futures-core",
  "memchr",
  "pin-project-lite",
  "tokio",
- "zstd 0.11.2+zstd.1.5.2",
- "zstd-safe 5.0.2+zstd.1.5.2",
+ "zstd",
+ "zstd-safe",
 ]
 
 [[package]]
 name = "async-stream"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e"
+checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
 dependencies = [
  "async-stream-impl",
  "futures-core",
@@ -314,13 +370,13 @@ dependencies = [
 
 [[package]]
 name = "async-stream-impl"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965"
+checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.22",
 ]
 
 [[package]]
@@ -331,18 +387,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.12",
-]
-
-[[package]]
-name = "atty"
-version = "0.2.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-dependencies = [
- "hermit-abi 0.1.19",
- "libc",
- "winapi",
+ "syn 2.0.22",
 ]
 
 [[package]]
@@ -353,9 +398,9 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
 
 [[package]]
 name = "axum"
-version = "0.6.12"
+version = "0.6.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349f8ccfd9221ee7d1f3d4b33e1f8319b3a81ed8f61f2ea40b37b859794b4491"
+checksum = "f8175979259124331c1d7bf6586ee7e0da434155e4b2d48ec2c8386281d8df39"
 dependencies = [
  "async-trait",
  "axum-core",
@@ -388,19 +433,20 @@ dependencies = [
 
 [[package]]
 name = "axum-client-ip"
-version = "0.3.1"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ddfb5a3ddd6367075d50629546fb46710584016ae7704cd03b6d41cb5be82e5a"
+checksum = "df8e81eacc93f36480825da5f46a33b5fb2246ed024eacc9e8933425b80c5807"
 dependencies = [
  "axum",
  "forwarded-header-value",
+ "serde",
 ]
 
 [[package]]
 name = "axum-core"
-version = "0.3.3"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2f958c80c248b34b9a877a643811be8dbca03ca5ba827f2b63baf3a81e5fc4e"
+checksum = "759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c"
 dependencies = [
  "async-trait",
  "bytes",
@@ -422,14 +468,14 @@ dependencies = [
  "heck",
  "proc-macro2",
  "quote",
- "syn 2.0.12",
+ "syn 2.0.22",
 ]
 
 [[package]]
 name = "backtrace"
-version = "0.3.67"
+version = "0.3.68"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca"
+checksum = "4319208da049c43661739c5fade2ba182f09d1dc2299b32298d3a31692b17e12"
 dependencies = [
  "addr2line",
  "cc",
@@ -448,15 +494,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
 
 [[package]]
 name = "base64"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a"
-
-[[package]]
-name = "base64ct"
-version = "1.6.0"
+version = "0.21.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
+checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d"
 
 [[package]]
 name = "bitflags"
@@ -466,21 +506,21 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 
 [[package]]
 name = "bitflags"
-version = "2.0.2"
+version = "2.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1"
+checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
 
 [[package]]
 name = "blake3"
-version = "1.3.3"
+version = "1.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42ae2468a89544a466886840aa467a25b766499f4f04bf7d9fcd10ecee9fccef"
+checksum = "729b71f35bd3fa1a4c86b85d32c8b9069ea7fe14f7a53cfabb65f62d4265b888"
 dependencies = [
  "arrayref",
  "arrayvec",
  "cc",
  "cfg-if",
- "constant_time_eq 0.2.5",
+ "constant_time_eq",
  "digest",
 ]
 
@@ -495,9 +535,9 @@ dependencies = [
 
 [[package]]
 name = "block-padding"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
 dependencies = [
  "generic-array",
 ]
@@ -510,27 +550,27 @@ checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
 dependencies = [
  "lazy_static",
  "memchr",
- "regex-automata",
+ "regex-automata 0.1.10",
  "serde",
 ]
 
 [[package]]
 name = "bstr"
-version = "1.4.0"
+version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09"
+checksum = "a246e68bb43f6cd9db24bea052a53e40405417c5fb372e3d1a8a7f770a564ef5"
 dependencies = [
  "memchr",
  "once_cell",
- "regex-automata",
+ "regex-automata 0.1.10",
  "serde",
 ]
 
 [[package]]
 name = "bumpalo"
-version = "3.12.0"
+version = "3.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
+checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
 
 [[package]]
 name = "byteorder"
@@ -545,27 +585,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
 
 [[package]]
-name = "bzip2"
-version = "0.4.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8"
-dependencies = [
- "bzip2-sys",
- "libc",
-]
-
-[[package]]
-name = "bzip2-sys"
-version = "0.1.11+1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
-dependencies = [
- "cc",
- "libc",
- "pkg-config",
-]
-
-[[package]]
 name = "camino"
 version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -583,7 +602,7 @@ version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
 dependencies = [
- "cipher 0.4.4",
+ "cipher",
 ]
 
 [[package]]
@@ -603,21 +622,21 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
 name = "chrono"
-version = "0.4.24"
+version = "0.4.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b"
+checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
 dependencies = [
+ "android-tzdata",
  "iana-time-zone",
- "num-integer",
  "num-traits",
  "winapi",
 ]
 
 [[package]]
 name = "ciborium"
-version = "0.2.0"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f"
+checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926"
 dependencies = [
  "ciborium-io",
  "ciborium-ll",
@@ -626,15 +645,15 @@ dependencies = [
 
 [[package]]
 name = "ciborium-io"
-version = "0.2.0"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369"
+checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656"
 
 [[package]]
 name = "ciborium-ll"
-version = "0.2.0"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b"
+checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b"
 dependencies = [
  "ciborium-io",
  "half",
@@ -642,15 +661,6 @@ dependencies = [
 
 [[package]]
 name = "cipher"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
-dependencies = [
- "generic-array",
-]
-
-[[package]]
-name = "cipher"
 version = "0.4.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
@@ -661,21 +671,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "3.2.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5"
-dependencies = [
- "bitflags 1.3.2",
- "clap_lex 0.2.4",
- "indexmap",
- "textwrap",
-]
-
-[[package]]
-name = "clap"
-version = "4.2.1"
+version = "4.3.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3"
+checksum = "384e169cc618c613d5e3ca6404dda77a8685a63e08660dcc64abaf7da7cb0c7a"
 dependencies = [
  "clap_builder",
  "clap_derive",
@@ -684,14 +682,13 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.2.1"
+version = "4.3.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f"
+checksum = "ef137bbe35aab78bdb468ccfba75a5f4d8321ae011d34063770780545176af2d"
 dependencies = [
  "anstream",
  "anstyle",
- "bitflags 1.3.2",
- "clap_lex 0.4.1",
+ "clap_lex",
  "once_cell",
  "strsim",
  "terminal_size",
@@ -699,39 +696,30 @@ dependencies = [
 
 [[package]]
 name = "clap_complete"
-version = "4.2.0"
+version = "4.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01c22dcfb410883764b29953103d9ef7bb8fe21b3fa1158bc99986c2067294bd"
+checksum = "7f6b5c519bab3ea61843a7923d074b04245624bb84a64a8c150f5deb014e388b"
 dependencies = [
- "clap 4.2.1",
+ "clap",
 ]
 
 [[package]]
 name = "clap_derive"
-version = "4.2.0"
+version = "4.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4"
+checksum = "b8cd2b2a819ad6eec39e8f1d6b53001af1e5469f8c177579cdaeb313115b825f"
 dependencies = [
  "heck",
  "proc-macro2",
  "quote",
- "syn 2.0.12",
-]
-
-[[package]]
-name = "clap_lex"
-version = "0.2.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
-dependencies = [
- "os_str_bytes",
+ "syn 2.0.22",
 ]
 
 [[package]]
 name = "clap_lex"
-version = "0.4.1"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1"
+checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
 
 [[package]]
 name = "coarsetime"
@@ -767,25 +755,16 @@ dependencies = [
 ]
 
 [[package]]
-name = "concolor-override"
+name = "colorchoice"
 version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f"
-
-[[package]]
-name = "concolor-query"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf"
-dependencies = [
- "windows-sys 0.45.0",
-]
+checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
 
 [[package]]
 name = "concurrent-queue"
-version = "2.1.0"
+version = "2.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c278839b831783b70278b14df4d45e1beb1aad306c07bb796637de9a0e323e8e"
+checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c"
 dependencies = [
  "crossbeam-utils",
 ]
@@ -794,21 +773,16 @@ dependencies = [
 name = "configure"
 version = "0.0.0"
 dependencies = [
+ "anyhow",
+ "itertools 0.11.0",
  "ninja_gen",
- "workspace-hack",
 ]
 
 [[package]]
 name = "constant_time_eq"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
-
-[[package]]
-name = "constant_time_eq"
-version = "0.2.5"
+version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b"
+checksum = "21a53c0a4d288377e7415b53dcfc3c04da5cdc2cc95c8d5ac178b58f0b861ad6"
 
 [[package]]
 name = "convert_case"
@@ -831,15 +805,15 @@ dependencies = [
 
 [[package]]
 name = "core-foundation-sys"
-version = "0.8.3"
+version = "0.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
+checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.6"
+version = "0.2.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181"
+checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c"
 dependencies = [
  "libc",
 ]
@@ -855,19 +829,19 @@ dependencies = [
 
 [[package]]
 name = "criterion"
-version = "0.4.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb"
+checksum = "f2b12d017a929603d80db1831cd3a24082f8137ce19c69e6447f54f5fc8d692f"
 dependencies = [
  "anes",
- "atty",
  "cast",
  "ciborium",
- "clap 3.2.23",
+ "clap",
  "criterion-plot",
- "itertools",
- "lazy_static",
+ "is-terminal",
+ "itertools 0.10.5",
  "num-traits",
+ "once_cell",
  "oorandom",
  "plotters",
  "rayon",
@@ -886,7 +860,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1"
 dependencies = [
  "cast",
- "itertools",
+ "itertools 0.10.5",
 ]
 
 [[package]]
@@ -912,9 +886,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.9.14"
+version = "0.9.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
+checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
 dependencies = [
  "autocfg",
  "cfg-if",
@@ -925,9 +899,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.15"
+version = "0.8.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
+checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
 dependencies = [
  "cfg-if",
 ]
@@ -963,48 +937,10 @@ dependencies = [
 ]
 
 [[package]]
-name = "cxx"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93"
-dependencies = [
- "cc",
- "cxxbridge-flags",
- "cxxbridge-macro",
- "link-cplusplus",
-]
-
-[[package]]
-name = "cxx-build"
-version = "1.0.94"
+name = "data-encoding"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b"
-dependencies = [
- "cc",
- "codespan-reporting",
- "once_cell",
- "proc-macro2",
- "quote",
- "scratch",
- "syn 2.0.12",
-]
-
-[[package]]
-name = "cxxbridge-flags"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb"
-
-[[package]]
-name = "cxxbridge-macro"
-version = "1.0.94"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.12",
-]
+checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308"
 
 [[package]]
 name = "deadpool"
@@ -1031,7 +967,7 @@ version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ffdd80ce8ce993de27e9f063a444a4d53ce8e8db4c1f00cc03af5ad5a9867a1e"
 dependencies = [
- "cipher 0.4.4",
+ "cipher",
 ]
 
 [[package]]
@@ -1042,9 +978,9 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8"
 
 [[package]]
 name = "digest"
-version = "0.10.6"
+version = "0.10.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
 dependencies = [
  "block-buffer",
  "crypto-common",
@@ -1052,14 +988,35 @@ dependencies = [
 ]
 
 [[package]]
+name = "dirs"
+version = "5.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225"
+dependencies = [
+ "dirs-sys",
+]
+
+[[package]]
+name = "dirs-sys"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
+dependencies = [
+ "libc",
+ "option-ext",
+ "redox_users",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
 name = "displaydoc"
-version = "0.2.3"
+version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886"
+checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.22",
 ]
 
 [[package]]
@@ -1082,9 +1039,9 @@ dependencies = [
 
 [[package]]
 name = "dunce"
-version = "1.0.3"
+version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0bd4b30a6560bbd9b4620f4de34c3f14f60848e58a9b7216801afcb4c7b31c3c"
+checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
 
 [[package]]
 name = "either"
@@ -1127,14 +1084,29 @@ dependencies = [
 ]
 
 [[package]]
+name = "envy"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f47e0157f2cb54f5ae1bd371b30a2ae4311e1c028f575cd4e81de7353215965"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "equivalent"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1"
+
+[[package]]
 name = "errno"
-version = "0.3.0"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
 dependencies = [
  "errno-dragonfly",
  "libc",
- "windows-sys 0.45.0",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -1176,14 +1148,14 @@ dependencies = [
 
 [[package]]
 name = "filetime"
-version = "0.2.20"
+version = "0.2.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412"
+checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
 dependencies = [
  "cfg-if",
  "libc",
  "redox_syscall 0.2.16",
- "windows-sys 0.45.0",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -1205,9 +1177,9 @@ checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80"
 
 [[package]]
 name = "flate2"
-version = "1.0.25"
+version = "1.0.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841"
+checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743"
 dependencies = [
  "crc32fast",
  "miniz_oxide",
@@ -1280,9 +1252,9 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
 
 [[package]]
 name = "form_urlencoded"
-version = "1.1.0"
+version = "1.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8"
+checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
 dependencies = [
  "percent-encoding",
 ]
@@ -1320,9 +1292,18 @@ dependencies = [
 name = "ftl"
 version = "0.0.0"
 dependencies = [
+ "anki_io",
+ "anki_process",
+ "anyhow",
  "camino",
+ "clap",
+ "fluent-syntax",
+ "itertools 0.11.0",
+ "lazy_static",
+ "regex",
+ "serde_json",
  "snafu",
- "workspace-hack",
+ "walkdir",
 ]
 
 [[package]]
@@ -1385,9 +1366,9 @@ checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
 
 [[package]]
 name = "futures-lite"
-version = "1.12.0"
+version = "1.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
+checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
 dependencies = [
  "fastrand",
  "futures-core",
@@ -1406,7 +1387,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.12",
+ "syn 2.0.22",
 ]
 
 [[package]]
@@ -1477,9 +1458,9 @@ dependencies = [
 
 [[package]]
 name = "getrandom"
-version = "0.2.8"
+version = "0.2.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
 dependencies = [
  "cfg-if",
  "libc",
@@ -1488,18 +1469,9 @@ dependencies = [
 
 [[package]]
 name = "gimli"
-version = "0.27.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4"
-
-[[package]]
-name = "gitignore"
-version = "1.0.7"
+version = "0.27.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "78aa90e4620c1498ac434c06ba6e521b525794bbdacf085d490cc794b4a2f9a4"
-dependencies = [
- "glob",
-]
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
 
 [[package]]
 name = "glob"
@@ -1513,8 +1485,8 @@ version = "0.4.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "029d74589adefde59de1a0c4f4732695c32805624aec7b68d91503d4dba79afc"
 dependencies = [
- "aho-corasick",
- "bstr 1.4.0",
+ "aho-corasick 0.7.20",
+ "bstr 1.5.0",
  "fnv",
  "log",
  "regex",
@@ -1522,9 +1494,9 @@ dependencies = [
 
 [[package]]
 name = "h2"
-version = "0.3.18"
+version = "0.3.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "17f8a914c2987b688368b5138aa05321db91f4090cf26118185672ad588bce21"
+checksum = "97ec8491ebaf99c8eaa73058b045fe58073cd6be7f596ac993ced0b0a0c01049"
 dependencies = [
  "bytes",
  "fnv",
@@ -1532,7 +1504,7 @@ dependencies = [
  "futures-sink",
  "futures-util",
  "http",
- "indexmap",
+ "indexmap 1.9.3",
  "slab",
  "tokio",
  "tokio-util",
@@ -1547,9 +1519,9 @@ checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7"
 
 [[package]]
 name = "handlebars"
-version = "4.3.6"
+version = "4.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "035ef95d03713f2c347a72547b7cd38cbc9af7cd51e6099fb62d586d4a6dee3a"
+checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d"
 dependencies = [
  "log",
  "pest",
@@ -1564,17 +1536,24 @@ name = "hashbrown"
 version = "0.12.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
 dependencies = [
  "ahash",
+ "allocator-api2",
 ]
 
 [[package]]
 name = "hashlink"
-version = "0.8.1"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "69fe1fcf8b4278d860ad0548329f892a3631fb63f82574df68275f34cdbe0ffa"
+checksum = "312f66718a2d7789ffef4f4b7b213138ed9f1eb3aa1d0d82fc99f88fb3ffd26f"
 dependencies = [
- "hashbrown",
+ "hashbrown 0.14.0",
 ]
 
 [[package]]
@@ -1610,27 +1589,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 
 [[package]]
 name = "hermit-abi"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.3.1"
+version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
 
 [[package]]
 name = "hex"
@@ -1736,9 +1697,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
 
 [[package]]
 name = "hyper"
-version = "0.14.25"
+version = "0.14.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899"
+checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
 dependencies = [
  "bytes",
  "futures-channel",
@@ -1760,9 +1721,9 @@ dependencies = [
 
 [[package]]
 name = "hyper-rustls"
-version = "0.23.2"
+version = "0.24.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
+checksum = "0646026eb1b3eea4cd9ba47912ea5ce9cc07713d105b1a14698f4e6433d348b7"
 dependencies = [
  "http",
  "hyper",
@@ -1786,9 +1747,9 @@ dependencies = [
 
 [[package]]
 name = "iana-time-zone"
-version = "0.1.56"
+version = "0.1.57"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c"
+checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
 dependencies = [
  "android_system_properties",
  "core-foundation-sys",
@@ -1800,12 +1761,11 @@ dependencies = [
 
 [[package]]
 name = "iana-time-zone-haiku"
-version = "0.1.1"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
+checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
 dependencies = [
- "cxx",
- "cxx-build",
+ "cc",
 ]
 
 [[package]]
@@ -1819,22 +1779,49 @@ dependencies = [
 
 [[package]]
 name = "idna"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6"
+checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
 dependencies = [
  "unicode-bidi",
  "unicode-normalization",
 ]
 
 [[package]]
+name = "ignore"
+version = "0.4.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+dependencies = [
+ "globset",
+ "lazy_static",
+ "log",
+ "memchr",
+ "regex",
+ "same-file",
+ "thread_local",
+ "walkdir",
+ "winapi-util",
+]
+
+[[package]]
 name = "indexmap"
 version = "1.9.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
 dependencies = [
  "autocfg",
- "hashbrown",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "indexmap"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d"
+dependencies = [
+ "equivalent",
+ "hashbrown 0.14.0",
 ]
 
 [[package]]
@@ -1915,31 +1902,30 @@ dependencies = [
 
 [[package]]
 name = "io-lifetimes"
-version = "1.0.9"
+version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
 dependencies = [
- "hermit-abi 0.3.1",
+ "hermit-abi",
  "libc",
- "windows-sys 0.45.0",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "ipnet"
-version = "2.7.2"
+version = "2.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f"
+checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
 
 [[package]]
 name = "is-terminal"
-version = "0.4.6"
+version = "0.4.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8"
+checksum = "24fddda5af7e54bf7da53067d6e802dbcc381d0a8eef629df528e3ebf68755cb"
 dependencies = [
- "hermit-abi 0.3.1",
- "io-lifetimes",
- "rustix",
- "windows-sys 0.45.0",
+ "hermit-abi",
+ "rustix 0.38.1",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -1952,6 +1938,15 @@ dependencies = [
 ]
 
 [[package]]
+name = "itertools"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57"
+dependencies = [
+ "either",
+]
+
+[[package]]
 name = "itoa"
 version = "1.0.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1968,9 +1963,9 @@ dependencies = [
 
 [[package]]
 name = "js-sys"
-version = "0.3.61"
+version = "0.3.64"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730"
+checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
 dependencies = [
  "wasm-bindgen",
 ]
@@ -2013,9 +2008,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
 [[package]]
 name = "libc"
-version = "0.2.140"
+version = "0.2.147"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
 
 [[package]]
 name = "libsqlite3-sys"
@@ -2038,15 +2033,6 @@ dependencies = [
 ]
 
 [[package]]
-name = "link-cplusplus"
-version = "1.0.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5"
-dependencies = [
- "cc",
-]
-
-[[package]]
 name = "linkcheck"
 version = "0.4.1"
 source = "git+https://github.com/ankitects/linkcheck.git?rev=184b2ca50ed39ca43da13f0b830a463861adb9ca#184b2ca50ed39ca43da13f0b830a463861adb9ca"
@@ -2076,14 +2062,13 @@ version = "0.0.0"
 dependencies = [
  "anki",
  "futures",
- "itertools",
+ "itertools 0.11.0",
  "lazy_static",
  "linkcheck",
  "regex",
  "reqwest",
  "strum",
  "tokio",
- "workspace-hack",
 ]
 
 [[package]]
@@ -2097,15 +2082,21 @@ dependencies = [
 
 [[package]]
 name = "linux-raw-sys"
-version = "0.3.1"
+version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
 
 [[package]]
 name = "lock_api"
-version = "0.4.9"
+version = "0.4.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
 dependencies = [
  "autocfg",
  "scopeguard",
@@ -2113,12 +2104,9 @@ dependencies = [
 
 [[package]]
 name = "log"
-version = "0.4.17"
+version = "0.4.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
-dependencies = [
- "cfg-if",
-]
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
 
 [[package]]
 name = "lzma-sys"
@@ -2144,15 +2132,13 @@ dependencies = [
  "anyhow",
  "apple-bundles",
  "camino",
- "clap 4.2.1",
+ "clap",
  "glob",
- "lazy_static",
  "plist",
  "serde",
  "serde_json",
  "simple-file-manifest",
  "walkdir",
- "workspace-hack",
 ]
 
 [[package]]
@@ -2161,11 +2147,9 @@ version = "0.0.0"
 dependencies = [
  "anyhow",
  "camino",
- "clap 4.2.1",
- "glob",
+ "clap",
  "tugger-windows-codesign",
  "walkdir",
- "workspace-hack",
 ]
 
 [[package]]
@@ -2206,7 +2190,7 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
 dependencies = [
- "regex-automata",
+ "regex-automata 0.1.10",
 ]
 
 [[package]]
@@ -2223,27 +2207,27 @@ checksum = "b87248edafb776e59e6ee64a79086f65890d3510f2c656c000bf2a7e8a0aea40"
 
 [[package]]
 name = "mdbook"
-version = "0.4.28"
+version = "0.4.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "764dcbfc2e5f868bc1b566eb179dff1a06458fd0cff846aae2579392dd3f01a0"
+checksum = "7b67ee4a744f36e6280792016c17e69921b51df357181d1eb17d620fcc3609f3"
 dependencies = [
  "ammonia",
  "anyhow",
  "chrono",
- "clap 4.2.1",
+ "clap",
  "clap_complete",
  "elasticlunr-rs",
  "env_logger",
  "futures-util",
- "gitignore",
  "handlebars",
+ "ignore",
  "log",
  "memchr",
  "notify",
  "notify-debouncer-mini",
  "once_cell",
  "opener",
- "pulldown-cmark 0.9.2",
+ "pulldown-cmark 0.9.3",
  "regex",
  "serde",
  "serde_json",
@@ -2263,9 +2247,9 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
 
 [[package]]
 name = "memoffset"
-version = "0.8.0"
+version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
+checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
 dependencies = [
  "autocfg",
 ]
@@ -2290,10 +2274,13 @@ dependencies = [
 name = "minilints"
 version = "0.0.0"
 dependencies = [
+ "anki_io",
+ "anki_process",
  "anyhow",
  "camino",
  "once_cell",
  "walkdir",
+ "which",
 ]
 
 [[package]]
@@ -2304,30 +2291,30 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
 
 [[package]]
 name = "miniz_oxide"
-version = "0.6.2"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa"
+checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
 dependencies = [
  "adler",
 ]
 
 [[package]]
 name = "mio"
-version = "0.8.6"
+version = "0.8.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9"
+checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
 dependencies = [
  "libc",
  "log",
  "wasi 0.11.0+wasi-snapshot-preview1",
- "windows-sys 0.45.0",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "multer"
-version = "2.0.4"
+version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ed4198ce7a4cbd2a57af78d28c6fbb57d81ac5f1d6ad79ac6c5587419cbdf22"
+checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2"
 dependencies = [
  "bytes",
  "encoding_rs",
@@ -2375,15 +2362,16 @@ checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
 name = "ninja_gen"
 version = "0.0.0"
 dependencies = [
+ "anki_io",
+ "anyhow",
  "camino",
  "globset",
- "itertools",
+ "itertools 0.11.0",
  "lazy_static",
  "maplit",
  "num_cpus",
  "walkdir",
  "which",
- "workspace-hack",
 ]
 
 [[package]]
@@ -2404,9 +2392,9 @@ checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7"
 
 [[package]]
 name = "notify"
-version = "5.1.0"
+version = "5.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58ea850aa68a06e48fdb069c0ec44d0d64c8dbffa49bf3b6f7f0a901fdea1ba9"
+checksum = "729f63e1ca555a43fe3efa4f3efdf4801c479da85b432242a7b726f353c88486"
 dependencies = [
  "bitflags 1.3.2",
  "crossbeam-channel",
@@ -2417,7 +2405,7 @@ dependencies = [
  "libc",
  "mio",
  "walkdir",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
 ]
 
 [[package]]
@@ -2451,16 +2439,6 @@ dependencies = [
 ]
 
 [[package]]
-name = "num-integer"
-version = "0.1.45"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
-dependencies = [
- "autocfg",
- "num-traits",
-]
-
-[[package]]
 name = "num-traits"
 version = "0.2.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2471,49 +2449,49 @@ dependencies = [
 
 [[package]]
 name = "num_cpus"
-version = "1.15.0"
+version = "1.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
+checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
 dependencies = [
- "hermit-abi 0.2.6",
+ "hermit-abi",
  "libc",
 ]
 
 [[package]]
 name = "num_enum"
-version = "0.5.11"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+checksum = "7a015b430d3c108a207fd776d2e2196aaf8b1cf8cf93253e3a097ff3085076a1"
 dependencies = [
  "num_enum_derive",
 ]
 
 [[package]]
 name = "num_enum_derive"
-version = "0.5.11"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+checksum = "96667db765a921f7b295ffee8b60472b686a51d4f21c2ee4ffdb94c7013b65a6"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.22",
 ]
 
 [[package]]
 name = "object"
-version = "0.30.3"
+version = "0.31.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439"
+checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
 name = "once_cell"
-version = "1.17.1"
+version = "1.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
 
 [[package]]
 name = "oorandom"
@@ -2522,26 +2500,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575"
 
 [[package]]
-name = "opaque-debug"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
-
-[[package]]
 name = "opener"
 version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "293c15678e37254c15bd2f092314abb4e51d7fdde05c2021279c12631b54f005"
 dependencies = [
- "bstr 1.4.0",
+ "bstr 1.5.0",
  "winapi",
 ]
 
 [[package]]
 name = "openssl"
-version = "0.10.48"
+version = "0.10.55"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "518915b97df115dd36109bfa429a48b8f737bd05508cf9588977b599648926d2"
+checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
 dependencies = [
  "bitflags 1.3.2",
  "cfg-if",
@@ -2554,13 +2526,13 @@ dependencies = [
 
 [[package]]
 name = "openssl-macros"
-version = "0.1.0"
+version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
+checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.22",
 ]
 
 [[package]]
@@ -2571,11 +2543,10 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
 
 [[package]]
 name = "openssl-sys"
-version = "0.9.83"
+version = "0.9.90"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "666416d899cf077260dac8698d60a60b435a46d57e82acb1be3d0dad87284e5b"
+checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
 dependencies = [
- "autocfg",
  "cc",
  "libc",
  "pkg-config",
@@ -2583,22 +2554,22 @@ dependencies = [
 ]
 
 [[package]]
+name = "option-ext"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
+
+[[package]]
 name = "os_pipe"
-version = "1.1.3"
+version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a53dbb20faf34b16087a931834cba2d7a73cc74af2b7ef345a4c8324e2409a12"
+checksum = "0ae859aa07428ca9a929b936690f8b12dc5f11dd8c6992a18ca93919f28bc177"
 dependencies = [
  "libc",
- "windows-sys 0.45.0",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
-name = "os_str_bytes"
-version = "6.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267"
-
-[[package]]
 name = "overload"
 version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2611,9 +2582,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d4873306de53fe82e7e484df31e1e947d61514b6ea2ed6cd7b45d63006fd9224"
 dependencies = [
  "cbc",
- "cipher 0.4.4",
+ "cipher",
  "des",
- "getrandom 0.2.8",
+ "getrandom 0.2.10",
  "hmac",
  "lazy_static",
  "rc2",
@@ -2623,9 +2594,9 @@ dependencies = [
 
 [[package]]
 name = "parking"
-version = "2.0.0"
+version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
+checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e"
 
 [[package]]
 name = "parking_lot"
@@ -2639,38 +2610,15 @@ dependencies = [
 
 [[package]]
 name = "parking_lot_core"
-version = "0.9.7"
+version = "0.9.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521"
+checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
 dependencies = [
  "cfg-if",
  "libc",
- "redox_syscall 0.2.16",
+ "redox_syscall 0.3.5",
  "smallvec",
- "windows-sys 0.45.0",
-]
-
-[[package]]
-name = "password-hash"
-version = "0.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700"
-dependencies = [
- "base64ct",
- "rand_core 0.6.4",
- "subtle",
-]
-
-[[package]]
-name = "pbkdf2"
-version = "0.11.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
-dependencies = [
- "digest",
- "hmac",
- "password-hash",
- "sha2",
+ "windows-targets 0.48.1",
 ]
 
 [[package]]
@@ -2684,9 +2632,9 @@ dependencies = [
 
 [[package]]
 name = "percent-encoding"
-version = "2.2.0"
+version = "2.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e"
+checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
 
 [[package]]
 name = "percent-encoding-iri"
@@ -2695,9 +2643,9 @@ source = "git+https://github.com/ankitects/rust-url.git?rev=bb930b8d089f4d30d7d1
 
 [[package]]
 name = "pest"
-version = "2.5.7"
+version = "2.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122"
+checksum = "f73935e4d55e2abf7f130186537b19e7a4abc886a0252380b59248af473a3fc9"
 dependencies = [
  "thiserror",
  "ucd-trie",
@@ -2705,9 +2653,9 @@ dependencies = [
 
 [[package]]
 name = "pest_derive"
-version = "2.5.7"
+version = "2.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be99c4c1d2fc2769b1d00239431d711d08f6efedcecb8b6e30707160aee99c15"
+checksum = "aef623c9bbfa0eedf5a0efba11a5ee83209c326653ca31ff019bec3a95bfff2b"
 dependencies = [
  "pest",
  "pest_generator",
@@ -2715,22 +2663,22 @@ dependencies = [
 
 [[package]]
 name = "pest_generator"
-version = "2.5.7"
+version = "2.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e56094789873daa36164de2e822b3888c6ae4b4f9da555a1103587658c805b1e"
+checksum = "b3e8cba4ec22bada7fc55ffe51e2deb6a0e0db2d0b7ab0b103acc80d2510c190"
 dependencies = [
  "pest",
  "pest_meta",
  "proc-macro2",
  "quote",
- "syn 2.0.12",
+ "syn 2.0.22",
 ]
 
 [[package]]
 name = "pest_meta"
-version = "2.5.7"
+version = "2.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6733073c7cff3d8459fda0e42f13a047870242aed8b509fe98000928975f359e"
+checksum = "a01f71cb40bd8bb94232df14b946909e14660e33fc05db3e50ae2a82d7ea0ca0"
 dependencies = [
  "once_cell",
  "pest",
@@ -2744,7 +2692,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4dd7d28ee937e54fe3080c91faa1c3a46c06de6252988a7f4592ba2310ef22a4"
 dependencies = [
  "fixedbitset",
- "indexmap",
+ "indexmap 1.9.3",
 ]
 
 [[package]]
@@ -2758,12 +2706,12 @@ dependencies = [
 
 [[package]]
 name = "phf"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c"
+checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
 dependencies = [
  "phf_macros",
- "phf_shared 0.11.1",
+ "phf_shared 0.11.2",
 ]
 
 [[package]]
@@ -2788,25 +2736,25 @@ dependencies = [
 
 [[package]]
 name = "phf_generator"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf"
+checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
 dependencies = [
- "phf_shared 0.11.1",
+ "phf_shared 0.11.2",
  "rand 0.8.5",
 ]
 
 [[package]]
 name = "phf_macros"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66"
+checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
 dependencies = [
- "phf_generator 0.11.1",
- "phf_shared 0.11.1",
+ "phf_generator 0.11.2",
+ "phf_shared 0.11.2",
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.22",
 ]
 
 [[package]]
@@ -2820,31 +2768,31 @@ dependencies = [
 
 [[package]]
 name = "phf_shared"
-version = "0.11.1"
+version = "0.11.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676"
+checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
 dependencies = [
  "siphasher",
 ]
 
 [[package]]
 name = "pin-project"
-version = "1.0.12"
+version = "1.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc"
+checksum = "6e138fdd8263907a2b0e1b4e80b7e58c721126479b6e6eedfb1b402acea7b9bd"
 dependencies = [
  "pin-project-internal",
 ]
 
 [[package]]
 name = "pin-project-internal"
-version = "1.0.12"
+version = "1.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
+checksum = "d1fef411b303e3e12d534fb6e7852de82da56edd937d895125821fb7c09436c7"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.22",
 ]
 
 [[package]]
@@ -2861,9 +2809,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
 [[package]]
 name = "pkg-config"
-version = "0.3.26"
+version = "0.3.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
 
 [[package]]
 name = "plist"
@@ -2871,8 +2819,8 @@ version = "1.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9bd9647b268a3d3e14ff09c23201133a62589c658db02bb7388c7246aafe0590"
 dependencies = [
- "base64 0.21.0",
- "indexmap",
+ "base64 0.21.2",
+ "indexmap 1.9.3",
  "line-wrap",
  "quick-xml",
  "serde",
@@ -2881,9 +2829,9 @@ dependencies = [
 
 [[package]]
 name = "plotters"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97"
+checksum = "d2c224ba00d7cadd4d5c660deaf2098e5e80e07846537c51f9cfa4be50c1fd45"
 dependencies = [
  "num-traits",
  "plotters-backend",
@@ -2894,15 +2842,15 @@ dependencies = [
 
 [[package]]
 name = "plotters-backend"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142"
+checksum = "9e76628b4d3a7581389a35d5b6e2139607ad7c75b17aed325f210aa91f4a9609"
 
 [[package]]
 name = "plotters-svg"
-version = "0.3.3"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f"
+checksum = "38f6d39893cca0701371e3c27294f09797214b86f1fb951b89ade8ec04e2abab"
 dependencies = [
  "plotters-backend",
 ]
@@ -2930,6 +2878,16 @@ dependencies = [
 ]
 
 [[package]]
+name = "prettyplease"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9825a04601d60621feed79c4e6b56d65db77cdca55cef43b46b0de1096d1c282"
+dependencies = [
+ "proc-macro2",
+ "syn 2.0.22",
+]
+
+[[package]]
 name = "proc-macro-crate"
 version = "1.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2947,18 +2905,18 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.54"
+version = "1.0.63"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534"
+checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "prost"
-version = "0.11.8"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e48e50df39172a3e7eb17e14642445da64996989bc212b583015435d39a58537"
+checksum = "0b82eaa1d779e9a4bc1c3217db8ffbeabaae1dca241bf70183242128d48681cd"
 dependencies = [
  "bytes",
  "prost-derive",
@@ -2966,18 +2924,18 @@ dependencies = [
 
 [[package]]
 name = "prost-build"
-version = "0.11.8"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c828f93f5ca4826f97fedcbd3f9a536c16b12cff3dbbb4a007f932bbad95b12"
+checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
 dependencies = [
  "bytes",
  "heck",
- "itertools",
+ "itertools 0.10.5",
  "lazy_static",
  "log",
  "multimap",
  "petgraph",
- "prettyplease",
+ "prettyplease 0.1.25",
  "prost",
  "prost-types",
  "regex",
@@ -2988,22 +2946,33 @@ dependencies = [
 
 [[package]]
 name = "prost-derive"
-version = "0.11.8"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ea9b0f8cbe5e15a8a042d030bd96668db28ecb567ec37d691971ff5731d2b1b"
+checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
 dependencies = [
  "anyhow",
- "itertools",
+ "itertools 0.10.5",
  "proc-macro2",
  "quote",
  "syn 1.0.109",
 ]
 
 [[package]]
+name = "prost-reflect"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "000e1e05ebf7b26e1eba298e66fe4eee6eb19c567d0ffb35e0dd34231cdac4c8"
+dependencies = [
+ "once_cell",
+ "prost",
+ "prost-types",
+]
+
+[[package]]
 name = "prost-types"
-version = "0.11.8"
+version = "0.11.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "379119666929a1afd7a043aa6cf96fa67a6dce9af60c88095a4686dbce4c9c88"
+checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13"
 dependencies = [
  "prost",
 ]
@@ -3022,9 +2991,9 @@ dependencies = [
 
 [[package]]
 name = "pulldown-cmark"
-version = "0.9.2"
+version = "0.9.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d9cc634bc78768157b5cbfe988ffcd1dcba95cd2b2f03a88316c08c6d00ed63"
+checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998"
 dependencies = [
  "bitflags 1.3.2",
  "getopts",
@@ -3034,9 +3003,9 @@ dependencies = [
 
 [[package]]
 name = "pyo3"
-version = "0.18.2"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cfb848f80438f926a9ebddf0a539ed6065434fd7aae03a89312a9821f81b8501"
+checksum = "cffef52f74ec3b1a1baf295d9b8fcc3070327aefc39a6d00656b13c1d0b8885c"
 dependencies = [
  "cfg-if",
  "indoc",
@@ -3051,9 +3020,9 @@ dependencies = [
 
 [[package]]
 name = "pyo3-build-config"
-version = "0.18.2"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98a42e7f42e917ce6664c832d5eee481ad514c98250c49e0b03b20593e2c7ed0"
+checksum = "713eccf888fb05f1a96eb78c0dbc51907fee42b3377272dc902eb38985f418d5"
 dependencies = [
  "once_cell",
  "target-lexicon",
@@ -3061,9 +3030,9 @@ dependencies = [
 
 [[package]]
 name = "pyo3-ffi"
-version = "0.18.2"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a0707f0ab26826fe4ccd59b69106e9df5e12d097457c7b8f9c0fd1d2743eec4d"
+checksum = "5b2ecbdcfb01cbbf56e179ce969a048fd7305a66d4cdf3303e0da09d69afe4c3"
 dependencies = [
  "libc",
  "pyo3-build-config",
@@ -3071,9 +3040,9 @@ dependencies = [
 
 [[package]]
 name = "pyo3-macros"
-version = "0.18.2"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "978d18e61465ecd389e1f235ff5a467146dc4e3c3968b90d274fe73a5dd4a438"
+checksum = "b78fdc0899f2ea781c463679b20cb08af9247febc8d052de941951024cd8aea0"
 dependencies = [
  "proc-macro2",
  "pyo3-macros-backend",
@@ -3083,9 +3052,9 @@ dependencies = [
 
 [[package]]
 name = "pyo3-macros-backend"
-version = "0.18.2"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e0e1128f85ce3fca66e435e08aa2089a2689c1c48ce97803e13f63124058462"
+checksum = "60da7b84f1227c3e2fe7593505de274dcf4c8928b4e0a1c23d551a14e4e80a0f"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3094,18 +3063,18 @@ dependencies = [
 
 [[package]]
 name = "quick-xml"
-version = "0.28.1"
+version = "0.28.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5c1a97b1bc42b1d550bfb48d4262153fe400a12bab1511821736f7eac76d7e2"
+checksum = "0ce5e73202a820a31f8a0ee32ada5e21029c81fd9e3ebf668a40832e4219d9d1"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.26"
+version = "1.0.29"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
 dependencies = [
  "proc-macro2",
 ]
@@ -3169,7 +3138,7 @@ version = "0.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
 dependencies = [
- "getrandom 0.2.8",
+ "getrandom 0.2.10",
 ]
 
 [[package]]
@@ -3209,7 +3178,7 @@ version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "62c64daa8e9438b84aaae55010a93f396f8e60e3911590fcba770d04643fc1dd"
 dependencies = [
- "cipher 0.4.4",
+ "cipher",
 ]
 
 [[package]]
@@ -3243,14 +3212,26 @@ dependencies = [
 ]
 
 [[package]]
+name = "redox_users"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
+dependencies = [
+ "getrandom 0.2.10",
+ "redox_syscall 0.2.16",
+ "thiserror",
+]
+
+[[package]]
 name = "regex"
-version = "1.7.3"
+version = "1.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d"
+checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
 dependencies = [
- "aho-corasick",
+ "aho-corasick 1.0.2",
  "memchr",
- "regex-syntax",
+ "regex-automata 0.3.4",
+ "regex-syntax 0.7.4",
 ]
 
 [[package]]
@@ -3259,7 +3240,18 @@ version = "0.1.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
 dependencies = [
- "regex-syntax",
+ "regex-syntax 0.6.29",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7b6d6190b7594385f61bd3911cd1be99dfddcfc365a4160cc2ab5bff4aed294"
+dependencies = [
+ "aho-corasick 1.0.2",
+ "memchr",
+ "regex-syntax 0.7.4",
 ]
 
 [[package]]
@@ -3269,12 +3261,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
 
 [[package]]
+name = "regex-syntax"
+version = "0.7.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+
+[[package]]
 name = "reqwest"
-version = "0.11.16"
+version = "0.11.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27b71749df584b7f4cac2c426c127a7c785a5106cc98f7a8feb044115f0fa254"
+checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
 dependencies = [
- "base64 0.21.0",
+ "base64 0.21.2",
  "bytes",
  "encoding_rs",
  "futures-core",
@@ -3342,18 +3340,27 @@ version = "0.0.0"
 dependencies = [
  "anki",
  "pyo3",
- "workspace-hack",
 ]
 
 [[package]]
 name = "runner"
 version = "0.0.0"
 dependencies = [
+ "anki_io",
+ "anyhow",
  "camino",
- "clap 4.2.1",
+ "clap",
+ "flate2",
  "junction",
+ "reqwest",
+ "sha2",
+ "tar",
  "termcolor",
- "workspace-hack",
+ "tokio",
+ "which",
+ "xz2",
+ "zip",
+ "zstd",
 ]
 
 [[package]]
@@ -3362,7 +3369,7 @@ version = "0.29.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "549b9d036d571d42e6e85d1c1425e2ac83491075078ca9a15be021c56b1641f2"
 dependencies = [
- "bitflags 2.0.2",
+ "bitflags 2.3.3",
  "fallible-iterator",
  "fallible-streaming-iterator",
  "hashlink",
@@ -3372,9 +3379,9 @@ dependencies = [
 
 [[package]]
 name = "rustc-demangle"
-version = "0.1.22"
+version = "0.1.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b"
+checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
 
 [[package]]
 name = "rustc-hash"
@@ -3384,35 +3391,48 @@ checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
 
 [[package]]
 name = "rustix"
-version = "0.37.5"
+version = "0.37.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75"
+checksum = "62f25693a73057a1b4cb56179dd3c7ea21a7c6c5ee7d85781f5749b46f34b79c"
 dependencies = [
  "bitflags 1.3.2",
  "errno",
  "io-lifetimes",
  "libc",
- "linux-raw-sys",
- "windows-sys 0.45.0",
+ "linux-raw-sys 0.3.8",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "rustix"
+version = "0.38.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbc6396159432b5c8490d4e301d8c705f61860b8b6c863bf79942ce5401968f3"
+dependencies = [
+ "bitflags 2.3.3",
+ "errno",
+ "libc",
+ "linux-raw-sys 0.4.3",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "rustls"
-version = "0.20.8"
+version = "0.21.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fff78fc74d175294f4e83b28343315ffcfb114b156f0185e9741cb5570f50e2f"
+checksum = "e32ca28af694bc1bbf399c33a516dbdf1c90090b8ab23c2bc24f834aa2247f5f"
 dependencies = [
  "log",
  "ring",
+ "rustls-webpki",
  "sct",
- "webpki",
 ]
 
 [[package]]
 name = "rustls-native-certs"
-version = "0.6.2"
+version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50"
+checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
 dependencies = [
  "openssl-probe",
  "rustls-pemfile",
@@ -3422,11 +3442,21 @@ dependencies = [
 
 [[package]]
 name = "rustls-pemfile"
-version = "1.0.2"
+version = "1.0.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2"
+dependencies = [
+ "base64 0.21.2",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.100.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b"
+checksum = "d6207cd5ed3d8dca7816f8f3725513a34609c0c765bf652b8c3cb4cfd87db46b"
 dependencies = [
- "base64 0.21.0",
+ "ring",
+ "untrusted",
 ]
 
 [[package]]
@@ -3478,12 +3508,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
 
 [[package]]
-name = "scratch"
-version = "1.0.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1"
-
-[[package]]
 name = "sct"
 version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3495,9 +3519,9 @@ dependencies = [
 
 [[package]]
 name = "security-framework"
-version = "2.8.2"
+version = "2.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254"
+checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
 dependencies = [
  "bitflags 1.3.2",
  "core-foundation",
@@ -3508,9 +3532,9 @@ dependencies = [
 
 [[package]]
 name = "security-framework-sys"
-version = "2.8.0"
+version = "2.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4"
+checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
 dependencies = [
  "core-foundation-sys",
  "libc",
@@ -3530,18 +3554,18 @@ checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
 
 [[package]]
 name = "serde"
-version = "1.0.159"
+version = "1.0.164"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
+checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde-aux"
-version = "4.1.2"
+version = "4.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c599b3fd89a75e0c18d6d2be693ddb12cccaf771db4ff9e39097104808a014c0"
+checksum = "c3dfe1b7eb6f9dcf011bd6fad169cdeaae75eda0d61b1a99a3f015b41b0cae39"
 dependencies = [
  "chrono",
  "serde",
@@ -3550,20 +3574,20 @@ dependencies = [
 
 [[package]]
 name = "serde_derive"
-version = "1.0.159"
+version = "1.0.164"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585"
+checksum = "d9735b638ccc51c28bf6914d90a2e9725b377144fc612c49a611fddd1b631d68"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.12",
+ "syn 2.0.22",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.95"
+version = "1.0.99"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744"
+checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3"
 dependencies = [
  "itoa",
  "ryu",
@@ -3598,7 +3622,7 @@ checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.12",
+ "syn 2.0.22",
 ]
 
 [[package]]
@@ -3647,9 +3671,9 @@ dependencies = [
 
 [[package]]
 name = "sha2"
-version = "0.10.6"
+version = "0.10.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -3802,31 +3826,31 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
 
 [[package]]
 name = "strum"
-version = "0.24.1"
+version = "0.25.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
 dependencies = [
  "strum_macros",
 ]
 
 [[package]]
 name = "strum_macros"
-version = "0.24.3"
+version = "0.25.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+checksum = "fe9f3bd7d2e45dcc5e265fbb88d6513e4747d8ef9444cf01a533119bce28a157"
 dependencies = [
  "heck",
  "proc-macro2",
  "quote",
  "rustversion",
- "syn 1.0.109",
+ "syn 2.0.22",
 ]
 
 [[package]]
 name = "subtle"
-version = "2.4.1"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
 
 [[package]]
 name = "syn"
@@ -3841,9 +3865,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.12"
+version = "2.0.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79d9531f94112cfc3e4c8f5f02cb2b58f72c97b7efd85f70203cc6d8efda5927"
+checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3869,21 +3893,22 @@ dependencies = [
 
 [[package]]
 name = "target-lexicon"
-version = "0.12.6"
+version = "0.12.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5"
+checksum = "1b1c7f239eb94671427157bd93b3694320f3668d4e1eff08c7285366fd777fac"
 
 [[package]]
 name = "tempfile"
-version = "3.5.0"
+version = "3.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998"
+checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
 dependencies = [
+ "autocfg",
  "cfg-if",
  "fastrand",
  "redox_syscall 0.3.5",
- "rustix",
- "windows-sys 0.45.0",
+ "rustix 0.37.21",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -3912,17 +3937,11 @@ version = "0.2.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
 dependencies = [
- "rustix",
+ "rustix 0.37.21",
  "windows-sys 0.48.0",
 ]
 
 [[package]]
-name = "textwrap"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
-
-[[package]]
 name = "thiserror"
 version = "1.0.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3939,7 +3958,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.12",
+ "syn 2.0.22",
 ]
 
 [[package]]
@@ -3954,9 +3973,9 @@ dependencies = [
 
 [[package]]
 name = "time"
-version = "0.3.20"
+version = "0.3.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd0cbfecb4d19b5ea75bb31ad904eb5b9fa13f21079c3b92017ebdf4999a5890"
+checksum = "ea9e1b3cf1243ae005d9e74085d4d542f3125458f3a81af210d901dcd7411efd"
 dependencies = [
  "itoa",
  "serde",
@@ -3966,15 +3985,15 @@ dependencies = [
 
 [[package]]
 name = "time-core"
-version = "0.1.0"
+version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
+checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
 
 [[package]]
 name = "time-macros"
-version = "0.2.8"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fd80a657e71da814b8e5d60d3374fc6d35045062245d80224748ae522dd76f36"
+checksum = "372950940a5f07bf38dbe211d7283c9e6d7327df53794992d293e534c733d09b"
 dependencies = [
  "time-core",
 ]
@@ -4015,32 +4034,32 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
 
 [[package]]
 name = "tokio"
-version = "1.27.0"
+version = "1.29.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001"
+checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
 dependencies = [
  "autocfg",
+ "backtrace",
  "bytes",
  "libc",
  "mio",
  "num_cpus",
- "parking_lot",
  "pin-project-lite",
  "signal-hook-registry",
  "socket2",
  "tokio-macros",
- "windows-sys 0.45.0",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
 name = "tokio-macros"
-version = "2.0.0"
+version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce"
+checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.12",
+ "syn 2.0.22",
 ]
 
 [[package]]
@@ -4055,13 +4074,12 @@ dependencies = [
 
 [[package]]
 name = "tokio-rustls"
-version = "0.23.4"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 dependencies = [
  "rustls",
  "tokio",
- "webpki",
 ]
 
 [[package]]
@@ -4078,9 +4096,9 @@ dependencies = [
 
 [[package]]
 name = "tokio-stream"
-version = "0.1.12"
+version = "0.1.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8fb52b74f05dbf495a8fba459fdc331812b96aa086d9eb78101fa0d4569c3313"
+checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
 dependencies = [
  "futures-core",
  "pin-project-lite",
@@ -4101,9 +4119,9 @@ dependencies = [
 
 [[package]]
 name = "tokio-util"
-version = "0.7.7"
+version = "0.7.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5427d89453009325de0d8f342c9490009f76e999cb7672d77e46267448f7e6b2"
+checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
 dependencies = [
  "bytes",
  "futures-core",
@@ -4124,17 +4142,17 @@ dependencies = [
 
 [[package]]
 name = "toml_datetime"
-version = "0.6.1"
+version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ab8ed2edee10b50132aed5f331333428b011c99402b5a534154ed15746f9622"
+checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b"
 
 [[package]]
 name = "toml_edit"
-version = "0.19.8"
+version = "0.19.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "239410c8609e8125456927e6707163a3b1fdb40561e4b803bc041f466ccfdc13"
+checksum = "266f016b7f039eec8a1a80dfe6156b633d208b9fccca5e4db1d6775b0c4e34a7"
 dependencies = [
- "indexmap",
+ "indexmap 2.0.0",
  "toml_datetime",
  "winnow",
 ]
@@ -4163,11 +4181,11 @@ dependencies = [
 
 [[package]]
 name = "tower-http"
-version = "0.4.0"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5d1d42a9b3f3ec46ba828e8d376aec14592ea199f70a06a548587ecd1c4ab658"
+checksum = "a8bd22a874a2d0b70452d5597b12c537331d49060824a95f49f108994f94aa4c"
 dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.3.3",
  "bytes",
  "futures-core",
  "futures-util",
@@ -4218,20 +4236,20 @@ dependencies = [
 
 [[package]]
 name = "tracing-attributes"
-version = "0.1.23"
+version = "0.1.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
+checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.22",
 ]
 
 [[package]]
 name = "tracing-core"
-version = "0.1.30"
+version = "0.1.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
+checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
 dependencies = [
  "once_cell",
  "valuable",
@@ -4250,9 +4268,9 @@ dependencies = [
 
 [[package]]
 name = "tracing-subscriber"
-version = "0.3.16"
+version = "0.3.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6176eae26dd70d0c919749377897b54a9276bd7061339665dd68777926b5a70"
+checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77"
 dependencies = [
  "matchers",
  "nu-ansi-term",
@@ -4466,9 +4484,9 @@ checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.8"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
 
 [[package]]
 name = "unicode-normalization"
@@ -4505,9 +4523,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
 
 [[package]]
 name = "url"
-version = "2.3.1"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
+checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
 dependencies = [
  "form_urlencoded",
  "idna",
@@ -4573,19 +4591,18 @@ dependencies = [
 
 [[package]]
 name = "want"
-version = "0.3.0"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
+checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
 dependencies = [
- "log",
  "try-lock",
 ]
 
 [[package]]
 name = "warp"
-version = "0.3.4"
+version = "0.3.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27e1a710288f0f91a98dd8a74f05b76a10768db245ce183edf64dc1afdc3016c"
+checksum = "ba431ef570df1287f7f8b07e376491ad54f84d26ac473489427231e1718e1f69"
 dependencies = [
  "bytes",
  "futures-channel",
@@ -4625,9 +4642,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.84"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b"
+checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
 dependencies = [
  "cfg-if",
  "wasm-bindgen-macro",
@@ -4635,24 +4652,24 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.84"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9"
+checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
 dependencies = [
  "bumpalo",
  "log",
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.22",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.34"
+version = "0.4.37"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454"
+checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03"
 dependencies = [
  "cfg-if",
  "js-sys",
@@ -4662,9 +4679,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.84"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5"
+checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -4672,22 +4689,22 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.84"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6"
+checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.22",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.84"
+version = "0.2.87"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d"
+checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
 
 [[package]]
 name = "wasm-streams"
@@ -4704,9 +4721,9 @@ dependencies = [
 
 [[package]]
 name = "web-sys"
-version = "0.3.61"
+version = "0.3.64"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97"
+checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
@@ -4779,7 +4796,7 @@ version = "0.48.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
 dependencies = [
- "windows-targets 0.48.0",
+ "windows-targets 0.48.1",
 ]
 
 [[package]]
@@ -4812,7 +4829,7 @@ version = "0.48.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
 dependencies = [
- "windows-targets 0.48.0",
+ "windows-targets 0.48.1",
 ]
 
 [[package]]
@@ -4832,9 +4849,9 @@ dependencies = [
 
 [[package]]
 name = "windows-targets"
-version = "0.48.0"
+version = "0.48.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
 dependencies = [
  "windows_aarch64_gnullvm 0.48.0",
  "windows_aarch64_msvc 0.48.0",
@@ -4931,9 +4948,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
 
 [[package]]
 name = "winnow"
-version = "0.4.1"
+version = "0.4.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae8970b36c66498d8ff1d66685dc86b91b29db0c7739899012f63a63814b4b28"
+checksum = "ca0ace3845f0d96209f0375e6d367e3eb87eb65d27d445bdc9f1843a26f39448"
 dependencies = [
  "memchr",
 ]
@@ -4959,13 +4976,13 @@ dependencies = [
 
 [[package]]
 name = "wiremock"
-version = "0.5.17"
+version = "0.5.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12316b50eb725e22b2f6b9c4cbede5b7b89984274d113a7440c86e5c3fc6f99b"
+checksum = "c6f71803d3a1c80377a06221e0530be02035d5b3e854af56c6ece7ac20ac441d"
 dependencies = [
  "assert-json-diff",
  "async-trait",
- "base64 0.13.1",
+ "base64 0.21.2",
  "deadpool",
  "futures",
  "futures-timer",
@@ -4980,55 +4997,6 @@ dependencies = [
 ]
 
 [[package]]
-name = "workspace-hack"
-version = "0.1.0"
-dependencies = [
- "bytes",
- "cc",
- "clap 4.2.1",
- "clap_builder",
- "crossbeam-utils",
- "either",
- "flate2",
- "futures-channel",
- "futures-io",
- "futures-util",
- "getrandom 0.2.8",
- "hashbrown",
- "hmac",
- "hyper",
- "indexmap",
- "itertools",
- "log",
- "num-traits",
- "phf_shared 0.11.1",
- "prost",
- "rand 0.8.5",
- "rand_core 0.6.4",
- "regex",
- "regex-syntax",
- "scopeguard",
- "serde",
- "serde_json",
- "sha2",
- "snafu",
- "syn 1.0.109",
- "syn 2.0.12",
- "time",
- "tokio",
- "tokio-util",
- "tracing",
- "tracing-core",
- "url",
- "zip",
- "zstd 0.11.2+zstd.1.5.2",
- "zstd 0.12.3+zstd.1.5.2",
- "zstd-safe 5.0.2+zstd.1.5.2",
- "zstd-safe 6.0.4+zstd.1.5.4",
- "zstd-sys",
-]
-
-[[package]]
 name = "xattr"
 version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -5059,40 +5027,24 @@ dependencies = [
 
 [[package]]
 name = "yasna"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4"
+checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd"
 dependencies = [
  "time",
 ]
 
 [[package]]
 name = "zip"
-version = "0.6.4"
+version = "0.6.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0445d0fbc924bb93539b4316c11afb121ea39296f99a3c4c9edad09e3658cdef"
+checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261"
 dependencies = [
- "aes",
  "byteorder",
- "bzip2",
- "constant_time_eq 0.1.5",
  "crc32fast",
  "crossbeam-utils",
  "flate2",
- "hmac",
- "pbkdf2",
- "sha1",
  "time",
- "zstd 0.11.2+zstd.1.5.2",
-]
-
-[[package]]
-name = "zstd"
-version = "0.11.2+zstd.1.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4"
-dependencies = [
- "zstd-safe 5.0.2+zstd.1.5.2",
 ]
 
 [[package]]
@@ -5101,24 +5053,14 @@ version = "0.12.3+zstd.1.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "76eea132fb024e0e13fd9c2f5d5d595d8a967aa72382ac2f9d39fcc95afd0806"
 dependencies = [
- "zstd-safe 6.0.4+zstd.1.5.4",
-]
-
-[[package]]
-name = "zstd-safe"
-version = "5.0.2+zstd.1.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db"
-dependencies = [
- "libc",
- "zstd-sys",
+ "zstd-safe",
 ]
 
 [[package]]
 name = "zstd-safe"
-version = "6.0.4+zstd.1.5.4"
+version = "6.0.5+zstd.1.5.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7afb4b54b8910cf5447638cb54bf4e8a65cbedd783af98b98c62ffe91f185543"
+checksum = "d56d9e60b4b1758206c238a10165fbcae3ca37b01744e394c463463f6529d23b"
 dependencies = [
  "libc",
  "zstd-sys",
@@ -5126,9 +5068,9 @@ dependencies = [
 
 [[package]]
 name = "zstd-sys"
-version = "2.0.7+zstd.1.5.4"
+version = "2.0.8+zstd.1.5.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5"
+checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c"
 dependencies = [
  "cc",
  "libc",
diff --git a/pkgs/games/anki/default.nix b/pkgs/games/anki/default.nix
index 18ffb1558f5df..b2be643b60ee1 100644
--- a/pkgs/games/anki/default.nix
+++ b/pkgs/games/anki/default.nix
@@ -1,10 +1,11 @@
 { lib
 , stdenv
+
 , buildEnv
+, cargo
 , fetchFromGitHub
 , fetchYarnDeps
 , fixup_yarn_lock
-, cargo
 , installShellFiles
 , lame
 , mpv-unwrapped
@@ -18,25 +19,25 @@
 , rustPlatform
 , writeShellScriptBin
 , yarn
-, swift
+
 , AVKit
 , CoreAudio
+, swift
 }:
 
 let
   pname = "anki";
-  version = "2.1.65";
-  rev = "aa9a734f695d0b0981aa3c0aaa2745ce86832f08";
+  version = "2.1.66";
+  rev = "70506aeb99d4afbe73321feaf75a2fabaa011d55";
 
   src = fetchFromGitHub {
     owner = "ankitects";
     repo = "anki";
     rev = version;
-    hash = "sha256-l+RTot8pJFJDDiapmQdKJ9WfwAuwRFiNJMbX+fBETeU=";
+    hash = "sha256-eE64i/jTMvipakbQXzKu/dN+dyim7E4M+eP3d9GZhII=";
     fetchSubmodules = true;
   };
 
-
   cargoDeps = rustPlatform.importCargoLock {
     lockFile = ./Cargo.lock;
     outputHashes = {
@@ -46,6 +47,11 @@ let
     };
   };
 
+  yarnOfflineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-3DUiwGTg7Nzd+bPJlc8aUW8bYrl7BF+CcjqkF6nW0qc=";
+  };
+
   anki-build-python = python3.withPackages (ps: with ps; [
     mypy-protobuf
   ]);
@@ -87,20 +93,16 @@ let
     pathsToLink = [ "/bin" ];
   };
 
-  yarnOfflineCache = fetchYarnDeps {
-    yarnLock = "${src}/yarn.lock";
-    hash = "sha256-66mYsHojQQBfLTHd12+/HEf7FKF5Y2RZRFeYRS2yZco=";
-  };
-
   # https://discourse.nixos.org/t/mkyarnpackage-lockfile-has-incorrect-entry/21586/3
   anki-nodemodules = stdenv.mkDerivation {
     pname = "anki-nodemodules";
+
     inherit version src yarnOfflineCache;
 
     nativeBuildInputs = [
       fixup_yarn_lock
-      yarn
       nodejs-slim
+      yarn
     ];
 
     configurePhase = ''
@@ -109,7 +111,6 @@ let
       fixup_yarn_lock yarn.lock
       yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive
       patchShebangs node_modules/
-      yarn run postinstall --offline
     '';
 
     installPhase = ''
@@ -118,35 +119,37 @@ let
   };
 in
 python3.pkgs.buildPythonApplication {
-  inherit pname version src;
+  inherit pname version;
+
+  outputs = [ "doc" "man" "out" ];
 
-  outputs = [ "out" "doc" "man" ];
+  inherit src;
 
   patches = [
     ./patches/gl-fixup.patch
     ./patches/no-update-check.patch
-    ./patches/0001-Skip-formatting-python-code.patch
+    ./patches/skip-formatting-python-code.patch
   ];
 
-  inherit cargoDeps;
+  inherit cargoDeps yarnOfflineCache;
 
   nativeBuildInputs = [
     fakeGit
     fixup_yarn_lock
     offlineYarn
 
-    installShellFiles
     cargo
-    rustPlatform.cargoSetupHook
+    installShellFiles
     ninja
     qt6.wrapQtAppsHook
     rsync
+    rustPlatform.cargoSetupHook
   ] ++ lib.optional stdenv.isDarwin swift;
-  nativeCheckInputs = with python3.pkgs; [ pytest mock astroid  ];
 
   buildInputs = [
     qt6.qtbase
   ] ++ lib.optional stdenv.isLinux qt6.qtwayland;
+
   propagatedBuildInputs = with python3.pkgs; [
     # This rather long list came from running:
     #    grep --no-filename -oE "^[^ =]*" python/{requirements.base.txt,requirements.bundle.txt,requirements.qt6_4.txt} | \
@@ -174,13 +177,13 @@ python3.pkgs.buildPythonApplication {
     markupsafe
     orjson
     pep517
-    python3.pkgs.protobuf
     pyparsing
     pyqt6
     pyqt6-sip
     pyqt6-webengine
     pyrsistent
     pysocks
+    python3.pkgs.protobuf
     requests
     send2trash
     six
@@ -194,23 +197,30 @@ python3.pkgs.buildPythonApplication {
     CoreAudio
   ];
 
-  # Activate optimizations
-  RELEASE = true;
+  nativeCheckInputs = with python3.pkgs; [ pytest mock astroid ];
 
-  PROTOC_BINARY = lib.getExe protobuf;
-  NODE_BINARY = lib.getExe nodejs;
-  YARN_BINARY = lib.getExe offlineYarn;
-  PYTHON_BINARY = lib.getExe python3;
+  # tests fail with to many open files
+  # TODO: verify if this is still true (I can't, no mac)
+  doCheck = !stdenv.isDarwin;
 
-  inherit yarnOfflineCache;
   dontUseNinjaInstall = false;
+  dontWrapQtApps = true;
+
+  env = {
+    # Activate optimizations
+    RELEASE = true;
+
+    NODE_BINARY = lib.getExe nodejs;
+    PROTOC_BINARY = lib.getExe protobuf;
+    PYTHON_BINARY = lib.getExe python3;
+    YARN_BINARY = lib.getExe offlineYarn;
+  };
 
   buildPhase = ''
     export RUST_BACKTRACE=1
     export RUST_LOG=debug
 
-    mkdir -p out/pylib/anki \
-             .git
+    mkdir -p out/pylib/anki .git
 
     echo ${builtins.substring 0 8 rev} > out/buildhash
     touch out/env
@@ -228,9 +238,6 @@ python3.pkgs.buildPythonApplication {
     PIP_USER=1 ./ninja build wheels
   '';
 
-  # tests fail with to many open files
-  # TODO: verify if this is still true (I can't, no mac)
-  doCheck = !stdenv.isDarwin;
   # mimic https://github.com/ankitects/anki/blob/76d8807315fcc2675e7fa44d9ddf3d4608efc487/build/ninja_gen/src/python.rs#L232-L250
   checkPhase = ''
     HOME=$TMP ANKI_TEST_MODE=1 PYTHONPATH=$PYTHONPATH:$PWD/out/pylib \
@@ -252,7 +259,6 @@ python3.pkgs.buildPythonApplication {
     installManPage qt/bundle/lin/anki.1
   '';
 
-  dontWrapQtApps = true;
   preFixup = ''
     makeWrapperArgs+=(
       "''${qtWrapperArgs[@]}"
@@ -261,7 +267,6 @@ python3.pkgs.buildPythonApplication {
   '';
 
   meta = with lib; {
-    homepage = "https://apps.ankiweb.net/";
     description = "Spaced repetition flashcard program";
     longDescription = ''
       Anki is a program which makes remembering things easy. Because it is a lot
@@ -275,9 +280,10 @@ python3.pkgs.buildPythonApplication {
       people's names and faces, brushing up on geography, mastering long poems,
       or even practicing guitar chords!
     '';
+    homepage = "https://apps.ankiweb.net";
     license = licenses.agpl3Plus;
     platforms = platforms.mesaPlatforms;
-    maintainers = with maintainers; [ oxij euank ];
+    maintainers = with maintainers; [ euank oxij paveloom ];
     # Reported to crash at launch on darwin (as of 2.1.65)
     broken = stdenv.isDarwin;
   };
diff --git a/pkgs/games/anki/patches/0001-Skip-formatting-python-code.patch b/pkgs/games/anki/patches/skip-formatting-python-code.patch
index 7ba3381ebab50..7ba3381ebab50 100644
--- a/pkgs/games/anki/patches/0001-Skip-formatting-python-code.patch
+++ b/pkgs/games/anki/patches/skip-formatting-python-code.patch
diff --git a/pkgs/games/atlauncher/default.nix b/pkgs/games/atlauncher/default.nix
index 4f45477ecec93..d6e3dc05a802a 100644
--- a/pkgs/games/atlauncher/default.nix
+++ b/pkgs/games/atlauncher/default.nix
@@ -1,12 +1,17 @@
-{ copyDesktopItems, fetchurl, jre, lib, makeDesktopItem, makeWrapper, stdenv, steam-run, withSteamRun ? true, writeShellScript }:
+{ copyDesktopItems, fetchurl, jre, lib, makeDesktopItem, makeWrapper, stdenv, udev, xorg }:
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "atlauncher";
-  version = "3.4.30.0";
+  version = "3.4.34.2";
 
   src = fetchurl {
     url = "https://github.com/ATLauncher/ATLauncher/releases/download/v${finalAttrs.version}/ATLauncher-${finalAttrs.version}.jar";
-    hash = "sha256-eSb+qH/ZoPpeOyIuoJsEpecG7uUyh0vkqZzNuxriRuI=";
+    hash = "sha256-l9OoHunK0xfY6xbNpjs9lfsVd3USM1GHgutTMMVq8S8=";
+  };
+
+  env.ICON = fetchurl {
+    url = "https://atlauncher.com/assets/images/logo.svg";
+    hash = "sha256-XoqpsgLmkpa2SdjZvPkgg6BUJulIBIeu6mBsJJCixfo=";
   };
 
   dontUnpack = true;
@@ -14,33 +19,29 @@ stdenv.mkDerivation (finalAttrs: {
   buildInputs = [ ];
   nativeBuildInputs = [ copyDesktopItems makeWrapper ];
 
-  installPhase =
-    let
-      # hack to use steam-run along with the exec
-      steamrun = writeShellScript "steamrun" ''
-        shift
-        exec ${steam-run}/bin/steam-run "''$@"
-      '';
-    in
-    ''
-      runHook preInstall
-      mkdir -p $out/bin
-      makeWrapper ${jre}/bin/java $out/bin/atlauncher \
-        --add-flags "-jar $src --working-dir=\$HOME/.atlauncher" \
-        --suffix LD_LIBRARY_PATH : "${lib.makeLibraryPath finalAttrs.buildInputs}" ${
-            lib.strings.optionalString withSteamRun ''--run "${steamrun} \\"''
-          }
-      runHook postInstall
-    '';
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/java
+    cp $src $out/share/java/ATLauncher.jar
+
+    makeWrapper ${jre}/bin/java $out/bin/${finalAttrs.pname} \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ xorg.libXxf86vm udev ]}" \
+      --add-flags "-jar $out/share/java/ATLauncher.jar" \
+      --add-flags "--working-dir \"\''${XDG_DATA_HOME:-\$HOME/.local/share}/ATLauncher\"" \
+      --add-flags "--no-launcher-update"
+
+    mkdir -p $out/share/icons/hicolor/scalable/apps
+    cp $ICON $out/share/icons/hicolor/scalable/apps/${finalAttrs.pname}.svg
+
+    runHook postInstall
+  '';
 
   desktopItems = [
     (makeDesktopItem {
       name = finalAttrs.pname;
-      exec = "${finalAttrs.pname} --no-launcher-update true";
-      icon = fetchurl {
-        url = "https://avatars.githubusercontent.com/u/7068667";
-        hash = "sha256-YmEkxf4rZxN3jhiib0UtdUDDcn9lw7IMbiEucBL7b9o=";
-      };
+      exec = finalAttrs.pname;
+      icon = finalAttrs.pname;
       desktopName = "ATLauncher";
       categories = [ "Game" ];
     })
diff --git a/pkgs/games/ball-and-paddle/default.nix b/pkgs/games/ball-and-paddle/default.nix
deleted file mode 100644
index a935f3d46863f..0000000000000
--- a/pkgs/games/ball-and-paddle/default.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ fetchurl, lib, stdenv, SDL, SDL_image, SDL_mixer, SDL_ttf, guile, gettext }:
-
-stdenv.mkDerivation rec {
-  pname = "ballandpaddle";
-  version = "0.8.1";
-
-  src = fetchurl {
-    url = "mirror://gnu/ballandpaddle/ballandpaddle-${version}.tar.gz";
-    sha256 = "0zgpydad0mj7fbkippw3n9hlda6nac084dq5xfbsks9jn1xd30ny";
-  };
-
-  buildInputs = [ SDL SDL_image SDL_mixer SDL_ttf guile gettext ];
-
-  patches = [ ./getenv-decl.patch ];
-
-  preConfigure = ''
-    sed -i "Makefile.in" \
-        -e "s|desktopdir *=.*$|desktopdir = $out/share/applications|g ;
-            s|pixmapsdir *=.*$|pixmapsdir = $out/share/pixmaps|g"
-  '';
-
-  meta = {
-    description = "GNU Ball and Paddle, an old-fashioned ball and paddle game";
-
-    longDescription = ''
-      GNU Ball and Paddle is an old-fashioned ball and paddle game
-      with a set amount of blocks to destroy on each level, while
-      moving a paddle left and right at the bottom of the
-      screen.  Various powerups may make different things occur.
-
-      It now uses GNU Guile for extension and the levels are written
-      with Guile.  Follow the example level sets and the documentation.
-    '';
-
-    license = lib.licenses.gpl3Plus;
-
-    homepage = "https://www.gnu.org/software/ballandpaddle/";
-
-    maintainers = [ ];
-
-    platforms = lib.platforms.unix;
-
-    hydraPlatforms = lib.platforms.linux; # sdl-config times out on darwin
-  };
-}
diff --git a/pkgs/games/ball-and-paddle/getenv-decl.patch b/pkgs/games/ball-and-paddle/getenv-decl.patch
deleted file mode 100644
index 6bf26b50a142b..0000000000000
--- a/pkgs/games/ball-and-paddle/getenv-decl.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Make the getenv(3) declaration visible.
-
---- ballandpaddle-0.8.1/src/settingsmanager.cpp	2009-07-08 02:13:16.000000000 +0200
-+++ ballandpaddle-0.8.1/src/settingsmanager.cpp	2009-07-16 23:30:28.000000000 +0200
-@@ -17,6 +17,7 @@
-  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
-  **/
- 
-+#include <stdlib.h>
- #include "settingsmanager.h"
- 
- SettingsManager::SettingsManager ()
-
diff --git a/pkgs/games/blightmud/default.nix b/pkgs/games/blightmud/default.nix
index d536aa7b8ea69..3267c36a370ea 100644
--- a/pkgs/games/blightmud/default.nix
+++ b/pkgs/games/blightmud/default.nix
@@ -11,16 +11,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "blightmud";
-  version = "5.2.0";
+  version = "5.3.0";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-sLqkDuohCgHJTMte1WIa2Yu43oWXVvnIpeiDBoQpKY8=";
+    sha256 = "sha256-e9Uo0IJYL9/6/nNL27zfUYnsTwDaOJOcR2CY6t++jDE=";
   };
 
-  cargoHash = "sha256-ffADKoMysYY2vwX3asHnjR2EiND4RJsf/W334PWvkGs=";
+  cargoHash = "sha256-QSgTpmSojZrwZ0RsUL6c2xO310RZX3gkyGl6oNf6pYI=";
 
   buildFeatures = lib.optional withTTS "tts";
 
@@ -43,6 +43,7 @@ rustPlatform.buildRustPackage rec {
         "test_lua_script"
         "timer_test"
         "validate_assertion_fail"
+        "regex_smoke_test"
       ];
       skipFlag = test: "--skip " + test;
     in
diff --git a/pkgs/games/boohu/default.nix b/pkgs/games/boohu/default.nix
index 6b3c0e04f982a..708d8d7510bcb 100644
--- a/pkgs/games/boohu/default.nix
+++ b/pkgs/games/boohu/default.nix
@@ -1,20 +1,17 @@
-{lib, fetchurl, buildGoPackage}:
-
-buildGoPackage rec {
+{ lib, fetchurl, buildGoModule }:
 
+buildGoModule rec {
   pname = "boohu";
-  version = "0.13.0";
-
-  goPackagePath = "git.tuxfamily.org/boohu/boohu.git";
+  version = "0.14.0";
 
   src = fetchurl {
-    url = "https://download.tuxfamily.org/boohu/downloads/${pname}-${version}.tar.gz";
-    sha256 = "0q89yv4klldjpli6y9xpyr6k8nsn7qa68gp90vb3dgxynn91sh68";
+    url = "https://download.tuxfamily.org/boohu/downloads/boohu-${version}.tar.gz";
+    hash = "sha256-IB59C5/uuHP6LtKLypjpgHOo0MR9bFdCbudaRa+h7lI=";
   };
 
-  goDeps = ./deps.nix;
+  vendorHash = "sha256-AVK4zE/Hs9SN8Qj2WYj/am2B0R74QKYoMNf3sRRjnU4=";
 
-  postInstall = "mv $out/bin/boohu.git $out/bin/boohu";
+  ldflags = [ "-s" "-w" ];
 
   meta = with lib; {
     description = "A new coffee-break roguelike game";
@@ -27,6 +24,6 @@ buildGoPackage rec {
     homepage = "https://download.tuxfamily.org/boohu/index.html";
     license = licenses.isc;
     platforms = platforms.unix;
-    maintainers = with maintainers; [];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/games/boohu/deps.nix b/pkgs/games/boohu/deps.nix
deleted file mode 100644
index c2dc3b41b9733..0000000000000
--- a/pkgs/games/boohu/deps.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-[
-  {
-    goPackagePath = "github.com/nsf/termbox-go";
-    fetch = {
-      type = "git";
-      url = "https://github.com/nsf/termbox-go";
-      rev = "93860e16131719fa9722e7c448dbf8c0e3210a0d";
-      sha256 = "03hz060cy8qrl4kgr80pbq6xvr38z4c6ghr3y81i8g854rvp6426";
-    };
-  }
-  {
-    goPackagePath = "github.com/mattn/go-runewidth";
-    fetch = {
-      type = "git";
-      url = "https://github.com/mattn/go-runewidth";
-      rev = "f93a0d58d5fd95e53f82782d07bb0c79d23e1290";
-      sha256 = "1sq97q71vgwnbg1fphsmqrzkbfn6mjal6d8a3qgwv4nbgppwaz25";
-    };
-  }
-]
diff --git a/pkgs/games/brutalmaze/default.nix b/pkgs/games/brutalmaze/default.nix
index d9c904d99a3b6..8f8930ce0c630 100644
--- a/pkgs/games/brutalmaze/default.nix
+++ b/pkgs/games/brutalmaze/default.nix
@@ -3,7 +3,7 @@
 python3Packages.buildPythonApplication rec {
   pname = "brutalmaze";
   version = "1.1.1";
-  format = "flit";
+  format = "pyproject";
   disabled = python3Packages.pythonOlder "3.7";
 
   src = fetchFromSourcehut {
@@ -13,6 +13,10 @@ python3Packages.buildPythonApplication rec {
     sha256 = "1m105iq378mypj64syw59aldbm6bj4ma4ynhc50gafl656fabg4y";
   };
 
+  nativeBuildInputs = with python3Packages; [
+    flit-core
+  ];
+
   propagatedBuildInputs = with python3Packages; [
     loca
     palace
diff --git a/pkgs/games/chessx/default.nix b/pkgs/games/chessx/default.nix
index 8a316438a6328..b49fb2c894734 100644
--- a/pkgs/games/chessx/default.nix
+++ b/pkgs/games/chessx/default.nix
@@ -1,4 +1,4 @@
-{ mkDerivation
+{ stdenv
 , lib
 , pkg-config
 , zlib
@@ -7,21 +7,24 @@
 , qttools
 , qtmultimedia
 , qmake
+, fetchpatch
 , fetchurl
+, wrapQtAppsHook
 }:
 
-mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "chessx";
-  version = "1.5.8";
+  version = "1.6.0";
 
   src = fetchurl {
-    url = "mirror://sourceforge/chessx/chessx-${version}.tgz";
-    sha256 = "sha256-ev+tK1CHLFt/RvmzyPVZ2c0nxfRwwb9ke7uTmm7REaM=";
+    url = "mirror://sourceforge/chessx/chessx-${finalAttrs.version}.tgz";
+    hash = "sha256-76YOe1WpB+vdEoEKGTHeaWJLpCVE4RoyYu1WLy3Dxhg=";
   };
 
   nativeBuildInputs = [
     pkg-config
     qmake
+    wrapQtAppsHook
   ];
 
   buildInputs = [
@@ -32,25 +35,39 @@ mkDerivation rec {
     zlib
   ];
 
-  # RCC: Error in 'resources.qrc': Cannot find file 'i18n/chessx_da.qm'
-  enableParallelBuilding = false;
+  patches =
+    # needed to backport patches to successfully build, due to broken release
+    let
+      repo = "https://github.com/Isarhamster/chessx/";
+    in
+    [
+      (fetchpatch {
+        url = "${repo}/commit/9797d46aa28804282bd58ce139b22492ab6881e6.diff";
+        hash = "sha256-RnIf6bixvAvyp1CKuri5LhgYFqhDNiAVYWUmSUDMgVw=";
+      })
+      (fetchpatch {
+        url = "${repo}/commit/4fab4d2f649d1cae2b54464c4e28337d1f20c214.diff";
+        hash = "sha256-EJVHricN+6uabKLfn77t8c7JjO7tMmZGsj7ZyQUGcXA=";
+      })
+    ];
+
+  enableParallelBuilding = true;
 
   installPhase = ''
     runHook preInstall
 
-    mkdir -p "$out/bin"
-    mkdir -p "$out/share/applications"
-    cp -pr release/chessx "$out/bin"
-    cp -pr unix/chessx.desktop "$out/share/applications"
+    install -Dm555 release/chessx -t "$out/bin"
+    install -Dm444 unix/chessx.desktop -t "$out/share/applications"
 
     runHook postInstall
   '';
 
   meta = with lib; {
-    homepage = "http://chessx.sourceforge.net/";
+    homepage = "https://chessx.sourceforge.io/";
     description = "Browse and analyse chess games";
-    license = licenses.gpl2;
-    maintainers = [ maintainers.luispedro ];
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ eclairevoyant luispedro ];
     platforms = platforms.linux;
+    mainProgram = "chessx";
   };
-}
+})
diff --git a/pkgs/games/chiaki4deck/default.nix b/pkgs/games/chiaki4deck/default.nix
index 4608df45d1e03..850e67eefcef8 100644
--- a/pkgs/games/chiaki4deck/default.nix
+++ b/pkgs/games/chiaki4deck/default.nix
@@ -15,17 +15,18 @@
 , udev
 , hidapi
 , fftw
+, speexdsp
 }:
 
 mkDerivation rec {
   pname = "chiaki4deck";
-  version = "1.3.3";
+  version = "1.4.0";
 
   src = fetchFromGitHub {
     owner = "streetpea";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-DXer39+j8QaI1IAIcLhVzSVNyGvwoT93knRibpFsEeY=";
+    hash = "sha256-udSGtpBUbxEZU9l+jLmUWJbkaCxKGoPuKAaYVmEEezk=";
     fetchSubmodules = true;
   };
 
@@ -50,6 +51,7 @@ mkDerivation rec {
     fftw
     libevdev
     udev
+    speexdsp
   ];
 
   meta = with lib; {
diff --git a/pkgs/games/clonehero/default.nix b/pkgs/games/clonehero/default.nix
index 36d76195fb9ad..0f7ae45a6683f 100644
--- a/pkgs/games/clonehero/default.nix
+++ b/pkgs/games/clonehero/default.nix
@@ -25,7 +25,7 @@ stdenv.mkDerivation (finalAttrs: {
   version = "1.0.0.4080";
 
   src = fetchurl {
-    url = "https://pubdl.clonehero.net/clonehero-v${finalAttrs.version}-final/clonehero-linux.tar.xz";
+    url = "https://github.com/clonehero-game/releases/releases/download/V${finalAttrs.version}/CloneHero-linux.tar.xz";
     hash = "sha256-YWLV+wgQ9RfKRSSWh/x0PMjB6tFA4YpHb9WtYOOgZZI=";
   };
 
diff --git a/pkgs/games/cockatrice/default.nix b/pkgs/games/cockatrice/default.nix
index 1388d830a9e7d..0d8b925faa2bb 100644
--- a/pkgs/games/cockatrice/default.nix
+++ b/pkgs/games/cockatrice/default.nix
@@ -4,13 +4,13 @@
 
 mkDerivation rec {
   pname = "cockatrice";
-  version = "2021-02-03-Development-2.8.1-beta";
+  version = "2023-09-14-Release-2.9.0";
 
   src = fetchFromGitHub {
     owner = "Cockatrice";
     repo = "Cockatrice";
     rev = version;
-    sha256 = "0g1d7zq4lh4jf08mvvgp6m2r2gdvy4y1mhf46c0s8607h2l8vavh";
+    sha256 = "sha256-mzYh0qRKiHY64LnoOfF4kDEO06IW1SrCqEiOlu81Fso=";
   };
 
   buildInputs = [
diff --git a/pkgs/games/ddnet/default.nix b/pkgs/games/ddnet/default.nix
index b08d4baf2a460..b8e333cd79c24 100644
--- a/pkgs/games/ddnet/default.nix
+++ b/pkgs/games/ddnet/default.nix
@@ -34,19 +34,19 @@
 
 stdenv.mkDerivation rec {
   pname = "ddnet";
-  version = "17.2.1";
+  version = "17.3";
 
   src = fetchFromGitHub {
     owner = "ddnet";
     repo = pname;
     rev = version;
-    hash = "sha256-FJnwabNEEGZDM9wNWMGclFv2IMlXg4Ob3PEbGiGQKKc=";
+    hash = "sha256-PV7xX4xYAIOT8xF7SM/bCO98p5gYJwT2U+dEXKhaIf4=";
   };
 
   cargoDeps = rustPlatform.fetchCargoTarball {
     name = "${pname}-${version}";
     inherit src;
-    hash = "sha256-hUrsumBiKovSD7xT1PgH2Q+7HYgyxnFnz33YJPdd5+c=";
+    hash = "sha256-Mck5letI7gOqeuMsZPzdys0VD8cWESznzezR2ZQXbDE=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/games/doom-ports/doomretro/default.nix b/pkgs/games/doom-ports/doomretro/default.nix
index c584f64b5d3e5..f01a788b8f8dc 100644
--- a/pkgs/games/doom-ports/doomretro/default.nix
+++ b/pkgs/games/doom-ports/doomretro/default.nix
@@ -11,13 +11,13 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "doomretro";
-  version = "4.9.2";
+  version = "5.0.4";
 
   src = fetchFromGitHub {
     owner = "bradharding";
     repo = "doomretro";
     rev = "v${finalAttrs.version}";
-    hash = "sha256-thH18+Og5kSiMdzgPdGyUwBchpjpd9xfFfUlUQMAl1A=";
+    hash = "sha256-O8FuLFziwVNk2dcj52Xq/FG2vtei06iL8BG2jVugcxs=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/games/doom-ports/gzdoom/default.nix b/pkgs/games/doom-ports/gzdoom/default.nix
index aaa800269a75e..4d737c6493342 100644
--- a/pkgs/games/doom-ports/gzdoom/default.nix
+++ b/pkgs/games/doom-ports/gzdoom/default.nix
@@ -14,6 +14,7 @@
 , libjpeg
 , libsndfile
 , libvpx
+, libwebp
 , mpg123
 , ninja
 , openal
@@ -25,14 +26,14 @@
 
 stdenv.mkDerivation rec {
   pname = "gzdoom";
-  version = "4.10.0";
+  version = "4.11.1";
 
   src = fetchFromGitHub {
     owner = "ZDoom";
     repo = "gzdoom";
     rev = "g${version}";
     fetchSubmodules = true;
-    hash = "sha256-F3p2X/hjPV9fuaA7T2bQTP6SlKcfc8GniJgv8BcopGw=";
+    hash = "sha256-7PWaqYK7pa6jgl92+a9dqQVVKuE/lvqtm+7p0nfMTNI=";
   };
 
   outputs = [ "out" "doc" ];
@@ -55,6 +56,7 @@ stdenv.mkDerivation rec {
     libjpeg
     libsndfile
     libvpx
+    libwebp
     mpg123
     openal
     vulkan-loader
diff --git a/pkgs/games/dwarf-fortress/update.sh b/pkgs/games/dwarf-fortress/update.sh
index 0ef9a40c7a5d7..5b99dff8aa77a 100755
--- a/pkgs/games/dwarf-fortress/update.sh
+++ b/pkgs/games/dwarf-fortress/update.sh
@@ -38,5 +38,5 @@ done | jq --slurp --raw-input \
 
 # Append $tmp1 to game.json. There should be a better way to handle
 # this but all other attempts failed for me.
-jq -M --argfile a "$tmp1" '. + $a' < "$(dirname "$0")/game.json" > "$tmp2"
+jq -M --slurpfile a "$tmp1" '. + $a[]' < "$(dirname "$0")/game.json" > "$tmp2"
 cat "$tmp2" > "$(dirname "$0")/game.json"
diff --git a/pkgs/games/eduke32/default.nix b/pkgs/games/eduke32/default.nix
index a25c6fa9050f2..051e097eb3a34 100644
--- a/pkgs/games/eduke32/default.nix
+++ b/pkgs/games/eduke32/default.nix
@@ -1,7 +1,23 @@
-{ lib, stdenv, fetchurl, makeWrapper, pkg-config, nasm, makeDesktopItem
-, alsa-lib, flac, gtk2, libvorbis, libvpx, libGLU, libGL
-, SDL2, SDL2_mixer
-, AGL, Cocoa, GLUT, OpenGL
+{ lib
+, stdenv
+, fetchurl
+, makeWrapper
+, pkg-config
+, nasm
+, makeDesktopItem
+, alsa-lib
+, flac
+, gtk2
+, libvorbis
+, libvpx
+, libGLU
+, libGL
+, SDL2
+, SDL2_mixer
+, AGL
+, Cocoa
+, GLUT
+, OpenGL
 }:
 
 let
@@ -18,13 +34,13 @@ let
 
 in stdenv.mkDerivation rec {
   pname = "eduke32";
-  version = "20221225";
-  rev = "10166";
-  revExtra = "122aee012";
+  version = "20230926";
+  rev = "10459";
+  revExtra = "8feaf6c25";
 
   src = fetchurl {
     url = "https://dukeworld.com/eduke32/synthesis/${version}-${rev}-${revExtra}/eduke32_src_${version}-${rev}-${revExtra}.tar.xz";
-    sha256 = "sha256-3pBYZJqoH7XBkJ537wPwBSmNaZprvOlVtAKTo8EOT3Q=";
+    hash = "sha256-GQOpDQm2FeaOMyYu9L5zhrM6XFvZAHMAwn1tSK7RCB8=";
   };
 
   buildInputs = [
@@ -49,7 +65,7 @@ in stdenv.mkDerivation rec {
     ++ lib.optional (stdenv.hostPlatform.system == "i686-linux") nasm;
 
   postPatch = ''
-    substituteInPlace source/imgui/src/imgui_impl_sdl.cpp \
+    substituteInPlace source/imgui/src/imgui_impl_sdl2.cpp \
       --replace '#include <SDL.h>' '#include <SDL2/SDL.h>' \
       --replace '#include <SDL_syswm.h>' '#include <SDL2/SDL_syswm.h>' \
       --replace '#include <SDL_vulkan.h>' '#include <SDL2/SDL_vulkan.h>'
diff --git a/pkgs/games/empty-epsilon/0001-bundle-system-glm-in-seriousproton.patch b/pkgs/games/empty-epsilon/0001-bundle-system-glm-in-seriousproton.patch
deleted file mode 100644
index a896f8c5867ee..0000000000000
--- a/pkgs/games/empty-epsilon/0001-bundle-system-glm-in-seriousproton.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 9718cdb4bdaf7203d07789b2dc5eec4060538889 Mon Sep 17 00:00:00 2001
-From: Maximilian Bosch <maximilian@mbosch.me>
-Date: Fri, 9 Jul 2021 11:37:22 +0200
-Subject: [PATCH] bundle system-glm in seriousproton
-
----
- CMakeLists.txt | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index cbd68ca..730df82 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -81,6 +81,9 @@ if(NOT ${SFML_FOUND})
-     )
- endif()
- 
-+
-+find_package(glm)
-+
- add_subdirectory(src/Box2D)
- add_subdirectory(src/lua)
- add_subdirectory(src/GL)
-@@ -205,7 +208,7 @@ target_compile_options(seriousproton_deps
- 
- target_link_libraries(seriousproton_deps
-     INTERFACE 
--        box2d lua glew ${SFML_LIBRARIES}
-+        box2d lua glew ${SFML_LIBRARIES} glm::glm
-         "$<$<BOOL:${WIN32}>:wsock32>"
-         # LTO flag must be on the linker's list as well.
-         "$<$<AND:$<BOOL:${CMAKE_COMPILER_IS_GNUCC}>,$<OR:$<CONFIG:RelWithDebInfo>,$<CONFIG:Release>>>:-flto>"
--- 
-2.31.1
diff --git a/pkgs/games/empty-epsilon/default.nix b/pkgs/games/empty-epsilon/default.nix
index bee806fcdd5b7..ba41431eb5ca3 100644
--- a/pkgs/games/empty-epsilon/default.nix
+++ b/pkgs/games/empty-epsilon/default.nix
@@ -1,45 +1,40 @@
-{ lib, stdenv, fetchFromGitHub, cmake, sfml, libX11, glew, python3, fetchpatch, applyPatches, glm}:
+{ lib, stdenv, fetchFromGitHub, cmake, sfml, libX11, glew, python3, fetchpatch, applyPatches, glm, meshoptimizer, SDL2, ninja}:
 
 let
 
-  major = "2021";
+  major = "2023";
   minor = "06";
-  patch.seriousproton = "23";
-  patch.emptyepsilon = "23";
+  patch.seriousproton = "17";
+  patch.emptyepsilon = "17";
 
   version.seriousproton = "${major}.${minor}.${patch.seriousproton}";
   version.emptyepsilon = "${major}.${minor}.${patch.emptyepsilon}";
+  version.basis-universal = "v1_15_update2";
+
+  basis-universal = fetchFromGitHub {
+    owner = "BinomialLLC";
+    repo = "basis_universal";
+    rev = version.basis-universal;
+    sha256 = "sha256-2snzq/SnhWHIgSbUUgh24B6tka7EfkGO+nwKEObRkU4=";
+  };
 
   serious-proton = stdenv.mkDerivation {
     pname = "serious-proton";
     version = version.seriousproton;
 
-    src = applyPatches {
-      src = fetchFromGitHub {
-        owner = "daid";
-        repo = "SeriousProton";
-        rev = "EE-${version.seriousproton}";
-        sha256 = "sha256-02cHHWKoe99257qLgxtMjeXnhi0UYajh4v87B57felM=";
-      };
-
-      patches = [
-        # Various CMake fixes for `json11`. Can be removed on the next release.
-        (fetchpatch {
-          url = "https://github.com/daid/SeriousProton/commit/adbba45fd9ae5e020e43e5d7f9326f1355391209.patch";
-          sha256 = "sha256-gMTpIGPGCREmZ/ZxvEc7RVsVUxWXbu2BPUCE3A62sCI=";
-        })
-
-        # Simplified variant of
-        # * https://github.com/daid/SeriousProton/commit/0d1ac45b738195db5e2785531db713328f547e60
-        # * https://github.com/daid/SeriousProton/commit/32509f2db91a58b9528aeb1bb505e9426b52b825
-        #
-        # To fix configure errors when building EmptyEpsilon, can be removed on the next release.
-        ./0001-bundle-system-glm-in-seriousproton.patch
-      ];
+    src = fetchFromGitHub {
+      owner = "daid";
+      repo = "SeriousProton";
+      rev = "EE-${version.seriousproton}";
+      sha256 = "sha256-5ifYb5dX8ihQmJB1RHyzMsZJeXZ+m27JmA+W+XA/XwI=";
     };
 
     nativeBuildInputs = [ cmake ];
-    buildInputs = [ sfml libX11 glm ];
+    buildInputs = [ sfml libX11 glm SDL2 ];
+
+    cmakeFlags = [
+      "-DFETCHCONTENT_SOURCE_DIR_BASIS=${basis-universal}"
+    ];
 
     meta = with lib; {
       description = "C++ game engine coded on top of SFML used for EmptyEpsilon";
@@ -61,23 +56,11 @@ stdenv.mkDerivation {
     owner = "daid";
     repo = "EmptyEpsilon";
     rev = "EE-${version.emptyepsilon}";
-    sha256 = "sha256-dc/Ic1/DULTQO6y9xSop2HxFvUh4kN57oSF/HBmbmF4=";
+    sha256 = "sha256-zuXbCBlv6URndbB0aA+3bli0cSeUBf3LT/7/jcPITnc=";
   };
 
-  patches = [
-    # Various CMake fixes that can be removed when upgrading to the next release.
-    (fetchpatch {
-      url = "https://github.com/daid/EmptyEpsilon/commit/ee0cd42bfe5fd20b8339e8e02eb7f69766168d57.patch";
-      sha256 = "sha256-8dXtl/izfzqbwHtjuugjH34vYP+d4AobqZhxL2GXTzw=";
-    })
-    (fetchpatch {
-      url = "https://github.com/daid/EmptyEpsilon/commit/69d93e6acdae3259755924f9d35e7e5ae949d377.patch";
-      sha256 = "sha256-30AGo4mi73GrW9GNS3vF3mTOS7J5/41LvjOzNjeFhOg=";
-    })
-  ];
-
   nativeBuildInputs = [ cmake ];
-  buildInputs = [ serious-proton sfml glew libX11 python3 glm ];
+  buildInputs = [ serious-proton sfml glew libX11 python3 glm SDL2 ninja ];
 
   cmakeFlags = [
     "-DSERIOUS_PROTON_DIR=${serious-proton.src}"
@@ -85,6 +68,11 @@ stdenv.mkDerivation {
     "-DCPACK_PACKAGE_VERSION_MAJOR=${major}"
     "-DCPACK_PACKAGE_VERSION_MINOR=${minor}"
     "-DCPACK_PACKAGE_VERSION_PATCH=${patch.emptyepsilon}"
+    "-DFETCHCONTENT_SOURCE_DIR_BASIS=${basis-universal}"
+    "-DFETCHCONTENT_SOURCE_DIR_MESHOPTIMIZER=${meshoptimizer.src}"
+    "-DCMAKE_AR=${stdenv.cc.cc}/bin/gcc-ar"
+    "-DCMAKE_RANLIB=${stdenv.cc.cc}/bin/gcc-ranlib"
+    "-G Ninja"
   ];
 
   meta = with lib; {
diff --git a/pkgs/games/etlegacy/default.nix b/pkgs/games/etlegacy/default.nix
index ee5d31874c685..befbbc5ed2914 100644
--- a/pkgs/games/etlegacy/default.nix
+++ b/pkgs/games/etlegacy/default.nix
@@ -100,7 +100,6 @@ stdenv.mkDerivation {
   '';
 
   cmakeFlags = [
-    "-DCMAKE_BUILD_TYPE=Release"
     "-DCROSS_COMPILE32=0"
     "-DBUILD_SERVER=1"
     "-DBUILD_CLIENT=1"
diff --git a/pkgs/games/factorio/versions.json b/pkgs/games/factorio/versions.json
index 9a0f47de09972..a016676ac1d13 100644
--- a/pkgs/games/factorio/versions.json
+++ b/pkgs/games/factorio/versions.json
@@ -2,56 +2,56 @@
   "x86_64-linux": {
     "alpha": {
       "experimental": {
-        "name": "factorio_alpha_x64-1.1.89.tar.xz",
+        "name": "factorio_alpha_x64-1.1.92.tar.xz",
         "needsAuth": true,
-        "sha256": "1mv3lnxw8ihja1zm0kh2ghxb551pknmzjlz58iqxpkhlqmn3qi1q",
+        "sha256": "1arirh9180bmix2dglqlgcm036mbjanc4sxx0kc92j2grpw7xf53",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.89/alpha/linux64",
-        "version": "1.1.89"
+        "url": "https://factorio.com/get-download/1.1.92/alpha/linux64",
+        "version": "1.1.92"
       },
       "stable": {
-        "name": "factorio_alpha_x64-1.1.87.tar.xz",
+        "name": "factorio_alpha_x64-1.1.91.tar.xz",
         "needsAuth": true,
-        "sha256": "166mfblhxa6l3nglwwl77d1k3rkfcisp9bkps6y5zb2hmsmr00s6",
+        "sha256": "0dcanryqmikhllp8lwhdapbm9scrgfgnvgwdf18wn8asr652vz39",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.87/alpha/linux64",
-        "version": "1.1.87"
+        "url": "https://factorio.com/get-download/1.1.91/alpha/linux64",
+        "version": "1.1.91"
       }
     },
     "demo": {
       "experimental": {
-        "name": "factorio_demo_x64-1.1.88.tar.xz",
+        "name": "factorio_demo_x64-1.1.92.tar.xz",
         "needsAuth": false,
-        "sha256": "0m1rx7khfg3p0bj8gp30cqipwqjk1sjj13mzzxh67crwcjzxps9z",
+        "sha256": "02mqj2hlpsd0kgg0rav4k70pqh2sk4g2879c2nhp61ms79kdizh4",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.88/demo/linux64",
-        "version": "1.1.88"
+        "url": "https://factorio.com/get-download/1.1.92/demo/linux64",
+        "version": "1.1.92"
       },
       "stable": {
-        "name": "factorio_demo_x64-1.1.87.tar.xz",
+        "name": "factorio_demo_x64-1.1.91.tar.xz",
         "needsAuth": false,
-        "sha256": "1n5q4wgp2z18vpkvim8yxg4w9wc28mw9gfnqwq6fcwafz90xy9sq",
+        "sha256": "1j9nzc3rs9q43vh9i0jgpyhgnjjif98sdgk4r47m0qrxjb4pnfx0",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.87/demo/linux64",
-        "version": "1.1.87"
+        "url": "https://factorio.com/get-download/1.1.91/demo/linux64",
+        "version": "1.1.91"
       }
     },
     "headless": {
       "experimental": {
-        "name": "factorio_headless_x64-1.1.89.tar.xz",
+        "name": "factorio_headless_x64-1.1.92.tar.xz",
         "needsAuth": false,
-        "sha256": "1an4g5sry47xmlqr53jans75ngrp819b07rrq4xkzdzmka0lkrcq",
+        "sha256": "04j3p2r1r0h3fak3vxxq3d7qqpyjlg57n3c8sm6gadg4q4h15aw8",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.89/headless/linux64",
-        "version": "1.1.89"
+        "url": "https://factorio.com/get-download/1.1.92/headless/linux64",
+        "version": "1.1.92"
       },
       "stable": {
-        "name": "factorio_headless_x64-1.1.87.tar.xz",
+        "name": "factorio_headless_x64-1.1.91.tar.xz",
         "needsAuth": false,
-        "sha256": "1k2pk0s2nf4xy168kzf798ha7x4zc5ijpvxp61xlq7xddm5qicv0",
+        "sha256": "0v8zg3q79n15242fr79f9amg0icw3giy4aiaf43am5hxzcdb5212",
         "tarDirectory": "x64",
-        "url": "https://factorio.com/get-download/1.1.87/headless/linux64",
-        "version": "1.1.87"
+        "url": "https://factorio.com/get-download/1.1.91/headless/linux64",
+        "version": "1.1.91"
       }
     }
   }
diff --git a/pkgs/games/fallout-ce/build.nix b/pkgs/games/fallout-ce/build.nix
new file mode 100644
index 0000000000000..c220895db08ce
--- /dev/null
+++ b/pkgs/games/fallout-ce/build.nix
@@ -0,0 +1,77 @@
+{ cmake
+, fpattern
+, lib
+, SDL2
+, stdenv
+, writeShellScript
+
+, extraBuildInputs ? [ ]
+, extraMeta
+, pname
+, version
+, src
+}:
+
+let
+  launcher = writeShellScript "${pname}" ''
+    set -eu
+    assetDir="''${XDG_DATA_HOME:-$HOME/.local/share}/${pname}"
+    [ -d "$assetDir" ] || mkdir -p "$assetDir"
+    cd "$assetDir"
+
+    notice=0 fault=0
+    requiredFiles=(master.dat critter.dat)
+    for f in "''${requiredFiles[@]}"; do
+      if [ ! -f "$f" ]; then
+        echo "Required file $f not found in $PWD, note the files are case-sensitive"
+        notice=1 fault=1
+      fi
+    done
+
+    if [ ! -d "data/sound/music" ]; then
+      echo "data/sound/music directory not found in $PWD. This may prevent in-game music from functioning."
+      notice=1
+    fi
+
+    if [ $notice -ne 0 ]; then
+      echo "Please reference the installation instructions at https://github.com/alexbatalov/fallout2-ce"
+    fi
+
+    if [ $fault -ne 0 ]; then
+      exit $fault;
+    fi
+
+    exec @out@/libexec/${pname} "$@"
+  '';
+in
+stdenv.mkDerivation {
+  inherit pname version src;
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ SDL2 ] ++ extraBuildInputs;
+  hardeningDisable = [ "format" ];
+  cmakeBuildType = "RelWithDebInfo";
+
+  postPatch = ''
+    substituteInPlace third_party/fpattern/CMakeLists.txt \
+      --replace "FetchContent_Populate" "#FetchContent_Populate" \
+      --replace "{fpattern_SOURCE_DIR}" "${fpattern}/include" \
+      --replace "$/nix/" "/nix/"
+  '';
+
+  installPhase = ''
+    runHook preInstall
+
+    install -D ${pname} $out/libexec/${pname}
+    install -D ${launcher} $out/bin/${pname}
+    substituteInPlace $out/bin/${pname} --subst-var out
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    license = licenses.sustainableUse;
+    maintainers = with maintainers; [ hughobrien TheBrainScrambler ];
+    platforms = platforms.linux;
+  } // extraMeta;
+}
diff --git a/pkgs/games/fallout-ce/fallout-ce.nix b/pkgs/games/fallout-ce/fallout-ce.nix
new file mode 100644
index 0000000000000..5f55743a674b7
--- /dev/null
+++ b/pkgs/games/fallout-ce/fallout-ce.nix
@@ -0,0 +1,20 @@
+{ callPackage
+, fetchFromGitHub
+}:
+
+callPackage ./build.nix rec {
+  pname = "fallout-ce";
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "alexbatalov";
+    repo = "fallout1-ce";
+    rev = "v${version}";
+    hash = "sha256-EvRkOlvtiVao63S0WRKKuHlhfkdTgc0m6GTyv4EfJFU=";
+  };
+
+  extraMeta = {
+    description = "A fully working re-implementation of Fallout, with the same original gameplay, engine bugfixes, and some quality of life improvements";
+    homepage = "https://github.com/alexbatalov/fallout1-ce";
+  };
+}
diff --git a/pkgs/games/fallout-ce/fallout2-ce.nix b/pkgs/games/fallout-ce/fallout2-ce.nix
new file mode 100644
index 0000000000000..b28a9701c2021
--- /dev/null
+++ b/pkgs/games/fallout-ce/fallout2-ce.nix
@@ -0,0 +1,23 @@
+{ callPackage
+, fetchFromGitHub
+, zlib
+}:
+
+callPackage ./build.nix rec {
+  pname = "fallout2-ce";
+  version = "1.2.0";
+
+  src = fetchFromGitHub {
+    owner = "alexbatalov";
+    repo = "fallout2-ce";
+    rev = "v${version}";
+    hash = "sha256-+N4jhmxBX6z48kaU0jm90OKhguHlggT3OF9uuyY0EV0=";
+  };
+
+  extraBuildInputs = [ zlib ];
+
+  extraMeta = {
+    description = "A fully working re-implementation of Fallout 2, with the same original gameplay, engine bugfixes, and some quality of life improvements";
+    homepage = "https://github.com/alexbatalov/fallout2-ce";
+  };
+}
diff --git a/pkgs/games/fheroes2/default.nix b/pkgs/games/fheroes2/default.nix
index 4e9e5ab965b1a..9c51b457fb4d4 100644
--- a/pkgs/games/fheroes2/default.nix
+++ b/pkgs/games/fheroes2/default.nix
@@ -6,13 +6,13 @@
 
 stdenv.mkDerivation rec {
   pname = "fheroes2";
-  version = "1.0.7";
+  version = "1.0.9";
 
   src = fetchFromGitHub {
     owner = "ihhub";
     repo = "fheroes2";
     rev = version;
-    sha256 = "sha256-DRwCTy87mC1bXpOEaPGQc+dJaPOaKzlmJv9d/BntR7s=";
+    hash = "sha256-l2NIoZrevI1PWK4mRjGP6jbx0LvXjz9oFsiTJ6m43JQ=";
   };
 
   nativeBuildInputs = [ imagemagick ];
diff --git a/pkgs/games/freecell-solver/default.nix b/pkgs/games/freecell-solver/default.nix
deleted file mode 100644
index 065e82a0e472a..0000000000000
--- a/pkgs/games/freecell-solver/default.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-{ lib, stdenv, fetchurl, pkg-config, cmake
-, perl, gmp, libtap, gperf
-, perlPackages, python3 }:
-
-with lib;
-stdenv.mkDerivation rec {
-
-  pname = "freecell-solver";
-  version = "4.18.0";
-
-  src = fetchurl {
-    url = "https://fc-solve.shlomifish.org/downloads/fc-solve/${pname}-${version}.tar.xz";
-    sha256 = "1cmaib69pijmcpvgjvrdry8j4xys8l906l80b8z21vvyhdwrfdnn";
-  };
-
-  nativeBuildInputs = [
-    cmake perl pkg-config
-  ] ++ (with perlPackages; TaskFreecellSolverTesting.buildInputs ++ [
-    GamesSolitaireVerify StringShellQuote TaskFreecellSolverTesting TemplateToolkit
-  ]);
-
-  buildInputs = [
-    gmp libtap gperf
-    python3 python3.pkgs.random2
-  ];
-
-  # "ninja t/CMakeFiles/delta-states-test.t.exe.dir/__/delta_states.c.o" fails
-  # to depend on the generated "is_king.h".
-  enableParallelBuilding = false;
-
-  meta = {
-    description = "A FreeCell automatic solver";
-    longDescription = ''
-      FreeCell Solver is a program that automatically solves layouts
-      of Freecell and similar variants of Card Solitaire such as Eight
-      Off, Forecell, and Seahaven Towers, as well as Simple Simon
-      boards.
-    '';
-    homepage = "https://fc-solve.shlomifish.org/";
-    license = licenses.mit;
-    maintainers = [ maintainers.AndersonTorres ];
-    platforms = platforms.unix;
-  };
-}
diff --git a/pkgs/games/gogdl/default.nix b/pkgs/games/gogdl/default.nix
index a6b41e7bd645e..d5b3d0a5a5444 100644
--- a/pkgs/games/gogdl/default.nix
+++ b/pkgs/games/gogdl/default.nix
@@ -17,8 +17,8 @@ buildPythonApplication rec {
   src = fetchFromGitHub {
     owner = "Heroic-Games-Launcher";
     repo = "heroic-gogdl";
-    rev = "d2fa34bfba7beb2ecc0e3fc70a657f2c612c8a10";
-    hash = "sha256-YCqtfY49lDg6sLrF/INOZVD9cMCwvejhySzUWrxHKAw=";
+    rev = "89d15f1593cc26f15a5f8f409bb623764c095d37";
+    hash = "sha256-EECpXGVhcwihKB8fLObVvYzFD8uh7CxYKtFiGc0Jqbk=";
   };
 
   disabled = pythonOlder "3.8";
@@ -28,13 +28,6 @@ buildPythonApplication rec {
     requests
   ];
 
-  patches = [
-    (fetchpatch {
-      url = "https://patch-diff.githubusercontent.com/raw/Heroic-Games-Launcher/heroic-gogdl/pull/37.patch";
-      hash = "sha256-oZLetPoWzsEDrL0Bh89HB4hTn70FTh8aXj9mKGr4Dqw=";
-    })
-  ];
-
   pythonImportsCheck = [ "gogdl" ];
 
   meta = with lib; {
diff --git a/pkgs/games/gotypist/default.nix b/pkgs/games/gotypist/default.nix
index 7840a56d361a5..24afb9317c5b4 100644
--- a/pkgs/games/gotypist/default.nix
+++ b/pkgs/games/gotypist/default.nix
@@ -11,7 +11,7 @@ buildGoModule rec {
     sha256 = "0khl2f6bl121slw9mlf4qzsdarpk1v3vry11f3dvz7pb1q6zjj11";
   };
 
-  vendorSha256 = null;
+  vendorHash = null;
 
   meta = with lib; {
     description = "A touch-typing tutor";
diff --git a/pkgs/games/grapejuice/default.nix b/pkgs/games/grapejuice/default.nix
index abc882b300b8f..c8d1956eb9a54 100644
--- a/pkgs/games/grapejuice/default.nix
+++ b/pkgs/games/grapejuice/default.nix
@@ -20,13 +20,13 @@
 
 python3Packages.buildPythonApplication rec  {
   pname = "grapejuice";
-  version = "7.14.4";
+  version = "7.20.11";
 
   src = fetchFromGitLab {
     owner = "BrinkerVII";
     repo = "grapejuice";
     rev = "v${version}";
-    hash = "sha256-CWTnofJXx9T/hGXx3rdephXHjpiVRdFEJQ1u2v6n7yo=";
+    hash = "sha256-sDw67Xseeak1v5x0daznfdeNQahDTj21AVvXmuZlsgg=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/games/harmonist/default.nix b/pkgs/games/harmonist/default.nix
index c08ed624959d1..cbb556cbc9480 100644
--- a/pkgs/games/harmonist/default.nix
+++ b/pkgs/games/harmonist/default.nix
@@ -25,6 +25,6 @@ buildGoModule rec {
     '';
     homepage = "https://harmonist.tuxfamily.org/";
     license = licenses.isc;
-    maintainers = with maintainers; [ aaronjheng ];
+    maintainers = with maintainers; [ ];
   };
 }
diff --git a/pkgs/games/heroic/default.nix b/pkgs/games/heroic/default.nix
index ca9d5799596ea..eca0860207096 100644
--- a/pkgs/games/heroic/default.nix
+++ b/pkgs/games/heroic/default.nix
@@ -8,6 +8,7 @@
 , python3
 , makeWrapper
 , electron
+, vulkan-helper
 , gogdl
 , legendary-gl
 , nile
@@ -16,18 +17,18 @@
 let appName = "heroic";
 in stdenv.mkDerivation rec {
   pname = "heroic-unwrapped";
-  version = "2.9.1";
+  version = "2.9.2";
 
   src = fetchFromGitHub {
     owner = "Heroic-Games-Launcher";
     repo = "HeroicGamesLauncher";
     rev = "v${version}";
-    hash = "sha256-1FtAcp6cG2qRfWrAgCOQ87DzMvszqqhObfSzepezBGc=";
+    hash = "sha256-kCvMUhN1kjGb5rV+lkKm1FFYBJUSQGOKTY1DQdiAWLU=";
   };
 
   offlineCache = fetchYarnDeps {
     yarnLock = "${src}/yarn.lock";
-    hash = "sha256-KEzTjtoBcHNJxC/7W/Bft75JZuZUSHieOOAwhbr5d3s=";
+    hash = "sha256-kHZL7TENVK58dvr8PBFtWYZ2PSKEYESX4e1xYmMA5+Y=";
   };
 
   nativeBuildInputs = [
@@ -86,7 +87,8 @@ in stdenv.mkDerivation rec {
     ln -s \
       "${gogdl}/bin/gogdl" \
       "${legendary-gl}/bin/legendary" \
-      "${nile}"/bin/nile \
+      "${nile}/bin/nile" \
+      "${lib.optionalString stdenv.isLinux "${vulkan-helper}/bin/vulkan-helper"}" \
       "$out/share/${appName}/build/bin/${binPlatform}"
 
     makeWrapper "${electron}/bin/electron" "$out/bin/heroic" \
diff --git a/pkgs/games/heroic/fhsenv.nix b/pkgs/games/heroic/fhsenv.nix
index 3979b28239264..19b44b280f857 100644
--- a/pkgs/games/heroic/fhsenv.nix
+++ b/pkgs/games/heroic/fhsenv.nix
@@ -53,6 +53,14 @@ buildFHSEnv {
       libXv
       libXxf86vm
     ];
+    gstreamerDeps = pkgs: with pkgs.gst_all_1; [
+      gstreamer
+      gst-plugins-base
+      gst-plugins-good
+      gst-plugins-ugly
+      gst-plugins-bad
+      gst-libav
+    ];
   in pkgs: with pkgs; [
     alsa-lib
     alsa-plugins
@@ -68,7 +76,6 @@ buildFHSEnv {
     giflib
     glib
     gnutls
-    gst_all_1.gst-plugins-base
     gtk3
     lcms2
     libevdev
@@ -119,6 +126,7 @@ buildFHSEnv {
     wayland
     zlib
   ] ++ xorgDeps pkgs
+    ++ gstreamerDeps pkgs
     ++ extraLibraries pkgs;
 
   extraInstallCommands = ''
diff --git a/pkgs/games/hmcl/default.nix b/pkgs/games/hmcl/default.nix
index f6ded13dc0f4c..fcaa01ea2d95f 100644
--- a/pkgs/games/hmcl/default.nix
+++ b/pkgs/games/hmcl/default.nix
@@ -91,7 +91,7 @@ stdenv.mkDerivation (finalAttrs: {
     description = "A Minecraft Launcher which is multi-functional, cross-platform and popular";
     sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.gpl3Only;
-    maintainers = with maintainers; [ rs0vere ];
+    maintainers = with maintainers; [ ];
     inherit (jre.meta) platforms;
   };
 })
diff --git a/pkgs/games/itch/butler.nix b/pkgs/games/itch/butler.nix
index d6d9075997a32..cbd6b8aef9365 100644
--- a/pkgs/games/itch/butler.nix
+++ b/pkgs/games/itch/butler.nix
@@ -31,7 +31,7 @@ buildGoModule rec {
 
   proxyVendor = true;
 
-  vendorSha256 = "sha256-CtBwc5mcgLvl2Bvg5gI+ULJMQEEibx1aN3IpmRNUtwE=";
+  vendorHash = "sha256-CtBwc5mcgLvl2Bvg5gI+ULJMQEEibx1aN3IpmRNUtwE=";
 
   doCheck = false;
 
diff --git a/pkgs/games/klavaro/default.nix b/pkgs/games/klavaro/default.nix
index 79585e74a0954..b99969bf6a814 100644
--- a/pkgs/games/klavaro/default.nix
+++ b/pkgs/games/klavaro/default.nix
@@ -12,11 +12,11 @@
 
 stdenv.mkDerivation rec {
   pname = "klavaro";
-  version = "3.13";
+  version = "3.14";
 
   src = fetchurl {
     url = "mirror://sourceforge/klavaro/${pname}-${version}.tar.bz2";
-    sha256 = "0z6c3lqikk50mkz3ipm93l48qj7b98lxyip8y6ndg9y9k0z0n878";
+    hash = "sha256-hxh+SdMBxRDmlkCYzbYSEmvwMNKodf15nq3K0+rlbas=";
   };
 
   nativeBuildInputs = [ intltool makeWrapper pkg-config ];
@@ -26,8 +26,6 @@ stdenv.mkDerivation rec {
     substituteInPlace src/tutor.c --replace '"espeak ' '"${espeak}/bin/espeak '
   '';
 
-  patches = [ ./icons.patch ./trans_lang_get_similar.patch ];
-
   postInstall = ''
     wrapProgram $out/bin/klavaro \
       --prefix LD_LIBRARY_PATH : $out/lib
diff --git a/pkgs/games/klavaro/icons.patch b/pkgs/games/klavaro/icons.patch
deleted file mode 100644
index 1717fdf44e687..0000000000000
--- a/pkgs/games/klavaro/icons.patch
+++ /dev/null
@@ -1,146 +0,0 @@
---- a/data/klavaro.glade	(revision 137)
-+++ b/data/klavaro.glade	(working copy)
-@@ -311,7 +311,7 @@
-                       <object class="GtkImage" id="image24">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-delete</property>
-+                        <property name="icon-name">edit-delete</property>
-                       </object>
-                       <packing>
-                         <property name="expand">False</property>
-@@ -708,7 +708,7 @@
-                     <property name="can-default">True</property>
-                     <property name="has-default">True</property>
-                     <property name="tooltip-text" translatable="yes">Drag and drop text here to practice with it.</property>
--                    <property name="secondary-icon-name">gtk-clear</property>
-+                    <property name="secondary-icon-name">edit-clear</property>
-                     <property name="secondary-icon-tooltip-text" translatable="yes">Press here to restart the exercise. Hotkey: [Ctrl-R]</property>
-                     <property name="secondary-icon-tooltip-markup" translatable="yes">Press here to restart the exercise. Hotkey: [Ctrl-R]</property>
-                     <signal name="activate" handler="on_entry_mesg_activate" after="yes" swapped="no"/>
-@@ -1232,7 +1232,7 @@
-                       <object class="GtkImage" id="image27">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-delete</property>
-+                        <property name="icon-name">edit-delete</property>
-                       </object>
-                       <packing>
-                         <property name="expand">False</property>
-@@ -1352,7 +1352,7 @@
-                       <object class="GtkImage" id="image23">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-open</property>
-+                        <property name="icon-name">document-open</property>
-                       </object>
-                       <packing>
-                         <property name="expand">True</property>
-@@ -1510,7 +1510,7 @@
-                       <object class="GtkImage" id="image11">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-open</property>
-+                        <property name="icon-name">document-open</property>
-                         <property name="icon_size">2</property>
-                       </object>
-                       <packing>
-@@ -1557,7 +1557,7 @@
-                       <object class="GtkImage" id="image6">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-paste</property>
-+                        <property name="icon-name">edit-paste</property>
-                         <property name="icon_size">2</property>
-                       </object>
-                       <packing>
-@@ -1604,7 +1604,7 @@
-                       <object class="GtkImage" id="image19">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-delete</property>
-+                        <property name="icon-name">edit-delete</property>
-                         <property name="icon_size">2</property>
-                       </object>
-                       <packing>
-@@ -2051,7 +2051,7 @@
-                       <object class="GtkImage" id="image14">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-delete</property>
-+                        <property name="icon-name">edit-delete</property>
-                       </object>
-                       <packing>
-                         <property name="expand">False</property>
-@@ -2343,7 +2343,7 @@
-                   <object class="GtkImage" id="image3">
-                     <property name="visible">True</property>
-                     <property name="can-focus">False</property>
--                    <property name="icon-name">gtk-media-rewind</property>
-+                    <property name="icon-name">media-seek-backward</property>
-                     <property name="icon_size">1</property>
-                   </object>
-                 </child>
-@@ -2418,7 +2418,7 @@
-                       <object class="GtkImage" id="image20">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-go-back</property>
-+                        <property name="icon-name">go-previous</property>
-                       </object>
-                       <packing>
-                         <property name="expand">False</property>
-@@ -2469,7 +2469,7 @@
-                       <object class="GtkImage" id="image18">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-go-forward</property>
-+                        <property name="icon-name">go-next</property>
-                       </object>
-                       <packing>
-                         <property name="expand">False</property>
-@@ -2577,7 +2577,7 @@
-                       <object class="GtkImage" id="image13">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-save</property>
-+                        <property name="icon-name">document-save</property>
-                       </object>
-                       <packing>
-                         <property name="expand">False</property>
-@@ -2825,7 +2825,7 @@
-                       <object class="GtkImage" id="image_basic">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-strikethrough</property>
-+                        <property name="icon-name">format-text-strikethrough</property>
-                         <property name="icon_size">6</property>
-                       </object>
-                       <packing>
-@@ -2901,7 +2901,7 @@
-                       <object class="GtkImage" id="image_adapt">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-bold</property>
-+                        <property name="icon-name">format-text-bold</property>
-                         <property name="icon_size">6</property>
-                       </object>
-                       <packing>
-@@ -3630,7 +3630,7 @@
-                       <object class="GtkImage" id="image_top10_publish">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-goto-top</property>
-+                        <property name="icon-name">go-top</property>
-                       </object>
-                       <packing>
-                         <property name="expand">False</property>
-@@ -3678,7 +3678,7 @@
-                       <object class="GtkImage" id="image_top10_update">
-                         <property name="visible">True</property>
-                         <property name="can-focus">False</property>
--                        <property name="icon-name">gtk-goto-bottom</property>
-+                        <property name="icon-name">go-bottom</property>
-                       </object>
-                       <packing>
-                         <property name="expand">False</property>
diff --git a/pkgs/games/klavaro/trans_lang_get_similar.patch b/pkgs/games/klavaro/trans_lang_get_similar.patch
deleted file mode 100644
index 3b6644c5f7f7d..0000000000000
--- a/pkgs/games/klavaro/trans_lang_get_similar.patch
+++ /dev/null
@@ -1,71 +0,0 @@
---- a/src/translation.c	(revision 137)
-+++ b/src/translation.c	(working copy)
-@@ -257,23 +257,23 @@
-  * Private auxiliar function
-  */
- static gboolean
--trans_lang_get_similar (gchar * test)
-+trans_lang_get_similar (gchar ** test)
- {
- 	gint i;
- 	gchar aux_code_2[3];
- 
- 	/* Prefer C over en_GB for English variants other than en_GB. (Debian patch 02) */
--	if (g_str_has_prefix (test, "en"))
-+	if (g_str_has_prefix (*test, "en"))
- 	{
--		g_free (test);
--		test = g_strdup ("C");
-+		g_free (*test);
-+		*test = g_strdup ("C");
- 		return (TRUE);
- 	}
- 
--	if (g_str_equal (test, "C"))
-+	if (g_str_equal (*test, "C"))
- 		return TRUE;
- 
--	strncpy (aux_code_2, test, 2);
-+	strncpy (aux_code_2, *test, 2);
- 	aux_code_2[2] = '\0';
- 
- 	for (i = 0; i < lang_num; i++)
-@@ -280,15 +280,15 @@
- 	{
- 		if (strstr (lang[i].code, aux_code_2))
- 		{
--			g_free (test);
--			test = g_strdup (lang[i].code);
-+			g_free (*test);
-+			*test = g_strdup (lang[i].code);
- 			break;
- 		}
- 	}
--	if (i == lang_num && g_str_has_prefix (test, "en"))
-+	if (i == lang_num && g_str_has_prefix (*test, "en"))
- 	{
--		g_free (test);
--		test = g_strdup ("C");
-+		g_free (*test);
-+		*test = g_strdup ("C");
- 		return (TRUE);
- 	}
- 	return (i == lang_num ? FALSE : TRUE);
-@@ -356,7 +356,7 @@
- 					lang_ok = (i == 0 ? TRUE : FALSE);
- 					break;
- 				}
--				lang_ok = trans_lang_get_similar (tmp_code);
-+				lang_ok = trans_lang_get_similar (&tmp_code);
- 				if (lang_ok == TRUE)
- 					break;
- 				g_free (tmp_code);
-@@ -368,7 +368,7 @@
- 		tmp_code = g_win32_getlocale ();
- 		lang_ok = trans_lang_is_available (tmp_code);
- 		if (lang_ok == FALSE)
--			lang_ok = trans_lang_get_similar (tmp_code);
-+			lang_ok = trans_lang_get_similar (&tmp_code);
- #endif
- 	}
- 	if (tmp_code == NULL)
diff --git a/pkgs/games/ldmud/default.nix b/pkgs/games/ldmud/default.nix
index e676ce1a5cd7f..41348fa0bcfaa 100644
--- a/pkgs/games/ldmud/default.nix
+++ b/pkgs/games/ldmud/default.nix
@@ -28,13 +28,13 @@
 
 stdenv.mkDerivation rec {
   pname = "ldmud";
-  version = "3.6.6";
+  version = "3.6.7";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = version;
-    sha256 = "sha256-2TaFt+T9B5Df6KWRQcbhY1E1D6NISb0oqLgyX47f5lI=";
+    sha256 = "sha256-PkrjP7tSZMaj61Hsn++7+CumhqFPLbf0+eAI6afP9HA=";
   };
 
   sourceRoot = "${src.name}/src";
diff --git a/pkgs/games/lgames/lbreakouthd/default.nix b/pkgs/games/lgames/lbreakouthd/default.nix
index 9510edd7932a5..d5f78facca2a9 100644
--- a/pkgs/games/lgames/lbreakouthd/default.nix
+++ b/pkgs/games/lgames/lbreakouthd/default.nix
@@ -10,11 +10,11 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "lbreakouthd";
-  version = "1.1.3";
+  version = "1.1.4";
 
   src = fetchurl {
     url = "mirror://sourceforge/lgames/lbreakouthd-${finalAttrs.version}.tar.gz";
-    hash = "sha256-BpF583f2if4FeJ2Fi/8GZYuh5T37GXdNq/Ww4LM65wY=";
+    hash = "sha256-fJGhGg6da/leHI52fDeVlRHOrrV0xedSEMHyC1PpNII=";
   };
 
   buildInputs = [
diff --git a/pkgs/games/lgames/lpairs2/default.nix b/pkgs/games/lgames/lpairs2/default.nix
index c8b044879466f..7993fd0657dac 100644
--- a/pkgs/games/lgames/lpairs2/default.nix
+++ b/pkgs/games/lgames/lpairs2/default.nix
@@ -10,11 +10,11 @@
 
 stdenv.mkDerivation rec {
   pname = "lpairs2";
-  version = "2.2.1";
+  version = "2.3";
 
   src = fetchurl {
     url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
-    hash = "sha256-n2/3QxsnRzVgzKzOUF6RLzpHJ2R8z67Mkjwdh2ghn28=";
+    hash = "sha256-gw1BNkcztyTuoXRdx5+TBZNJEJNrLCfEUCQ1JzROogA=";
   };
 
   buildInputs = [
diff --git a/pkgs/games/lgames/ltris/default.nix b/pkgs/games/lgames/ltris/default.nix
index aaa4a7c34e94a..8cf581b376bf6 100644
--- a/pkgs/games/lgames/ltris/default.nix
+++ b/pkgs/games/lgames/ltris/default.nix
@@ -8,11 +8,11 @@
 
 stdenv.mkDerivation rec {
   pname = "ltris";
-  version = "1.2.6";
+  version = "1.2.7";
 
   src = fetchurl {
     url = "mirror://sourceforge/lgames/${pname}-${version}.tar.gz";
-    hash = "sha256-wjziFFTAOJxSl6fvLhTv6ATZQGJefusDhqKXgOwsRvY=";
+    hash = "sha256-EpHGpkLQa57hU6wKLnhVosmD6DnGGPGilN8E2ClSXLA=";
   };
 
   buildInputs = [
diff --git a/pkgs/games/lunar-client/default.nix b/pkgs/games/lunar-client/default.nix
index 3bc493f5d025a..042259fcfae22 100644
--- a/pkgs/games/lunar-client/default.nix
+++ b/pkgs/games/lunar-client/default.nix
@@ -1,45 +1,40 @@
-{ appimageTools, lib, fetchurl, makeDesktopItem }:
+{ appimageTools
+, fetchurl
+, lib
+, makeWrapper
+}:
 
 let
-  name = "lunar-client";
-  version = "2.15.1";
-
-  desktopItem = makeDesktopItem {
-    name = "lunar-client";
-    exec = "lunar-client";
-    icon = "lunarclient";
-    comment = "Minecraft 1.7, 1.8, 1.12, 1.15, 1.16, 1.17, and 1.18 Client";
-    desktopName = "Lunar Client";
-    genericName = "Minecraft Client";
-    categories = [ "Game" ];
-  };
-
-  appimageContents = appimageTools.extract {
-    inherit name src;
-  };
+  pname = "lunar-client";
+  version = "3.1.0";
 
   src = fetchurl {
     url = "https://launcherupdates.lunarclientcdn.com/Lunar%20Client-${version}.AppImage";
-    name = "lunar-client.AppImage";
-    hash = "sha256-8F6inLctNLCrTvO/f4IWHclpm/6vqW44NKbct0Epp4s=";
+    hash = "sha256-6OAGNkMyHOZI5wh92OtalnvUVFWNAS9PvkFS0e4YXhk=";
   };
+
+  appimageContents = appimageTools.extract { inherit pname version src; };
 in
-appimageTools.wrapType1 rec {
-  inherit name src;
+appimageTools.wrapType2 rec {
+  inherit pname version src;
 
   extraInstallCommands = ''
-    mkdir -p $out/share/applications
-    cp ${desktopItem}/share/applications/* $out/share/applications
-    cp -r ${appimageContents}/usr/share/icons/ $out/share/
+    mv $out/bin/{${pname}-${version},${pname}}
+    source "${makeWrapper}/nix-support/setup-hook"
+    wrapProgram $out/bin/${pname} \
+      --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}"
+    install -Dm444 ${appimageContents}/launcher.desktop $out/share/applications/lunar-client.desktop
+    install -Dm444 ${appimageContents}/launcher.png $out/share/pixmaps/lunar-client.png
+    substituteInPlace $out/share/applications/lunar-client.desktop \
+      --replace 'Exec=AppRun --no-sandbox %U' 'Exec=lunar-client' \
+      --replace 'Icon=launcher' 'Icon=lunar-client'
   '';
 
-  extraPkgs = pkgs: [ pkgs.libpulseaudio ];
-
   meta = with lib; {
-    description = "Minecraft 1.7, 1.8, 1.12, 1.15, 1.16, 1.17, and 1.18 Client";
+    description = "Free Minecraft client with mods, cosmetics, and performance boost.";
     homepage = "https://www.lunarclient.com/";
     license = with licenses; [ unfree ];
-    maintainers = with maintainers; [ zyansheep Technical27 ];
+    maintainers = with maintainers; [ zyansheep Technical27 surfaceflinger ];
     platforms = [ "x86_64-linux" ];
   };
 }
diff --git a/pkgs/games/lzwolf/default.nix b/pkgs/games/lzwolf/default.nix
index 7598022f31b1a..37bcc7fc8e06e 100644
--- a/pkgs/games/lzwolf/default.nix
+++ b/pkgs/games/lzwolf/default.nix
@@ -38,7 +38,6 @@ stdenv.mkDerivation rec {
   ];
 
   cmakeFlags = [
-    "-DCMAKE_BUILD_TYPE=Release"
     "-DGPL=ON"
   ];
 
diff --git a/pkgs/games/mindustry/default.nix b/pkgs/games/mindustry/default.nix
index fdfad0cab2e72..2bf239579e4a4 100644
--- a/pkgs/games/mindustry/default.nix
+++ b/pkgs/games/mindustry/default.nix
@@ -37,7 +37,7 @@
 
 let
   pname = "mindustry";
-  version = "145.1";
+  version = "146";
   buildVersion = makeBuildVersion version;
 
   selectedGlew = if enableWayland then glew-egl else glew;
@@ -46,13 +46,13 @@ let
     owner = "Anuken";
     repo = "Mindustry";
     rev = "v${version}";
-    hash = "sha256-xHF+3QIzP6Xekm1arXio4dAveOQpY9MXuiUC7OZFSUA=";
+    hash = "sha256-pJAJjb8rgDL5q2hfuXH2Cyb1Szu4GixeXoLMdnIAlno=";
   };
   Arc = fetchFromGitHub {
     owner = "Anuken";
     repo = "Arc";
     rev = "v${version}";
-    hash = "sha256-HkJoYdnC4rwTMEmSO0r82cuhY3ZT7Baj3pyqSbzJrQ4=";
+    hash = "sha256-L+5fshI1oo1lVdTMTBuPzqtEeR2dq1NORP84rZ83rT0=";
   };
   soloud = fetchFromGitHub {
     owner = "Anuken";
@@ -131,7 +131,7 @@ let
         | sh
     '';
     outputHashMode = "recursive";
-    outputHash = "sha256-tSQV9A4uxKUVEJuFRxCQVZNb+0wEQrZofQOluQe0cfA=";
+    outputHash = "sha256-hbWLsWorEo+1BBURvrFMXpxvZjJBZ1p7HVlJN5e5JZc=";
   };
 
 in
diff --git a/pkgs/games/minesweep-rs/default.nix b/pkgs/games/minesweep-rs/default.nix
index 59f4f057fc041..2cc65cd2c6672 100644
--- a/pkgs/games/minesweep-rs/default.nix
+++ b/pkgs/games/minesweep-rs/default.nix
@@ -5,16 +5,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "minesweep-rs";
-  version = "6.0.29";
+  version = "6.0.35";
 
   src = fetchFromGitHub {
     owner = "cpcloud";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-PgZ9fL+g2X3CddPVD/JRrIFbw7GS73ELD3EhhR9BAUc=";
+    hash = "sha256-IxyryBWU4NULjcQtUXHel533JosAmp0d0w/+Ntl2aT0=";
   };
 
-  cargoHash = "sha256-c06TfslXGAshR1HXz6PCI26DMpFsb6OrzQ38p4RgsAw=";
+  cargoHash = "sha256-BGjxZxT7iypvhusyx6K4yvK1S7j4WlvoSTkb79d/H1s=";
 
   meta = with lib; {
     description = "Sweep some mines for fun, and probably not for profit";
diff --git a/pkgs/games/nanosaur/default.nix b/pkgs/games/nanosaur/default.nix
index 5460d3d87e025..4ec59b726ee3c 100644
--- a/pkgs/games/nanosaur/default.nix
+++ b/pkgs/games/nanosaur/default.nix
@@ -20,8 +20,6 @@ stdenv.mkDerivation rec {
     SDL2
   ];
 
-  cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ];
-
   installPhase = ''
     runHook preInstall
     mkdir -p "$out/bin"
diff --git a/pkgs/games/nanosaur2/default.nix b/pkgs/games/nanosaur2/default.nix
index 423d40e71c6cf..7ab77623e6533 100644
--- a/pkgs/games/nanosaur2/default.nix
+++ b/pkgs/games/nanosaur2/default.nix
@@ -20,8 +20,6 @@ stdenv.mkDerivation rec {
     SDL2
   ];
 
-  cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ];
-
   installPhase = ''
     runHook preInstall
     mkdir -p "$out/bin"
diff --git a/pkgs/games/openmw/default.nix b/pkgs/games/openmw/default.nix
index 3f6ce29c3a333..99c58df372443 100644
--- a/pkgs/games/openmw/default.nix
+++ b/pkgs/games/openmw/default.nix
@@ -1,79 +1,69 @@
 { lib
 , stdenv
-, mkDerivation
-, fetchFromGitHub
+, fetchFromGitLab
 , fetchpatch
 , cmake
 , pkg-config
 , wrapQtAppsHook
-, openscenegraph
-, mygui
+, SDL2
+, CoreMedia
+, VideoToolbox
+, VideoDecodeAcceleration
+, boost
 , bullet
 , ffmpeg
-, boost
-, SDL2
-, unshield
-, openal
 , libXt
+, luajit
 , lz4
+, mygui
+, openal
+, openscenegraph
 , recastnavigation
-, VideoDecodeAcceleration
+, unshield
+, yaml-cpp
 }:
 
 let
-  openscenegraph_openmw = (openscenegraph.override { colladaSupport = true; })
-    .overrideDerivation (self: {
-      src = fetchFromGitHub {
-        owner = "OpenMW";
-        repo = "osg";
-        rev = "bbe61c3bc510a4f5bb4aea21cce506519c2d24e6";
-        sha256 = "sha256-t3smLqstp7wWfi9HXJoBCek+3acqt/ySBYF8RJOG6Mo=";
-      };
-      patches = [
-        (fetchpatch {
-          # For Darwin, OSG doesn't build some plugins as they're redundant with QuickTime.
-          # OpenMW doesn't like this, and expects them to be there. Apply their patch for it.
-          name = "darwin-osg-plugins-fix.patch";
-          url = "https://gitlab.com/OpenMW/openmw-dep/-/raw/0abe3c9c3858211028d881d7706813d606335f72/macos/osg.patch";
-          sha256 = "sha256-/CLRZofZHot8juH78VG1/qhTHPhy5DoPMN+oH8hC58U=";
-        })
-      ];
-    });
+  GL = "GLVND"; # or "LEGACY";
+
+  osg' = (openscenegraph.override { colladaSupport = true; }).overrideDerivation (old: {
+    patches = [
+      (fetchpatch {
+        # Darwin: Without this patch, OSG won't build osgdb_png.so, which is required by OpenMW.
+        name = "darwin-osg-plugins-fix.patch";
+        url = "https://gitlab.com/OpenMW/openmw-dep/-/raw/0abe3c9c3858211028d881d7706813d606335f72/macos/osg.patch";
+        sha256 = "sha256-/CLRZofZHot8juH78VG1/qhTHPhy5DoPMN+oH8hC58U=";
+      })
+    ];
+    cmakeFlags = (old.cmakeFlags or [ ]) ++ [
+      "-Wno-dev"
+      "-DOpenGL_GL_PREFERENCE=${GL}"
+      "-DBUILD_OSG_PLUGINS_BY_DEFAULT=0"
+      "-DBUILD_OSG_DEPRECATED_SERIALIZERS=0"
+    ] ++ (map (e: "-DBUILD_OSG_PLUGIN_${e}=1") [ "BMP" "DAE" "DDS" "FREETYPE" "JPEG" "OSG" "PNG" "TGA" ]);
+  });
 
-  bullet_openmw = bullet.overrideDerivation (old: rec {
-    version = "3.17";
-    src = fetchFromGitHub {
-      owner = "bulletphysics";
-      repo = "bullet3";
-      rev = version;
-      sha256 = "sha256-uQ4X8F8nmagbcFh0KexrmnhHIXFSB3A1CCnjPVeHL3Q=";
-    };
-    patches = [];
-    cmakeFlags = (old.cmakeFlags or []) ++ [
+  bullet' = bullet.overrideDerivation (old: {
+    cmakeFlags = (old.cmakeFlags or [ ]) ++ [
+      "-Wno-dev"
+      "-DOpenGL_GL_PREFERENCE=${GL}"
       "-DUSE_DOUBLE_PRECISION=ON"
       "-DBULLET2_MULTITHREADING=ON"
     ];
   });
 
 in
-mkDerivation rec {
+stdenv.mkDerivation rec {
   pname = "openmw";
-  version = "0.47.0";
+  version = "0.48.0";
 
-  src = fetchFromGitHub {
+  src = fetchFromGitLab {
     owner = "OpenMW";
     repo = "openmw";
     rev = "${pname}-${version}";
-    sha256 = "sha256-Xq9hDUTCQr79Zzjk0CsiXclVTHK6nrSowukIQqVdrKY=";
+    hash = "sha256-zkjVt3GfQZsFXl2Ht3lCuQtDMYQWxhdFO4aGSb3rsyo=";
   };
 
-  patches = [
-    (fetchpatch {
-      url = "https://gitlab.com/OpenMW/openmw/-/merge_requests/1239.diff";
-      sha256 = "sha256-RhbIGeE6GyqnipisiMTwWjcFnIiR055hUPL8IkjPgZw=";
-    })
-  ];
-
   postPatch = ''
     sed '1i#include <memory>' -i components/myguiplatform/myguidatamanager.cpp # gcc12
   '' + lib.optionalString stdenv.isDarwin ''
@@ -84,27 +74,30 @@ mkDerivation rec {
   nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
 
   # If not set, OSG plugin .so files become shell scripts on Darwin.
-  dontWrapQtApps = true;
+  dontWrapQtApps = stdenv.isDarwin;
 
   buildInputs = [
     SDL2
     boost
-    bullet_openmw
+    bullet'
     ffmpeg
     libXt
+    luajit
+    lz4
     mygui
     openal
-    openscenegraph_openmw
-    unshield
-    lz4
+    osg'
     recastnavigation
+    unshield
+    yaml-cpp
   ] ++ lib.optionals stdenv.isDarwin [
+    CoreMedia
     VideoDecodeAcceleration
+    VideoToolbox
   ];
 
   cmakeFlags = [
-    # as of 0.46, openmw is broken with GLVND
-    "-DOpenGL_GL_PREFERENCE=LEGACY"
+    "-DOpenGL_GL_PREFERENCE=${GL}"
     "-DOPENMW_USE_SYSTEM_RECASTNAVIGATION=1"
   ] ++ lib.optionals stdenv.isDarwin [
     "-DOPENMW_OSX_DEPLOYMENT=ON"
diff --git a/pkgs/games/openmw/tes3mp.nix b/pkgs/games/openmw/tes3mp.nix
index f236bc8cd5e5c..48454b42df299 100644
--- a/pkgs/games/openmw/tes3mp.nix
+++ b/pkgs/games/openmw/tes3mp.nix
@@ -3,6 +3,7 @@
 , cmake
 , openmw
 , fetchFromGitHub
+, fetchpatch
 , luajit
 , makeWrapper
 , symlinkJoin
@@ -26,7 +27,6 @@ let
     };
 
     cmakeFlags = [
-      "-DCMAKE_BUILD_TYPE=Release"
       "-DCRABNET_ENABLE_DLL=OFF"
     ];
 
@@ -86,8 +86,15 @@ let
         --replace "\"./\"" "\"$out/bin/\""
     '';
 
-    # https://github.com/TES3MP/openmw-tes3mp/issues/552
-    patches = oldAttrs.patches ++ [ ./tes3mp.patch ];
+    patches = [
+      (fetchpatch {
+        url = "https://gitlab.com/OpenMW/openmw/-/commit/98a7d90ee258ceef9c70b0b2955d0458ec46f048.patch";
+        sha256 = "sha256-RhbIGeE6GyqnipisiMTwWjcFnIiR055hUPL8IkjPgZw=";
+      })
+
+      # https://github.com/TES3MP/openmw-tes3mp/issues/552
+      ./tes3mp.patch
+    ];
 
     env.NIX_CFLAGS_COMPILE = "-fpermissive";
 
diff --git a/pkgs/games/openttd/jgrpp.nix b/pkgs/games/openttd/jgrpp.nix
index da113ed1afc2d..b8b0716976672 100644
--- a/pkgs/games/openttd/jgrpp.nix
+++ b/pkgs/games/openttd/jgrpp.nix
@@ -2,13 +2,13 @@
 
 openttd.overrideAttrs (oldAttrs: rec {
   pname = "openttd-jgrpp";
-  version = "0.54.4";
+  version = "0.55.3";
 
   src = fetchFromGitHub rec {
     owner = "JGRennison";
     repo = "OpenTTD-patches";
     rev = "jgrpp-${version}";
-    hash = "sha256-bTpHlKffQbANXIrAn9WSEK/PEzBW1nzaHhGKIyclAo0=";
+    hash = "sha256-E1+pXpXNHOu9nPTGSY8baVaKf1Um6IGDjpi1MmENez8=";
   };
 
   buildInputs = oldAttrs.buildInputs ++ [ zstd ];
diff --git a/pkgs/games/osu-lazer/bin.nix b/pkgs/games/osu-lazer/bin.nix
index 0854b38611738..683288260d900 100644
--- a/pkgs/games/osu-lazer/bin.nix
+++ b/pkgs/games/osu-lazer/bin.nix
@@ -7,21 +7,21 @@
 
 let
   pname = "osu-lazer-bin";
-  version = "2023.815.0";
+  version = "2023.1008.1";
   name = "${pname}-${version}";
 
   osu-lazer-bin-src = {
     aarch64-darwin = {
       url = "https://github.com/ppy/osu/releases/download/${version}/osu.app.Apple.Silicon.zip";
-      sha256 = "sha256-lijX8UOSWZPzQdA+DOPcgKW3PxKFbNtBSUrq903zx7E=";
+      sha256 = "sha256-eL5UVZqAH7Ta442xIDjaOPu3NXJmck+lS+BoD/qnOMs=";
     };
     x86_64-darwin = {
       url = "https://github.com/ppy/osu/releases/download/${version}/osu.app.Intel.zip";
-      sha256 = "sha256-XuQ82h/ebo7oWcWq4vUOguh6FUsWO+xFpz7Z++DjkzY=";
+      sha256 = "sha256-x/HL73Fao11GVj7uMFpx4uOKv8Gmiy1PEgee2sP1fvg=";
     };
     x86_64-linux = {
       url = "https://github.com/ppy/osu/releases/download/${version}/osu.AppImage";
-      sha256 = "sha256-wRWJQQ4rn3A8Dd53gPt62pOtd9KRmYXxuejd8RGOAdw=";
+      sha256 = "sha256-QqyymPkeRcedK75O9S0zO8DrUmPKuC7Mp4SbXT+QM9I=";
     };
   }.${stdenv.system} or (throw "${pname}-${version}: ${stdenv.system} is unsupported.");
 
@@ -70,7 +70,7 @@ let
       unfreeRedistributable # osu-framework contains libbass.so in repository
     ];
     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
-    maintainers = with maintainers; [ delan stepbrobd ];
+    maintainers = with maintainers; [ delan stepbrobd spacefault ];
     mainProgram = "osu!";
     platforms = [ "aarch64-darwin" "x86_64-darwin" "x86_64-linux" ];
   };
diff --git a/pkgs/games/otto-matic/default.nix b/pkgs/games/otto-matic/default.nix
index 800b97b2b86ee..c56db251a1b01 100644
--- a/pkgs/games/otto-matic/default.nix
+++ b/pkgs/games/otto-matic/default.nix
@@ -21,8 +21,6 @@ stdenv.mkDerivation rec {
     SDL2
   ];
 
-  cmakeFlags = [ "-DCMAKE_BUILD_TYPE=Release" ];
-
   installPhase = ''
     runHook preInstall
 
diff --git a/pkgs/games/papermc/default.nix b/pkgs/games/papermc/default.nix
index 2fa4545362daf..20861779185ce 100644
--- a/pkgs/games/papermc/default.nix
+++ b/pkgs/games/papermc/default.nix
@@ -1,40 +1,50 @@
-{ lib, stdenv, fetchurl, bash, jre }:
-
-stdenv.mkDerivation rec {
+{
+  lib,
+  stdenvNoCC,
+  fetchurl,
+  jre,
+  makeBinaryWrapper,
+}:
+stdenvNoCC.mkDerivation (finalAttrs: {
   pname = "papermc";
-  version = "1.20.1.83";
-
-  jar = let
-    mcVersion = lib.versions.pad 3 version;
-    buildNum = builtins.elemAt (lib.versions.splitVersion version) 3;
-  in fetchurl {
-    url = "https://papermc.io/api/v2/projects/paper/versions/${mcVersion}/builds/${buildNum}/downloads/paper-${mcVersion}-${buildNum}.jar";
-    sha256 = "sha256-HQpc3MOXa1wkXqgm9ciQj04FUIyuupnYiu+2RZ/sXE4=";
-  };
+  version = "1.20.2.234";
 
-  preferLocalBuild = true;
+  src =
+    let
+      mcVersion = lib.versions.pad 3 finalAttrs.version;
+      buildNum = builtins.elemAt (lib.splitVersion finalAttrs.version) 3;
+    in
+    fetchurl {
+      url = "https://papermc.io/api/v2/projects/paper/versions/${mcVersion}/builds/${buildNum}/downloads/paper-${mcVersion}-${buildNum}.jar";
+      hash = "sha256-fR7Dq09iFGVXodQjrS7Hg4NcrKPJbNg0hexU520JC6c=";
+    };
 
-  dontUnpack = true;
-  dontConfigure = true;
+  installPhase = ''
+    runHook preInstall
 
-  buildPhase = ''
-    cat > minecraft-server << EOF
-    #!${bash}/bin/sh
-    exec ${jre}/bin/java \$@ -jar $out/share/papermc/papermc.jar nogui
-  '';
+    install -D $src $out/share/papermc/papermc.jar
 
-  installPhase = ''
-    install -Dm444 ${jar} $out/share/papermc/papermc.jar
-    install -Dm555 -t $out/bin minecraft-server
+    makeWrapper ${lib.getExe jre} "$out/bin/minecraft-server" \
+      --append-flags "-jar $out/share/papermc/papermc.jar nogui"
+
+    runHook postInstall
   '';
 
+  nativeBuildInputs = [
+    makeBinaryWrapper
+  ];
+
+  dontUnpack = true;
+  preferLocalBuild = true;
+  allowSubstitutes = false;
+
   meta = {
     description = "High-performance Minecraft Server";
-    homepage    = "https://papermc.io/";
+    homepage = "https://papermc.io/";
     sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
-    license     = lib.licenses.gpl3Only;
-    platforms   = lib.platforms.unix;
+    license = lib.licenses.gpl3Only;
+    platforms = lib.platforms.unix;
     maintainers = with lib.maintainers; [ aaronjanse neonfuz ];
     mainProgram = "minecraft-server";
   };
-}
+})
diff --git a/pkgs/games/path-of-building/default.nix b/pkgs/games/path-of-building/default.nix
index 9b5bcdd1add03..1fa07f92ccee2 100644
--- a/pkgs/games/path-of-building/default.nix
+++ b/pkgs/games/path-of-building/default.nix
@@ -2,13 +2,13 @@
 let
   data = stdenv.mkDerivation(finalAttrs: {
     pname = "path-of-building-data";
-    version = "2.33.5";
+    version = "2.34.1";
 
     src = fetchFromGitHub {
       owner = "PathOfBuildingCommunity";
       repo = "PathOfBuilding";
       rev = "v${finalAttrs.version}";
-      hash = "sha256-a7/xuVfsLQaSsmHVFKqDEypCunFQtHvcVISaQD1YCEs=";
+      hash = "sha256-i6OCW5Vc9/LfNuiaEeelmXiqP7+WdIklRNRcgWb7L1w=";
     };
 
     nativeBuildInputs = [ unzip ];
diff --git a/pkgs/games/performous/default.nix b/pkgs/games/performous/default.nix
index 2faa90006b558..c82e1d02afc75 100644
--- a/pkgs/games/performous/default.nix
+++ b/pkgs/games/performous/default.nix
@@ -5,9 +5,9 @@
 , aubio
 , boost
 , cmake
-, ffmpeg_4
+, ffmpeg
+, fmt
 , gettext
-, git
 , glew
 , glibmm
 , glm
@@ -15,6 +15,7 @@
 , libepoxy
 , librsvg
 , libxmlxx
+, nlohmann_json
 , pango
 , pkg-config
 , portaudio
@@ -22,17 +23,17 @@
 
 stdenv.mkDerivation rec {
   pname = "performous";
-  version = "1.2.0";
+  version = "1.3.0";
 
   src = fetchFromGitHub {
-    owner = pname;
-    repo = pname;
+    owner = "performous";
+    repo = "performous";
     rev = "refs/tags/${version}";
-    hash = "sha256-ueTSirov/lj4/IzaMqHitbOqx8qqUpsTghcb9DUnNEg=";
+    hash = "sha256-y7kxLht15vULN9NxM0wzj9+7Uq4/3D5j9oBEnrTIwQ8=";
   };
 
   cedSrc = fetchFromGitHub {
-    owner = pname;
+    owner = "performous";
     repo = "compact_enc_det";
     rev = "9ca1351fe0b1e85992a407b0fc54a63e9b3adc6e";
     hash = "sha256-ztfeblR4YnB5+lb+rwOQJjogl+C9vtPH9IVnYO7oxec=";
@@ -46,6 +47,9 @@ stdenv.mkDerivation rec {
   postPatch = ''
     mkdir ced-src
     cp -R ${cedSrc}/* ced-src
+
+    substituteInPlace data/CMakeLists.txt \
+      --replace "/usr" "$out"
   '';
 
   nativeBuildInputs = [
@@ -58,7 +62,8 @@ stdenv.mkDerivation rec {
     SDL2
     aubio
     boost
-    ffmpeg_4
+    ffmpeg
+    fmt
     glew
     glibmm
     glm
@@ -66,6 +71,7 @@ stdenv.mkDerivation rec {
     libepoxy
     librsvg
     libxmlxx
+    nlohmann_json
     pango
     portaudio
   ];
diff --git a/pkgs/games/performous/performous-cmake.patch b/pkgs/games/performous/performous-cmake.patch
index 5c1a4c91012ba..dae399cd54de6 100644
--- a/pkgs/games/performous/performous-cmake.patch
+++ b/pkgs/games/performous/performous-cmake.patch
@@ -1,21 +1,17 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 48af2a89..43786c31 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -75,15 +75,7 @@ else()
- 	message(STATUS "Localization disabled: Gettext tools (msgfmt) missing")
- endif()
- 
--include(FetchContent)
--FetchContent_Declare(ced-sources
--  GIT_REPOSITORY https://github.com/performous/compact_enc_det.git
--  #https://github.com/google/compact_enc_det.git
--  GIT_TAG        master
--  SOURCE_DIR ced-src
--)
+diff --git a/cmake/Modules/FindCed.cmake b/cmake/Modules/FindCed.cmake
+index d6e2aca..3085adb 100644
+--- a/cmake/Modules/FindCed.cmake
++++ b/cmake/Modules/FindCed.cmake
+@@ -1,11 +1 @@
+-include(LibFetchMacros)
+-
+-set(Ced_GIT_VERSION "master")
 -
--FetchContent_MakeAvailable(ced-sources)
-+add_subdirectory(ced-src)
- 
- option(USE_SELF_BUILT_AUBIO "Use custom aubio local build instead of using system lib (if available)" FALSE)
- 
+-libfetch_git_pkg(Ced
+-	REPOSITORY ${SELF_BUILT_GIT_BASE}/compact_enc_det.git
+-	#https://github.com/google/compact_enc_det.git
+-	REFERENCE  ${Ced_GIT_VERSION}
+-	FIND_PATH  compact_enc_det/compact_enc_det.h
+-)
+-message(STATUS "Found Google CED ${Ced_VERSION}")
++add_subdirectory(../ced-src ced-src)
diff --git a/pkgs/games/prismlauncher/0001-launcher-translations-explicitly-convert-QVector-ite.patch b/pkgs/games/prismlauncher/0001-launcher-translations-explicitly-convert-QVector-ite.patch
new file mode 100644
index 0000000000000..c1e4731d01486
--- /dev/null
+++ b/pkgs/games/prismlauncher/0001-launcher-translations-explicitly-convert-QVector-ite.patch
@@ -0,0 +1,36 @@
+From c39637720109dd5d97750907c51e9c0fb8f43f0b Mon Sep 17 00:00:00 2001
+From: Nick Cao <nickcao@nichi.co>
+Date: Wed, 11 Oct 2023 22:51:23 -0400
+Subject: [PATCH] launcher/translations: explicitly convert QVector iterators
+ to pointers
+
+---
+ launcher/translations/TranslationsModel.cpp | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/launcher/translations/TranslationsModel.cpp b/launcher/translations/TranslationsModel.cpp
+index 2763cca2..64c21dbd 100644
+--- a/launcher/translations/TranslationsModel.cpp
++++ b/launcher/translations/TranslationsModel.cpp
+@@ -524,7 +524,7 @@ Language * TranslationsModel::findLanguage(const QString& key)
+     }
+     else
+     {
+-        return found;
++        return &(*found);
+     }
+ }
+ 
+@@ -655,8 +655,7 @@ QModelIndex TranslationsModel::selectedIndex()
+     auto found = findLanguage(d->m_selectedLanguage);
+     if(found)
+     {
+-        // QVector iterator freely converts to pointer to contained type
+-        return index(found - d->m_languages.begin(), 0, QModelIndex());
++        return index(found - &(*d->m_languages.begin()), 0, QModelIndex());
+     }
+     return QModelIndex();
+ }
+-- 
+2.42.0
+
diff --git a/pkgs/games/prismlauncher/default.nix b/pkgs/games/prismlauncher/default.nix
index 63c6901326ee6..2347c8b53ee71 100644
--- a/pkgs/games/prismlauncher/default.nix
+++ b/pkgs/games/prismlauncher/default.nix
@@ -42,7 +42,9 @@ rec {
     sha256 = "sha256-RArg60S91YKp1Mt97a5JNfBEOf2cmuX4pK3VAx2WfqM=";
   };
 
-  patches = lib.optionals stdenv.isDarwin [
+  patches = [
+    ./0001-launcher-translations-explicitly-convert-QVector-ite.patch
+  ] ++ lib.optionals stdenv.isDarwin [
     # https://github.com/PrismLauncher/PrismLauncher/pull/1452
     # These patches allow us to disable the Sparkle updater and cmake bundling
     # TODO: remove these when updating to 8.0
@@ -98,6 +100,7 @@ rec {
   dontWrapQtApps = true;
 
   meta = with lib; {
+    mainProgram = "prismlauncher";
     homepage = "https://prismlauncher.org/";
     description = "A free, open source launcher for Minecraft";
     longDescription = ''
diff --git a/pkgs/games/prismlauncher/wrapper.nix b/pkgs/games/prismlauncher/wrapper.nix
index 89b0b08c229ef..4b0aa418fb6a3 100644
--- a/pkgs/games/prismlauncher/wrapper.nix
+++ b/pkgs/games/prismlauncher/wrapper.nix
@@ -3,6 +3,7 @@
 , symlinkJoin
 , prismlauncher-unwrapped
 , wrapQtAppsHook
+, addOpenGLRunpath
 , qtbase  # needed for wrapQtAppsHook
 , qtsvg
 , qtwayland
@@ -17,10 +18,12 @@
 , flite
 , mesa-demos
 , udev
+, libusb1
 
 , msaClientID ? null
 , gamemodeSupport ? stdenv.isLinux
 , textToSpeechSupport ? stdenv.isLinux
+, controllerSupport ? stdenv.isLinux
 , jdks ? [ jdk17 jdk8 ]
 , additionalLibs ? [ ]
 , additionalPrograms ? [ ]
@@ -71,6 +74,7 @@ symlinkJoin {
       ]
       ++ lib.optional gamemodeSupport gamemode.lib
       ++ lib.optional textToSpeechSupport flite
+      ++ lib.optional controllerSupport libusb1
       ++ additionalLibs;
 
       runtimePrograms = [
@@ -82,7 +86,7 @@ symlinkJoin {
     in
     [ "--prefix PRISMLAUNCHER_JAVA_PATHS : ${lib.makeSearchPath "bin/java" jdks}" ]
     ++ lib.optionals stdenv.isLinux [
-      "--set LD_LIBRARY_PATH /run/opengl-driver/lib:${lib.makeLibraryPath runtimeLibs}"
+      "--set LD_LIBRARY_PATH ${addOpenGLRunpath.driverLink}/lib:${lib.makeLibraryPath runtimeLibs}"
       # xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128
       "--prefix PATH : ${lib.makeBinPath runtimePrograms}"
     ];
diff --git a/pkgs/games/quakespasm/default.nix b/pkgs/games/quakespasm/default.nix
index 51d0528ac9330..b9541d1b274e6 100644
--- a/pkgs/games/quakespasm/default.nix
+++ b/pkgs/games/quakespasm/default.nix
@@ -6,11 +6,11 @@
 
 stdenv.mkDerivation rec {
   pname = "quakespasm";
-  version = "0.95.1";
+  version = "0.96.0";
 
   src = fetchurl {
     url = "mirror://sourceforge/quakespasm/quakespasm-${version}.tar.gz";
-    sha256 = "sha256-hBmEV3s65yQysMiq4zEP4swfCgCCiT5dzZdhg7bSNOI=";
+    sha256 = "sha256-Sa4lLALB3xpMGVjpKnzGl1OBEJcLOHDcFGEFsO0wwOw=";
   };
 
   sourceRoot = "${pname}-${version}/Quake";
diff --git a/pkgs/games/r2modman/default.nix b/pkgs/games/r2modman/default.nix
index c7c8d6a107684..e48ce9e49ffff 100644
--- a/pkgs/games/r2modman/default.nix
+++ b/pkgs/games/r2modman/default.nix
@@ -14,13 +14,13 @@
 
 stdenv.mkDerivation rec {
   pname = "r2modman";
-  version = "3.1.43";
+  version = "3.1.44";
 
   src = fetchFromGitHub {
     owner = "ebkr";
     repo = "r2modmanPlus";
     rev = "v${version}";
-    hash = "sha256-qZeBF58VB/wW0N2MZgZfiIJdDqHUdfruAoCuDEFeCPA=";
+    hash = "sha256-jiYrJtdM2LPwYDAgoGa0hGJcYNRiAKIuDuKZmSZ7OR4=";
   };
 
   offlineCache = fetchYarnDeps {
@@ -28,6 +28,11 @@ stdenv.mkDerivation rec {
     hash = "sha256-CXitb/b2tvTfrkFrFv4KP4WdmMg+1sDtC/s2u5ezDfI=";
   };
 
+  patches = [
+    # Make it possible to launch Steam games from r2modman.
+    ./steam-launch-fix.patch
+  ];
+
   nativeBuildInputs = [
     yarn
     fixup_yarn_lock
diff --git a/pkgs/games/r2modman/steam-launch-fix.patch b/pkgs/games/r2modman/steam-launch-fix.patch
new file mode 100644
index 0000000000000..4a52c8fdb359a
--- /dev/null
+++ b/pkgs/games/r2modman/steam-launch-fix.patch
@@ -0,0 +1,21 @@
+diff --git a/src/r2mm/launching/runners/linux/SteamGameRunner_Linux.ts b/src/r2mm/launching/runners/linux/SteamGameRunner_Linux.ts
+index ddee0e9..fc9ffca 100644
+--- a/src/r2mm/launching/runners/linux/SteamGameRunner_Linux.ts
++++ b/src/r2mm/launching/runners/linux/SteamGameRunner_Linux.ts
+@@ -61,15 +61,9 @@ export default class SteamGameRunner_Linux extends GameRunnerProvider {
+     async start(game: Game, args: string): Promise<void | R2Error> {
+ 
+         const settings = await ManagerSettings.getSingleton(game);
+-        const steamDir = await GameDirectoryResolverProvider.instance.getSteamDirectory();
+-        if(steamDir instanceof R2Error) {
+-            return steamDir;
+-        }
+-
+-        LoggerProvider.instance.Log(LogSeverity.INFO, `Steam directory is: ${steamDir}`);
+ 
+         try {
+-            const cmd = `"${steamDir}/steam.sh" -applaunch ${game.activePlatform.storeIdentifier} ${args} ${settings.getContext().gameSpecific.launchParameters}`;
++            const cmd = `steam -applaunch ${game.activePlatform.storeIdentifier} ${args} ${settings.getContext().gameSpecific.launchParameters}`;
+             LoggerProvider.instance.Log(LogSeverity.INFO, `Running command: ${cmd}`);
+             await exec(cmd);
+         } catch(err) {
diff --git a/pkgs/games/robotfindskitten/default.nix b/pkgs/games/robotfindskitten/default.nix
deleted file mode 100644
index 382c2ef71ae28..0000000000000
--- a/pkgs/games/robotfindskitten/default.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-{ lib, stdenv, fetchurl, pkg-config, ncurses }:
-
-with lib;
-stdenv.mkDerivation rec {
-
-  pname = "robotfindskitten";
-  version = "2.8284271.702";
-
-  src = fetchurl {
-    url = "mirror://sourceforge/project/rfk/robotfindskitten-POSIX/ship_it_anyway/${pname}-${version}.tar.gz";
-    sha256 = "1bwrkxm83r9ajpkd6x03nqvmdfpf5vz6yfy0c97pq3v3ykj74082";
-  };
-
-  nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ ncurses ];
-
-  makeFlags = [ "execgamesdir=$(out)/bin" ];
-
-  postInstall = ''
-    install -Dm644 {nki,$out/share/games/robotfindskitten}/vanilla.nki
-  '';
-
-  meta = {
-    description = "Yet another zen simulation; A simple find-the-kitten game";
-    homepage = "http://robotfindskitten.org/";
-    license = licenses.gpl2;
-    maintainers = [ maintainers.AndersonTorres ];
-    platforms = platforms.unix;
-  };
-}
diff --git a/pkgs/games/sfrotz/default.nix b/pkgs/games/sfrotz/default.nix
index e6b959371995e..e90f1639e1702 100644
--- a/pkgs/games/sfrotz/default.nix
+++ b/pkgs/games/sfrotz/default.nix
@@ -15,14 +15,14 @@
 
 stdenv.mkDerivation rec {
   pname = "sfrotz";
-  version = "2.52";
+  version = "2.54";
 
   src = fetchFromGitLab  {
     domain = "gitlab.com";
     owner = "DavidGriffith";
     repo = "frotz";
     rev = version;
-    sha256 = "11ca1dz31b7s5vxjqncwjwmbbcr2m5v2rxjn49g4gnvwd6mqw48y";
+    sha256 = "sha256-GvGxojD8d5GVy/d8h3q6K7KJroz2lsKbfE0F0acjBl8=";
   };
 
   buildInputs = [
diff --git a/pkgs/games/sgt-puzzles/default.nix b/pkgs/games/sgt-puzzles/default.nix
index bf378cd188de2..8173fb5fe1d2f 100644
--- a/pkgs/games/sgt-puzzles/default.nix
+++ b/pkgs/games/sgt-puzzles/default.nix
@@ -1,16 +1,16 @@
 { lib, stdenv, fetchurl, desktop-file-utils
 , gtk3, libX11, cmake, imagemagick
-, pkg-config, perl, wrapGAppsHook, nixosTests
+, pkg-config, perl, wrapGAppsHook, nixosTests, writeScript
 , isMobile ? false
 }:
 
 stdenv.mkDerivation rec {
   pname = "sgt-puzzles";
-  version = "20220913.27dd36e";
+  version = "20230918.2d9e414";
 
   src = fetchurl {
     url = "http://www.chiark.greenend.org.uk/~sgtatham/puzzles/puzzles-${version}.tar.gz";
-    hash = "sha256-fj1XWuXcW01uuC5dK2wDIrweyruSRdfEZBfmEj99zZE=";
+    hash = "sha256-YsvJ/5DTevRb+sCxWc/KcD2X5IXwAXvWGVfokr06nUM=";
   };
 
   sgt-puzzles-menu = fetchurl {
@@ -59,7 +59,18 @@ stdenv.mkDerivation rec {
     install -Dm644 ${sgt-puzzles-menu} -t $out/etc/xdg/menus/applications-merged/
   '';
 
-  passthru.tests.sgtpuzzles = nixosTests.sgtpuzzles;
+  passthru = {
+    tests.sgt-puzzles = nixosTests.sgt-puzzles;
+    updateScript = writeScript "update-sgt-puzzles" ''
+      #!/usr/bin/env nix-shell
+      #!nix-shell -i bash -p curl pcre common-updater-scripts
+
+      set -eu -o pipefail
+
+      version="$(curl -sI 'https://www.chiark.greenend.org.uk/~sgtatham/puzzles/puzzles.tar.gz' | grep -Fi Location: | pcregrep -o1 'puzzles-([0-9a-f.]*).tar.gz')"
+      update-source-version sgt-puzzles "$version"
+    '';
+  };
 
   meta = with lib; {
     description = "Simon Tatham's portable puzzle collection";
diff --git a/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix b/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix
index 21d542f0d8cdd..9d598798defe0 100644
--- a/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix
+++ b/pkgs/games/space-station-14-launcher/space-station-14-launcher.nix
@@ -31,7 +31,7 @@
 , gdk-pixbuf
 }:
 let
-  version = "0.21.1";
+  version = "0.22.1";
   pname = "space-station-14-launcher";
 in
 buildDotnetModule rec {
@@ -44,7 +44,7 @@ buildDotnetModule rec {
     owner = "space-wizards";
     repo = "SS14.Launcher";
     rev = "v${version}";
-    hash = "sha256-uJ/47cQZsGgrExemWCWeSM/U6eW2HoKWHCsVE2KypVQ=";
+    hash = "sha256-I+Kj8amgFxT6yEXI5s1y0n1rgfzIrLtMOkYjguu6wpo=";
     fetchSubmodules = true;
   };
 
@@ -121,7 +121,7 @@ buildDotnetModule rec {
 
   postInstall = ''
     mkdir -p $out/lib/space-station-14-launcher/loader
-    cp -r SS14.Loader/bin/${buildType}/*/* $out/lib/space-station-14-launcher/loader/
+    cp -r SS14.Loader/bin/${buildType}/*/*/* $out/lib/space-station-14-launcher/loader/
 
     icoFileToHiColorTheme SS14.Launcher/Assets/icon.ico space-station-14-launcher $out
   '';
diff --git a/pkgs/games/srb2/cmake.patch b/pkgs/games/srb2/cmake.patch
index adb070a13c19c..91af532e86fb3 100644
--- a/pkgs/games/srb2/cmake.patch
+++ b/pkgs/games/srb2/cmake.patch
@@ -1,19 +1,61 @@
 diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 915912af5..f5c2cf9cc 100644
+index 80a3bdcd6..380a1573a 100644
 --- a/CMakeLists.txt
 +++ b/CMakeLists.txt
-@@ -91,11 +91,6 @@ if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL Windows)
+@@ -61,7 +61,7 @@ option(
+ 	"Link dependencies using CMake's find_package and do not use internal builds"
+ 	${SRB2_CONFIG_SYSTEM_LIBRARIES_DEFAULT}
+ )
+-option(SRB2_CONFIG_ENABLE_TESTS "Build the test suite" ON)
++option(SRB2_CONFIG_ENABLE_TESTS "Build the test suite" OFF)
+ # This option isn't recommended for distribution builds and probably won't work (yet).
+ cmake_dependent_option(
+ 	SRB2_CONFIG_SHARED_INTERNAL_LIBRARIES
+@@ -80,25 +80,6 @@ option(SRB2_CONFIG_ZDEBUG "Compile with ZDEBUG defined." OFF)
+ option(SRB2_CONFIG_PROFILEMODE "Compile for profiling (GCC only)." OFF)
+ set(SRB2_CONFIG_ASSET_DIRECTORY "" CACHE PATH "Path to directory that contains all asset files for the installer. If set, assets will be part of installation and cpack.")
+ 
+-if(SRB2_CONFIG_ENABLE_TESTS)
+-	# https://github.com/catchorg/Catch2
+-	CPMAddPackage(
+-		NAME Catch2
+-		VERSION 3.4.0
+-		GITHUB_REPOSITORY catchorg/Catch2
+-		OPTIONS
+-			"CATCH_INSTALL_DOCS OFF"
+-	)
+-	list(APPEND CMAKE_MODULE_PATH "${Catch2_SOURCE_DIR}/extras")
+-	include(CTest)
+-	include(Catch)
+-	add_executable(srb2tests)
+-	# To add tests, use target_sources to add individual test files to the target in subdirs.
+-	target_link_libraries(srb2tests PRIVATE Catch2::Catch2 Catch2::Catch2WithMain)
+-	target_compile_features(srb2tests PRIVATE c_std_11 cxx_std_17)
+-	catch_discover_tests(srb2tests)
+-endif()
+-
+ # Enable CCache
+ # (Set USE_CCACHE=ON to use, CCACHE_OPTIONS for options)
+ if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL Windows)
+@@ -113,12 +94,6 @@ if("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL Windows)
+ 			message(WARNING "USE_CCACHE was set but ccache is not found (set CCACHE_TOOL_PATH)")
  		endif()
  	endif()
- else()
+-else()
 -	CPMAddPackage(
 -		NAME Ccache.cmake
 -		GITHUB_REPOSITORY TheLartians/Ccache.cmake
 -		VERSION 1.2
 -	)
  endif()
-
+ 
  # Dependencies
---
-2.40.1
-
+@@ -179,7 +154,7 @@ include(GitUtilities)
+ if("${SRB2_SDL2_EXE_NAME}" STREQUAL "")
+ 	# cause a reconfigure if the branch changes
+ 	get_git_dir(SRB2_GIT_DIR)
+-	configure_file("${SRB2_GIT_DIR}/HEAD" HEAD COPYONLY)
++	#configure_file("${SRB2_GIT_DIR}/HEAD" HEAD COPYONLY)
+ 
+ 	git_current_branch(SRB2_GIT_REVISION)
+ 
diff --git a/pkgs/games/srb2/default.nix b/pkgs/games/srb2/default.nix
index 4213039f8877a..fdb374a917511 100644
--- a/pkgs/games/srb2/default.nix
+++ b/pkgs/games/srb2/default.nix
@@ -20,13 +20,13 @@
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "srb2";
-  version = "2.2.11";
+  version = "2.2.13";
 
   src = fetchFromGitHub {
     owner = "STJr";
     repo = "SRB2";
     rev = "SRB2_release_${finalAttrs.version}";
-    hash = "sha256-tyiXivJWjNnL+4YynUV6k6iaMs8o9HkHrp+qFj2+qvQ=";
+    hash = "sha256-OSkkjCz7ZW5+0vh6l7+TpnHLzXmd/5QvTidRQSHJYX8=";
   };
 
   nativeBuildInputs = [
@@ -57,7 +57,7 @@ stdenv.mkDerivation (finalAttrs: {
 
     src = fetchurl {
       url = "https://github.com/STJr/SRB2/releases/download/SRB2_release_${finalAttrs.version}/SRB2-v${lib.replaceStrings ["."] [""] finalAttrs.version}-Full.zip";
-      hash = "sha256-KsJIkCczD/HyIwEy5dI3zsHbWFCMBaCoCHizfupFoWM=";
+      hash = "sha256-g7kaNRE1tjcF5J2v+kTnrDzz4zs5f1b/NH67ce2ifUo=";
     };
 
     sourceRoot = ".";
@@ -77,8 +77,10 @@ stdenv.mkDerivation (finalAttrs: {
   ];
 
   patches = [
-    # Fix unknown command "CPMAddPackage" by not using Ccache.cmake
+    # Make the build work without internet connectivity
+    # See: https://build.opensuse.org/request/show/1109889
     ./cmake.patch
+    ./thirdparty.patch
   ];
 
   desktopItems = [
@@ -111,5 +113,6 @@ stdenv.mkDerivation (finalAttrs: {
     platforms = platforms.linux;
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ zeratax donovanglover ];
+    mainProgram = "srb2";
   };
 })
diff --git a/pkgs/games/srb2/thirdparty.patch b/pkgs/games/srb2/thirdparty.patch
new file mode 100644
index 0000000000000..bb550290d85d5
--- /dev/null
+++ b/pkgs/games/srb2/thirdparty.patch
@@ -0,0 +1,12 @@
+diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt
+index f33b3bf3f..1214f179c 100644
+--- a/thirdparty/CMakeLists.txt
++++ b/thirdparty/CMakeLists.txt
+@@ -16,6 +16,5 @@ if(NOT "${SRB2_CONFIG_SYSTEM_LIBRARIES}")
+ 	include("cpm-png.cmake")
+ 	include("cpm-curl.cmake")
+ 	include("cpm-openmpt.cmake")
++	include("cpm-libgme.cmake")
+ endif()
+-
+-include("cpm-libgme.cmake")
diff --git a/pkgs/games/steam/fhsenv.nix b/pkgs/games/steam/fhsenv.nix
index bf27895c20f73..a6734b640638e 100644
--- a/pkgs/games/steam/fhsenv.nix
+++ b/pkgs/games/steam/fhsenv.nix
@@ -5,7 +5,7 @@
 , extraProfile ? "" # string to append to profile
 , extraArgs ? "" # arguments to always pass to steam
 , extraEnv ? { } # Environment variables to pass to Steam
-, withGameSpecificLibraries ? true # exclude game specific libraries
+, withGameSpecificLibraries ? true # include game specific libraries
 }:
 
 let
@@ -193,6 +193,7 @@ in buildFHSEnv rec {
     libxcrypt # Alien Isolation, XCOM 2, Company of Heroes 2
     mono
     ncurses # Crusader Kings III
+    openssl
     xorg.xkeyboardconfig
     xorg.libpciaccess
     xorg.libXScrnSaver # Dead Cells
@@ -214,6 +215,7 @@ in buildFHSEnv rec {
     alsa-lib
 
     # Loop Hero
+    # FIXME: Also requires openssl_1_1, which is EOL. Either find an alternative solution, or remove these dependencies (if not needed by other games)
     libidn2
     libpsl
     nghttp2.lib
diff --git a/pkgs/games/stockfish/default.nix b/pkgs/games/stockfish/default.nix
index 2f40b2a346976..bd42da9c70285 100644
--- a/pkgs/games/stockfish/default.nix
+++ b/pkgs/games/stockfish/default.nix
@@ -11,23 +11,23 @@ let
            if stdenv.isAarch64 then "armv8" else
            "unknown";
 
-    nnueFile = "nn-6877cd24400e.nnue";
+    nnueFile = "nn-5af11540bbfe.nnue";
     nnue = fetchurl {
       name = nnueFile;
       url = "https://tests.stockfishchess.org/api/nn/${nnueFile}";
-      sha256 = "sha256-aHfNJEAOAbGf8SrjBoriQhUoAr3TMOZve2cDhlJR1uM=";
+      sha256 = "sha256-WvEVQLv+/LVOOMXdAAyrS0ad+nWZodVb5dJyLCCokps=";
     };
 in
 
 stdenv.mkDerivation rec {
   pname = "stockfish";
-  version = "15";
+  version = "16";
 
   src = fetchFromGitHub {
     owner = "official-stockfish";
     repo = "Stockfish";
     rev = "sf_${version}";
-    sha256 = "sha256-sK4Jw9BPGRvlm9oIcgGcmHe8G4GR4cEuD8MtDrHZKew=";
+    sha256 = "sha256-ASy2vIP94lnSKgxixK1GoC84yAysaJpxeyuggV4MrP4=";
   };
 
   # This addresses a linker issue with Darwin
diff --git a/pkgs/games/the-legend-of-edgar/default.nix b/pkgs/games/the-legend-of-edgar/default.nix
deleted file mode 100644
index 1efc1c13554c3..0000000000000
--- a/pkgs/games/the-legend-of-edgar/default.nix
+++ /dev/null
@@ -1,75 +0,0 @@
-{ lib
-, stdenv
-, fetchFromGitHub
-, SDL2
-, SDL2_image
-, SDL2_mixer
-, SDL2_ttf
-, gettext
-, libpng
-, pkg-config
-, zlib
-}:
-
-stdenv.mkDerivation rec {
-  pname = "the-legend-of-edgar";
-  version = "1.36";
-
-  src = fetchFromGitHub {
-    name = "${pname}-${version}-src";
-    owner = "riksweeney";
-    repo = "edgar";
-    rev = version;
-    hash = "sha256-u2mg4hpcjPXzuZjYKIC4lgqGJPFRB9baHvaiu/YafZw=";
-  };
-
-  nativeBuildInputs = [
-    pkg-config
-    gettext
-  ];
-
-  buildInputs = [
-    SDL2
-    SDL2_image
-    SDL2_mixer
-    SDL2_ttf
-    libpng
-    zlib
-  ];
-
-  dontConfigure = true;
-
-  makefile = "makefile";
-
-  makeFlags = [
-    "PREFIX=${placeholder "out"}"
-    "BIN_DIR=${placeholder "out"}/bin/"
-  ];
-
-  # TODO: remove the setting below when the next version arrives
-  # https://github.com/riksweeney/edgar/pull/57
-  preBuild = ''
-    export CFLAGS=$(sdl2-config --cflags)
-  '';
-
-  meta = with lib; {
-    homepage = "https://www.parallelrealities.co.uk/games/edgar";
-    description = "A 2D platform game with a persistent world";
-    longDescription = ''
-      When Edgar's father fails to return home after venturing out one dark and
-      stormy night, Edgar fears the worst: he has been captured by the evil
-      sorcerer who lives in a fortress beyond the forbidden swamp.
-
-      Donning his armour, Edgar sets off to rescue him, but his quest will not
-      be easy...
-
-      The Legend of Edgar is a platform game, not unlike those found on the
-      Amiga and SNES. Edgar must battle his way across the world, solving
-      puzzles and defeating powerful enemies to achieve his quest.
-    '';
-    license = licenses.gpl1Plus;
-    maintainers = with maintainers; [ AndersonTorres ];
-    platforms = platforms.unix;
-    broken = stdenv.isDarwin;
-  };
-}
diff --git a/pkgs/games/theforceengine/default.nix b/pkgs/games/theforceengine/default.nix
index 023acc0e06da5..788fdc30794f0 100644
--- a/pkgs/games/theforceengine/default.nix
+++ b/pkgs/games/theforceengine/default.nix
@@ -2,7 +2,7 @@
 , stdenv
 , fetchFromGitHub
 , SDL2
-, libdevil
+, SDL2_image
 , rtaudio
 , rtmidi
 , glew
@@ -13,13 +13,13 @@
 
 stdenv.mkDerivation rec {
   pname = "theforceengine";
-  version = "1.09.300";
+  version = "1.09.540";
 
   src = fetchFromGitHub {
     owner = "luciusDXL";
     repo = "TheForceEngine";
     rev = "v${version}";
-    sha256 = "sha256-nf5fhP68AgBESiJleeZOLXkAajS+JmHUqyj4vAt2wl4=";
+    sha256 = "sha256-s54X6LZdk7daIlQPHyRBxc8MLS6bzkkypi4m1m+xK80=";
   };
 
   nativeBuildInputs = [
@@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
 
   buildInputs = [
     SDL2
-    libdevil
+    SDL2_image
     rtaudio
     rtmidi
     glew
diff --git a/pkgs/games/uchess/default.nix b/pkgs/games/uchess/default.nix
index 58b45609cc4a0..8cb49bf1e3fcb 100644
--- a/pkgs/games/uchess/default.nix
+++ b/pkgs/games/uchess/default.nix
@@ -13,7 +13,7 @@ buildGoModule rec {
     sha256 = "1njl3f41gshdpj431zkvpv2b7zmh4m2m5q6xsijb0c0058dk46mz";
   };
 
-  vendorSha256 = "sha256-4yEE1AsSChayCBxaMXPsbls7xGmFeWRhfOMHyAAReDY=";
+  vendorHash = "sha256-4yEE1AsSChayCBxaMXPsbls7xGmFeWRhfOMHyAAReDY=";
 
   # package does not contain any tests as of v0.2.1
   doCheck = false;
diff --git a/pkgs/games/ultrastardx/default.nix b/pkgs/games/ultrastardx/default.nix
index b0991af79cbe5..424781dd89580 100644
--- a/pkgs/games/ultrastardx/default.nix
+++ b/pkgs/games/ultrastardx/default.nix
@@ -31,12 +31,13 @@ let
 
 in stdenv.mkDerivation rec {
   pname = "ultrastardx";
-  version = "2021-04-03";
+  version = "2023.9.0";
+
   src = fetchFromGitHub {
     owner = "UltraStar-Deluxe";
     repo = "USDX";
-    rev = "d49e916705092f3d765d85d276b283b9e7e232a6";
-    sha256 = "0sdcz2vc8i2z50nj7zbkdpxx2mvx0m0927lfsj7d7qr0p8vkm0wa";
+    rev = "v${version}";
+    hash = "sha256-KvYfWdpgN72F8Y5iFNba0SCjPoS33O3FAdrrC49xoGo=";
   };
 
   nativeBuildInputs = [ pkg-config autoreconfHook ];
@@ -77,7 +78,7 @@ in stdenv.mkDerivation rec {
   dontPatchELF = true;
 
   meta = with lib; {
-    homepage = "http://ultrastardx.sourceforge.net/";
+    homepage = "https://usdx.eu/";
     description = "Free and open source karaoke game";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ Profpatsch ];
diff --git a/pkgs/games/unciv/default.nix b/pkgs/games/unciv/default.nix
index 458860b3a1bf4..f4b350ad38e75 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 = "4.8.0";
+  version = "4.8.9-patch2";
 
   src = fetchurl {
     url = "https://github.com/yairm210/Unciv/releases/download/${version}/Unciv.jar";
-    hash = "sha256-Mq6c8APLOYYKTIuBdkbscK43BSY5sWWqWlaR4KiXpwo=";
+    hash = "sha256-ek2FDzo7EbgZGbQyZ6mBmVoPRKkJu0JFewbVvsGzZMA=";
   };
 
   dontUnpack = true;
diff --git a/pkgs/games/vassal/default.nix b/pkgs/games/vassal/default.nix
index ff52410e4f30c..a3e7516c6f812 100644
--- a/pkgs/games/vassal/default.nix
+++ b/pkgs/games/vassal/default.nix
@@ -9,11 +9,11 @@
 
 stdenv.mkDerivation rec {
   pname = "VASSAL";
-  version = "3.6.19";
+  version = "3.7.0";
 
   src = fetchzip {
     url = "https://github.com/vassalengine/vassal/releases/download/${version}/${pname}-${version}-linux.tar.bz2";
-    sha256 = "sha256-JqMX0RUx1Yndo1pkLA4YnijgkojBaelt6T7gP+CUBSI=";
+    sha256 = "sha256-GmqPnay/K36cJgP622ht18csaohcUYZpvMD8LaOH4eM=";
   };
 
   buildInputs = [
diff --git a/pkgs/games/vcmi/default.nix b/pkgs/games/vcmi/default.nix
index abd0551081fdc..ad5aa48c7c5d3 100644
--- a/pkgs/games/vcmi/default.nix
+++ b/pkgs/games/vcmi/default.nix
@@ -27,14 +27,14 @@
 
 stdenv.mkDerivation rec {
   pname = "vcmi";
-  version = "1.2.1";
+  version = "1.3.2";
 
   src = fetchFromGitHub {
     owner = "vcmi";
     repo = "vcmi";
     rev = version;
     fetchSubmodules = true;
-    hash = "sha256-F1g3ric23jKetl5aBG5NRpT4LnGXhBKZmGp2hg6Io9s=";
+    hash = "sha256-dwTQRpu+IrKhuiiw/uYBt8i/BYlQ5XCy/jUhDAo6aa4=";
   };
 
   nativeBuildInputs = [
@@ -63,7 +63,7 @@ stdenv.mkDerivation rec {
 
   cmakeFlags = [
     "-DENABLE_LUA:BOOL=ON"
-    "-DENABLE_ERM:BOOL=ON"
+    "-DENABLE_ERM:BOOL=OFF"
     "-DENABLE_GITVERSION:BOOL=OFF"
     "-DENABLE_PCH:BOOL=OFF"
     "-DENABLE_TEST:BOOL=OFF"
diff --git a/pkgs/games/vintagestory/default.nix b/pkgs/games/vintagestory/default.nix
index 2e3b1b3b0e7a5..22f64b383f00f 100644
--- a/pkgs/games/vintagestory/default.nix
+++ b/pkgs/games/vintagestory/default.nix
@@ -20,11 +20,11 @@
 
 stdenv.mkDerivation rec {
   pname = "vintagestory";
-  version = "1.18.10";
+  version = "1.18.12";
 
   src = fetchurl {
     url = "https://cdn.vintagestory.at/gamefiles/stable/vs_client_linux-x64_${version}.tar.gz";
-    hash = "sha256-xkpoVFZWlqhSSDn62MbhBYU6X+l5MmPxtrewg9xKuJc=";
+    hash = "sha256-akeW03+IdRvt3Fs3gF6TcYv9gD33DHPtpmiiMa0b92k=";
   };
 
 
diff --git a/pkgs/games/wipeout-rewrite/default.nix b/pkgs/games/wipeout-rewrite/default.nix
new file mode 100644
index 0000000000000..16703fad517b2
--- /dev/null
+++ b/pkgs/games/wipeout-rewrite/default.nix
@@ -0,0 +1,71 @@
+{ stdenv
+, lib
+, fetchFromGitHub
+, makeWrapper
+, Foundation
+, glew
+, SDL2
+, writeShellScript
+}:
+
+let
+  datadir = "\"\${XDG_DATA_HOME:-$HOME/.local/share}\"/wipeout-rewrite";
+  datadirCheck = writeShellScript "wipeout-rewrite-check-datadir.sh" ''
+    datadir=${datadir}
+
+    if [ ! -d "$datadir" ]; then
+      echo "[Wrapper] Creating data directory $datadir"
+      mkdir -p "$datadir"
+    fi
+
+    echo "[Wrapper] Remember to put your game assets into $datadir/wipeout if you haven't done so yet!"
+    echo "[Wrapper] Check https://github.com/phoboslab/wipeout-rewrite#running for the required format."
+  '';
+in
+stdenv.mkDerivation (finalAttrs: {
+  pname = "wipeout-rewrite";
+  version = "unstable-2023-08-13";
+
+  src = fetchFromGitHub {
+    owner = "phoboslab";
+    repo = "wipeout-rewrite";
+    rev = "7a9f757a79d5c6806252cc1268bda5cdef463e23";
+    hash = "sha256-21IG9mZPGgRhVkT087G+Bz/zLkknkHKGmWjSpcLw8vE=";
+  };
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  buildInputs = [
+    glew
+    SDL2
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    Foundation
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 wipegame $out/bin/wipegame
+
+    # I can't get --chdir to not expand the bash variables in datadir at build time (so they point to /homeless-shelter)
+    # or put them inside single quotes (breaking the expansion at runtime)
+    wrapProgram $out/bin/wipegame \
+      --run '${datadirCheck}' \
+      --run 'cd ${datadir}'
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    mainProgram = "wipegame";
+    description = "A re-implementation of the 1995 PSX game wipEout";
+    homepage = "https://github.com/phoboslab/wipeout-rewrite";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ OPNA2608 ];
+    platforms = platforms.all;
+  };
+})
diff --git a/pkgs/games/worldofgoo/default.nix b/pkgs/games/worldofgoo/default.nix
index 00a8af6d8b703..4b38c86fbdce2 100644
--- a/pkgs/games/worldofgoo/default.nix
+++ b/pkgs/games/worldofgoo/default.nix
@@ -70,6 +70,6 @@ stdenv.mkDerivation rec {
     homepage = "https://worldofgoo.com";
     license = licenses.unfree;
     platforms = [ "i686-linux" "x86_64-linux" ];
-    maintainers = with maintainers; [ jcumming maxeaubrey ];
+    maintainers = with maintainers; [ jcumming amaxine ];
   };
 }
diff --git a/pkgs/games/xivlauncher/default.nix b/pkgs/games/xivlauncher/default.nix
index f98771ec0fbf5..b88c3ac9477fe 100644
--- a/pkgs/games/xivlauncher/default.nix
+++ b/pkgs/games/xivlauncher/default.nix
@@ -3,7 +3,7 @@
 , useSteamRun ? true }:
 
 let
-  rev = "1.0.4";
+  rev = "1.0.6";
 in
   buildDotnetModule rec {
     pname = "XIVLauncher";
@@ -13,7 +13,7 @@ in
       owner = "goatcorp";
       repo = "XIVLauncher.Core";
       inherit rev;
-      hash = "sha256-HbOo1aCBYnLXI2QZEBSRQNchHD2/fo50M2ZnIXkRn6Y=";
+      hash = "sha256-P1i12vw9KQOTL7QBxjKPSlda5rvoyl7DGmuuD5iVEQs=";
       fetchSubmodules = true;
     };
 
diff --git a/pkgs/games/xivlauncher/deps.nix b/pkgs/games/xivlauncher/deps.nix
index b92db7c2dec5d..10b646fc8c419 100644
--- a/pkgs/games/xivlauncher/deps.nix
+++ b/pkgs/games/xivlauncher/deps.nix
@@ -33,6 +33,8 @@
   (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.1"; sha256 = "1z70wvsx2d847a2cjfii7b83pjfs34q05gb037fdjikv5kbagml8"; })
   (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
   (fetchNuGet { pname = "Newtonsoft.Json"; version = "12.0.2"; sha256 = "0w2fbji1smd2y7x25qqibf1qrznmv4s6s0jvrbvr6alb7mfyqvh5"; })
+  (fetchNuGet { pname = "PInvoke.Kernel32"; version = "0.7.124"; sha256 = "0n1245s2p5735n8xgmahrx7g8mw32pxdn4rr9dydb9r6mvgm9bhk"; })
+  (fetchNuGet { pname = "PInvoke.Windows.Core"; version = "0.7.124"; sha256 = "16qkn91gh3aiab2330q5j1vlx2ni4m4kkz04dvsqlm8lr7ldizlz"; })
   (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"; })
@@ -75,6 +77,7 @@
   (fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
   (fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
   (fetchNuGet { pname = "Serilog"; version = "2.12.0"; sha256 = "0lqxpc96qcjkv9pr1rln7mi4y7n7jdi4vb36c2fv3845w1vswgr4"; })
+  (fetchNuGet { pname = "Serilog.Enrichers.Sensitive"; version = "1.7.2"; sha256 = "1f3r4jrfiz47vnvy7m0w6d8280nhhna67xwbagx1i557m9qvjssg"; })
   (fetchNuGet { pname = "Serilog.Enrichers.Thread"; version = "3.1.0"; sha256 = "1y75aiv2k1sxnh012ixkx92fq1yl8srqggy8l439igg4p223hcqi"; })
   (fetchNuGet { pname = "Serilog.Sinks.Async"; version = "1.5.0"; sha256 = "0bcb3n6lmg5wfj806mziybfmbb8gyiszrivs3swf0msy8w505gyg"; })
   (fetchNuGet { pname = "Serilog.Sinks.Console"; version = "3.1.1"; sha256 = "0j99as641y1k6havwwkhyr0n08vibiblmfjj6nz051mz8g3864fn"; })
diff --git a/pkgs/games/xmage/default.nix b/pkgs/games/xmage/default.nix
index 15a65efeb7bc0..b6aa8e22afd2a 100644
--- a/pkgs/games/xmage/default.nix
+++ b/pkgs/games/xmage/default.nix
@@ -1,16 +1,18 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchurl
 , jdk8
 , unzip
 }:
 
-stdenv.mkDerivation rec {
-  pname   = "xmage";
-  version = "1.4.42V6";
+stdenv.mkDerivation (finalAttrs: {
+  pname = "xmage";
+  version = "1.4.50V2";
 
   src = fetchurl {
-    url    = "https://github.com/magefree/mage/releases/download/xmage_1.4.42V6/xmage_${version}.zip";
-    sha256 = "14s4885ldi0rplqmab5m775plsqmmm0m89j402caiqm2q9mzvkhd";
+    url =
+      "https://github.com/magefree/mage/releases/download/xmage_${finalAttrs.version}/xmage_${finalAttrs.version}.zip";
+    sha256 = "sha256-t1peHYwCRy3wiIIwOD3nUyoxSOxbw6B/g++A1ofIbmg=";
   };
 
   preferLocalBuild = true;
@@ -19,13 +21,15 @@ stdenv.mkDerivation rec {
     ${unzip}/bin/unzip $src
   '';
 
-  installPhase = ''
+  installPhase = let
+    strVersion = lib.substring 0 6 finalAttrs.version;
+  in ''
     mkdir -p $out/bin
     cp -rv ./* $out
 
     cat << EOS > $out/bin/xmage
-exec ${jdk8}/bin/java -Xms256m -Xmx512m -XX:MaxPermSize=384m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar $out/mage-client/lib/mage-client-1.4.42.jar
-EOS
+    exec ${jdk8}/bin/java -Xms256m -Xmx512m -XX:MaxPermSize=384m -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -jar $out/mage-client/lib/mage-client-${strVersion}.jar
+    EOS
 
     chmod +x $out/bin/xmage
   '';
@@ -38,5 +42,5 @@ EOS
     homepage = "http://xmage.de/";
   };
 
-}
+})