diff --git a/pkgs/by-name/pr/prismlauncher-unwrapped/package.nix b/pkgs/by-name/pr/prismlauncher-unwrapped/package.nix new file mode 100644 index 0000000000000..2a08500693179 --- /dev/null +++ b/pkgs/by-name/pr/prismlauncher-unwrapped/package.nix @@ -0,0 +1,117 @@ +{ + lib, + stdenv, + fetchFromGitHub, + cmake, + cmark, + darwin, + extra-cmake-modules, + gamemode, + ghc_filesystem, + jdk17, + kdePackages, + ninja, + nix-update-script, + stripJavaArchivesHook, + tomlplusplus, + zlib, + + msaClientID ? null, + gamemodeSupport ? stdenv.isLinux, +}: + +let + libnbtplusplus = fetchFromGitHub { + owner = "PrismLauncher"; + repo = "libnbtplusplus"; + rev = "a5e8fd52b8bf4ab5d5bcc042b2a247867589985f"; + hash = "sha256-A5kTgICnx+Qdq3Fir/bKTfdTt/T1NQP2SC+nhN1ENug="; + }; +in + +assert lib.assertMsg ( + gamemodeSupport -> stdenv.isLinux +) "gamemodeSupport is only available on Linux."; + +stdenv.mkDerivation (finalAttrs: { + pname = "prismlauncher-unwrapped"; + version = "8.4"; + + src = fetchFromGitHub { + owner = "PrismLauncher"; + repo = "PrismLauncher"; + rev = finalAttrs.version; + hash = "sha256-460hB91M2hZm+uU1tywJEj20oRd5cz/NDvya8/vJdSA="; + }; + + postUnpack = '' + rm -rf source/libraries/libnbtplusplus + ln -s ${libnbtplusplus} source/libraries/libnbtplusplus + ''; + + nativeBuildInputs = [ + cmake + ninja + extra-cmake-modules + jdk17 + stripJavaArchivesHook + ]; + + buildInputs = + [ + cmark + ghc_filesystem + kdePackages.qtbase + kdePackages.quazip + tomlplusplus + zlib + ] + ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Cocoa ] + ++ lib.optional gamemodeSupport gamemode; + + hardeningEnable = lib.optionals stdenv.isLinux [ "pie" ]; + + cmakeFlags = + [ + # downstream branding + (lib.cmakeFeature "Launcher_BUILD_PLATFORM" "nixpkgs") + ] + ++ lib.optionals (msaClientID != null) [ + (lib.cmakeFeature "Launcher_MSA_CLIENT_ID" (toString msaClientID)) + ] + ++ lib.optionals (lib.versionOlder kdePackages.qtbase.version "6") [ + (lib.cmakeFeature "Launcher_QT_VERSION_MAJOR" "5") + ] + ++ lib.optionals stdenv.isDarwin [ + # we wrap our binary manually + (lib.cmakeFeature "INSTALL_BUNDLE" "nodeps") + # disable built-in updater + (lib.cmakeFeature "MACOSX_SPARKLE_UPDATE_FEED_URL" "''") + (lib.cmakeFeature "CMAKE_INSTALL_PREFIX" "${placeholder "out"}/Applications/") + ]; + + dontWrapQtApps = true; + + passthru = { + updateScript = nix-update-script { }; + }; + + meta = { + description = "Free, open source launcher for Minecraft"; + longDescription = '' + Allows you to have multiple, separate instances of Minecraft (each with + their own mods, texture packs, saves, etc) and helps you manage them and + their associated options with a simple interface. + ''; + homepage = "https://prismlauncher.org/"; + changelog = "https://github.com/PrismLauncher/PrismLauncher/releases/tag/${finalAttrs.src.rev}"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ + minion3665 + Scrumplex + getchoo + ]; + mainProgram = "prismlauncher"; + platforms = lib.platforms.linux ++ lib.platforms.darwin; + }; +}) diff --git a/pkgs/by-name/pr/prismlauncher/package.nix b/pkgs/by-name/pr/prismlauncher/package.nix new file mode 100644 index 0000000000000..c6ff6894389d5 --- /dev/null +++ b/pkgs/by-name/pr/prismlauncher/package.nix @@ -0,0 +1,151 @@ +{ + lib, + stdenv, + symlinkJoin, + prismlauncher-unwrapped, + addOpenGLRunpath, + flite, + gamemode, + glfw, + glfw-wayland-minecraft, + glxinfo, + jdk8, + jdk17, + jdk21, + kdePackages, + libGL, + libpulseaudio, + libusb1, + makeWrapper, + openal, + pciutils, + udev, + vulkan-loader, + xorg, + + additionalLibs ? [ ], + additionalPrograms ? [ ], + controllerSupport ? stdenv.isLinux, + gamemodeSupport ? stdenv.isLinux, + jdks ? [ + jdk21 + jdk17 + jdk8 + ], + msaClientID ? null, + textToSpeechSupport ? stdenv.isLinux, + + # Adds `glfw-wayland-minecraft` to `LD_LIBRARY_PATH` + # when launched on wayland, allowing for the game to be run natively. + # Make sure to enable "Use system installation of GLFW" in instance settings + # for this to take effect + # + # Warning: This build of glfw may be unstable, and the launcher + # itself can take slightly longer to start + withWaylandGLFW ? false, +}: + +assert lib.assertMsg ( + controllerSupport -> stdenv.isLinux +) "controllerSupport only has an effect on Linux."; + +assert lib.assertMsg ( + textToSpeechSupport -> stdenv.isLinux +) "textToSpeechSupport only has an effect on Linux."; + +assert lib.assertMsg ( + withWaylandGLFW -> stdenv.isLinux +) "withWaylandGLFW is only available on Linux."; + +let + prismlauncher' = prismlauncher-unwrapped.override { inherit msaClientID gamemodeSupport; }; +in + +symlinkJoin { + name = "prismlauncher-${prismlauncher'.version}"; + + paths = [ prismlauncher' ]; + + nativeBuildInputs = + [ kdePackages.wrapQtAppsHook ] + # purposefully using a shell wrapper here for variable expansion + # see https://github.com/NixOS/nixpkgs/issues/172583 + ++ lib.optional withWaylandGLFW makeWrapper; + + buildInputs = + [ + kdePackages.qtbase + kdePackages.qtsvg + ] + ++ lib.optional ( + lib.versionAtLeast kdePackages.qtbase.version "6" && stdenv.isLinux + ) kdePackages.qtwayland; + + env = { + waylandPreExec = lib.optionalString withWaylandGLFW '' + if [ -n "$WAYLAND_DISPLAY" ]; then + export LD_LIBRARY_PATH=${lib.getLib glfw-wayland-minecraft}/lib:"$LD_LIBRARY_PATH" + fi + ''; + }; + + postBuild = + lib.optionalString withWaylandGLFW '' + qtWrapperArgs+=(--run "$waylandPreExec") + '' + + '' + wrapQtAppsHook + ''; + + qtWrapperArgs = + let + runtimeLibs = + [ + # lwjgl + glfw + libpulseaudio + libGL + openal + stdenv.cc.cc.lib + + vulkan-loader # VulkanMod's lwjgl + + udev # oshi + + xorg.libX11 + xorg.libXext + xorg.libXcursor + xorg.libXrandr + xorg.libXxf86vm + ] + ++ lib.optional textToSpeechSupport flite + ++ lib.optional gamemodeSupport gamemode.lib + ++ lib.optional controllerSupport libusb1 + ++ additionalLibs; + + runtimePrograms = [ + glxinfo + pciutils # need lspci + xorg.xrandr # needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128 + ] ++ additionalPrograms; + + in + [ "--prefix PRISMLAUNCHER_JAVA_PATHS : ${lib.makeSearchPath "bin/java" jdks}" ] + ++ lib.optionals stdenv.isLinux [ + "--set LD_LIBRARY_PATH ${addOpenGLRunpath.driverLink}/lib:${lib.makeLibraryPath runtimeLibs}" + "--prefix PATH : ${lib.makeBinPath runtimePrograms}" + ]; + + meta = { + inherit (prismlauncher'.meta) + description + longDescription + homepage + changelog + license + maintainers + mainProgram + platforms + ; + }; +} diff --git a/pkgs/games/prismlauncher/default.nix b/pkgs/games/prismlauncher/default.nix deleted file mode 100644 index b9b585a4e5031..0000000000000 --- a/pkgs/games/prismlauncher/default.nix +++ /dev/null @@ -1,90 +0,0 @@ -{ lib -, stdenv -, fetchFromGitHub -, stripJavaArchivesHook -, cmake -, cmark -, Cocoa -, ninja -, jdk17 -, zlib -, qtbase -, quazip -, extra-cmake-modules -, tomlplusplus -, ghc_filesystem -, gamemode -, msaClientID ? null -, gamemodeSupport ? stdenv.isLinux -, -}: -let - libnbtplusplus = fetchFromGitHub { - owner = "PrismLauncher"; - repo = "libnbtplusplus"; - rev = "a5e8fd52b8bf4ab5d5bcc042b2a247867589985f"; - hash = "sha256-A5kTgICnx+Qdq3Fir/bKTfdTt/T1NQP2SC+nhN1ENug="; - }; -in - -assert lib.assertMsg (stdenv.isLinux || !gamemodeSupport) "gamemodeSupport is only available on Linux"; - -stdenv.mkDerivation (finalAttrs: { - pname = "prismlauncher-unwrapped"; - version = "8.3"; - - src = fetchFromGitHub { - owner = "PrismLauncher"; - repo = "PrismLauncher"; - rev = finalAttrs.version; - hash = "sha256-1YGzCgNdzscnOVeNlHMFJa0RbMo6C2qQjtBOeDxHakI="; - }; - - nativeBuildInputs = [ extra-cmake-modules cmake jdk17 ninja stripJavaArchivesHook ]; - buildInputs = - [ - qtbase - zlib - quazip - ghc_filesystem - tomlplusplus - cmark - ] - ++ lib.optional gamemodeSupport gamemode - ++ lib.optionals stdenv.isDarwin [ Cocoa ]; - - hardeningEnable = lib.optionals stdenv.isLinux [ "pie" ]; - - cmakeFlags = [ - # downstream branding - "-DLauncher_BUILD_PLATFORM=nixpkgs" - ] ++ lib.optionals (msaClientID != null) [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ] - ++ lib.optionals (lib.versionOlder qtbase.version "6") [ "-DLauncher_QT_VERSION_MAJOR=5" ] - ++ lib.optionals stdenv.isDarwin [ - "-DINSTALL_BUNDLE=nodeps" - "-DMACOSX_SPARKLE_UPDATE_FEED_URL=''" - "-DCMAKE_INSTALL_PREFIX=${placeholder "out"}/Applications/" - ]; - - postUnpack = '' - rm -rf source/libraries/libnbtplusplus - ln -s ${libnbtplusplus} source/libraries/libnbtplusplus - ''; - - dontWrapQtApps = true; - - meta = { - mainProgram = "prismlauncher"; - homepage = "https://prismlauncher.org/"; - description = "Free, open source launcher for Minecraft"; - longDescription = '' - Allows you to have multiple, separate instances of Minecraft (each with - their own mods, texture packs, saves, etc) and helps you manage them and - their associated options with a simple interface. - ''; - platforms = with lib.platforms; linux ++ darwin; - changelog = "https://github.com/PrismLauncher/PrismLauncher/releases/tag/${finalAttrs.version}"; - license = lib.licenses.gpl3Only; - maintainers = with lib.maintainers; [ minion3665 Scrumplex getchoo ]; - }; -}) diff --git a/pkgs/games/prismlauncher/wrapper.nix b/pkgs/games/prismlauncher/wrapper.nix deleted file mode 100644 index f5b21d70844fc..0000000000000 --- a/pkgs/games/prismlauncher/wrapper.nix +++ /dev/null @@ -1,130 +0,0 @@ -{ lib -, stdenv -, symlinkJoin -, makeWrapper -, wrapQtAppsHook -, addOpenGLRunpath - -, prismlauncher-unwrapped - -, qtbase # needed for wrapQtAppsHook -, qtsvg -, qtwayland -, xorg -, libpulseaudio -, libGL -, glfw -, glfw-wayland-minecraft -, openal -, jdk8 -, jdk17 -, jdk21 -, gamemode -, flite -, glxinfo -, pciutils -, udev -, vulkan-loader -, libusb1 - -, msaClientID ? null -, gamemodeSupport ? stdenv.isLinux -, textToSpeechSupport ? stdenv.isLinux -, controllerSupport ? stdenv.isLinux - - # Adds `glfw-wayland-minecraft` to `LD_LIBRARY_PATH` - # when launched on wayland, allowing for the game to be run natively. - # Make sure to enable "Use system installation of GLFW" in instance settings - # for this to take effect - # - # Warning: This build of glfw may be unstable, and the launcher - # itself can take slightly longer to start -, withWaylandGLFW ? false - -, jdks ? [ jdk21 jdk17 jdk8 ] -, additionalLibs ? [ ] -, additionalPrograms ? [ ] -}: - -assert lib.assertMsg (withWaylandGLFW -> stdenv.isLinux) "withWaylandGLFW is only available on Linux"; - -let - prismlauncher' = prismlauncher-unwrapped.override { - inherit msaClientID gamemodeSupport; - }; -in - -symlinkJoin { - name = "prismlauncher-${prismlauncher'.version}"; - - paths = [ prismlauncher' ]; - - nativeBuildInputs = [ - wrapQtAppsHook - ] - # purposefully using a shell wrapper here for variable expansion - # see https://github.com/NixOS/nixpkgs/issues/172583 - ++ lib.optional withWaylandGLFW makeWrapper; - - buildInputs = [ - qtbase - qtsvg - ] - ++ lib.optional (lib.versionAtLeast qtbase.version "6" && stdenv.isLinux) qtwayland; - - waylandPreExec = lib.optionalString withWaylandGLFW '' - if [ -n "$WAYLAND_DISPLAY" ]; then - export LD_LIBRARY_PATH=${lib.getLib glfw-wayland-minecraft}/lib:"$LD_LIBRARY_PATH" - fi - ''; - - postBuild = '' - ${lib.optionalString withWaylandGLFW '' - qtWrapperArgs+=(--run "$waylandPreExec") - ''} - - wrapQtAppsHook - ''; - - qtWrapperArgs = - let - runtimeLibs = [ - xorg.libX11 - xorg.libXext - xorg.libXcursor - xorg.libXrandr - xorg.libXxf86vm - - # lwjgl - libpulseaudio - libGL - glfw - openal - stdenv.cc.cc.lib - vulkan-loader # VulkanMod's lwjgl - - # oshi - udev - ] - ++ lib.optional gamemodeSupport gamemode.lib - ++ lib.optional textToSpeechSupport flite - ++ lib.optional controllerSupport libusb1 - ++ additionalLibs; - - runtimePrograms = [ - xorg.xrandr - glxinfo - pciutils # need lspci - ] - ++ additionalPrograms; - - in - [ "--prefix PRISMLAUNCHER_JAVA_PATHS : ${lib.makeSearchPath "bin/java" jdks}" ] - ++ lib.optionals stdenv.isLinux [ - "--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}" - ]; - - inherit (prismlauncher') meta; -} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 8d63363da0ea8..b9e125f807928 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -36922,12 +36922,6 @@ with pkgs; principia = callPackage ../games/principia { }; - prismlauncher-unwrapped = kdePackages.callPackage ../games/prismlauncher { - inherit (darwin.apple_sdk.frameworks) Cocoa; - }; - - prismlauncher = kdePackages.callPackage ../games/prismlauncher/wrapper.nix { }; - pong3d = callPackage ../games/pong3d { }; pokerth = libsForQt5.callPackage ../games/pokerth {