{ config, lib, pkgs, options, ... }: # proot.dconf.rules # proot.dconf.profiles..rulesToApply # proot.dconf.profiles..extraRules let cfg = config.proot.dconf; profileOpts = lib.types.submodule { options = { rulesToApply = lib.mkOption { type = lib.types.listOf lib.types.str; default = lib.attrNames cfg.rules; description = lib.mdDoc "A list of rules keys to apply for profile"; }; extraRules = lib.mkOption { type = lib.types.attrs; default = {}; description = lib.mdDoc "An attrset of additional dconf rules to apply ontop of selected"; }; }; }; mapper = _: value: { databases = lib.singleton { settings = lib.filterAttrs (key: _: lib.elem key value.rulesToApply) cfg.rules // value.extraRules; }; }; in { options.proot.dconf = { rules = lib.mkOption { type = lib.types.attrs; default = {}; description = lib.mdDoc "An attrset of dconf rules to pull from"; }; profiles = lib.mkOption { type = lib.types.attrsOf profileOpts; default = {}; description = lib.mdDoc "An attret of profiles to create, with pulled rules"; }; }; config = { programs.dconf.profiles = lib.mapAttrs mapper cfg.profiles; }; }