just playing with tangled
at diffofmerge 622 lines 26 kB view raw
1{ 2 "$schema": "http://json-schema.org/draft-07/schema", 3 "title": "Jujutsu config", 4 "type": "object", 5 "description": "User configuration for Jujutsu VCS. See https://martinvonz.github.io/jj/latest/config/ for details", 6 "properties": { 7 "user": { 8 "type": "object", 9 "description": "Settings about the user", 10 "properties": { 11 "name": { 12 "type": "string", 13 "description": "Full name of the user, used in commits" 14 }, 15 "email": { 16 "type": "string", 17 "description": "User's email address, used in commits", 18 "format": "email" 19 } 20 } 21 }, 22 "operation": { 23 "type": "object", 24 "description": "Metadata to be attached to jj operations (shown in jj op log)", 25 "properties": { 26 "hostname": { 27 "type": "string", 28 "format": "hostname" 29 }, 30 "username": { 31 "type": "string" 32 } 33 } 34 }, 35 "ui": { 36 "type": "object", 37 "description": "UI settings", 38 "definitions": { 39 "conflict-marker-style": { 40 "type": "string", 41 "description": "Conflict marker style to use when materializing conflicts in the working copy", 42 "enum": [ 43 "diff", 44 "snapshot", 45 "git" 46 ], 47 "default": "diff" 48 } 49 }, 50 "properties": { 51 "allow-init-native": { 52 "type": "boolean", 53 "description": "Whether to allow initializing a repo with the native backend", 54 "default": false 55 }, 56 "allow-filesets": { 57 "type": "boolean", 58 "description": "Whether to parse path arguments as fileset expressions", 59 "default": true 60 }, 61 "always-allow-large-revsets": { 62 "type": "boolean", 63 "description": "Whether to allow large revsets to be used in all commands without the `all:` modifier", 64 "default": false 65 }, 66 "default-command": { 67 "type": "string", 68 "description": "Default command to run when no explicit command is given", 69 "default": "log", 70 "oneOf": [ 71 { 72 "type": "string" 73 }, 74 { 75 "type": "array", 76 "items": { 77 "type": "string" 78 } 79 } 80 ] 81 }, 82 "default-description": { 83 "type": "string", 84 "description": "Default description to use when describing changes with an empty description", 85 "default": "" 86 }, 87 "color": { 88 "description": "Whether to colorize command output", 89 "enum": [ 90 "always", 91 "never", 92 "debug", 93 "auto" 94 ], 95 "default": "auto" 96 }, 97 "paginate": { 98 "type": "string", 99 "description": "Whether or not to use a pager", 100 "enum": [ 101 "never", 102 "auto" 103 ], 104 "default": "auto" 105 }, 106 "pager": { 107 "type": "string", 108 "description": "Pager to use for displaying command output", 109 "default": "less -FRX" 110 }, 111 "diff": { 112 "type": "object", 113 "description": "Options for how diffs are displayed", 114 "properties": { 115 "format": { 116 "description": "The diff format to use", 117 "enum": [ 118 "color-words", 119 "git", 120 "summary" 121 ], 122 "default": "color-words" 123 }, 124 "tool": { 125 "type": "string", 126 "description": "External tool for generating diffs" 127 } 128 } 129 }, 130 "diff-instructions": { 131 "type": "boolean", 132 "description": "Whether to generate the JJ-INSTRUCTIONS file as part of editing a diff", 133 "default": true 134 }, 135 "graph": { 136 "type": "object", 137 "description": "Options for rendering revision graphs from jj log etc", 138 "properties": { 139 "style": { 140 "description": "Style of connectors/markings used to render the graph. See https://martinvonz.github.io/jj/latest/config/#graph-style", 141 "enum": [ 142 "curved", 143 "square", 144 "ascii", 145 "ascii-large" 146 ], 147 "default": "curved" 148 } 149 } 150 }, 151 "log-word-wrap": { 152 "type": "boolean", 153 "description": "Whether to wrap log template output", 154 "default": false 155 }, 156 "log-synthetic-elided-nodes": { 157 "type": "boolean", 158 "description": "Whether to render elided parts of the graph as synthetic nodes.", 159 "default": true 160 }, 161 "editor": { 162 "type": "string", 163 "description": "Editor to use for commands that involve editing text" 164 }, 165 "diff-editor": { 166 "type": "string", 167 "description": "Editor tool to use for editing diffs", 168 "default": "meld" 169 }, 170 "merge-editor": { 171 "type": "string", 172 "description": "Tool to use for resolving three-way merges. Behavior for a given tool name can be configured in merge-tools.TOOL tables" 173 }, 174 "conflict-marker-style": { 175 "$ref": "#/properties/ui/definitions/conflict-marker-style" 176 } 177 } 178 }, 179 "core": { 180 "type": "object", 181 "properties": { 182 "fsmonitor": { 183 "type": "string", 184 "enum": ["none", "watchman"], 185 "description": "Whether to use an external filesystem monitor, useful for large repos" 186 }, 187 "watchman": { 188 "type": "object", 189 "properties": { 190 "register_snapshot_trigger": { 191 "type": "boolean", 192 "default": false, 193 "description": "Whether to use triggers to monitor for changes in the background." 194 } 195 } 196 } 197 } 198 }, 199 "colors": { 200 "type": "object", 201 "description": "Mapping from jj formatter labels to colors", 202 "definitions": { 203 "colorNames": { 204 "enum": [ 205 "default", 206 "black", 207 "red", 208 "green", 209 "yellow", 210 "blue", 211 "magenta", 212 "cyan", 213 "white", 214 "bright black", 215 "bright red", 216 "bright green", 217 "bright yellow", 218 "bright blue", 219 "bright magenta", 220 "bright cyan", 221 "bright white" 222 ] 223 }, 224 "hexColor": { 225 "type": "string", 226 "pattern": "^#[0-9a-fA-F]{6}$" 227 }, 228 "colors": { 229 "oneOf": [ 230 { 231 "$ref": "#/properties/colors/definitions/colorNames" 232 }, 233 { 234 "$ref": "#/properties/colors/definitions/hexColor" 235 } 236 ] 237 }, 238 "basicFormatterLabels": { 239 "enum": [ 240 "description", 241 "change_id", 242 "commit_id", 243 "author", 244 "committer", 245 "working_copies", 246 "current_working_copy", 247 "bookmarks", 248 "tags", 249 "git_refs", 250 "is_git_head", 251 "divergent", 252 "hidden", 253 "conflict", 254 "root" 255 ] 256 } 257 }, 258 "propertyNames": { 259 "oneOf": [ 260 { 261 "$ref": "#/properties/colors/definitions/basicFormatterLabels" 262 }, 263 { 264 "type": "string" 265 } 266 ] 267 }, 268 "additionalProperties": { 269 "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", 270 "oneOf": [ 271 { 272 "$ref": "#/properties/colors/definitions/colors" 273 }, 274 { 275 "type": "object", 276 "properties": { 277 "fg": { 278 "$ref": "#/properties/colors/definitions/colors" 279 }, 280 "bg": { 281 "$ref": "#/properties/colors/definitions/colors" 282 }, 283 "bold": { 284 "type": "boolean" 285 }, 286 "underline": { 287 "type": "boolean" 288 } 289 } 290 } 291 ] 292 } 293 }, 294 "diff": { 295 "type": "object", 296 "description": "Builtin diff formats settings", 297 "properties": { 298 "color-words": { 299 "type": "object", 300 "description": "Options for color-words diffs", 301 "properties": { 302 "max-inline-alternation": { 303 "type": "integer", 304 "description": "Maximum number of removed/added word alternation to inline", 305 "default": 3 306 }, 307 "context": { 308 "type": "integer", 309 "description": "Number of lines of context to show", 310 "default": 3 311 } 312 } 313 }, 314 "git": { 315 "type": "object", 316 "description": "Options for git diffs", 317 "properties": { 318 "context": { 319 "type": "integer", 320 "description": "Number of lines of context to show", 321 "default": 3 322 } 323 } 324 } 325 } 326 }, 327 "git": { 328 "type": "object", 329 "description": "Settings for git behavior (when using git backend)", 330 "properties": { 331 "auto-local-bookmark": { 332 "type": "boolean", 333 "description": "Whether jj creates a local bookmark with the same name when it imports a remote-tracking branch from git. See https://martinvonz.github.io/jj/latest/config/#automatic-local-bookmark-creation", 334 "default": false 335 }, 336 "abandon-unreachable-commits": { 337 "type": "boolean", 338 "description": "Whether jj should abandon commits that became unreachable in Git.", 339 "default": true 340 }, 341 "push-bookmark-prefix": { 342 "type": "string", 343 "description": "Prefix used when pushing a bookmark based on a change ID", 344 "default": "push-" 345 }, 346 "fetch": { 347 "description": "The remote(s) from which commits are fetched", 348 "default": "origin", 349 "oneOf": [ 350 { 351 "type": "string" 352 }, 353 { 354 "type": "array", 355 "items": { 356 "type": "string" 357 } 358 } 359 ] 360 }, 361 "push": { 362 "type": "string", 363 "description": "The remote to which commits are pushed", 364 "default": "origin" 365 } 366 } 367 }, 368 "merge-tools": { 369 "type": "object", 370 "description": "Tables of custom options to pass to the given merge tool (selected in ui.merge-editor)", 371 "additionalProperties": { 372 "type": "object", 373 "properties": { 374 "program": { 375 "type": "string" 376 }, 377 "diff-args": { 378 "type": "array", 379 "items": { 380 "type": "string" 381 } 382 }, 383 "diff-invocation-mode": { 384 "description": "Invoke the tool with directories or individual files", 385 "enum": [ 386 "dir", 387 "file-by-file" 388 ], 389 "default": "dir" 390 }, 391 "edit-args": { 392 "type": "array", 393 "items": { 394 "type": "string" 395 } 396 }, 397 "merge-args": { 398 "type": "array", 399 "items": { 400 "type": "string" 401 } 402 }, 403 "merge-conflict-exit-codes": { 404 "type": "array", 405 "items": { 406 "type": "number" 407 }, 408 "description": "Array of exit codes to indicate that the conflict was only partially resolved. See https://martinvonz.github.io/jj/latest/config/#editing-conflict-markers-with-a-tool-or-a-text-editor", 409 "default": [] 410 }, 411 "merge-tool-edits-conflict-markers": { 412 "type": "boolean", 413 "description": "Whether to populate the output file with conflict markers before starting the merge tool. See https://martinvonz.github.io/jj/latest/config/#editing-conflict-markers-with-a-tool-or-a-text-editor", 414 "default": false 415 }, 416 "conflict-marker-style": { 417 "$ref": "#/properties/ui/definitions/conflict-marker-style" 418 } 419 } 420 } 421 }, 422 "revsets": { 423 "type": "object", 424 "description": "Revset expressions used by various commands", 425 "properties": { 426 "fix": { 427 "type": "string", 428 "description": "Default set of revisions to fix when no explicit revset is given for jj fix", 429 "default": "reachable(@, mutable())" 430 }, 431 "log": { 432 "type": "string", 433 "description": "Default set of revisions to show when no explicit revset is given for jj log and similar commands", 434 "default": "present(@) | ancestors(immutable_heads().., 2) | present(trunk())" 435 }, 436 "short-prefixes": { 437 "type": "string", 438 "description": "Revisions to give shorter change and commit IDs to", 439 "default": "<revsets.log>" 440 }, 441 "simplify-parents": { 442 "type": "string", 443 "description": "Default set of revisions to simplify when no explicit revset is given for jj simplify-parents", 444 "default": "reachable(@, mutable())" 445 } 446 }, 447 "additionalProperties": { 448 "type": "string" 449 } 450 }, 451 "revset-aliases": { 452 "type": "object", 453 "description": "Custom symbols/function aliases that can used in revset expressions", 454 "properties": { 455 "immutable_heads()": { 456 "type": "string", 457 "description": "Revisions to consider immutable. Ancestors of these are also considered immutable. The root commit is always considered immutable.", 458 "default": "present(trunk()) | tags() | untracked_remote_branches()" 459 } 460 }, 461 "additionalProperties": { 462 "type": "string" 463 } 464 }, 465 "template-aliases": { 466 "type": "object", 467 "description": "Custom symbols/function aliases that can used in templates", 468 "additionalProperties": { 469 "type": "string" 470 } 471 }, 472 "aliases": { 473 "type": "object", 474 "description": "Custom subcommand aliases to be supported by the jj command", 475 "additionalProperties": { 476 "type": "array", 477 "items": { 478 "type": "string" 479 } 480 } 481 }, 482 "snapshot": { 483 "type": "object", 484 "description": "Parameters governing automatic capture of files into the working copy commit", 485 "properties": { 486 "auto-track": { 487 "type": "string", 488 "description": "Fileset pattern describing what new files to automatically track on snapshotting. By default all new files are tracked.", 489 "default": "all()" 490 }, 491 "auto-update-stale": { 492 "type": "boolean", 493 "description": "Whether to automatically update the working copy if it is stale. See https://martinvonz.github.io/jj/latest/working-copy/#stale-working-copy", 494 "default": "false" 495 }, 496 "max-new-file-size": { 497 "type": [ 498 "integer", 499 "string" 500 ], 501 "description": "New files with a size in bytes above this threshold are not snapshotted, unless the threshold is 0", 502 "default": "1MiB" 503 } 504 } 505 }, 506 "experimental-advance-branches": { 507 "type": "object", 508 "description": "Settings controlling the 'advance-branches' feature which moves bookmarks forward when new commits are created.", 509 "properties": { 510 "enabled-branches": { 511 "type": "array", 512 "description": "Patterns used to identify bookmarks which may be advanced.", 513 "items": { 514 "type": "string" 515 } 516 }, 517 "disabled-branches": { 518 "type": "array", 519 "description": "Patterns used to identify bookmarks which are not advanced. Takes precedence over 'enabled-branches'.", 520 "items": { 521 "type": "string" 522 } 523 } 524 } 525 }, 526 "signing": { 527 "type": "object", 528 "description": "Settings for verifying and creating cryptographic commit signatures", 529 "properties": { 530 "backend": { 531 "type": "string", 532 "enum": ["gpg", "none", "ssh"], 533 "description": "The backend to use for signing commits. The string `none` disables signing.", 534 "default": "none" 535 }, 536 "key": { 537 "type": "string", 538 "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" 539 }, 540 "sign-all": { 541 "type": "boolean", 542 "description": "Whether to sign all commits by default. Overridden by global `--no-sign` option", 543 "default": false 544 }, 545 "backends": { 546 "type": "object", 547 "description": "Tables of options to pass to specific signing backends", 548 "properties": { 549 "gpg": { 550 "type": "object", 551 "properties": { 552 "program": { 553 "type": "string", 554 "description": "Path to the gpg program to be called", 555 "default": "gpg" 556 }, 557 "allow-expired-keys": { 558 "type": "boolean", 559 "description": "Whether to consider signatures generated with an expired key as invalid", 560 "default": true 561 } 562 } 563 }, 564 "ssh": { 565 "type": "object", 566 "properties": { 567 "program": { 568 "type": "string", 569 "description": "Path to the ssh-keygen program to be called", 570 "default": "ssh-keygen" 571 }, 572 "allowed-signers": { 573 "type": "boolean", 574 "description": "Path to an allowed signers file used for signature verification", 575 "default": true 576 } 577 } 578 } 579 }, 580 "additionalProperties": true 581 } 582 } 583 }, 584 "fix": { 585 "type": "object", 586 "description": "Settings for jj fix", 587 "properties": { 588 "tool-command": { 589 "type": "array", 590 "items": { 591 "type": "string" 592 }, 593 "description": "Shell command that takes file content on stdin and returns fixed file content on stdout (deprecated)" 594 }, 595 "tools": { 596 "type": "object", 597 "additionalProperties": { 598 "type": "object", 599 "description": "Settings for how specific filesets are affected by a tool", 600 "properties": { 601 "command": { 602 "type": "array", 603 "items": { 604 "type": "string" 605 }, 606 "description": "Arguments used to execute this tool" 607 }, 608 "patterns": { 609 "type": "array", 610 "items": { 611 "type": "string" 612 }, 613 "description": "Filesets that will be affected by this tool" 614 } 615 } 616 }, 617 "description": "Settings for tools run by jj fix" 618 } 619 } 620 } 621 } 622}