1let
2 seed = "2151901553968352745";
3 rcon-pass = "foobar";
4 rcon-port = 43000;
5in
6{ lib, pkgs, ... }:
7{
8 name = "minecraft-server";
9 meta.maintainers = with lib.maintainers; [ nequissimus ];
10
11 node.pkgsReadOnly = false;
12
13 nodes.server =
14 { ... }:
15 {
16 environment.systemPackages = [ pkgs.mcrcon ];
17
18 nixpkgs.config.allowUnfree = true;
19
20 services.minecraft-server = {
21 declarative = true;
22 enable = true;
23 eula = true;
24 serverProperties = {
25 enable-rcon = true;
26 level-seed = seed;
27 level-type = "flat";
28 generate-structures = false;
29 online-mode = false;
30 "rcon.password" = rcon-pass;
31 "rcon.port" = rcon-port;
32 };
33 };
34
35 virtualisation.memorySize = 2047;
36 };
37
38 testScript = ''
39 server.wait_for_unit("minecraft-server")
40 server.wait_for_open_port(${toString rcon-port})
41 assert "${seed}" in server.succeed(
42 "mcrcon -H localhost -P ${toString rcon-port} -p '${rcon-pass}' -c 'seed'"
43 )
44 server.succeed("systemctl stop minecraft-server")
45 '';
46}