From a71c6e1c390712cdd29d4be347d99b1ffe27ed4c Mon Sep 17 00:00:00 2001 From: Marcin Serwin Date: Thu, 1 Jan 2026 11:06:06 +0100 Subject: [PATCH 1/6] endgame-singularity: replace pygame with pygame-ce Signed-off-by: Marcin Serwin --- pkgs/by-name/en/endgame-singularity/package.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/en/endgame-singularity/package.nix b/pkgs/by-name/en/endgame-singularity/package.nix index 21fd5c4faff5..daa9143f5051 100644 --- a/pkgs/by-name/en/endgame-singularity/package.nix +++ b/pkgs/by-name/en/endgame-singularity/package.nix @@ -31,6 +31,11 @@ python3.pkgs.buildPythonApplication { srcs = [ main_src ] ++ lib.optional enableDefaultMusicPack music_src; sourceRoot = main_src.name; + postPatch = '' + substituteInPlace setup.py \ + --replace-fail "pygame>=2.5.2" "pygame-ce" + ''; + nativeBuildInputs = [ unzip ]; # The music is zipped build-system = with python3.pkgs; [ @@ -38,7 +43,7 @@ python3.pkgs.buildPythonApplication { ]; dependencies = with python3.pkgs; [ - pygame + pygame-ce numpy polib ]; From 0357814159c64c73a5116bec4e29dd3830ba2dc2 Mon Sep 17 00:00:00 2001 From: Marcin Serwin Date: Thu, 1 Jan 2026 14:43:50 +0100 Subject: [PATCH 2/6] brutalmaze: pin to Python 3.12 Signed-off-by: Marcin Serwin --- pkgs/by-name/br/brutalmaze/package.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/by-name/br/brutalmaze/package.nix b/pkgs/by-name/br/brutalmaze/package.nix index fd7341aae392..4553285e0453 100644 --- a/pkgs/by-name/br/brutalmaze/package.nix +++ b/pkgs/by-name/br/brutalmaze/package.nix @@ -1,14 +1,14 @@ { lib, fetchFromSourcehut, - python3Packages, + python312Packages, }: -python3Packages.buildPythonApplication rec { +python312Packages.buildPythonApplication rec { pname = "brutalmaze"; version = "1.1.1"; format = "pyproject"; - disabled = python3Packages.pythonOlder "3.7"; + disabled = python312Packages.pythonOlder "3.7"; src = fetchFromSourcehut { owner = "~cnx"; @@ -17,11 +17,11 @@ python3Packages.buildPythonApplication rec { sha256 = "1m105iq378mypj64syw59aldbm6bj4ma4ynhc50gafl656fabg4y"; }; - nativeBuildInputs = with python3Packages; [ + nativeBuildInputs = with python312Packages; [ flit-core ]; - propagatedBuildInputs = with python3Packages; [ + propagatedBuildInputs = with python312Packages; [ loca palace pygame From 5416e43ab3cea9daf440ce17a3b7ebc4be693882 Mon Sep 17 00:00:00 2001 From: Marcin Serwin Date: Thu, 1 Jan 2026 14:47:12 +0100 Subject: [PATCH 3/6] brutalmaze: replace pygame with pygame-ce Signed-off-by: Marcin Serwin --- pkgs/by-name/br/brutalmaze/package.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/br/brutalmaze/package.nix b/pkgs/by-name/br/brutalmaze/package.nix index 4553285e0453..1266b4cce2a5 100644 --- a/pkgs/by-name/br/brutalmaze/package.nix +++ b/pkgs/by-name/br/brutalmaze/package.nix @@ -17,6 +17,11 @@ python312Packages.buildPythonApplication rec { sha256 = "1m105iq378mypj64syw59aldbm6bj4ma4ynhc50gafl656fabg4y"; }; + postPatch = '' + substituteInPlace pyproject.toml \ + --replace-fail "pygame" "pygame-ce" + ''; + nativeBuildInputs = with python312Packages; [ flit-core ]; @@ -24,7 +29,7 @@ python312Packages.buildPythonApplication rec { propagatedBuildInputs = with python312Packages; [ loca palace - pygame + pygame-ce ]; doCheck = false; # there's no test From 5c04378be29272c6f92c0a6f13d5f25041d00821 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Sat, 3 Jan 2026 11:27:53 +0100 Subject: [PATCH 4/6] python3Packages.pygame-original: rename from pygame Not an alias, because that would break eval Signed-off-by: Marcin Serwin --- ...-Use-SDL_AllocFormat-instead-of-creating-it-manually.patch | 0 .../0001-Use-SDL_HasSurfaceRLE-when-available.patch | 0 ...Don-t-assume-that-touch-devices-support-get_num_fing.patch | 0 .../python-modules/{pygame => pygame-original}/default.nix | 2 +- .../{pygame => pygame-original}/fix-dependency-finding.patch | 0 .../{pygame => pygame-original}/skip-mixer-test.patch | 0 .../{pygame => pygame-original}/skip-rle-tests.patch | 0 pkgs/top-level/python-packages.nix | 4 +++- 8 files changed, 4 insertions(+), 2 deletions(-) rename pkgs/development/python-modules/{pygame => pygame-original}/0001-Use-SDL_AllocFormat-instead-of-creating-it-manually.patch (100%) rename pkgs/development/python-modules/{pygame => pygame-original}/0001-Use-SDL_HasSurfaceRLE-when-available.patch (100%) rename pkgs/development/python-modules/{pygame => pygame-original}/0002-Don-t-assume-that-touch-devices-support-get_num_fing.patch (100%) rename pkgs/development/python-modules/{pygame => pygame-original}/default.nix (97%) rename pkgs/development/python-modules/{pygame => pygame-original}/fix-dependency-finding.patch (100%) rename pkgs/development/python-modules/{pygame => pygame-original}/skip-mixer-test.patch (100%) rename pkgs/development/python-modules/{pygame => pygame-original}/skip-rle-tests.patch (100%) diff --git a/pkgs/development/python-modules/pygame/0001-Use-SDL_AllocFormat-instead-of-creating-it-manually.patch b/pkgs/development/python-modules/pygame-original/0001-Use-SDL_AllocFormat-instead-of-creating-it-manually.patch similarity index 100% rename from pkgs/development/python-modules/pygame/0001-Use-SDL_AllocFormat-instead-of-creating-it-manually.patch rename to pkgs/development/python-modules/pygame-original/0001-Use-SDL_AllocFormat-instead-of-creating-it-manually.patch diff --git a/pkgs/development/python-modules/pygame/0001-Use-SDL_HasSurfaceRLE-when-available.patch b/pkgs/development/python-modules/pygame-original/0001-Use-SDL_HasSurfaceRLE-when-available.patch similarity index 100% rename from pkgs/development/python-modules/pygame/0001-Use-SDL_HasSurfaceRLE-when-available.patch rename to pkgs/development/python-modules/pygame-original/0001-Use-SDL_HasSurfaceRLE-when-available.patch diff --git a/pkgs/development/python-modules/pygame/0002-Don-t-assume-that-touch-devices-support-get_num_fing.patch b/pkgs/development/python-modules/pygame-original/0002-Don-t-assume-that-touch-devices-support-get_num_fing.patch similarity index 100% rename from pkgs/development/python-modules/pygame/0002-Don-t-assume-that-touch-devices-support-get_num_fing.patch rename to pkgs/development/python-modules/pygame-original/0002-Don-t-assume-that-touch-devices-support-get_num_fing.patch diff --git a/pkgs/development/python-modules/pygame/default.nix b/pkgs/development/python-modules/pygame-original/default.nix similarity index 97% rename from pkgs/development/python-modules/pygame/default.nix rename to pkgs/development/python-modules/pygame-original/default.nix index d4a4c92f89c8..b18635e7d4b3 100644 --- a/pkgs/development/python-modules/pygame/default.nix +++ b/pkgs/development/python-modules/pygame-original/default.nix @@ -128,7 +128,7 @@ buildPythonPackage rec { pythonImportsCheck = [ "pygame" ]; meta = { - description = "Python library for games"; + description = "Python library for games (original distribution)"; homepage = "https://www.pygame.org/"; changelog = "https://github.com/pygame/pygame/releases/tag/${src.tag}"; license = lib.licenses.lgpl21Plus; diff --git a/pkgs/development/python-modules/pygame/fix-dependency-finding.patch b/pkgs/development/python-modules/pygame-original/fix-dependency-finding.patch similarity index 100% rename from pkgs/development/python-modules/pygame/fix-dependency-finding.patch rename to pkgs/development/python-modules/pygame-original/fix-dependency-finding.patch diff --git a/pkgs/development/python-modules/pygame/skip-mixer-test.patch b/pkgs/development/python-modules/pygame-original/skip-mixer-test.patch similarity index 100% rename from pkgs/development/python-modules/pygame/skip-mixer-test.patch rename to pkgs/development/python-modules/pygame-original/skip-mixer-test.patch diff --git a/pkgs/development/python-modules/pygame/skip-rle-tests.patch b/pkgs/development/python-modules/pygame-original/skip-rle-tests.patch similarity index 100% rename from pkgs/development/python-modules/pygame/skip-rle-tests.patch rename to pkgs/development/python-modules/pygame-original/skip-rle-tests.patch diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index de97391232de..4d8c1e9ae2e7 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -13439,12 +13439,14 @@ self: super: with self; { pygal = callPackage ../development/python-modules/pygal { }; - pygame = callPackage ../development/python-modules/pygame { }; + pygame = pygame-original; pygame-ce = callPackage ../development/python-modules/pygame-ce { }; pygame-gui = callPackage ../development/python-modules/pygame-gui { }; + pygame-original = callPackage ../development/python-modules/pygame-original { }; + pygame-sdl2 = callPackage ../development/python-modules/pygame-sdl2 { }; pygatt = callPackage ../development/python-modules/pygatt { }; From fd7f71e24bd25e66c85c4d888ce1f9259edca473 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Sat, 3 Jan 2026 11:36:12 +0100 Subject: [PATCH 5/6] python3Packages.pygame-original: mark broken on python>=3.14 --- pkgs/development/python-modules/pygame-original/default.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pkgs/development/python-modules/pygame-original/default.nix b/pkgs/development/python-modules/pygame-original/default.nix index b18635e7d4b3..58e869518086 100644 --- a/pkgs/development/python-modules/pygame-original/default.nix +++ b/pkgs/development/python-modules/pygame-original/default.nix @@ -6,6 +6,7 @@ replaceVars, fontconfig, python, + pythonAtLeast, # build-system cython, @@ -134,5 +135,7 @@ buildPythonPackage rec { license = lib.licenses.lgpl21Plus; maintainers = with lib.maintainers; [ emilytrau ]; platforms = lib.platforms.unix; + # https://github.com/pygame/pygame/issues/4706 + broken = pythonAtLeast "3.14"; }; } From 6c60114666b9d95b8ee55b537457b94b46e301a5 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Sat, 3 Jan 2026 11:36:35 +0100 Subject: [PATCH 6/6] python3Packages.pygame: switch to pygame-ce for python>=3.14 --- doc/release-notes/rl-2605.section.md | 2 ++ pkgs/top-level/python-packages.nix | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/release-notes/rl-2605.section.md b/doc/release-notes/rl-2605.section.md index 2e7efbd71690..fb6d78e1046c 100644 --- a/doc/release-notes/rl-2605.section.md +++ b/doc/release-notes/rl-2605.section.md @@ -29,6 +29,8 @@ - `iroh` has been removed and split up into `iroh-dns-server` and `iroh-relay`. +- `python3Packages.pygame` has been been renamed to `python3Packages.pygame-original`, the attribute `python3Packages.pygame` will from python 3.14 default to the more actively maintained `python3Packages.pygame-ce` + - `python3Packages.gradio` has been updated to version 6. See upstream's migration guide at https://www.gradio.app/main/guides/gradio-6-migration-guide. - `vicinae` has been updated to v0.17. Version 0.17 contains a complete overhaul of the configuration system. For update instructions, see the [release notes for v0.17.0](https://github.com/vicinaehq/vicinae/releases/tag/v0.17.0) and the [upstream configuration documentation](https://docs.vicinae.com/config). diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 4d8c1e9ae2e7..7b8521d22a1b 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -13439,7 +13439,8 @@ self: super: with self; { pygal = callPackage ../development/python-modules/pygal { }; - pygame = pygame-original; + # pygame-ce is better maintained upstream, the breaking point was https://github.com/NixOS/nixpkgs/pull/475917#issuecomment-3706940043 + pygame = if pythonAtLeast "3.14" then pygame-ce else pygame-original; pygame-ce = callPackage ../development/python-modules/pygame-ce { };