summaryrefslogtreecommitdiff
path: root/modules/games/minecraft.nix
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
committerAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
commite6ed60548397627bf10f561f9438201dbba0a36e (patch)
treef9a84c5957d2cc4fcd148065ee9365a0c851ae1c /modules/games/minecraft.nix
parent9ac64328603d44bd272175942d3ea3eaadcabd04 (diff)
2024-04-21
Diffstat (limited to 'modules/games/minecraft.nix')
-rw-r--r--modules/games/minecraft.nix86
1 files changed, 86 insertions, 0 deletions
diff --git a/modules/games/minecraft.nix b/modules/games/minecraft.nix
new file mode 100644
index 0000000..6e163dc
--- /dev/null
+++ b/modules/games/minecraft.nix
@@ -0,0 +1,86 @@
+{
+ config,
+ inputs,
+ lib,
+ pkgs,
+ ...
+}:
+with lib;
+let
+ cfg = config.nixfiles.modules.games.minecraft;
+in
+{
+ imports = [ inputs.minecraft.nixosModules.minecraft-servers ];
+
+ options.nixfiles.modules.games.minecraft = {
+ client.enable = mkEnableOption "Minecraft client";
+ server = {
+ enable = mkEnableOption "Minecraft server";
+
+ port = mkOption {
+ description = "Server port.";
+ type = types.port;
+ default = 25565;
+ };
+
+ memory = mkOption {
+ description = "Amount of RAM to allocate.";
+ type = types.str;
+ default = "2G";
+ };
+ };
+ };
+
+ config = mkMerge [
+ (mkIf cfg.client.enable { hm.home.packages = [ pkgs.prismlauncher ]; })
+ (mkIf cfg.server.enable {
+ nixfiles.modules.common.nix.allowedUnfreePackages = [ "minecraft-server" ];
+
+ ark.directories = [ config.services.minecraft-servers.dataDir ];
+
+ services.minecraft-servers = {
+ enable = true;
+ eula = true;
+
+ openFirewall = true;
+
+ servers.default = {
+ enable = true;
+ autoStart = true;
+
+ package = pkgs.paperServers.paper-1_19_3;
+
+ serverProperties = {
+ # motd = "";
+ # white-list = true;
+ allow-flight = true;
+ difficulty = "hard";
+ enable-command-block = true;
+ enforce-secure-profile = false;
+ enforce-whitelist = true;
+ gamemode = "survival";
+ level-name = "default";
+ max-players = 8;
+ online-mode = false;
+ previews-chat = false;
+ pvp = false;
+ server-port = cfg.server.port;
+ snooper-enabled = false;
+ };
+
+ jvmOpts =
+ (concatStringsSep " " [
+ "-Xms${cfg.server.memory}"
+ "-Xmx${cfg.server.memory}"
+ "--add-modules=jdk.incubator.vector" # Required by some plugins.
+ ])
+ + " ";
+ };
+ };
+
+ nixpkgs.overlays = [ inputs.minecraft.overlay ];
+
+ my.extraGroups = [ config.services.minecraft-servers.group ];
+ })
+ ];
+}