pollymc/packages/nix/polymc/default.nix
Joshua Goins ec1e27031a Fix Freedesktop icons
This fixes #51. The desktop file is now exactly the same as the window class,
which is also now corrected to org.polymc.polymc. The file capitalization
is also consistent with other Freedesktop files as well.
2022-01-27 00:08:53 -05:00

100 lines
2.4 KiB
Nix

{ lib
, mkDerivation
, fetchFromGitHub
, makeDesktopItem
, cmake
, ninja
, jdk8
, jdk
, zlib
, file
, makeWrapper
, xorg
, libpulseaudio
, qtbase
, libGL
, msaClientID ? ""
# flake
, self
, submoduleNbt
, submoduleQuazip
}:
let
# Libraries required to run Minecraft
libpath = with xorg; lib.makeLibraryPath [
libX11
libXext
libXcursor
libXrandr
libXxf86vm
libpulseaudio
libGL
];
# This variable will be passed to Minecraft by PolyMC
gameLibraryPath = libpath + ":/run/opengl-driver/lib";
in
mkDerivation rec {
pname = "polymc";
version = "nightly";
src = lib.cleanSource self;
nativeBuildInputs = [ cmake ninja file makeWrapper ];
buildInputs = [ qtbase jdk8 zlib ];
dontWrapQtApps = true;
postPatch = ''
# hardcode jdk paths
substituteInPlace launcher/java/JavaUtils.cpp \
--replace 'scanJavaDir("/usr/lib/jvm")' 'javas.append("${jdk}/lib/openjdk/bin/java")' \
--replace 'scanJavaDir("/usr/lib32/jvm")' 'javas.append("${jdk8}/lib/openjdk/bin/java")'
'' + lib.optionalString (msaClientID != "") ''
# add client ID
substituteInPlace CMakeLists.txt \
--replace '17b47edd-c884-4997-926d-9e7f9a6b4647' '${msaClientID}'
'';
postUnpack = ''
# Copy submodules inputs
rm -rf source/libraries/{libnbtplusplus,quazip}
mkdir source/libraries/{libnbtplusplus,quazip}
cp -a ${submoduleNbt}/* source/libraries/libnbtplusplus
cp -a ${submoduleQuazip}/* source/libraries/quazip
chmod a+r+w source/libraries/{libnbtplusplus,quazip}/*
'';
cmakeFlags = [
"-GNinja"
"-DLauncher_LAYOUT=lin-system"
];
desktopItem = makeDesktopItem {
name = "polymc";
exec = "polymc";
icon = "polymc";
desktopName = "PolyMC";
genericName = "Minecraft Launcher";
comment = "A custom launcher for Minecraft";
categories = "Game;";
extraEntries = ''
Keywords=game;Minecraft;
'';
};
postInstall = ''
install -Dm644 ../launcher/resources/multimc/scalable/launcher.svg $out/share/pixmaps/polymc.svg
install -Dm644 ${desktopItem}/share/applications/polymc.desktop $out/share/applications/org.polymc.polymc.desktop
# xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128
wrapProgram $out/bin/polymc \
"''${qtWrapperArgs[@]}" \
--set GAME_LIBRARY_PATH ${gameLibraryPath} \
--prefix PATH : ${lib.makeBinPath [ xorg.xrandr jdk ]}
'';
}