mirror of
https://git.sr.ht/~magic_rb/dotfiles
synced 2024-11-25 09:36:14 +01:00
Add new Minecraft modules and containers
Signed-off-by: Magic_RB <magic_rb@redalder.org>
This commit is contained in:
parent
74d928eb7e
commit
5d516e080b
|
@ -999,8 +999,8 @@
|
|||
"secret": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1689425916,
|
||||
"narHash": "sha256-lQbVxpynVJa9PMIACISoo1TCWbjF5zy4OXqB+lXWE34=",
|
||||
"lastModified": 1689698765,
|
||||
"narHash": "sha256-K1mWUDZ4MTzHLf2xB59TgNRj/IzbNed/6uaglXJzF2o=",
|
||||
"path": "/home/main/dotfiles2/secret",
|
||||
"type": "path"
|
||||
},
|
||||
|
|
|
@ -71,6 +71,8 @@
|
|||
nixng/containers/gitea
|
||||
nixng/containers/hydra
|
||||
nixng/containers/syncthing
|
||||
nixng/containers/minecraft/vanilla
|
||||
nixng/containers/minecraft/ftb-infinity
|
||||
|
||||
overlays/udp-over-tcp.nix
|
||||
overlays/emacsclient-remote
|
||||
|
|
28
nixng/containers/minecraft/ftb-infinity/default.nix
Normal file
28
nixng/containers/minecraft/ftb-infinity/default.nix
Normal file
|
@ -0,0 +1,28 @@
|
|||
{ inputs, ... }:
|
||||
{
|
||||
flake.nixngConfigurations.minecraft-ftb-infinity = inputs.nixng.nglib.makeSystem {
|
||||
system = "x86_64-linux";
|
||||
name = "nixng-minecraft";
|
||||
inherit (inputs) nixpkgs;
|
||||
config =
|
||||
{ pkgs, lib, ... }:
|
||||
{
|
||||
disabledModules = [ "${inputs.nixng}/modules/services/minecraft.nix" ];
|
||||
imports = [ ../../../modules/minecraft-forge.nix ../../../modules/minecraft.nix ];
|
||||
dumb-init = {
|
||||
enable = true;
|
||||
type.services = {};
|
||||
};
|
||||
|
||||
services.minecraft.forge = {
|
||||
enable = true;
|
||||
|
||||
modpackId = 23;
|
||||
versionId = 99;
|
||||
modpacksChHash = "sha256-wlOcy+Ju81WxJ/z14rslMy3WH+wQdcIZylT7Z3qqJpQ=";
|
||||
|
||||
eulaAccept = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
27
nixng/containers/minecraft/vanilla/default.nix
Normal file
27
nixng/containers/minecraft/vanilla/default.nix
Normal file
|
@ -0,0 +1,27 @@
|
|||
{ inputs, ... }:
|
||||
{
|
||||
flake.nixngConfigurations.minecraft-vanilla = inputs.nixng.nglib.makeSystem {
|
||||
system = "x86_64-linux";
|
||||
name = "nixng-minecraft";
|
||||
inherit (inputs) nixpkgs;
|
||||
config =
|
||||
{ pkgs, lib, nglib, ... }:
|
||||
{
|
||||
disabledModules = [ "${inputs.nixng}/modules/services/minecraft.nix" ];
|
||||
imports = [ ../../../modules/minecraft-forge.nix ../../../modules/minecraft.nix ];
|
||||
dumb-init = {
|
||||
enable = true;
|
||||
type.services = {};
|
||||
};
|
||||
|
||||
services.minecraft.vanilla = {
|
||||
enable = true;
|
||||
eulaAccept = true;
|
||||
extraJavaArguments = [
|
||||
"-Xmx1024M"
|
||||
"-Xms1024M"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
162
nixng/modules/minecraft-forge.nix
Normal file
162
nixng/modules/minecraft-forge.nix
Normal file
|
@ -0,0 +1,162 @@
|
|||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.minecraft.forge;
|
||||
in
|
||||
{
|
||||
options.services.minecraft.forge = {
|
||||
enable = mkEnableOption "Enable Minecraft server service.";
|
||||
|
||||
modpackId = mkOption {
|
||||
type = types.int;
|
||||
};
|
||||
|
||||
versionId = mkOption {
|
||||
type = types.int;
|
||||
};
|
||||
|
||||
modpacksChHash = mkOption {
|
||||
type = types.str;
|
||||
};
|
||||
|
||||
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.forge.serverPackage =
|
||||
let
|
||||
forgeFod =
|
||||
pkgs.stdenv.mkDerivation {
|
||||
pname = "minecraft";
|
||||
version = "unknown";
|
||||
|
||||
outputHashMode = "recursive";
|
||||
outputHashAlgo = "sha256";
|
||||
outputHash = cfg.modpacksChHash;
|
||||
|
||||
buildInputs = with pkgs; [ unzip curl which cacert ];
|
||||
|
||||
phases = [ "fetchPhase" "installPhase" "fixupPhase "];
|
||||
|
||||
fetchPhase = ''
|
||||
curl https://api.modpacks.ch/public/modpack/${toString cfg.modpackId}/${toString cfg.versionId}/server/linux -o modpacks.ch # fuck creeperhost
|
||||
chmod +x modpacks.ch
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
./modpacks.ch ${toString cfg.modpackId} ${toString cfg.versionId} --auto --nojava --path $out
|
||||
'';
|
||||
|
||||
fixupPhase = ''
|
||||
# delete useless non-reproducible data that we really don't need. A less "shotgun" cleaning is possible
|
||||
rm $out/version.json
|
||||
'';
|
||||
};
|
||||
in
|
||||
pkgs.stdenv.mkDerivation {
|
||||
pname = "minecraft";
|
||||
version = "unknown";
|
||||
|
||||
phases = [ "installPhase" ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
|
||||
cp ${pkgs.writeShellScript "server.sh" ''
|
||||
export PATH=${makeBinPath (with pkgs; [ coreutils findutils bash ])}:$PATH
|
||||
export _path=$PWD
|
||||
echo $0
|
||||
|
||||
echo $rw_paths
|
||||
function linkFile()
|
||||
{
|
||||
_rw_paths=${"( " + lib.concatMapStringsSep " " (x: ''"${x}"'') [ "config" "modpack/gamemodes.json" ] + " )"}
|
||||
_ignore_paths=${"( " + lib.concatMapStringsSep " " (x: ''"${x}"'') [ "start.sh" ] + " )"}
|
||||
|
||||
echo $1 | grep MrTJP
|
||||
|
||||
ignore=0
|
||||
for ignore_path in ''${_ignore_paths[@]} ; do
|
||||
if [ "''${1##ignore_path}" != "$1" ] || [ "$ignore_path" = "$1" ] ; then
|
||||
ignore=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -f "$1" ] || [ $ignore = 1 ] ; then
|
||||
return
|
||||
fi
|
||||
mkdir -p "$_path/$(dirname "$1")"
|
||||
|
||||
copy=0
|
||||
for rw_path in ''${_rw_paths[@]} ; do
|
||||
if [ "''${1##$rw_path}" != "$1" ] || [ "$rw_path" = "$1" ] ; then
|
||||
copy=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$copy" = 1 ] ; then
|
||||
cp --no-preserve=mode,ownership "${forgeFod}/$1" "$_path/$1"
|
||||
else
|
||||
ln -s "${forgeFod}/$1" "$_path/$1"
|
||||
fi
|
||||
}
|
||||
export -f linkFile
|
||||
|
||||
echo $_path
|
||||
if [ "$_path" = "" ] || ! [ -d "$_path" ] ; then
|
||||
echo "invalid path"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
find $_path -type l -lname '/nix/store/*' -delete
|
||||
find $_path -type d -empty -delete
|
||||
|
||||
find ${forgeFod} -type f -printf '%P\n' | tr '\n' '\0' | xargs -0 -I {} sh -c 'linkFile "$1"' sh {} # mkdir -p "$_path/$(dirname "$1")" ; ln -s "${forgeFod}/$1" "$_path/$1"
|
||||
|
||||
ln -s ${pkgs.writeShellScript "start.sh" ''
|
||||
${lib.getExe pkgs.jdk8} $(cat ${forgeFod}/start.sh | grep -e "java" -e jar | sed 's/^"java" \(.*\) -jar .*$/\1/') "$@" -jar forge-*.jar
|
||||
''} $_path/start.sh
|
||||
|
||||
$_path/start.sh
|
||||
''} $out/bin/server
|
||||
'';
|
||||
};
|
||||
|
||||
init.services.minecraft-forge = {
|
||||
script = pkgs.writeShellScript "minecraft-run" ''
|
||||
set -xe
|
||||
|
||||
mkdir -p /var/lib/minecraft/forge
|
||||
cd /var/lib/minecraft/forge
|
||||
echo "eula=true" > eula.txt
|
||||
${cfg.serverPackage}/bin/server ${concatMapStringsSep " " (x: ''"${x}"'') cfg.extraJavaArguments}
|
||||
'';
|
||||
enabled = true;
|
||||
};
|
||||
|
||||
assertions = [
|
||||
{ assertion = cfg.eulaAccept;
|
||||
message = "You must accept the EULA";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
78
nixng/modules/minecraft.nix
Normal file
78
nixng/modules/minecraft.nix
Normal file
|
@ -0,0 +1,78 @@
|
|||
{ 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";
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
|
@ -88,6 +88,8 @@ in
|
|||
};
|
||||
|
||||
system.stateVersion = "21.05";
|
||||
|
||||
boot.kernel.sysctl."fs.inotify.max_user_instances" = 256;
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
24
terranix/containers/minecraft/ftb-infinity/default.nix
Normal file
24
terranix/containers/minecraft/ftb-infinity/default.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{ config', pkgs, elib, vars, ... }:
|
||||
let
|
||||
inherit (elib)
|
||||
nfsVolume
|
||||
nomadJob;
|
||||
in
|
||||
{
|
||||
resource."nomad_volume"."minecraft-ftb-infinity" = nfsVolume {
|
||||
access_mode = "single-node-writer";
|
||||
volume_name = "minecraft-ftb-infinity";
|
||||
server = "blowhole.hosts.in.redalder.org";
|
||||
share = "/mnt/kyle/infrastructure/minecraft/ftb-infinity";
|
||||
mount_flags = [ "hard" "vers=4.2" "rsize=131072" "wsize=131072" "async" ];
|
||||
};
|
||||
|
||||
resource."nomad_job"."minecraft-ftb-infinity" = nomadJob {
|
||||
jobspec = ./job.hcl;
|
||||
vars = {
|
||||
flake_ref = "${vars.flake_host}?rev=${vars.flake_rev}&ref=${vars.flake_ref}";
|
||||
flake_sha = vars.flake_sha;
|
||||
store_path = config'.flake.nixngConfigurations.minecraft-ftb-infinity.config.system.build.toplevel;
|
||||
};
|
||||
};
|
||||
}
|
62
terranix/containers/minecraft/ftb-infinity/job.hcl
Normal file
62
terranix/containers/minecraft/ftb-infinity/job.hcl
Normal file
|
@ -0,0 +1,62 @@
|
|||
variable "flake_ref" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "flake_sha" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "store_path" {
|
||||
type = string
|
||||
}
|
||||
|
||||
job "minecraft-ftb-infinity" {
|
||||
datacenters = [ "homelab-1" ]
|
||||
type = "service"
|
||||
|
||||
group "minecraft-vanilla" {
|
||||
count = 1
|
||||
|
||||
volume "minecraft-ftb-infinity" {
|
||||
type = "csi"
|
||||
source = "minecraft-ftb-infinity"
|
||||
read_only = false
|
||||
|
||||
attachment_mode = "file-system"
|
||||
access_mode = "single-node-writer"
|
||||
}
|
||||
|
||||
network {
|
||||
mode = "bridge"
|
||||
port "minecraft" {
|
||||
static = 25561
|
||||
to = 25565
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
task "minecraft-ftb-infinity" {
|
||||
driver = "docker"
|
||||
|
||||
config {
|
||||
nix_flake_ref = "${var.flake_ref}#nixngConfigurations.minecraft-ftb-infinity.config.system.build.toplevel"
|
||||
nix_flake_sha = var.flake_sha
|
||||
nix_flake_store_path = var.store_path
|
||||
entrypoint = [ "init" ]
|
||||
|
||||
ports = ["minecraft"]
|
||||
}
|
||||
|
||||
resources {
|
||||
cpu = 2048
|
||||
memory = 4608
|
||||
}
|
||||
|
||||
volume_mount {
|
||||
volume = "minecraft-ftb-infinity"
|
||||
destination = "/var/lib/minecraft/forge"
|
||||
read_only = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
24
terranix/containers/minecraft/vanilla/default.nix
Normal file
24
terranix/containers/minecraft/vanilla/default.nix
Normal file
|
@ -0,0 +1,24 @@
|
|||
{ config', pkgs, elib, vars, ... }:
|
||||
let
|
||||
inherit (elib)
|
||||
nfsVolume
|
||||
nomadJob;
|
||||
in
|
||||
{
|
||||
resource."nomad_volume"."minecraft-vanilla" = nfsVolume {
|
||||
access_mode = "single-node-writer";
|
||||
volume_name = "minecraft-vanilla";
|
||||
server = "blowhole.hosts.in.redalder.org";
|
||||
share = "/mnt/kyle/infrastructure/minecraft/vanilla";
|
||||
mount_flags = [ "hard" "vers=4.2" "rsize=131072" "wsize=131072" "async" ];
|
||||
};
|
||||
|
||||
resource."nomad_job"."minecraft-vanilla" = nomadJob {
|
||||
jobspec = ./job.hcl;
|
||||
vars = {
|
||||
flake_ref = "${vars.flake_host}?rev=${vars.flake_rev}&ref=${vars.flake_ref}";
|
||||
flake_sha = vars.flake_sha;
|
||||
store_path = config'.flake.nixngConfigurations.minecraft-vanilla.config.system.build.toplevel;
|
||||
};
|
||||
};
|
||||
}
|
62
terranix/containers/minecraft/vanilla/job.hcl
Normal file
62
terranix/containers/minecraft/vanilla/job.hcl
Normal file
|
@ -0,0 +1,62 @@
|
|||
variable "flake_ref" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "flake_sha" {
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "store_path" {
|
||||
type = string
|
||||
}
|
||||
|
||||
job "minecraft-vanilla" {
|
||||
datacenters = [ "homelab-1" ]
|
||||
type = "service"
|
||||
|
||||
group "minecraft-vanilla" {
|
||||
count = 1
|
||||
|
||||
volume "minecraft-vanilla" {
|
||||
type = "csi"
|
||||
source = "minecraft-vanilla"
|
||||
read_only = false
|
||||
|
||||
attachment_mode = "file-system"
|
||||
access_mode = "single-node-writer"
|
||||
}
|
||||
|
||||
network {
|
||||
mode = "bridge"
|
||||
port "minecraft" {
|
||||
static = 25560
|
||||
to = 25565
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
task "minecraft-vanilla" {
|
||||
driver = "docker"
|
||||
|
||||
config {
|
||||
nix_flake_ref = "${var.flake_ref}#nixngConfigurations.minecraft-vanilla.config.system.build.toplevel"
|
||||
nix_flake_sha = var.flake_sha
|
||||
nix_flake_store_path = var.store_path
|
||||
entrypoint = [ "init" ]
|
||||
|
||||
ports = ["minecraft"]
|
||||
}
|
||||
|
||||
resources {
|
||||
cpu = 512
|
||||
memory = 1280
|
||||
}
|
||||
|
||||
volume_mount {
|
||||
volume = "minecraft-vanilla"
|
||||
destination = "/var/lib/minecraft/vanilla"
|
||||
read_only = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -19,7 +19,7 @@ in
|
|||
access_mode = "single-node-writer";
|
||||
volume_name = "syncthing-storage";
|
||||
server = "blowhole.hosts.in.redalder.org";
|
||||
share = sharePrefix + "/data";
|
||||
share = sharePrefix + "/storage";
|
||||
mount_flags = [ "hard" "vers=4.2" "rsize=131072" "wsize=131072" "async" ];
|
||||
};
|
||||
|
||||
|
@ -27,7 +27,7 @@ in
|
|||
access_mode = "single-node-writer";
|
||||
volume_name = "syncthing-config";
|
||||
server = "blowhole.hosts.in.redalder.org";
|
||||
share = sharePrefix + "/data";
|
||||
share = sharePrefix + "/config";
|
||||
mount_flags = [ "hard" "vers=4.2" "rsize=131072" "wsize=131072" "async" ];
|
||||
};
|
||||
|
||||
|
|
|
@ -101,6 +101,16 @@ in
|
|||
source = ./containers/nfs-csi;
|
||||
};
|
||||
|
||||
module."minecraft-vanilla" = elib.terraformModule {
|
||||
name = "nfs-csi";
|
||||
source = ./containers/minecraft/vanilla;
|
||||
};
|
||||
|
||||
module."minecraft-ftb-infinity" = elib.terraformModule {
|
||||
name = "nfs-csi";
|
||||
source = ./containers/minecraft/ftb-infinity;
|
||||
};
|
||||
|
||||
module."altra" = elib.terraformModule {
|
||||
name = "altra";
|
||||
source = ./altra.nix;
|
||||
|
|
Loading…
Reference in a new issue