let function = name: value: let result = if builtins.isAttrs value then { ... }: value else value; result' = builtins.trace "result ${name}=${builtins.typeOf result}" result; in assert builtins.isFunction result'; result; config = { user ? { }, home-manager ? { }, }@set: builtins.mapAttrs function { inherit user home-manager; }; in name: value: let result = if builtins.isFunction value then config { user = value; } else if builtins.any (attr: builtins.hasAttr attr value) [ "user" "home-manager" ] then config value else config { user = value; }; in result