From 1eff3e35b475826c9fb522cefad2d97768383206 Mon Sep 17 00:00:00 2001 From: Max Miliano Date: Tue, 29 Oct 2024 16:41:53 -0300 Subject: [PATCH] BREAKING CHANGE: improved performance, styles config use hl group. --- README.md | 18 +- colors/dracula-soft.lua | 556 ++++++++++++++++++++- colors/dracula.lua | 595 +++++++++++++++++++++- doc/dracula.txt | 17 +- lua/barbecue/theme/dracula.lua | 8 +- lua/dracula/config.lua | 38 +- lua/dracula/groups.lua | 323 ++++++++++++ lua/dracula/highlights.lua | 874 --------------------------------- lua/dracula/init.lua | 24 +- 9 files changed, 1518 insertions(+), 935 deletions(-) create mode 100644 lua/dracula/groups.lua delete mode 100644 lua/dracula/highlights.lua diff --git a/README.md b/README.md index 0086111..7259c78 100644 --- a/README.md +++ b/README.md @@ -45,14 +45,15 @@ return { dracula.setup({ styles = { - types = {}, - functions = {}, - parameters = {}, - comments = {}, - strings = {}, - keywords = {}, - variables = {}, - constants = {}, + Type = {}, + Function = {}, + Parameter = {}, + Property = {}, + Comment = {}, + String = {}, + Keyword = {}, + Identifier = {}, + Constant = {}, }, transparent = false, on_colors = function (colors, color) @@ -60,6 +61,7 @@ return { return { -- override or create new colors mycolor = "#ffffff", + -- mycolor = 0xffffff, } end, on_highlights = function (colors, color) diff --git a/colors/dracula-soft.lua b/colors/dracula-soft.lua index d01f2fa..7629779 100644 --- a/colors/dracula-soft.lua +++ b/colors/dracula-soft.lua @@ -2,4 +2,558 @@ -- Repo: maxmx03/dracula.nvim -- Maintainer: Max Del Canto -- License: MIT License -require('dracula').load 'dracula-soft' + +if vim.g.colors_name then + vim.cmd 'hi clear' +end + +if vim.fn.exists 'syntax_on' then + vim.cmd 'syntax reset' +end + +vim.g.colors_name = 'dracula' + +local colors = require 'dracula.palette.dracula-soft' +local dracula = require 'dracula' +---@type dracula.config +local config = dracula.config +local api = vim.api + +if config.on_colors then + local color = require 'dracula.color' + colors = vim.tbl_extend('force', colors, config.on_colors(colors, color)) +end + +local hl = vim.api.nvim_set_hl +local none = 'NONE' + +if config.transparent then + hl(0, 'WinSeparator', { fg = colors.base01, bg = none }) + hl(0, 'IncSearch', { fg = colors.red, bg = none }) + hl(0, 'LineNr', { fg = colors.base01, bg = none }) + hl(0, 'CursorLineNr', { fg = colors.purple, bg = none }) + hl(0, 'CursorLineNr', { fg = colors.purple, bg = none }) + hl(0, 'Normal', { fg = colors.base0, bg = none }) + hl(0, 'Pmenu', { fg = colors.base0, bg = none }) + hl(0, 'TelescopeNormal', { fg = colors.base0, bg = none }) + hl(0, 'TelescopeBorder', { fg = colors.purple, bg = none }) + hl(0, 'WhichKeyNormal', { fg = colors.green, bg = none }) + hl(0, 'NvimTreeNormal', { fg = colors.base0, bg = none }) + hl(0, 'NeoTreeNormal', { fg = colors.base0, bg = none }) +else + hl(0, 'WinSeparator', { fg = colors.base01, bg = colors.base04 }) + hl(0, 'IncSearch', { fg = colors.red, bg = colors.shade_red, bold = true }) + hl(0, 'LineNr', { fg = colors.base01, bg = colors.base03 }) + hl(0, 'CursorLineNr', { fg = colors.purple, bg = colors.base03 }) + hl(0, 'CursorLineNr', { fg = colors.purple, bg = colors.base03 }) + hl(0, 'Normal', { fg = colors.base0, bg = colors.base03 }) + hl(0, 'Pmenu', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'TelescopeNormal', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'WhichKeyNormal', { fg = colors.green, bg = colors.base04 }) + hl(0, 'TelescopeBorder', { fg = colors.purple, bg = colors.base04 }) + hl(0, 'NvimTreeNormal', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'NeoTreeNormal', { fg = colors.base0, bg = colors.base04 }) +end + +-- EDITOR :h highlight-groups +hl(0, 'ColorColumn', { bg = colors.base04 }) +hl(0, 'Conceal', { fg = colors.base02 }) +hl(0, 'CurSearch', { fg = colors.red, bg = colors.shade_red }) +hl(0, 'Cursor', { fg = colors.base03, bg = colors.cyan }) +hl(0, 'lCursor', { link = 'Cursor' }) +hl(0, 'CursorIM', { link = 'Cursor' }) +hl(0, 'CursorColumn', { link = 'ColorColumn' }) +hl(0, 'CursorLine', { bg = colors.base02 }) +hl(0, 'Directory', { fg = colors.purple }) +hl(0, 'DiffAdd', { fg = colors.git_added }) +hl(0, 'DiffChange', { fg = colors.git_modified }) +hl(0, 'DiffDelete', { fg = colors.git_removed, reverse = true }) +hl(0, 'DiffText', { fg = colors.cyan, reverse = true }) +hl(0, 'EndOfBuffer', { fg = colors.base03 }) +hl(0, 'TermCursor', { link = 'Cursor' }) +hl(0, 'TermCursorNC', { fg = colors.base0, reverse = true }) +hl(0, 'ErrorMsg', { fg = colors.diag_error }) + +hl(0, 'Folded', { fg = colors.base0, bg = colors.base02 }) +hl(0, 'FoldColumn', { fg = colors.base0, bg = colors.base04 }) +hl(0, 'SignColumn', { link = 'Normal' }) +hl(0, 'Substitute', { link = 'IncSearch' }) +hl(0, 'LineNrAbove', { link = 'LineNr' }) +hl(0, 'LineNrBelow', { link = 'LineNr' }) +hl(0, 'CursorLineFold', { link = 'FoldColumn' }) +hl(0, 'CursorLineSign', { link = 'SignColumn' }) +hl(0, 'MatchParen', { fg = colors.cyan }) +hl(0, 'ModeMsg', { fg = colors.purple }) +hl(0, 'MsgArea', { link = 'Normal' }) +hl(0, 'MsgSeparator', { link = 'Normal' }) +hl(0, 'MoreMsg', { link = 'ModeMsg' }) +hl(0, 'NonText', { fg = colors.base01 }) +hl(0, 'NormalFloat', { fg = colors.base0, bg = colors.base04 }) +hl(0, 'FloatBorder', { link = 'WinSeparator' }) +hl(0, 'FloatTitle', { fg = colors.purple, bold = true }) +hl(0, 'NormalNC', { link = 'Normal' }) +hl(0, 'PmenuSel', { fg = colors.cyan, reverse = true }) +hl(0, 'PmenuKind', { link = 'Pmenu' }) +hl(0, 'PmenuKindSel', { link = 'PmenuSel' }) +hl(0, 'PmenuExtra', { link = 'Pmenu' }) +hl(0, 'PmenuExtraSel', { link = 'PmenuSel' }) +hl(0, 'PmenuSbar', { bg = colors.base04 }) +hl(0, 'PmenuThumb', { bg = colors.cyan }) +hl(0, 'Question', { fg = colors.diag_info }) +hl(0, 'QuickFixLine', { fg = colors.base0, bg = colors.base03 }) +hl(0, 'Search', { bg = colors.base02 }) +hl(0, 'SpecialKey', { link = 'NonText' }) +hl(0, 'SpellBad', { underline = true, strikethrough = true }) +hl(0, 'SpellCap', { fg = colors.diag_hint }) +hl(0, 'SpellLocal', { link = 'SpellCap' }) +hl(0, 'SpellRare', { fg = colors.diag_warning }) +hl(0, 'StatusLine', { fg = colors.base0, bg = colors.base04 }) +hl(0, 'StatusLineNC', { fg = colors.base01, bg = colors.base04 }) +hl(0, 'TabLine', { fg = colors.base01, bg = colors.base04 }) +hl(0, 'TabLineFill', { fg = colors.base0, bg = colors.base04 }) +hl(0, 'TabLineSel', { fg = colors.base0, bg = colors.base03 }) +hl(0, 'Title', { fg = colors.purple, bold = true }) +hl(0, 'Visual', { bg = colors.base02 }) +hl(0, 'VisualNOS', { link = 'Visual' }) +hl(0, 'warningMsg', { fg = colors.diag_warning }) +hl(0, 'Whitespace', { fg = colors.base01 }) +hl(0, 'WildMenu', { fg = colors.base02 }) +hl(0, 'WinBar', { link = 'Pmenu' }) +hl(0, 'WinBarNC', { link = 'WinBar' }) + +-- SYNTAX :h group-name +hl(0, 'Comment', { fg = colors.base01 }) +hl(0, 'Constant', { fg = colors.purple }) +hl(0, 'String', { fg = colors.yellow }) +hl(0, 'Character', { link = 'String' }) +hl(0, 'Number', { link = 'Constant' }) +hl(0, 'Boolean', { link = 'Constant' }) +hl(0, 'Float', { link = 'Constant' }) +hl(0, 'Identifier', { fg = colors.base0 }) +hl(0, 'Function', { fg = colors.green }) +hl(0, 'Statement', { fg = colors.pink }) +hl(0, 'Conditional', { link = 'Statement' }) +hl(0, 'Repeat', { link = 'Statement' }) +hl(0, 'Label', { link = 'Statement' }) +hl(0, 'Operator', { link = 'Statement' }) +hl(0, 'Keyword', { link = 'Statement' }) +hl(0, 'Exception', { link = 'Statement' }) +hl(0, 'PreProc', { link = 'Statement' }) +hl(0, 'Include', { link = 'Statement' }) +hl(0, 'Define', { link = 'Statement' }) +hl(0, 'Macro', { link = 'Statement' }) +hl(0, 'PreCondit', { fg = colors.pink }) +hl(0, 'Type', { fg = colors.cyan }) +hl(0, 'StorageClass', { link = 'Statement' }) +hl(0, 'Structure', { link = 'Type' }) +hl(0, 'Typedef', { link = 'Statement' }) +hl(0, 'Special', { fg = colors.red }) +hl(0, 'SpecialChar', { fg = colors.purple }) +hl(0, 'Tag', { fg = colors.pink }) +hl(0, 'Delimiter', { fg = colors.base0 }) +hl(0, 'SpecialComment', { fg = colors.pink }) +hl(0, 'Debug', { fg = colors.pink }) +hl(0, 'Underlined', { fg = colors.cyan, underline = true }) +hl(0, 'Ignore', {}) +hl(0, 'Error', { fg = colors.diag_error, bold = true }) +hl(0, 'Todo', { fg = colors.purple, bold = true }) + +if config.plugins['nvim-treesitter'] then + hl(0, '@variable', { link = 'Identifier' }) + hl(0, '@variable.builtin', { link = 'Constant' }) + hl(0, '@variable.parameter', { link = 'Parameter' }) + hl(0, '@variable.member', { fg = colors.base0 }) + hl(0, '@constant', { link = 'Constant' }) + hl(0, '@constant.builtin', { fg = colors.purple }) + hl(0, '@constant.macro', { fg = colors.purple }) + hl(0, '@module', { fg = colors.base0 }) + hl(0, '@module.builtin', { fg = colors.purple }) + hl(0, '@label', { fg = colors.pink }) + hl(0, '@string', { link = 'String' }) + hl(0, '@string.documentation', { fg = colors.pink }) + hl(0, '@string.regexp', { fg = colors.red }) + hl(0, '@string.escape', { fg = colors.pink }) + hl(0, '@string.special', { fg = colors.yellow }) + hl(0, '@string.special.symbol', { fg = colors.base0 }) + hl(0, '@string.special.url', { link = 'Underlined' }) + hl(0, '@character', { link = 'String' }) + hl(0, '@character.special', { fg = colors.yellow }) + hl(0, '@character.printf', { fg = colors.red }) + hl(0, '@type', { link = 'Type' }) + hl(0, '@type.builtin', { fg = colors.pink }) + hl(0, '@type.definition', { fg = colors.cyan }) + hl(0, '@type.qualifier', { fg = colors.pink }) + hl(0, '@function', { link = 'Function' }) + hl(0, '@function.builtin', { fg = colors.cyan }) + hl(0, '@function.call', { link = 'Function' }) + hl(0, '@function.macro', { link = 'Function' }) + hl(0, '@function.method', { link = 'Function' }) + hl(0, '@function.method.call', { link = 'Function' }) + hl(0, '@constructor', { link = 'Type' }) + hl(0, '@constructor.lua', { fg = colors.base0 }) + hl(0, '@operator', { fg = colors.pink }) + hl(0, '@keyword', { fg = colors.pink }) + hl(0, '@keyword.coroutine', { fg = colors.pink }) + hl(0, '@keyword.function', { fg = colors.pink }) + hl(0, '@keyword.operator', { fg = colors.pink }) + hl(0, '@keyword.import', { fg = colors.pink }) + hl(0, '@keyword.repeat', { fg = colors.pink }) + hl(0, '@keyword.return', { fg = colors.pink }) + hl(0, '@keyword.debug', { fg = colors.pink }) + hl(0, '@keyword.exception', { fg = colors.pink }) + hl(0, '@keyword.conditional', { fg = colors.pink }) + hl(0, '@keyword.conditional.ternary', { fg = colors.pink }) + hl(0, '@keyword.directive', { fg = colors.pink }) + hl(0, '@keyword.directive.define', { fg = colors.pink }) + hl(0, '@punctuation.delimiter', { fg = colors.base0 }) + hl(0, '@punctuation.bracket', { fg = colors.base0 }) + hl(0, '@punctuation.special', { fg = colors.pink }) + hl(0, '@comment', { link = 'Comment' }) + hl(0, '@comment.documentation', { link = 'Comment' }) + hl(0, '@comment.error', { fg = colors.diag_error, bg = colors.shade_error }) + hl(0, '@comment.warning', { fg = colors.diag_warning, bg = colors.shade_warning }) + hl(0, '@comment.todo', { fg = colors.purple, bg = colors.shade_purple }) + hl(0, '@comment.note', { fg = colors.diag_hint, bg = colors.shade_hint }) + hl(0, '@markup.strong', { fg = colors.orange, bold = true }) + hl(0, '@markup.italic', { fg = colors.yellow, italic = true }) + hl(0, '@markup.strikethrough', { fg = colors.base01 }) + hl(0, '@markup.underline', { fg = colors.cyan, underline = true }) + hl(0, '@markup.heading', { fg = colors.purple, bold = true }) + hl(0, '@markup.quote', { fg = colors.base01 }) + hl(0, '@markup.math', { fg = colors.purple }) + hl(0, '@markup.environment', { fg = colors.base01 }) + hl(0, '@markup.link', { fg = colors.orange, bold = true }) + hl(0, '@markup.link.label', { fg = colors.cyan, underline = true }) + hl(0, '@markup.link.url', { fg = colors.cyan, underline = true }) + hl(0, '@markup.raw', { fg = colors.base01 }) + hl(0, '@markup.raw.block', { fg = colors.base0 }) + hl(0, '@markup.list', { fg = colors.purple }) + hl(0, '@markup.list.checked', { fg = colors.git_added }) + hl(0, '@markup.list.unchecked', { fg = colors.git_modified }) + hl(0, '@diff.plus', { fg = colors.git_added }) + hl(0, '@diff.minus', { fg = colors.git_removed }) + hl(0, '@diff.delta', { fg = colors.git_modified }) + hl(0, '@tag', { fg = colors.pink }) + hl(0, '@tag.attribute', { fg = colors.green }) + hl(0, '@tag.delimiter', { fg = colors.base0 }) + hl(0, '@property.yaml', { fg = colors.cyan }) + hl(0, '@property.json', { fg = colors.cyan }) + hl(0, '@property.css', { fg = colors.cyan }) + hl(0, '@property.scss', { fg = colors.cyan }) +end + +if config.plugins['rainbow-delimiters'] then + hl(0, 'RainbowDelimiterRed', { fg = colors.red }) + hl(0, 'RainbowDelimiteYellow', { fg = colors.yellow }) + hl(0, 'RainbowDelimiterBlue', { fg = colors.pink }) + hl(0, 'RainbowDelimiterOrange', { fg = colors.orange }) + hl(0, 'RainbowDelimiterGreen', { fg = colors.green }) + hl(0, 'RainbowDelimiterViolet', { fg = colors.purple }) + hl(0, 'RainbowDelimiterCyan', { fg = colors.cyan }) +end + +if config.plugins['nvim-lspconfig'] then + hl(0, '@lsp.type.class', { link = 'Type' }) + hl(0, '@lsp.type.decorator', { fg = colors.green }) + hl(0, '@lsp.type.enum', { link = 'Type' }) + hl(0, '@lsp.type.enumMember', { link = 'Constant' }) + hl(0, '@lsp.type.interface', { link = 'Type' }) + hl(0, '@lsp.type.macro', { fg = colors.pink }) + hl(0, '@lsp.type.namespace', { fg = colors.base0 }) + hl(0, '@lsp.type.parameter', { link = 'Parameter' }) + hl(0, '@lsp.type.property', { fg = colors.base0 }) + hl(0, '@lsp.type.struct', { link = 'Type' }) + hl(0, '@lsp.type.type', { link = 'Type' }) + hl(0, '@lsp.type.typeParameter', { link = 'Type' }) + hl(0, '@lsp.type.variable', { link = 'Identifier' }) + hl(0, '@lsp.typemod.variable.defaultLibrary', { fg = colors.purple }) + hl(0, '@lsp.typemod.variable.readonly', { link = 'Constant' }) + hl(0, '@lsp.typemod.variable.global', { fg = colors.purple }) + hl(0, '@lsp.typemod.keyword.documentation', { fg = colors.pink }) + hl(0, '@lsp.typemod.class.documentation', { fg = colors.cyan }) + hl(0, '@lsp.typemod.property.readonly', { fg = colors.purple }) + hl(0, 'DiagnosticError', { fg = colors.diag_error }) + hl(0, 'DiagnosticWarn', { fg = colors.diag_warning }) + hl(0, 'DiagnosticInfo', { fg = colors.diag_info }) + hl(0, 'DiagnosticHint', { fg = colors.diag_hint }) + hl(0, 'DiagnosticOk', { fg = colors.diag_ok }) + hl(0, 'DiagnosticVirtualTextError', { fg = colors.diag_error, bg = colors.shade_error }) + hl(0, 'DiagnosticVirtualTextWarn', { fg = colors.diag_warning, bg = colors.shade_warning }) + hl(0, 'DiagnosticVirtualTextInfo', { fg = colors.diag_info, bg = colors.shade_info }) + hl(0, 'DiagnosticVirtualTextHint', { fg = colors.diag_hint, bg = colors.shade_hint }) + hl(0, 'DiagnosticVirtualTextOk', { fg = colors.diag_ok, bg = colors.shade_ok }) + hl(0, 'DiagnosticUnderlineError', { fg = colors.diag_error, underline = true }) + hl(0, 'DiagnosticUnderlineWarn', { fg = colors.diag_warning, underline = true }) + hl(0, 'DiagnosticUnderlineInfo', { fg = colors.diag_info, underline = true }) + hl(0, 'DiagnosticUnderlineHint', { fg = colors.diag_hint, underline = true }) + hl(0, 'DiagnosticUnderlineOk', { fg = colors.diag_ok, underline = true }) + hl(0, 'LspReferenceText', { link = 'Visual' }) + hl(0, 'LspReferenceRead', { link = 'Visual' }) + hl(0, 'LspReferenceWrite', { link = 'Visual' }) + hl(0, 'LspInlayHint', { fg = colors.inlay_hint }) +end + +if config.plugins['nvim-navic'] then + hl(0, 'NavicText', { fg = colors.base0 }) + hl(0, 'NavicSeparator', { link = 'Statement' }) + hl(0, 'NavicIconsMethod', { link = 'Function' }) + hl(0, 'NavicIconsFunction', { link = 'Function' }) + hl(0, 'NavicIconsField', { link = 'Identifier' }) + hl(0, 'NavicIconsVariable', { link = 'Identifier' }) + hl(0, 'NavicIconsClass', { link = 'Type' }) + hl(0, 'NavicIconsInterface', { link = 'Type' }) + hl(0, 'NavicIconsModule', { link = 'Type' }) + hl(0, 'NavicIconsNamespace', { link = 'Type' }) + hl(0, 'NavicIconsProperty', { link = 'Identifier' }) + hl(0, 'NavicIconsUnit', { link = 'Number' }) + hl(0, 'NavicIconsEnum', { link = 'Type' }) + hl(0, 'NavicIconsKeyword', { link = 'Statement' }) + hl(0, 'NavicIconsSnippet', { link = 'Tag' }) + hl(0, 'NavicIconsColor', { fg = colors.orange }) + hl(0, 'NavicIconsFile', { link = 'Identifier' }) + hl(0, 'NavicIconsReference', { link = 'Underlined' }) + hl(0, 'NavicIconsFolder', { link = 'Directory' }) + hl(0, 'NavicIconsEnumMember', { link = 'Constant' }) + hl(0, 'NavicIconsConstant', { link = 'Constant' }) + hl(0, 'NavicIconsStruct', { link = 'Identifier' }) + hl(0, 'NavicIconsEvent', { link = 'Function' }) + hl(0, 'NavicIconsOperator', { link = 'Operator' }) + hl(0, 'NavicIconsTypeParameter', { link = 'Type' }) +end + +if config.plugins['nvim-cmp'] then + hl(0, 'CmpItemKindText', { link = 'String' }) + hl(0, 'CmpItemKindMethod', { link = 'Function' }) + hl(0, 'CmpItemKindFunction', { link = 'Function' }) + hl(0, 'CmpItemKindField', { link = 'Identifier' }) + hl(0, 'CmpItemKindVariable', { link = 'Identifier' }) + hl(0, 'CmpItemKindClass', { link = 'Type' }) + hl(0, 'CmpItemKindInterface', { link = 'Type' }) + hl(0, 'CmpItemKindModule', { link = 'Type' }) + hl(0, 'CmpItemKindProperty', { link = 'Identifier' }) + hl(0, 'CmpItemKindUnit', { link = 'Number' }) + hl(0, 'CmpItemKindEnum', { link = 'Type' }) + hl(0, 'CmpItemKindKeyword', { link = 'Statement' }) + hl(0, 'CmpItemKindSnippet', { link = 'Tag' }) + hl(0, 'CmpItemKindColor', { fg = colors.orange }) + hl(0, 'CmpItemKindFile', { link = 'Identifier' }) + hl(0, 'CmpItemKindReference', { link = 'Underlined' }) + hl(0, 'CmpItemKindFolder', { link = 'Directory' }) + hl(0, 'CmpItemKindEnumMember', { link = 'Constant' }) + hl(0, 'CmpItemKindConstant', { link = 'Constant' }) + hl(0, 'CmpItemKindStruct', { link = 'Identifier' }) + hl(0, 'CmpItemKindEvent', { link = 'Function' }) + hl(0, 'CmpItemKindOperator', { link = 'Operator' }) + hl(0, 'CmpItemKindTypeParameter', { link = 'Type' }) +end + +if config.plugins['indent-blankline.nvim'] then + hl(0, 'IblIndent', { fg = colors.shade_purple, nocombine = true }) + hl(0, 'IblScope', { fg = colors.purple, nocombine = true }) +end + +if config.plugins['neo-tree.nvim'] then + hl(0, 'NeoTreeNormalNC', { link = 'NeoTreeNormal' }) + hl(0, 'NeoTreeDotFile', { fg = colors.base01 }) + hl(0, 'NeoTreeFileNameOpened', { link = 'Directory' }) + hl(0, 'NeoTreeFloatBorder', { link = 'WinSeparator' }) + hl(0, 'NeoTreeFloatTitle', { link = 'Title' }) + hl(0, 'NeoTreeGitAdded', { fg = colors.git_added }) + hl(0, 'NeoTreeGitConflict', { fg = colors.git_modified }) + hl(0, 'NeoTreeGitDeleted', { fg = colors.git_removed }) + hl(0, 'NeoTreeGitIgnored', { fg = colors.base01 }) + hl(0, 'NeoTreeGitModified', { fg = colors.git_modified }) + hl(0, 'NeoTreeGitUnstaged', { fg = colors.git_modified }) + hl(0, 'NeoTreeGitUntracked', { fg = colors.git_modified }) + hl(0, 'NeoTreeGitStaged', { fg = colors.git_added }) +end + +if config.plugins['nvim-tree.lua'] then + hl(0, 'NvimTreeSymlink', { link = 'Underlined' }) + hl(0, 'NvimTreeSymlinkIcon', { link = 'Directory' }) + hl(0, 'NvimTreeFolderName', { fg = colors.base0 }) + hl(0, 'NvimTreeRootFolder', { fg = colors.purple, bold = true }) + hl(0, 'NvimTreeFolderIcon', { link = 'Directory' }) + hl(0, 'NvimTreeEmptyFolderName', { fg = colors.base0 }) + hl(0, 'NvimTreeExecFile', { fg = colors.green }) + hl(0, 'NvimTreeOpenedFile', { fg = colors.purple, bold = true }) + hl(0, 'NvimTreeModifiedFile', { fg = colors.git_modified }) + hl(0, 'NvimTreeSpecialFile', { link = 'Special' }) + hl(0, 'NvimTreeIndentMarker', { fg = colors.shade_purple }) + hl(0, 'NvimTreeGitDirty', { fg = colors.git_modified }) + hl(0, 'NvimTreeGitStaged', { fg = colors.git_added }) + hl(0, 'NvimTreeGitMerge', { fg = colors.git_modified }) + hl(0, 'NvimTreeGitRenamed', { fg = colors.git_modified }) + hl(0, 'NvimTreeGitNew', { fg = colors.git_added }) + hl(0, 'NvimTreeGitDeleted', { fg = colors.git_removed }) + hl(0, 'NvimTreeNormalFloat', { link = 'NvimTreeNormal' }) + hl(0, 'NvimTreeEndOfBuffer', { fg = colors.base04 }) + hl(0, 'NvimTreeWinSeparator', { fg = colors.base04, bg = colors.base04 }) +end + +if config.plugins['which-key.nvim'] then + hl(0, 'WhichKey', { fg = colors.green }) + hl(0, 'WhichKeyDesc', { fg = colors.orange, italic = true }) + hl(0, 'WhichKeySeparator', { fg = colors.pink }) + hl(0, 'WhichKeyGroup', { fg = colors.purple }) +end + +if config.plugins['dashboard-nvim'] then + hl(0, 'DashboardHeader', { fg = colors.red }) + hl(0, 'DashboardFooter', { fg = colors.base01 }) + hl(0, 'DashboardDesc', { link = 'Directory' }) + hl(0, 'DashboardKey', { fg = colors.pink }) + hl(0, 'DashboardIcon', { link = 'Directory' }) + hl(0, 'DashboardShotCut', { fg = colors.base0 }) +end + +if config.plugins['gitsigns.nvim'] then + hl(0, 'GitSignsAdd', { fg = colors.git_added }) + hl(0, 'GitSignsChange', { fg = colors.git_modified }) + hl(0, 'GitSignsDelete', { fg = colors.git_removed }) +end + +if config.plugins['neogit'] then + hl(0, 'NeogitCursorLine', { link = 'CursorLine' }) + hl(0, 'NeogitBranch', { fg = colors.purple }) + hl(0, 'NeogitRemote', { fg = colors.cyan }) + hl(0, 'NeogitHunkHeader', { fg = colors.purple, bg = colors.shade_purple }) + hl(0, 'NeogitHunkHeaderHighlight', { link = 'Title' }) + hl(0, 'NeogitDiffContextHighlight', { fg = colors.base0, bg = colors.base03 }) + hl(0, 'NeogitDiffContext', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'NeogitDiffDeleteHighlight', { fg = colors.git_removed, bg = colors.shade_red }) + hl(0, 'NeogitDiffDelete', { fg = colors.git_removed }) + hl(0, 'NeogitDiffAddHighlight', { fg = colors.git_added, bg = colors.shade_green }) + hl(0, 'NeogitDiffAdd', { fg = colors.git_added }) +end + +if config.plugins['todo-comments.nvim'] then + hl(0, 'TodoFgTODO', { fg = colors.purple }) + hl(0, 'TodoFgWARN', { fg = colors.diag_warning }) + hl(0, 'TodoFgTEST', { fg = colors.diag_ok }) + hl(0, 'TodoFgPERF', { fg = colors.yellow }) + hl(0, 'TodoFgNOTE', { fg = colors.cyan }) + hl(0, 'TodoFgHACK', { fg = colors.pink }) + hl(0, 'TodoFgFIX', { fg = colors.diag_error }) + hl(0, 'TodoSignTODO', { fg = colors.purple }) + hl(0, 'TodoSignWARN', { fg = colors.diag_warning }) + hl(0, 'TodoSignTEST', { fg = colors.diag_ok }) + hl(0, 'TodoSignPERF', { fg = colors.yellow }) + hl(0, 'TodoSignNOTE', { fg = colors.cyan }) + hl(0, 'TodoSignHACK', { fg = colors.pink }) + hl(0, 'TodoSignFIX', { fg = colors.diag_error }) + hl(0, 'TodoBgTODO', { fg = colors.purple, reverse = true }) + hl(0, 'TodoBgWARN', { fg = colors.diag_warning, reverse = true }) + hl(0, 'TodoBgTEST', { fg = colors.diag_ok, reverse = true }) + hl(0, 'TodoBgPERF', { fg = colors.yellow, reverse = true }) + hl(0, 'TodoBgNOTE', { fg = colors.cyan, reverse = true }) + hl(0, 'TodoBgHACK', { fg = colors.pink, reverse = true }) + hl(0, 'TodoBgFIX', { fg = colors.diag_error, reverse = true }) +end + +if config.plugins['lazy.nvim'] then + hl(0, 'LazyH1', { fg = colors.purple, bg = colors.base04 }) + hl(0, 'LazyButton', { fg = colors.base0, bg = colors.base02 }) + hl(0, 'LazyButtonActive', { bg = colors.base02, reverse = true }) + hl(0, 'LazyReasonStart', { fg = colors.cyan }) +end + +if config.plugins['telescope.nvim'] then + hl(0, 'TelescopeSelection', { link = 'CursorLine' }) + hl(0, 'TelescopeSelectionCaret', { fg = colors.purple }) + hl(0, 'TelescopeMultiIcon', { fg = colors.purple }) + hl(0, 'TelescopePreviewNormal', { link = 'TelescopeNormal' }) + hl(0, 'TelescopePromptNormal', { link = 'TelescopeNormal' }) + hl(0, 'TelescopeResultsNormal', { link = 'TelescopeNormal' }) + hl(0, 'TelescopePromptBorder', { link = 'TelescopeBorder' }) + hl(0, 'TelescopeResultsBorder', { link = 'TelescopeBorder' }) + hl(0, 'TelescopePreviewBorder', { link = 'TelescopeBorder' }) + hl(0, 'TelescopeTitle', { fg = colors.purple, bg = colors.shade_purple }) + hl(0, 'TelescopePromptTitle', { link = 'TelescopeTitle' }) + hl(0, 'TelescopeResultsTitle', { link = 'TelescopeTitle' }) + hl(0, 'TelescopePreviewTitle', { link = 'TelescopeTitle' }) + hl(0, 'TelescopeMatching', { fg = colors.purple, bg = colors.shade_purple }) + hl(0, 'TelescopePreviewMatch', { link = 'TelescopeMatching' }) + hl(0, 'TelescopePromptCounter', { link = 'NonText' }) + hl(0, 'TelescopePromptPrefix', { fg = colors.purple }) +end + +if config.plugins['noice.nvim'] then + hl(0, 'NoiceFormatProgressTodo', { fg = colors.diag_ok, bg = colors.shade_ok }) + hl(0, 'NoiceFormatProgressDone', { fg = colors.diag_ok, reverse = true }) + hl(0, 'NoiceLspProgressSpinner', { fg = colors.diag_ok }) + hl(0, 'NoiceLspProgressClient', { fg = colors.diag_ok }) + hl(0, 'NoiceLspProgressTitle', { link = 'Title' }) +end + +if config.plugins['hop.nvim'] then + hl(0, 'HopNextKey', { fg = colors.red }) + hl(0, 'HopNextKey1', { fg = colors.cyan }) + hl(0, 'HopUnmatched', { fg = colors.base01 }) +end + +if config.plugins['mini.statusline'] then + hl(0, 'MiniStatuslineModeNormal', { fg = colors.base03, bg = colors.purple }) + hl(0, 'MiniStatuslineModeInsert', { fg = colors.base03, bg = colors.green }) + hl(0, 'MiniStatuslineModeVisual', { fg = colors.yellow, bg = colors.base03 }) + hl(0, 'MiniStatuslineModeReplace', { fg = colors.red, bg = colors.base03 }) + hl(0, 'MiniStatuslineModeCommand', { fg = colors.orange, bg = colors.base03 }) + hl(0, 'MinistatusLineFileName', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'MiniStatuslineDevinfo', { fg = colors.base0, bg = colors.base02 }) + hl(0, 'MiniStatuslineFileinfo', { fg = colors.base0, bg = colors.base02 }) + hl(0, 'MiniStatuslineInactive', { fg = colors.base01, bg = colors.base03 }) +end + +if config.plugins['mini.tabline'] then + hl(0, 'MiniTablineCurrent', { fg = colors.base0, bg = colors.base03 }) + hl(0, 'MiniTablineVisible', { fg = colors.base0, bg = colors.base03 }) + hl(0, 'MiniTablineHidden', { fg = colors.base01, bg = colors.base03 }) + hl(0, 'MiniTablineModifiedCurrent', { link = 'MiniTabLineCurrent' }) + hl(0, 'MiniTablineModifiedVisible', { link = 'MiniTablineVisible' }) + hl(0, 'MiniTablineModifiedHidden', { link = 'MiniTablineHidden' }) + hl(0, 'MiniTablineFill', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'MiniTablineTabpagesection', { fg = colors.base0, bg = colors.base04 }) +end + +if config.plugins['mini.starter'] then + hl(0, 'MiniStarterCurrent', { link = 'CursorLine' }) + hl(0, 'MiniStarterHeader', { fg = colors.red }) + hl(0, 'MiniStarterFooter', { fg = colors.base01 }) + hl(0, 'MiniStarterItem', { fg = colors.base0 }) + hl(0, 'MiniStarterItemBullet', { fg = colors.pink }) + hl(0, 'MiniStarterItemPrefix', { fg = colors.pink }) + hl(0, 'MiniStarterSection', { link = 'Title' }) + hl(0, 'MiniStarterQuery', { fg = colors.pink, bold = true }) +end + +if config.plugins['mini.cursorword'] then + hl(0, 'MiniCursorword', { link = 'Visual' }) +end + +if config.plugins['bufferline.nvim'] and config.transparent then + local color = require 'dracula.color' + local background = color.shade(colors.base02, 2) + hl(0, 'BufferLineFill', { bg = background }) + hl(0, 'BufferLineBufferSelected', { fg = colors.base0 }) + hl(0, 'BufferLineSeparator', { fg = background }) + hl(0, 'BufferLineSeparatorSelected', { fg = background }) + hl(0, 'BufferLineSeparatorVisible', { fg = background }) +end + +if config.styles then + for group_name, group_val in pairs(config.styles) do + local group = api.nvim_get_hl(0, { name = group_name, link = false }) + ---@diagnostic disable-next-line: param-type-mismatch + hl(0, group_name, vim.tbl_deep_extend('force', group, group_val)) + end +end + +if config.on_highlights then + local color = require 'dracula.color' + local highlights = config.on_highlights(colors, color) + for group_name, group_val in pairs(highlights) do + local group = api.nvim_get_hl(0, { name = group_name, link = false }) + ---@diagnostic disable-next-line: param-type-mismatch + hl(0, group_name, vim.tbl_deep_extend('force', group, group_val)) + end +end diff --git a/colors/dracula.lua b/colors/dracula.lua index e858c40..17e93a4 100644 --- a/colors/dracula.lua +++ b/colors/dracula.lua @@ -2,4 +2,597 @@ -- Repo: maxmx03/dracula.nvim -- Maintainer: Max Del Canto -- License: MIT License -require('dracula').load 'dracula' + +if vim.g.colors_name then + vim.cmd 'hi clear' +end + +if vim.fn.exists 'syntax_on' then + vim.cmd 'syntax reset' +end + +vim.g.colors_name = 'dracula' + +local colors = require 'dracula.palette' +local dracula = require 'dracula' +---@type dracula.config +local config = dracula.config +local api = vim.api + +if config.on_colors then + local color = require 'dracula.color' + colors = vim.tbl_extend('force', colors, config.on_colors(colors, color)) +end + +local hl = vim.api.nvim_set_hl +local none = 'NONE' + +local term = { + 'base04', + 'red', + 'green', + 'yellow', + 'pink', + 'purple', + 'cyan', + 'base01', + 'base01', + 'orange', + 'green', + 'yellow', + 'cyan', + 'pink', + 'green', + 'base01', +} +for index, key in ipairs(term) do + vim.g['terminal_color_' .. index - 1] = colors[key] +end + +if config.transparent then + hl(0, 'WinSeparator', { fg = colors.base01, bg = none }) + hl(0, 'IncSearch', { fg = colors.red, bg = none }) + hl(0, 'LineNr', { fg = colors.base01, bg = none }) + hl(0, 'CursorLineNr', { fg = colors.purple, bg = none }) + hl(0, 'CursorLineNr', { fg = colors.purple, bg = none }) + hl(0, 'Normal', { fg = colors.base0, bg = none }) + hl(0, 'Pmenu', { fg = colors.base0, bg = none }) + hl(0, 'TelescopeNormal', { fg = colors.base0, bg = none }) + hl(0, 'TelescopeBorder', { fg = colors.purple, bg = none }) + hl(0, 'WhichKeyNormal', { fg = colors.green, bg = none }) + hl(0, 'NvimTreeNormal', { fg = colors.base0, bg = none }) + hl(0, 'NeoTreeNormal', { fg = colors.base0, bg = none }) +else + hl(0, 'WinSeparator', { fg = colors.base01, bg = colors.base04 }) + hl(0, 'IncSearch', { fg = colors.red, bg = colors.shade_red, bold = true }) + hl(0, 'LineNr', { fg = colors.base01, bg = colors.base03 }) + hl(0, 'CursorLineNr', { fg = colors.purple, bg = colors.base03 }) + hl(0, 'CursorLineNr', { fg = colors.purple, bg = colors.base03 }) + hl(0, 'Normal', { fg = colors.base0, bg = colors.base03 }) + hl(0, 'Pmenu', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'TelescopeNormal', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'WhichKeyNormal', { fg = colors.green, bg = colors.base04 }) + hl(0, 'TelescopeBorder', { fg = colors.purple, bg = colors.base04 }) + hl(0, 'NvimTreeNormal', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'NeoTreeNormal', { fg = colors.base0, bg = colors.base04 }) +end + +-- EDITOR :h highlight-groups +hl(0, 'ColorColumn', { bg = colors.base04 }) +hl(0, 'Conceal', { fg = colors.base02 }) +hl(0, 'CurSearch', { fg = colors.red, bg = colors.shade_red }) +hl(0, 'Cursor', { fg = colors.base03, bg = colors.purple }) +hl(0, 'lCursor', { link = 'Cursor' }) +hl(0, 'CursorIM', { link = 'Cursor' }) +hl(0, 'CursorColumn', { link = 'ColorColumn' }) +hl(0, 'CursorLine', { bg = colors.base02 }) +hl(0, 'Directory', { fg = colors.purple }) +hl(0, 'DiffAdd', { fg = colors.git_added }) +hl(0, 'DiffChange', { fg = colors.git_modified }) +hl(0, 'DiffDelete', { fg = colors.git_removed, reverse = true }) +hl(0, 'DiffText', { fg = colors.cyan, reverse = true }) +hl(0, 'EndOfBuffer', { fg = colors.base03 }) +hl(0, 'TermCursor', { link = 'Cursor' }) +hl(0, 'TermCursorNC', { link = 'Cursor' }) +hl(0, 'ErrorMsg', { fg = colors.diag_error }) + +hl(0, 'Folded', { fg = colors.base0, bg = colors.base02 }) +hl(0, 'FoldColumn', { fg = colors.base0, bg = colors.base04 }) +hl(0, 'SignColumn', { link = 'Normal' }) +hl(0, 'Substitute', { link = 'IncSearch' }) +hl(0, 'LineNrAbove', { link = 'LineNr' }) +hl(0, 'LineNrBelow', { link = 'LineNr' }) +hl(0, 'CursorLineFold', { link = 'FoldColumn' }) +hl(0, 'CursorLineSign', { link = 'SignColumn' }) +hl(0, 'MatchParen', { fg = colors.cyan }) +hl(0, 'ModeMsg', { fg = colors.purple }) +hl(0, 'MsgArea', { link = 'Normal' }) +hl(0, 'MsgSeparator', { link = 'Normal' }) +hl(0, 'MoreMsg', { link = 'ModeMsg' }) +hl(0, 'NonText', { fg = colors.base01 }) +hl(0, 'NormalFloat', { fg = colors.base0, bg = colors.base04 }) +hl(0, 'FloatBorder', { link = 'WinSeparator' }) +hl(0, 'FloatTitle', { fg = colors.purple, bold = true }) +hl(0, 'NormalNC', { link = 'Normal' }) +hl(0, 'PmenuSel', { fg = colors.cyan, reverse = true }) +hl(0, 'PmenuKind', { link = 'Pmenu' }) +hl(0, 'PmenuKindSel', { link = 'PmenuSel' }) +hl(0, 'PmenuExtra', { link = 'Pmenu' }) +hl(0, 'PmenuExtraSel', { link = 'PmenuSel' }) +hl(0, 'PmenuSbar', { bg = colors.base04 }) +hl(0, 'PmenuThumb', { bg = colors.cyan }) +hl(0, 'Question', { fg = colors.diag_info }) +hl(0, 'QuickFixLine', { fg = colors.base0, bg = colors.base03 }) +hl(0, 'Search', { bg = colors.base02 }) +hl(0, 'SpecialKey', { link = 'NonText' }) +hl(0, 'SpellBad', { underline = true, strikethrough = true }) +hl(0, 'SpellCap', { fg = colors.diag_hint }) +hl(0, 'SpellLocal', { link = 'SpellCap' }) +hl(0, 'SpellRare', { fg = colors.diag_warning }) +hl(0, 'StatusLine', { fg = colors.base0, bg = colors.base04 }) +hl(0, 'StatusLineNC', { fg = colors.base01, bg = colors.base04 }) +hl(0, 'TabLine', { fg = colors.base01, bg = colors.base04 }) +hl(0, 'TabLineFill', { fg = colors.base0, bg = colors.base04 }) +hl(0, 'TabLineSel', { fg = colors.base0, bg = colors.base03 }) +hl(0, 'Title', { fg = colors.purple, bold = true }) +hl(0, 'Visual', { bg = colors.base02 }) +hl(0, 'VisualNOS', { link = 'Visual' }) +hl(0, 'warningMsg', { fg = colors.diag_warning }) +hl(0, 'Whitespace', { fg = colors.base01 }) +hl(0, 'WildMenu', { fg = colors.base02 }) +hl(0, 'WinBar', { link = 'Pmenu' }) +hl(0, 'WinBarNC', { link = 'WinBar' }) + +-- SYNTAX :h group-name +hl(0, 'Comment', { fg = colors.base01 }) +hl(0, 'Constant', { fg = colors.purple }) +hl(0, 'String', { fg = colors.yellow }) +hl(0, 'Character', { link = 'String' }) +hl(0, 'Number', { link = 'Constant' }) +hl(0, 'Boolean', { link = 'Constant' }) +hl(0, 'Float', { link = 'Constant' }) +hl(0, 'Identifier', { fg = colors.base0 }) +hl(0, 'Parameter', { fg = colors.orange }) +hl(0, 'Property', { fg = colors.base0 }) +hl(0, 'Function', { fg = colors.green }) +hl(0, 'Statement', { fg = colors.pink }) +hl(0, 'Conditional', { link = 'Statement' }) +hl(0, 'Repeat', { link = 'Statement' }) +hl(0, 'Label', { link = 'Statement' }) +hl(0, 'Operator', { link = 'Statement' }) +hl(0, 'Keyword', { link = 'Statement' }) +hl(0, 'Exception', { link = 'Statement' }) +hl(0, 'PreProc', { link = 'Statement' }) +hl(0, 'Include', { link = 'Statement' }) +hl(0, 'Define', { link = 'Statement' }) +hl(0, 'Macro', { link = 'Statement' }) +hl(0, 'PreCondit', { fg = colors.pink }) +hl(0, 'Type', { fg = colors.cyan }) +hl(0, 'StorageClass', { link = 'Statement' }) +hl(0, 'Structure', { link = 'Type' }) +hl(0, 'Typedef', { link = 'Statement' }) +hl(0, 'Special', { fg = colors.red }) +hl(0, 'SpecialChar', { fg = colors.purple }) +hl(0, 'Tag', { fg = colors.pink }) +hl(0, 'TagAttribute', { fg = colors.pink }) +hl(0, 'TagDelimiter', { fg = colors.green }) +hl(0, 'Delimiter', { fg = colors.base0 }) +hl(0, 'SpecialComment', { fg = colors.pink }) +hl(0, 'Debug', { fg = colors.pink }) +hl(0, 'Underlined', { fg = colors.cyan, underline = true }) +hl(0, 'Ignore', {}) +hl(0, 'Error', { fg = colors.diag_error, bold = true }) +hl(0, 'Todo', { fg = colors.purple, bold = true }) + +if config.plugins['nvim-treesitter'] then + hl(0, '@variable', { link = 'Identifier' }) + hl(0, '@variable.builtin', { link = 'Constant' }) + hl(0, '@variable.parameter', { link = 'Parameter' }) + hl(0, '@variable.member', { link = 'Property' }) + hl(0, '@property', { link = 'Property' }) + hl(0, '@property.json', { fg = colors.cyan }) + hl(0, '@property.yaml', { fg = colors.cyan }) + hl(0, '@constant', { link = 'Constant' }) + hl(0, '@constant.builtin', { link = 'Constant' }) + hl(0, '@constant.macro', { link = 'Constant' }) + hl(0, '@constant.html', { link = 'Tag' }) + hl(0, '@module', { link = 'Type' }) + hl(0, '@module.builtin', { link = 'Constant' }) + hl(0, '@label', { link = 'Statement' }) + hl(0, '@string', { link = 'String' }) + hl(0, '@string.documentation', { link = 'Statement' }) + hl(0, '@string.regexp', { link = 'Special' }) + hl(0, '@string.escape', { link = 'Statement' }) + hl(0, '@string.special', { link = 'Special' }) + hl(0, '@string.special.symbol', { link = 'Identifier' }) + hl(0, '@string.special.url', { link = 'Underlined' }) + hl(0, '@character', { link = 'Constant' }) + hl(0, '@character.special', { link = 'Constant' }) + hl(0, '@character.printf', { link = 'Keyword' }) + hl(0, '@type', { link = 'Type' }) + hl(0, '@type.builtin', { link = 'Keyword' }) + hl(0, '@type.definition', { link = 'Type' }) + hl(0, '@type.qualifier', { link = 'Type' }) + hl(0, '@attribute', { link = 'Keyword' }) + hl(0, '@function', { link = 'Function' }) + hl(0, '@function.builtin', { link = 'Function' }) + hl(0, '@function.call', { link = 'Function' }) + hl(0, '@function.macro', { link = 'Function' }) + hl(0, '@function.method', { link = 'Function' }) + hl(0, '@function.method.call', { link = 'Function' }) + hl(0, '@constructor', { link = 'Type' }) + hl(0, '@constructor.lua', { link = 'Delimiter' }) + hl(0, '@operator', { link = 'Operator' }) + hl(0, '@keyword', { link = 'Keyword' }) + hl(0, '@keyword.coroutine', { link = 'Statement' }) + hl(0, '@keyword.function', { link = 'Keyword' }) + hl(0, '@keyword.type', { link = 'Keyword' }) + hl(0, '@keyword.operator', { link = 'Statement' }) + hl(0, '@keyword.import', { link = 'Include' }) + hl(0, '@keyword.repeat', { link = 'Statement' }) + hl(0, '@keyword.return', { link = 'Statement' }) + hl(0, '@keyword.debug', { link = 'Keyword' }) + hl(0, '@keyword.exception', { link = 'Statement' }) + hl(0, '@keyword.conditional', { link = 'Statement' }) + hl(0, '@keyword.conditional.ternary', { link = 'Statement' }) + hl(0, '@keyword.directive', { link = 'Statement' }) + hl(0, '@keyword.directive.define', { link = 'Statement' }) + hl(0, '@punctuation.delimiter', { link = 'Delimiter' }) + hl(0, '@punctuation.bracket', { link = 'Delimiter' }) + hl(0, '@punctuation.special', { link = 'Keyword' }) + hl(0, '@comment', { link = 'Comment' }) + hl(0, '@comment.documentation', { link = 'Comment' }) + hl(0, '@comment.error', { fg = colors.diag_error, bg = colors.shade_error }) + hl(0, '@comment.warning', { fg = colors.diag_warning, bg = colors.shade_warning }) + hl(0, '@comment.todo', { fg = colors.purple, bg = colors.shade_purple }) + hl(0, '@comment.note', { fg = colors.diag_hint, bg = colors.shade_hint }) + hl(0, '@markup.strong', { fg = colors.orange, bold = true }) + hl(0, '@markup.italic', { fg = colors.yellow, italic = true }) + hl(0, '@markup.strikethrough', { fg = colors.base01 }) + hl(0, '@markup.underline', { fg = colors.cyan, underline = true }) + hl(0, '@markup.heading.1', { fg = colors.purple, bold = true }) + hl(0, '@markup.heading.2', { fg = colors.red, bold = true }) + hl(0, '@markup.heading.3', { fg = colors.orange, bold = true }) + hl(0, '@markup.heading.4', { fg = colors.yellow, bold = true }) + hl(0, '@markup.heading.5', { fg = colors.cyan, bold = true }) + hl(0, '@markup.heading.6', { fg = colors.green, bold = true }) + hl(0, '@markup.quote', { fg = colors.base01 }) + hl(0, '@markup.math', { fg = colors.purple }) + hl(0, '@markup.environment', { fg = colors.base01 }) + hl(0, '@markup.link', { fg = colors.orange, bold = true }) + hl(0, '@markup.link.label', { fg = colors.cyan, underline = true }) + hl(0, '@markup.link.url', { fg = colors.cyan, underline = true }) + hl(0, '@markup.raw', { fg = colors.base01 }) + hl(0, '@markup.raw.block', { fg = colors.base0 }) + hl(0, '@markup.list', { fg = colors.purple }) + hl(0, '@markup.list.checked', { fg = colors.git_added }) + hl(0, '@markup.list.unchecked', { fg = colors.git_modified }) + hl(0, '@diff.plus', { fg = colors.git_added }) + hl(0, '@diff.minus', { fg = colors.git_removed }) + hl(0, '@diff.delta', { fg = colors.git_modified }) + hl(0, '@tag', { link = 'Tag' }) + hl(0, '@tag.attribute', { link = 'TagAttribute' }) + hl(0, '@tag.delimiter', { link = 'TagDelimiter' }) +end + +if config.plugins['rainbow-delimiters'] then + hl(0, 'RainbowDelimiterRed', { fg = colors.red }) + hl(0, 'RainbowDelimiteYellow', { fg = colors.yellow }) + hl(0, 'RainbowDelimiterBlue', { fg = colors.pink }) + hl(0, 'RainbowDelimiterOrange', { fg = colors.orange }) + hl(0, 'RainbowDelimiterGreen', { fg = colors.green }) + hl(0, 'RainbowDelimiterViolet', { fg = colors.purple }) + hl(0, 'RainbowDelimiterCyan', { fg = colors.cyan }) +end + +if config.plugins['nvim-lspconfig'] then + hl(0, '@lsp.type.class', { link = 'Type' }) + hl(0, '@lsp.type.comment', {}) + hl(0, '@lsp.type.decorator', { link = 'Function' }) + hl(0, '@lsp.type.enum', { link = 'Type' }) + hl(0, '@lsp.type.enumMember', { link = 'Constant' }) + hl(0, '@lsp.type.event', { link = 'Function' }) + hl(0, '@lsp.type.function', { link = 'Function' }) + hl(0, '@lsp.type.interface', { link = 'Type' }) + hl(0, '@lsp.type.keyword', { link = 'Keyword' }) + hl(0, '@lsp.type.macro', { link = 'Constant' }) + hl(0, '@lsp.type.method', { link = 'Function' }) + -- hl(0,'@lsp.type.modifier') + hl(0, '@lsp.type.namespace', { link = 'Type' }) + hl(0, '@lsp.type.number', { link = 'Number' }) + hl(0, '@lsp.type.operator', { link = 'Operator' }) + hl(0, '@lsp.type.parameter', { link = 'Parameter' }) + hl(0, '@lsp.type.property', { link = 'Property' }) + hl(0, '@lsp.type.regexp', { link = 'Special' }) + hl(0, '@lsp.type.string', { link = 'String' }) + hl(0, '@lsp.type.struct', { link = 'Type' }) + hl(0, '@lsp.type.type', { link = 'Type' }) + hl(0, '@lsp.type.typeParameter', { link = 'Type' }) + hl(0, '@lsp.type.variable', { link = 'Identifier' }) + hl(0, '@lsp.mod.readonly', { link = 'Constant' }) + hl(0, '@lsp.mod.global', { link = 'Constant' }) + hl(0, 'DiagnosticError', { fg = colors.diag_error }) + hl(0, 'DiagnosticWarn', { fg = colors.diag_warning }) + hl(0, 'DiagnosticInfo', { fg = colors.diag_info }) + hl(0, 'DiagnosticHint', { fg = colors.diag_hint }) + hl(0, 'DiagnosticOk', { fg = colors.diag_ok }) + hl(0, 'DiagnosticVirtualTextError', { fg = colors.diag_error, bg = colors.shade_error }) + hl(0, 'DiagnosticVirtualTextWarn', { fg = colors.diag_warning, bg = colors.shade_warning }) + hl(0, 'DiagnosticVirtualTextInfo', { fg = colors.diag_info, bg = colors.shade_info }) + hl(0, 'DiagnosticVirtualTextHint', { fg = colors.diag_hint, bg = colors.shade_hint }) + hl(0, 'DiagnosticVirtualTextOk', { fg = colors.diag_ok, bg = colors.shade_ok }) + hl(0, 'DiagnosticUnderlineError', { fg = colors.diag_error, underline = true }) + hl(0, 'DiagnosticUnderlineWarn', { fg = colors.diag_warning, underline = true }) + hl(0, 'DiagnosticUnderlineInfo', { fg = colors.diag_info, underline = true }) + hl(0, 'DiagnosticUnderlineHint', { fg = colors.diag_hint, underline = true }) + hl(0, 'DiagnosticUnderlineOk', { fg = colors.diag_ok, underline = true }) + hl(0, 'LspReferenceText', { link = 'Visual' }) + hl(0, 'LspReferenceRead', { link = 'Visual' }) + hl(0, 'LspReferenceWrite', { link = 'Visual' }) + hl(0, 'LspInlayHint', { fg = colors.inlay_hint }) +end + +if config.plugins['nvim-navic'] then + hl(0, 'NavicText', { fg = colors.base0 }) + hl(0, 'NavicSeparator', { link = 'Statement' }) + hl(0, 'NavicIconsMethod', { link = 'Function' }) + hl(0, 'NavicIconsFunction', { link = 'Function' }) + hl(0, 'NavicIconsField', { link = 'Identifier' }) + hl(0, 'NavicIconsVariable', { link = 'Identifier' }) + hl(0, 'NavicIconsClass', { link = 'Type' }) + hl(0, 'NavicIconsInterface', { link = 'Type' }) + hl(0, 'NavicIconsModule', { link = 'Type' }) + hl(0, 'NavicIconsNamespace', { link = 'Type' }) + hl(0, 'NavicIconsProperty', { link = 'Identifier' }) + hl(0, 'NavicIconsUnit', { link = 'Number' }) + hl(0, 'NavicIconsEnum', { link = 'Type' }) + hl(0, 'NavicIconsKeyword', { link = 'Statement' }) + hl(0, 'NavicIconsSnippet', { link = 'Tag' }) + hl(0, 'NavicIconsColor', { fg = colors.orange }) + hl(0, 'NavicIconsFile', { link = 'Identifier' }) + hl(0, 'NavicIconsReference', { link = 'Underlined' }) + hl(0, 'NavicIconsFolder', { link = 'Directory' }) + hl(0, 'NavicIconsEnumMember', { link = 'Constant' }) + hl(0, 'NavicIconsConstant', { link = 'Constant' }) + hl(0, 'NavicIconsStruct', { link = 'Identifier' }) + hl(0, 'NavicIconsEvent', { link = 'Function' }) + hl(0, 'NavicIconsOperator', { link = 'Operator' }) + hl(0, 'NavicIconsTypeParameter', { link = 'Type' }) +end + +if config.plugins['nvim-cmp'] then + hl(0, 'CmpItemKindText', { link = 'String' }) + hl(0, 'CmpItemKindMethod', { link = 'Function' }) + hl(0, 'CmpItemKindFunction', { link = 'Function' }) + hl(0, 'CmpItemKindField', { link = 'Identifier' }) + hl(0, 'CmpItemKindVariable', { link = 'Identifier' }) + hl(0, 'CmpItemKindClass', { link = 'Type' }) + hl(0, 'CmpItemKindInterface', { link = 'Type' }) + hl(0, 'CmpItemKindModule', { link = 'Type' }) + hl(0, 'CmpItemKindProperty', { link = 'Identifier' }) + hl(0, 'CmpItemKindUnit', { link = 'Number' }) + hl(0, 'CmpItemKindEnum', { link = 'Type' }) + hl(0, 'CmpItemKindKeyword', { link = 'Statement' }) + hl(0, 'CmpItemKindSnippet', { link = 'Tag' }) + hl(0, 'CmpItemKindColor', { fg = colors.orange }) + hl(0, 'CmpItemKindFile', { link = 'Identifier' }) + hl(0, 'CmpItemKindReference', { link = 'Underlined' }) + hl(0, 'CmpItemKindFolder', { link = 'Directory' }) + hl(0, 'CmpItemKindEnumMember', { link = 'Constant' }) + hl(0, 'CmpItemKindConstant', { link = 'Constant' }) + hl(0, 'CmpItemKindStruct', { link = 'Identifier' }) + hl(0, 'CmpItemKindEvent', { link = 'Function' }) + hl(0, 'CmpItemKindOperator', { link = 'Operator' }) + hl(0, 'CmpItemKindTypeParameter', { link = 'Type' }) +end + +if config.plugins['indent-blankline.nvim'] then + hl(0, 'IblIndent', { fg = colors.shade_purple, nocombine = true }) + hl(0, 'IblScope', { fg = colors.purple, nocombine = true }) +end + +if config.plugins['neo-tree.nvim'] then + hl(0, 'NeoTreeNormalNC', { link = 'NeoTreeNormal' }) + hl(0, 'NeoTreeDotFile', { fg = colors.base01 }) + hl(0, 'NeoTreeFileNameOpened', { link = 'Directory' }) + hl(0, 'NeoTreeFloatBorder', { link = 'WinSeparator' }) + hl(0, 'NeoTreeFloatTitle', { link = 'Title' }) + hl(0, 'NeoTreeGitAdded', { fg = colors.git_added }) + hl(0, 'NeoTreeGitConflict', { fg = colors.git_modified }) + hl(0, 'NeoTreeGitDeleted', { fg = colors.git_removed }) + hl(0, 'NeoTreeGitIgnored', { fg = colors.base01 }) + hl(0, 'NeoTreeGitModified', { fg = colors.git_modified }) + hl(0, 'NeoTreeGitUnstaged', { fg = colors.git_modified }) + hl(0, 'NeoTreeGitUntracked', { fg = colors.git_modified }) + hl(0, 'NeoTreeGitStaged', { fg = colors.git_added }) +end + +if config.plugins['nvim-tree.lua'] then + hl(0, 'NvimTreeSymlink', { link = 'Underlined' }) + hl(0, 'NvimTreeSymlinkIcon', { link = 'Directory' }) + hl(0, 'NvimTreeFolderName', { fg = colors.base0 }) + hl(0, 'NvimTreeRootFolder', { fg = colors.purple, bold = true }) + hl(0, 'NvimTreeFolderIcon', { link = 'Directory' }) + hl(0, 'NvimTreeEmptyFolderName', { fg = colors.base0 }) + hl(0, 'NvimTreeExecFile', { fg = colors.green }) + hl(0, 'NvimTreeOpenedFile', { fg = colors.purple, bold = true }) + hl(0, 'NvimTreeModifiedFile', { fg = colors.git_modified }) + hl(0, 'NvimTreeSpecialFile', { link = 'Special' }) + hl(0, 'NvimTreeIndentMarker', { fg = colors.shade_purple }) + hl(0, 'NvimTreeGitDirty', { fg = colors.git_modified }) + hl(0, 'NvimTreeGitStaged', { fg = colors.git_added }) + hl(0, 'NvimTreeGitMerge', { fg = colors.git_modified }) + hl(0, 'NvimTreeGitRenamed', { fg = colors.git_modified }) + hl(0, 'NvimTreeGitNew', { fg = colors.git_added }) + hl(0, 'NvimTreeGitDeleted', { fg = colors.git_removed }) + hl(0, 'NvimTreeNormalFloat', { link = 'NvimTreeNormal' }) + hl(0, 'NvimTreeEndOfBuffer', { fg = colors.base04 }) + hl(0, 'NvimTreeWinSeparator', { fg = colors.base04, bg = colors.base04 }) +end + +if config.plugins['which-key.nvim'] then + hl(0, 'WhichKey', { fg = colors.green }) + hl(0, 'WhichKeyDesc', { fg = colors.orange, italic = true }) + hl(0, 'WhichKeySeparator', { fg = colors.pink }) + hl(0, 'WhichKeyGroup', { fg = colors.purple }) +end + +if config.plugins['dashboard-nvim'] then + hl(0, 'DashboardHeader', { fg = colors.red }) + hl(0, 'DashboardFooter', { fg = colors.base01 }) + hl(0, 'DashboardDesc', { link = 'Directory' }) + hl(0, 'DashboardKey', { fg = colors.pink }) + hl(0, 'DashboardIcon', { link = 'Directory' }) + hl(0, 'DashboardShotCut', { fg = colors.base0 }) +end + +if config.plugins['gitsigns.nvim'] then + hl(0, 'GitSignsAdd', { fg = colors.git_added }) + hl(0, 'GitSignsChange', { fg = colors.git_modified }) + hl(0, 'GitSignsDelete', { fg = colors.git_removed }) +end + +if config.plugins['neogit'] then + hl(0, 'NeogitCursorLine', { link = 'CursorLine' }) + hl(0, 'NeogitBranch', { fg = colors.purple }) + hl(0, 'NeogitRemote', { fg = colors.cyan }) + hl(0, 'NeogitHunkHeader', { fg = colors.purple, bg = colors.shade_purple }) + hl(0, 'NeogitHunkHeaderHighlight', { link = 'Title' }) + hl(0, 'NeogitDiffContextHighlight', { fg = colors.base0, bg = colors.base03 }) + hl(0, 'NeogitDiffContext', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'NeogitDiffDeleteHighlight', { fg = colors.git_removed, bg = colors.shade_red }) + hl(0, 'NeogitDiffDelete', { fg = colors.git_removed }) + hl(0, 'NeogitDiffAddHighlight', { fg = colors.git_added, bg = colors.shade_green }) + hl(0, 'NeogitDiffAdd', { fg = colors.git_added }) +end + +if config.plugins['todo-comments.nvim'] then + hl(0, 'TodoFgTODO', { fg = colors.purple }) + hl(0, 'TodoFgWARN', { fg = colors.diag_warning }) + hl(0, 'TodoFgTEST', { fg = colors.diag_ok }) + hl(0, 'TodoFgPERF', { fg = colors.yellow }) + hl(0, 'TodoFgNOTE', { fg = colors.cyan }) + hl(0, 'TodoFgHACK', { fg = colors.pink }) + hl(0, 'TodoFgFIX', { fg = colors.diag_error }) + hl(0, 'TodoSignTODO', { fg = colors.purple }) + hl(0, 'TodoSignWARN', { fg = colors.diag_warning }) + hl(0, 'TodoSignTEST', { fg = colors.diag_ok }) + hl(0, 'TodoSignPERF', { fg = colors.yellow }) + hl(0, 'TodoSignNOTE', { fg = colors.cyan }) + hl(0, 'TodoSignHACK', { fg = colors.pink }) + hl(0, 'TodoSignFIX', { fg = colors.diag_error }) + hl(0, 'TodoBgTODO', { fg = colors.purple, reverse = true }) + hl(0, 'TodoBgWARN', { fg = colors.diag_warning, reverse = true }) + hl(0, 'TodoBgTEST', { fg = colors.diag_ok, reverse = true }) + hl(0, 'TodoBgPERF', { fg = colors.yellow, reverse = true }) + hl(0, 'TodoBgNOTE', { fg = colors.cyan, reverse = true }) + hl(0, 'TodoBgHACK', { fg = colors.pink, reverse = true }) + hl(0, 'TodoBgFIX', { fg = colors.diag_error, reverse = true }) +end + +if config.plugins['lazy.nvim'] then + hl(0, 'LazyH1', { fg = colors.purple, bg = colors.base04 }) + hl(0, 'LazyButton', { fg = colors.base0, bg = colors.base02 }) + hl(0, 'LazyButtonActive', { bg = colors.base02, reverse = true }) + hl(0, 'LazyReasonStart', { fg = colors.cyan }) +end + +if config.plugins['telescope.nvim'] then + hl(0, 'TelescopeSelection', { link = 'CursorLine' }) + hl(0, 'TelescopeSelectionCaret', { fg = colors.purple }) + hl(0, 'TelescopeMultiIcon', { fg = colors.purple }) + hl(0, 'TelescopePreviewNormal', { link = 'TelescopeNormal' }) + hl(0, 'TelescopePromptNormal', { link = 'TelescopeNormal' }) + hl(0, 'TelescopeResultsNormal', { link = 'TelescopeNormal' }) + hl(0, 'TelescopePromptBorder', { link = 'TelescopeBorder' }) + hl(0, 'TelescopeResultsBorder', { link = 'TelescopeBorder' }) + hl(0, 'TelescopePreviewBorder', { link = 'TelescopeBorder' }) + hl(0, 'TelescopeTitle', { fg = colors.purple, bg = colors.shade_purple }) + hl(0, 'TelescopePromptTitle', { link = 'TelescopeTitle' }) + hl(0, 'TelescopeResultsTitle', { link = 'TelescopeTitle' }) + hl(0, 'TelescopePreviewTitle', { link = 'TelescopeTitle' }) + hl(0, 'TelescopeMatching', { fg = colors.purple, bg = colors.shade_purple }) + hl(0, 'TelescopePreviewMatch', { link = 'TelescopeMatching' }) + hl(0, 'TelescopePromptCounter', { link = 'NonText' }) + hl(0, 'TelescopePromptPrefix', { fg = colors.purple }) +end + +if config.plugins['noice.nvim'] then + hl(0, 'NoiceFormatProgressTodo', { fg = colors.diag_ok, bg = colors.shade_ok }) + hl(0, 'NoiceFormatProgressDone', { fg = colors.diag_ok, reverse = true }) + hl(0, 'NoiceLspProgressSpinner', { fg = colors.diag_ok }) + hl(0, 'NoiceLspProgressClient', { fg = colors.diag_ok }) + hl(0, 'NoiceLspProgressTitle', { link = 'Title' }) +end + +if config.plugins['hop.nvim'] then + hl(0, 'HopNextKey', { fg = colors.red }) + hl(0, 'HopNextKey1', { fg = colors.cyan }) + hl(0, 'HopUnmatched', { fg = colors.base01 }) +end + +if config.plugins['mini.statusline'] then + hl(0, 'MiniStatuslineModeNormal', { fg = colors.base03, bg = colors.purple }) + hl(0, 'MiniStatuslineModeInsert', { fg = colors.base03, bg = colors.green }) + hl(0, 'MiniStatuslineModeVisual', { fg = colors.yellow, bg = colors.base03 }) + hl(0, 'MiniStatuslineModeReplace', { fg = colors.red, bg = colors.base03 }) + hl(0, 'MiniStatuslineModeCommand', { fg = colors.orange, bg = colors.base03 }) + hl(0, 'MinistatusLineFileName', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'MiniStatuslineDevinfo', { fg = colors.base0, bg = colors.base02 }) + hl(0, 'MiniStatuslineFileinfo', { fg = colors.base0, bg = colors.base02 }) + hl(0, 'MiniStatuslineInactive', { fg = colors.base01, bg = colors.base03 }) +end + +if config.plugins['mini.tabline'] then + hl(0, 'MiniTablineCurrent', { fg = colors.base0, bg = colors.base03 }) + hl(0, 'MiniTablineVisible', { fg = colors.base0, bg = colors.base03 }) + hl(0, 'MiniTablineHidden', { fg = colors.base01, bg = colors.base03 }) + hl(0, 'MiniTablineModifiedCurrent', { link = 'MiniTabLineCurrent' }) + hl(0, 'MiniTablineModifiedVisible', { link = 'MiniTablineVisible' }) + hl(0, 'MiniTablineModifiedHidden', { link = 'MiniTablineHidden' }) + hl(0, 'MiniTablineFill', { fg = colors.base0, bg = colors.base04 }) + hl(0, 'MiniTablineTabpagesection', { fg = colors.base0, bg = colors.base04 }) +end + +if config.plugins['mini.starter'] then + hl(0, 'MiniStarterCurrent', { link = 'CursorLine' }) + hl(0, 'MiniStarterHeader', { fg = colors.red }) + hl(0, 'MiniStarterFooter', { fg = colors.base01 }) + hl(0, 'MiniStarterItem', { fg = colors.base0 }) + hl(0, 'MiniStarterItemBullet', { fg = colors.pink }) + hl(0, 'MiniStarterItemPrefix', { fg = colors.pink }) + hl(0, 'MiniStarterSection', { link = 'Title' }) + hl(0, 'MiniStarterQuery', { fg = colors.pink, bold = true }) +end + +if config.plugins['mini.cursorword'] then + hl(0, 'MiniCursorword', { link = 'Visual' }) +end + +if config.plugins['bufferline.nvim'] and config.transparent then + local color = require 'dracula.color' + local background = color.shade(colors.base02, 2) + hl(0, 'BufferLineFill', { bg = background }) + hl(0, 'BufferLineBufferSelected', { fg = colors.base0 }) + hl(0, 'BufferLineSeparator', { fg = background }) + hl(0, 'BufferLineSeparatorSelected', { fg = background }) + hl(0, 'BufferLineSeparatorVisible', { fg = background }) +end + +if config.styles then + for group_name, group_val in pairs(config.styles) do + local group = api.nvim_get_hl(0, { name = group_name, link = false }) + ---@diagnostic disable-next-line: param-type-mismatch + hl(0, group_name, vim.tbl_deep_extend('force', group, group_val)) + end +end + +if config.on_highlights then + local color = require 'dracula.color' + local highlights = config.on_highlights(colors, color) + for group_name, group_val in pairs(highlights) do + local group = api.nvim_get_hl(0, { name = group_name, link = false }) + ---@diagnostic disable-next-line: param-type-mismatch + hl(0, group_name, vim.tbl_deep_extend('force', group, group_val)) + end +end diff --git a/doc/dracula.txt b/doc/dracula.txt index 8d160a2..6251986 100644 --- a/doc/dracula.txt +++ b/doc/dracula.txt @@ -54,14 +54,15 @@ Annotations can be enabled. Below is an example of how to enable them. dracula.setup({ styles = { - types = {}, - functions = {}, - parameters = {}, - comments = {}, - strings = {}, - keywords = {}, - variables = {}, - constants = {}, + Type = {}, + Function = {}, + Parameter = {}, + Property = {}, + Comment = {}, + String = {}, + Keyword = {}, + Identifier = {}, + Constant = {}, }, transparent = false, on_colors = function (colors, color) diff --git a/lua/barbecue/theme/dracula.lua b/lua/barbecue/theme/dracula.lua index bcffe46..df629b0 100644 --- a/lua/barbecue/theme/dracula.lua +++ b/lua/barbecue/theme/dracula.lua @@ -7,13 +7,13 @@ local M = { basename = { link = 'Identifier' }, context = { link = 'Identifier' }, context_file = { link = 'Identifier' }, - context_module = { link = 'Identifier' }, - context_namespace = { link = 'Identifier' }, + context_module = { link = 'Type' }, + context_namespace = { link = 'Type' }, context_package = { link = 'Directory' }, context_class = { link = 'Type' }, context_method = { link = 'Function' }, - context_property = { link = 'Identifier' }, - context_field = { link = 'Identifier' }, + context_property = { link = 'Property' }, + context_field = { link = 'Property' }, context_constructor = { link = 'Type' }, context_enum = { link = 'Type' }, context_interface = { link = 'Type' }, diff --git a/lua/dracula/config.lua b/lua/dracula/config.lua index a4445c6..c5b9576 100644 --- a/lua/dracula/config.lua +++ b/lua/dracula/config.lua @@ -1,28 +1,32 @@ ---@class dracula.styles ----@field types? vim.api.keyset.highlight ----@field functions? vim.api.keyset.highlight ----@field parameters? vim.api.keyset.highlight ----@field comments? vim.api.keyset.highlight ----@field strings? vim.api.keyset.highlight ----@field keywords? vim.api.keyset.highlight ----@field variables? vim.api.keyset.highlight ----@field constants? vim.api.keyset.highlight +---@field Type? vim.api.keyset.highlight +---@field Function? vim.api.keyset.highlight +---@field Parameter? vim.api.keyset.highlight +---@field Property? vim.api.keyset.highlight +---@field Comment? vim.api.keyset.highlight +---@field String? vim.api.keyset.highlight +---@field Keyword? vim.api.keyset.highlight +---@field Identifier? vim.api.keyset.highlight +---@field Constant? vim.api.keyset.highlight ---@class dracula.config ----@field styles dracula.styles +---@field styles? dracula.styles ---@field transparent? boolean ---@field on_highlights? fun(colors: dracula.palette, color: dracula.color): dracula.highlights ---@field on_colors? fun(colors: dracula.palette, color: dracula.color): dracula.palette return { styles = { - types = {}, - functions = {}, - parameters = {}, - comments = {}, - strings = {}, - keywords = {}, - variables = {}, - constants = {}, + Type = {}, + Function = {}, + Parameter = {}, + Property = {}, + Comment = { + italic = true, + }, + String = {}, + Keyword = {}, + Identifier = {}, + Constant = {}, }, transparent = false, on_highlights = nil, diff --git a/lua/dracula/groups.lua b/lua/dracula/groups.lua new file mode 100644 index 0000000..f5b04b6 --- /dev/null +++ b/lua/dracula/groups.lua @@ -0,0 +1,323 @@ +---@class dracula.highlights +---@field ColorColumn? vim.api.keyset.highlight +---@field Conceal? vim.api.keyset.highlight +---@field CurSearch? vim.api.keyset.highlight +---@field Cursor? vim.api.keyset.highlight +---@field lCursor? vim.api.keyset.highlight +---@field CursorIM? vim.api.keyset.highlight +---@field CursorColumn? vim.api.keyset.highlight +---@field CursorLine? vim.api.keyset.highlight +---@field Directory? vim.api.keyset.highlight +---@field DiffAdd? vim.api.keyset.highlight +---@field DiffChange? vim.api.keyset.highlight +---@field DiffDelete? vim.api.keyset.highlight +---@field DiffText? vim.api.keyset.highlight +---@field EndOfBuffer? vim.api.keyset.highlight +---@field TermCursor? vim.api.keyset.highlight +---@field TermCursorNC? vim.api.keyset.highlight +---@field ErrorMsg? vim.api.keyset.highlight +---@field WinSeparator? vim.api.keyset.highlight +---@field Folded? vim.api.keyset.highlight +---@field FoldColumn? vim.api.keyset.highlight +---@field SignColumn? vim.api.keyset.highlight +---@field IncSearch? vim.api.keyset.highlight +---@field Substitute? vim.api.keyset.highlight +---@field LineNr? vim.api.keyset.highlight +---@field LineNrAbove? vim.api.keyset.highlight +---@field LineNrBelow? vim.api.keyset.highlight +---@field CursorLineNr? vim.api.keyset.highlight +---@field CursorLineFold? vim.api.keyset.highlight +---@field CursorLineSign? vim.api.keyset.highlight +---@field MatchParen? vim.api.keyset.highlight +---@field ModeMsg? vim.api.keyset.highlight +---@field MsgArea? vim.api.keyset.highlight +---@field MsgSeparator? vim.api.keyset.highlight +---@field MoreMsg? vim.api.keyset.highlight +---@field NonText? vim.api.keyset.highlight +---@field Normal? vim.api.keyset.highlight +---@field NormalFloat? vim.api.keyset.highlight +---@field FloatBorder? vim.api.keyset.highlight +---@field FloatTitle? vim.api.keyset.highlight +---@field NormalNC? vim.api.keyset.highlight +---@field Pmenu? vim.api.keyset.highlight +---@field PmenuSel? vim.api.keyset.highlight +---@field PmenuKind? vim.api.keyset.highlight +---@field PmenuKindSel? vim.api.keyset.highlight +---@field PmenuExtra? vim.api.keyset.highlight +---@field PmenuExtraSel? vim.api.keyset.highlight +---@field PmenuSbar? vim.api.keyset.highlight +---@field PmenuThumb? vim.api.keyset.highlight +---@field Question? vim.api.keyset.highlight +---@field QuickFixLine? vim.api.keyset.highlight +---@field Search? vim.api.keyset.highlight +---@field SpecialKey? vim.api.keyset.highlight +---@field SpellBad? vim.api.keyset.highlight +---@field SpellCap? vim.api.keyset.highlight +---@field SpellLocal? vim.api.keyset.highlight +---@field SpellRare? vim.api.keyset.highlight +---@field StatusLine? vim.api.keyset.highlight +---@field StatusLineNC? vim.api.keyset.highlight +---@field TabLine? vim.api.keyset.highlight +---@field TabLineFill? vim.api.keyset.highlight +---@field TabLineSel? vim.api.keyset.highlight +---@field Title? vim.api.keyset.highlight +---@field Visual? vim.api.keyset.highlight +---@field VisualNOS? vim.api.keyset.highlight +---@field warningMsg? vim.api.keyset.highlight +---@field Whitespace? vim.api.keyset.highlight +---@field WildMenu? vim.api.keyset.highlight +---@field WinBar? vim.api.keyset.highlight +---@field WinBarNC? vim.api.keyset.highlight +---@field Comment? vim.api.keyset.highlight +---@field Constant? vim.api.keyset.highlight +---@field String? vim.api.keyset.highlight +---@field Character? vim.api.keyset.highlight +---@field Number? vim.api.keyset.highlight +---@field Boolean? vim.api.keyset.highlight +---@field Float? vim.api.keyset.highlight +---@field Identifier? vim.api.keyset.highlight +---@field Property? vim.api.keyset.highlight +---@field Parameter? vim.api.keyset.highlight +---@field Function? vim.api.keyset.highlight +---@field Statement? vim.api.keyset.highlight +---@field Conditional? vim.api.keyset.highlight +---@field Repeat? vim.api.keyset.highlight +---@field Label? vim.api.keyset.highlight +---@field Operator? vim.api.keyset.highlight +---@field Keyword? vim.api.keyset.highlight +---@field Exception? vim.api.keyset.highlight +---@field PreProc? vim.api.keyset.highlight +---@field Include? vim.api.keyset.highlight +---@field Define? vim.api.keyset.highlight +---@field Macro? vim.api.keyset.highlight +---@field PreCondit? vim.api.keyset.highlight +---@field Type? vim.api.keyset.highlight +---@field StorageClass? vim.api.keyset.highlight +---@field Structure? vim.api.keyset.highlight +---@field Typedef? vim.api.keyset.highlight +---@field Special? vim.api.keyset.highlight +---@field SpecialChar? vim.api.keyset.highlight +---@field Tag? vim.api.keyset.highlight +---@field TagAttribute? vim.api.keyset.highlight +---@field TagDelimiter? vim.api.keyset.highlight +---@field Delimiter? vim.api.keyset.highlight +---@field SpecialComment? vim.api.keyset.highlight +---@field Debug? vim.api.keyset.highlight +---@field Underlined? vim.api.keyset.highlight +---@field Ignore? vim.api.keyset.highlight +---@field Error? vim.api.keyset.highlight +---@field Todo? vim.api.keyset.highlight +---@field DiagnosticError? vim.api.keyset.highlight +---@field DiagnosticWarn? vim.api.keyset.highlight +---@field DiagnosticInfo? vim.api.keyset.highlight +---@field DiagnosticHint? vim.api.keyset.highlight +---@field DiagnosticOk? vim.api.keyset.highlight +---@field DiagnosticVirtualTextError? vim.api.keyset.highlight +---@field DiagnosticVirtualTextWarn? vim.api.keyset.highlight +---@field DiagnosticVirtualTextInfo? vim.api.keyset.highlight +---@field DiagnosticVirtualTextHint? vim.api.keyset.highlight +---@field DiagnosticVirtualTextOk? vim.api.keyset.highlight +---@field DiagnosticUnderlineError? vim.api.keyset.highlight +---@field DiagnosticUnderlineWarn? vim.api.keyset.highlight +---@field DiagnosticUnderlineInfo? vim.api.keyset.highlight +---@field DiagnosticUnderlineHint? vim.api.keyset.highlight +---@field DiagnosticUnderlineOk? vim.api.keyset.highlight +---@field LspReferenceText? vim.api.keyset.highlight +---@field LspReferenceRead? vim.api.keyset.highlight +---@field LspReferenceWrite? vim.api.keyset.highlight +---@field LspInlayHint? vim.api.keyset.highlight +---@field NavicText? vim.api.keyset.highlight +---@field NavicSeparator? vim.api.keyset.highlight +---@field NavicIconsMethod? vim.api.keyset.highlight +---@field NavicIconsFunction? vim.api.keyset.highlight +---@field NavicIconsField? vim.api.keyset.highlight +---@field NavicIconsVariable? vim.api.keyset.highlight +---@field NavicIconsClass? vim.api.keyset.highlight +---@field NavicIconsInterface? vim.api.keyset.highlight +---@field NavicIconsModule? vim.api.keyset.highlight +---@field NavicIconsNamespace? vim.api.keyset.highlight +---@field NavicIconsProperty? vim.api.keyset.highlight +---@field NavicIconsUnit? vim.api.keyset.highlight +---@field NavicIconsEnum? vim.api.keyset.highlight +---@field NavicIconsKeyword? vim.api.keyset.highlight +---@field NavicIconsSnippet? vim.api.keyset.highlight +---@field NavicIconsColor? vim.api.keyset.highlight +---@field NavicIconsFile? vim.api.keyset.highlight +---@field NavicIconsReference? vim.api.keyset.highlight +---@field NavicIconsFolder? vim.api.keyset.highlight +---@field NavicIconsEnumMember? vim.api.keyset.highlight +---@field NavicIconsConstant? vim.api.keyset.highlight +---@field NavicIconsStruct? vim.api.keyset.highlight +---@field NavicIconsEvent? vim.api.keyset.highlight +---@field NavicIconsOperator? vim.api.keyset.highlight +---@field NavicIconsTypeParameter? vim.api.keyset.highlight +---@field CmpItemKindText? vim.api.keyset.highlight +---@field CmpItemKindMethod? vim.api.keyset.highlight +---@field CmpItemKindFunction? vim.api.keyset.highlight +---@field CmpItemKindField? vim.api.keyset.highlight +---@field CmpItemKindVariable? vim.api.keyset.highlight +---@field CmpItemKindClass? vim.api.keyset.highlight +---@field CmpItemKindInterface? vim.api.keyset.highlight +---@field CmpItemKindModule? vim.api.keyset.highlight +---@field CmpItemKindProperty? vim.api.keyset.highlight +---@field CmpItemKindUnit? vim.api.keyset.highlight +---@field CmpItemKindEnum? vim.api.keyset.highlight +---@field CmpItemKindKeyword? vim.api.keyset.highlight +---@field CmpItemKindSnippet? vim.api.keyset.highlight +---@field CmpItemKindColor? vim.api.keyset.highlight +---@field CmpItemKindFile? vim.api.keyset.highlight +---@field CmpItemKindReference? vim.api.keyset.highlight +---@field CmpItemKindFolder? vim.api.keyset.highlight +---@field CmpItemKindEnumMember? vim.api.keyset.highlight +---@field CmpItemKindConstant? vim.api.keyset.highlight +---@field CmpItemKindStruct? vim.api.keyset.highlight +---@field CmpItemKindEvent? vim.api.keyset.highlight +---@field CmpItemKindOperator? vim.api.keyset.highlight +---@field CmpItemKindTypeParameter? vim.api.keyset.highlight +---@field IblIndent? vim.api.keyset.highlight +---@field IblScope? vim.api.keyset.highlight +---@field NeoTreeNormal? vim.api.keyset.highlight +---@field NeoTreeNormalNC? vim.api.keyset.highlight +---@field NeoTreeDotFile? vim.api.keyset.highlight +---@field NeoTreeFileNameOpened? vim.api.keyset.highlight +---@field NeoTreeFloatBorder? vim.api.keyset.highlight +---@field NeoTreeFloatTitle? vim.api.keyset.highlight +---@field NeoTreeGitAdded? vim.api.keyset.highlight +---@field NeoTreeGitConflict? vim.api.keyset.highlight +---@field NeoTreeGitDeleted? vim.api.keyset.highlight +---@field NeoTreeGitIgnored? vim.api.keyset.highlight +---@field NeoTreeGitModified? vim.api.keyset.highlight +---@field NeoTreeGitUnstaged? vim.api.keyset.highlight +---@field NeoTreeGitUntracked? vim.api.keyset.highlight +---@field NeoTreeGitStaged? vim.api.keyset.highlight +---@field NvimTreeSymlink? vim.api.keyset.highlight +---@field NvimTreeSymlinkIcon? vim.api.keyset.highlight +---@field NvimTreeFolderName? vim.api.keyset.highlight +---@field NvimTreeRootFolder? vim.api.keyset.highlight +---@field NvimTreeFolderIcon? vim.api.keyset.highlight +---@field NvimTreeEmptyFolderName? vim.api.keyset.highlight +---@field NvimTreeExecFile? vim.api.keyset.highlight +---@field NvimTreeOpenedFile? vim.api.keyset.highlight +---@field NvimTreeModifiedFile? vim.api.keyset.highlight +---@field NvimTreeSpecialFile? vim.api.keyset.highlight +---@field NvimTreeIndentMarker? vim.api.keyset.highlight +---@field NvimTreeGitDirty? vim.api.keyset.highlight +---@field NvimTreeGitStaged? vim.api.keyset.highlight +---@field NvimTreeGitMerge? vim.api.keyset.highlight +---@field NvimTreeGitRenamed? vim.api.keyset.highlight +---@field NvimTreeGitNew? vim.api.keyset.highlight +---@field NvimTreeGitDeleted? vim.api.keyset.highlight +---@field NvimTreeNormal? vim.api.keyset.highlight +---@field NvimTreeNormalFloat? vim.api.keyset.highlight +---@field NvimTreeEndOfBuffer? vim.api.keyset.highlight +---@field NvimTreeWinSeparator? vim.api.keyset.highlight +---@field WhichKey? vim.api.keyset.highlight +---@field WhichKeyNormal? vim.api.keyset.highlight +---@field WhichKeyDesc? vim.api.keyset.highlight +---@field WhichKeySeparator? vim.api.keyset.highlight +---@field WhichKeyGroup? vim.api.keyset.highlight +---@field DashboardHeader? vim.api.keyset.highlight +---@field DashboardFooter? vim.api.keyset.highlight +---@field DashboardDesc? vim.api.keyset.highlight +---@field DashboardKey? vim.api.keyset.highlight +---@field DashboardIcon? vim.api.keyset.highlight +---@field DashboardShotCut? vim.api.keyset.highlight +---@field GitSignsAdd? vim.api.keyset.highlight +---@field GitSignsChange? vim.api.keyset.highlight +---@field GitSignsDelete? vim.api.keyset.highlight +---@field NeogitCursorLine? vim.api.keyset.highlight +---@field NeogitBranch? vim.api.keyset.highlight +---@field NeogitRemote? vim.api.keyset.highlight +---@field NeogitHunkHeader? vim.api.keyset.highlight +---@field NeogitHunkHeaderHighlight? vim.api.keyset.highlight +---@field NeogitDiffContextHighlight? vim.api.keyset.highlight +---@field NeogitDiffContext? vim.api.keyset.highlight +---@field NeogitDiffDeleteHighlight? vim.api.keyset.highlight +---@field NeogitDiffDelete? vim.api.keyset.highlight +---@field NeogitDiffAddHighlight? vim.api.keyset.highlight +---@field NeogitDiffAdd? vim.api.keyset.highlight +---@field TodoFgTODO? vim.api.keyset.highlight +---@field TodoFgWARN? vim.api.keyset.highlight +---@field TodoFgTEST? vim.api.keyset.highlight +---@field TodoFgPERF? vim.api.keyset.highlight +---@field TodoFgNOTE? vim.api.keyset.highlight +---@field TodoFgHACK? vim.api.keyset.highlight +---@field TodoFgFIX? vim.api.keyset.highlight +---@field TodoSignTODO? vim.api.keyset.highlight +---@field TodoSignWARN? vim.api.keyset.highlight +---@field TodoSignTEST? vim.api.keyset.highlight +---@field TodoSignPERF? vim.api.keyset.highlight +---@field TodoSignNOTE? vim.api.keyset.highlight +---@field TodoSignHACK? vim.api.keyset.highlight +---@field TodoSignFIX? vim.api.keyset.highlight +---@field TodoBgTODO? vim.api.keyset.highlight +---@field TodoBgWARN? vim.api.keyset.highlight +---@field TodoBgTEST? vim.api.keyset.highlight +---@field TodoBgPERF? vim.api.keyset.highlight +---@field TodoBgNOTE? vim.api.keyset.highlight +---@field TodoBgHACK? vim.api.keyset.highlight +---@field TodoBgFIX? vim.api.keyset.highlight +---@field LazyH1? vim.api.keyset.highlight +---@field LazyButton? vim.api.keyset.highlight +---@field LazyButtonActive? vim.api.keyset.highlight +---@field LazyReasonStart? vim.api.keyset.highlight +---@field TelescopeSelection? vim.api.keyset.highlight +---@field TelescopeSelectionCaret? vim.api.keyset.highlight +---@field TelescopeMultiIcon? vim.api.keyset.highlight +---@field TelescopeNormal? vim.api.keyset.highlight +---@field TelescopePreviewNormal? vim.api.keyset.highlight +---@field TelescopePromptNormal? vim.api.keyset.highlight +---@field TelescopeResultsNormal? vim.api.keyset.highlight +---@field TelescopeBorder? vim.api.keyset.highlight +---@field TelescopePromptBorder? vim.api.keyset.highlight +---@field TelescopeResultsBorder? vim.api.keyset.highlight +---@field TelescopePreviewBorder? vim.api.keyset.highlight +---@field TelescopeTitle? vim.api.keyset.highlight +---@field TelescopePromptTitle? vim.api.keyset.highlight +---@field TelescopeResultsTitle? vim.api.keyset.highlight +---@field TelescopePreviewTitle? vim.api.keyset.highlight +---@field TelescopeMatching? vim.api.keyset.highlight +---@field TelescopePreviewMatch? vim.api.keyset.highlight +---@field TelescopePromptCounter? vim.api.keyset.highlight +---@field TelescopePromptPrefix? vim.api.keyset.highlight +---@field NoiceFormatProgressTodo? vim.api.keyset.highlight +---@field NoiceFormatProgressDone? vim.api.keyset.highlight +---@field NoiceLspProgressSpinner? vim.api.keyset.highlight +---@field NoiceLspProgressClient? vim.api.keyset.highlight +---@field NoiceLspProgressTitle? vim.api.keyset.highlight +---@field HopNextKey? vim.api.keyset.highlight +---@field HopNextKey1? vim.api.keyset.highlight +---@field HopUnmatched? vim.api.keyset.highlight +---@field MiniStatuslineModeNormal? vim.api.keyset.highlight +---@field MiniStatuslineModeInsert? vim.api.keyset.highlight +---@field MiniStatuslineModeVisual? vim.api.keyset.highlight +---@field MiniStatuslineModeReplace? vim.api.keyset.highlight +---@field MiniStatuslineModeCommand? vim.api.keyset.highlight +---@field MinistatusLineFileName? vim.api.keyset.highlight +---@field MiniStatuslineDevinfo? vim.api.keyset.highlight +---@field MiniStatuslineFileinfo? vim.api.keyset.highlight +---@field MiniStatuslineInactive? vim.api.keyset.highlight +---@field MiniTablineCurrent? vim.api.keyset.highlight +---@field MiniTablineVisible? vim.api.keyset.highlight +---@field MiniTablineHidden? vim.api.keyset.highlight +---@field MiniTablineModifiedCurrent? vim.api.keyset.highlight +---@field MiniTablineModifiedVisible? vim.api.keyset.highlight +---@field MiniTablineModifiedHidden? vim.api.keyset.highlight +---@field MiniTablineFill? vim.api.keyset.highlight +---@field MiniTablineTabpagesection? vim.api.keyset.highlight +---@field MiniStarterCurrent? vim.api.keyset.highlight +---@field MiniStarterHeader? vim.api.keyset.highlight +---@field MiniStarterFooter? vim.api.keyset.highlight +---@field MiniStarterItem? vim.api.keyset.highlight +---@field MiniStarterItemBullet? vim.api.keyset.highlight +---@field MiniStarterItemPrefix? vim.api.keyset.highlight +---@field MiniStarterSection? vim.api.keyset.highlight +---@field MiniStarterQuery? vim.api.keyset.highlight +---@field MiniCursorword? vim.api.keyset.highlight +---@field RainbowDelimiterRed? vim.api.keyset.highlight +---@field RainbowDelimiteYellow? vim.api.keyset.highlight +---@field RainbowDelimiterBlue? vim.api.keyset.highlight +---@field RainbowDelimiterOrange? vim.api.keyset.highlight +---@field RainbowDelimiterGreen? vim.api.keyset.highlight +---@field RainbowDelimiterViolet? vim.api.keyset.highlight +---@field RainbowDelimiterCyan? vim.api.keyset.highlight diff --git a/lua/dracula/highlights.lua b/lua/dracula/highlights.lua deleted file mode 100644 index 26dcc28..0000000 --- a/lua/dracula/highlights.lua +++ /dev/null @@ -1,874 +0,0 @@ ----@class dracula.highlights ----@field ColorColumn? table ----@field Conceal? table ----@field CurSearch? table ----@field Cursor? table ----@field lCursor? table ----@field CursorIM? table ----@field CursorColumn? table ----@field CursorLine? table ----@field Directory? table ----@field DiffAdd? table ----@field DiffChange? table ----@field DiffDelete? table ----@field DiffText? table ----@field EndOfBuffer? table ----@field TermCursor? table ----@field TermCursorNC? table ----@field ErrorMsg? table ----@field WinSeparator? table ----@field Folded? table ----@field FoldColumn? table ----@field SignColumn? table ----@field IncSearch? table ----@field Substitute? table ----@field LineNr? table ----@field LineNrAbove? table ----@field LineNrBelow? table ----@field CursorLineNr? table ----@field CursorLineFold? table ----@field CursorLineSign? table ----@field MatchParen? table ----@field ModeMsg? table ----@field MsgArea? table ----@field MsgSeparator? table ----@field MoreMsg? table ----@field NonText? table ----@field Normal? table ----@field NormalFloat? table ----@field FloatBorder? table ----@field FloatTitle? table ----@field NormalNC? table ----@field Pmenu? table ----@field PmenuSel? table ----@field PmenuKind? table ----@field PmenuKindSel? table ----@field PmenuExtra? table ----@field PmenuExtraSel? table ----@field PmenuSbar? table ----@field PmenuThumb? table ----@field Question? table ----@field QuickFixLine? table ----@field Search? table ----@field SpecialKey? table ----@field SpellBad? table ----@field SpellCap? table ----@field SpellLocal? table ----@field SpellRare? table ----@field StatusLine? table ----@field StatusLineNC? table ----@field TabLine? table ----@field TabLineFill? table ----@field TabLineSel? table ----@field Title? table ----@field Visual? table ----@field VisualNOS? table ----@field warningMsg? table ----@field Whitespace? table ----@field WildMenu? table ----@field WinBar? table ----@field WinBarNC? table ----@field Comment? table ----@field Constant? table ----@field String? table ----@field Character? table ----@field Number? table ----@field Boolean? table ----@field Float? table ----@field Identifier? table ----@field Function? table ----@field Statement? table ----@field Conditional? table ----@field Repeat? table ----@field Label? table ----@field Operator? table ----@field Keyword? table ----@field Exception? table ----@field PreProc? table ----@field Include? table ----@field Define? table ----@field Macro? table ----@field PreCondit? table ----@field Type? table ----@field StorageClass? table ----@field Structure? table ----@field Typedef? table ----@field Special? table ----@field SpecialChar? table ----@field Tag? table ----@field Delimiter? table ----@field SpecialComment? table ----@field Debug? table ----@field Underlined? table ----@field Ignore? table ----@field Error? table ----@field Todo? table ----@field DiagnosticError? table ----@field DiagnosticWarn? table ----@field DiagnosticInfo? table ----@field DiagnosticHint? table ----@field DiagnosticOk? table ----@field DiagnosticVirtualTextError? table ----@field DiagnosticVirtualTextWarn? table ----@field DiagnosticVirtualTextInfo? table ----@field DiagnosticVirtualTextHint? table ----@field DiagnosticVirtualTextOk? table ----@field DiagnosticUnderlineError? table ----@field DiagnosticUnderlineWarn? table ----@field DiagnosticUnderlineInfo? table ----@field DiagnosticUnderlineHint? table ----@field DiagnosticUnderlineOk? table ----@field LspReferenceText? table ----@field LspReferenceRead? table ----@field LspReferenceWrite? table ----@field LspInlayHint? table ----@field NavicText? table ----@field NavicSeparator? table ----@field NavicIconsMethod? table ----@field NavicIconsFunction? table ----@field NavicIconsField? table ----@field NavicIconsVariable? table ----@field NavicIconsClass? table ----@field NavicIconsInterface? table ----@field NavicIconsModule? table ----@field NavicIconsNamespace? table ----@field NavicIconsProperty? table ----@field NavicIconsUnit? table ----@field NavicIconsEnum? table ----@field NavicIconsKeyword? table ----@field NavicIconsSnippet? table ----@field NavicIconsColor? table ----@field NavicIconsFile? table ----@field NavicIconsReference? table ----@field NavicIconsFolder? table ----@field NavicIconsEnumMember? table ----@field NavicIconsConstant? table ----@field NavicIconsStruct? table ----@field NavicIconsEvent? table ----@field NavicIconsOperator? table ----@field NavicIconsTypeParameter? table ----@field CmpItemKindText? table ----@field CmpItemKindMethod? table ----@field CmpItemKindFunction? table ----@field CmpItemKindField? table ----@field CmpItemKindVariable? table ----@field CmpItemKindClass? table ----@field CmpItemKindInterface? table ----@field CmpItemKindModule? table ----@field CmpItemKindProperty? table ----@field CmpItemKindUnit? table ----@field CmpItemKindEnum? table ----@field CmpItemKindKeyword? table ----@field CmpItemKindSnippet? table ----@field CmpItemKindColor? table ----@field CmpItemKindFile? table ----@field CmpItemKindReference? table ----@field CmpItemKindFolder? table ----@field CmpItemKindEnumMember? table ----@field CmpItemKindConstant? table ----@field CmpItemKindStruct? table ----@field CmpItemKindEvent? table ----@field CmpItemKindOperator? table ----@field CmpItemKindTypeParameter? table ----@field IblIndent? table ----@field IblScope? table ----@field NeoTreeNormal? table ----@field NeoTreeNormalNC? table ----@field NeoTreeDotFile? table ----@field NeoTreeFileNameOpened? table ----@field NeoTreeFloatBorder? table ----@field NeoTreeFloatTitle? table ----@field NeoTreeGitAdded? table ----@field NeoTreeGitConflict? table ----@field NeoTreeGitDeleted? table ----@field NeoTreeGitIgnored? table ----@field NeoTreeGitModified? table ----@field NeoTreeGitUnstaged? table ----@field NeoTreeGitUntracked? table ----@field NeoTreeGitStaged? table ----@field NvimTreeSymlink? table ----@field NvimTreeSymlinkIcon? table ----@field NvimTreeFolderName? table ----@field NvimTreeRootFolder? table ----@field NvimTreeFolderIcon? table ----@field NvimTreeEmptyFolderName? table ----@field NvimTreeExecFile? table ----@field NvimTreeOpenedFile? table ----@field NvimTreeModifiedFile? table ----@field NvimTreeSpecialFile? table ----@field NvimTreeIndentMarker? table ----@field NvimTreeGitDirty? table ----@field NvimTreeGitStaged? table ----@field NvimTreeGitMerge? table ----@field NvimTreeGitRenamed? table ----@field NvimTreeGitNew? table ----@field NvimTreeGitDeleted? table ----@field NvimTreeNormal? table ----@field NvimTreeNormalFloat? table ----@field NvimTreeEndOfBuffer? table ----@field NvimTreeWinSeparator? table ----@field WhichKey? table ----@field WhichKeyNormal? table ----@field WhichKeyDesc? table ----@field WhichKeySeparator? table ----@field WhichKeyGroup? table ----@field DashboardHeader? table ----@field DashboardFooter? table ----@field DashboardDesc? table ----@field DashboardKey? table ----@field DashboardIcon? table ----@field DashboardShotCut? table ----@field GitSignsAdd? table ----@field GitSignsChange? table ----@field GitSignsDelete? table ----@field NeogitCursorLine? table ----@field NeogitBranch? table ----@field NeogitRemote? table ----@field NeogitHunkHeader? table ----@field NeogitHunkHeaderHighlight? table ----@field NeogitDiffContextHighlight? table ----@field NeogitDiffContext? table ----@field NeogitDiffDeleteHighlight? table ----@field NeogitDiffDelete? table ----@field NeogitDiffAddHighlight? table ----@field NeogitDiffAdd? table ----@field TodoFgTODO? table ----@field TodoFgWARN? table ----@field TodoFgTEST? table ----@field TodoFgPERF? table ----@field TodoFgNOTE? table ----@field TodoFgHACK? table ----@field TodoFgFIX? table ----@field TodoSignTODO? table ----@field TodoSignWARN? table ----@field TodoSignTEST? table ----@field TodoSignPERF? table ----@field TodoSignNOTE? table ----@field TodoSignHACK? table ----@field TodoSignFIX? table ----@field TodoBgTODO? table ----@field TodoBgWARN? table ----@field TodoBgTEST? table ----@field TodoBgPERF? table ----@field TodoBgNOTE? table ----@field TodoBgHACK? table ----@field TodoBgFIX? table ----@field LazyH1? table ----@field LazyButton? table ----@field LazyButtonActive? table ----@field LazyReasonStart? table ----@field TelescopeSelection? table ----@field TelescopeSelectionCaret? table ----@field TelescopeMultiIcon? table ----@field TelescopeNormal? table ----@field TelescopePreviewNormal? table ----@field TelescopePromptNormal? table ----@field TelescopeResultsNormal? table ----@field TelescopeBorder? table ----@field TelescopePromptBorder? table ----@field TelescopeResultsBorder? table ----@field TelescopePreviewBorder? table ----@field TelescopeTitle? table ----@field TelescopePromptTitle? table ----@field TelescopeResultsTitle? table ----@field TelescopePreviewTitle? table ----@field TelescopeMatching? table ----@field TelescopePreviewMatch? table ----@field TelescopePromptCounter? table ----@field TelescopePromptPrefix? table ----@field NoiceFormatProgressTodo? table ----@field NoiceFormatProgressDone? table ----@field NoiceLspProgressSpinner? table ----@field NoiceLspProgressClient? table ----@field NoiceLspProgressTitle? table ----@field HopNextKey? table ----@field HopNextKey1? table ----@field HopUnmatched? table ----@field MiniStatuslineModeNormal? table ----@field MiniStatuslineModeInsert? table ----@field MiniStatuslineModeVisual? table ----@field MiniStatuslineModeReplace? table ----@field MiniStatuslineModeCommand? table ----@field MinistatusLineFileName? table ----@field MiniStatuslineDevinfo? table ----@field MiniStatuslineFileinfo? table ----@field MiniStatuslineInactive? table ----@field MiniTablineCurrent? table ----@field MiniTablineVisible? table ----@field MiniTablineHidden? table ----@field MiniTablineModifiedCurrent? table ----@field MiniTablineModifiedVisible? table ----@field MiniTablineModifiedHidden? table ----@field MiniTablineFill? table ----@field MiniTablineTabpagesection? table ----@field MiniStarterCurrent? table ----@field MiniStarterHeader? table ----@field MiniStarterFooter? table ----@field MiniStarterItem? table ----@field MiniStarterItemBullet? table ----@field MiniStarterItemPrefix? table ----@field MiniStarterSection? table ----@field MiniStarterQuery? table ----@field MiniCursorword? table ----@field RainbowDelimiterRed? table ----@field RainbowDelimiteYellow? table ----@field RainbowDelimiterBlue? table ----@field RainbowDelimiterOrange? table ----@field RainbowDelimiterGreen? table ----@field RainbowDelimiterViolet? table ----@field RainbowDelimiterCyan? table - -local M = {} - -local function nvim_get_hl(opts) - local hl = vim.api.nvim_get_hl(0, opts) - - if hl.link then - return nvim_get_hl { name = hl.link } - end - - return hl -end - ----@class dracula.nvim_set_hl.config ----@field transparent? boolean ----@field styles? vim.api.keyset.highlight - ----@param group_name string ----@param group_val vim.api.keyset.highlight ----@param config? dracula.nvim_set_hl.config -local nvim_set_hl = function(group_name, group_val, config) - local val = { fg = 'NONE', bg = 'NONE' } - - if not group_val.link then - if config and config.transparent then - group_val.bg = 'NONE' - end - - if config and config.styles then - group_val = vim.tbl_extend('force', group_val, config.styles) - end - - val = vim.tbl_extend('force', val, group_val) - vim.api.nvim_set_hl(0, group_name, val) - else - vim.api.nvim_set_hl(0, group_name, group_val) - end -end - ----@param colors dracula.palette ----@param config dracula.config -M.set_highlight = function(colors, config) - if config.on_colors then - local color = require 'dracula.color' - colors = vim.tbl_extend('force', colors, config.on_colors(colors, color)) - end - -- EDITOR :h highlight-groups - nvim_set_hl('ColorColumn', { bg = colors.base04 }) - nvim_set_hl('Conceal', { fg = colors.base02 }) - nvim_set_hl('CurSearch', { fg = colors.red, bg = colors.shade_red }) - nvim_set_hl('Cursor', { fg = colors.base03, bg = colors.cyan }) - nvim_set_hl('lCursor', { link = 'Cursor' }) - nvim_set_hl('CursorIM', { link = 'Cursor' }) - nvim_set_hl('CursorColumn', { link = 'ColorColumn' }) - nvim_set_hl('CursorLine', { bg = colors.base02 }) - nvim_set_hl('Directory', { fg = colors.purple }) - nvim_set_hl('DiffAdd', { fg = colors.git_added }) - nvim_set_hl('DiffChange', { fg = colors.git_modified }) - nvim_set_hl('DiffDelete', { fg = colors.git_removed, reverse = true }) - nvim_set_hl('DiffText', { fg = colors.cyan, reverse = true }) - nvim_set_hl('EndOfBuffer', { fg = colors.base03 }) - nvim_set_hl('TermCursor', { link = 'Cursor' }) - nvim_set_hl('TermCursorNC', { fg = colors.base0, reverse = true }) - nvim_set_hl('ErrorMsg', { fg = colors.diag_error }) - nvim_set_hl('WinSeparator', { fg = colors.base01, bg = colors.base04 }, { transparent = config.transparent }) - nvim_set_hl('Folded', { fg = colors.base0, bg = colors.base02 }) - nvim_set_hl('FoldColumn', { fg = colors.base0, bg = colors.base04 }) - nvim_set_hl('SignColumn', { link = 'Normal' }) - nvim_set_hl( - 'IncSearch', - { fg = colors.red, bg = colors.shade_red, bold = true }, - { transparent = config.transparent } - ) - nvim_set_hl('Substitute', { link = 'IncSearch' }) - nvim_set_hl('LineNr', { fg = colors.base01, bg = colors.base03 }, { transparent = config.transparent }) - nvim_set_hl('LineNrAbove', { link = 'LineNr' }) - nvim_set_hl('LineNrBelow', { link = 'LineNr' }) - nvim_set_hl('CursorLineNr', { fg = colors.purple, bg = colors.base03 }, { transparent = config.transparent }) - nvim_set_hl('CursorLineFold', { link = 'FoldColumn' }) - nvim_set_hl('CursorLineSign', { link = 'SignColumn' }) - nvim_set_hl('MatchParen', { fg = colors.cyan }) - nvim_set_hl('ModeMsg', { fg = colors.purple }) - nvim_set_hl('MsgArea', { link = 'Normal' }) - nvim_set_hl('MsgSeparator', { link = 'Normal' }) - nvim_set_hl('MoreMsg', { link = 'ModeMsg' }) - nvim_set_hl('NonText', { fg = colors.base01 }) - nvim_set_hl('Normal', { fg = colors.base0, bg = colors.base03 }, { transparent = config.transparent }) - nvim_set_hl('NormalFloat', { fg = colors.base0, bg = colors.base04 }) - nvim_set_hl('FloatBorder', { link = 'WinSeparator' }) - nvim_set_hl('FloatTitle', { fg = colors.purple, bold = true }) - nvim_set_hl('NormalNC', { link = 'Normal' }) - nvim_set_hl('Pmenu', { fg = colors.base0, bg = colors.base04 }, { transparent = config.transparent }) - nvim_set_hl('PmenuSel', { fg = colors.cyan, reverse = true }) - nvim_set_hl('PmenuKind', { link = 'Pmenu' }) - nvim_set_hl('PmenuKindSel', { link = 'PmenuSel' }) - nvim_set_hl('PmenuExtra', { link = 'Pmenu' }) - nvim_set_hl('PmenuExtraSel', { link = 'PmenuSel' }) - nvim_set_hl('PmenuSbar', { bg = colors.base04 }) - nvim_set_hl('PmenuThumb', { bg = colors.cyan }) - nvim_set_hl('Question', { fg = colors.diag_info }) - nvim_set_hl('QuickFixLine', { fg = colors.base0, bg = colors.base03 }) - nvim_set_hl('Search', { bg = colors.base02 }) - nvim_set_hl('SpecialKey', { link = 'NonText' }) - nvim_set_hl('SpellBad', { underline = true, strikethrough = true }) - nvim_set_hl('SpellCap', { fg = colors.diag_hint }) - nvim_set_hl('SpellLocal', { link = 'SpellCap' }) - nvim_set_hl('SpellRare', { fg = colors.diag_warning }) - nvim_set_hl('StatusLine', { fg = colors.base0, bg = colors.base04 }) - nvim_set_hl('StatusLineNC', { fg = colors.base01, bg = colors.base04 }) - nvim_set_hl('TabLine', { fg = colors.base01, bg = colors.base04 }) - nvim_set_hl('TabLineFill', { fg = colors.base0, bg = colors.base04 }) - nvim_set_hl('TabLineSel', { fg = colors.base0, bg = colors.base03 }) - nvim_set_hl('Title', { fg = colors.purple, bold = true }) - nvim_set_hl('Visual', { bg = colors.base02 }) - nvim_set_hl('VisualNOS', { link = 'Visual' }) - nvim_set_hl('warningMsg', { fg = colors.diag_warning }) - nvim_set_hl('Whitespace', { fg = colors.base01 }) - nvim_set_hl('WildMenu', { fg = colors.base02 }) - nvim_set_hl('WinBar', { link = 'Pmenu' }) - nvim_set_hl('WinBarNC', { link = 'WinBar' }) -- SYNTAX :h group-name - nvim_set_hl('Comment', { fg = colors.base01 }, { styles = config.styles.comments }) - nvim_set_hl('Constant', { fg = colors.purple }, { styles = config.styles.constants }) - nvim_set_hl('String', { fg = colors.yellow }, { styles = config.styles.strings }) - nvim_set_hl('Character', { link = 'String' }) - nvim_set_hl('Number', { link = 'Constant' }) - nvim_set_hl('Boolean', { link = 'Constant' }) - nvim_set_hl('Float', { link = 'Constant' }) - nvim_set_hl('Identifier', { fg = colors.base0 }, { styles = config.styles.variables }) - nvim_set_hl('Function', { fg = colors.green }, { styles = config.styles.functions }) - nvim_set_hl('Statement', { fg = colors.pink }, { styles = config.styles.keywords }) - nvim_set_hl('Conditional', { link = 'Statement' }) - nvim_set_hl('Repeat', { link = 'Statement' }) - nvim_set_hl('Label', { link = 'Statement' }) - nvim_set_hl('Operator', { link = 'Statement' }) - nvim_set_hl('Keyword', { link = 'Statement' }) - nvim_set_hl('Exception', { link = 'Statement' }) - nvim_set_hl('PreProc', { link = 'Statement' }) - nvim_set_hl('Include', { link = 'Statement' }) - nvim_set_hl('Define', { link = 'Statement' }) - nvim_set_hl('Macro', { link = 'Statement' }) - nvim_set_hl('PreCondit', { fg = colors.pink }) - nvim_set_hl('Type', { fg = colors.cyan }, { styles = config.styles.types }) - nvim_set_hl('StorageClass', { link = 'Statement' }) - nvim_set_hl('Structure', { link = 'Type' }) - nvim_set_hl('Typedef', { link = 'Statement' }) - nvim_set_hl('Special', { fg = colors.red }) - nvim_set_hl('SpecialChar', { fg = colors.purple }) - nvim_set_hl('Tag', { fg = colors.pink }) - nvim_set_hl('Delimiter', { fg = colors.base0 }) - nvim_set_hl('SpecialComment', { fg = colors.pink }) - nvim_set_hl('Debug', { fg = colors.pink }) - nvim_set_hl('Underlined', { fg = colors.cyan, underline = true }) - nvim_set_hl('Ignore', {}) - nvim_set_hl('Error', { fg = colors.diag_error, bold = true }) - nvim_set_hl('Todo', { fg = colors.purple, bold = true }) -- PLUGINS - if config.plugins['nvim-treesitter'] then - nvim_set_hl('@variable', { link = 'Identifier' }) - nvim_set_hl('@variable.builtin', { link = 'Constant' }) - nvim_set_hl('@variable.parameter', { fg = colors.orange, italic = true }, { styles = config.styles.parameters }) - nvim_set_hl('@variable.member', { fg = colors.base0 }) - nvim_set_hl('@constant', { link = 'Constant' }) - nvim_set_hl('@constant.builtin', { fg = colors.purple }) - nvim_set_hl('@constant.macro', { fg = colors.purple }) - nvim_set_hl('@module', { fg = colors.base0 }) - nvim_set_hl('@module.builtin', { fg = colors.purple }) - nvim_set_hl('@label', { fg = colors.pink }) - nvim_set_hl('@string', { link = 'String' }) - nvim_set_hl('@string.documentation', { fg = colors.pink }) - nvim_set_hl('@string.regexp', { fg = colors.red }) - nvim_set_hl('@string.escape', { fg = colors.pink }) - nvim_set_hl('@string.special', { fg = colors.yellow }) - nvim_set_hl('@string.special.symbol', { fg = colors.base0 }) - nvim_set_hl('@string.special.url', { link = 'Underlined' }) - nvim_set_hl('@character', { link = 'String' }) - nvim_set_hl('@character.special', { fg = colors.yellow }) - nvim_set_hl('@character.printf', { fg = colors.red }) - nvim_set_hl('@type', { link = 'Type' }) - nvim_set_hl('@type.builtin', { fg = colors.pink }) - nvim_set_hl('@type.definition', { fg = colors.cyan }) - nvim_set_hl('@type.qualifier', { fg = colors.pink }) - nvim_set_hl('@function', { link = 'Function' }) - nvim_set_hl('@function.builtin', { fg = colors.cyan }) - nvim_set_hl('@function.call', { link = 'Function' }) - nvim_set_hl('@function.macro', { link = 'Function' }) - nvim_set_hl('@function.method', { link = 'Function' }) - nvim_set_hl('@function.method.call', { link = 'Function' }) - nvim_set_hl('@constructor', { link = 'Type' }) - nvim_set_hl('@constructor.lua', { fg = colors.base0 }) - nvim_set_hl('@operator', { fg = colors.pink }) - nvim_set_hl('@keyword', { fg = colors.pink }) - nvim_set_hl('@keyword.coroutine', { fg = colors.pink }) - nvim_set_hl('@keyword.function', { fg = colors.pink }) - nvim_set_hl('@keyword.operator', { fg = colors.pink }) - nvim_set_hl('@keyword.import', { fg = colors.pink }) - nvim_set_hl('@keyword.repeat', { fg = colors.pink }) - nvim_set_hl('@keyword.return', { fg = colors.pink }) - nvim_set_hl('@keyword.debug', { fg = colors.pink }) - nvim_set_hl('@keyword.exception', { fg = colors.pink }) - nvim_set_hl('@keyword.conditional', { fg = colors.pink }) - nvim_set_hl('@keyword.conditional.ternary', { fg = colors.pink }) - nvim_set_hl('@keyword.directive', { fg = colors.pink }) - nvim_set_hl('@keyword.directive.define', { fg = colors.pink }) - nvim_set_hl('@punctuation.delimiter', { fg = colors.base0 }) - nvim_set_hl('@punctuation.bracket', { fg = colors.base0 }) - nvim_set_hl('@punctuation.special', { fg = colors.pink }) - nvim_set_hl('@comment', { link = 'Comment' }) - nvim_set_hl('@comment.documentation', { link = 'Comment' }) - nvim_set_hl('@comment.error', { fg = colors.diag_error, bg = colors.shade_error }) - nvim_set_hl('@comment.warning', { fg = colors.diag_warning, bg = colors.shade_warning }) - nvim_set_hl('@comment.todo', { fg = colors.purple, bg = colors.shade_purple }) - nvim_set_hl('@comment.note', { fg = colors.diag_hint, bg = colors.shade_hint }) - nvim_set_hl('@markup.strong', { fg = colors.orange, bold = true }) - nvim_set_hl('@markup.italic', { fg = colors.yellow, italic = true }) - nvim_set_hl('@markup.strikethrough', { fg = colors.base01 }) - nvim_set_hl('@markup.underline', { fg = colors.cyan, underline = true }) - nvim_set_hl('@markup.heading', { fg = colors.purple, bold = true }) - nvim_set_hl('@markup.quote', { fg = colors.base01 }) - nvim_set_hl('@markup.math', { fg = colors.purple }) - nvim_set_hl('@markup.environment', { fg = colors.base01 }) - nvim_set_hl('@markup.link', { fg = colors.orange, bold = true }) - nvim_set_hl('@markup.link.label', { fg = colors.cyan, underline = true }) - nvim_set_hl('@markup.link.url', { fg = colors.cyan, underline = true }) - nvim_set_hl('@markup.raw', { fg = colors.base01 }) - nvim_set_hl('@markup.raw.block', { fg = colors.base0 }) - nvim_set_hl('@markup.list', { fg = colors.purple }) - nvim_set_hl('@markup.list.checked', { fg = colors.git_added }) - nvim_set_hl('@markup.list.unchecked', { fg = colors.git_modified }) - nvim_set_hl('@diff.plus', { fg = colors.git_added }) - nvim_set_hl('@diff.minus', { fg = colors.git_removed }) - nvim_set_hl('@diff.delta', { fg = colors.git_modified }) - nvim_set_hl('@tag', { fg = colors.pink }) - nvim_set_hl('@tag.attribute', { fg = colors.green }) - nvim_set_hl('@tag.delimiter', { fg = colors.base0 }) - nvim_set_hl('@property.yaml', { fg = colors.cyan }) - nvim_set_hl('@property.json', { fg = colors.cyan }) - nvim_set_hl('@property.css', { fg = colors.cyan }) - nvim_set_hl('@property.scss', { fg = colors.cyan }) - end - - if config.plugins['rainbow-delimiters'] then - nvim_set_hl('RainbowDelimiterRed', { fg = colors.red }) - nvim_set_hl('RainbowDelimiteYellow', { fg = colors.yellow }) - nvim_set_hl('RainbowDelimiterBlue', { fg = colors.pink }) - nvim_set_hl('RainbowDelimiterOrange', { fg = colors.orange }) - nvim_set_hl('RainbowDelimiterGreen', { fg = colors.green }) - nvim_set_hl('RainbowDelimiterViolet', { fg = colors.purple }) - nvim_set_hl('RainbowDelimiterCyan', { fg = colors.cyan }) - end - - if config.plugins['nvim-lspconfig'] then - nvim_set_hl('@lsp.type.class', { link = 'Type' }) - nvim_set_hl('@lsp.type.decorator', { fg = colors.green }) - nvim_set_hl('@lsp.type.enum', { link = 'Type' }) - nvim_set_hl('@lsp.type.enumMember', { link = 'Constant' }) - nvim_set_hl('@lsp.type.interface', { link = 'Type' }) - nvim_set_hl('@lsp.type.macro', { fg = colors.pink }) - nvim_set_hl('@lsp.type.namespace', { fg = colors.base0 }) - nvim_set_hl('@lsp.type.parameter', { fg = colors.orange, italic = true }, { styles = config.styles.parameters }) - nvim_set_hl('@lsp.type.property', { fg = colors.base0 }) - nvim_set_hl('@lsp.type.struct', { link = 'Type' }) - nvim_set_hl('@lsp.type.type', { link = 'Type' }) - nvim_set_hl('@lsp.type.typeParameter', { link = 'Type' }) - nvim_set_hl('@lsp.type.variable', { link = 'Identifier' }) - nvim_set_hl('@lsp.typemod.variable.defaultLibrary', { fg = colors.purple }) - nvim_set_hl('@lsp.typemod.variable.readonly', { link = 'Constant' }) - nvim_set_hl('@lsp.typemod.variable.global', { fg = colors.purple }) - nvim_set_hl('@lsp.typemod.keyword.documentation', { fg = colors.pink }) - nvim_set_hl('@lsp.typemod.class.documentation', { fg = colors.cyan }) - nvim_set_hl('@lsp.typemod.property.readonly', { fg = colors.purple }) - nvim_set_hl('DiagnosticError', { fg = colors.diag_error }) - nvim_set_hl('DiagnosticWarn', { fg = colors.diag_warning }) - nvim_set_hl('DiagnosticInfo', { fg = colors.diag_info }) - nvim_set_hl('DiagnosticHint', { fg = colors.diag_hint }) - nvim_set_hl('DiagnosticOk', { fg = colors.diag_ok }) - nvim_set_hl('DiagnosticVirtualTextError', { fg = colors.diag_error, bg = colors.shade_error }) - nvim_set_hl('DiagnosticVirtualTextWarn', { fg = colors.diag_warning, bg = colors.shade_warning }) - nvim_set_hl('DiagnosticVirtualTextInfo', { fg = colors.diag_info, bg = colors.shade_info }) - nvim_set_hl('DiagnosticVirtualTextHint', { fg = colors.diag_hint, bg = colors.shade_hint }) - nvim_set_hl('DiagnosticVirtualTextOk', { fg = colors.diag_ok, bg = colors.shade_ok }) - nvim_set_hl('DiagnosticUnderlineError', { fg = colors.diag_error, underline = true }) - nvim_set_hl('DiagnosticUnderlineWarn', { fg = colors.diag_warning, underline = true }) - nvim_set_hl('DiagnosticUnderlineInfo', { fg = colors.diag_info, underline = true }) - nvim_set_hl('DiagnosticUnderlineHint', { fg = colors.diag_hint, underline = true }) - nvim_set_hl('DiagnosticUnderlineOk', { fg = colors.diag_ok, underline = true }) - nvim_set_hl('LspReferenceText', { link = 'Visual' }) - nvim_set_hl('LspReferenceRead', { link = 'Visual' }) - nvim_set_hl('LspReferenceWrite', { link = 'Visual' }) - nvim_set_hl('LspInlayHint', { fg = colors.inlay_hint }) - end - - if config.plugins['nvim-navic'] then - nvim_set_hl('NavicText', { fg = colors.base0 }) - nvim_set_hl('NavicSeparator', { link = 'Statement' }) - nvim_set_hl('NavicIconsMethod', { link = 'Function' }) - nvim_set_hl('NavicIconsFunction', { link = 'Function' }) - nvim_set_hl('NavicIconsField', { link = 'Identifier' }) - nvim_set_hl('NavicIconsVariable', { link = 'Identifier' }) - nvim_set_hl('NavicIconsClass', { link = 'Type' }) - nvim_set_hl('NavicIconsInterface', { link = 'Type' }) - nvim_set_hl('NavicIconsModule', { link = 'Type' }) - nvim_set_hl('NavicIconsNamespace', { link = 'Type' }) - nvim_set_hl('NavicIconsProperty', { link = 'Identifier' }) - nvim_set_hl('NavicIconsUnit', { link = 'Number' }) - nvim_set_hl('NavicIconsEnum', { link = 'Type' }) - nvim_set_hl('NavicIconsKeyword', { link = 'Statement' }) - nvim_set_hl('NavicIconsSnippet', { link = 'Tag' }) - nvim_set_hl('NavicIconsColor', { fg = colors.orange }) - nvim_set_hl('NavicIconsFile', { link = 'Identifier' }) - nvim_set_hl('NavicIconsReference', { link = 'Underlined' }) - nvim_set_hl('NavicIconsFolder', { link = 'Directory' }) - nvim_set_hl('NavicIconsEnumMember', { link = 'Constant' }) - nvim_set_hl('NavicIconsConstant', { link = 'Constant' }) - nvim_set_hl('NavicIconsStruct', { link = 'Identifier' }) - nvim_set_hl('NavicIconsEvent', { link = 'Function' }) - nvim_set_hl('NavicIconsOperator', { link = 'Operator' }) - nvim_set_hl('NavicIconsTypeParameter', { link = 'Type' }) - end - - if config.plugins['nvim-cmp'] then - nvim_set_hl('CmpItemKindText', { link = 'String' }) - nvim_set_hl('CmpItemKindMethod', { link = 'Function' }) - nvim_set_hl('CmpItemKindFunction', { link = 'Function' }) - nvim_set_hl('CmpItemKindField', { link = 'Identifier' }) - nvim_set_hl('CmpItemKindVariable', { link = 'Identifier' }) - nvim_set_hl('CmpItemKindClass', { link = 'Type' }) - nvim_set_hl('CmpItemKindInterface', { link = 'Type' }) - nvim_set_hl('CmpItemKindModule', { link = 'Type' }) - nvim_set_hl('CmpItemKindProperty', { link = 'Identifier' }) - nvim_set_hl('CmpItemKindUnit', { link = 'Number' }) - nvim_set_hl('CmpItemKindEnum', { link = 'Type' }) - nvim_set_hl('CmpItemKindKeyword', { link = 'Statement' }) - nvim_set_hl('CmpItemKindSnippet', { link = 'Tag' }) - nvim_set_hl('CmpItemKindColor', { fg = colors.orange }) - nvim_set_hl('CmpItemKindFile', { link = 'Identifier' }) - nvim_set_hl('CmpItemKindReference', { link = 'Underlined' }) - nvim_set_hl('CmpItemKindFolder', { link = 'Directory' }) - nvim_set_hl('CmpItemKindEnumMember', { link = 'Constant' }) - nvim_set_hl('CmpItemKindConstant', { link = 'Constant' }) - nvim_set_hl('CmpItemKindStruct', { link = 'Identifier' }) - nvim_set_hl('CmpItemKindEvent', { link = 'Function' }) - nvim_set_hl('CmpItemKindOperator', { link = 'Operator' }) - nvim_set_hl('CmpItemKindTypeParameter', { link = 'Type' }) - end - - if config.plugins['indent-blankline.nvim'] then - nvim_set_hl('IblIndent', { fg = colors.shade_purple, nocombine = true }) - nvim_set_hl('IblScope', { fg = colors.purple, nocombine = true }) - end - - if config.plugins['neo-tree.nvim'] then - nvim_set_hl('NeoTreeNormal', { fg = colors.base0, bg = colors.base04 }, { transparent = config.transparent }) - nvim_set_hl('NeoTreeNormalNC', { link = 'NeoTreeNormal' }) - nvim_set_hl('NeoTreeDotFile', { fg = colors.base01 }) - nvim_set_hl('NeoTreeFileNameOpened', { link = 'Directory' }) - nvim_set_hl('NeoTreeFloatBorder', { link = 'WinSeparator' }) - nvim_set_hl('NeoTreeFloatTitle', { link = 'Title' }) - nvim_set_hl('NeoTreeGitAdded', { fg = colors.git_added }) - nvim_set_hl('NeoTreeGitConflict', { fg = colors.git_modified }) - nvim_set_hl('NeoTreeGitDeleted', { fg = colors.git_removed }) - nvim_set_hl('NeoTreeGitIgnored', { fg = colors.base01 }) - nvim_set_hl('NeoTreeGitModified', { fg = colors.git_modified }) - nvim_set_hl('NeoTreeGitUnstaged', { fg = colors.git_modified }) - nvim_set_hl('NeoTreeGitUntracked', { fg = colors.git_modified }) - nvim_set_hl('NeoTreeGitStaged', { fg = colors.git_added }) - end - - if config.plugins['nvim-tree.lua'] then - nvim_set_hl('NvimTreeSymlink', { link = 'Underlined' }) - nvim_set_hl('NvimTreeSymlinkIcon', { link = 'Directory' }) - nvim_set_hl('NvimTreeFolderName', { fg = colors.base0 }) - nvim_set_hl('NvimTreeRootFolder', { fg = colors.purple, bold = true }) - nvim_set_hl('NvimTreeFolderIcon', { link = 'Directory' }) - nvim_set_hl('NvimTreeEmptyFolderName', { fg = colors.base0 }) - nvim_set_hl('NvimTreeExecFile', { fg = colors.green }) - nvim_set_hl('NvimTreeOpenedFile', { fg = colors.purple, bold = true }) - nvim_set_hl('NvimTreeModifiedFile', { fg = colors.git_modified }) - nvim_set_hl('NvimTreeSpecialFile', { link = 'Special' }) - nvim_set_hl('NvimTreeIndentMarker', { fg = colors.shade_purple }) - nvim_set_hl('NvimTreeGitDirty', { fg = colors.git_modified }) - nvim_set_hl('NvimTreeGitStaged', { fg = colors.git_added }) - nvim_set_hl('NvimTreeGitMerge', { fg = colors.git_modified }) - nvim_set_hl('NvimTreeGitRenamed', { fg = colors.git_modified }) - nvim_set_hl('NvimTreeGitNew', { fg = colors.git_added }) - nvim_set_hl('NvimTreeGitDeleted', { fg = colors.git_removed }) - nvim_set_hl('NvimTreeNormal', { fg = colors.base0, bg = colors.base04 }, { transparent = config.transparent }) - nvim_set_hl('NvimTreeNormalFloat', { link = 'NvimTreeNormal' }) - nvim_set_hl('NvimTreeEndOfBuffer', { fg = colors.base04 }) - nvim_set_hl('NvimTreeWinSeparator', { fg = colors.base04, bg = colors.base04 }) - end - - if config.plugins['which-key.nvim'] then - nvim_set_hl('WhichKey', { fg = colors.green }) - nvim_set_hl('WhichKeyNormal', { fg = colors.green }, { transparent = config.transparent }) - nvim_set_hl('WhichKeyDesc', { fg = colors.orange, italic = true }) - nvim_set_hl('WhichKeySeparator', { fg = colors.pink }) - nvim_set_hl('WhichKeyGroup', { fg = colors.purple }) - end - - if config.plugins['dashboard-nvim'] then - nvim_set_hl('DashboardHeader', { fg = colors.red }) - nvim_set_hl('DashboardFooter', { fg = colors.base01 }) - nvim_set_hl('DashboardDesc', { link = 'Directory' }) - nvim_set_hl('DashboardKey', { fg = colors.pink }) - nvim_set_hl('DashboardIcon', { link = 'Directory' }) - nvim_set_hl('DashboardShotCut', { fg = colors.base0 }) - end - - if config.plugins['gitsigns.nvim'] then - nvim_set_hl('GitSignsAdd', { fg = colors.git_added }) - nvim_set_hl('GitSignsChange', { fg = colors.git_modified }) - nvim_set_hl('GitSignsDelete', { fg = colors.git_removed }) - end - - if config.plugins['neogit'] then - nvim_set_hl('NeogitCursorLine', { link = 'CursorLine' }) - nvim_set_hl('NeogitBranch', { fg = colors.purple }) - nvim_set_hl('NeogitRemote', { fg = colors.cyan }) - nvim_set_hl('NeogitHunkHeader', { fg = colors.purple, bg = colors.shade_purple }) - nvim_set_hl('NeogitHunkHeaderHighlight', { link = 'Title' }) - nvim_set_hl('NeogitDiffContextHighlight', { fg = colors.base0, bg = colors.base03 }) - nvim_set_hl('NeogitDiffContext', { fg = colors.base0, bg = colors.base04 }) - nvim_set_hl('NeogitDiffDeleteHighlight', { fg = colors.git_removed, bg = colors.shade_red }) - nvim_set_hl('NeogitDiffDelete', { fg = colors.git_removed }) - nvim_set_hl('NeogitDiffAddHighlight', { fg = colors.git_added, bg = colors.shade_green }) - nvim_set_hl('NeogitDiffAdd', { fg = colors.git_added }) - end - - if config.plugins['todo-comments.nvim'] then - nvim_set_hl('TodoFgTODO', { fg = colors.purple }) - nvim_set_hl('TodoFgWARN', { fg = colors.diag_warning }) - nvim_set_hl('TodoFgTEST', { fg = colors.diag_ok }) - nvim_set_hl('TodoFgPERF', { fg = colors.yellow }) - nvim_set_hl('TodoFgNOTE', { fg = colors.cyan }) - nvim_set_hl('TodoFgHACK', { fg = colors.pink }) - nvim_set_hl('TodoFgFIX', { fg = colors.diag_error }) - nvim_set_hl('TodoSignTODO', { fg = colors.purple }) - nvim_set_hl('TodoSignWARN', { fg = colors.diag_warning }) - nvim_set_hl('TodoSignTEST', { fg = colors.diag_ok }) - nvim_set_hl('TodoSignPERF', { fg = colors.yellow }) - nvim_set_hl('TodoSignNOTE', { fg = colors.cyan }) - nvim_set_hl('TodoSignHACK', { fg = colors.pink }) - nvim_set_hl('TodoSignFIX', { fg = colors.diag_error }) - nvim_set_hl('TodoBgTODO', { fg = colors.purple, reverse = true }) - nvim_set_hl('TodoBgWARN', { fg = colors.diag_warning, reverse = true }) - nvim_set_hl('TodoBgTEST', { fg = colors.diag_ok, reverse = true }) - nvim_set_hl('TodoBgPERF', { fg = colors.yellow, reverse = true }) - nvim_set_hl('TodoBgNOTE', { fg = colors.cyan, reverse = true }) - nvim_set_hl('TodoBgHACK', { fg = colors.pink, reverse = true }) - nvim_set_hl('TodoBgFIX', { fg = colors.diag_error, reverse = true }) - end - - if config.plugins['lazy.nvim'] then - nvim_set_hl('LazyH1', { fg = colors.purple, bg = colors.base04 }) - nvim_set_hl('LazyButton', { fg = colors.base0, bg = colors.base02 }) - nvim_set_hl('LazyButtonActive', { bg = colors.base02, reverse = true }) - nvim_set_hl('LazyReasonStart', { fg = colors.cyan }) - end - - if config.plugins['telescope.nvim'] then - nvim_set_hl('TelescopeSelection', { link = 'CursorLine' }) - nvim_set_hl('TelescopeSelectionCaret', { fg = colors.purple }) - nvim_set_hl('TelescopeMultiIcon', { fg = colors.purple }) - nvim_set_hl('TelescopeNormal', { fg = colors.base0, bg = colors.base04 }, { transparent = config.transparent }) - nvim_set_hl('TelescopePreviewNormal', { link = 'TelescopeNormal' }) - nvim_set_hl('TelescopePromptNormal', { link = 'TelescopeNormal' }) - nvim_set_hl('TelescopeResultsNormal', { link = 'TelescopeNormal' }) - nvim_set_hl('TelescopeBorder', { fg = colors.purple, bg = colors.base04 }, { transparent = config.transparent }) - nvim_set_hl('TelescopePromptBorder', { link = 'TelescopeBorder' }) - nvim_set_hl('TelescopeResultsBorder', { link = 'TelescopeBorder' }) - nvim_set_hl('TelescopePreviewBorder', { link = 'TelescopeBorder' }) - nvim_set_hl('TelescopeTitle', { fg = colors.purple, bg = colors.shade_purple }) - nvim_set_hl('TelescopePromptTitle', { link = 'TelescopeTitle' }) - nvim_set_hl('TelescopeResultsTitle', { link = 'TelescopeTitle' }) - nvim_set_hl('TelescopePreviewTitle', { link = 'TelescopeTitle' }) - nvim_set_hl('TelescopeMatching', { fg = colors.purple, bg = colors.shade_purple }) - nvim_set_hl('TelescopePreviewMatch', { link = 'TelescopeMatching' }) - nvim_set_hl('TelescopePromptCounter', { link = 'NonText' }) - nvim_set_hl('TelescopePromptPrefix', { fg = colors.purple }) - end - - if config.plugins['noice.nvim'] then - nvim_set_hl('NoiceFormatProgressTodo', { fg = colors.diag_ok, bg = colors.shade_ok }) - nvim_set_hl('NoiceFormatProgressDone', { fg = colors.diag_ok, reverse = true }) - nvim_set_hl('NoiceLspProgressSpinner', { fg = colors.diag_ok }) - nvim_set_hl('NoiceLspProgressClient', { fg = colors.diag_ok }) - nvim_set_hl('NoiceLspProgressTitle', { link = 'Title' }) - end - - if config.plugins['hop.nvim'] then - nvim_set_hl('HopNextKey', { fg = colors.red }) - nvim_set_hl('HopNextKey1', { fg = colors.cyan }) - nvim_set_hl('HopUnmatched', { fg = colors.base01 }) - end - - if config.plugins['mini.statusline'] then - nvim_set_hl('MiniStatuslineModeNormal', { fg = colors.base03, bg = colors.purple }) - nvim_set_hl('MiniStatuslineModeInsert', { fg = colors.base03, bg = colors.green }) - nvim_set_hl('MiniStatuslineModeVisual', { fg = colors.yellow, bg = colors.base03 }) - nvim_set_hl('MiniStatuslineModeReplace', { fg = colors.red, bg = colors.base03 }) - nvim_set_hl('MiniStatuslineModeCommand', { fg = colors.orange, bg = colors.base03 }) - nvim_set_hl('MinistatusLineFileName', { fg = colors.base0, bg = colors.base04 }) - nvim_set_hl('MiniStatuslineDevinfo', { fg = colors.base0, bg = colors.base02 }) - nvim_set_hl('MiniStatuslineFileinfo', { fg = colors.base0, bg = colors.base02 }) - nvim_set_hl('MiniStatuslineInactive', { fg = colors.base01, bg = colors.base03 }) - end - - if config.plugins['mini.tabline'] then - nvim_set_hl('MiniTablineCurrent', { fg = colors.base0, bg = colors.base03 }) - nvim_set_hl('MiniTablineVisible', { fg = colors.base0, bg = colors.base03 }) - nvim_set_hl('MiniTablineHidden', { fg = colors.base01, bg = colors.base03 }) - nvim_set_hl('MiniTablineModifiedCurrent', { link = 'MiniTabLineCurrent' }) - nvim_set_hl('MiniTablineModifiedVisible', { link = 'MiniTablineVisible' }) - nvim_set_hl('MiniTablineModifiedHidden', { link = 'MiniTablineHidden' }) - nvim_set_hl('MiniTablineFill', { fg = colors.base0, bg = colors.base04 }) - nvim_set_hl('MiniTablineTabpagesection', { fg = colors.base0, bg = colors.base04 }) - end - - if config.plugins['mini.starter'] then - nvim_set_hl('MiniStarterCurrent', { link = 'CursorLine' }) - nvim_set_hl('MiniStarterHeader', { fg = colors.red }) - nvim_set_hl('MiniStarterFooter', { fg = colors.base01 }) - nvim_set_hl('MiniStarterItem', { fg = colors.base0 }) - nvim_set_hl('MiniStarterItemBullet', { fg = colors.pink }) - nvim_set_hl('MiniStarterItemPrefix', { fg = colors.pink }) - nvim_set_hl('MiniStarterSection', { link = 'Title' }) - nvim_set_hl('MiniStarterQuery', { fg = colors.pink, bold = true }) - end - - if config.plugins['mini.cursorword'] then - nvim_set_hl('MiniCursorword', { link = 'Visual' }) - end - - if config.plugins['bufferline.nvim'] and config.transparent then - local color = require 'dracula.color' - local background = color.shade(colors.base02, 2) - nvim_set_hl('BufferLineFill', { bg = background }) - nvim_set_hl('BufferLineBufferSelected', { fg = colors.base0 }) - nvim_set_hl('BufferLineSeparator', { fg = background }) - nvim_set_hl('BufferLineSeparatorSelected', { fg = background }) - nvim_set_hl('BufferLineSeparatorVisible', { fg = background }) - end - - if config.on_highlights then - local color = require 'dracula.color' - local highlights = config.on_highlights(colors, color) - - for group_name, group_val in pairs(highlights) do - local hl = nvim_get_hl { name = group_name, link = true } - local val = vim.tbl_extend('force', hl, group_val) - vim.api.nvim_set_hl(0, group_name, val) - end - end -end - -return M diff --git a/lua/dracula/init.lua b/lua/dracula/init.lua index 46e66c0..47c7ebf 100644 --- a/lua/dracula/init.lua +++ b/lua/dracula/init.lua @@ -6,29 +6,9 @@ local M = {} M.config = require 'dracula.config' +---@param config? dracula.config M.setup = function(config) - M.config = vim.tbl_deep_extend('force', M.config, config) -end - -M.load = function(theme) - theme = theme or '' - if vim.g.colors_name then - vim.cmd 'hi clear' - end - - if vim.fn.exists 'syntax_on' then - vim.cmd 'syntax reset' - end - - vim.g.colors_name = theme - local highlights = require 'dracula.highlights' - local ok, colors = pcall(require, 'dracula.palette.' .. theme) - - if not ok then - colors = require 'dracula.palette' - end - - highlights.set_highlight(colors, M.config) + M.config = vim.tbl_deep_extend('force', M.config, config or {}) end return M