From 32b45d0fd742efa3b8e07ae7d83ebfae765c65dc Mon Sep 17 00:00:00 2001 From: Luna <93695520+LunaisLazier@users.noreply.github.com> Date: Sat, 11 Jan 2025 14:19:43 -0600 Subject: [PATCH] Revert "Parity with Upstream towards Nix" This reverts commit 4de9053c05d80ed5bd30229fbf5a4938adcfe974. --- flake.nix | 26 ++++++---- nix/README.md | 8 ++- nix/unwrapped.nix | 24 +++++---- nix/wrapper.nix | 121 ++++++++++++++++++++++++++++------------------ 4 files changed, 107 insertions(+), 72 deletions(-) diff --git a/flake.nix b/flake.nix index b1db6afc3..2e53b1213 100644 --- a/flake.nix +++ b/flake.nix @@ -85,17 +85,23 @@ formatter = forAllSystems (system: nixpkgsFor.${system}.nixfmt-rfc-style); - overlays.default = final: prev: { - shatteredprism-unwrapped = prev.callPackage ./nix/unwrapped.nix { - inherit - libnbtplusplus - nix-filter - self - ; - }; + overlays.default = + final: prev: + let + version = builtins.substring 0 8 self.lastModifiedDate or "dirty"; + in + { + shatteredprism-unwrapped = prev.callPackage ./nix/unwrapped.nix { + inherit + libnbtplusplus + nix-filter + self + version + ; + }; - shatteredprism = final.callPackage ./nix/wrapper.nix { }; - }; + shatteredprism = final.callPackage ./nix/wrapper.nix { }; + }; packages = forAllSystems ( system: diff --git a/nix/README.md b/nix/README.md index 5e8ab74c5..df724b41e 100644 --- a/nix/README.md +++ b/nix/README.md @@ -1,5 +1,11 @@ # Shattered Prism Nix Packaging +## Installing a stable release (nixpkgs) + +Shattered Prism is packaged in [nixpkgs](https://github.com/NixOS/nixpkgs/) since 22.11. + +See [Package variants](#package-variants) for a list of available packages. + ## Installing a development release (flake) We use [cachix](https://cachix.org/) to cache our development and release builds. @@ -199,7 +205,7 @@ nix-env -iA shatteredprism.shatteredprism ## Package variants -This repository offers the following packages: +Both Nixpkgs and this repository offer the following packages: - `shatteredprism` - The preferred build, wrapped with everything necessary to run the launcher and Minecraft - `shatteredprism-unwrapped` - A minimal build that allows for advanced customization of the launcher's runtime environment diff --git a/nix/unwrapped.nix b/nix/unwrapped.nix index 74071d327..26b598e4e 100644 --- a/nix/unwrapped.nix +++ b/nix/unwrapped.nix @@ -3,13 +3,12 @@ stdenv, cmake, cmark, - apple-sdk_11, + darwin, extra-cmake-modules, gamemode, ghc_filesystem, jdk17, kdePackages, - libnbtplusplus, ninja, nix-filter, self, @@ -18,14 +17,16 @@ zlib, msaClientID ? null, - gamemodeSupport ? stdenv.hostPlatform.isLinux, + gamemodeSupport ? stdenv.isLinux, + version, + libnbtplusplus, }: assert lib.assertMsg ( - gamemodeSupport -> stdenv.hostPlatform.isLinux + gamemodeSupport -> stdenv.isLinux ) "gamemodeSupport is only available on Linux."; stdenv.mkDerivation { pname = "shatteredprism-unwrapped"; - version = self.shortRev or self.dirtyShortRev or "unknown"; + inherit version; src = nix-filter.lib { root = self; @@ -64,23 +65,20 @@ stdenv.mkDerivation { tomlplusplus zlib ] - ++ lib.optionals stdenv.hostPlatform.isDarwin [ apple-sdk_11 ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ darwin.apple_sdk.frameworks.Cocoa ] ++ lib.optional gamemodeSupport gamemode; - hardeningEnable = lib.optionals stdenv.hostPlatform.isLinux [ "pie" ]; + hardeningEnable = lib.optionals stdenv.isLinux [ "pie" ]; cmakeFlags = - [ - # downstream branding - (lib.cmakeFeature "Launcher_BUILD_PLATFORM" "nixpkgs") - ] + [ (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.hostPlatform.isDarwin [ + ++ lib.optionals stdenv.isDarwin [ # we wrap our binary manually (lib.cmakeFeature "INSTALL_BUNDLE" "nodeps") # disable built-in updater @@ -102,7 +100,7 @@ stdenv.mkDerivation { homepage = "https://github.com/lunaislazier/ShatteredPrism"; license = lib.licenses.gpl3Only; maintainers = with lib.maintainers; [ - evan-goode + lunaislazier ]; mainProgram = "shatteredprism"; platforms = lib.platforms.linux ++ lib.platforms.darwin; diff --git a/nix/wrapper.nix b/nix/wrapper.nix index f3c7246e2..7bbbd4a63 100644 --- a/nix/wrapper.nix +++ b/nix/wrapper.nix @@ -1,51 +1,56 @@ { - addDriverRunpath, - alsa-lib, - flite, - gamemode, - glfw3-minecraft, - jdk17, - jdk21, - jdk8, - kdePackages, lib, - libGL, - libX11, - libXcursor, - libXext, - libXrandr, - libXxf86vm, - libjack2, - libpulseaudio, - libusb1, - mesa-demos, - openal, - pciutils, - pipewire, - shatteredprism-unwrapped, stdenv, symlinkJoin, + shatteredprism-unwrapped, + addDriverRunpath, + flite, + gamemode, + glfw, + glfw-wayland-minecraft, + glxinfo, + jdk8, + jdk17, + jdk21, + kdePackages, + libGL, + libpulseaudio, + libusb1, + makeWrapper, + openal, + pciutils, udev, vulkan-loader, - xrandr, + xorg, additionalLibs ? [ ], additionalPrograms ? [ ], - controllerSupport ? stdenv.hostPlatform.isLinux, - gamemodeSupport ? stdenv.hostPlatform.isLinux, + controllerSupport ? stdenv.isLinux, + gamemodeSupport ? stdenv.isLinux, jdks ? [ jdk21 jdk17 jdk8 ], msaClientID ? null, - textToSpeechSupport ? stdenv.hostPlatform.isLinux, + 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.hostPlatform.isLinux + controllerSupport -> stdenv.isLinux ) "controllerSupport only has an effect on Linux."; assert lib.assertMsg ( - textToSpeechSupport -> stdenv.hostPlatform.isLinux + textToSpeechSupport -> stdenv.isLinux ) "textToSpeechSupport only has an effect on Linux."; +assert lib.assertMsg ( + withWaylandGLFW -> stdenv.isLinux +) "withWaylandGLFW is only available on Linux."; let shatteredprism' = shatteredprism-unwrapped.override { inherit msaClientID gamemodeSupport; }; in @@ -55,7 +60,13 @@ symlinkJoin { paths = [ shatteredprism' ]; - nativeBuildInputs = [ kdePackages.wrapQtAppsHook ]; + 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 = [ @@ -63,18 +74,30 @@ symlinkJoin { kdePackages.qtsvg ] ++ lib.optional ( - lib.versionAtLeast kdePackages.qtbase.version "6" && stdenv.hostPlatform.isLinux + lib.versionAtLeast kdePackages.qtbase.version "6" && stdenv.isLinux ) kdePackages.qtwayland; - postBuild = '' - wrapQtAppsHook - ''; + 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 = [ - (lib.getLib stdenv.cc.cc) + stdenv.cc.cc.lib ## native versions glfw3-minecraft openal @@ -83,19 +106,19 @@ symlinkJoin { alsa-lib libjack2 libpulseaudio - pipewire - - ## glfw libGL - libX11 - libXcursor - libXext - libXrandr - libXxf86vm + openal + stdenv.cc.cc.lib + + vulkan-loader # VulkanMod's lwjgl udev # oshi - vulkan-loader # VulkanMod's lwjgl + xorg.libX11 + xorg.libXext + xorg.libXcursor + xorg.libXrandr + xorg.libXxf86vm ] ++ lib.optional textToSpeechSupport flite ++ lib.optional gamemodeSupport gamemode.lib @@ -103,14 +126,16 @@ symlinkJoin { ++ additionalLibs; runtimePrograms = [ - mesa-demos + glxinfo pciutils # need lspci - xrandr # needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128 + xorg.xrandr # needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128 ] ++ additionalPrograms; in - [ "--prefix SHATTEREDPRISM_JAVA_PATHS : ${lib.makeSearchPath "bin/java" jdks}" ] - ++ lib.optionals stdenv.hostPlatform.isLinux [ + [ + "--prefix SHATTEREDPRISM_JAVA_PATHS : ${lib.makeSearchPath "bin/java" jdks}" + ] + ++ lib.optionals stdenv.isLinux [ "--set LD_LIBRARY_PATH ${addDriverRunpath.driverLink}/lib:${lib.makeLibraryPath runtimeLibs}" "--prefix PATH : ${lib.makeBinPath runtimePrograms}" ];