declarative-jellyfin/modules/options/default.nix

104 lines
2.9 KiB
Nix

{ config
, pkgs
, lib
, ...
}:
let
cfg = config.services.declarative-jellyfin;
toXml' = (import ../../lib { nixpkgs = pkgs; }).toXMLGeneric;
in
with lib; {
imports = [
./system.nix
./encoding.nix
./network.nix
./branding.nix
];
options.services.declarative-jellyfin = {
enable = mkEnableOption "Jellyfin Service";
};
config =
mkIf cfg.enable
(
let
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
{
system.activationScripts = {
link-network-xml =
lib.stringAfter [ "var" ]
(
let
storeFile = pkgs.writeText "network.xml" (toXml "NetworkConfiguration" cfg.network);
in
''
mkdir -p "/var/lib/jellyfin/config"
cp -s "${storeFile}" "/var/lib/jellyfin/config/network.xml"
''
);
link-encoding-xml =
lib.stringAfter [ "var" ]
(
let
storeFile = pkgs.writeText "encoding.xml" (toXml "EncodingOptions" cfg.network);
in
''
mkdir -p "/var/lib/jellyfin/config"
cp -s "${storeFile}" "/var/lib/jellyfin/config/encoding.xml"
''
);
link-system-xml =
lib.stringAfter [ "var" ]
(
let
storeFile = pkgs.writeText "system.xml" (toXml "ServerConfiguration" cfg.network);
in
''
mkdir -p "/var/lib/jellyfin/config"
cp -s "${storeFile}" "/var/lib/jellyfin/config/system.xml"
''
);
};
}
);
}