mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2025-01-08 06:28:50 +03:00
nixos.minetest-server: Add option for generating config file and ability to add extra command line flags
This adds two main features: 1. `services.minetest-server.config` is an options object that is automatically serialized into a minetest config file. 2. `services.minetest-server.extraArgs` provides an escape hatch to pass extra arguments.
This commit is contained in:
parent
a565059a34
commit
6cb0b6a4d6
@ -3,15 +3,52 @@
|
|||||||
with lib;
|
with lib;
|
||||||
|
|
||||||
let
|
let
|
||||||
|
CONTAINS_NEWLINE_RE = ".*\n.*";
|
||||||
|
# The following values are reserved as complete option values:
|
||||||
|
# { - start of a group.
|
||||||
|
# """ - start of a multi-line string.
|
||||||
|
RESERVED_VALUE_RE = "[[:space:]]*(\"\"\"|\\{)[[:space:]]*";
|
||||||
|
NEEDS_MULTILINE_RE = "${CONTAINS_NEWLINE_RE}|${RESERVED_VALUE_RE}";
|
||||||
|
|
||||||
|
# There is no way to encode """ on its own line in a Minetest config.
|
||||||
|
UNESCAPABLE_RE = ".*\n\"\"\"\n.*";
|
||||||
|
|
||||||
|
toConfMultiline = name: value:
|
||||||
|
assert lib.assertMsg
|
||||||
|
((builtins.match UNESCAPABLE_RE value) == null)
|
||||||
|
''""" can't be on its own line in a minetest config.'';
|
||||||
|
"${name} = \"\"\"\n${value}\n\"\"\"\n";
|
||||||
|
|
||||||
|
toConf = values:
|
||||||
|
lib.concatStrings
|
||||||
|
(lib.mapAttrsToList
|
||||||
|
(name: value: {
|
||||||
|
bool = "${name} = ${toString value}\n";
|
||||||
|
int = "${name} = ${toString value}\n";
|
||||||
|
null = "";
|
||||||
|
set = "${name} = {\n${toConf value}}\n";
|
||||||
|
string =
|
||||||
|
if (builtins.match NEEDS_MULTILINE_RE value) != null
|
||||||
|
then toConfMultiline name value
|
||||||
|
else "${name} = ${value}\n";
|
||||||
|
}.${builtins.typeOf value})
|
||||||
|
values);
|
||||||
|
|
||||||
cfg = config.services.minetest-server;
|
cfg = config.services.minetest-server;
|
||||||
flag = val: name: optionalString (val != null) "--${name} ${toString val} ";
|
flag = val: name: lib.optionals (val != null) ["--${name}" "${toString val}"];
|
||||||
|
|
||||||
flags = [
|
flags = [
|
||||||
(flag cfg.gameId "gameid")
|
"--server"
|
||||||
(flag cfg.world "world")
|
]
|
||||||
(flag cfg.configPath "config")
|
++ (
|
||||||
(flag cfg.logPath "logfile")
|
if cfg.configPath != null
|
||||||
(flag cfg.port "port")
|
then ["--config" cfg.configPath]
|
||||||
];
|
else ["--config" (builtins.toFile "minetest.conf" (toConf cfg.config))])
|
||||||
|
++ (flag cfg.gameId "gameid")
|
||||||
|
++ (flag cfg.world "world")
|
||||||
|
++ (flag cfg.logPath "logfile")
|
||||||
|
++ (flag cfg.port "port")
|
||||||
|
++ cfg.extraArgs;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options = {
|
||||||
@ -55,6 +92,16 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
config = mkOption {
|
||||||
|
type = types.attrsOf types.anything;
|
||||||
|
default = {};
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Settings to add to the minetest config file.
|
||||||
|
|
||||||
|
This option is ignored if `configPath` is set.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
logPath = mkOption {
|
logPath = mkOption {
|
||||||
type = types.nullOr types.path;
|
type = types.nullOr types.path;
|
||||||
default = null;
|
default = null;
|
||||||
@ -75,6 +122,14 @@ in
|
|||||||
If set to null, the default 30000 will be used.
|
If set to null, the default 30000 will be used.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extraArgs = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [];
|
||||||
|
description = lib.mdDoc ''
|
||||||
|
Additional command line flags to pass to the minetest executable.
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -100,7 +155,7 @@ in
|
|||||||
script = ''
|
script = ''
|
||||||
cd /var/lib/minetest
|
cd /var/lib/minetest
|
||||||
|
|
||||||
exec ${pkgs.minetest}/bin/minetest --server ${concatStrings flags}
|
exec ${pkgs.minetest}/bin/minetest ${lib.escapeShellArgs flags}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user