profileName: nixosConfig: homeConfig: { config, lib, ... }: let cfg = config._archetypes.profiles.${profileName}; enabledUsers = lib.filterAttrs (user: userCfg: userCfg.enable) cfg.home.users; homeConfigs = { home-manager.users = lib.mapAttrs (user: userCfg: homeConfig) enabledUsers; }; in { options._archetypes.profiles.${profileName} = { enable = lib.mkEnableOption "enable nixos profile ${profileName}"; home.users = lib.mkOption { type = lib.types.attrsOf (lib.types.submodule { options = { enable = lib.mkEnableOption "home-manager profile ${profileName} for user"; }; }); default = {}; description = "enable home-manager profile ${profileName} for user the specified user"; }; }; config = lib.mkIf cfg.enable (lib.mkMerge [ nixosConfig homeConfigs ]); }