- New unified flake with two nixpkgs channels (unstable for desktops, 25.11 for muffin)
- modules/common-{doas,shell-fish,nix}.nix extracted from duplicated blocks
- modules/desktop-common.nix: renamed from system/common.nix; secret paths point to secrets/desktop/
- hosts/{mreow,yarn}/default.nix import desktop-common; yarn imports modules/no-rgb.nix
- hosts/muffin/default.nix imports common-* + server-prefixed modules + services/; duplicate doas/fish/nix blocks removed; gc retention preserved as mkForce override
- modules/age-secrets.nix: file paths → ../secrets/server/*.age
- services/{minecraft,matrix/livekit}: secret paths → ../secrets/server/
- home/profiles/*.nix: ./progs/ → ../progs/
- hosts/{mreow,yarn}/home.nix: imports rewired to ../../home/profiles/ and ../../home/progs/
- home/progs/pi.nix and hosts/yarn/home.nix: secret reads → ../../secrets/home/
- tests/*.nix: ../modules/security.nix → ../modules/server-security.nix; ../modules/overlays.nix → ../lib/overlays.nix
- lib/default.nix: takes explicit lib param (defaults to nixpkgs-stable.lib)
98 lines
2.8 KiB
Nix
98 lines
2.8 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
inputs,
|
|
...
|
|
}:
|
|
let
|
|
baseServiceConfigs = import ../service-configs.nix;
|
|
testServiceConfigs = lib.recursiveUpdate baseServiceConfigs {
|
|
zpool_ssds = "";
|
|
https.domain = "test.local";
|
|
minecraft.parent_dir = "/var/lib/minecraft";
|
|
minecraft.memory = rec {
|
|
heap_size_m = 1000;
|
|
};
|
|
};
|
|
|
|
# Create pkgs with nix-minecraft overlay and unfree packages allowed
|
|
testPkgs = import inputs.nixpkgs {
|
|
system = pkgs.stdenv.targetPlatform.system;
|
|
config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "minecraft-server" ];
|
|
overlays = [
|
|
inputs.nix-minecraft.overlay
|
|
(import ../lib/overlays.nix)
|
|
];
|
|
};
|
|
in
|
|
testPkgs.testers.runNixOSTest {
|
|
name = "minecraft server startup test";
|
|
|
|
node.specialArgs = {
|
|
inherit inputs lib;
|
|
service_configs = testServiceConfigs;
|
|
username = "testuser";
|
|
};
|
|
|
|
nodes.machine =
|
|
{ lib, ... }:
|
|
{
|
|
imports = [
|
|
../services/minecraft.nix
|
|
];
|
|
|
|
# Force to 0 because no huge pages in vms ?
|
|
boot.kernel.sysctl."vm.nr_hugepages" = lib.mkForce 0;
|
|
|
|
# Enable caddy service (required by minecraft service)
|
|
services.caddy.enable = true;
|
|
|
|
# Enable networking for the test (needed for minecraft mods to download mappings)
|
|
networking.dhcpcd.enable = true;
|
|
|
|
# Disable the ZFS mount dependency service in test environment
|
|
systemd.services."minecraft-server-main_mounts".enable = lib.mkForce false;
|
|
|
|
# Remove service dependencies that require ZFS
|
|
systemd.services.minecraft-server-main = {
|
|
wants = lib.mkForce [ ];
|
|
after = lib.mkForce [ ];
|
|
requires = lib.mkForce [ ];
|
|
serviceConfig = {
|
|
Nice = lib.mkForce 0;
|
|
LimitMEMLOCK = lib.mkForce "infinity";
|
|
};
|
|
};
|
|
|
|
# Test-specific overrides only - reduce memory for testing
|
|
services.minecraft-servers.servers.main.jvmOpts = lib.mkForce "-Xmx1G -Xms1G";
|
|
|
|
# Create test user
|
|
users.users.testuser = {
|
|
isNormalUser = true;
|
|
uid = 1000;
|
|
extraGroups = [ "minecraft" ];
|
|
};
|
|
};
|
|
|
|
testScript = ''
|
|
start_all()
|
|
machine.wait_for_unit("multi-user.target")
|
|
|
|
# Wait for minecraft service to be available
|
|
machine.wait_for_unit("minecraft-server-main.service")
|
|
|
|
# Wait up to 60 seconds for the server to complete startup
|
|
with machine.nested("Waiting for minecraft server startup completion"):
|
|
try:
|
|
machine.wait_until_succeeds(
|
|
"grep -Eq '\\[[0-9]+:[0-9]+:[0-9]+\\] \\[Server thread/INFO\\]: Done \\([0-9]+\\.[0-9]+s\\)! For help, type \"help\"' /var/lib/minecraft/main/logs/latest.log",
|
|
timeout=120
|
|
)
|
|
except Exception:
|
|
print(machine.succeed("cat /var/lib/minecraft/main/logs/latest.log"))
|
|
raise
|
|
'';
|
|
}
|