Theming
gest exposes a semantic theming system for its terminal UI. You can override either:
- the palette, which updates shared semantic color slots used across many UI tokens
- individual theme tokens, which let you change one specific UI element
Theme settings live under the [colors] section in your config file.
How theme resolution works
gest resolves styles in this order:
- Built-in defaults
[colors.palette]overrides[colors.overrides]token overrides
Palette overrides replace the foreground color for every token mapped to that semantic slot while preserving the token's built-in modifiers such as bold, italic, or underline.
Token overrides are the most specific layer. They can replace foreground and background colors and add text modifiers for a single token.
Supported color formats
You can use either:
- named ANSI colors such as
red,yellow, orbright cyan - 6-digit hex colors in
#RRGGBBformat
Supported named colors:
black, red, green, yellow, blue, magenta, cyan, white, bright black, bright red, bright green, bright yellow, bright blue, bright magenta, bright cyan, bright white
Quick example
[colors.palette]
primary = "#7CC4F0"
warning = "#E3A22B"
text.muted = "#8B93A7"
[colors.overrides]
"log.error" = "#FF6B6B"
"tag" = { fg = "#4EA8E0", italic = true }
"config.heading" = { fg = "#4EA8E0", bold = true, underline = true }Palette Slots
The palette exposes 11 semantic slots:
| Key | Default | Used for |
|---|---|---|
accent | #D05830 | warm highlights |
border | #30323A | rules and borders |
error | #D03838 | error states |
primary | #4EA8E0 | brand emphasis |
primary.dark | #3278B0 | dark accents |
primary.light | #7CC4F0 | light accents |
success | #36BE78 | success states |
text | #C4C8D4 | body text |
text.dim | #585E6E | dim text |
text.muted | #7C8294 | secondary text |
warning | #CC9820 | warning states |
Example:
[colors.palette]
primary = "#5AB0FF"
success = "#47C97B"
text = "#E3E7F1"
text.muted = "#98A1B3"Token Overrides
Token overrides belong under [colors.overrides]. Each key is a dot-delimited token name.
Simple form
The string form sets only the foreground color:
[colors.overrides]
"log.warn" = "yellow"
"message.success.icon" = "#36BE78"Table form
The table form can set colors and text modifiers:
[colors.overrides]
"search.query" = { fg = "#F4F7FF", bold = true }
"markdown.blockquote" = { fg = "#8B93A7", italic = true }
"banner.update.version" = { fg = "#FFCC4D", bold = true }Available fields:
| Field | Type | Description |
|---|---|---|
fg | string | Foreground color |
bg | string | Background color |
bold | boolean | Enable bold text |
dim | boolean | Enable dim text |
italic | boolean | Enable italic text |
underline | boolean | Enable underline |
Token Reference
These are the token keys currently recognized by gest.
Core
emphasiserrormutedsuccesstagborder
Artifact Views
artifact.detail.labelartifact.detail.separatorartifact.detail.valueartifact.list.archived.badgeartifact.list.kindartifact.list.tag.archivedartifact.list.titleartifact.list.title.archived
Banner
banner.authorbanner.author.namebanner.gradient.endbanner.gradient.startbanner.shadowbanner.update.commandbanner.update.hintbanner.update.messagebanner.update.versionbanner.versionbanner.version.datebanner.version.revision
Configuration Views
config.headingconfig.labelconfig.no_overridesconfig.value
IDs And Status Indicators
id.prefixid.restindicator.blockedindicator.blocked_by.idindicator.blocked_by.labelindicator.blocking
Init Output
init.command.prefixinit.labelinit.sectioninit.value
Iterations
iteration.detail.count.blockediteration.detail.count.doneiteration.detail.count.in_progressiteration.detail.count.openiteration.detail.labeliteration.detail.valueiteration.graph.branchiteration.graph.phase.iconiteration.graph.phase.labeliteration.graph.phase.nameiteration.graph.separatoriteration.graph.titleiteration.list.summaryiteration.list.title
Lists
list.headinglist.summary
Logs
log.debuglog.errorlog.infolog.timestamplog.tracelog.warn
Markdown Rendering
markdown.blockquotemarkdown.blockquote.bordermarkdown.code.blockmarkdown.code.bordermarkdown.code.inlinemarkdown.emphasismarkdown.headingmarkdown.linkmarkdown.rulemarkdown.strong
Messages
message.created.labelmessage.success.iconmessage.updated.label
Search
search.expand.separatorsearch.no_results.hintsearch.querysearch.summarysearch.type.label
Task And Iteration Status
status.cancelledstatus.donestatus.in_progressstatus.open
Tasks
task.detail.labeltask.detail.separatortask.detail.titletask.detail.valuetask.list.icon.cancelledtask.list.icon.donetask.list.icon.in_progresstask.list.icon.opentask.list.prioritytask.list.titletask.list.title.cancelled
Markdown Shorthand Aliases
All markdown.* tokens have md.* shorthand aliases that you can use in [colors.overrides]:
| Shorthand | Resolves to |
|---|---|
md.blockquote | markdown.blockquote |
md.blockquote.border | markdown.blockquote.border |
md.code.block | markdown.code.block |
md.code.border | markdown.code.border |
md.code | markdown.code.inline |
md.emphasis | markdown.emphasis |
md.heading | markdown.heading |
md.link | markdown.link |
md.rule | markdown.rule |
md.strong | markdown.strong |
TIP
Note that md.code maps to markdown.code.inline, not markdown.code.
Notes
banner.gradient.start,banner.gradient.end, andbanner.shadowuse built-in RGB defaults and are not driven by palette slots.markdown.emphasisandmarkdown.strongare modifier-only defaults, so palette overrides do not affect them unless you override the token directly.- Unknown palette keys and unknown token names are ignored with a warning.