aboutsummaryrefslogtreecommitdiff
path: root/modules/games/default.nix
blob: 883cb22a3c835a4d57f58004f949713eef85e79b (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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
{ config, lib, pkgs, ... }:

{
  imports = [ ./acc.nix ];
  # ./palworld.nix ./satisfactory.nix 

  services.factorio = {
    enable = true;
    package = pkgs.master.factorio-headless;

    openFirewall = true;
    public = false;
    nonBlockingSaving = true;
    loadLatestSave = true;
    game-name = "cocaine.farm";
    bind = "178.63.224.10";
  };

  services.xonotic = {
    enable = true;
    openFirewall = true;
    settings = {
      net_address = "178.63.224.10";
      hostname = "cocaine.farm xonotic $g_xonoticversion";
    };
  };

  services.minecraft-server = {
    enable = true;
    package = pkgs.unstable.papermc;
    eula = true;

    openFirewall = true;

    declarative = true;
    whitelist = import ./minecraft_whitelist.nix;
    jvmOpts = "-Xmx6144M -Xms6144M";
    serverProperties = {
      motd = "Fun for the whole family!";

      server-ip = "178.63.224.11";
      server-port = 25565;

      enforce-secure-profile = false;
      difficulty = "hard";
      enable-rcon = true;
      "rcon.password" = builtins.readFile ../../secrets/rcon;
      force-gamemode = true;
      white-list = true;
      level-type = "default";
      spawn-protection = 0;
    };
  };

  virtualisation.oci-containers.containers = {
    minecraft_mods = {
      image = "itzg/minecraft-server";
      autoStart = true;
      extraOptions = [ "--network=host" ];
      environment = {
        EULA = "true";
        TYPE = "FABRIC";
        VERSION = "1.21.8";
        SEED = "-3691007458655063350";
        INIT_MEMORY = "1G";
        MAX_MEMORY = "4G";

        OVERRIDE_SERVER_PROPERTIES = "false";
      };
      volumes = [
        "/var/lib/minecraft_mods:/data"
      ];
    };
  };

  systemd.services.prometheus-minecraft-exporter = 
    let exporter = pkgs.callPackage ../../pkgs/prometheus-minecraft-exporter {};
  in {
    description = "minecraft prometheus exporter";
    enable = true;

    wantedBy = [ "multi-user.target" ];
    after = [ "network.target" "podman-minecraft_mods.service" ];

    serviceConfig = {
      ExecStart = (lib.concatStringsSep " " ([
        "${exporter}/bin/minecraft-exporter"
        "--web.listen-address=:9150"
        "--mc.world=/var/lib/minecraft_mods/world"
        "--mc.name-source=mojang"
        "--mc.mod-server-stats=fabric"
        "--web.disable-exporter-metrics"
      ]));
      EnvironmentFile = "/etc/secrets/minecraft_rcon.env";
    };
  };

  secrets = {
    minecraft = {
      source = ../../secrets/minecraft_rcon.env;
      dest = "/etc/secrets/minecraft_rcon.env";
    };
  };

  networking.firewall.allowedTCPPorts = [ 25566 ];
}