{ nixpkgs, ... }: let lib = nixpkgs.lib; eachSystem = fn: lib.genAttrs lib.systems.flakeExposed (system: fn (import nixpkgs { inherit system; })); mkModpack = builder: let mkPackages = pkgs: let bootstrap = pkgs.fetchurl { url = "https://github.com/packwiz/packwiz-installer-bootstrap/releases/download/v0.0.3/packwiz-installer-bootstrap.jar"; sha256 = "qPuyTcYEJ46X9GiOgtPZGjGLmO/AjV2/y8vKtkQ9EWw="; }; buildInfo = builder pkgs.system; in rec { default = server; server = pkgs.writeShellScriptBin "minecraft-server" '' ${lib.getExe pkgs.jre} -jar ${bootstrap} -g -s server ${buildInfo.packUrl} ${buildInfo.server}/bin/minecraft-server ''; client = pkgs.stdenvNoCC.mkDerivation { name = "minecraft-client"; dontUnpack = true; mmcpack = '' { "components": [ { "important": true, "uid": "net.minecraft", "version": "${buildInfo.clientGameVersion}" }, { "uid": "${buildInfo.clientLoaderUid}", "version": "${buildInfo.clientLoaderVersion}" } ], "formatVersion": 1 } ''; instancecfg = pkgs.writeText "instance.cfg" '' [General] ConfigVersion=1.2 InstanceType=OneSix OverrideCommands=true PreLaunchCommand=\"$INST_JAVA\" -jar packwiz-installer-bootstrap.jar ${buildInfo.packUrl} ''; buildPhase = '' # Remove env-vars rm env-vars # Add the mmc-pack echo $mmcpack > ./mmc-pack.json # Add the instance-cfg cp $instancecfg ./instance.cfg # Add the bootstrap jar mkdir ./minecraft cp ${bootstrap} ./minecraft/packwiz-installer-bootstrap.jar # Zip everything together ${pkgs.zip}/bin/zip -r modpack.zip ./* ''; installPhase = '' mkdir $out mv modpack.zip $out/ ''; }; }; overlay = final: prev: mkPackages prev; in { inherit overlay; packages = eachSystem mkPackages; devShells = eachSystem (pkgs: { default = pkgs.mkShell { buildInputs = with pkgs; [ packwiz ]; }; }); }; in mkModpack