declarative-jellyfin/modules/config.nix
Snorre Ettrup Altschul 33a30b1d2a
Some checks failed
Run tests / run_tests (push) Failing after 3s
fixed shit
2025-04-04 00:53:14 +02:00

90 lines
2.2 KiB
Nix

{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.services.declarative-jellyfin;
toXml' = (import ../lib {nixpkgs = pkgs;}).toXMLGeneric;
isStrList = x: builtins.all (x: builtins.isString x) x;
prepass = x:
if (builtins.isAttrs x)
then
if !(builtins.hasAttr "tag" x)
then
attrsets.mapAttrsToList
(tag: value: {
inherit tag;
content = prepass value;
})
x
else if (builtins.hasAttr "content" x)
then {
tag = x.tag;
content = prepass x.content;
}
else x
else if (builtins.isList x)
then
if (isStrList x)
then
(builtins.map
(content: {
tag = "string";
inherit content;
})
x)
else builtins.map prepass x
else x;
toXml = tag: x: (toXml' {
inherit tag;
attrib = {
"xmlns:xsi" = "http://www.w3.org/2001/XMLSchema-instance";
"xmlns:xsd" = "http://www.w3.org/2001/XMLSchema";
};
content = prepass x;
});
in {
imports = [
./options
];
config =
mkIf cfg.enable
{
system.activationScripts = {
link-config-xml =
lib.stringAfter ["var"]
(
let
commands =
builtins.concatStringsSep "\n"
(builtins.map
(x: "cp -s \"${pkgs.writeText x.file (toXml x.name x.content)}\" \"/var/lib/jellyfin/config/${x.file}\"")
[
{
name = "NetworkConfiguration";
file = "network.xml";
content = cfg.network;
}
# {
# name = "EncodingOptions";
# file = "encoding.xml";
# content = cfg.encoding;
# }
{
name = "ServerConfiguration";
file = "system.xml";
content = cfg.system;
}
]);
in ''
mkdir -p "/var/lib/jellyfin/config"
${commands}
''
);
};
};
}