git.file.conflicted
@git.file.conflicted · #BF616A
Bold · Full intensity
Consumer: starship
My terminal design system supplies shared tokens and atomic compositions across native interfaces. Application code stays grouped by capability. The built-in Nord preset establishes the first baseline before a personal green preset is designed.
Jump to theme roles, presentation tokens, Git status components, the atomic catalog, or integration boundaries.
The source chain is palette → semantic roles → component roles → native mappings. Preset selection chooses the input; --theme overrides it for an experiment. Runtime filenames, theme identifiers and adapter mappings stay independent of that choice. The status broker supplies state names; the generated tmux adapter resolves their presentation locally, ignoring producer-supplied colors. Shared tokens own reusable aliases, blend recipes and typed presentation defaults. Presets assign palette values; component definitions describe presentation roles. Adapters translate those definitions into each host’s native vocabulary.
The theme distinguishes selected rows, active tabs, warnings, errors, success, attention and unknown observations. Status retains a label or glyph. Syntax grammars can differ across hosts; matching semantic roles does not promise identical token classification.
Kitty opacity remains 0.97; Neovim’s main background remains inherited. The theme defines solid surfaces for popups, selections and other native components. Transparent compositing depends on the terminal and desktop behind it; preset captures show the solid theme backing.
Charmed’s foundations inform this system’s separation of meaning, emphasis, glyphs and terminal geometry. Atomic levels describe composition depth; native adapters stay organized by capability. The catalog leads with resolved component examples and links each component to its tokens and native consumers.
| Foundation | Contract here |
|---|---|
| Meaning | Git file state, unstaged hunks, staged hunks and branch comparison keep separate identities. A renderer displays state supplied by its application. |
| Tone | Semantic color roles own meaning; glyph tokens carry no color. Focus, selection and status retain separate roles. |
| Emphasis | Bold changes weight; dim selects an explicit semantic shade. Neither changes the glyph or adds padding. |
| Glyphs | Every managed symbol declares a printable ASCII fallback of at most one cell. An empty glyph explicitly means count-only or no separator. |
| Geometry | Dimensions declare horizontal cells or vertical rows. Native adapters decide where padding is supported; website pixels are independent. |
| Evidence | Saved native examples belong to their preset. Browser color chips are references; actual terminal fixtures verify native translation. |
Charmed’s contrast floors, one-cell Unicode geometry, lifecycle state catalog and chart-series palette belong to its native components. Existing dotfile adapters do not establish those guarantees. In particular, inherited backgrounds and Nord’s subdued gutter colors need separate contrast evaluation. Color remains accompanied by a state name, a glyph, or native Git context; the prompt deliberately keeps compact counts.
Presets can override presentation without changing native adapters. Boolean emphasis, single-line symbol strings, and nonnegative integer spacing are typed. Spacing declares cell or row units; an adapter must explicitly support the unit. Current inline padding consumers use cells. These terminal units are separate from the website’s CSS pixels.
{ "presentation": { "emphasis.heading": false, "space.inline": 2, "symbol.git.file.modified": "M" }}Add this optional object to a preset. Override values retain the shared declaration’s type and unit; aliases use { "token": "another.declared.token" }. Component/native references use the same explicit token object. A cell dimension becomes native text padding only through { "token": "space.inline", "as": "spaces" }. Missing references, cycles, incompatible types or units, and unsupported native syntax fail before generated files are written.
Heading emphasis reaches Neovim and Glow; Glow’s sixth-level heading stays subdued. Inline padding reaches Glow code spans and tmux’s session label. Powerline separators reach tmux and lualine. Git file status icons feed Starship’s native modules, preserving counts and ahead/behind composition. Unstaged, staged and branch-comparison gutter signs have separate token names and preserve their existing defaults. Empty symbol strings are allowed, including Starship’s count-only staged indicator. Each managed symbol also declares an ascii fallback in the shared token source. Nerd Font availability and native glyph widths remain host constraints; Neovim rejects gutter symbols wider than two display cells.
Starship’s complete configuration is generated from a native template; its existing configuration path remains stable. Other prompt-module symbols stay application specific. The catalog lists direct consumers and exceptions. Generated tokens.json records defaults, overrides and resolved values; existing colors.json consumers retain their color interface. Neovim and Python exports also expose resolved presentation values.
Glyph representation is independent of the palette preset. Select it in design-system/config.json with { "theme": "nord", "symbols": "ascii" }, or generate an isolated variant:
python3 scripts/theme.py --theme nord --symbols ascii --output-dir /tmp/my-theme-asciiThe default is unicode. ASCII mode selects each managed symbol’s declared fallback, including Git status, gutter signs and separators. It takes precedence over a preset’s Unicode symbol override; edit the token’s ascii declaration to change that fallback. Color, emphasis and spacing retain their selected values. Other Starship modules, application-owned icons, border characters and document content keep their native behavior; this is a managed-glyph presentation, not an ASCII-only terminal or monochrome mode. Generation and native reload remain separate steps.
A symbol token supplies a character; a semantic component pairs it with a foreground role and supported emphasis. For example, git.file.modified combines symbol.git.file.modified, the git.file.modified color role, and its bold/dim tokens. The Starship adapter formats that component together with its native count. A preset can change the glyph, color, or emphasis independently without editing the adapter.
{ "roles": { "git.file.modified": "@status.info" }, "presentation": { "symbol.git.file.modified": "M", "emphasis.git.file.modified.bold": true }}Shared Git foreground defaults reference ANSI slots, preserving the existing prompt palette while giving each state its own semantic role. The component always refers to that role. Unstaged, staged and branch-comparison components pair their sign tokens with separate diff foregrounds; the native editor adapter turns those components into sign text and highlight groups. Dim file status selects its dim_fg role before native output is generated; Starship receives the resulting RGB without a faint attribute. Staged/branch colors retain their separate muted diff roles. Shared recipes blend each semantic hue toward the preset surface; presets can supply a different shade through role overrides. Other symbols, such as separators, inherit the style of their enclosing component.
make theme-generate # compile committed native artifactsmake theme-check # validate sources and detect stale artifacts without writesmake shell kitty tmux-config vim-config zellijmake theme-cache # refresh bat's cache, also consumed by deltaFor the initial Zellij migration, build the changed status plugin with make zellij-status zellij. Subsequent palette changes use native KDL theme styles; the status renderer no longer embeds the theme RGB values. Runtime installation remains explicit and separate from theme generation.
Use Kitty’s existing Cmd+Shift+R binding, :colorscheme dotfiles in Neovim, and tmux source-file ~/.config/tmux/tmux.conf. Reopen pickers and pagers; restart bottom. Start a new Zellij session if its native watcher does not reload a theme-file edit. The main tmux config reload refreshes existing agent segment colors without resetting their state age. There is no coordinated live-switch guarantee.
For an isolated theme experiment, run python3 scripts/theme.py --theme nord --output-dir /tmp/my-theme. DOTFILES_THEME_DIR selects alternate generated artifacts for the native fixture runner and owned Python/Neovim/fzf consumers; it does not select a theme globally across running applications. Generated files carry native formats and require no generator during normal startup.
The built-in Nord preset owns its palette reference, native examples and initial regression baseline. New presets use the same token contract and native adapters; preset-specific captures stay with their preset.
A Git-state component combines a symbol, semantic foreground and supported emphasis. File status and gutter signs retain distinct meanings. Previews use the selected preset’s surface and resolved color, including explicit dim shades.
git.file.conflicted@git.file.conflicted · #BF616A
Bold · Full intensity
Consumer: starship
git.file.stashed@git.file.stashed.dim · #A5AAB2
Normal weight · Dimmed
Consumer: starship
git.file.deleted@git.file.deleted · #BF616A
Normal weight · Full intensity
Consumer: starship
git.file.renamed@git.file.renamed · #88C0D0
Normal weight · Full intensity
Consumer: starship
git.file.modified@git.file.modified · #EBCB8B
Normal weight · Full intensity
Consumer: starship
git.file.staged@git.file.staged · #A3BE8C
Normal weight · Full intensity · Count only
Consumer: starship
git.file.untracked@git.file.untracked · #81A1C1
Normal weight · Full intensity
Consumer: starship
git.file.typechanged@git.file.typechanged · #B48EAD
Normal weight · Full intensity
Consumer: starship
git.file.ahead@git.file.ahead · #A3BE8C
Normal weight · Full intensity
Consumer: starship
git.file.behind@git.file.behind · #EBCB8B
Normal weight · Full intensity
Consumer: starship
git.file.branch@git.file.branch · #81A1C1
Normal weight · Full intensity
Consumer: starship
git.hunk.add@diff.add · #A3BE8C
Normal weight · Full intensity
Consumer: neovim
git.hunk.change@diff.change · #EBCB8B
Normal weight · Full intensity
Consumer: neovim
git.hunk.delete@diff.delete · #BF616A
Normal weight · Full intensity
Consumer: neovim
git.hunk.topdelete@diff.delete · #BF616A
Normal weight · Full intensity
Consumer: neovim
git.hunk.changedelete@diff.change · #EBCB8B
Normal weight · Full intensity
Consumer: neovim
git.hunk.untracked@diff.add · #A3BE8C
Normal weight · Full intensity
Consumer: neovim
git.staged_hunk.add@diff.add.dim · #6E806A
Normal weight · Full intensity
Consumer: neovim
git.staged_hunk.change@diff.change.dim · #968769
Normal weight · Full intensity
Consumer: neovim
git.staged_hunk.delete@diff.delete.dim · #7E4D57
Normal weight · Full intensity
Consumer: neovim
git.staged_hunk.topdelete@diff.delete.dim · #7E4D57
Normal weight · Full intensity
Consumer: neovim
git.staged_hunk.changedelete@diff.change.dim · #968769
Normal weight · Full intensity
Consumer: neovim
git.branch_hunk.add@diff.add.dim · #6E806A
Normal weight · Full intensity
Consumer: neovim
git.branch_hunk.change@diff.change.dim · #968769
Normal weight · Full intensity
Consumer: neovim
git.branch_hunk.delete@diff.delete.dim · #7E4D57
Normal weight · Full intensity
Consumer: neovim
git.branch_hunk.topdelete@diff.delete.dim · #7E4D57
Normal weight · Full intensity
Consumer: neovim
Resolved from the currently generated preset: nord. Preset references own their palettes and native examples.
surface#2E3440surface.raised#3B4252surface.selected#434C5Eborder#4C566Atext#D8DEE9text.strong#ECEFF4text.muted#81A1C1text.inverse#2E3440accent#88C0D0accent.secondary#8FBCBBfocus#B48EADstatus.success#A3BE8Cstatus.warning#EBCB8Bstatus.error#BF616Astatus.info#88C0D0status.attention#D08770status.idle#81A1C1status.off#4C566Asyntax.comment#4C566Asyntax.keyword#81A1C1syntax.function#88C0D0syntax.string#A3BE8Csyntax.type#8FBCBBsyntax.number#B48EADsyntax.constant#D8DEE9syntax.operator#81A1C1syntax.special#EBCB8Bsyntax.variable#D8DEE9diff.add#A3BE8Cdiff.change#EBCB8Bdiff.delete#BF616Adiff.add.bg#414A4Cdiff.change.bg#4C4C4Cdiff.delete.bg#453B47diff.add.dim#6E806Adiff.change.dim#968769diff.delete.dim#7E4D57selection.bg#434C5Eselection.fg#ECEFF4match#A3BE8Ctab.active.bg#B48EADtab.active.fg#2E3440tab.inactive.bg#2E3440tab.inactive.fg#81A1C1frame.inactive.fg#979DA9keyhint#88C0D0heading#88C0D0link#88C0D0prompt#88C0D0diff.add.emph.bg#515D57diff.delete.emph.bg#5A424Dgit.file.conflicted#BF616Agit.file.stashed#E5E9F0git.file.deleted#BF616Agit.file.renamed#88C0D0git.file.modified#EBCB8Bgit.file.staged#A3BE8Cgit.file.untracked#81A1C1git.file.typechanged#B48EADgit.file.ahead#A3BE8Cgit.file.behind#EBCB8Bgit.file.branch#81A1C1git.file.conflicted.dim#8C515Bgit.file.stashed.dim#A5AAB2git.file.deleted.dim#8C515Bgit.file.renamed.dim#688F9Egit.file.modified.dim#A99671git.file.staged.dim#7A8E71git.file.untracked.dim#647B94git.file.typechanged.dim#856E87git.file.ahead.dim#7A8E71git.file.behind.dim#A99671git.file.branch.dim#647B94file.directory#81A1C1file.executable#A3BE8Cfile.special#B48EADfile.archive#D08770file.project#EBCB8BInspect defaults, selected preset overrides and direct consumers. File status icons and gutter signs retain their own meanings. Native adapters own units and supported mappings.
Selected glyph representation: unicode. Git counts and ahead/behind composition stay in Starship’s native adapter. The bundled font previews default symbols; Unicode values identify variants requiring other glyphs.
emphasis.headingtrueNonetrueConsumers: components, glow, neovim
Glow h6 remains subdued; other heading consumers use this emphasis.
emphasis.git.file.conflicted.boldtrueNonetrueConsumers: components, starship
emphasis.git.file.conflicted.dimfalseNonefalseConsumers: components, starship
emphasis.git.file.stashed.boldfalseNonefalseConsumers: components, starship
emphasis.git.file.stashed.dimtrueNonetrueConsumers: components, starship
emphasis.git.file.deleted.boldfalseNonefalseConsumers: components, starship
emphasis.git.file.deleted.dimfalseNonefalseConsumers: components, starship
emphasis.git.file.renamed.boldfalseNonefalseConsumers: components, starship
emphasis.git.file.renamed.dimfalseNonefalseConsumers: components, starship
emphasis.git.file.modified.boldfalseNonefalseConsumers: components, starship
emphasis.git.file.modified.dimfalseNonefalseConsumers: components, starship
emphasis.git.file.staged.boldfalseNonefalseConsumers: components, starship
emphasis.git.file.staged.dimfalseNonefalseConsumers: components, starship
emphasis.git.file.untracked.boldfalseNonefalseConsumers: components, starship
emphasis.git.file.untracked.dimfalseNonefalseConsumers: components, starship
emphasis.git.file.typechanged.boldfalseNonefalseConsumers: components, starship
emphasis.git.file.typechanged.dimfalseNonefalseConsumers: components, starship
emphasis.git.file.ahead.boldfalseNonefalseConsumers: components, starship
emphasis.git.file.ahead.dimfalseNonefalseConsumers: components, starship
emphasis.git.file.behind.boldfalseNonefalseConsumers: components, starship
emphasis.git.file.behind.dimfalseNonefalseConsumers: components, starship
emphasis.git.file.branch.boldfalseNonefalseConsumers: components, starship
emphasis.git.file.branch.dimfalseNonefalseConsumers: components, starship
symbol.separator.section.left""None""">"U+E0B0
symbol.separator.section.right""None"""<"U+E0B2
symbol.separator.component.left""None""">"U+E0B1
symbol.separator.component.right""None"""<"U+E0B3
symbol.git.file.conflicted""None"""!"U+F071
Consumers: components, starship
symbol.git.file.stashed""None"""s"U+F187
Consumers: components, starship
symbol.git.file.deleted""None"""-"U+F1F8
Consumers: components, starship
symbol.git.file.renamed""None"""r"U+F02B
Consumers: components, starship
symbol.git.file.modified""None"""~"U+F040
Consumers: components, starship
symbol.git.file.staged(empty)None(empty)(empty)Consumers: components, starship
symbol.git.file.untracked""None"""?"U+F059
Consumers: components, starship
symbol.git.file.typechanged""None"""t"U+F074
Consumers: components, starship
symbol.git.file.ahead""None"""^"U+F062
Consumers: components, starship
symbol.git.file.behind""None"""v"U+F063
Consumers: components, starship
symbol.git.file.branch""None"""@"U+F418
Consumers: components, starship, zellij
symbol.git.hunk.add"┃"None"┃""+"U+2503
Consumers: components, neovim
symbol.git.hunk.change"┃"None"┃""~"U+2503
Consumers: components, neovim
symbol.git.hunk.delete"▁"None"▁""-"U+2581
Consumers: components, neovim
symbol.git.hunk.topdelete"^"None"^""^"U+005E
Consumers: components, neovim
symbol.git.hunk.changedelete"~"None"~""~"U+007E
Consumers: components, neovim
symbol.git.hunk.untracked"┆"None"┆""?"U+2506
Consumers: components, neovim
symbol.git.staged_hunk.add"┃"None"┃""+"U+2503
Consumers: components, neovim
symbol.git.staged_hunk.change"┃"None"┃""~"U+2503
Consumers: components, neovim
symbol.git.staged_hunk.delete"▁"None"▁""-"U+2581
Consumers: components, neovim
symbol.git.staged_hunk.topdelete"▔"None"▔""^"U+2594
Consumers: components, neovim
symbol.git.staged_hunk.changedelete"~"None"~""~"U+007E
Consumers: components, neovim
symbol.git.branch_hunk.add"│"None"│""+"U+2502
Consumers: components, neovim
symbol.git.branch_hunk.change"│"None"│""~"U+2502
Consumers: components, neovim
symbol.git.branch_hunk.delete"_"None"_""-"U+005F
Consumers: components, neovim
symbol.git.branch_hunk.topdelete"^"None"^""^"U+005E
Consumers: components, neovim
Follow a component into its building blocks or into the interfaces that use it. Code remains organized by capability.
Canonical palette, semantic roles, ANSI slots and explicit blend recipes.
Used by: text, heading, git-state, status, selection, keyhint
Source: design-system/config.json · design-system/tokens.json
Readable normal, strong and muted text.
Composes: theme
Used by: metadata-row, tab-label, code-and-diff, file-listing
Source: design-system/components.json
Heading color and shared emphasis, with native exceptions documented per consumer.
Composes: theme
Used by: code-and-diff
Source: design-system/components.json · design-system/tokens.json
Git state components pair symbols, semantic colors and supported emphasis without conflating file status and hunk meanings.
Composes: theme
Used by: file-listing, cli
Source: design-system/components.json · design-system/tokens.json · design-system/adapters/starship.toml.in · nvim/lua/gitsignsconfig.lua · nvim/lua/git-branch-signs.lua
Success, warning, error, attention, idle and unknown states retain labels or glyphs.
Composes: theme
Used by: metadata-row, tab-label, code-and-diff
Source: design-system/components.json
Focused selection and inactive state.
Composes: theme
Used by: metadata-row, tab-label
Source: design-system/components.json
Native key notation with shared emphasis.
Composes: theme
Used by: picker, status-bar
Source: design-system/components.json
A selectable identity with nearby status and metadata.
Composes: text, status, selection
Used by: picker
Name, active state, attention and zoom.
Composes: text, status, selection
Used by: status-bar
Source: zellij/status/src/main.rs · design-system/adapters/tmux.conf.in
File kinds, exact byte sizes and native index/worktree Git indicators in listings and bounded directory previews.
Used by: cli
Source: design-system/adapters/eza.json · sh/alias · bin/fzf-path-preview
Search, results, selection, preview and cancellation.
Composes: metadata-row, keyhint
Used by: browse-inspect, neovim
Source: bin/zellij-picker · nvim/lua/fzfconfig.lua
Persistent navigation and attention.
Source: zellij/status/src/main.rs · design-system/adapters/tmux.conf.in
Syntax and change states with staged and unstaged distinctions.
Composes: text, status, heading
Source: design-system/adapters/neovim.json · design-system/adapters/syntax.json
Browse a collection and inspect a preview before accepting.
Composes: picker
Source: bin/zellij-picker · bin/fzf-path-preview
Tab/session switching and persistent attention.
Composes: browse-inspect, status-bar
Used by: Complete interface
Source: zellij/config.kdl
Editing, diagnostics, diffs and navigation.
Composes: picker, code-and-diff, status-bar
Used by: Complete interface
Source: nvim/init.lua
Native styles, window/session navigation and attention.
Composes: browse-inspect, status-bar
Used by: Complete interface
Source: rc/tmux.conf
Pagers, Markdown rendering and ordinary command output.
Composes: code-and-diff, git-state, file-listing
Used by: Complete interface
Source: sh/alias · git/gitconfig
Mapped settings are distinct from exercised application behavior. Coverage statements describe local verification; Linux runs are configured in CI and require an actual successful run.
Source: kitty/kittyconf · design-system/generated/kitty.conf
Source: nvim/lua/dotfiles-theme.lua · design-system/adapters/neovim.json
Source: design-system/adapters/zellij.json · zellij/status/src/theme.rs
Source: design-system/adapters/tmux.conf.in · bin/tmux-claude-state · design-system/adapters/tmux-states.json
Source: bin/dotfiles-fzf · bin/zellij-picker · nvim/lua/fzfconfig.lua
Source: design-system/adapters/eza.json · sh/alias · bin/fzf-path-preview
Source: design-system/adapters/syntax.json · design-system/generated/delta.gitconfig
Source: design-system/adapters/glow.json · sh/alias
Source: sh/profile · design-system/adapters/starship.toml.in · bin/dotfiles-theme
Source: design-system/adapters/starship.toml.in · design-system/tokens.json · design-system/components.json
Source: nvim/init.lua · presenterm/themes/nord.yaml · btop/btop.conf · wezterm.lua · rc/Xresources · mail/neomuttrc · claude-tail/themes/Nord.tmTheme
make test-thememake test-theme-nativemake test-theme-presentationmake test-zellij-status test-zellijThe first check validates definitions, composition, deterministic generation, wiring, failures and plain output. Native checks require Kitty’s CLI, Neovim, tmux, fzf, bat, delta, Glow, bottom, the pinned Zellij runtime and built status artifact, and the three pinned Neovim plugins from nvim/lazy-lock.json; --surface can run a single integration. The fixture runner uses uv and pyte. Presentation checks additionally require Starship 1.27.0 and exercise disposable Git repositories and native reloads. The full Zellij workflow checks additionally need the pane-navigation artifact described in the Zellij guide.
Regression baselines are named for their preset; the native runner selects the baseline directory from generated theme metadata. Unicode retains the preset’s root directory; ASCII recordings go into its ascii/ subdirectory in both baselines and saved captures, so recording a fallback cannot replace the Unicode reference. That metadata records provenance, not runtime dispatch. theme-generate never changes regression baselines. The Nord preset documents the initial normalization.
To intentionally replace native baselines, run uv run --script scripts/test-theme-native.py --record and inspect both the JSON diff and images. A recorded baseline is a candidate until reviewed; recording is not user approval. Version changes and volatile layout must be investigated before accepting a new baseline. A changed shared role or native highlight mapping must fail the affected detector.
Add its purpose, atomic level, composition, implementations and source locations to the catalog. Use existing roles where meanings agree; add a distinct role when a meaningful state would otherwise be lost. Keep application-specific field names in adapters. Supported native configuration takes precedence over patches or replacements.
Document unavailable customization in the integration inventory, including the owning application or plugin and what remains unverified. Verbatim pane output, literal color previews and filetype icon colors have independent owners. Optional applications are listed as gaps rather than silently claimed as migrated.
Eza consumes the generated native adapter through ~/.config/eza/theme.yml, installed by make shell. File kinds use shared file.* roles; native Git metadata uses shared git.file.* roles. ll and la retain exact byte sizes, and lt and fzf directory previews retain bounded trees and native index/worktree indicators. Previewed files use the generated bat theme through BAT_THEME. The shell login defaults reuse the generated fzf palette instead of resetting it to literal Nord colors.
Eza owns its Git letter pairs and file icons. Shared glyph tokens cannot replace those markers, and its single new style cannot give staged-new and untracked files independent colors; the two Git columns preserve that distinction. The integration inventory records these native limits. Legacy LS_COLORS and EZA_COLORS are removed only for eza so they do not override the selected preset.