mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-09 04:19:19 -08:00
72 lines
2.3 KiB
Nix
72 lines
2.3 KiB
Nix
{
|
|
lib,
|
|
gensokyo-zone,
|
|
...
|
|
}: let
|
|
inherit (gensokyo-zone.lib) mkAlmostOptionDefault;
|
|
inherit (lib.modules) mkIf;
|
|
in {
|
|
config.exports.services.minecraft = {config, ...}: let
|
|
mkAssertion = f: nixosConfig: let
|
|
cfg = nixosConfig.services.${config.nixos.serviceAttr};
|
|
in
|
|
f nixosConfig cfg;
|
|
in {
|
|
displayName = "Minecraft";
|
|
nixos = {
|
|
serviceAttr = "minecraft-java-server";
|
|
assertions = mkIf config.enable [
|
|
(mkAssertion (nixosConfig: cfg: {
|
|
assertion = config.ports.default.port == cfg.port;
|
|
message = "server-port mismatch";
|
|
}))
|
|
(mkAssertion (nixosConfig: cfg: {
|
|
assertion = config.ports.rcon.enable == cfg.serverProperties.enable-rcon or false;
|
|
message = "enable-rcon mismatch";
|
|
}))
|
|
(mkAssertion (nixosConfig: cfg: {
|
|
assertion = (! cfg.serverProperties.enable-rcon or false) || config.ports.rcon.port == cfg.serverProperties."rcon.port" or 25575;
|
|
message = "rcon.port mismatch";
|
|
}))
|
|
(mkAssertion (nixosConfig: cfg: {
|
|
assertion = config.ports.query.enable == cfg.serverProperties.enable-query or false;
|
|
message = "enable-query mismatch";
|
|
}))
|
|
(mkAssertion (nixosConfig: cfg: {
|
|
assertion = (! cfg.serverProperties.enable-query or false) || config.ports.query.port == cfg.serverProperties."query.port" or 25565;
|
|
message = "query.port mismatch";
|
|
}))
|
|
];
|
|
};
|
|
defaults.port.listen = mkAlmostOptionDefault "local";
|
|
ports = {
|
|
default = {
|
|
port = mkAlmostOptionDefault 25565;
|
|
transport = "tcp";
|
|
};
|
|
rcon = {
|
|
enable = mkAlmostOptionDefault false;
|
|
port = mkAlmostOptionDefault 25575;
|
|
transport = "tcp";
|
|
listen = mkAlmostOptionDefault "int";
|
|
};
|
|
query = {
|
|
enable = mkAlmostOptionDefault false;
|
|
port = mkAlmostOptionDefault config.ports.default.port;
|
|
transport = "udp";
|
|
};
|
|
dynmap = {
|
|
enable = mkAlmostOptionDefault false;
|
|
port = mkAlmostOptionDefault 8123;
|
|
protocol = "http";
|
|
listen = mkAlmostOptionDefault "int";
|
|
};
|
|
bluemap = {
|
|
enable = mkAlmostOptionDefault false;
|
|
port = mkAlmostOptionDefault 8100;
|
|
protocol = "http";
|
|
listen = mkAlmostOptionDefault "int";
|
|
};
|
|
};
|
|
};
|
|
}
|