polymc: Formatting, fix gamemode/mangohud, use tomlplusplus from nixpkgs

This commit is contained in:
Mateusz Słodkowicz 2025-05-10 13:41:39 +02:00
parent b148d7e059
commit a168213719
Signed by: materus
GPG Key ID: 28D140BCA60B4FD1
1 changed files with 100 additions and 88 deletions

View File

@ -1,85 +1,97 @@
{ stdenv {
, fetchurl stdenv,
, lib fetchurl,
, fetchFromGitHub lib,
, cmake fetchFromGitHub,
, ninja cmake,
, jdk ninja,
, ghc_filesystem jdk,
, zlib ghc_filesystem,
, file zlib,
, wrapQtAppsHook file,
, xorg wrapQtAppsHook,
, libpulseaudio xorg,
, openal libpulseaudio,
, qtbase openal,
, qtwayland qtbase,
, qtsvg qtwayland,
, glfw qtsvg,
, pciutils glfw3-minecraft,
, udev pciutils,
, glxinfo udev,
, quazip glxinfo,
, libGL quazip,
, flite libGL,
, addDriverRunpath flite,
, vulkan-loader tomlplusplus,
, msaClientID ? null addDriverRunpath,
, extra-cmake-modules vulkan-loader,
, qtcharts msaClientID ? null,
, makeWrapper extra-cmake-modules,
, gamemode qtcharts,
, mangohud makeWrapper,
, glfw-wayland-minecraft gamemode,
, writeShellScript mangohud,
strictDrm ? false,
}: }:
let let
polymc = polymc =
let let
binpath = lib.makeBinPath ([ xorg.xrandr glxinfo pciutils ]); binpath = lib.makeBinPath [
xorg.xrandr
libpath = with xorg; lib.makeLibraryPath ([ glxinfo
libX11 pciutils
libXext ];
libXcursor libpath =
libXrandr with xorg;
libXxf86vm lib.makeLibraryPath [
libpulseaudio glfw3-minecraft
libGL libX11
vulkan-loader libXext
glfw libXcursor
openal libXrandr
udev libXxf86vm
flite
stdenv.cc.cc.lib libGL
]); vulkan-loader
openal
libpulseaudio
udev
flite
stdenv.cc.cc.lib
];
gameLibraryPath = libpath + ":${addDriverRunpath.driverLink}/lib"; gameLibraryPath = libpath + ":${addDriverRunpath.driverLink}/lib";
in in
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "polymc" + (lib.optionalString ((lib.versions.major qtbase.version) == "5") "-qt5"); pname = "polymc" + (lib.optionalString ((lib.versions.major qtbase.version) == "5") "-qt5");
version = "7.0"; version = "7.0";
patches = [ patches = [
# Fix for Qt >= 6.9.0 # Fix for Qt >= 6.9.0
(fetchurl { (fetchurl {
url = "https://github.com/PolyMC/PolyMC/commit/0dc124d636d76692b1e2c01050743dd87dc78a05.patch"; url = "https://github.com/PolyMC/PolyMC/commit/0dc124d636d76692b1e2c01050743dd87dc78a05.patch";
hash = "sha256-ACrS7JAcLq46f8puQlfvPlRb6vk/+wuv+y1yqGQjp/I="; hash = "sha256-ACrS7JAcLq46f8puQlfvPlRb6vk/+wuv+y1yqGQjp/I=";
}) })
]; ];
libnbtplusplus = fetchFromGitHub {
owner = "PolyMC";
repo = "libnbtplusplus";
rev = "2203af7eeb48c45398139b583615134efd8d407f";
hash = "sha256-TvVOjkUobYJD9itQYueELJX3wmecvEdCbJ0FinW2mL4=";
};
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "PolyMC"; owner = "PolyMC";
repo = "PolyMC"; repo = "PolyMC";
rev = version; rev = version;
sha256 = "sha256-tJA/xSfqRXZK/OXbxhLNqUJU5nQGVzxgownXUMTy284="; sha256 = "sha256-tJA/xSfqRXZK/OXbxhLNqUJU5nQGVzxgownXUMTy284=";
fetchSubmodules = true;
}; };
postUnpack = ''
rm -rf source/libraries/libnbtplusplus
ln -s ${libnbtplusplus} source/libraries/libnbtplusplus
'';
dontWrapQtApps = true; dontWrapQtApps = true;
nativeBuildInputs = [ nativeBuildInputs = [
cmake cmake
@ -96,25 +108,23 @@ let
qtcharts qtcharts
qtwayland qtwayland
quazip quazip
tomlplusplus
zlib zlib
]; ];
cmakeFlags = [ cmakeFlags = [
"-GNinja" "-GNinja"
"-DLauncher_QT_VERSION_MAJOR=${lib.versions.major qtbase.version}" (lib.cmakeFeature "Launcher_BUILD_PLATFORM" "nixerus")
] (lib.cmakeFeature "Launcher_QT_VERSION_MAJOR" (lib.versions.major qtbase.version))
++ lib.optionals (msaClientID != null) [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ]; (lib.cmakeBool "Launcher_STRICT_DRM" strictDrm)
] ++ lib.optionals (msaClientID != null) [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ];
postPatch = '' postPatch = ''
# hardcode jdk paths
substituteInPlace launcher/java/JavaUtils.cpp \ substituteInPlace launcher/java/JavaUtils.cpp \
--replace 'scanJavaDir("/usr/lib/jvm")' 'javas.append("${jdk}/lib/openjdk/bin/java")' --replace 'scanJavaDir("/app/jdk");' 'scanJavaDir("/app/jdk"); javas.append("${jdk}/lib/openjdk/bin/java");'
''; '';
postFixup = '' postFixup = ''
# xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128
wrapQtApp $out/bin/polymc \ wrapQtApp $out/bin/polymc \
--suffix LD_LIBRARY_PATH : "${gameLibraryPath}" \ --suffix LD_LIBRARY_PATH : "${gameLibraryPath}" \
--suffix PATH : "${binpath}" \ --suffix PATH : "${binpath}" \
@ -122,41 +132,43 @@ let
''; '';
passthru = { passthru = {
wrap = wrap =
{ extraJDKs ? [ ] {
, extraPaths ? [ ] extraJDKs ? [ ],
, extraLibs ? [ ] extraPaths ? [ ],
, withWaylandGLFW ? false extraLibs ? [ ],
, withMangohud ? true withMangohud ? true,
, withGamemode ? true withGamemode ? true,
}: stdenv.mkDerivation rec { }:
stdenv.mkDerivation rec {
pname = "${polymc.pname}-wrapped"; pname = "${polymc.pname}-wrapped";
version = polymc.version; version = polymc.version;
libsPath = (lib.makeLibraryPath (extraLibs ++ lib.optional withGamemode gamemode.lib)) + lib.optionalString withMangohud "${mangohud + "/lib/mangohud"}"; libsPath =
(lib.makeLibraryPath (extraLibs ++ lib.optional withGamemode gamemode.lib))
+ lib.optionalString withMangohud ":${mangohud + "/lib/mangohud"}";
binsPath = lib.makeBinPath (extraPaths ++ lib.optional withMangohud mangohud); binsPath = lib.makeBinPath (extraPaths ++ lib.optional withMangohud mangohud);
waylandPreExec = writeShellScript "waylandGLFW" ''
if [ -n "$WAYLAND_DISPLAY" ]; then
export LD_LIBRARY_PATH=${lib.getLib glfw-wayland-minecraft}/lib:"$LD_LIBRARY_PATH"
fi
'';
src = polymc; src = polymc;
nativeBuildInputs = [ makeWrapper ]; nativeBuildInputs = [ makeWrapper ];
phases = [ "installPhase" "fixupPhase" ]; phases = [
"installPhase"
"fixupPhase"
];
installPhase = '' installPhase = ''
mkdir -p $out/bin mkdir -p $out/bin
ln -s $src/bin/polymc $out/bin/polymc ln -s $src/bin/polymc $out/bin/polymc
ln -s $src/share $out/share ln -s $src/share $out/share
''; '';
postFixup = let javaPaths = lib.makeSearchPath "bin/java" (extraJDKs); in postFixup =
let
javaPaths = lib.makeSearchPath "bin/java" extraJDKs;
in
'' ''
wrapProgram $out/bin/polymc \ wrapProgram $out/bin/polymc \
--suffix LD_LIBRARY_PATH : "${libsPath}" \ --prefix LD_LIBRARY_PATH : "${libsPath}" \
--suffix POLYMC_JAVA_PATHS : "${javaPaths}" \ --prefix POLYMC_JAVA_PATHS : "${javaPaths}" \
--suffix PATH : "${binsPath}" ${lib.optionalString withWaylandGLFW ''--run ${waylandPreExec}''} --prefix PATH : "${binsPath}"
''; '';
preferLocalBuild = true; preferLocalBuild = true;