Configuration

deltoids reads $XDG_CONFIG_HOME/deltoids/config.toml, falling back to ~/.config/deltoids/config.toml.

Theme

The [theme] section selects the light or dark palette and the syntax highlighting theme. The pager and deltoids tui both use it.

[theme]
# "light" | "dark" | "auto" (default: auto, detected from the terminal).
mode = "auto"
# Syntax highlighting theme by name. Bundled themes include "TokyoNight",
# "Monokai Extended", "GitHub", "Nord", and "Dracula".
syntax_theme = "TokyoNight"

When syntax_theme is not set, deltoids uses Monokai Extended on dark and GitHub on light.

In deltoids tui, press t to switch the syntax theme for the session. The picker starts from the theme set here.

You can also override single colors of the interface, such as diff backgrounds, borders, and status letters, with hex values in the same [theme] section.

Custom commands

Bind a key in deltoids tui to a shell command that runs against the selected file. Each [[commands]] entry maps one key to a command. {{filename}} expands to the selected file’s absolute path, shell-quoted so paths with spaces work.

# Background (default): dispatches elsewhere and returns immediately.
# The TUI never touches the terminal, so there is no flicker.
[[commands]]
key = "e"
command = "dev tmux edit {{filename}}"
description = "edit file in a tmux pane"

# Subprocess: takes over the terminal for an inline editor. The TUI
# suspends, hands the terminal to the child, then restores and repaints.
[[commands]]
key = "E"
command = "nvim {{filename}}"
subprocess = true
description = "edit file inline in neovim"

command is a shell line (run via sh -c), not an argv. Custom keys work against the current selection.

Custom keys cannot override these built-in keys:

  • q, ?, t, <, >, \, f, and F, everywhere.
  • h, l, r, i, and Enter in the diff.
  • Space, a, and d in the Files panel of the working tree.

A custom key can shadow any other key. Press ? in the TUI to see the configured bindings in the help popup.

Language servers

Code navigation asks a language server for definitions and callers. deltoids looks for these servers on PATH:

LanguageName in [lsp.<name>]Server
Rustrustrust-analyzer
Gogogopls
TypeScript, TSX, JavaScripttypescript, tsx, javascripttypescript-language-server --stdio
Pythonpythonpyright-langserver --stdio
C, C++c, cppclangd
Rubyrubyruby-lsp
Lualualua-language-server
Bashbashbash-language-server start
Javajavajdtls
Kotlinkotlinkotlin-language-server

deltoids starts rust-analyzer with its own target directory (target/rust-analyzer) and without check on save, so it never holds up cargo build or cargo test.

An [lsp.<name>] table replaces a server or turns it off. The other languages deltoids understands (css, hcl, json, markdown, sql, toml, yaml) can get a server the same way:

[lsp.python]
command = ["basedpyright-langserver", "--stdio"]

[lsp.go]
enabled = false