98 lines
2.6 KiB
Nix
98 lines
2.6 KiB
Nix
{ 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
|