{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "DeserializedUserConfig",
"description": "Per-user nextest configuration.\n\nStores personal preferences such as UI defaults and recording behavior.\nThis is distinct from the repository config (`.config/nextest.toml`),\nwhich controls test execution.\n\nSee [_User configuration reference_](https://nexte.st/docs/user-config/reference)\nfor details on each setting.",
"type": "object",
"properties": {
"experimental": {
"description": "Toggles for experimental, non-stable features.\n\n```toml\n[experimental]\nrecord = true\n```",
"$ref": "#/$defs/ExperimentalConfig"
},
"overrides": {
"description": "Platform-specific overrides applied on top of the base configuration.\n\nEach entry specifies a `platform` filter and any number of settings to\nsubstitute when that filter matches. For each setting, the first\nmatching override wins; the base configuration is used if no override\nmatches.",
"type": "array",
"items": {
"$ref": "#/$defs/DeserializedOverride"
}
},
"record": {
"description": "Retention settings for the record-replay-rerun feature.",
"$ref": "#/$defs/DeserializedRecordConfig"
},
"ui": {
"description": "Display, progress, and pager settings.",
"$ref": "#/$defs/DeserializedUiConfig"
}
},
"additionalProperties": false,
"x-tombi-toml-version": "v1.1.0",
"$defs": {
"CommandNameAndArgs": {
"title": "CommandNameAndArgs",
"oneOf": [
{
"type": "string",
"minLength": 1,
"pattern": "\\S"
},
{
"type": "array",
"items": {
"type": "string"
},
"minItems": 1
},
{
"type": "object",
"properties": {
"command": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1
},
"env": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"additionalProperties": false,
"required": [
"command"
]
}
]
},
"DeserializedOverride": {
"description": "A single platform-specific override entry.",
"type": "object",
"properties": {
"platform": {
"description": "Target-spec expression selecting which platforms this override applies\nto.\n\nAccepts a target triple (e.g. `x86_64-unknown-linux-gnu`) or a `cfg()`\nexpression (e.g. `cfg(windows)`, `cfg(target_os = \"macos\")`). Matched\nagainst the platform nextest was built for.",
"type": "string"
},
"record": {
"description": "Record retention settings to substitute on matching platforms.",
"$ref": "#/$defs/DeserializedRecordOverrideData"
},
"ui": {
"description": "UI settings to substitute on matching platforms.",
"$ref": "#/$defs/DeserializedUiOverrideData"
}
},
"additionalProperties": false,
"required": [
"platform"
]
},
"DeserializedRecordConfig": {
"description": "Retention policy for recorded test runs.\n\nRecording only happens when the `record` experimental feature is enabled\n_and_ `enabled` here is true. The least-recently-used runs are evicted to\nkeep within `max-records`, `max-total-size`, and `max-age`.",
"type": "object",
"properties": {
"enabled": {
"description": "Whether to record test runs.\n\nSet to false to temporarily disable recording without removing the rest\nof the configuration. Has no effect unless the `record` experimental\nfeature is also enabled.",
"type": [
"boolean",
"null"
],
"default": null
},
"max-age": {
"description": "Maximum idle time before a recorded run is evicted (e.g. `\"30d\"`).",
"type": [
"string",
"null"
],
"default": null
},
"max-output-size": {
"description": "Maximum size of a single captured stdout or stderr stream before it is\ntruncated (e.g. `\"10MB\"`).",
"type": [
"string",
"null"
],
"default": null
},
"max-records": {
"description": "Maximum number of recorded runs to retain.",
"type": [
"integer",
"null"
],
"format": "uint",
"default": null,
"minimum": 0
},
"max-total-size": {
"description": "Maximum combined size of all recorded runs (e.g. `\"1GB\"`).",
"type": [
"string",
"null"
],
"default": null
}
},
"additionalProperties": false
},
"DeserializedRecordOverrideData": {
"description": "Per-platform substitutions for `[record]` settings.\n\nEach field has the same meaning as in the `[record]` table. Only the\nfields actually set here are substituted on matching platforms.",
"type": "object",
"properties": {
"enabled": {
"description": "Whether to record test runs.",
"type": [
"boolean",
"null"
],
"default": null
},
"max-age": {
"description": "Maximum idle time before a recorded run is evicted (e.g. `\"30d\"`).",
"type": [
"string",
"null"
],
"default": null
},
"max-output-size": {
"description": "Maximum size of a single captured stdout or stderr stream before it is\ntruncated (e.g. `\"10MB\"`).",
"type": [
"string",
"null"
],
"default": null
},
"max-records": {
"description": "Maximum number of recorded runs to retain.",
"type": [
"integer",
"null"
],
"format": "uint",
"default": null,
"minimum": 0
},
"max-total-size": {
"description": "Maximum combined size of all recorded runs (e.g. `\"1GB\"`).",
"type": [
"string",
"null"
],
"default": null
}
},
"additionalProperties": false
},
"DeserializedStreampagerConfig": {
"description": "Settings for nextest's built-in pager (active when `pager = \":builtin\"`).",
"type": "object",
"properties": {
"interface": {
"description": "How the pager uses the alternate screen and when it exits.",
"anyOf": [
{
"$ref": "#/$defs/StreampagerInterface"
},
{
"type": "null"
}
]
},
"show-ruler": {
"description": "Shows a ruler at the bottom of the pager.",
"type": [
"boolean",
"null"
]
},
"wrapping": {
"description": "How long lines are wrapped.",
"anyOf": [
{
"$ref": "#/$defs/StreampagerWrapping"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"DeserializedUiConfig": {
"description": "Display, progress, and pager settings.",
"type": "object",
"properties": {
"input-handler": {
"description": "Enables the interactive keyboard input handler (e.g. `t` to dump test\nstatus, `Enter` to print a summary line).",
"type": [
"boolean",
"null"
]
},
"max-progress-running": {
"description": "Maximum number of running tests to list in the progress bar.\n\nAccepts a non-negative integer, or `\"infinite\"` for no limit. When the\nnumber of running tests exceeds this, the remainder is collapsed into a\nsummary line.",
"anyOf": [
{
"$ref": "#/$defs/MaxProgressRunning"
},
{
"type": "null"
}
]
},
"output-indent": {
"description": "Indents captured test output for visual clarity.",
"type": [
"boolean",
"null"
]
},
"pager": {
"description": "Pager command to use for output that benefits from scrolling. Use\n`\":builtin\"` to select nextest's built-in pager.",
"anyOf": [
{
"$ref": "#/$defs/PagerSetting"
},
{
"type": "null"
}
]
},
"paginate": {
"description": "When to send output through the pager.",
"anyOf": [
{
"$ref": "#/$defs/PaginateSetting"
},
{
"type": "null"
}
]
},
"show-progress": {
"description": "Style of progress display shown during test runs.",
"anyOf": [
{
"$ref": "#/$defs/UiShowProgress"
},
{
"type": "null"
}
]
},
"streampager": {
"description": "Settings for the built-in pager (active when `pager = \":builtin\"`).",
"$ref": "#/$defs/DeserializedStreampagerConfig"
}
},
"additionalProperties": false
},
"DeserializedUiOverrideData": {
"description": "Per-platform substitutions for `[ui]` settings.\n\nEach field has the same meaning as in the `[ui]` table. Only the fields\nactually set here are substituted on matching platforms.",
"type": "object",
"properties": {
"input-handler": {
"description": "Enables the interactive keyboard input handler.",
"type": [
"boolean",
"null"
]
},
"max-progress-running": {
"description": "Maximum number of running tests to list in the progress bar.",
"anyOf": [
{
"$ref": "#/$defs/MaxProgressRunning"
},
{
"type": "null"
}
]
},
"output-indent": {
"description": "Indents captured test output for visual clarity.",
"type": [
"boolean",
"null"
]
},
"pager": {
"description": "Pager command to use for output that benefits from scrolling.",
"anyOf": [
{
"$ref": "#/$defs/PagerSetting"
},
{
"type": "null"
}
]
},
"paginate": {
"description": "When to send output through the pager.",
"anyOf": [
{
"$ref": "#/$defs/PaginateSetting"
},
{
"type": "null"
}
]
},
"show-progress": {
"description": "Style of progress display shown during test runs.",
"anyOf": [
{
"$ref": "#/$defs/UiShowProgress"
},
{
"type": "null"
}
]
},
"streampager": {
"description": "Settings for the built-in pager (active when `pager = \":builtin\"`).",
"$ref": "#/$defs/DeserializedStreampagerConfig"
}
},
"additionalProperties": false
},
"ExperimentalConfig": {
"description": "User-level experimental features.\n\nConfigured in the `[experimental]` table of the user config file:\n\n```toml\n[experimental]\nrecord = true\n```\n\nUnknown features in this table produce a warning rather than an error, so\nolder nextest binaries can load configs written for newer ones.",
"type": "object",
"properties": {
"record": {
"description": "Enables the record-replay-rerun feature, which stores test run results\non disk so they can be replayed or selectively rerun later.",
"type": "boolean",
"default": false
}
}
},
"MaxProgressRunning": {
"title": "MaxProgressRunning",
"description": "Maximum number of running tests to display: a non-negative integer, or \"infinite\" for no limit.",
"oneOf": [
{
"type": "integer",
"minimum": 0
},
{
"type": "string",
"enum": [
"infinite"
]
}
]
},
"PagerSetting": {
"title": "PagerSetting",
"anyOf": [
{
"type": "string",
"const": ":builtin"
},
{
"$ref": "#/$defs/CommandNameAndArgs"
}
]
},
"PaginateSetting": {
"description": "When to send output through the pager.",
"oneOf": [
{
"description": "Pages output from supported commands when stdout is a terminal.",
"type": "string",
"const": "auto"
},
{
"description": "Disables pagination entirely.",
"type": "string",
"const": "never"
}
]
},
"StreampagerInterface": {
"description": "How the built-in pager uses the alternate screen and when it exits.",
"oneOf": [
{
"description": "Exits immediately if the output fits on one page; otherwise switches\nto full-screen and clears on exit.",
"type": "string",
"const": "quit-if-one-page"
},
{
"description": "Always uses full-screen mode and clears the screen on exit.",
"type": "string",
"const": "full-screen-clear-output"
},
{
"description": "Waits briefly before entering full-screen mode; clears on exit only if\nit switched to full-screen.",
"type": "string",
"const": "quit-quickly-or-clear-output"
}
]
},
"StreampagerWrapping": {
"description": "How long lines are wrapped in the built-in pager.",
"oneOf": [
{
"description": "Disables wrapping; long lines extend off-screen and can be scrolled\nhorizontally.",
"type": "string",
"const": "none"
},
{
"description": "Wraps at word boundaries.",
"type": "string",
"const": "word"
},
{
"description": "Wraps at any character (grapheme) boundary.",
"type": "string",
"const": "anywhere"
}
]
},
"UiShowProgress": {
"description": "Style of progress display shown during test runs.",
"oneOf": [
{
"description": "Picks a display based on terminal capabilities: a progress bar in\ninteractive terminals, a counter otherwise.",
"type": "string",
"const": "auto"
},
{
"description": "Disables progress display entirely.",
"type": "string",
"const": "none"
},
{
"description": "Shows a progress bar listing the currently running tests.",
"type": "string",
"const": "bar"
},
{
"description": "Shows a single-line counter (e.g. `(1/10)`).",
"type": "string",
"const": "counter"
},
{
"description": "Like `bar` in interactive terminals, but additionally hides successful\ntest output (sets `status-level` to `slow` and `final-status-level` to\n`none`). Falls back to `auto` behavior in non-interactive contexts\n(e.g. piped output, CI).",
"type": "string",
"const": "only"
}
]
}
}
}