darcula.nvim/lua/lush_theme/darcula.lua
Claude 969db6277e
refactor!: rename theme from darcula-solid to darcula
BREAKING CHANGE: This is a full rename from "darcula-solid" to "darcula"

**Files renamed:**
- colors/darcula-solid.vim → colors/darcula.vim
- lua/lush_theme/darcula-solid.lua → lua/lush_theme/darcula.lua

**Updated references:**
- All colorscheme commands: :colorscheme darcula-solid → :colorscheme darcula
- All require statements: require('lush_theme.darcula-solid') → require('lush_theme.darcula')
- Updated documentation in README.md and DEBUGGING.md
- Updated customization examples

**Migration guide for users:**

Users need to update their Neovim configuration:

Before:
```lua
vim.cmd("colorscheme darcula-solid")
```

After:
```lua
vim.cmd("colorscheme darcula")
```

For custom themes extending this theme:
```lua
-- Before
local darcula_solid = require('lush_theme.darcula-solid')

-- After
local darcula = require('lush_theme.darcula')
```

**Note:** GitHub repository URLs in documentation remain unchanged
(briones-gabriel/darcula-solid.nvim) until repository is renamed separately.
2025-11-15 13:10:08 +00:00

877 lines
35 KiB
Lua

-- darcula.nvim
-- A high-fidelity port of the JetBrains Darcula theme for Neovim
-- Author: brianpooe
-- License: MIT
local lush = require("lush")
local hsl = lush.hsl
-- The canonical JetBrains Darcula color palette
-- Based on analysis of github.com/bulenkov/Darcula (official implementation)
-- and validated against doums/darcula and rokoroku/vscode-theme-darcula
local p = {
-- Core Editor Colors (from official sources)
bg = hsl("#2B2B2B"), -- Editor background
bg_light = hsl("#3C3F41"), -- UI elements (sidebars, status bars, tool windows)
bg_gutter = hsl("#313335"), -- Gutter background
bg_darker = hsl("#242424"), -- Darker background for contrast
bg_current_line = hsl("#323232"), -- Current line highlight
-- Selection and Search
bg_visual = hsl("#214283"), -- Selection background (deep desaturated blue)
bg_search = hsl("#32593D"), -- Primary search result
bg_search_other = hsl("#4D4D2F"), -- Other search occurrences
-- Text Colors
fg = hsl("#A9B7C6"), -- Default foreground (parameters, plain text)
fg_dark = hsl("#606366"), -- Gutter numbers, inactive elements
fg_comment = hsl("#808080"), -- Comments
fg_light = hsl("#BBBBBB"), -- Lighter text
-- Syntax Colors (from canonical Darcula)
keyword = hsl("#CC7832"), -- Keywords (if, for, return), storage classes
string = hsl("#6A8759"), -- String literals (darker green per JetBrains)
string_escape = hsl("#CC7832"), -- Escape sequences use keyword color
number = hsl("#6897BB"), -- Numeric constants
-- Function/Method Colors
function_call = hsl("#FFC66D"), -- Function and method invocations
annotation = hsl("#BBB529"), -- Annotations, decorators, attributes
-- Type Colors
type_name = hsl("#769AA5"), -- Classes, interfaces, types (teal-blue)
-- Variable/Constant Colors
constant = hsl("#9876AA"), -- Named constants, enum members
member_variable = hsl("#9876AA"), -- Instance/class variables (often italicized)
-- Diagnostic Colors (from JetBrains spec)
error = hsl("#BC3F3C"), -- Error text and underlines
warning = hsl("#BE9117"), -- Warning text and underlines
info = hsl("#525A52"), -- Informational diagnostics
hint = hsl("#499C54"), -- Success/hint green
-- Diff/VCS Colors
diff_add = hsl("#4A8F4A"), -- Added lines background
diff_modified = hsl("#385570"), -- Modified lines background
diff_delete = hsl("#632F34"), -- Deleted lines background
-- Additional UI Colors
border = hsl("#616161"), -- UI borders
border_dark = hsl("#424242"), -- Darker border variant
gray = hsl("#606060"), -- Various UI elements
gray_light = hsl("#767676"), -- Lighter gray
-- Special Colors
white = hsl("#FFFFFF"),
blue = hsl("#287BDE"), -- Links, special blues
cyan_bright = hsl("#5394EC"), -- Info, links
pink = hsl("#CB77B4"), -- Tags, special syntax
}
-- Terminal colors matching JetBrains terminal
vim.g.terminal_color_0 = "#2B2B2B" -- black
vim.g.terminal_color_1 = "#BC3F3C" -- red (using error color)
vim.g.terminal_color_2 = "#4A8F4A" -- green (using diff add)
vim.g.terminal_color_3 = "#BE9117" -- yellow (using warning)
vim.g.terminal_color_4 = "#6897BB" -- blue (using number color)
vim.g.terminal_color_5 = "#9876AA" -- magenta (using constant)
vim.g.terminal_color_6 = "#5394EC" -- cyan
vim.g.terminal_color_7 = "#A9B7C6" -- white
vim.g.terminal_color_8 = "#606366" -- bright black
vim.g.terminal_color_9 = "#FF6B68" -- bright red
vim.g.terminal_color_10 = "#A8C023" -- bright green
vim.g.terminal_color_11 = "#FFC66D" -- bright yellow
vim.g.terminal_color_12 = "#6FB3D2" -- bright blue
vim.g.terminal_color_13 = "#D197D9" -- bright magenta
vim.g.terminal_color_14 = "#4DD0E1" -- bright cyan
vim.g.terminal_color_15 = "#FFFFFF" -- bright white
---@diagnostic disable: undefined-global
return lush(function()
return {
-- == Core Neovim UI Groups == --
Normal({ bg = p.bg, fg = p.fg }),
NormalNC({ bg = p.bg, fg = p.fg }), -- Non-current windows
NormalFloat({ bg = p.bg_light, fg = p.fg }), -- Floating windows (LSP hover, etc.)
FloatBorder({ bg = p.bg_light, fg = p.border }),
-- Line Numbers and Signs
SignColumn({ bg = p.bg, fg = p.fg_dark }),
LineNr({ bg = p.bg_gutter, fg = p.fg_dark }),
CursorLineNr({ bg = p.bg_gutter, fg = p.fg, gui = "bold" }),
-- Cursor and Current Line
CursorLine({ bg = p.bg_current_line }),
CursorColumn({ bg = p.bg_current_line }),
ColorColumn({ bg = p.bg_light }),
-- Visual Selection
Visual({ bg = p.bg_visual }),
VisualNOS({ bg = p.bg_visual }),
-- Popup Menu
Pmenu({ bg = p.bg_light, fg = p.fg }),
PmenuSel({ bg = p.bg_visual, fg = p.fg }),
PmenuSbar({ bg = p.bg_light }),
PmenuThumb({ bg = p.fg_dark }),
-- Status and Tab Lines
StatusLine({ bg = p.bg_light, fg = p.fg }),
StatusLineNC({ bg = p.bg_light, fg = p.fg_dark }),
TabLine({ bg = p.bg_gutter, fg = p.fg_dark }),
TabLineFill({ bg = p.bg_gutter }),
TabLineSel({ bg = p.bg_light, fg = p.fg, gui = "bold" }),
-- Window Separators
VertSplit({ fg = p.fg_dark, bg = p.bg }),
WinSeparator({ fg = p.fg_dark, bg = p.bg }),
-- Search
Search({ bg = p.bg_search }),
IncSearch({ bg = p.bg_search_other }),
CurSearch({ bg = p.bg_search }),
Substitute({ bg = p.warning, fg = p.bg }),
-- Messages and UI Elements
Title({ fg = p.keyword, gui = "bold" }),
Directory({ fg = p.number }),
ErrorMsg({ fg = p.error }),
WarningMsg({ fg = p.warning }),
MoreMsg({ fg = p.string }),
Question({ fg = p.number }),
ModeMsg({ fg = p.fg }),
Conceal({ fg = p.fg_dark, bg = p.bg }),
Folded({ fg = p.fg_comment, bg = p.bg_darker }),
FoldColumn({ bg = p.bg_gutter, fg = p.fg_dark }),
-- Matching
MatchParen({ bg = p.gray, fg = p.function_call }),
-- Special Characters
NonText({ fg = p.fg_dark }),
SpecialKey({ fg = p.gray }),
Whitespace({ fg = p.gray }),
EndOfBuffer({ fg = p.bg }),
-- Spell Checking
SpellBad({ sp = p.error, gui = "undercurl" }),
SpellCap({ sp = p.warning, gui = "undercurl" }),
SpellLocal({ sp = p.info, gui = "undercurl" }),
SpellRare({ sp = p.constant, gui = "undercurl" }),
-- == Legacy Syntax Groups (Fallback when Tree-sitter is disabled) == --
Comment({ fg = p.fg_comment, gui = "italic" }),
String({ fg = p.string }),
Character({ fg = p.string }),
Number({ fg = p.number }),
Float({ fg = p.number }),
Boolean({ fg = p.keyword, gui = "italic" }),
Keyword({ fg = p.keyword, gui = "bold" }),
Conditional({ fg = p.keyword, gui = "bold" }),
Repeat({ fg = p.keyword, gui = "bold" }),
Statement({ fg = p.keyword, gui = "bold" }),
Operator({ fg = p.fg }),
Exception({ fg = p.keyword, gui = "bold" }),
Identifier({ fg = p.fg }),
Function({ fg = p.function_call }),
Type({ fg = p.type_name }),
StorageClass({ fg = p.keyword }),
Structure({ fg = p.keyword }),
Typedef({ fg = p.keyword }),
Constant({ fg = p.constant }),
PreProc({ fg = p.keyword }),
Include({ fg = p.keyword }),
Define({ fg = p.keyword }),
Macro({ fg = p.annotation }),
PreCondit({ fg = p.keyword }),
Special({ fg = p.fg }),
SpecialChar({ fg = p.keyword }),
Tag({ fg = p.function_call }), -- HTML tags in legacy syntax
Delimiter({ fg = p.fg }),
SpecialComment({ fg = p.gray_light, gui = "italic" }),
Debug({ fg = p.pink }),
-- HTML Legacy Groups
htmlTag({ fg = p.fg }),
htmlEndTag({ fg = p.fg }),
htmlTagName({ fg = p.function_call }),
htmlArg({ fg = p.member_variable, gui = "italic" }),
htmlSpecialChar({ fg = p.keyword }),
htmlString({ fg = p.string }),
htmlComment({ fg = p.fg_comment, gui = "italic" }),
htmlCommentPart({ fg = p.fg_comment, gui = "italic" }),
htmlSpecialTagName({ fg = p.function_call }),
htmlLink({ fg = p.string, gui = "underline" }),
htmlBold({ gui = "bold" }),
htmlItalic({ gui = "italic" }),
htmlH1({ fg = p.function_call, gui = "bold" }),
htmlH2({ fg = p.function_call, gui = "bold" }),
htmlH3({ fg = p.function_call, gui = "bold" }),
htmlH4({ fg = p.function_call, gui = "bold" }),
htmlH5({ fg = p.function_call, gui = "bold" }),
htmlH6({ fg = p.function_call, gui = "bold" }),
Todo({ fg = p.annotation, bg = p.bg_darker, gui = "bold" }),
Error({ fg = p.error }),
Underlined({ fg = p.blue, gui = "underline" }),
-- == Tree-sitter Highlight Groups == --
-- Keywords and Control Flow
["@keyword"] = { fg = p.keyword, gui = "bold" },
["@keyword.coroutine"] = { fg = p.keyword, gui = "bold" },
["@keyword.function"] = { fg = p.keyword, gui = "bold" },
["@keyword.operator"] = { fg = p.keyword, gui = "bold" },
["@keyword.return"] = { fg = p.keyword, gui = "bold" },
["@keyword.import"] = { fg = p.keyword, gui = "bold" },
["@keyword.type"] = { fg = p.keyword, gui = "bold" },
["@keyword.modifier"] = { fg = p.keyword, gui = "bold" },
["@keyword.repeat"] = { fg = p.keyword, gui = "bold" },
["@keyword.debug"] = { fg = p.keyword, gui = "bold" },
["@keyword.exception"] = { fg = p.keyword, gui = "bold" },
["@keyword.conditional"] = { fg = p.keyword, gui = "bold" },
["@keyword.conditional.ternary"] = { fg = p.keyword, gui = "bold" },
["@keyword.directive"] = { fg = p.keyword, gui = "bold" },
["@keyword.directive.define"] = { fg = p.keyword, gui = "bold" },
-- Legacy aliases (for backward compatibility)
["@conditional"] = { fg = p.keyword, gui = "bold" },
["@repeat"] = { fg = p.keyword, gui = "bold" },
["@exception"] = { fg = p.keyword, gui = "bold" },
["@include"] = { fg = p.keyword, gui = "bold" },
-- Comments
["@comment"] = { fg = p.fg_comment, gui = "italic" },
["@comment.documentation"] = { fg = p.fg_comment, gui = "italic" },
["@comment.error"] = { fg = p.error, gui = "bold" },
["@comment.warning"] = { fg = p.warning, gui = "bold" },
["@comment.todo"] = { fg = p.annotation, bg = p.bg_darker, gui = "bold" },
["@comment.note"] = { fg = p.hint, gui = "bold" },
-- Strings
["@string"] = { fg = p.string },
["@string.documentation"] = { fg = p.string, gui = "italic" },
["@string.regexp"] = { fg = p.string },
["@string.escape"] = { fg = p.keyword }, -- Escape sequences use keyword color
["@string.special"] = { fg = p.keyword },
["@string.special.symbol"] = { fg = p.constant }, -- Symbols in Ruby, Lisp, etc.
["@string.special.url"] = { fg = p.blue, gui = "underline" },
["@string.special.path"] = { fg = p.string },
["@character"] = { fg = p.string },
["@character.special"] = { fg = p.keyword },
-- Legacy alias (for backward compatibility)
["@string.regex"] = { fg = p.string },
-- Numbers and Booleans
["@number"] = { fg = p.number },
["@number.float"] = { fg = p.number },
["@boolean"] = { fg = p.keyword, gui = "italic" },
-- Legacy alias (for backward compatibility)
["@float"] = { fg = p.number },
-- Functions and Methods
["@function"] = { fg = p.function_call },
["@function.call"] = { fg = p.function_call },
["@function.builtin"] = { fg = p.function_call },
["@function.macro"] = { fg = p.function_call },
["@function.method"] = { fg = p.function_call },
["@function.method.call"] = { fg = p.function_call },
["@constructor"] = { fg = p.function_call },
-- Legacy aliases (for backward compatibility)
["@method"] = { fg = p.function_call },
["@method.call"] = { fg = p.function_call },
-- Types
["@type"] = { fg = p.type_name }, -- Darcula uses teal-blue for types
["@type.builtin"] = { fg = p.keyword }, -- Built-in types styled as keywords
["@type.qualifier"] = { fg = p.keyword },
["@type.definition"] = { fg = p.type_name },
["@attribute"] = { fg = p.annotation },
["@attribute.builtin"] = { fg = p.annotation },
["@property"] = { fg = p.member_variable },
-- Legacy aliases (for backward compatibility)
["@storageclass"] = { fg = p.keyword },
["@field"] = { fg = p.member_variable },
-- Variables and Parameters
["@variable"] = { fg = p.fg },
["@variable.builtin"] = { fg = p.constant, gui = "italic" },
["@variable.parameter"] = { fg = p.fg },
["@variable.parameter.builtin"] = { fg = p.constant, gui = "italic" },
["@variable.member"] = { fg = p.member_variable, gui = "italic" },
-- Special handling for 'this' keyword (should be distinct from member variables)
-- Multiple approaches to catch 'this' keyword in different contexts
["@variable.builtin.this"] = { fg = p.keyword, gui = "italic" },
["@keyword.this"] = { fg = p.keyword, gui = "italic" },
["@variable.language"] = { fg = p.keyword, gui = "italic" }, -- Used by some parsers for 'this'
["@variable.language.this"] = { fg = p.keyword, gui = "italic" },
-- Constants
["@constant"] = { fg = p.constant },
["@constant.builtin"] = { fg = p.constant },
["@constant.macro"] = { fg = p.constant },
-- Punctuation and Operators
["@punctuation.delimiter"] = { fg = p.fg },
["@punctuation.bracket"] = { fg = p.fg },
["@punctuation.special"] = { fg = p.keyword }, -- String interpolation, special symbols
["@operator"] = { fg = p.fg },
-- Tags (HTML/XML/JSX/TSX)
["@tag"] = { fg = p.function_call }, -- Tag names should be yellow in Darcula
["@tag.builtin"] = { fg = p.function_call }, -- HTML5 tags
["@tag.attribute"] = { fg = p.member_variable, gui = "italic" },
["@tag.delimiter"] = { fg = p.fg },
-- HTML specific
["@text.html"] = { fg = p.fg },
["@tag.html"] = { fg = p.function_call },
["@tag.attribute.html"] = { fg = p.member_variable, gui = "italic" },
["@tag.delimiter.html"] = { fg = p.fg },
["@constant.html"] = { fg = p.string }, -- attribute values
["@string.html"] = { fg = p.string },
-- XML specific
["@tag.xml"] = { fg = p.function_call },
["@tag.attribute.xml"] = { fg = p.member_variable, gui = "italic" },
["@tag.delimiter.xml"] = { fg = p.fg },
["@string.xml"] = { fg = p.string },
-- JSX/TSX specific
["@tag.tsx"] = { fg = p.function_call },
["@tag.jsx"] = { fg = p.function_call },
["@tag.attribute.tsx"] = { fg = p.member_variable, gui = "italic" },
["@tag.attribute.jsx"] = { fg = p.member_variable, gui = "italic" },
["@constructor.tsx"] = { fg = p.function_call }, -- Component names
["@constructor.jsx"] = { fg = p.function_call },
-- Angular specific (custom components in templates)
-- Angular components can be captured in multiple ways depending on parser
["@constructor.html"] = { fg = p.function_call }, -- Angular components in HTML
["@type.html"] = { fg = p.function_call }, -- Angular components that appear as types
["@tag.component"] = { fg = p.function_call }, -- Web components / custom elements
["@tag.custom"] = { fg = p.function_call }, -- Custom tags
-- Markup (Markdown, reStructuredText, etc.) - New standard
["@markup.strong"] = { gui = "bold" },
["@markup.italic"] = { gui = "italic" },
["@markup.strikethrough"] = { gui = "strikethrough" },
["@markup.underline"] = { gui = "underline" },
["@markup.heading"] = { fg = p.function_call, gui = "bold" },
["@markup.heading.1"] = { fg = p.function_call, gui = "bold" },
["@markup.heading.2"] = { fg = p.function_call, gui = "bold" },
["@markup.heading.3"] = { fg = p.function_call, gui = "bold" },
["@markup.heading.4"] = { fg = p.function_call, gui = "bold" },
["@markup.heading.5"] = { fg = p.function_call, gui = "bold" },
["@markup.heading.6"] = { fg = p.function_call, gui = "bold" },
["@markup.quote"] = { fg = p.fg_comment, gui = "italic" },
["@markup.math"] = { fg = p.number },
["@markup.link"] = { fg = p.blue, gui = "underline" },
["@markup.link.label"] = { fg = p.number },
["@markup.link.url"] = { fg = p.string, gui = "underline" },
["@markup.raw"] = { fg = p.string },
["@markup.raw.block"] = { fg = p.string },
["@markup.list"] = { fg = p.keyword },
["@markup.list.checked"] = { fg = p.hint },
["@markup.list.unchecked"] = { fg = p.fg_dark },
-- Legacy @text.* groups (for backward compatibility)
["@text"] = { fg = p.fg },
["@text.strong"] = { gui = "bold" },
["@text.emphasis"] = { gui = "italic" },
["@text.underline"] = { gui = "underline" },
["@text.strike"] = { gui = "strikethrough" },
["@text.title"] = { fg = p.function_call, gui = "bold" },
["@text.literal"] = { fg = p.string },
["@text.uri"] = { fg = p.string, gui = "underline" },
["@text.reference"] = { fg = p.number },
-- Namespaces and Modules
["@module"] = { fg = p.type_name },
["@module.builtin"] = { fg = p.type_name },
-- Legacy aliases (for backward compatibility)
["@namespace"] = { fg = p.type_name },
["@symbol"] = { fg = p.constant },
-- Labels
["@label"] = { fg = p.keyword },
-- Diff (Version Control)
["@diff.plus"] = { fg = p.hint, bg = p.diff_add },
["@diff.minus"] = { fg = p.error, bg = p.diff_delete },
["@diff.delta"] = { fg = p.warning, bg = p.diff_modified },
-- Special Captures
["@none"] = { fg = "NONE", bg = "NONE" }, -- Disable highlighting
["@conceal"] = { fg = p.fg_dark }, -- Concealed text
["@spell"] = {}, -- Enable spell checking
["@nospell"] = {}, -- Disable spell checking
-- == LSP Semantic Token Support == --
["@lsp.type.class"] = { fg = p.type_name },
["@lsp.type.struct"] = { fg = p.type_name },
["@lsp.type.enum"] = { fg = p.type_name },
["@lsp.type.enumMember"] = { fg = p.constant },
["@lsp.type.interface"] = { fg = p.type_name },
["@lsp.type.typeParameter"] = { fg = p.type_name },
["@lsp.type.namespace"] = { fg = p.type_name },
["@lsp.type.parameter"] = { fg = p.fg },
["@lsp.type.variable"] = { fg = p.fg },
["@lsp.type.property"] = { fg = p.member_variable },
["@lsp.type.function"] = { fg = p.function_call },
["@lsp.type.method"] = { fg = p.function_call },
["@lsp.type.macro"] = { fg = p.annotation },
["@lsp.type.decorator"] = { fg = p.annotation },
-- 'this' keyword handling (multiple semantic token types)
-- NOTE: For changes to take effect, reload with :colorscheme darcula
-- or restart Neovim and ensure LSP is reloaded
["@lsp.type.selfKeyword"] = { fg = p.keyword, gui = "italic" }, -- 'this' in TypeScript/JavaScript
["@lsp.type.selfParameter"] = { fg = p.keyword, gui = "italic" }, -- 'this' as parameter
-- Angular/React component handling
["@lsp.type.component"] = { fg = p.function_call }, -- Angular/React components
["@lsp.type.customElement"] = { fg = p.function_call }, -- Web components
["@lsp.mod.deprecated"] = { gui = "strikethrough" },
["@lsp.mod.readonly"] = { gui = "italic" },
["@lsp.mod.static"] = { gui = "italic" },
["@lsp.mod.abstract"] = { gui = "italic" },
["@lsp.mod.async"] = {},
["@lsp.mod.declaration"] = {},
["@lsp.mod.defaultLibrary"] = { gui = "italic" },
["@lsp.mod.definition"] = {},
["@lsp.mod.modification"] = {},
["@lsp.mod.documentation"] = {},
-- == LSP Diagnostics == --
DiagnosticError({ fg = p.error }),
DiagnosticWarn({ fg = p.warning }),
DiagnosticInfo({ fg = p.info }),
DiagnosticHint({ fg = p.hint }),
DiagnosticVirtualTextError({ fg = p.error, bg = hsl("#3D2929") }),
DiagnosticVirtualTextWarn({ fg = p.warning, bg = hsl("#3D3D29") }),
DiagnosticVirtualTextInfo({ fg = p.info, bg = hsl("#293D48") }),
DiagnosticVirtualTextHint({ fg = p.hint, bg = hsl("#294F33") }),
DiagnosticUnderlineError({ sp = p.error, gui = "undercurl" }),
DiagnosticUnderlineWarn({ sp = p.warning, gui = "undercurl" }),
DiagnosticUnderlineInfo({ sp = p.info, gui = "undercurl" }),
DiagnosticUnderlineHint({ sp = p.hint, gui = "undercurl" }),
DiagnosticFloatingError({ fg = p.error, bg = p.bg_light }),
DiagnosticFloatingWarn({ fg = p.warning, bg = p.bg_light }),
DiagnosticFloatingInfo({ fg = p.info, bg = p.bg_light }),
DiagnosticFloatingHint({ fg = p.hint, bg = p.bg_light }),
DiagnosticSignError({ fg = p.error, bg = p.bg }),
DiagnosticSignWarn({ fg = p.warning, bg = p.bg }),
DiagnosticSignInfo({ fg = p.info, bg = p.bg }),
DiagnosticSignHint({ fg = p.hint, bg = p.bg }),
-- LSP References
LspReferenceText({ bg = p.bg_darker }),
LspReferenceRead({ bg = p.bg_darker }),
LspReferenceWrite({ bg = p.bg_darker, gui = "underline" }),
-- LSP Code Lens
LspCodeLens({ fg = p.gray_light }),
LspCodeLensSeparator({ fg = p.gray }),
-- == Plugin Support == --
-- NvimTree (Enhanced File Explorer)
NvimTreeNormal({ bg = p.bg, fg = p.fg }),
NvimTreeNormalNC({ bg = p.bg, fg = p.fg }),
NvimTreeVertSplit({ fg = p.border_dark, bg = p.bg }),
NvimTreeWinSeparator({ fg = p.border_dark, bg = p.bg }),
NvimTreeEndOfBuffer({ fg = p.bg }),
NvimTreeCursorLine({ bg = p.bg_current_line }),
NvimTreeCursorColumn({ bg = p.bg_current_line }),
NvimTreeStatusLine({ bg = p.bg_light, fg = p.fg }),
NvimTreeStatusLineNC({ bg = p.bg_light, fg = p.fg_dark }),
-- Folders
NvimTreeFolderIcon({ fg = p.number }),
NvimTreeFolderName({ fg = p.fg }),
NvimTreeOpenedFolderName({ fg = p.number, gui = "bold" }),
NvimTreeEmptyFolderName({ fg = p.fg_dark }),
NvimTreeSymlinkFolderName({ fg = p.blue, gui = "italic" }),
-- Files
NvimTreeRootFolder({ fg = p.keyword, gui = "bold" }),
NvimTreeExecFile({ fg = p.hint, gui = "bold" }),
NvimTreeSpecialFile({ fg = p.function_call, gui = "underline" }),
NvimTreeImageFile({ fg = p.constant }),
NvimTreeSymlink({ fg = p.blue, gui = "italic" }),
NvimTreeModifiedFile({ fg = p.warning }),
NvimTreeOpenedFile({ fg = p.number, gui = "bold" }),
NvimTreeHiddenFile({ fg = p.fg_dark }),
-- Git Status
NvimTreeGitDirty({ fg = p.warning }),
NvimTreeGitStaged({ fg = p.hint }),
NvimTreeGitNew({ fg = p.hint }),
NvimTreeGitRenamed({ fg = p.number }),
NvimTreeGitDeleted({ fg = p.error }),
NvimTreeGitMerge({ fg = p.constant }),
NvimTreeGitIgnored({ fg = p.fg_dark }),
-- File Highlights (decorations)
NvimTreeFileDirty({ fg = p.warning }),
NvimTreeFileStaged({ fg = p.hint }),
NvimTreeFileNew({ fg = p.hint }),
NvimTreeFileRenamed({ fg = p.number }),
NvimTreeFileDeleted({ fg = p.error }),
NvimTreeFileMerge({ fg = p.constant }),
NvimTreeFileIgnored({ fg = p.fg_dark }),
-- Folder Highlights (decorations)
NvimTreeFolderDirty({ fg = p.warning }),
NvimTreeFolderStaged({ fg = p.hint }),
NvimTreeFolderNew({ fg = p.hint }),
NvimTreeFolderRenamed({ fg = p.number }),
NvimTreeFolderDeleted({ fg = p.error }),
NvimTreeFolderMerge({ fg = p.constant }),
NvimTreeFolderIgnored({ fg = p.fg_dark }),
-- Clipboard
NvimTreeCutHL({ fg = p.error, gui = "bold" }),
NvimTreeCopiedHL({ fg = p.hint, gui = "bold" }),
-- Bookmarks
NvimTreeBookmarkHL({ fg = p.constant, gui = "bold" }),
-- Diagnostics
NvimTreeLspDiagnosticsError({ fg = p.error }),
NvimTreeLspDiagnosticsWarning({ fg = p.warning }),
NvimTreeLspDiagnosticsInformation({ fg = p.info }),
NvimTreeLspDiagnosticsHint({ fg = p.hint }),
-- Window Picker
NvimTreeWindowPicker({ bg = p.bg_visual, fg = p.function_call, gui = "bold" }),
-- Indent Markers
NvimTreeIndentMarker({ fg = p.bg_darker }),
NvimTreeLiveFilterPrefix({ fg = p.keyword, gui = "bold" }),
NvimTreeLiveFilterValue({ fg = p.function_call, gui = "bold" }),
-- Telescope
TelescopeNormal({ bg = p.bg_light, fg = p.fg }),
TelescopeBorder({ fg = p.border, bg = p.bg_light }),
TelescopePromptBorder({ fg = p.border, bg = p.bg_light }),
TelescopeResultsBorder({ fg = p.border, bg = p.bg_light }),
TelescopePreviewBorder({ fg = p.border, bg = p.bg_light }),
TelescopePromptTitle({ fg = p.keyword, bg = p.bg_light, gui = "bold" }),
TelescopeResultsTitle({ fg = p.function_call, bg = p.bg_light, gui = "bold" }),
TelescopePreviewTitle({ fg = p.number, bg = p.bg_light, gui = "bold" }),
TelescopePromptPrefix({ fg = p.keyword }),
TelescopePromptCounter({ fg = p.fg_dark }),
TelescopeSelection({ bg = p.bg_visual, fg = p.fg }),
TelescopeSelectionCaret({ fg = p.keyword, bg = p.bg_visual }),
TelescopeMultiSelection({ bg = p.bg_darker, fg = p.fg }),
TelescopeMultiIcon({ fg = p.keyword }),
TelescopeMatching({ fg = p.function_call, gui = "bold" }),
TelescopePreviewLine({ bg = p.bg_visual }),
TelescopePreviewMatch({ fg = p.function_call, gui = "bold" }),
-- GitSigns
GitSignsAdd({ fg = p.hint }),
GitSignsAddLn({ bg = p.diff_add }),
GitSignsChange({ fg = p.warning }),
GitSignsChangeLn({ bg = p.diff_modified }),
GitSignsDelete({ fg = p.error }),
GitSignsDeleteLn({ bg = p.diff_delete }),
GitSignsCurrentLineBlame({ fg = p.fg_comment }),
-- Blink.cmp (Completion Menu)
BlinkCmpMenu({ bg = p.bg_light, fg = p.fg }),
BlinkCmpMenuBorder({ fg = p.border, bg = p.bg_light }),
BlinkCmpMenuSelection({ bg = p.bg_visual, fg = p.fg }),
BlinkCmpLabel({ fg = p.fg }),
BlinkCmpLabelDeprecated({ fg = p.fg_dark, gui = "strikethrough" }),
BlinkCmpLabelMatch({ fg = p.function_call, gui = "bold" }),
BlinkCmpLabelDetail({ fg = p.fg_comment }),
BlinkCmpLabelDescription({ fg = p.fg_comment }),
BlinkCmpKind({ fg = p.type_name }),
BlinkCmpKindText({ fg = p.fg }),
BlinkCmpKindMethod({ fg = p.function_call }),
BlinkCmpKindFunction({ fg = p.function_call }),
BlinkCmpKindConstructor({ fg = p.function_call }),
BlinkCmpKindField({ fg = p.member_variable }),
BlinkCmpKindVariable({ fg = p.fg }),
BlinkCmpKindClass({ fg = p.type_name }),
BlinkCmpKindInterface({ fg = p.type_name }),
BlinkCmpKindModule({ fg = p.type_name }),
BlinkCmpKindProperty({ fg = p.member_variable }),
BlinkCmpKindUnit({ fg = p.number }),
BlinkCmpKindValue({ fg = p.constant }),
BlinkCmpKindEnum({ fg = p.type_name }),
BlinkCmpKindKeyword({ fg = p.keyword }),
BlinkCmpKindSnippet({ fg = p.string }),
BlinkCmpKindColor({ fg = p.number }),
BlinkCmpKindFile({ fg = p.fg }),
BlinkCmpKindReference({ fg = p.number }),
BlinkCmpKindFolder({ fg = p.number }),
BlinkCmpKindEnumMember({ fg = p.constant }),
BlinkCmpKindConstant({ fg = p.constant }),
BlinkCmpKindStruct({ fg = p.type_name }),
BlinkCmpKindEvent({ fg = p.keyword }),
BlinkCmpKindOperator({ fg = p.fg }),
BlinkCmpKindTypeParameter({ fg = p.type_name }),
BlinkCmpDoc({ bg = p.bg_light, fg = p.fg }),
BlinkCmpDocBorder({ fg = p.border, bg = p.bg_light }),
BlinkCmpDocCursorLine({ bg = p.bg_current_line }),
BlinkCmpSignatureHelp({ bg = p.bg_light, fg = p.fg }),
BlinkCmpSignatureHelpBorder({ fg = p.border, bg = p.bg_light }),
BlinkCmpSignatureHelpActiveParameter({ fg = p.function_call, gui = "bold" }),
-- nvim-cmp (Alternative Completion)
CmpItemAbbr({ fg = p.fg }),
CmpItemAbbrDeprecated({ fg = p.fg_dark, gui = "strikethrough" }),
CmpItemAbbrMatch({ fg = p.function_call, gui = "bold" }),
CmpItemAbbrMatchFuzzy({ fg = p.function_call }),
CmpItemKind({ fg = p.type_name }),
CmpItemKindText({ fg = p.fg }),
CmpItemKindMethod({ fg = p.function_call }),
CmpItemKindFunction({ fg = p.function_call }),
CmpItemKindConstructor({ fg = p.function_call }),
CmpItemKindField({ fg = p.member_variable }),
CmpItemKindVariable({ fg = p.fg }),
CmpItemKindClass({ fg = p.type_name }),
CmpItemKindInterface({ fg = p.type_name }),
CmpItemKindModule({ fg = p.type_name }),
CmpItemKindProperty({ fg = p.member_variable }),
CmpItemKindUnit({ fg = p.number }),
CmpItemKindValue({ fg = p.constant }),
CmpItemKindEnum({ fg = p.type_name }),
CmpItemKindKeyword({ fg = p.keyword }),
CmpItemKindSnippet({ fg = p.string }),
CmpItemKindColor({ fg = p.number }),
CmpItemKindFile({ fg = p.fg }),
CmpItemKindReference({ fg = p.number }),
CmpItemKindFolder({ fg = p.number }),
CmpItemKindEnumMember({ fg = p.constant }),
CmpItemKindConstant({ fg = p.constant }),
CmpItemKindStruct({ fg = p.type_name }),
CmpItemKindEvent({ fg = p.keyword }),
CmpItemKindOperator({ fg = p.fg }),
CmpItemKindTypeParameter({ fg = p.type_name }),
CmpItemMenu({ fg = p.fg_comment }),
-- Bufferline
BufferLineFill({ bg = p.bg_gutter }),
BufferLineBackground({ bg = p.bg_gutter, fg = p.fg_dark }),
BufferLineBufferVisible({ bg = p.bg_gutter, fg = p.fg }),
BufferLineBufferSelected({ bg = p.bg, fg = p.fg, gui = "bold" }),
BufferLineTab({ bg = p.bg_gutter, fg = p.fg_dark }),
BufferLineTabSelected({ bg = p.bg, fg = p.keyword, gui = "bold" }),
BufferLineTabSeparator({ fg = p.bg_gutter, bg = p.bg_gutter }),
BufferLineTabSeparatorSelected({ fg = p.bg, bg = p.bg }),
BufferLineIndicatorSelected({ fg = p.keyword, bg = p.bg }),
BufferLineCloseButton({ bg = p.bg_gutter, fg = p.fg_dark }),
BufferLineCloseButtonVisible({ bg = p.bg_gutter, fg = p.fg }),
BufferLineCloseButtonSelected({ bg = p.bg, fg = p.error }),
BufferLineModified({ bg = p.bg_gutter, fg = p.warning }),
BufferLineModifiedVisible({ bg = p.bg_gutter, fg = p.warning }),
BufferLineModifiedSelected({ bg = p.bg, fg = p.warning }),
BufferLineDuplicate({ bg = p.bg_gutter, fg = p.fg_dark, gui = "italic" }),
BufferLineDuplicateVisible({ bg = p.bg_gutter, fg = p.fg, gui = "italic" }),
BufferLineDuplicateSelected({ bg = p.bg, fg = p.fg, gui = "bold,italic" }),
BufferLineSeparator({ fg = p.bg_gutter, bg = p.bg_gutter }),
BufferLineSeparatorVisible({ fg = p.bg_gutter, bg = p.bg_gutter }),
BufferLineSeparatorSelected({ fg = p.bg, bg = p.bg }),
BufferLineError({ bg = p.bg_gutter, fg = p.error }),
BufferLineErrorDiagnostic({ bg = p.bg_gutter, fg = p.error }),
BufferLineWarning({ bg = p.bg_gutter, fg = p.warning }),
BufferLineWarningDiagnostic({ bg = p.bg_gutter, fg = p.warning }),
BufferLineInfo({ bg = p.bg_gutter, fg = p.info }),
BufferLineInfoDiagnostic({ bg = p.bg_gutter, fg = p.info }),
BufferLineHint({ bg = p.bg_gutter, fg = p.hint }),
BufferLineHintDiagnostic({ bg = p.bg_gutter, fg = p.hint }),
-- Noice (Command Line UI)
NoicePopup({ bg = p.bg_light, fg = p.fg }),
NoicePopupBorder({ fg = p.border, bg = p.bg_light }),
NoiceCmdline({ bg = p.bg_light, fg = p.fg }),
NoiceCmdlinePopup({ bg = p.bg_light, fg = p.fg }),
NoiceCmdlinePopupBorder({ fg = p.border, bg = p.bg_light }),
NoiceCmdlinePopupTitle({ fg = p.keyword, bg = p.bg_light, gui = "bold" }),
NoiceCmdlineIcon({ fg = p.keyword }),
NoiceCmdlineIconSearch({ fg = p.function_call }),
NoiceConfirm({ bg = p.bg_light, fg = p.fg }),
NoiceConfirmBorder({ fg = p.border, bg = p.bg_light }),
NoiceSplit({ bg = p.bg_light, fg = p.fg }),
NoiceSplitBorder({ fg = p.border, bg = p.bg_light }),
-- Lazy (Plugin Manager)
LazyNormal({ bg = p.bg_light, fg = p.fg }),
LazyButton({ bg = p.bg_darker, fg = p.fg }),
LazyButtonActive({ bg = p.bg_visual, fg = p.fg, gui = "bold" }),
LazyH1({ fg = p.keyword, gui = "bold" }),
LazyH2({ fg = p.function_call }),
LazyComment({ fg = p.fg_comment, gui = "italic" }),
LazyCommit({ fg = p.number }),
LazyCommitType({ fg = p.keyword }),
LazyDimmed({ fg = p.fg_dark }),
LazyProp({ fg = p.member_variable }),
LazyValue({ fg = p.string }),
LazyDir({ fg = p.number }),
LazyUrl({ fg = p.blue, gui = "underline" }),
LazySpecial({ fg = p.function_call }),
LazyReasonPlugin({ fg = p.keyword }),
LazyReasonRuntime({ fg = p.type_name }),
LazyReasonCmd({ fg = p.function_call }),
LazyReasonSource({ fg = p.number }),
LazyReasonFt({ fg = p.string }),
LazyReasonKeys({ fg = p.constant }),
LazyReasonEvent({ fg = p.warning }),
LazyReasonStart({ fg = p.hint }),
LazyProgressDone({ fg = p.hint, gui = "bold" }),
LazyProgressTodo({ fg = p.fg_dark }),
-- Which-Key
WhichKey({ fg = p.keyword, gui = "bold" }),
WhichKeyGroup({ fg = p.function_call }),
WhichKeyDesc({ fg = p.fg }),
WhichKeySeparator({ fg = p.fg_dark }),
WhichKeyFloat({ bg = p.bg_light }),
WhichKeyBorder({ fg = p.border, bg = p.bg_light }),
WhichKeyValue({ fg = p.string }),
-- Indent Blankline
IndentBlanklineChar({ fg = p.bg_darker }),
IndentBlanklineContextChar({ fg = p.fg_dark }),
IndentBlanklineContextStart({ gui = "underline", sp = p.fg_dark }),
IndentBlanklineSpaceChar({ fg = p.bg_darker }),
IndentBlanklineSpaceCharBlankline({ fg = p.bg_darker }),
IblIndent({ fg = p.bg_darker }),
IblScope({ fg = p.fg_dark }),
IblWhitespace({ fg = p.bg_darker }),
-- Neo-tree
NeoTreeNormal({ bg = p.bg, fg = p.fg }),
NeoTreeNormalNC({ bg = p.bg, fg = p.fg }),
NeoTreeDirectoryIcon({ fg = p.number }),
NeoTreeDirectoryName({ fg = p.fg }),
NeoTreeFileName({ fg = p.fg }),
NeoTreeFileNameOpened({ fg = p.number, gui = "bold" }),
NeoTreeFloatBorder({ fg = p.border, bg = p.bg_light }),
NeoTreeFloatTitle({ fg = p.keyword, bg = p.bg_light, gui = "bold" }),
NeoTreeGitAdded({ fg = p.hint }),
NeoTreeGitConflict({ fg = p.error }),
NeoTreeGitDeleted({ fg = p.error }),
NeoTreeGitIgnored({ fg = p.fg_dark }),
NeoTreeGitModified({ fg = p.warning }),
NeoTreeGitUnstaged({ fg = p.warning }),
NeoTreeGitUntracked({ fg = p.hint }),
NeoTreeGitStaged({ fg = p.hint }),
NeoTreeIndentMarker({ fg = p.bg_darker }),
NeoTreeRootName({ fg = p.keyword, gui = "bold" }),
NeoTreeSymbolicLinkTarget({ fg = p.blue }),
NeoTreeTitleBar({ fg = p.keyword, bg = p.bg_light, gui = "bold" }),
NeoTreeWindowsHidden({ fg = p.fg_dark }),
-- Trouble
TroubleNormal({ bg = p.bg_light, fg = p.fg }),
TroubleText({ fg = p.fg }),
TroubleCount({ fg = p.constant, gui = "bold" }),
TroubleCode({ fg = p.fg_comment }),
TroubleFile({ fg = p.number }),
TroubleDirectory({ fg = p.type_name }),
TroubleSource({ fg = p.fg_comment }),
TroubleLocation({ fg = p.fg_dark }),
TroubleIndent({ fg = p.bg_darker }),
TroubleFoldIcon({ fg = p.fg_dark }),
TroubleSignError({ fg = p.error }),
TroubleSignWarning({ fg = p.warning }),
TroubleSignInformation({ fg = p.info }),
TroubleSignHint({ fg = p.hint }),
TroubleError({ fg = p.error }),
TroubleWarning({ fg = p.warning }),
TroubleInformation({ fg = p.info }),
TroubleHint({ fg = p.hint }),
-- Mason
MasonNormal({ bg = p.bg_light, fg = p.fg }),
MasonHeader({ fg = p.keyword, bg = p.bg_darker, gui = "bold" }),
MasonHeaderSecondary({ fg = p.function_call, bg = p.bg_darker, gui = "bold" }),
MasonHighlight({ fg = p.function_call }),
MasonHighlightBlock({ fg = p.bg, bg = p.function_call }),
MasonHighlightBlockBold({ fg = p.bg, bg = p.function_call, gui = "bold" }),
MasonHighlightSecondary({ fg = p.number }),
MasonHighlightBlockSecondary({ fg = p.bg, bg = p.number }),
MasonHighlightBlockBoldSecondary({ fg = p.bg, bg = p.number, gui = "bold" }),
MasonMuted({ fg = p.fg_dark }),
MasonMutedBlock({ fg = p.bg, bg = p.fg_dark }),
MasonMutedBlockBold({ fg = p.bg, bg = p.fg_dark, gui = "bold" }),
MasonError({ fg = p.error }),
MasonWarning({ fg = p.warning }),
MasonHeading({ fg = p.keyword, gui = "bold" }),
-- Alpha/Dashboard
AlphaHeader({ fg = p.function_call, gui = "bold" }),
AlphaButtons({ fg = p.keyword }),
AlphaShortcut({ fg = p.number, gui = "bold" }),
AlphaFooter({ fg = p.fg_comment, gui = "italic" }),
-- Hop/Leap (Jump Navigation)
HopNextKey({ fg = p.error, gui = "bold" }),
HopNextKey1({ fg = p.function_call, gui = "bold" }),
HopNextKey2({ fg = p.number }),
HopUnmatched({ fg = p.fg_dark }),
LeapMatch({ fg = p.error, gui = "bold,underline" }),
LeapLabelPrimary({ fg = p.error, gui = "bold" }),
LeapLabelSecondary({ fg = p.function_call, gui = "bold" }),
LeapBackdrop({ fg = p.fg_dark }),
-- Notify
NotifyERRORBorder({ fg = p.error }),
NotifyWARNBorder({ fg = p.warning }),
NotifyINFOBorder({ fg = p.info }),
NotifyDEBUGBorder({ fg = p.fg_dark }),
NotifyTRACEBorder({ fg = p.constant }),
NotifyERRORIcon({ fg = p.error }),
NotifyWARNIcon({ fg = p.warning }),
NotifyINFOIcon({ fg = p.info }),
NotifyDEBUGIcon({ fg = p.fg_dark }),
NotifyTRACEIcon({ fg = p.constant }),
NotifyERRORTitle({ fg = p.error, gui = "bold" }),
NotifyWARNTitle({ fg = p.warning, gui = "bold" }),
NotifyINFOTitle({ fg = p.info, gui = "bold" }),
NotifyDEBUGTitle({ fg = p.fg_dark, gui = "bold" }),
NotifyTRACETitle({ fg = p.constant, gui = "bold" }),
-- Diff
DiffAdd({ bg = p.diff_add }),
DiffChange({ bg = p.diff_modified }),
DiffDelete({ bg = p.diff_delete }),
DiffText({ bg = p.warning, fg = p.bg }),
-- Neogit
NeogitBranch({ fg = p.constant }),
NeogitRemote({ fg = p.number }),
NeogitHunkHeader({ bg = p.bg_light, fg = p.fg }),
NeogitHunkHeaderHighlight({ bg = p.bg_visual, fg = p.keyword }),
NeogitDiffContextHighlight({ bg = p.bg_current_line }),
NeogitDiffDeleteHighlight({ bg = p.diff_delete }),
NeogitDiffAddHighlight({ bg = p.diff_add }),
}
end)
---@diagnostic enable: undefined-global