summaryrefslogtreecommitdiff
path: root/services/minecraft/p2.nix
blob: baec47710d0c5c5bb7d3d0a3236c80f7a5bb411c (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
{ auxiliaryPkgs, ... }:

let
  inherit (auxiliaryPkgs) common;

  # next to vanilla! a srv dns record handles the routing
  # from `p2.mc.rnrd.eu` to here.
  p2Port = 25566;
  p2Directory = "/srv/mc-p2";
  p2Memory = "8G";

  p2Image = common.pullImage {
    name = "itzg/minecraft-server";
    tag = "2026.9.0-java17"; # fabric, 1.20.1, java 17
    digest = "sha256:40f4721c1e6020164e5b7eed81c844734ca4ae8339f6546869edc48be82f82dc";
    x86.sha256 = "sha256-M8sHIOegqJsMYvk2Lnc6Zwkj9NO30hgf67OscjpW7KE=";
  };

in
{
  networking.firewall.allowedTCPPorts = [ p2Port ];

  foundation.services.minecraft-p2 = {
    fullImage = p2Image;

    ports = [ (common.globalPort [ p2Port 25565 ]) ];

    volumes = [ [ "${p2Directory}" "/data" ] ];

    environment = {
      EULA = "TRUE";

      # image can configure everything by itself! (woah!)
      TYPE = "MODRINTH";
      MODRINTH_MODPACK = "prominence-2-fabric";
      MODRINTH_VERSION = "4.0.4"; # id: v5JSKaF2
      MODRINTH_LOADER = "fabric";

      # 4.0.4 needs s_lib but decided to not package it properly for servers. :(
      # this can be dropped once it's fixed in upstream!
      MODRINTH_PROJECTS = "s-lib:qf2mIL1z";

      MEMORY = p2Memory;

      OVERRIDE_SERVER_PROPERTIES = "false"; # configs are managed by hand

      # runs as root, so the mounted files are root-owned too,
      # created as 0755/0644 to match the mount point itself.
      UID = "0";
      GID = "0";
      UMASK = "0022";
    };
  };
}