dotfiles/nixng/modules/minecraft.nix

79 lines
2.1 KiB
Nix
Raw Normal View History

{ pkgs, config, lib, ... }:
with lib;
let
cfg = config.services.minecraft.vanilla;
in
{
options.services.minecraft.vanilla = {
enable = mkEnableOption "Enable Minecraft server service.";
serverPackage = mkOption {
type = types.package;
readOnly = true;
};
eulaAccept = mkOption {
type = with types; bool;
description = ''
By changing the setting below to true you are indicating your agreement to Mojang's EULA (https://account.mojang.com/documents/minecraft_eula).
'';
default = false;
};
extraJavaArguments = mkOption {
type = with types; listOf str;
default = [];
};
};
config = mkIf cfg.enable {
services.minecraft.vanilla.serverPackage =
pkgs.stdenv.mkDerivation {
pname = "minecraft";
version = "unknown";
src = pkgs.fetchurl {
url = "https://piston-data.mojang.com/v1/objects/84194a2f286ef7c14ed7ce0090dba59902951553/server.jar";
hash = "sha256-RIsU/6VxKZ7Sk59dgG4dudHhRLcD+ki32Ab0wv00Tik=";
executable = true;
};
phases = [ "installPhase" ];
installPhase = ''
mkdir -p $out/bin
${lib.getExe pkgs.jdk17} -jar $src --initSettings
mkdir -p $out/share
cp server.properties $out/share/
cp ${pkgs.writeShellScript "server.sh" ''
[ -f server.properties ] || cp @out@/share/server.properties .
${lib.getExe pkgs.jdk17} "$@" -jar @src@
''} $out/bin/server
substituteInPlace $out/bin/server --subst-var src --subst-var out
'';
};
init.services.minecraft-vanilla = {
script = pkgs.writeShellScript "minecraft-run" ''
set -xe
mkdir -p /var/lib/minecraft/vanilla
cd /var/lib/minecraft/vanilla
echo "eula=true" > eula.txt
${cfg.serverPackage}/bin/server ${concatMapStringsSep " " (x: ''"${x}"'') cfg.extraJavaArguments}
'';
enabled = true;
shutdownOnExit = true;
};
assertions = [
{ assertion = cfg.eulaAccept;
message = "You must accept the EULA";
}
];
};
}