{ "$schema": "http://json-schema.org/draft-07/schema", "title": "Jujutsu config", "type": "object", "description": "User configuration for Jujutsu VCS. See https://github.com/martinvonz/jj/blob/main/docs/config.md for details", "properties": { "user": { "type": "object", "description": "Settings about the user", "properties": { "name": { "type": "string", "description": "Full name of the user, used in commits" }, "email": { "type": "string", "description": "User's email address, used in commits", "format": "email" } } }, "operation": { "type": "object", "description": "Metadata to be attached to jj operations (shown in jj op log)", "properties": { "hostname": { "type": "string", "format": "hostname" }, "username": { "type": "string" } } }, "ui": { "type": "object", "description": "UI settings", "properties": { "allow-init-native": { "type": "boolean", "description": "Whether to allow initializing a repo with the native backend", "default": false }, "default-command": { "type": "string", "description": "Default command to run when no explicit command is given", "default": "log", "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] }, "default-description": { "type": "string", "description": "Default description to use when describing changes with an empty description", "default": "" }, "color": { "description": "Whether to colorize command output", "enum": [ "always", "never", "auto" ], "default": "auto" }, "paginate": { "type": "string", "description": "Whether or not to use a pager", "enum": [ "never", "auto" ], "default": "auto" }, "pager": { "type": "string", "description": "Pager to use for displaying command output", "default": "less -FRX" }, "diff": { "type": "object", "description": "Options for how diffs are displayed", "properties": { "format": { "description": "The diff format to use", "enum": [ "color-words", "git", "summary" ], "default": "color-words" }, "tool": { "type": "string", "description": "External tool for generating diffs" } } }, "diff-instructions": { "type": "boolean", "description": "Whether to generate the JJ-INSTRUCTIONS file as part of editing a diff", "default": true }, "graph": { "type": "object", "description": "Options for rendering revision graphs from jj log etc", "properties": { "style": { "description": "Style of connectors/markings used to render the graph. See https://github.com/martinvonz/jj/blob/main/docs/config.md#graph-style", "enum": [ "curved", "square", "ascii", "ascii-large" ], "default": "curved" } } }, "log-word-wrap": { "type": "boolean", "description": "Whether to wrap log template output", "default": false }, "log-synthetic-elided-nodes": { "type": "boolean", "description": "Whether to render elided parts of the graph as synthetic nodes.", "default": false }, "editor": { "type": "string", "description": "Editor to use for commands that involve editing text" }, "diff-editor": { "type": "string", "description": "Editor tool to use for editing diffs", "default": "meld" }, "merge-editor": { "type": "string", "description": "Tool to use for resolving three-way merges. Behavior for a given tool name can be configured in merge-tools.TOOL tables" } } }, "colors": { "type": "object", "description": "Mapping from jj formatter labels to colors", "definitions": { "colors": { "enum": [ "default", "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white", "bright black", "bright red", "bright green", "bright yellow", "bright blue", "bright magenta", "bright cyan", "bright white" ] }, "basicFormatterLabels": { "enum": [ "description", "change_id", "commit_id", "author", "committer", "working_copies", "current_working_copy", "branches", "tags", "git_refs", "is_git_head", "divergent", "hidden", "conflict", "root" ] } }, "propertyNames": { "oneOf": [ { "$ref": "#/properties/colors/definitions/basicFormatterLabels" }, { "type": "string" } ] }, "additionalProperties": { "description": "A color profile for the given formatter label. Either a bare color name used as the foreground color or a table describing color and formatting", "oneOf": [ { "$ref": "#/properties/colors/definitions/colors" }, { "type": "object", "properties": { "fg": { "$ref": "#/properties/colors/definitions/colors" }, "bg": { "$ref": "#/properties/colors/definitions/colors" }, "bold": { "type": "boolean" }, "underline": { "type": "boolean" } } } ] } }, "git": { "type": "object", "description": "Settings for git behavior (when using git backend)", "properties": { "auto-local-branch": { "type": "boolean", "description": "Whether jj creates a local branch with the same name when it imports a remote-tracking branch from git. See https://github.com/martinvonz/jj/blob/main/docs/config.md#automatic-local-branch-creation", "default": false }, "abandon-unreachable-commits": { "type": "boolean", "description": "Whether jj should abandon commits that became unreachable in Git.", "default": true }, "push-branch-prefix": { "type": "string", "description": "Prefix used when pushing a change ID as a new branch", "default": "push-" }, "fetch": { "description": "The remote(s) from which commits are fetched", "default": "origin", "oneOf": [ { "type": "string" }, { "type": "array", "items": { "type": "string" } } ] }, "push": { "type": "string", "description": "The remote to which commits are pushed", "default": "origin" } } }, "merge-tools": { "type": "object", "description": "Tables of custom options to pass to the given merge tool (selected in ui.merge-editor)", "additionalProperties": { "type": "object", "properties": { "program": { "type": "string" }, "diff-args": { "type": "array", "items": { "type": "string" } }, "edit-args": { "type": "array", "items": { "type": "string" } }, "merge-args": { "type": "array", "items": { "type": "string" } }, "merge-tool-edits-conflict-markers": { "type": "boolean", "description": "Whether to populate the output file with conflict markers before starting the merge tool. See https://github.com/martinvonz/jj/blob/main/docs/config.md#editing-conflict-markers-with-a-tool-or-a-text-editor", "default": false } } } }, "revsets": { "type": "object", "description": "Revset expressions used by various commands", "properties": { "log": { "type": "string", "description": "Default set of revisions to show when no explicit revset is given for jj log and similar commands", "default": "@ | ancestors(immutable_heads().., 2) | trunk()" }, "short-prefixes": { "type": "string", "description": "Revisions to give shorter change and commit IDs to", "default": "<revsets.log>" } }, "additionalProperties": { "type": "string" } }, "revset-aliases": { "type": "object", "description": "Custom symbols/function aliases that can used in revset expressions", "properties": { "immutable_heads()": { "type": "string", "description": "Revisions to consider immutable. Ancestors of these are also considered immutable. The root commit is always considered immutable.", "default": "trunk() | tags()" } }, "additionalProperties": { "type": "string" } }, "template-aliases": { "type": "object", "description": "Custom symbols/function aliases that can used in templates", "additionalProperties": { "type": "string" } }, "aliases": { "type": "object", "description": "Custom subcommand aliases to be supported by the jj command", "additionalProperties": { "type": "array", "items": { "type": "string" } } }, "snapshot": { "type": "object", "description": "Parameters governing automatic capture of files into the working copy commit", "properties": { "max-new-file-size": { "type": [ "integer", "string" ], "description": "New files with a size in bytes above this threshold are not snapshotted, unless the threshold is 0", "default": "1MiB" } } }, "signing": { "type": "object", "description": "Settings for verifying and creating cryptographic commit signatures", "properties": { "backend": { "type": "string", "enum": ["gpg", "ssh"], "description": "The backend to use for signing commits" }, "key": { "type": "string", "description": "The key the configured signing backend will use to to sign commits. Overridden by `jj sign` parameter or by the global `--sign-with` option" }, "sign-all": { "type": "boolean", "description": "Whether to sign all commits by default. Overridden by global `--no-sign` option", "default": false }, "backends": { "type": "object", "description": "Tables of options to pass to specific signing backends", "properties": { "gpg": { "type": "object", "properties": { "program": { "type": "string", "description": "Path to the gpg program to be called", "default": "gpg" }, "allow-expired-keys": { "type": "boolean", "description": "Whether to consider signatures generated with an expired key as invalid", "default": true } } }, "ssh": { "type": "object", "properties": { "program": { "type": "string", "description": "Path to the ssh-keygen program to be called", "default": "ssh-keygen" }, "allowed-signers": { "type": "boolean", "description": "Path to an allowed signers file used for signature verification", "default": true } } } }, "additionalProperties": true } } } }}
{
"$schema": "http://json-schema.org/draft-07/schema",
"title": "Jujutsu config",
"type": "object",
"description": "User configuration for Jujutsu VCS. See https://github.com/martinvonz/jj/blob/main/docs/config.md for details",
"properties": {
"user": {
"type": "object",
"description": "Settings about the user",
"properties": {
"name": {
"type": "string",
"description": "Full name of the user, used in commits"
},
"email": {
"type": "string",
"description": "User's email address, used in commits",
"format": "email"
}
}
},
"operation": {
"type": "object",
"description": "Metadata to be attached to jj operations (shown in jj op log)",
"properties": {
"hostname": {
"type": "string",
"format": "hostname"
},
"username": {
"type": "string"
}
}
},
"ui": {
"type": "object",
"description": "UI settings",
"properties": {
"allow-init-native": {
"type": "boolean",
"description": "Whether to allow initializing a repo with the native backend",
"default": false
},
"default-command": {
"type": "string",
"description": "Default command to run when no explicit command is given",
"default": "log",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"default-description": {
"type": "string",
"description": "Default description to use when describing changes with an empty description",
"default": ""
},
"color": {
"description": "Whether to colorize command output",
"enum": [
"always",
"never",
"auto"
],
"default": "auto"
},
"paginate": {
"type": "string",
"description": "Whether or not to use a pager",
"enum": [
"never",
"auto"
],
"default": "auto"
},
"pager": {
"type": "string",
"description": "Pager to use for displaying command output",
"default": "less -FRX"
},
"diff": {
"type": "object",
"description": "Options for how diffs are displayed",
"properties": {
"format": {
"description": "The diff format to use",
"enum": [
"color-words",
"git",
"summary"
],
"default": "color-words"
},
"tool": {
"type": "string",
"description": "External tool for generating diffs"
}
}
},
"diff-instructions": {
"type": "boolean",
"description": "Whether to generate the JJ-INSTRUCTIONS file as part of editing a diff",
"default": true
},
"graph": {
"type": "object",
"description": "Options for rendering revision graphs from jj log etc",
"properties": {
"style": {
"description": "Style of connectors/markings used to render the graph. See https://github.com/martinvonz/jj/blob/main/docs/config.md#graph-style",
"enum": [
"curved",
"square",
"ascii",
"ascii-large"
],
"default": "curved"
}
}
},
"log-word-wrap": {
"type": "boolean",
"description": "Whether to wrap log template output",
"default": false
},
"log-synthetic-elided-nodes": {
"type": "boolean",
"description": "Whether to render elided parts of the graph as synthetic nodes.",
"default": false
},
"editor": {
"type": "string",
"description": "Editor to use for commands that involve editing text"
},
"diff-editor": {
"type": "string",
"description": "Editor tool to use for editing diffs",
"default": "meld"
},
"merge-editor": {
"type": "string",
"description": "Tool to use for resolving three-way merges. Behavior for a given tool name can be configured in merge-tools.TOOL tables"
}
}
},
"colors": {
"type": "object",
"description": "Mapping from jj formatter labels to colors",
"definitions": {
"colors": {
"enum": [
"default",
"black",
"red",
"green",
"yellow",
"blue",
"magenta",
"cyan",
"white",
"bright black",
"bright red",
"bright green",
"bright yellow",
"bright blue",
"bright magenta",
"bright cyan",
"bright white"
]
},
"basicFormatterLabels": {
"enum": [
"description",
"change_id",
"commit_id",
"author",
"committer",
"working_copies",
"current_working_copy",
"branches",
"tags",
"git_refs",
"is_git_head",
"divergent",
"hidden",
"conflict",
"root"
]
}
},
"propertyNames": {
"oneOf": [
{
"$ref": "#/properties/colors/definitions/basicFormatterLabels"
},
{
"type": "string"
}
]
},
"additionalProperties": {
"description": "A color profile for the given formatter label. Either a bare color name used as the foreground color or a table describing color and formatting",
"oneOf": [
{
"$ref": "#/properties/colors/definitions/colors"
},
{
"type": "object",
"properties": {
"fg": {
"$ref": "#/properties/colors/definitions/colors"
},
"bg": {
"$ref": "#/properties/colors/definitions/colors"
},
"bold": {
"type": "boolean"
},
"underline": {
"type": "boolean"
}
}
}
]
}
},
"git": {
"type": "object",
"description": "Settings for git behavior (when using git backend)",
"properties": {
"auto-local-branch": {
"type": "boolean",
"description": "Whether jj creates a local branch with the same name when it imports a remote-tracking branch from git. See https://github.com/martinvonz/jj/blob/main/docs/config.md#automatic-local-branch-creation",
"default": false
},
"abandon-unreachable-commits": {
"type": "boolean",
"description": "Whether jj should abandon commits that became unreachable in Git.",
"default": true
},
"push-branch-prefix": {
"type": "string",
"description": "Prefix used when pushing a change ID as a new branch",
"default": "push-"
},
"fetch": {
"description": "The remote(s) from which commits are fetched",
"default": "origin",
"oneOf": [
{
"type": "string"
},
{
"type": "array",
"items": {
"type": "string"
}
}
]
},
"push": {
"type": "string",
"description": "The remote to which commits are pushed",
"default": "origin"
}
}
},
"merge-tools": {
"type": "object",
"description": "Tables of custom options to pass to the given merge tool (selected in ui.merge-editor)",
"additionalProperties": {
"type": "object",
"properties": {
"program": {
"type": "string"
},
"diff-args": {
"type": "array",
"items": {
"type": "string"
}
},
"edit-args": {
"type": "array",
"items": {
"type": "string"
}
},
"merge-args": {
"type": "array",
"items": {
"type": "string"
}
},
"merge-tool-edits-conflict-markers": {
"type": "boolean",
"description": "Whether to populate the output file with conflict markers before starting the merge tool. See https://github.com/martinvonz/jj/blob/main/docs/config.md#editing-conflict-markers-with-a-tool-or-a-text-editor",
"default": false
}
}
}
},
"revsets": {
"type": "object",
"description": "Revset expressions used by various commands",
"properties": {
"log": {
"type": "string",
"description": "Default set of revisions to show when no explicit revset is given for jj log and similar commands",
"default": "@ | ancestors(immutable_heads().., 2) | trunk()"
},
"short-prefixes": {
"type": "string",
"description": "Revisions to give shorter change and commit IDs to",
"default": "<revsets.log>"
}
},
"additionalProperties": {
"type": "string"
}
},
"revset-aliases": {
"type": "object",
"description": "Custom symbols/function aliases that can used in revset expressions",
"properties": {
"immutable_heads()": {
"type": "string",
"description": "Revisions to consider immutable. Ancestors of these are also considered immutable. The root commit is always considered immutable.",
"default": "trunk() | tags()"
}
},
"additionalProperties": {
"type": "string"
}
},
"template-aliases": {
"type": "object",
"description": "Custom symbols/function aliases that can used in templates",
"additionalProperties": {
"type": "string"
}
},
"aliases": {
"type": "object",
"description": "Custom subcommand aliases to be supported by the jj command",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"snapshot": {
"type": "object",
"description": "Parameters governing automatic capture of files into the working copy commit",
"properties": {
"max-new-file-size": {
"type": [
"integer",
"string"
],
"description": "New files with a size in bytes above this threshold are not snapshotted, unless the threshold is 0",
"default": "1MiB"
}
}
},
"signing": {
"type": "object",
"description": "Settings for verifying and creating cryptographic commit signatures",
"properties": {
"backend": {
"type": "string",
"enum": ["gpg", "ssh"],
"description": "The backend to use for signing commits"
},
"key": {
"type": "string",
"description": "The key the configured signing backend will use to to sign commits. Overridden by `jj sign` parameter or by the global `--sign-with` option"
},
"sign-all": {
"type": "boolean",
"description": "Whether to sign all commits by default. Overridden by global `--no-sign` option",
"default": false
},
"backends": {
"type": "object",
"description": "Tables of options to pass to specific signing backends",
"properties": {
"gpg": {
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "Path to the gpg program to be called",
"default": "gpg"
},
"allow-expired-keys": {
"type": "boolean",
"description": "Whether to consider signatures generated with an expired key as invalid",
"default": true
}
}
},
"ssh": {
"type": "object",
"properties": {
"program": {
"type": "string",
"description": "Path to the ssh-keygen program to be called",
"default": "ssh-keygen"
},
"allowed-signers": {
"type": "boolean",
"description": "Path to an allowed signers file used for signature verification",
"default": true
}
}
}
},
"additionalProperties": true
}
}
}
}
}