diff --git a/modules/config.nix b/modules/config.nix index ac02515..a25cebe 100644 --- a/modules/config.nix +++ b/modules/config.nix @@ -5,8 +5,80 @@ }: with lib; let cfg = config.services.declarative-jellyfin; + 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 { - config = mkIf cfg.enable { - # TODO: implement - }; + 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} + '' + ); + }; + }; } diff --git a/modules/options/default.nix b/modules/options/default.nix index 1c89371..37d014b 100644 --- a/modules/options/default.nix +++ b/modules/options/default.nix @@ -17,83 +17,4 @@ in 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" - '' - ); - }; - } - ); } diff --git a/tests/networking.nix b/tests/xml.nix similarity index 71% rename from tests/networking.nix rename to tests/xml.nix index 79c737d..908219a 100644 --- a/tests/networking.nix +++ b/tests/xml.nix @@ -14,6 +14,27 @@ in { ../modules/default.nix ]; + # assertions = let + # toXml = (import ../lib {nixpkgs = pkgs;}).toXMLGeneric; + # in [ + # { + # assertion = + # toXml {tag = "test";} + # == '' + # + # + # + # ''; + # message = "Generated XML is incorrect!"; + # } + # { + # assertion = false; + # message = "lmao"; + # } + # ]; + + ass = false; + virtualisation.memorySize = 1024 * 2; services.declarative-jellyfin = { @@ -27,15 +48,12 @@ in { }; }; - # stfu i dont care about python linting - # skipLint = true; - testScript = '' import xml.etree.ElementTree as ET machine.wait_for_unit("multi-user.target"); - with subtest("Jellyfin URI"): + with subtest("Networking"): # stupid fucking hack because you cant open files in python for some reason xml = machine.succeed("cat /var/lib/jellyfin/config/network.xml") tree = ET.ElementTree(ET.fromstring(xml))