{ pkgs, lib, config, options, ... }: let inherit (lib.modules) mkIf ; inherit (lib.options) mkOption mkEnableOption literalExpression showOption ; t = lib.types; cfg = config.dynamicism; settingsFormat = pkgs.formats.yaml { }; assertionFor = submodName: unitName: let optName = [ "dynamicism" "for" submodName "systemd-services-updated" ]; in { assertion = config.systemd.units.${unitName}.enable or false; message = "'${showOption optName}' specified non-existentant unit '${unitName}'"; }; assertionsFor = submodName: submod: lib.map (assertionFor submodName) submod.systemd-services-updated; finalSettingsFor = { ... }@submod: lib.foldl (acc: optPath: let next = assert lib.isList optPath; lib.setAttrByPath optPath (lib.getAttrFromPath optPath config); in lib.recursiveUpdate acc next) { } submod.source-options; in { options.dynamicism = { for = mkOption { type = t.attrsOf (t.submoduleWith { modules = [ ./submodule.nix ]; shorthandOnlyDefinesConfig = false; }); default = { }; }; finalSettings = mkOption { type = t.attrsOf t.raw; internal = true; readOnly = true; description = '' Attrset of each `source-options` tree to their actual values. ''; }; }; config.assertions = lib.foldlAttrs (acc: name: submod: let next = lib.optionals submod.enable (assertionsFor name submod); in acc ++ next) [ ] cfg.for; config.dynamicism.for = { gotosocial = { source-options = [ "services.gotosocial.settings" ]; systemd-services-updated = [ "gotosocial.service" ]; }; }; config.dynamicism.finalSettings = lib.foldlAttrs (acc: name: { ... }@submod: let next = finalSettingsFor submod; in lib.recursiveUpdate acc next) { } config.dynamicism.for; }