commit 198d93f635bc4f6431ce869303ad336aeb147922
parent 73a540e093edc74074a6bc368f549aab3db17618
Author: Luke Willis <lukejw@loquat.dev>
Date: Wed, 17 Dec 2025 15:36:49 -0500
Add prismlauncher package
Diffstat:
| A | mt/packages/games.scm | | | 134 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 134 insertions(+), 0 deletions(-)
diff --git a/mt/packages/games.scm b/mt/packages/games.scm
@@ -0,0 +1,134 @@
+(define-module (mt packages games)
+ #:use-module (guix licenses)
+ #:use-module (guix packages)
+ #:use-module (guix git-download)
+ #:use-module (gnu packages audio)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages elf)
+ #:use-module (gnu packages gl)
+ #:use-module (gnu packages image)
+ #:use-module (gnu packages java)
+ #:use-module (gnu packages kde-frameworks)
+ #:use-module (gnu packages libedit)
+ #:use-module (gnu packages ncurses)
+ #:use-module (gnu packages pkg-config)
+ #:use-module (gnu packages pulseaudio)
+ #:use-module (gnu packages qt)
+ #:use-module (gnu packages speech)
+ #:use-module (gnu packages sqlite)
+ #:use-module (gnu packages video)
+ #:use-module (guix build-system cmake)
+ #:use-module (guix build-system qt)
+ #:use-module (guix download)
+ #:use-module (guix gexp))
+
+;; Controller patches for GLFW 3.4
+;; Pulled from https://github.com/mdqinc/SDL_GameControllerDB
+
+;; Mappings for the 8BitDo Ultimate 2C controller.
+(define 8bitdo-ultimate-2c-patch
+ (plain-file "8bitdo-ultimate-2c-glfw-3.4.patch" "\
+--- a/src/mappings.h 2025-10-23 11:33:49.165631631 -0400
++++ b/src/mappings.h 2025-10-23 11:35:10.850409920 -0400
+@@ -996,6 +996,9 @@
+ \"03000000c0160000e105000001010000,Xin-Mo Xin-Mo Dual Arcade,a:b4,b:b3,back:b6,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b9,leftshoulder:b2,leftx:a0,lefty:a1,rightshoulder:b5,start:b7,x:b1,y:b0,platform:Linux,\",
+ \"03000000120c0000100e000011010000,ZEROPLUS P4 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,\",
+ \"03000000120c0000101e000011010000,ZEROPLUS P4 Wired Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,platform:Linux,\",
++\"03000000c82d00000a31000014010000,8BitDo Ultimate 2C,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,platform:Linux,\",
++\"03000000c82d00001d30000011010000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,\",
++\"05000000c82d00001b30000001000000,8BitDo Ultimate 2C,a:b0,b:b1,back:b10,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b6,leftstick:b13,lefttrigger:a5,leftx:a0,lefty:a1,paddle1:b5,paddle2:b2,rightshoulder:b7,rightstick:b14,righttrigger:a4,rightx:a2,righty:a3,start:b11,x:b3,y:b4,platform:Linux,\"
+ #endif // GLFW_BUILD_LINUX_JOYSTICK
+ };"))
+
+(define-public glfw-mc
+ (package
+ (inherit glfw-3.4)
+ (name "glfw-mc")
+ (version "3.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/glfw/glfw"
+ "/releases/download/" version
+ "/glfw-" version ".zip"))
+ (sha256
+ (base32
+ "1sd396kkn53myp61kxrd18h7b1q4ix173hhxhvl0iz8j4x5h1v5m"))
+ (patches (list 8bitdo-ultimate-2c-patch))))
+ (synopsis "A patched version of GLFW 3.4 that works better with Minecraft
+out of the box. Intended to replace the bundled version.")))
+
+;; For playing Minecraft. Setup to run on Wayland by default.
+;; TODO: Support X11
+(define-public prismlauncher
+ (package
+ (name "prismlauncher")
+ (version "9.4")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/PrismLauncher/PrismLauncher")
+ (recursive? #t)
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1xxgyx0z5r3hk3yk4gglbfwvq2qk1j9a0dkrv55j4vrlkni79nrm"))))
+ (build-system cmake-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ ;; Patch default settings to use native libraries
+ (add-after 'unpack 'change-default-settings
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "launcher/Application.cpp"
+ (("\"UseNativeGLFW\", false")
+ "\"UseNativeGLFW\", true")
+ (("\"UseNativeOpenAL\", false")
+ "\"UseNativeOpenAL\", true"))))
+ ;; Add required environment variables
+ (add-after 'install 'patch-paths
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (bin (string-append out "/bin/prismlauncher"))
+ (jdk21 (assoc-ref inputs "jdk21"))
+ (jdk17 (assoc-ref inputs "jdk17"))
+ (qtwayland (assoc-ref inputs "qtwayland"))
+ (qtsvg (assoc-ref inputs "qtsvg")))
+ (wrap-program bin
+ ;; Add all the OpenJDK versions for Minecraft as needed
+ `("PRISMLAUNCHER_JAVA_PATHS" ":" suffix (,(string-append jdk21 "/bin/java")
+ ,(string-append jdk17 "/bin/java")))
+ ;; Fix QT plugins (primarily for wayland support)
+ `("QT_PLUGIN_PATH" ":" prefix ,(map (lambda (package)
+ (string-append package "/lib/qt6/plugins"))
+ (list qtwayland qtsvg)))
+ ;; Add runtime libraries for MC
+ ;; TODO: Provide these via PrismLauncher wrapper
+ `("LD_LIBRARY_PATH" ":" prefix
+ (,@(map (lambda (dep)
+ (string-append (assoc-ref inputs dep)
+ "/lib"))
+ '("glfw" "mesa" "pulseaudio" "openal" "flite")))))
+ #t))))))
+ (native-inputs (list pkg-config extra-cmake-modules))
+ (inputs
+ `(("zlib" ,zlib)
+ ("qtbase" ,qtbase)
+ ("qt5compat" ,qt5compat)
+ ("qtnetworkauth" ,qtnetworkauth)
+ ("qtwayland" ,qtwayland)
+ ("qtsvg" ,qtsvg)
+ ;; Java versions to include
+ ("jdk17" ,openjdk17 "jdk")
+ ("jdk21" ,openjdk21 "jdk")
+ ;; Runtime deps for MC itself
+ ("glfw" ,glfw-mc)
+ ("mesa" ,mesa)
+ ("flite" ,flite)
+ ("openal" ,openal)
+ ("pulseaudio" ,pulseaudio)))
+ (home-page "https://prismlauncher.org/")
+ (synopsis #f)
+ (description #f)
+ (license gpl3)))