Reconfigure Minecraft server to use nix-minecraft
This commit is contained in:
parent
8ab0c4b595
commit
35a65d995c
5 changed files with 197 additions and 281 deletions
|
@ -1,78 +1,104 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
cfg = config.services.minecraft-server;
|
||||
|
||||
bukkitConfigFile = ./bukkit.yml;
|
||||
|
||||
spigotConfigFile = ./spigot.yml;
|
||||
|
||||
cfgToString = v: if builtins.isBool v then lib.boolToString v else toString v;
|
||||
|
||||
eulaFile = builtins.toFile "eula.txt" ''
|
||||
# eula.txt managed by NixOS configuration
|
||||
eula=true
|
||||
'';
|
||||
|
||||
opsFile = builtins.toFile "ops.json" (builtins.toJSON [{
|
||||
name = "aveeeeryy";
|
||||
uuid = "b65a1bc3-c6a0-4e8c-99b8-3538cfec0cfc";
|
||||
level = 4;
|
||||
bypassesPlayerLimit = true;
|
||||
}]);
|
||||
|
||||
serverPropertiesFile = pkgs.writeText "server.properties" (''
|
||||
# server.properties managed by NixOS configuration
|
||||
'' + lib.concatStringsSep "\n"
|
||||
(lib.mapAttrsToList (n: v: "${n}=${cfgToString v}") cfg.serverProperties));
|
||||
|
||||
serverIcon = ./server-icon.png;
|
||||
|
||||
{ config, pkgs, inputs, ... }:
|
||||
let serverIcon = ./server-icon.png;
|
||||
in {
|
||||
services.minecraft-server = {
|
||||
enable = false;
|
||||
package = pkgs.papermc;
|
||||
declarative = true;
|
||||
environment.systemPackages = with pkgs; [ mcrcon ];
|
||||
networking.firewall.allowedTCPPorts = [ 13914 ];
|
||||
nixpkgs.overlays = [ inputs.nix-minecraft.overlay ];
|
||||
services.minecraft-servers = {
|
||||
enable = true;
|
||||
eula = true;
|
||||
openFirewall = true;
|
||||
jvmOpts =
|
||||
"-Xms6G -Xmx6G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true";
|
||||
serverProperties = {
|
||||
difficulty = "hard";
|
||||
enable-rcon = false;
|
||||
enforce-secure-profile = false;
|
||||
enforce-whitelist = true;
|
||||
hide-online-players = true;
|
||||
motd = "NixOS server";
|
||||
online-mode = true;
|
||||
pvp = true;
|
||||
server-port = 13914;
|
||||
spawn-protection = 0;
|
||||
white-list = true;
|
||||
# dataDir = "/mnt/ssd-01/minecraft";
|
||||
# dataDir = "/mnt/Datos/minecraft";
|
||||
environmentFile = config.sops.templates."minecraft.env".path;
|
||||
managementSystem = {
|
||||
tmux.enable = false;
|
||||
systemd-socket.enable = true;
|
||||
};
|
||||
servers.main = {
|
||||
enable = true;
|
||||
package = pkgs.paperServers.paper-1_21_6;
|
||||
enableReload = true;
|
||||
autoStart = false;
|
||||
jvmOpts =
|
||||
"-Xms6G -Xmx6G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true";
|
||||
serverProperties = {
|
||||
difficulty = "hard";
|
||||
enable-rcon = true;
|
||||
enable-query = false;
|
||||
enforce-secure-profile = false;
|
||||
enforce-whitelist = true;
|
||||
hide-online-players = true;
|
||||
max-players = 10;
|
||||
motd = "NixOS server";
|
||||
online-mode = true;
|
||||
pvp = true;
|
||||
"rcon.password" = "@MINECRAFT_RCON_PASSWORD@";
|
||||
server-port = 13914;
|
||||
spawn-protection = 0;
|
||||
white-list = true;
|
||||
};
|
||||
symlinks = {
|
||||
"server-icon.png" = serverIcon;
|
||||
"plugins/EssentialsX.jar" = pkgs.fetchurl {
|
||||
url =
|
||||
"https://github.com/EssentialsX/Essentials/releases/download/2.21.1/EssentialsX-2.21.1.jar";
|
||||
hash = "sha256-Fd1/hxPmE6Hd6tp5LbZgqIyL9pAVvBPxqfnjf21Ez1o=";
|
||||
};
|
||||
"plugins/EssentialsX-Chat.jar" = pkgs.fetchurl {
|
||||
url =
|
||||
"https://github.com/EssentialsX/Essentials/releases/download/2.21.1/EssentialsXChat-2.21.1.jar";
|
||||
hash = "sha256-M3ThA5j5DI1qTdNw8OvLIprxRCD5q5ya/AfO5jGyU6Y=";
|
||||
};
|
||||
"plugins/TabTPS.jar" = pkgs.fetchurl {
|
||||
url =
|
||||
"https://cdn.modrinth.com/data/cUhi3iB2/versions/DlhrDe98/tabtps-spigot-1.3.27.jar";
|
||||
hash = "sha256-pWmcNKB0iAlVK4Ki5/vBOv8npOMyrUdxJ/7TbPXlpcI=";
|
||||
};
|
||||
};
|
||||
files = {
|
||||
"ops.json".value = [{
|
||||
name = "engullejamones";
|
||||
uuid = "b65a1bc3-c6a0-4e8c-99b8-3538cfec0cfc";
|
||||
level = 4;
|
||||
bypassesPlayerLimit = true;
|
||||
}];
|
||||
"whitelist.json".value = [{
|
||||
name = "engullejamones";
|
||||
uuid = "b65a1bc3-c6a0-4e8c-99b8-3538cfec0cfc";
|
||||
}];
|
||||
"plugins/TabTPS/display-configs/default.conf" = pkgs.writeTextFile {
|
||||
name = "tabtps-display-config.conf";
|
||||
text = ''
|
||||
action-bar-settings {
|
||||
allow=false
|
||||
enable-on-login=false
|
||||
}
|
||||
boss-bar-settings {
|
||||
allow=false
|
||||
enable-on-login=false
|
||||
}
|
||||
permission=""
|
||||
tab-settings {
|
||||
allow=true
|
||||
enable-on-login=true
|
||||
footer-modules="ping,tps,mspt,cpu,memory"
|
||||
header-modules=""
|
||||
separator="<br>"
|
||||
theme=default
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
dataDir = "/minecraft";
|
||||
};
|
||||
# Overriden to have a non-declarative whitelist
|
||||
systemd.services.minecraft-server.preStart = lib.mkForce ''
|
||||
ln -sf ${eulaFile} eula.txt
|
||||
cp -f ${bukkitConfigFile} bukkit.yml
|
||||
chmod +w bukkit.yml
|
||||
cp -f ${spigotConfigFile} spigot.yml
|
||||
chmod +w spigot.yml
|
||||
cp -f ${opsFile} ops.json
|
||||
chmod +w ops.json
|
||||
ln -sf ${serverIcon} server-icon.png
|
||||
if [ -e .declarative ]; then
|
||||
# Was declarative before, no need to back up anything
|
||||
cp -f ${serverPropertiesFile} server.properties
|
||||
else
|
||||
# Declarative for the first time, backup stateful files
|
||||
cp -b --suffix=.stateful ${serverPropertiesFile} server.properties
|
||||
|
||||
# server.properties must have write permissions, because every time
|
||||
# the server starts it first parses the file and then regenerates it..
|
||||
chmod +w server.properties
|
||||
echo "Autogenerated file that signifies that this server configuration is managed declaratively by NixOS" \
|
||||
> .declarative
|
||||
fi
|
||||
'';
|
||||
sops = {
|
||||
secrets."minecraft_rcon".owner = "minecraft";
|
||||
templates."minecraft.env" = {
|
||||
content = ''
|
||||
MINECRAFT_RCON_PASSWORD=${config.sops.placeholder."minecraft_rcon"}
|
||||
'';
|
||||
owner = "minecraft";
|
||||
};
|
||||
};
|
||||
users.groups.minecraft.members = [ "avery" ];
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue