Change:
Testing I'm wondering if there's a way to add a schema so that users can get descriptions on the various fields they can use while creating a new profile. I also realize that the keys represent profile names, so that might make it harder to validate/provide descriptions for them. I guess the description for the keys would go under in that case, though there already is a long description for that field.
this would be nice, looked into it a bit but we're not sure how to set it up for such an object. We essentially want to enforce something like
would you be the right person to ask about schemas for settings?
You can use the property to specify the shape of all properties regardless of the key. An example is the setting: If there are constraints on the key, you can use :

Discussion:
import { EDITOR_FONT_DEFAULTS } from 'vs/editor/common/config/editorOptions'; import { DEFAULT_LETTER_SPACING, DEFAULT_LINE_HEIGHT, TerminalCursorStyle, DEFAULT_COMMANDS_TO_SKIP_SHELL, SUGGESTIONS_FONT_WEIGHT, MINIMUM_FONT_WEIGHT, MAXIMUM_FONT_WEIGHT, DEFAULT_LOCAL_ECHO_EXCLUDE } from 'vs/workbench/contrib/terminal/common/terminal'; import { isMacintosh, isWindows, Platform } from 'vs/base/common/platform'; <ins> import { IJSONSchema } from 'vs/base/common/jsonSchema'; const terminalProfileSchema: IJSONSchema = { type: 'object', required: ['path'], properties: { path: { description: localize('terminalProfile.path', 'A single path to a shell executable or an array of paths that will be used as fallbacks when one fails.'), type: ['string', 'array'], items: { type: 'string' } }, args: { description: localize('terminalProfile.args', 'An optional set of arguments to run the shell executable with.'), type: 'array', items: { type: 'string' } } } }; </ins> export const terminalConfiguration: IConfigurationNode = { id: 'terminal',

source: 'Git Bash' } }, <ins> additionalProperties: { 'anyOf': [ { type: 'object', required: ['source'], properties: { source: { description: localize('terminalProfile.windowsSource', 'A profile source that will auto detect the paths to the shell.'), enum: ['PowerShell', 'Git Bash'] } } }, terminalProfileSchema ] } </ins> }, 'terminal.integrated.profiles.osx': { markdownDescription: localize(

path: 'tmux' } }, <ins> additionalProperties: terminalProfileSchema </ins> }, 'terminal.integrated.profiles.linux': { markdownDescription: localize(

'tmux': { path: 'tmux' } <del> } </del> <ins> }, additionalProperties: terminalProfileSchema </ins> }, 'terminal.integrated.showQuickLaunchWslProfiles': { description: localize('terminal.integrated.showQuickLaunchWslProfiles', 'Controls whether or not WSL distros are shown in the quick launch dropdown'),

); } <del> for (const [profileName, value] of Object.entries(configProfiles || {})) { if (value === null) { detectedProfiles.delete(profileName); } detectedProfiles.set(profileName, value); } </del> <ins> applyConfigProfilesToMap(configProfiles, detectedProfiles); </ins> const resultProfiles: ITerminalProfile[] = await transformToTerminalProfiles(detectedProfiles.entries(), statProvider, logService, variableResolver, workspaceFolder);

} } <del> for (const [profileName, value] of Object.entries(configProfiles || {})) { </del> <ins> applyConfigProfilesToMap(configProfiles, detectedProfiles); return await transformToTerminalProfiles(detectedProfiles.entries(), statProvider, logService, variableResolver, workspaceFolder); } function applyConfigProfilesToMap(configProfiles: { [key: string]: ITerminalProfileObject } | undefined, profilesMap: Map<string, ITerminalProfileObject>) { if (!configProfiles) { return; } for (const [profileName, value] of Object.entries(configProfiles)) { </ins> if (value === null) { <del> detectedProfiles.delete(profileName); </del> <ins> profilesMap.delete(profileName); </ins> } else { <del> detectedProfiles.set(profileName, value); </del> <ins> profilesMap.set(profileName, value); </ins> } } <del> return await transformToTerminalProfiles(detectedProfiles.entries(), statProvider, logService, variableResolver, workspaceFolder); </del> } async function validateProfilePaths(label: string, potentialPaths: string[], statProvider: IStatProvider, args?: string[] | string, logService?: ILogService): Promise<ITerminalProfile | undefined> {