Skip to content

config.toml

jjui reads configuration from a TOML file at startup.

Global config:

  • Linux / macOS: ~/.config/jjui/config.toml
  • Windows: %AppData%/jjui/config.toml

Open the file directly in your editor with:

Terminal window
jjui --config

Repo-specific config: You can create a .jjui/config.toml file in the root of any jj repo and it will override anything that was set by your global config. This allows you to define settings, actions, and bindings that apply to all repos, but then granularly override particular settings per-repo.

Custom config: You can also set a custom directory with the JJUI_CONFIG_DIR environment variable. jjui will then look for your config.toml file inside that directory. If you use this, it will replace the global and repo configs, rather than just override them.


jjui sets the JJUI environment variable before invoking jj. You can use jj’s conditional config syntax to apply different jj settings only when commands are run from inside jjui.

This is useful when you want jj to behave one way in your shell and another way in jjui.

[[--scope]]
--when.environments = ["JJUI"]
[--scope.ui]
diff-formatter = "delta"
[[--scope]]
--when.environments = ["JJUI"]
[--scope.ui]
pager = ["less", "-FRX"]
[[--scope]]
--when.environments = ["JJUI"]
[--scope.ui]
paginate = "never"

Add these snippets to your jj configuration, not to jjui’s config.toml.

Override the default log template or revset:

[revisions]
template = "builtin_log_compact"
revset = ""
log_batching = true
log_batch_size = 50
  • log_batching: load revisions incrementally in batches (default: true)
  • log_batch_size: number of revisions per batch when batching is enabled (default: 50)
[preview]
position = "auto" # auto | right | bottom
show_at_start = false
width_percentage = 50.0
width_increment_percentage = 5.0
[oplog]
limit = 200

Disable jjui’s SSH askpass helper if you manage SSH credentials yourself:

[ssh]
hijack_askpass = false

Controls autocomplete suggestions in the : and $ command prompts:

[suggest.exec]
mode = "fuzzy" # off | regex | fuzzy
[ui]
auto_refresh_interval = 0

Seconds between automatic revision list refreshes. Default is 0 (disabled). Override at startup with --period.

[ui]
set_window_title = true

Whether jjui sets the terminal window title to include the repo path. Default is true. Set to false to leave the title managed by your shell or terminal.

[ui]
mouse_support = true

Whether jjui enables mouse interactions such as clicking list items, scrolling scrollable views, and dragging pane separators. Default is true. Set to false to disable mouse handling completely.

[ui]
flash_message_display_seconds = 4

How long success flash messages stay visible in seconds. Default is 4. Set to 0 to keep them until manually dismissed with esc.

Quick inline overrides go in [ui.colors]:

[ui.colors]
"selected" = { bg = "#303446" }

For a full theme file, see Themes.

Load an alternative bindings file as the base instead of the built-in defaults:

bindings_profile = "vim_bindings.toml"

Your own [[bindings]] entries are applied on top of the profile. Use :builtin to explicitly reset to embedded defaults.

For defining actions and bindings, see Actions and Bindings.

Contribute Community