-
Notifications
You must be signed in to change notification settings - Fork 0
Highlight Groups
Neotheme defines a small set of owned semantic groups, then maps Vim, Tree-sitter, LSP, diagnostics, terminal colors, and integrations onto the resolved palette.
| Group | Palette role | Attributes |
|---|---|---|
NeothemeText |
text.primary foreground |
None |
NeothemeTextBright |
text.bright foreground |
None |
NeothemeTextStrong |
text.strong foreground |
Controlled by bold
|
NeothemeTextMuted |
text.muted foreground |
None |
NeothemeSurfaceDark |
surface.dark background |
None |
NeothemeSurface |
surface.base background |
None |
NeothemeSurfaceRaised |
surface.raised background |
None |
NeothemeSurfaceSelected |
surface.selected background |
None |
NeothemeBorder |
surface.border foreground |
None |
| Group | Palette role | Attributes |
|---|---|---|
NeothemeComment |
syntax.comment |
Controlled by italic.comments
|
NeothemeString |
syntax.string |
Controlled by italic.strings
|
NeothemeKeyword |
syntax.keyword |
Controlled by bold
|
NeothemeFunction |
syntax.function_name |
None |
NeothemeNumber |
syntax.literal |
None |
NeothemeType |
syntax.type |
None |
NeothemeProperty |
syntax.property |
None |
NeothemeOperator |
syntax.operator |
Controlled by italic.operators
|
NeothemePunctuation |
syntax.punctuation |
None |
| Group | Palette role | Attributes |
|---|---|---|
NeothemeError |
diagnostic.error |
Controlled by bold
|
NeothemeWarning |
diagnostic.warning |
Controlled by bold
|
NeothemeInformation |
diagnostic.information |
Controlled by bold
|
NeothemeHint |
diagnostic.hint |
None |
NeothemeSuccess |
diagnostic.success |
Controlled by bold
|
NeothemeAdded |
version_control.added |
None |
NeothemeChanged |
version_control.changed |
None |
NeothemeRemoved |
version_control.removed |
None |
| Group | Definition |
|---|---|
NeothemeSidebar |
text.primary on surface.dark
|
NeothemeSidebarSign |
surface.muted on surface.dark
|
Help and quickfix windows receive these groups through a window-local winhighlight mapping.
Core highlights cover:
- Standard Vim syntax groups
- Editor, inactive window, cursor line, and color column
- Search, current search, substitute, matching, and focus states
- Diff, added, changed, removed, and conflict states
- Line numbers, signs, folds, and separators
- Floats, shadows, titles, borders, and footers
- Popup menu, completion match, hints, and scrollbar states
- Messages, prompts, questions, errors, and warnings
- Quickfix, statusline, tabline, visual, whitespace, and spelling groups
Many standard groups link to a Neotheme-owned group; others combine foreground, background, and attributes from multiple semantic roles.
Tree-sitter mappings include:
- Variables, parameters, members, constants, modules, labels, and attributes
- Strings, documentation strings, escapes, regular expressions, booleans, and numbers
- Functions, methods, constructors, operators, and types
- Keywords, directives, punctuation, comments, and comment diagnostics
- Markup headings, emphasis, quotes, math, links, raw content, and lists
- Diff captures and markup tags
Neotheme maps standard LSP semantic token types to matching Tree-sitter captures. It also defines:
- Reference text, read, write, and target states
- Inlay hints, code lenses, and active signature parameters
- Deprecated and unnecessary diagnostics
- Common semantic modifiers such as readonly, static, declaration, and default library
- Readonly and default-library type modifier specializations
For each diagnostic severity (Error, Warn, Info, Hint, and Ok), Neotheme defines base, virtual text, virtual lines, underline, floating, and sign groups.
Neotheme sets every ANSI terminal slot from semantic roles:
| Index | Semantic role |
|---|---|
| 0 | surface.base |
| 1 | version_control.conflict |
| 2 | diagnostic.success |
| 3 | diagnostic.warning |
| 4 | syntax.property |
| 5 | diagnostic.hint |
| 6 | text.muted |
| 7 | text.primary |
| 8 | surface.base |
| 9 | diagnostic.error |
| 10 | diagnostic.success |
| 11 | diagnostic.warning |
| 12 | diagnostic.information |
| 13 | diagnostic.hint |
| 14 | text.muted |
| 15 | text.on_error |
terminal_color_background uses surface.base; terminal_color_foreground uses text.primary.
Use Neovim's built-in commands:
:highlight NeothemeKeyword
:highlight Normal
:highlight @functionFrom Lua:
print(vim.inspect(vim.api.nvim_get_hl(0, { name = "NeothemeKeyword", link = false })))See Palette Customization to change the roles these groups consume.