forked from mirrors/nixpkgs
treewide: use formats.hocon
This commit is contained in:
parent
b6cdfec16c
commit
39a779e269
|
@ -5,12 +5,7 @@ with lib;
|
|||
let
|
||||
cfg = config.services.jibri;
|
||||
|
||||
# Copied from the jitsi-videobridge.nix file.
|
||||
toHOCON = x:
|
||||
if isAttrs x && x ? __hocon_envvar then ("\${" + x.__hocon_envvar + "}")
|
||||
else if isAttrs x then "{${ concatStringsSep "," (mapAttrsToList (k: v: ''"${k}":${toHOCON v}'') x) }}"
|
||||
else if isList x then "[${ concatMapStringsSep "," toHOCON x }]"
|
||||
else builtins.toJSON x;
|
||||
format = pkgs.formats.hocon { };
|
||||
|
||||
# We're passing passwords in environment variables that have names generated
|
||||
# from an attribute name, which may not be a valid bash identifier.
|
||||
|
@ -38,13 +33,13 @@ let
|
|||
control-login = {
|
||||
domain = env.control.login.domain;
|
||||
username = env.control.login.username;
|
||||
password.__hocon_envvar = toVarName "${name}_control";
|
||||
password = format.lib.mkSubstitution (toVarName "${name}_control");
|
||||
};
|
||||
|
||||
call-login = {
|
||||
domain = env.call.login.domain;
|
||||
username = env.call.login.username;
|
||||
password.__hocon_envvar = toVarName "${name}_call";
|
||||
password = format.lib.mkSubstitution (toVarName "${name}_call");
|
||||
};
|
||||
|
||||
strip-from-room-domain = env.stripFromRoomDomain;
|
||||
|
@ -85,13 +80,13 @@ let
|
|||
};
|
||||
# Allow overriding leaves of the default config despite types.attrs not doing any merging.
|
||||
jibriConfig = recursiveUpdate defaultJibriConfig cfg.config;
|
||||
configFile = pkgs.writeText "jibri.conf" (toHOCON { jibri = jibriConfig; });
|
||||
configFile = format.generate "jibri.conf" { jibri = jibriConfig; };
|
||||
in
|
||||
{
|
||||
options.services.jibri = with types; {
|
||||
enable = mkEnableOption (lib.mdDoc "Jitsi BRoadcasting Infrastructure. Currently Jibri must be run on a host that is also running {option}`services.jitsi-meet.enable`, so for most use cases it will be simpler to run {option}`services.jitsi-meet.jibri.enable`");
|
||||
config = mkOption {
|
||||
type = attrs;
|
||||
type = format.type;
|
||||
default = { };
|
||||
description = lib.mdDoc ''
|
||||
Jibri configuration.
|
||||
|
|
|
@ -5,14 +5,9 @@ with lib;
|
|||
let
|
||||
cfg = config.services.jicofo;
|
||||
|
||||
# HOCON is a JSON superset that some jitsi-meet components use for configuration
|
||||
toHOCON = x: if isAttrs x && x ? __hocon_envvar then ("\${" + x.__hocon_envvar + "}")
|
||||
else if isAttrs x && x ? __hocon_unquoted_string then x.__hocon_unquoted_string
|
||||
else if isAttrs x then "{${ concatStringsSep "," (mapAttrsToList (k: v: ''"${k}":${toHOCON v}'') x) }}"
|
||||
else if isList x then "[${ concatMapStringsSep "," toHOCON x }]"
|
||||
else builtins.toJSON x;
|
||||
format = pkgs.formats.hocon { };
|
||||
|
||||
configFile = pkgs.writeText "jicofo.conf" (toHOCON cfg.config);
|
||||
configFile = format.generate "jicofo.conf" cfg.config;
|
||||
in
|
||||
{
|
||||
options.services.jicofo = with types; {
|
||||
|
@ -77,7 +72,7 @@ in
|
|||
};
|
||||
|
||||
config = mkOption {
|
||||
type = (pkgs.formats.json {}).type;
|
||||
type = format.type;
|
||||
default = { };
|
||||
example = literalExpression ''
|
||||
{
|
||||
|
@ -99,7 +94,7 @@ in
|
|||
hostname = cfg.xmppHost;
|
||||
username = cfg.userName;
|
||||
domain = cfg.userDomain;
|
||||
password = { __hocon_envvar = "JICOFO_AUTH_PASS"; };
|
||||
password = format.lib.mkSubstitution "JICOFO_AUTH_PASS";
|
||||
xmpp-domain = if cfg.xmppDomain == null then cfg.xmppHost else cfg.xmppDomain;
|
||||
};
|
||||
service = client;
|
||||
|
|
|
@ -6,16 +6,7 @@ let
|
|||
cfg = config.services.jitsi-videobridge;
|
||||
attrsToArgs = a: concatStringsSep " " (mapAttrsToList (k: v: "${k}=${toString v}") a);
|
||||
|
||||
# HOCON is a JSON superset that videobridge2 uses for configuration.
|
||||
# It can substitute environment variables which we use for passwords here.
|
||||
# https://github.com/lightbend/config/blob/master/README.md
|
||||
#
|
||||
# Substitution for environment variable FOO is represented as attribute set
|
||||
# { __hocon_envvar = "FOO"; }
|
||||
toHOCON = x: if isAttrs x && x ? __hocon_envvar then ("\${" + x.__hocon_envvar + "}")
|
||||
else if isAttrs x then "{${ concatStringsSep "," (mapAttrsToList (k: v: ''"${k}":${toHOCON v}'') x) }}"
|
||||
else if isList x then "[${ concatMapStringsSep "," toHOCON x }]"
|
||||
else builtins.toJSON x;
|
||||
format = pkgs.formats.hocon { };
|
||||
|
||||
# We're passing passwords in environment variables that have names generated
|
||||
# from an attribute name, which may not be a valid bash identifier.
|
||||
|
@ -38,7 +29,7 @@ let
|
|||
hostname = xmppConfig.hostName;
|
||||
domain = xmppConfig.domain;
|
||||
username = xmppConfig.userName;
|
||||
password = { __hocon_envvar = toVarName name; };
|
||||
password = format.lib.mkSubstitution (toVarName name);
|
||||
muc_jids = xmppConfig.mucJids;
|
||||
muc_nickname = xmppConfig.mucNickname;
|
||||
disable_certificate_verification = xmppConfig.disableCertificateVerification;
|
||||
|
@ -221,7 +212,7 @@ in
|
|||
"-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION" = "/etc/jitsi";
|
||||
"-Dnet.java.sip.communicator.SC_HOME_DIR_NAME" = "videobridge";
|
||||
"-Djava.util.logging.config.file" = "/etc/jitsi/videobridge/logging.properties";
|
||||
"-Dconfig.file" = pkgs.writeText "jvb.conf" (toHOCON jvbConfig);
|
||||
"-Dconfig.file" = format.generate "jvb.conf" jvbConfig;
|
||||
# Mitigate CVE-2021-44228
|
||||
"-Dlog4j2.formatMsgNoLookups" = true;
|
||||
} // (mapAttrs' (k: v: nameValuePair "-D${k}" v) cfg.extraProperties);
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
let
|
||||
cfg = config.services.suwayomi-server;
|
||||
inherit (lib) mkOption mdDoc mkEnableOption mkIf types;
|
||||
|
||||
format = pkgs.formats.hocon { };
|
||||
in
|
||||
{
|
||||
options = {
|
||||
|
@ -48,19 +50,7 @@ in
|
|||
|
||||
settings = mkOption {
|
||||
type = types.submodule {
|
||||
freeformType =
|
||||
let
|
||||
recursiveAttrsType = with types; attrsOf (nullOr (oneOf [
|
||||
str
|
||||
path
|
||||
int
|
||||
float
|
||||
bool
|
||||
(listOf str)
|
||||
(recursiveAttrsType // { description = "instances of this type recursively"; })
|
||||
]));
|
||||
in
|
||||
recursiveAttrsType;
|
||||
freeformType = format.type;
|
||||
options = {
|
||||
server = {
|
||||
ip = mkOption {
|
||||
|
@ -180,38 +170,7 @@ in
|
|||
|
||||
systemd.services.suwayomi-server =
|
||||
let
|
||||
flattenConfig = prefix: config:
|
||||
lib.foldl'
|
||||
lib.mergeAttrs
|
||||
{ }
|
||||
(lib.attrValues
|
||||
(lib.mapAttrs
|
||||
(k: v:
|
||||
if !(lib.isAttrs v)
|
||||
then { "${prefix}${k}" = v; }
|
||||
else flattenConfig "${prefix}${k}." v
|
||||
)
|
||||
config
|
||||
)
|
||||
);
|
||||
|
||||
# HOCON is a JSON superset that suwayomi-server use for configuration
|
||||
toHOCON = attr:
|
||||
let
|
||||
attrType = builtins.typeOf attr;
|
||||
in
|
||||
if builtins.elem attrType [ "string" "path" "int" "float" ]
|
||||
then ''"${toString attr}"''
|
||||
else if attrType == "bool"
|
||||
then lib.boolToString attr
|
||||
else if attrType == "list"
|
||||
then "[\n${lib.concatMapStringsSep ",\n" toHOCON attr}\n]"
|
||||
else # attrs, lambda, null
|
||||
throw ''
|
||||
[suwayomi-server]: invalid config value type '${attrType}'.
|
||||
'';
|
||||
|
||||
configFile = pkgs.writeText "server.conf" (lib.pipe cfg.settings [
|
||||
configFile = format.generate "server.conf" (lib.pipe cfg.settings [
|
||||
(settings: lib.recursiveUpdate settings {
|
||||
server.basicAuthPasswordFile = null;
|
||||
server.basicAuthPassword =
|
||||
|
@ -219,12 +178,8 @@ in
|
|||
then "$TACHIDESK_SERVER_BASIC_AUTH_PASSWORD"
|
||||
else null;
|
||||
})
|
||||
(flattenConfig "")
|
||||
(lib.filterAttrs (_: x: x != null))
|
||||
(lib.mapAttrsToList (name: value: ''${name} = ${toHOCON value}''))
|
||||
lib.concatLines
|
||||
(lib.filterAttrsRecursive (_: x: x != null))
|
||||
]);
|
||||
|
||||
in
|
||||
{
|
||||
description = "A free and open source manga reader server that runs extensions built for Tachiyomi.";
|
||||
|
|
Loading…
Reference in a new issue