diff --git a/.gitignore b/.gitignore index a2f4e78a..3f76a608 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,6 @@ builddir # Deb packages/debian/polymc/usr/ packages/debian/polymc.deb -packages/debian/polymc/DEBIAN/control \ No newline at end of file +packages/debian/polymc/DEBIAN/control +# Nix/NixOS +result/ diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..131a9112 --- /dev/null +++ b/flake.lock @@ -0,0 +1,77 @@ +{ + "nodes": { + "flake-utils": { + "locked": { + "lastModified": 1638122382, + "narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "74f7e4319258e287b0f9cb95426c9853b282730b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "libnbtplusplus": { + "flake": false, + "locked": { + "lastModified": 1591558203, + "narHash": "sha256-QgvNvaoFflCXEPCCFBCeZvYTpuiwScBG7EosUgFwFNQ=", + "owner": "multimc", + "repo": "libnbtplusplus", + "rev": "dc72a20b7efd304d12af2025223fad07b4b78464", + "type": "github" + }, + "original": { + "owner": "multimc", + "repo": "libnbtplusplus", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1641528457, + "narHash": "sha256-FyU9E63n1W7Ql4pMnhW2/rO9OftWZ37pLppn/c1aisY=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "ff377a78794d412a35245e05428c8f95fef3951f", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "quazip": { + "flake": false, + "locked": { + "lastModified": 1633895098, + "narHash": "sha256-+Of0M2IAoTf1CyC0teCpsyurv6xfqiBo84V49dSeNTA=", + "owner": "multimc", + "repo": "quazip", + "rev": "b1a72ac0bb5a732bf887a535ab75c6f9bedb6b6b", + "type": "github" + }, + "original": { + "owner": "multimc", + "repo": "quazip", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "libnbtplusplus": "libnbtplusplus", + "nixpkgs": "nixpkgs", + "quazip": "quazip" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix index 8f8325c0..825f747e 100644 --- a/flake.nix +++ b/flake.nix @@ -1,7 +1,50 @@ { - description = "PolyMC"; - - outputs = inputs: { - overlay = import ./packages/nix/overlay.nix; + description = "PolyMC flake"; + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.libnbtplusplus = { + url = "github:multimc/libnbtplusplus"; + flake = false; }; + inputs.quazip = { + url = "github:multimc/quazip"; + flake = false; + }; + + outputs = inputs@{ self, nixpkgs, flake-utils, libnbtplusplus, quazip, ... }: + flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (system: + let + pkgs = import nixpkgs { + inherit system; + }; + + packages = { + polymc = pkgs.libsForQt5.callPackage ./packages/nix/polymc { + inherit self; + submoduleQuazip = quazip; + submoduleNbt = libnbtplusplus; + }; + }; + + overlay = (final: prev: rec { + polymc = prev.libsForQt5.callPackage ./packages/nix/polymc { + inherit self; + submoduleQuazip = quazip; + submoduleNbt = libnbtplusplus; + }; + }); + + apps = { + polymc = flake-utils.lib.mkApp { + name = "polymc"; + drv = packages.polymc; + }; + }; + in + { + inherit packages overlay apps; + defaultPackage = packages.polymc; + defaultApp = apps.polymc; + } + ); } diff --git a/packages/nix/overlay.nix b/packages/nix/overlay.nix deleted file mode 100644 index 5a494459..00000000 --- a/packages/nix/overlay.nix +++ /dev/null @@ -1,3 +0,0 @@ -self: super: rec { - polymc = super.libsForQt5.callPackage ./polymc {}; -} \ No newline at end of file diff --git a/packages/nix/polymc/0001-pick-latest-java-first.patch b/packages/nix/polymc/0001-pick-latest-java-first.patch deleted file mode 100644 index a65dcbfd..00000000 --- a/packages/nix/polymc/0001-pick-latest-java-first.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 44e1b2a19a869b907b40e56c85c8a47aa6c22097 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Mustafa=20=C3=87al=C4=B1=C5=9Fkan?= -Date: Tue, 22 Jun 2021 21:50:11 +0300 -Subject: [PATCH] pick latest java first - ---- - launcher/java/JavaInstallList.cpp | 4 ++-- - launcher/java/JavaUtils.cpp | 2 +- - 2 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/launcher/java/JavaInstallList.cpp b/launcher/java/JavaInstallList.cpp -index 0bded03c..40898e20 100644 ---- a/launcher/java/JavaInstallList.cpp -+++ b/launcher/java/JavaInstallList.cpp -@@ -120,8 +120,8 @@ void JavaInstallList::updateListData(QList versions) - - bool sortJavas(BaseVersionPtr left, BaseVersionPtr right) - { -- auto rleft = std::dynamic_pointer_cast(left); -- auto rright = std::dynamic_pointer_cast(right); -+ auto rleft = std::dynamic_pointer_cast(right); -+ auto rright = std::dynamic_pointer_cast(left); - return (*rleft) > (*rright); - } - -diff --git a/launcher/java/JavaUtils.cpp b/launcher/java/JavaUtils.cpp -index 5f004a10..6d633631 100644 ---- a/launcher/java/JavaUtils.cpp -+++ b/launcher/java/JavaUtils.cpp -@@ -350,7 +350,6 @@ QList JavaUtils::FindJavaPaths() - qDebug() << "Linux Java detection incomplete - defaulting to \"java\""; - - QList javas; -- javas.append(this->GetDefaultJava()->path); - auto scanJavaDir = [&](const QString & dirPath) - { - QDir dir(dirPath); -@@ -379,6 +378,7 @@ QList JavaUtils::FindJavaPaths() - // general locations used by distro packaging - scanJavaDir("/usr/lib/jvm"); - scanJavaDir("/usr/lib32/jvm"); -+ javas.append(this->GetDefaultJava()->path); - // javas stored in MultiMC's folder - scanJavaDir("java"); - return javas; --- -2.31.1 - diff --git a/packages/nix/polymc/default.nix b/packages/nix/polymc/default.nix index 5f1a0f27..4f80ff34 100644 --- a/packages/nix/polymc/default.nix +++ b/packages/nix/polymc/default.nix @@ -1,49 +1,79 @@ -{ lib, mkDerivation, fetchFromGitHub, cmake, jdk8, jdk, zlib, file, makeWrapper, xorg, libpulseaudio, qtbase, libGL, msaClientID ? "" }: +{ lib +, mkDerivation +, fetchFromGitHub +, makeDesktopItem +, substituteAll +, fetchpatch +, cmake +, ninja +, jdk8 +, jdk +, zlib +, file +, makeWrapper +, xorg +, libpulseaudio +, qtbase +, libGL +# submodules +, self +, submoduleNbt +, submoduleQuazip +}: let - libpath = with xorg; lib.makeLibraryPath [ libX11 libXext libXcursor libXrandr libXxf86vm libpulseaudio libGL ]; -in + gameLibraryPath = with xorg; lib.makeLibraryPath [ + libX11 + libXext + libXcursor + libXrandr + libXxf86vm + libpulseaudio + libGL + ]; +in + mkDerivation rec { pname = "polymc"; - version = "1.0.4"; - src = fetchFromGitHub { - owner = "PolyMC"; - repo = "PolyMC"; - rev = "${version}"; - sha256 = "sha256-8aya0KfV9F+i2qBpweWcR9hwyTSQkqn2wHdtkCEeNvk="; - fetchSubmodules = true; - }; - nativeBuildInputs = [ cmake file makeWrapper ]; + version = "nightly"; + + src = lib.cleanSource self; + + nativeBuildInputs = [ cmake ninja file makeWrapper ]; buildInputs = [ qtbase jdk8 zlib ]; - patches = [ ./0001-pick-latest-java-first.patch ]; - - 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")' + postUnpack = '' + 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 = [ "-DLauncher_LAYOUT=lin-system" ]; + 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/multimc.svg + install -Dm755 ${desktopItem}/share/applications/polymc.desktop -t $out/share/applications # xorg.xrandr needed for LWJGL [2.9.2, 3) https://github.com/LWJGL/lwjgl/issues/128 wrapProgram $out/bin/polymc \ - --set GAME_LIBRARY_PATH /run/opengl-driver/lib:${libpath} \ - --prefix PATH : ${lib.makeBinPath [ xorg.xrandr ]} - - substituteInPlace $out/share/applications/org.polymc.PolyMC.desktop --replace 'Exec=' 'Exec=${placeholder "out"}/bin/polymc' + --set GAME_LIBRARY_PATH /run/opengl-driver/lib:${gameLibraryPath} \ + --prefix PATH : ${lib.makeBinPath [ xorg.xrandr jdk ]} ''; - - meta = with lib; { - homepage = "https://github.com/PolyMC/PolyMC"; - 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. - ''; - platforms = platforms.linux; - license = licenses.gpl3; - maintainers = with maintainers; [ cidkid ]; - }; -} \ No newline at end of file +}