Nixerus/pkgs/apps/games/polymc/default.nix

195 lines
5.0 KiB
Nix
Raw Normal View History

{
stdenv,
fetchurl,
lib,
fetchFromGitHub,
cmake,
ninja,
jdk,
ghc_filesystem,
zlib,
file,
wrapQtAppsHook,
xorg,
libpulseaudio,
openal,
qtbase,
qtwayland,
qtsvg,
glfw3-minecraft,
pciutils,
udev,
glxinfo,
quazip,
libGL,
flite,
tomlplusplus,
addDriverRunpath,
vulkan-loader,
msaClientID ? null,
extra-cmake-modules,
qtcharts,
makeWrapper,
gamemode,
mangohud,
strictDrm ? false,
2023-05-23 02:11:55 +02:00
}:
let
polymc =
let
binpath = lib.makeBinPath [
xorg.xrandr
glxinfo
pciutils
];
libpath =
with xorg;
lib.makeLibraryPath [
glfw3-minecraft
libX11
libXext
libXcursor
libXrandr
libXxf86vm
libGL
vulkan-loader
openal
libpulseaudio
udev
flite
stdenv.cc.cc.lib
];
2025-04-09 19:30:03 +02:00
gameLibraryPath = libpath + ":${addDriverRunpath.driverLink}/lib";
in
stdenv.mkDerivation rec {
pname = "polymc" + (lib.optionalString ((lib.versions.major qtbase.version) == "5") "-qt5");
2025-04-09 20:38:21 +02:00
version = "7.0";
2025-04-21 07:22:23 +02:00
patches = [
# Fix for Qt >= 6.9.0
(fetchurl {
2025-04-21 07:22:23 +02:00
url = "https://github.com/PolyMC/PolyMC/commit/0dc124d636d76692b1e2c01050743dd87dc78a05.patch";
hash = "sha256-ACrS7JAcLq46f8puQlfvPlRb6vk/+wuv+y1yqGQjp/I=";
})
];
libnbtplusplus = fetchFromGitHub {
owner = "PolyMC";
repo = "libnbtplusplus";
rev = "2203af7eeb48c45398139b583615134efd8d407f";
hash = "sha256-TvVOjkUobYJD9itQYueELJX3wmecvEdCbJ0FinW2mL4=";
};
src = fetchFromGitHub {
owner = "PolyMC";
repo = "PolyMC";
rev = version;
2025-04-09 20:38:21 +02:00
sha256 = "sha256-tJA/xSfqRXZK/OXbxhLNqUJU5nQGVzxgownXUMTy284=";
};
postUnpack = ''
rm -rf source/libraries/libnbtplusplus
ln -s ${libnbtplusplus} source/libraries/libnbtplusplus
'';
dontWrapQtApps = true;
nativeBuildInputs = [
cmake
extra-cmake-modules
ninja
2025-04-09 19:30:03 +02:00
jdk
wrapQtAppsHook
file
ghc_filesystem
];
buildInputs = [
qtbase
qtsvg
qtcharts
qtwayland
quazip
tomlplusplus
zlib
];
cmakeFlags = [
"-GNinja"
(lib.cmakeFeature "Launcher_BUILD_PLATFORM" "nixerus")
(lib.cmakeFeature "Launcher_QT_VERSION_MAJOR" (lib.versions.major qtbase.version))
(lib.cmakeBool "Launcher_STRICT_DRM" strictDrm)
] ++ lib.optionals (msaClientID != null) [ "-DLauncher_MSA_CLIENT_ID=${msaClientID}" ];
postPatch = ''
substituteInPlace launcher/java/JavaUtils.cpp \
--replace 'scanJavaDir("/app/jdk");' 'scanJavaDir("/app/jdk"); javas.append("${jdk}/lib/openjdk/bin/java");'
'';
postFixup = ''
wrapQtApp $out/bin/polymc \
--suffix LD_LIBRARY_PATH : "${gameLibraryPath}" \
--suffix PATH : "${binpath}" \
--set-default ALSOFT_DRIVERS "pulse"
'';
passthru = {
wrap =
{
extraJDKs ? [ ],
extraPaths ? [ ],
extraLibs ? [ ],
withMangohud ? true,
withGamemode ? true,
}:
stdenv.mkDerivation rec {
pname = "${polymc.pname}-wrapped";
version = polymc.version;
libsPath =
(lib.makeLibraryPath (extraLibs ++ lib.optional withGamemode gamemode.lib))
+ lib.optionalString withMangohud ":${mangohud + "/lib/mangohud"}";
binsPath = lib.makeBinPath (extraPaths ++ lib.optional withMangohud mangohud);
src = polymc;
nativeBuildInputs = [ makeWrapper ];
phases = [
"installPhase"
"fixupPhase"
];
installPhase = ''
mkdir -p $out/bin
ln -s $src/bin/polymc $out/bin/polymc
ln -s $src/share $out/share
'';
postFixup =
let
javaPaths = lib.makeSearchPath "bin/java" extraJDKs;
in
''
wrapProgram $out/bin/polymc \
--prefix LD_LIBRARY_PATH : "${libsPath}" \
--prefix POLYMC_JAVA_PATHS : "${javaPaths}" \
--prefix PATH : "${binsPath}"
'';
preferLocalBuild = true;
meta = polymc.meta;
};
};
meta = with lib; {
homepage = "https://polymc.org/";
downloadPage = "https://polymc.org/download/";
changelog = "https://github.com/PolyMC/PolyMC/releases";
description = "A 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.
2023-05-23 02:11:55 +02:00
'';
platforms = [ "x86_64-linux" ];
license = licenses.gpl3Only;
2023-05-23 02:11:55 +02:00
};
};
2023-05-23 02:11:55 +02:00
in
polymc