⋅𝕭𝖆𝖘𝖆𝖑𝖙⋅
CONFIGURATION

Themes

Basalt colours its whole interface through a theme, a named set of semantic colour roles. You can switch between built-in themes live, set a default in your configuration file, or drop your own theme file next to the bundled ones.

Setting a theme#

Choose a theme with the top-level theme key:

theme = "gruvbox-dark"

By default Basalt uses "default", which inherits your terminal's own colours (it sets no background of its own).

The theme picker#

Press <leader>t (Space then t) to open the theme picker. Scrolling previews each theme live across the whole UI, so you can see it before committing:

theme-selector demo

Saving only sets the theme key; the rest of your config (comments, ordering, other keys) is left untouched.

Built-in themes#

Theme
defaultTerminal-default palette (no background of its own)
causeway-dark, causeway-lightBasalt's own theme - weathered volcanic stone by the sea
gruvbox-dark, gruvbox-lightGruvbox
everforest-dark, everforest-lightEverforest
nordNord
draculaDracula
catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mochaCatppuccin
minimalA quiet dark theme that keeps only the dividers between panes

Creating your own theme#

Drop a <name>.toml file into your themes directory and it appears in the picker under <name>:

A user theme that shares a built-in's name overrides it. The bundled themes (e.g. gruvbox-dark.toml) are good starting points. Copy one and adjust.

Format#

A theme is a [palette] of named colours plus a colour for each role. A role's value is either:

Any role you leave out keeps the default theme's value, so a theme only needs to set what it changes.

# themes/my-theme.toml
text = "fg"
background = "bg"
accent = "iris"

heading-2 = "gold"
code-bg = "surface"

[status-bar]
background = "surface"
foreground = "fg"

[palette]
fg = "#e0def4"
bg = "#191724"
surface = "#1f1d2e"
iris = "#c4a7e7"
gold = "#f6c177"

Colour roles#

RoleUsed for
textPrimary foreground / body text
backgroundBase background painted across the whole UI
mutedSecondary text: markers, indentation, bullets, badges
accentBrand mark and other highlights
heading-1heading-6Heading levels
code-bgBackground of fenced code blocks (a raised surface reads best)
blockquoteBlock-quote bar and text
list-markerList bullets and ordered-list numbers
taskTask check-box marker
mode-insertStatus-bar mode block: insert / edit
mode-normalStatus-bar mode block: vim normal
mode-readStatus-bar mode block: read-only
success, info, warning, errorToasts and callouts

Mode-block text picks whichever of background / text is more legible over the mode colour, so any mode colour stays readable.

Borders#

border, border-active and border-type set the default border for every pane. border-type is one of:

border-type
noneNo border
plainStraight single line
roundedRounded corners
thickHeavy single line
doubleDouble line

Left unset, border-type follows the active Symbols preset (thick when focused, rounded otherwise).

Per-pane sections#

Each pane can override the globals in its own table: [explorer], [note-editor] and [outline] accept background, border, border-active, border-type and border-edges; [status-bar] has no border and takes only background and foreground.

border-edges chooses which sides draw, so a theme can keep only the dividers between panes instead of full boxes:

border-edgesSides drawn
allEvery side (default)
noneNone
top, bottom, left, rightThat single side
verticalLeft and right
horizontalTop and bottom
# Only the dividers between panes, no outer frame (see the bundled "minimal").
[explorer]
border-edges = "right"

[note-editor]
border-edges = "vertical"

[outline]
border-edges = "left"

An unset pane background inherits the theme background, so a single background tints the whole UI consistently.