{ config, lib, pkgs, ... }: with lib; let cfg = config.nixfiles.modules.games.minecraft; in { options.nixfiles.modules.games.minecraft = { client.enable = mkEnableOption "Minecraft client"; server = { enable = mkEnableOption "Minecraft server"; memory = mkOption { description = "Amount of RAM to allocate."; type = types.str; default = "2G"; }; }; }; config = mkMerge [ (mkIf cfg.client.enable { hm.home.packages = with pkgs; [pollymc]; }) (mkIf cfg.server.enable { # Configurations, opslist, whitelist and plugins are managed imperatively. # TODO Make it declarative. services.minecraft-server = { enable = true; eula = true; package = pkgs.minecraftServers.purpur_1_19_2; # TODO Make a PR fixing trailing whitespace on this. jvmOpts = (concatStringsSep " " [ "-Xmx${cfg.server.memory}" "-Xms${cfg.server.memory}" "--add-modules=jdk.incubator.vector" ]) + " "; }; # Defined in /var/lib/minecraft/server.properties. networking.firewall.allowedTCPPorts = [55565]; }) ]; }