mirror of
https://gitlab.com/upRootNutrition/dotfiles.git
synced 2025-12-14 02:20:53 -06:00
feat: fixed minecraft worlds
This commit is contained in:
parent
2b1a44d591
commit
4dca730684
6 changed files with 144 additions and 115 deletions
|
|
@ -26,7 +26,7 @@ in
|
||||||
macUser = "02:00:00:00:00:41";
|
macUser = "02:00:00:00:00:41";
|
||||||
ip = "192.168.50.141";
|
ip = "192.168.50.141";
|
||||||
gate = "192.168.50.1";
|
gate = "192.168.50.1";
|
||||||
ssh = 2401;
|
ssh = 2410;
|
||||||
port = 43000;
|
port = 43000;
|
||||||
};
|
};
|
||||||
paths = {
|
paths = {
|
||||||
|
|
@ -53,7 +53,7 @@ in
|
||||||
macUser = "02:00:00:00:00:42";
|
macUser = "02:00:00:00:00:42";
|
||||||
ip = "192.168.50.142";
|
ip = "192.168.50.142";
|
||||||
gate = "192.168.50.1";
|
gate = "192.168.50.1";
|
||||||
ssh = 2402;
|
ssh = 2411;
|
||||||
port = 43001;
|
port = 43001;
|
||||||
};
|
};
|
||||||
paths = {
|
paths = {
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,8 @@
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (flake.config.people) user0;
|
inherit (flake.config.people) user0;
|
||||||
serviceCfg = {
|
inherit (flake.config.services) instances;
|
||||||
name = "minecraft";
|
serviceCfg = instances.minecraft;
|
||||||
};
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
minecraftVM =
|
minecraftVM =
|
||||||
|
|
@ -38,7 +37,7 @@ in
|
||||||
openFirewall = true;
|
openFirewall = true;
|
||||||
declarative = true;
|
declarative = true;
|
||||||
serverProperties = {
|
serverProperties = {
|
||||||
"rcon.password" = "/etc/${serviceCfg.name}-secrets/${user}-world${worldNumber}";
|
"rcon.password" = "/etc/${serviceCfg.name}-secrets/world${worldNumber}";
|
||||||
server-port = port;
|
server-port = port;
|
||||||
}
|
}
|
||||||
// config;
|
// config;
|
||||||
|
|
@ -69,7 +68,7 @@ in
|
||||||
};
|
};
|
||||||
script = ''
|
script = ''
|
||||||
mkdir -p /etc/${serviceCfg.name}-secrets
|
mkdir -p /etc/${serviceCfg.name}-secrets
|
||||||
cp /run/secrets/${user}-world${worldNumber} /etc/${serviceCfg.name}-secrets/${user}-world${worldNumber}
|
cp /run/secrets/world${worldNumber} /etc/${serviceCfg.name}-secrets/world${worldNumber}
|
||||||
chmod 755 /etc/${serviceCfg.name}-secrets
|
chmod 755 /etc/${serviceCfg.name}-secrets
|
||||||
chmod 644 /etc/${serviceCfg.name}-secrets/*
|
chmod 644 /etc/${serviceCfg.name}-secrets/*
|
||||||
'';
|
'';
|
||||||
|
|
@ -97,6 +96,7 @@ in
|
||||||
};
|
};
|
||||||
tmpfiles.rules = [
|
tmpfiles.rules = [
|
||||||
"d /var/lib/${serviceCfg.name} 0755 ${serviceCfg.name} ${serviceCfg.name} -"
|
"d /var/lib/${serviceCfg.name} 0755 ${serviceCfg.name} ${serviceCfg.name} -"
|
||||||
|
"Z /var/lib/${serviceCfg.name} 0755 ${serviceCfg.name} ${serviceCfg.name} -"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
microvm = {
|
microvm = {
|
||||||
|
|
@ -106,7 +106,7 @@ in
|
||||||
interfaces = [
|
interfaces = [
|
||||||
{
|
{
|
||||||
type = "tap";
|
type = "tap";
|
||||||
id = "vm-mc${worldNumber}-${user}";
|
id = "vm-mc-${worldNumber}";
|
||||||
mac = mac;
|
mac = mac;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|
@ -133,7 +133,7 @@ in
|
||||||
mountPoint = "/var/lib/${serviceCfg.name}";
|
mountPoint = "/var/lib/${serviceCfg.name}";
|
||||||
proto = "virtiofs";
|
proto = "virtiofs";
|
||||||
source = "${mnt}/${serviceCfg.name}/world${worldNumber}";
|
source = "${mnt}/${serviceCfg.name}/world${worldNumber}";
|
||||||
tag = "${serviceCfg.name}_${user}_data";
|
tag = "${serviceCfg.name}_mc${worldNumber}_data";
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
mountPoint = "/run/secrets";
|
mountPoint = "/run/secrets";
|
||||||
|
|
@ -150,10 +150,12 @@ in
|
||||||
|
|
||||||
systemd.tmpfiles.rules = [
|
systemd.tmpfiles.rules = [
|
||||||
"d ${mnt}/${serviceCfg.name} 0751 microvm wheel - -"
|
"d ${mnt}/${serviceCfg.name} 0751 microvm wheel - -"
|
||||||
|
"d ${mnt}/${serviceCfg.name}/world${worldNumber} 0751 microvm wheel - -"
|
||||||
|
"Z ${mnt}/${serviceCfg.name}/world${worldNumber} 0755 microvm wheel - -"
|
||||||
];
|
];
|
||||||
|
|
||||||
sops.secrets = {
|
sops.secrets = {
|
||||||
"${serviceCfg.name}/${user}-world${worldNumber}" = {
|
"${serviceCfg.name}/world${worldNumber}" = {
|
||||||
owner = "root";
|
owner = "root";
|
||||||
mode = "0600";
|
mode = "0600";
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,105 +1,11 @@
|
||||||
{
|
|
||||||
flake,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
let
|
let
|
||||||
inherit (import ../../../helpers.nix { inherit flake; }) labHelpers;
|
importList =
|
||||||
inherit (labHelpers) mntPath;
|
|
||||||
inherit (import ../config { inherit flake pkgs; }) minecraftVM;
|
|
||||||
inherit (flake.config.services) instances;
|
|
||||||
inherit (flake.config.people) user0;
|
|
||||||
|
|
||||||
minecraftNick01 =
|
|
||||||
let
|
let
|
||||||
interfaceCfg = instances.minecraft.interfaces.interface0;
|
content = builtins.readDir ./.;
|
||||||
|
dirContent = builtins.filter (n: content.${n} == "directory") (builtins.attrNames content);
|
||||||
in
|
in
|
||||||
minecraftVM {
|
map (name: ./. + "/${name}") dirContent;
|
||||||
user = user0;
|
|
||||||
ip = interfaceCfg.microvm.ip;
|
|
||||||
mac = interfaceCfg.microvm.mac;
|
|
||||||
userMac = interfaceCfg.microvm.macUser;
|
|
||||||
ssh = interfaceCfg.microvm.ssh;
|
|
||||||
port = interfaceCfg.microvm.port;
|
|
||||||
mnt = mntPath;
|
|
||||||
worldNumber = "01";
|
|
||||||
config = {
|
|
||||||
allow-flight = false;
|
|
||||||
allow-nether = true;
|
|
||||||
difficulty = 2;
|
|
||||||
enable-command-block = false;
|
|
||||||
enable-rcon = true;
|
|
||||||
enable-status = true;
|
|
||||||
force-gamemode = true;
|
|
||||||
gamemode = 0;
|
|
||||||
generate-structures = true;
|
|
||||||
hardcore = false;
|
|
||||||
hide-online-players = false;
|
|
||||||
level-name = "Brix on Nix";
|
|
||||||
level-seed = "9064150133272194";
|
|
||||||
max-players = 10;
|
|
||||||
max-world-size = 64000000;
|
|
||||||
motd = "A cool Minecraft server powered by NixOS";
|
|
||||||
online-mode = true;
|
|
||||||
pvp = true;
|
|
||||||
spawn-animals = true;
|
|
||||||
spawn-monsters = true;
|
|
||||||
spawn-npcs = true;
|
|
||||||
spawn-protection = 16;
|
|
||||||
view-distance = 32;
|
|
||||||
white-list = true;
|
|
||||||
};
|
|
||||||
whitelist = {
|
|
||||||
Hefty_Chungus = "b75a9816-d408-4c54-b226-385b59ea1cb3";
|
|
||||||
Hefty_Chungus_Jr = "c3bf8cac-e953-4ea4-ae5f-7acb92a51a85";
|
|
||||||
EclipseMoon01 = "adef4af7-d8c6-4627-b492-e990ea1bb993";
|
|
||||||
Fallaryn = "d8baa117-ab58-4b07-92a5-48fb1978eb49";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
minecraftNick02 =
|
|
||||||
let
|
|
||||||
interfaceCfg = instances.minecraft.interfaces.interface1;
|
|
||||||
in
|
|
||||||
minecraftVM {
|
|
||||||
user = user0;
|
|
||||||
ip = interfaceCfg.microvm.ip;
|
|
||||||
mac = interfaceCfg.microvm.mac;
|
|
||||||
userMac = interfaceCfg.microvm.macUser;
|
|
||||||
ssh = interfaceCfg.microvm.ssh;
|
|
||||||
port = interfaceCfg.microvm.port;
|
|
||||||
mnt = mntPath;
|
|
||||||
worldNumber = "02";
|
|
||||||
config = {
|
|
||||||
allow-flight = false;
|
|
||||||
allow-nether = true;
|
|
||||||
difficulty = 2;
|
|
||||||
enable-command-block = false;
|
|
||||||
enable-rcon = true;
|
|
||||||
enable-status = true;
|
|
||||||
force-gamemode = true;
|
|
||||||
gamemode = 0;
|
|
||||||
generate-structures = true;
|
|
||||||
hardcore = false;
|
|
||||||
hide-online-players = false;
|
|
||||||
level-name = "Cuddle Cubes";
|
|
||||||
level-seed = "-2332803749585407299";
|
|
||||||
max-players = 10;
|
|
||||||
max-world-size = 64000000;
|
|
||||||
motd = "A cool Minecraft server powered by NixOS";
|
|
||||||
online-mode = true;
|
|
||||||
pvp = true;
|
|
||||||
spawn-animals = true;
|
|
||||||
spawn-monsters = true;
|
|
||||||
spawn-npcs = true;
|
|
||||||
spawn-protection = 16;
|
|
||||||
view-distance = 32;
|
|
||||||
white-list = true;
|
|
||||||
};
|
|
||||||
whitelist = {
|
|
||||||
Hefty_Chungus = "b75a9816-d408-4c54-b226-385b59ea1cb3";
|
|
||||||
Fallaryn = "d8baa117-ab58-4b07-92a5-48fb1978eb49";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
in
|
||||||
minecraftNick01 // minecraftNick02
|
{
|
||||||
|
imports = importList;
|
||||||
|
}
|
||||||
|
|
|
||||||
62
modules/nixos/homelab/guests/minecraft/minecraftCeres/world01/default.nix
Executable file
62
modules/nixos/homelab/guests/minecraft/minecraftCeres/world01/default.nix
Executable file
|
|
@ -0,0 +1,62 @@
|
||||||
|
{
|
||||||
|
flake,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (import ../../../../helpers.nix { inherit flake; }) labHelpers;
|
||||||
|
inherit (labHelpers) mntPath;
|
||||||
|
inherit (import ../../config { inherit flake pkgs; }) minecraftVM;
|
||||||
|
inherit (flake.config.services) instances;
|
||||||
|
inherit (flake.config.people) user0;
|
||||||
|
|
||||||
|
minecraftNick01 =
|
||||||
|
let
|
||||||
|
interfaceCfg = instances.minecraft.interfaces.interface0;
|
||||||
|
in
|
||||||
|
minecraftVM {
|
||||||
|
user = user0;
|
||||||
|
ip = interfaceCfg.microvm.ip;
|
||||||
|
mac = interfaceCfg.microvm.mac;
|
||||||
|
userMac = interfaceCfg.microvm.macUser;
|
||||||
|
ssh = interfaceCfg.microvm.ssh;
|
||||||
|
port = interfaceCfg.microvm.port;
|
||||||
|
mnt = mntPath;
|
||||||
|
worldNumber = "01";
|
||||||
|
config = {
|
||||||
|
allow-flight = false;
|
||||||
|
allow-nether = true;
|
||||||
|
difficulty = 2;
|
||||||
|
enable-command-block = false;
|
||||||
|
enable-rcon = true;
|
||||||
|
enable-status = true;
|
||||||
|
force-gamemode = true;
|
||||||
|
gamemode = 0;
|
||||||
|
generate-structures = true;
|
||||||
|
hardcore = false;
|
||||||
|
hide-online-players = false;
|
||||||
|
level-name = "Brix on Nix";
|
||||||
|
level-seed = "9064150133272194";
|
||||||
|
max-players = 10;
|
||||||
|
max-world-size = 64000000;
|
||||||
|
motd = "A cool Minecraft server powered by NixOS";
|
||||||
|
online-mode = true;
|
||||||
|
pvp = true;
|
||||||
|
spawn-animals = true;
|
||||||
|
spawn-monsters = true;
|
||||||
|
spawn-npcs = true;
|
||||||
|
spawn-protection = 16;
|
||||||
|
view-distance = 32;
|
||||||
|
white-list = true;
|
||||||
|
};
|
||||||
|
whitelist = {
|
||||||
|
Hefty_Chungus = "b75a9816-d408-4c54-b226-385b59ea1cb3";
|
||||||
|
Hefty_Chungus_Jr = "c3bf8cac-e953-4ea4-ae5f-7acb92a51a85";
|
||||||
|
EclipseMoon01 = "adef4af7-d8c6-4627-b492-e990ea1bb993";
|
||||||
|
Fallaryn = "d8baa117-ab58-4b07-92a5-48fb1978eb49";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
minecraftNick01
|
||||||
59
modules/nixos/homelab/guests/minecraft/minecraftCeres/world02/default.nix
Executable file
59
modules/nixos/homelab/guests/minecraft/minecraftCeres/world02/default.nix
Executable file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{
|
||||||
|
flake,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (import ../../../../helpers.nix { inherit flake; }) labHelpers;
|
||||||
|
inherit (labHelpers) mntPath;
|
||||||
|
inherit (import ../../config { inherit flake pkgs; }) minecraftVM;
|
||||||
|
inherit (flake.config.services) instances;
|
||||||
|
inherit (flake.config.people) user0;
|
||||||
|
|
||||||
|
minecraftNick02 =
|
||||||
|
let
|
||||||
|
interfaceCfg = instances.minecraft.interfaces.interface1;
|
||||||
|
in
|
||||||
|
minecraftVM {
|
||||||
|
user = user0;
|
||||||
|
ip = interfaceCfg.microvm.ip;
|
||||||
|
mac = interfaceCfg.microvm.mac;
|
||||||
|
userMac = interfaceCfg.microvm.macUser;
|
||||||
|
ssh = interfaceCfg.microvm.ssh;
|
||||||
|
port = interfaceCfg.microvm.port;
|
||||||
|
mnt = mntPath;
|
||||||
|
worldNumber = "02";
|
||||||
|
config = {
|
||||||
|
allow-flight = false;
|
||||||
|
allow-nether = true;
|
||||||
|
difficulty = 2;
|
||||||
|
enable-command-block = false;
|
||||||
|
enable-rcon = true;
|
||||||
|
enable-status = true;
|
||||||
|
force-gamemode = true;
|
||||||
|
gamemode = 0;
|
||||||
|
generate-structures = true;
|
||||||
|
hardcore = false;
|
||||||
|
hide-online-players = false;
|
||||||
|
level-name = "Cuddle Cubes";
|
||||||
|
level-seed = "-2332803749585407299";
|
||||||
|
max-players = 10;
|
||||||
|
max-world-size = 64000000;
|
||||||
|
motd = "A cool Minecraft server powered by NixOS";
|
||||||
|
online-mode = true;
|
||||||
|
pvp = true;
|
||||||
|
spawn-animals = true;
|
||||||
|
spawn-monsters = true;
|
||||||
|
spawn-npcs = true;
|
||||||
|
spawn-protection = 16;
|
||||||
|
view-distance = 32;
|
||||||
|
white-list = true;
|
||||||
|
};
|
||||||
|
whitelist = {
|
||||||
|
Hefty_Chungus = "b75a9816-d408-4c54-b226-385b59ea1cb3";
|
||||||
|
Fallaryn = "d8baa117-ab58-4b07-92a5-48fb1978eb49";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
minecraftNick02
|
||||||
|
|
@ -24,8 +24,8 @@ forgejo:
|
||||||
zookeeper:
|
zookeeper:
|
||||||
boon-env: ENC[AES256_GCM,data:3aOlOkYHxpao4/+Ubud4LfyZ3yQonN0FtHEYvQHEPNjTcqJiltuXrRr0ZaJ7RwY+A/IunuZVhrjngCBRj+TWBZZ2i+uaf0BEuA==,iv:53H5+rcRIui2d71K3QTj5LYg/ae4TGOFe96t2zxQh2o=,tag:vR3IOm2XFmODLQZDTlY1zw==,type:str]
|
boon-env: ENC[AES256_GCM,data:3aOlOkYHxpao4/+Ubud4LfyZ3yQonN0FtHEYvQHEPNjTcqJiltuXrRr0ZaJ7RwY+A/IunuZVhrjngCBRj+TWBZZ2i+uaf0BEuA==,iv:53H5+rcRIui2d71K3QTj5LYg/ae4TGOFe96t2zxQh2o=,tag:vR3IOm2XFmODLQZDTlY1zw==,type:str]
|
||||||
minecraft:
|
minecraft:
|
||||||
nick-world01: ENC[AES256_GCM,data:skiM+L/uEEnst0pCDzB5XaHnLpWrLQBXuQ==,iv:CnlXwpB4paDQSaC2W9uQRTc2rgqCo6QTGC4SsYAMw6Y=,tag:D2r2X6flowP7tjuX74KzRg==,type:str]
|
world01: ENC[AES256_GCM,data:duQDeBUaPup97c/hKMhjP2kj8EJRPNGQfTyUHoeNJ6sQ,iv:sBKY7y5TCrYjikWJfOZREMDmVWNCPqe4x5urpdP5UvA=,tag:ZzT5o5DnLjBSiCB8VHHCbg==,type:str]
|
||||||
nick-world02: ENC[AES256_GCM,data:tEh+uThkn8VczSjviU58/vBUmyKBfiA7tnYiBsIlgjSb,iv:yfQvffZ3AlT4lpfEkBT5gVacogaQoIZSim+gpoD7LkU=,tag:E7matzOY08rapIxaW9lOdg==,type:str]
|
world02: ENC[AES256_GCM,data:3t3TDnUD6wpAJonMZ16umnHY67srbEpLAvNaIW29reE7,iv:1SnL/e+NO+mSxQbtRjjTS81Mpcr4+psiw+2hKoXxeVE=,tag:NlnqySPD3CAUI2rFAo1mbA==,type:str]
|
||||||
vaultwarden:
|
vaultwarden:
|
||||||
nick-env: ENC[AES256_GCM,data:lG7pqpLJ7OsFZhWCJcPnvDxkR4Ob78buazUeLWlRSAPYEv8KarymYduecJNWCZUjUlysoU5YrHaat8tny+Vl2rYdef8oPfqlf7fITofsdmjHhAGUBJEEVQWLyEXqrEebEyeNKZwI+u8=,iv:SNptt0CPcSCTs6AAWLcC+U0/94oQapqmT1K8ZN/bIfM=,tag:2/1A+DwuWOIr0eoJmZTnwA==,type:str]
|
nick-env: ENC[AES256_GCM,data:lG7pqpLJ7OsFZhWCJcPnvDxkR4Ob78buazUeLWlRSAPYEv8KarymYduecJNWCZUjUlysoU5YrHaat8tny+Vl2rYdef8oPfqlf7fITofsdmjHhAGUBJEEVQWLyEXqrEebEyeNKZwI+u8=,iv:SNptt0CPcSCTs6AAWLcC+U0/94oQapqmT1K8ZN/bIfM=,tag:2/1A+DwuWOIr0eoJmZTnwA==,type:str]
|
||||||
project-env: ENC[AES256_GCM,data:WPn7jfCTsG67AIz4wawJeThK4kzMRaq6aPQ2W1Pcc2afNXtCWe0f9JuzH9ld6zgiO2wDu1SHQBT2Aagdt4vop/mBDq15YnpzEL30afiRtFjKJPu5BxMU9mEjerE=,iv:vVVmN6Tx1tNUODdb+6lz2L1cnLHwUwsETb3WMCKb2rY=,tag:twOhJmx/B+k4Zqb566KKCw==,type:str]
|
project-env: ENC[AES256_GCM,data:WPn7jfCTsG67AIz4wawJeThK4kzMRaq6aPQ2W1Pcc2afNXtCWe0f9JuzH9ld6zgiO2wDu1SHQBT2Aagdt4vop/mBDq15YnpzEL30afiRtFjKJPu5BxMU9mEjerE=,iv:vVVmN6Tx1tNUODdb+6lz2L1cnLHwUwsETb3WMCKb2rY=,tag:twOhJmx/B+k4Zqb566KKCw==,type:str]
|
||||||
|
|
@ -89,7 +89,7 @@ sops:
|
||||||
bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD
|
bXBOa1VSakoyaWxpODJEOU11QUZCaUEK8Ch9Ten3DdrPHF1DTH2qei85AlHUOaLD
|
||||||
aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig==
|
aNfzakake7ej+MxJYdKEU0bcWofNMKzIlZa2uM10KZSENDP8d8qlig==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2025-12-11T06:23:26Z"
|
lastmodified: "2025-12-11T06:59:23Z"
|
||||||
mac: ENC[AES256_GCM,data:VrgQfX3d83bU2pF5XCj/el8wKa/9rYTWEDy2ALFOc6dmMpV9zFNlnld4lJAyms9MfkXXxG2oLv5flT8NN+JAy0Wr8tEFyS2hUOJ8Q/l1GEwuf8pqdafzKuG4VaeViBC7oIcPM3kiQHEHiNg3GUKynEUl9/eiKzU7Y20qLvUQDcc=,iv:phTXlKjFryRwUnZARtsdoTrK5bfmI3NC7qPvFXezfpc=,tag:3I3/QvdREv+1ZLOhMOJV1A==,type:str]
|
mac: ENC[AES256_GCM,data:xGDaLeNV+YTJmX/v8WgRDPn683a8gfxSmE/Le+c9AB8VQfq+mKbqjz4DdtQ9TSdNz65BIjV1GCQJ1jsSxfqmJJaQJkVCgWCI+sKby/Qkpbjn+3xhMxWCbgI5kxasDGYHOXlcz5L4IXUg1pRIHQwuZjlA4q7H7fKUHim6UnUZzQ8=,iv:zywKqa6OWVb4TFhMAoHNasbkJdb9fLttGXCwGS+NzOE=,tag:7Vs8K3XeiFM6lNOTUDY67g==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.11.0
|
version: 3.11.0
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue