diff --git a/modules/linux/programs/games.nix b/modules/linux/programs/games.nix index c1a88d3..3aaf40f 100644 --- a/modules/linux/programs/games.nix +++ b/modules/linux/programs/games.nix @@ -5,9 +5,30 @@ in with lib; { environment.systemPackages = let # https://github.com/Admicos/minecraft-wayland glfw-patched = pkgs.glfw-wayland.overrideAttrs (attrs: { - patches = attrs.patches ++ [ + src = pkgs.fetchzip { + version = "3.4.0"; + url = + "https://github.com/glfw/glfw/archive/62e175ef9fae75335575964c845a302447c012c7.tar.gz"; + sha256 = "sha256-GiY4d7xadR0vN5uCQyWaOpoo2o6uMGl1fCcX4uDGnks="; + }; + buildInputs = with pkgs; + with pkgs.xorg; [ + wayland + wayland-protocols + libxkbcommon + libX11 + libXrandr + libXinerama + libXcursor + libXi + libXext + ]; + patches = [ ../../../patches/minecraft/0003-Don-t-crash-on-calls-to-focus-or-icon.patch ../../../patches/minecraft/0004-wayland-fix-broken-opengl-screenshots-on-mutter.patch + ../../../patches/minecraft/0005-Add-warning-about-being-an-unofficial-patch.patch + # ../../../patches/minecraft/0006-Don-t-crash-getting-scancode-name.patch + ../../../patches/minecraft/0007-Platform-Prefer-Wayland-over-X11.patch ]; }); stable-packages = with pkgs; [ diff --git a/patches/minecraft/0003-Don-t-crash-on-calls-to-focus-or-icon.patch b/patches/minecraft/0003-Don-t-crash-on-calls-to-focus-or-icon.patch index 4ff500b..768c986 100644 --- a/patches/minecraft/0003-Don-t-crash-on-calls-to-focus-or-icon.patch +++ b/patches/minecraft/0003-Don-t-crash-on-calls-to-focus-or-icon.patch @@ -8,26 +8,26 @@ Subject: Don't crash on calls to focus or icon 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/wl_window.c b/src/wl_window.c -index ec4e60cd..b8fc39e4 100644 +index 656743a9..c36b11cd 100644 --- a/src/wl_window.c +++ b/src/wl_window.c -@@ -1042,8 +1042,7 @@ void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title) +@@ -885,8 +885,7 @@ void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title) void _glfwPlatformSetWindowIcon(_GLFWwindow* window, int count, const GLFWimage* images) { -- _glfwInputError(GLFW_PLATFORM_ERROR, -- "Wayland: Setting window icon not supported"); -+ fprintf(stderr, "!!! Ignoring Error: Wayland: Setting window icon not supported\n"); +- _glfwInputError(GLFW_FEATURE_UNAVAILABLE, +- "Wayland: The platform does not support setting the window icon"); ++ fprintf(stderr, "!!! Ignoring Error: Wayland: The platform does not support setting the window icon\n"); } void _glfwPlatformGetWindowPos(_GLFWwindow* window, int* xpos, int* ypos) -@@ -1231,8 +1230,7 @@ void _glfwPlatformRequestWindowAttention(_GLFWwindow* window) +@@ -1042,8 +1041,7 @@ void _glfwPlatformRequestWindowAttention(_GLFWwindow* window) void _glfwPlatformFocusWindow(_GLFWwindow* window) { -- _glfwInputError(GLFW_PLATFORM_ERROR, -- "Wayland: Focusing a window requires user interaction"); -+ fprintf(stderr, "!!! Ignoring Error: Wayland: Focusing a window requires user interaction\n"); +- _glfwInputError(GLFW_FEATURE_UNAVAILABLE, +- "Wayland: The platform does not support setting the input focus"); ++ fprintf(stderr, "!!! Ignoring Error: Wayland: The platform does not support setting the input focus\n"); } void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, diff --git a/patches/minecraft/0004-wayland-fix-broken-opengl-screenshots-on-mutter.patch b/patches/minecraft/0004-wayland-fix-broken-opengl-screenshots-on-mutter.patch index dd2f1d5..9acaaec 100644 --- a/patches/minecraft/0004-wayland-fix-broken-opengl-screenshots-on-mutter.patch +++ b/patches/minecraft/0004-wayland-fix-broken-opengl-screenshots-on-mutter.patch @@ -8,7 +8,7 @@ Subject: wayland: fix broken opengl screenshots on mutter 1 file changed, 8 insertions(+) diff --git a/src/egl_context.c b/src/egl_context.c -index 6b34f724..b0a810d8 100644 +index 975c67be..b5cbeaff 100644 --- a/src/egl_context.c +++ b/src/egl_context.c @@ -175,6 +175,14 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig, diff --git a/patches/minecraft/0005-Add-warning-about-being-an-unofficial-patch.patch b/patches/minecraft/0005-Add-warning-about-being-an-unofficial-patch.patch new file mode 100644 index 0000000..bd0b24e --- /dev/null +++ b/patches/minecraft/0005-Add-warning-about-being-an-unofficial-patch.patch @@ -0,0 +1,28 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ecmel=20Berk=20Canl=C4=B1er?= +Date: Tue, 28 Dec 2021 19:25:30 +0300 +Subject: Add warning about being an unofficial patch + +This is just to help mod developers and other people who don't need to +care about this patchset to ignore any issues that are not their fault. +--- + src/init.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/init.c b/src/init.c +index 25a6b4f3..c0ba6d31 100644 +--- a/src/init.c ++++ b/src/init.c +@@ -261,6 +261,12 @@ GLFWAPI int glfwInit(void) + _glfw.timer.offset = _glfwPlatformGetTimerValue(); + + glfwDefaultWindowHints(); ++ ++ fprintf(stderr, "!!! Patched GLFW from https://github.com/Admicos/minecraft-wayland\n" ++ "!!! If any issues with the window, or some issues with rendering, occur, " ++ "first try with the built-in GLFW, and if that solves the issue, report there first.\n" ++ "!!! Use outside Minecraft is untested, and things might break.\n"); ++ + return GLFW_TRUE; + } + diff --git a/patches/minecraft/0006-Don-t-crash-getting-scancode-name.patch b/patches/minecraft/0006-Don-t-crash-getting-scancode-name.patch new file mode 100644 index 0000000..8d7d05f --- /dev/null +++ b/patches/minecraft/0006-Don-t-crash-getting-scancode-name.patch @@ -0,0 +1,23 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ecmel=20Berk=20Canl=C4=B1er?= +Date: Tue, 28 Dec 2021 20:30:44 +0300 +Subject: Don't crash getting scancode name + +--- + src/wl_window.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/wl_window.c b/src/wl_window.c +index c36b11cd..bf188e27 100644 +--- a/src/wl_window.c ++++ b/src/wl_window.c +@@ -1205,8 +1205,7 @@ void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode) + const char* _glfwPlatformGetScancodeName(int scancode) + { + // TODO +- _glfwInputError(GLFW_FEATURE_UNIMPLEMENTED, +- "Wayland: Key names not yet implemented"); ++ fprintf(stderr, "!!! Ignoring Error: Wayland: Key names not yet implemented\n"); + return NULL; + } + diff --git a/patches/minecraft/0007-Platform-Prefer-Wayland-over-X11.patch b/patches/minecraft/0007-Platform-Prefer-Wayland-over-X11.patch new file mode 100644 index 0000000..dc3dc80 --- /dev/null +++ b/patches/minecraft/0007-Platform-Prefer-Wayland-over-X11.patch @@ -0,0 +1,44 @@ +From 352b3bb37d79ddc9b4a7afd9ca8ad26723f17821 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20H=C3=BClsmann?= +Date: Sun, 30 Jan 2022 00:36:32 +0100 +Subject: [PATCH] Platform: Prefer Wayland over X11 + +When GLFW_ANY_PLATFORM is used (which is the default) native +Wayland would previously never be chosen if XWayland is also available. +--- + README.md | 1 + + src/platform.c | 6 +++--- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/README.md b/README.md +index 4a3fb85c5a..9ba2994200 100644 +--- a/README.md ++++ b/README.md +@@ -268,6 +268,7 @@ information on what to include when reporting a bug. + - [Wayland] Added dynamic loading of all Wayland libraries + - [Wayland] Added support for key names via xkbcommon + - [Wayland] Removed support for `wl_shell` (#1443) ++ - [Wayland] Prefer Wayland over X11 if both are available (#2035) + - [Wayland] Bugfix: The `GLFW_HAND_CURSOR` shape used the wrong image (#1432) + - [Wayland] Bugfix: `CLOCK_MONOTONIC` was not correctly enabled + - [Wayland] Bugfix: Repeated keys could be reported with `NULL` window (#1704) +diff --git a/src/platform.c b/src/platform.c +index d0bbd06df5..61d06787fb 100644 +--- a/src/platform.c ++++ b/src/platform.c +@@ -45,12 +45,12 @@ static const struct + #if defined(_GLFW_COCOA) + { GLFW_PLATFORM_COCOA, _glfwConnectCocoa }, + #endif +-#if defined(_GLFW_X11) +- { GLFW_PLATFORM_X11, _glfwConnectX11 }, +-#endif + #if defined(_GLFW_WAYLAND) + { GLFW_PLATFORM_WAYLAND, _glfwConnectWayland }, + #endif ++#if defined(_GLFW_X11) ++ { GLFW_PLATFORM_X11, _glfwConnectX11 }, ++#endif + }; + + GLFWbool _glfwSelectPlatform(int desiredID, _GLFWplatform* platform)