diff options
| -rw-r--r-- | flake.nix | 1 | ||||
| -rw-r--r-- | lib/default.nix | 1 | ||||
| -rw-r--r-- | lib/mkMultiMCPack.nix | 55 |
3 files changed, 57 insertions, 0 deletions
@@ -27,6 +27,7 @@ inherit (lib') fetchPackwizModpack + mkMultiMCPack ; }); diff --git a/lib/default.nix b/lib/default.nix index f69ade0..ac879ce 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -1,5 +1,6 @@ final: prev: { fetchPackwizModpack = final.callPackage ./fetchPackwizModpack.nix {}; + mkMultiMCPack = final.callPackage ./mkMultiMCPack.nix {}; packwiz-installer-bootstrap = prev.callPackage ./packwiz-installer-bootstrap.nix {}; packwiz-installer = prev.callPackage ./packwiz-installer.nix {}; diff --git a/lib/mkMultiMCPack.nix b/lib/mkMultiMCPack.nix new file mode 100644 index 0000000..0c28d6c --- /dev/null +++ b/lib/mkMultiMCPack.nix @@ -0,0 +1,55 @@ +{ + lib, + stdenvNoCC, + zip, + strip-nondeterminism, + packwiz-installer-bootstrap, +}: { + pname ? null, + version ? "", + src ? null, + extraFiles ? {}, + instanceCfg, + ... +} @ args: +stdenvNoCC.mkDerivation (finalAttrs: + { + pname = src.pname or pname; + version = src.version or version; + + dontUnpack = true; + dontConfig = true; + dontBuild = true; + + nativeBuildInputs = [zip]; + + installPhase = let + modpackFiles = + { + "packwiz-installer-bootstrap.jar" = packwiz-installer-bootstrap; + "instance.cfg" = instanceCfg; + } + // extraFiles; + in + '' + runHook preInstall + + mkdir -p $out + tmp="$(mktemp -d)" + '' + + (lib.concatLines ( + lib.mapAttrsToList + (name: file: '' + mkdir -p "$tmp"/"$(dirname ${name})" + cp -as ${file} "$tmp"/${name} + '') + modpackFiles + )) + + '' + cd "$tmp" + zip -r $out/${finalAttrs.pname}-${finalAttrs.version}.zip {*,.*} + + ${lib.getExe strip-nondeterminism} $out/${finalAttrs.pname}-${finalAttrs.version}.zip + ''; + } + // args) |
