aboutsummaryrefslogtreecommitdiff
path: root/nix/minecraft.nix
blob: 8117f6c20ef0dded3552d8ae9174cc2b8b5f73d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{
  inputs,
  lib,
  pkgs,
  ...
}:
let
  allowMinecraft = pkg: builtins.elem (lib.getName pkg) [ "minecraft-server" ];

  unstable = import inputs.nixpkgs-unstable {
    inherit (pkgs.stdenv.hostPlatform) system;
    config.allowUnfreePredicate = allowMinecraft;
  };
in
{
  nixpkgs.config.allowUnfreePredicate = allowMinecraft;

  environment.systemPackages = [ pkgs.mcrcon ];

  networking.firewall.allowedTCPPorts = [ 25565 ];
  networking.firewall.allowedUDPPorts = [ 25565 ];

  services.minecraft-server = {
    enable = true;
    package = unstable.minecraft-server;
    eula = true;
    # openFirewall would also open rcon.port, so open the game port by hand
    openFirewall = false;
    declarative = true;
    whitelist = {
      mr_5aturn = "2b811fad-e419-401e-9185-70ab279219b5";
      CiderDonuts = "7a992778-71bc-4650-83a1-53069369481b";
      tallcafemocha = "a86f5a3d-cbe9-4248-800e-5863fbed19bf";
    };
    serverProperties = {
      server-port = 25565;
      view-distance = 32;
      difficulty = "normal";
      gamemode = "survival";
      max-players = 5;
      white-list = true;

      enable-rcon = true;
      "rcon.port" = 25575;
      "rcon.password" = "mooshroom";
    };
    jvmOpts = "-Xms4096M -Xmx4096M";
  };

  systemd.services.minecraft-server = {
    startLimitBurst = 5;
    startLimitIntervalSec = 300;
    serviceConfig = {
      NoNewPrivileges = true;

      ProtectSystem = "full";

      MemoryMax = "6G";
      TasksMax = 512;
      RestartSec = "10s";
    };
  };
}