feat: fixed minecraft worlds

This commit is contained in:
Nick 2025-12-11 02:12:55 -06:00
parent 2b1a44d591
commit 4dca730684
6 changed files with 144 additions and 115 deletions

View file

@ -26,7 +26,7 @@ in
macUser = "02:00:00:00:00:41"; macUser = "02:00:00:00:00:41";
ip = "192.168.50.141"; ip = "192.168.50.141";
gate = "192.168.50.1"; gate = "192.168.50.1";
ssh = 2401; ssh = 2410;
port = 43000; port = 43000;
}; };
paths = { paths = {
@ -53,7 +53,7 @@ in
macUser = "02:00:00:00:00:42"; macUser = "02:00:00:00:00:42";
ip = "192.168.50.142"; ip = "192.168.50.142";
gate = "192.168.50.1"; gate = "192.168.50.1";
ssh = 2402; ssh = 2411;
port = 43001; port = 43001;
}; };
paths = { paths = {

View file

@ -4,9 +4,8 @@
}: }:
let let
inherit (flake.config.people) user0; inherit (flake.config.people) user0;
serviceCfg = { inherit (flake.config.services) instances;
name = "minecraft"; serviceCfg = instances.minecraft;
};
in in
{ {
minecraftVM = minecraftVM =
@ -38,7 +37,7 @@ in
openFirewall = true; openFirewall = true;
declarative = true; declarative = true;
serverProperties = { serverProperties = {
"rcon.password" = "/etc/${serviceCfg.name}-secrets/${user}-world${worldNumber}"; "rcon.password" = "/etc/${serviceCfg.name}-secrets/world${worldNumber}";
server-port = port; server-port = port;
} }
// config; // config;
@ -69,7 +68,7 @@ in
}; };
script = '' script = ''
mkdir -p /etc/${serviceCfg.name}-secrets mkdir -p /etc/${serviceCfg.name}-secrets
cp /run/secrets/${user}-world${worldNumber} /etc/${serviceCfg.name}-secrets/${user}-world${worldNumber} cp /run/secrets/world${worldNumber} /etc/${serviceCfg.name}-secrets/world${worldNumber}
chmod 755 /etc/${serviceCfg.name}-secrets chmod 755 /etc/${serviceCfg.name}-secrets
chmod 644 /etc/${serviceCfg.name}-secrets/* chmod 644 /etc/${serviceCfg.name}-secrets/*
''; '';
@ -97,6 +96,7 @@ in
}; };
tmpfiles.rules = [ tmpfiles.rules = [
"d /var/lib/${serviceCfg.name} 0755 ${serviceCfg.name} ${serviceCfg.name} -" "d /var/lib/${serviceCfg.name} 0755 ${serviceCfg.name} ${serviceCfg.name} -"
"Z /var/lib/${serviceCfg.name} 0755 ${serviceCfg.name} ${serviceCfg.name} -"
]; ];
}; };
microvm = { microvm = {
@ -106,7 +106,7 @@ in
interfaces = [ interfaces = [
{ {
type = "tap"; type = "tap";
id = "vm-mc${worldNumber}-${user}"; id = "vm-mc-${worldNumber}";
mac = mac; mac = mac;
} }
{ {
@ -133,7 +133,7 @@ in
mountPoint = "/var/lib/${serviceCfg.name}"; mountPoint = "/var/lib/${serviceCfg.name}";
proto = "virtiofs"; proto = "virtiofs";
source = "${mnt}/${serviceCfg.name}/world${worldNumber}"; source = "${mnt}/${serviceCfg.name}/world${worldNumber}";
tag = "${serviceCfg.name}_${user}_data"; tag = "${serviceCfg.name}_mc${worldNumber}_data";
} }
{ {
mountPoint = "/run/secrets"; mountPoint = "/run/secrets";
@ -150,10 +150,12 @@ in
systemd.tmpfiles.rules = [ systemd.tmpfiles.rules = [
"d ${mnt}/${serviceCfg.name} 0751 microvm wheel - -" "d ${mnt}/${serviceCfg.name} 0751 microvm wheel - -"
"d ${mnt}/${serviceCfg.name}/world${worldNumber} 0751 microvm wheel - -"
"Z ${mnt}/${serviceCfg.name}/world${worldNumber} 0755 microvm wheel - -"
]; ];
sops.secrets = { sops.secrets = {
"${serviceCfg.name}/${user}-world${worldNumber}" = { "${serviceCfg.name}/world${worldNumber}" = {
owner = "root"; owner = "root";
mode = "0600"; mode = "0600";
}; };

View file

@ -1,105 +1,11 @@
{
flake,
pkgs,
...
}:
let let
inherit (import ../../../helpers.nix { inherit flake; }) labHelpers; importList =
inherit (labHelpers) mntPath;
inherit (import ../config { inherit flake pkgs; }) minecraftVM;
inherit (flake.config.services) instances;
inherit (flake.config.people) user0;
minecraftNick01 =
let let
interfaceCfg = instances.minecraft.interfaces.interface0; content = builtins.readDir ./.;
dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content);
in in
minecraftVM { map (name: ./. + "/${name}") dirContent;
user = user0;
ip = interfaceCfg.microvm.ip;
mac = interfaceCfg.microvm.mac;
userMac = interfaceCfg.microvm.macUser;
ssh = interfaceCfg.microvm.ssh;
port = interfaceCfg.microvm.port;
mnt = mntPath;
worldNumber = "01";
config = {
allow-flight = false;
allow-nether = true;
difficulty = 2;
enable-command-block = false;
enable-rcon = true;
enable-status = true;
force-gamemode = true;
gamemode = 0;
generate-structures = true;
hardcore = false;
hide-online-players = false;
level-name = "Brix on Nix";
level-seed = "9064150133272194";
max-players = 10;
max-world-size = 64000000;
motd = "A cool Minecraft server powered by NixOS";
online-mode = true;
pvp = true;
spawn-animals = true;
spawn-monsters = true;
spawn-npcs = true;
spawn-protection = 16;
view-distance = 32;
white-list = true;
};
whitelist = {
Hefty_Chungus = "b75a9816-d408-4c54-b226-385b59ea1cb3";
Hefty_Chungus_Jr = "c3bf8cac-e953-4ea4-ae5f-7acb92a51a85";
EclipseMoon01 = "adef4af7-d8c6-4627-b492-e990ea1bb993";
Fallaryn = "d8baa117-ab58-4b07-92a5-48fb1978eb49";
};
};
minecraftNick02 =
let
interfaceCfg = instances.minecraft.interfaces.interface1;
in
minecraftVM {
user = user0;
ip = interfaceCfg.microvm.ip;
mac = interfaceCfg.microvm.mac;
userMac = interfaceCfg.microvm.macUser;
ssh = interfaceCfg.microvm.ssh;
port = interfaceCfg.microvm.port;
mnt = mntPath;
worldNumber = "02";
config = {
allow-flight = false;
allow-nether = true;
difficulty = 2;
enable-command-block = false;
enable-rcon = true;
enable-status = true;
force-gamemode = true;
gamemode = 0;
generate-structures = true;
hardcore = false;
hide-online-players = false;
level-name = "Cuddle Cubes";
level-seed = "-2332803749585407299";
max-players = 10;
max-world-size = 64000000;
motd = "A cool Minecraft server powered by NixOS";
online-mode = true;
pvp = true;
spawn-animals = true;
spawn-monsters = true;
spawn-npcs = true;
spawn-protection = 16;
view-distance = 32;
white-list = true;
};
whitelist = {
Hefty_Chungus = "b75a9816-d408-4c54-b226-385b59ea1cb3";
Fallaryn = "d8baa117-ab58-4b07-92a5-48fb1978eb49";
};
};
in in
minecraftNick01 // minecraftNick02 {
imports = importList;
}

View file

@ -0,0 +1,62 @@
{
flake,
pkgs,
lib,
...
}:
let
inherit (import ../../../../helpers.nix { inherit flake; }) labHelpers;
inherit (labHelpers) mntPath;
inherit (import ../../config { inherit flake pkgs; }) minecraftVM;
inherit (flake.config.services) instances;
inherit (flake.config.people) user0;
minecraftNick01 =
let
interfaceCfg = instances.minecraft.interfaces.interface0;
in
minecraftVM {
user = user0;
ip = interfaceCfg.microvm.ip;
mac = interfaceCfg.microvm.mac;
userMac = interfaceCfg.microvm.macUser;
ssh = interfaceCfg.microvm.ssh;
port = interfaceCfg.microvm.port;
mnt = mntPath;
worldNumber = "01";
config = {
allow-flight = false;
allow-nether = true;
difficulty = 2;
enable-command-block = false;
enable-rcon = true;
enable-status = true;
force-gamemode = true;
gamemode = 0;
generate-structures = true;
hardcore = false;
hide-online-players = false;
level-name = "Brix on Nix";
level-seed = "9064150133272194";
max-players = 10;
max-world-size = 64000000;
motd = "A cool Minecraft server powered by NixOS";
online-mode = true;
pvp = true;
spawn-animals = true;
spawn-monsters = true;
spawn-npcs = true;
spawn-protection = 16;
view-distance = 32;
white-list = true;
};
whitelist = {
Hefty_Chungus = "b75a9816-d408-4c54-b226-385b59ea1cb3";
Hefty_Chungus_Jr = "c3bf8cac-e953-4ea4-ae5f-7acb92a51a85";
EclipseMoon01 = "adef4af7-d8c6-4627-b492-e990ea1bb993";
Fallaryn = "d8baa117-ab58-4b07-92a5-48fb1978eb49";
};
};
in
minecraftNick01

View file

@ -0,0 +1,59 @@
{
flake,
pkgs,
lib,
...
}:
let
inherit (import ../../../../helpers.nix { inherit flake; }) labHelpers;
inherit (labHelpers) mntPath;
inherit (import ../../config { inherit flake pkgs; }) minecraftVM;
inherit (flake.config.services) instances;
inherit (flake.config.people) user0;
minecraftNick02 =
let
interfaceCfg = instances.minecraft.interfaces.interface1;
in
minecraftVM {
user = user0;
ip = interfaceCfg.microvm.ip;
mac = interfaceCfg.microvm.mac;
userMac = interfaceCfg.microvm.macUser;
ssh = interfaceCfg.microvm.ssh;
port = interfaceCfg.microvm.port;
mnt = mntPath;
worldNumber = "02";
config = {
allow-flight = false;
allow-nether = true;
difficulty = 2;
enable-command-block = false;
enable-rcon = true;
enable-status = true;
force-gamemode = true;
gamemode = 0;
generate-structures = true;
hardcore = false;
hide-online-players = false;
level-name = "Cuddle Cubes";
level-seed = "-2332803749585407299";
max-players = 10;
max-world-size = 64000000;
motd = "A cool Minecraft server powered by NixOS";
online-mode = true;
pvp = true;
spawn-animals = true;
spawn-monsters = true;
spawn-npcs = true;
spawn-protection = 16;
view-distance = 32;
white-list = true;
};
whitelist = {
Hefty_Chungus = "b75a9816-d408-4c54-b226-385b59ea1cb3";
Fallaryn = "d8baa117-ab58-4b07-92a5-48fb1978eb49";
};
};
in
minecraftNick02

View file

@ -24,8 +24,8 @@ forgejo:
zookeeper: zookeeper:
boon-env: ENC[AES256_GCM,data:3aOlOkYHxpao4/+Ubud4LfyZ3yQonN0FtHEYvQHEPNjTcqJiltuXrRr0ZaJ7RwY+A/IunuZVhrjngCBRj+TWBZZ2i+uaf0BEuA==,iv:53H5+rcRIui2d71K3QTj5LYg/ae4TGOFe96t2zxQh2o=,tag:vR3IOm2XFmODLQZDTlY1zw==,type:str] boon-env: ENC[AES256_GCM,data:3aOlOkYHxpao4/+Ubud4LfyZ3yQonN0FtHEYvQHEPNjTcqJiltuXrRr0ZaJ7RwY+A/IunuZVhrjngCBRj+TWBZZ2i+uaf0BEuA==,iv:53H5+rcRIui2d71K3QTj5LYg/ae4TGOFe96t2zxQh2o=,tag:vR3IOm2XFmODLQZDTlY1zw==,type:str]
minecraft: minecraft:
nick-world01: ENC[AES256_GCM,data:skiM+L/uEEnst0pCDzB5XaHnLpWrLQBXuQ==,iv:CnlXwpB4paDQSaC2W9uQRTc2rgqCo6QTGC4SsYAMw6Y=,tag:D2r2X6flowP7tjuX74KzRg==,type:str] world01: ENC[AES256_GCM,data:duQDeBUaPup97c/hKMhjP2kj8EJRPNGQfTyUHoeNJ6sQ,iv:sBKY7y5TCrYjikWJfOZREMDmVWNCPqe4x5urpdP5UvA=,tag:ZzT5o5DnLjBSiCB8VHHCbg==,type:str]
nick-world02: ENC[AES256_GCM,data:tEh+uThkn8VczSjviU58/vBUmyKBfiA7tnYiBsIlgjSb,iv:yfQvffZ3AlT4lpfEkBT5gVacogaQoIZSim+gpoD7LkU=,tag:E7matzOY08rapIxaW9lOdg==,type:str] world02: ENC[AES256_GCM,data:3t3TDnUD6wpAJonMZ16umnHY67srbEpLAvNaIW29reE7,iv:1SnL/e+NO+mSxQbtRjjTS81Mpcr4+psiw+2hKoXxeVE=,tag:NlnqySPD3CAUI2rFAo1mbA==,type:str]
vaultwarden: vaultwarden:
nick-env: ENC[AES256_GCM,data:lG7pqpLJ7OsFZhWCJcPnvDxkR4Ob78buazUeLWlRSAPYEv8KarymYduecJNWCZUjUlysoU5YrHaat8tny+Vl2rYdef8oPfqlf7fITofsdmjHhAGUBJEEVQWLyEXqrEebEyeNKZwI+u8=,iv:SNptt0CPcSCTs6AAWLcC+U0/94oQapqmT1K8ZN/bIfM=,tag:2/1A+DwuWOIr0eoJmZTnwA==,type:str] nick-env: ENC[AES256_GCM,data:lG7pqpLJ7OsFZhWCJcPnvDxkR4Ob78buazUeLWlRSAPYEv8KarymYduecJNWCZUjUlysoU5YrHaat8tny+Vl2rYdef8oPfqlf7fITofsdmjHhAGUBJEEVQWLyEXqrEebEyeNKZwI+u8=,iv:SNptt0CPcSCTs6AAWLcC+U0/94oQapqmT1K8ZN/bIfM=,tag:2/1A+DwuWOIr0eoJmZTnwA==,type:str]
project-env: ENC[AES256_GCM,data:WPn7jfCTsG67AIz4wawJeThK4kzMRaq6aPQ2W1Pcc2afNXtCWe0f9JuzH9ld6zgiO2wDu1SHQBT2Aagdt4vop/mBDq15YnpzEL30afiRtFjKJPu5BxMU9mEjerE=,iv:vVVmN6Tx1tNUODdb+6lz2L1cnLHwUwsETb3WMCKb2rY=,tag:twOhJmx/B+k4Zqb566KKCw==,type:str] project-env: ENC[AES256_GCM,data:WPn7jfCTsG67AIz4wawJeThK4kzMRaq6aPQ2W1Pcc2afNXtCWe0f9JuzH9ld6zgiO2wDu1SHQBT2Aagdt4vop/mBDq15YnpzEL30afiRtFjKJPu5BxMU9mEjerE=,iv:vVVmN6Tx1tNUODdb+6lz2L1cnLHwUwsETb3WMCKb2rY=,tag:twOhJmx/B+k4Zqb566KKCw==,type:str]
@ -89,7 +89,7 @@ sops:
bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD
aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig== aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-12-11T06:23:26Z" lastmodified: "2025-12-11T06:59:23Z"
mac: ENC[AES256_GCM,data:VrgQfX3d83bU2pF5XCj/el8wKa/9rYTWEDy2ALFOc6dmMpV9zFNlnld4lJAyms9MfkXXxG2oLv5flT8NN+JAy0Wr8tEFyS2hUOJ8Q/l1GEwuf8pqdafzKuG4VaeViBC7oIcPM3kiQHEHiNg3GUKynEUl9/eiKzU7Y20qLvUQDcc=,iv:phTXlKjFryRwUnZARtsdoTrK5bfmI3NC7qPvFXezfpc=,tag:3I3/QvdREv+1ZLOhMOJV1A==,type:str] mac: ENC[AES256_GCM,data:xGDaLeNV+YTJmX/v8WgRDPn683a8gfxSmE/Le+c9AB8VQfq+mKbqjz4DdtQ9TSdNz65BIjV1GCQJ1jsSxfqmJJaQJkVCgWCI+sKby/Qkpbjn+3xhMxWCbgI5kxasDGYHOXlcz5L4IXUg1pRIHQwuZjlA4q7H7fKUHim6UnUZzQ8=,iv:zywKqa6OWVb4TFhMAoHNasbkJdb9fLttGXCwGS+NzOE=,tag:7Vs8K3XeiFM6lNOTUDY67g==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.11.0 version: 3.11.0