{ lib, config, ... }: with lib; let interface-module = { name, config, ... }: { options = { enable = mkEnableOption "The PoE for interface ${name}."; xml = mkOption { type = types.str; visible = false; readOnly = true; }; }; config.xml = '' ${name}${optionalString (!config.enable) ""} ''; }; in { options = { poe.interfaces = mkOption { type = types.attrsOf (types.submodule interface-module); default = { }; }; netconf.xmls.poe = mkOption { type = types.str; visible = false; readOnly = true; }; }; config.netconf.xmls.poe = '' ${ builtins.concatStringsSep "" (attrsets.mapAttrsToList (_: intf: intf.xml) config.poe.interfaces) } ''; }