feat(etna): add mkMinecraftServer function

This commit is contained in:
uku 2024-04-20 21:49:15 +02:00
parent 45be41281e
commit 54d10333ee
Signed by: uku
SSH key fingerprint: SHA256:4P0aN6M8ajKukNi6aPOaX0LacanGYtlfjmN+m/sHY/o

View file

@ -1,8 +1,63 @@
{ {
lib,
config, config,
mkSecret, mkSecret,
... ...
}: { }: let
mkMinecraftServer = name: {
port,
frpPort,
memory ? "4G",
env ? {},
}: {
virtualisation.oci-containers.containers.${name} = {
image = "itzg/minecraft-server";
ports = ["${builtins.toString port}:25565"];
volumes = [
"/data/${name}:/data"
"/data/downloads:/downloads"
];
environmentFiles = [config.age.secrets.minecraftEnv.path];
environment =
{
EULA = "true";
MEMORY = memory;
}
// env;
};
services.frp.settings.proxies = [
{
name = name;
type = "tcp";
localIp = "127.0.0.1";
localPort = port;
remotePort = frpPort;
}
];
systemd.services."${config.virtualisation.oci-containers.backend}-${name}".serviceConfig.TimeoutSec = "300";
};
recursiveMerge = attrList:
with lib; let
f = attrPath:
zipAttrsWith (
n: values:
if tail values == []
then head values
else if all isList values
then unique (concatLists values)
else if all isAttrs values
then f (attrPath ++ [n]) values
else last values
);
in
f [] attrList;
mkMinecraftServers = attrs: recursiveMerge (lib.mapAttrsToList mkMinecraftServer attrs);
in
lib.recursiveUpdate {
age.secrets = mkSecret "minecraftEnv" {}; age.secrets = mkSecret "minecraftEnv" {};
services.frp = { services.frp = {
@ -11,34 +66,17 @@
settings = { settings = {
serverAddr = "49.13.148.129"; serverAddr = "49.13.148.129";
serverPort = 7000; serverPort = 7000;
proxies = [
{
name = "ragnamod7";
type = "tcp";
localIp = "127.0.0.1";
localPort = 25566;
remotePort = 6001;
}
];
}; };
}; };
virtualisation.oci-containers.backend = "docker"; virtualisation.oci-containers.backend = "docker";
virtualisation.oci-containers.containers = { }
"ragnamod7" = { (mkMinecraftServers {
image = "itzg/minecraft-server"; ragnamod7 = {
ports = ["25566:25565"]; port = 25566;
volumes = [ frpPort = 6001;
"/data/ragnamod7:/data" memory = "10G";
"/data/downloads:/downloads" env = {
];
environmentFiles = [
config.age.secrets.minecraftEnv.path
];
environment = {
EULA = "true";
MEMORY = "10G";
USE_AIKAR_FLAGS = "true"; USE_AIKAR_FLAGS = "true";
TYPE = "AUTO_CURSEFORGE"; TYPE = "AUTO_CURSEFORGE";
CF_SLUG = "ragnamod-vii"; CF_SLUG = "ragnamod-vii";
@ -47,5 +85,15 @@
CF_IGNORE_MISSING_FILES = "mods/ftbbackups2-forge-1.18.2-1.0.23.jar"; CF_IGNORE_MISSING_FILES = "mods/ftbbackups2-forge-1.18.2-1.0.23.jar";
}; };
}; };
lynn = {
port = 25567;
frpPort = 6002;
memory = "4G";
env = {
USE_AIKAR_FLAGS = "true";
TYPE = "MODRINTH";
MODRINTH_MODPACK = "https://modrinth.com/modpack/adrenaserver/version/1.5.0+1.20.4.fabric";
}; };
} };
})