mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-09 04:19:19 -08:00
feat(minecraft): permissions
This commit is contained in:
parent
e2a091e17a
commit
9184146fed
2 changed files with 44 additions and 10 deletions
|
|
@ -13,17 +13,31 @@ let
|
||||||
xuid = mkOption {
|
xuid = mkOption {
|
||||||
type = oneOf [ int str ];
|
type = oneOf [ int str ];
|
||||||
};
|
};
|
||||||
|
permission = mkOption {
|
||||||
|
type = enum [ "visitor" "member" "operator" ];
|
||||||
|
default = "member";
|
||||||
|
};
|
||||||
settings = mkOption {
|
settings = mkOption {
|
||||||
type = attrsOf str;
|
type = attrsOf str;
|
||||||
};
|
};
|
||||||
|
permissionSettings = mkOption {
|
||||||
|
type = attrsOf str;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
config = {
|
config = let
|
||||||
|
xuid = {
|
||||||
|
string = toString (hexToInt config.xuid);
|
||||||
|
int = toString config.xuid;
|
||||||
|
}.${typeOf config.xuid};
|
||||||
|
in {
|
||||||
settings = {
|
settings = {
|
||||||
name = mkOptionDefault config.name;
|
name = mkOptionDefault config.name;
|
||||||
xuid = mkOptionDefault {
|
xuid = mkOptionDefault xuid;
|
||||||
string = toString (hexToInt config.xuid);
|
# TODO: ignoresPlayerLimit = true/false
|
||||||
int = toString config.xuid;
|
};
|
||||||
}.${typeOf config.xuid};
|
permissionSettings = {
|
||||||
|
xuid = mkOptionDefault xuid;
|
||||||
|
permission = mkOptionDefault config.permission;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
@ -85,6 +99,7 @@ in { config, gensokyo-zone, lib, pkgs, ... }: let
|
||||||
inherit (lib.options) mkOption mkPackageOption;
|
inherit (lib.options) mkOption mkPackageOption;
|
||||||
inherit (lib.modules) mkIf mkMerge mkOptionDefault;
|
inherit (lib.modules) mkIf mkMerge mkOptionDefault;
|
||||||
inherit (lib.attrsets) filterAttrs mapAttrsToList;
|
inherit (lib.attrsets) filterAttrs mapAttrsToList;
|
||||||
|
inherit (lib.lists) optional;
|
||||||
inherit (lib.strings) concatStringsSep;
|
inherit (lib.strings) concatStringsSep;
|
||||||
inherit (lib.trivial) boolToString;
|
inherit (lib.trivial) boolToString;
|
||||||
inherit (lib.meta) getExe;
|
inherit (lib.meta) getExe;
|
||||||
|
|
@ -185,6 +200,10 @@ in {
|
||||||
type = nullOr path;
|
type = nullOr path;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
permissions = mkOption {
|
||||||
|
type = nullOr path;
|
||||||
|
};
|
||||||
|
|
||||||
packs = mkOption {
|
packs = mkOption {
|
||||||
type = attrsOf (submoduleWith {
|
type = attrsOf (submoduleWith {
|
||||||
modules = [ packModule ];
|
modules = [ packModule ];
|
||||||
|
|
@ -234,6 +253,15 @@ in {
|
||||||
if cfg.allowPlayers != null then allowListJson
|
if cfg.allowPlayers != null then allowListJson
|
||||||
else null
|
else null
|
||||||
);
|
);
|
||||||
|
permissions = let
|
||||||
|
permissions = mapAttrsToList (_: allow: allow.permissionSettings) cfg.allowPlayers;
|
||||||
|
permissionsJson = pkgs.writeText "minecraft-bedrock-server-permissions.json" (
|
||||||
|
toJSON permissions
|
||||||
|
);
|
||||||
|
in mkOptionDefault (
|
||||||
|
if cfg.allowPlayers != null then permissionsJson
|
||||||
|
else null
|
||||||
|
);
|
||||||
};
|
};
|
||||||
conf.users.users.${cfg.user} = {
|
conf.users.users.${cfg.user} = {
|
||||||
inherit (cfg) group;
|
inherit (cfg) group;
|
||||||
|
|
@ -251,7 +279,7 @@ in {
|
||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
BindReadOnlyPaths = let
|
BindReadOnlyPaths = let
|
||||||
packageResources = map (subpath: "${cfg.package}/var/lib/minecraft-bedrock/${subpath}:${cfg.dataDir}/${subpath}") [
|
packageResources = map (subpath: "${cfg.package}/var/lib/minecraft-bedrock/${subpath}:${cfg.dataDir}/${subpath}") ([
|
||||||
"definitions/attachables"
|
"definitions/attachables"
|
||||||
"definitions/biomes"
|
"definitions/biomes"
|
||||||
"definitions/feature_rules"
|
"definitions/feature_rules"
|
||||||
|
|
@ -264,8 +292,7 @@ in {
|
||||||
"config/default"
|
"config/default"
|
||||||
"bedrock_server_symbols.debug"
|
"bedrock_server_symbols.debug"
|
||||||
"env-vars"
|
"env-vars"
|
||||||
"permissions.json"
|
] ++ optional (cfg.permissions == null) "permissions.json");
|
||||||
];
|
|
||||||
mkWorldPacks = type: let
|
mkWorldPacks = type: let
|
||||||
enabledPacks = filterAttrs (_: pack: pack.enable && pack.packType == "${type}_packs") cfg.packs;
|
enabledPacks = filterAttrs (_: pack: pack.enable && pack.packType == "${type}_packs") cfg.packs;
|
||||||
jsonName = "world_${type}_packs.json";
|
jsonName = "world_${type}_packs.json";
|
||||||
|
|
@ -288,6 +315,7 @@ in {
|
||||||
in mkMerge [
|
in mkMerge [
|
||||||
packageResources
|
packageResources
|
||||||
(mkIf (cfg.allowList != null) [ "${cfg.allowList}:${cfg.dataDir}/allowlist.json" ])
|
(mkIf (cfg.allowList != null) [ "${cfg.allowList}:${cfg.dataDir}/allowlist.json" ])
|
||||||
|
(mkIf (cfg.permissions != null) [ "${cfg.permissions}:${cfg.dataDir}/permissions.json" ])
|
||||||
(mkIf (cfg.packs != { }) packsPaths)
|
(mkIf (cfg.packs != { }) packsPaths)
|
||||||
];
|
];
|
||||||
ExecStart = [
|
ExecStart = [
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,14 @@ in {
|
||||||
base = 2535420000000000;
|
base = 2535420000000000;
|
||||||
nums = 1760;
|
nums = 1760;
|
||||||
in {
|
in {
|
||||||
Kyxna.xuid = base + 44308966797;
|
Kyxna = {
|
||||||
arcnmx.xuid = base + 413399068799;
|
xuid = base + 44308966797;
|
||||||
|
permission = "operator";
|
||||||
|
};
|
||||||
|
arcnmx = {
|
||||||
|
xuid = base + 53399068799;
|
||||||
|
permission = "operator";
|
||||||
|
};
|
||||||
"ConnieHeart${toString (base / 1000000000000 + nums)}".xuid = base + 417602225;
|
"ConnieHeart${toString (base / 1000000000000 + nums)}".xuid = base + 417602225;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue