diff --git a/lua/lualine/themes/tccs.lua b/lua/lualine/themes/tccs.lua index 70a5411..e3c7f87 100644 --- a/lua/lualine/themes/tccs.lua +++ b/lua/lualine/themes/tccs.lua @@ -4,10 +4,10 @@ local config = require('tccs.config') local c = require('tccs.colors').get_colors() local line_c = { - fg_prim = c.fg, - bg_prim = c.bg_alt, - fg_sec = c.fg, - bg_sec = c.panel_shadow, + fg_prim = c.fg, + bg_prim = c.bg_alt, + fg_sec = c.fg, + bg_sec = c.panel_shadow, visual = c.operator, insert = c.comment, normal = c.entity, diff --git a/lua/tccs/colors.lua b/lua/tccs/colors.lua index c293b19..74025fc 100644 --- a/lua/tccs/colors.lua +++ b/lua/tccs/colors.lua @@ -1,56 +1,56 @@ local colors = {} colors.get_colors = function() - local mycolors = {} ---@type table + local mycolors = {} ---@type table - mycolors = { - -- common - accent = "#C586C0", - bg = "#191919", - bg_alt = "#121212", - fg = "#D4D4D4", - ui = "#4D5566", - -- syntax - tag = "#9CDCFE", - func = "#DCDCAA", - entity = "#9CDCFE", - string = "#CE9178", - regexp = "#D16969", - markup = "#C586C0", - keyword = "#C586C0", - special = "#D7BA7D", - comment = "#608B4E", - constant = "#D4D4D4", - operator = "#C586C0", - error = "#FF0000", - -- extended color palette - fg_idle = "#FFFF00", - warning = "#FFFF00", - -- ui - line = "#00010A", - line_alt = "#772222", - panel_bg = "#0D1016", - panel_shadow = "#00010A", - panel_border = "#000000", - gutter_normal = "#323945", - gutter_active = "#464D5E", - selection_bg = "#273747", - selection_inactive = "#1B2733", - selection_border = "#304357", - guide_active = "#393F4D", - guide_normal = "#242A35", - -- vcs - vcs_added = "#608B4E", - vcs_modified = "#9CDCFE", - vcs_removed = "#D16969", - } + mycolors = { + -- common + accent = "#C586C0", + bg = "#191919", + bg_alt = "#121212", + fg = "#D4D4D4", + ui = "#4D5566", + -- syntax + tag = "#9CDCFE", + func = "#DCDCAA", + entity = "#9CDCFE", + string = "#CE9178", + regexp = "#D16969", + markup = "#C586C0", + keyword = "#C586C0", + special = "#D7BA7D", + comment = "#608B4E", + constant = "#D4D4D4", + operator = "#C586C0", + error = "#FF0000", + -- extended color palette + fg_idle = "#FFFF00", + warning = "#FFFF00", + -- ui + line = "#00010A", + line_alt = "#772222", + panel_bg = "#0D1016", + panel_shadow = "#00010A", + panel_border = "#000000", + gutter_normal = "#323945", + gutter_active = "#464D5E", + selection_bg = "#273747", + selection_inactive = "#1B2733", + selection_border = "#304357", + guide_active = "#393F4D", + guide_normal = "#242A35", + -- vcs + vcs_added = "#608B4E", + vcs_modified = "#9CDCFE", + vcs_removed = "#D16969", + } - -- Extend the colors with overrides passed by `color_overrides` - local config = require('tccs.config') - if config.opts.color_overrides then - mycolors = vim.tbl_extend('force', mycolors, config.opts.color_overrides) - end + -- Extend the colors with overrides passed by `color_overrides` + local config = require('tccs.config') + if config.opts.color_overrides then + mycolors = vim.tbl_extend('force', mycolors, config.opts.color_overrides) + end - return mycolors + return mycolors end return colors diff --git a/lua/tccs/config.lua b/lua/tccs/config.lua index fe0fadc..f42898d 100644 --- a/lua/tccs/config.lua +++ b/lua/tccs/config.lua @@ -1,31 +1,31 @@ local config = {} local defaults = { - transparent = 0, - italic_comments = 1, - disable_nvimtree_bg = 0, - color_overrides = {}, - group_overrides = {}, + transparent = 0, + italic_comments = 1, + disable_nvimtree_bg = 0, + color_overrides = {}, + group_overrides = {}, } config.opts = {} ---@param user_opts? table config.setup = function(user_opts) - -- backwards compatibility: let users still set settings with global vars - local global_settings_opts = vim.tbl_extend('force', defaults, { - transparent = (vim.g.tccs_transparent == true or vim.g.tccs_transparent == 1), - italic_comments = (vim.g.tccs_italic_comment == true or vim.g.tccs_italic_comment == 1), - disable_nvimtree_bg = (vim.g.tccs_disable_nvim_tree_bg == true or vim.g.tccs_disable_nvim_tree_bg == 1), - }) + -- backwards compatibility: let users still set settings with global vars + local global_settings_opts = vim.tbl_extend('force', defaults, { + transparent = (vim.g.tccs_transparent == true or vim.g.tccs_transparent == 1), + italic_comments = (vim.g.tccs_italic_comment == true or vim.g.tccs_italic_comment == 1), + disable_nvimtree_bg = (vim.g.tccs_disable_nvim_tree_bg == true or vim.g.tccs_disable_nvim_tree_bg == 1), + }) - -- but override global vars settings with setup() settings - config.opts = vim.tbl_extend('force', defaults, user_opts or {}) + -- but override global vars settings with setup() settings + config.opts = vim.tbl_extend('force', defaults, user_opts or {}) - -- setting transparent to true removes the default background - if config.opts.transparent then - config.opts.color_overrides.vscBack = 'NONE' - end + -- setting transparent to true removes the default background + if config.opts.transparent then + config.opts.color_overrides.vscBack = 'NONE' + end end -- initialize config diff --git a/lua/tccs/init.lua b/lua/tccs/init.lua index f11d030..a93945e 100644 --- a/lua/tccs/init.lua +++ b/lua/tccs/init.lua @@ -8,20 +8,20 @@ tccs.setup = config.setup -- Load colorscheme with a given or default style tccs.load = function() - if vim.fn.exists('syntax_on') then - vim.cmd('syntax reset') - end + if vim.fn.exists('syntax_on') then + vim.cmd('syntax reset') + end - vim.o.termguicolors = true - vim.g.colors_name = 'tccs' + vim.o.termguicolors = true + vim.g.colors_name = 'tccs' - theme.set_highlights(config.opts) + theme.set_highlights(config.opts) - if config.opts.group_overrides then - for group, val in pairs(config.opts['group_overrides']) do - vim.api.nvim_set_hl(0, group, val) - end + if config.opts.group_overrides then + for group, val in pairs(config.opts['group_overrides']) do + vim.api.nvim_set_hl(0, group, val) end + end end return tccs diff --git a/lua/tccs/theme.lua b/lua/tccs/theme.lua index f7f7396..8c3e897 100644 --- a/lua/tccs/theme.lua +++ b/lua/tccs/theme.lua @@ -2,287 +2,286 @@ local hl = vim.api.nvim_set_hl local theme = {} theme.set_highlights = function(opts) - local c = require('tccs.colors').get_colors() - - hl(0, 'Normal', { fg = c.fg, bg = c.bg }) - hl(0, 'ColorColumn', { bg = c.line_alt }) - hl(0, 'Cursor', { fg = c.tag }) - hl(0, 'CursorLine', { bg = c.line }) - hl(0, 'CursorColumn', { bg = c.line }) - - hl(0, 'CursorLineNr', { fg = c.accent, bg = c.line }) - hl(0, 'LineNr', { fg = c.guide_normal }) - - hl(0, 'Directory', { fg = c.func }) - - hl(0, 'ErrorMsg', { fg = c.fg, bg = c.error, standout = true }) - - hl(0, 'VertSplit', { fg = c.panel_bg, bg = c.panel_bg }) - - hl(0, 'Folded', { fg = c.fg_idle, bg = c.panel_bg }) - hl(0, 'FoldColumn', { bg = c.panel_bg }) - hl(0, 'SignColumn', { bg = c.panel_bg }) - - hl(0, 'MatchParen', { fg = c.fg, bg = c.bg, underline = true }) - hl(0, 'ModeMsg', { fg = c.string }) - hl(0, 'MoreMsg', { fg = c.string }) - hl(0, 'NonText', { fg = c.guide_normal }) - - -- TODO: fix pmenu colors - hl(0, 'Pmenu', { fg = c.fg, bg = c.selection_inactive }) - hl(0, 'PmenuSel', { fg = c.fg, bg = c.selection_inactive, reverse = true }) - - hl(0, 'FloatBorder', { fg = c.fg, bg = c.selection_inactive }) - hl(0, 'Question', { fg = c.string }) - hl(0, 'Search', { fg = c.bg, bg = c.constant }) -- TODO: fix color - hl(0, 'SpecialKey', { fg = c.selection_inactive }) - - hl(0, 'SpellCap', { fg = c.tag, undercurl = true, sp = c.error }) - hl(0, 'SpellLocal', { fg = c.keyword, undercurl = true, sp = c.keyword }) - hl(0, 'SpellBad', { fg = c.error, undercurl = true, sp = c.error }) - hl(0, 'SpellRare', { fg = c.regexp, undercurl = true, sp = c.error }) - - hl(0, 'StatusLine', { fg = c.fg, bg = c.panel_bg }) - hl(0, 'StatusLineNC', { fg = c.fg_idle, bg = c.panel_bg }) - - hl(0, 'WildMenu', { fg = c.fg, bg = c.markup }) -- TODO: fix color - - hl(0, 'TabLine', { fg = c.comment, bg = c.panel_shadow }) - hl(0, 'TabLineFill', { fg = c.fg, bg = c.panel_border }) - hl(0, 'TabLineSel', { fg = c.fg, bg = c.bg }) - - hl(0, 'Title', { fg = c.keyword, bold = true }) - - hl(0, 'Visual', { bg = c.selection_inactive }) - - hl(0, 'WarningMsg', { fg = c.warning, bold = true }) - - -- syntax - hl(0, 'Comment', { fg = c.comment, italic = opts.italic_comments }) - hl(0, 'Constant', { fg = c.constant }) - hl(0, 'String', { fg = c.string }) - hl(0, 'Identifier', { fg = c.entity }) - hl(0, 'Function', { fg = c.func }) - hl(0, 'Statement', { fg = c.keyword }) - hl(0, 'Operator', { fg = c.operator }) - hl(0, 'Exception', { fg = c.markup }) - hl(0, 'PreProc', { fg = c.accent }) - hl(0, 'Type', { fg = c.entity }) - hl(0, 'Structure', { fg = c.special }) - --hl(0, 'Special', { fg = c.accent }) - hl(0, 'Delimiter', { fg = c.special }) - hl(0, 'Underlined', { fg = c.tag, underline = true }) - hl(0, 'Ignore', {}) - hl(0, 'Error', { fg = c.fg, bg = c.error, undercurl = true, sp = c.error }) - hl(0, 'Todo', { fg = c.markup }) - - -- quickfix window highlighting - hl(0, 'qfLineNr', { fg = c.keyword }) - hl(0, 'Conceal', { fg = c.comment }) - hl(0, 'CursorLineConceal', { fg = c.guide_normal, bg = c.line }) - - -- diff syntax highlighting - hl(0, 'DiffAdd', { fg = c.vcs_added, bg = c.guide_normal }) - hl(0, 'diffAdded', { link = 'DiffAdd' }) - hl(0, 'DiffChange', { fg = c.vcs_modified, bg = c.guide_normal }) - hl(0, 'DiffDelete', { fg = c.vcs_removed, bg = c.guide_normal }) - hl(0, 'diffRemoved', { link = 'DiffDelete' }) - hl(0, 'DiffText', { fg = c.vcs_modified, bg = c.guide_active }) - - -- netrw - hl(0, 'netrwClassify', { fg = c.special }) - - -- gitgutter - hl(0, 'GitGutterAdd', { fg = c.vcs_added, bg = c.panel_bg }) - hl(0, 'GitGutterChange', { fg = c.vcs_modified, bg = c.panel_bg }) - hl(0, 'GitGutterDelete', { fg = c.vcs_removed, bg = c.panel_bg }) - hl(0, 'GitGutterChangeDelete', { fg = c.vcs_modified, bg = c.panel_bg, underline = true }) - - -- signify - hl(0, 'SignifySignAdd', { fg = c.vcs_added, bg = c.panel_bg }) - hl(0, 'SignifySignChange', { fg = c.vcs_modified, bg = c.panel_bg }) - hl(0, 'SignifySignDelete', { fg = c.vcs_removed, bg = c.panel_bg }) - hl(0, 'SignifySignChangeDelete', { fg = c.vcs_modified, bg = c.panel_bg, underline = true }) - - -- nerdtree - hl(0, 'NERDTreeOpenable', { fg = c.fg_idle }) - hl(0, 'NERDTreeCloseable', { fg = c.accent }) - hl(0, 'NERDTreeUp', { fg = c.fg_idle }) - hl(0, 'NERDTreeDir', { fg = c.func }) - hl(0, 'NERDTreeFile', {}) - hl(0, 'NERDTreeDirSlash', { fg = c.special }) - - -- telescope - hl(0, 'TelescopeMatching', { fg = c.accent, bold = true }) - hl(0, 'TelescopePromptBorder', { fg = c.guide_normal }) - hl(0, 'TelescopeResultsBorder', { fg = c.guide_normal }) - hl(0, 'TelescopePreviewBorder', { fg = c.guide_normal }) - hl(0, 'TelescopeNormal', { fg = c.fg }) - hl(0, 'TelescopeSelection', { fg = c.fg, bg = c.vscPopupHighlightBlue }) - hl(0, 'TelescopeMultiSelection', { fg = c.fg, bg = c.vscPopupHighlightBlue }) - hl(0, 'TelescopePromptPrefix', { fg = c.fg, bg = 'NONE' }) - - -- lsp - hl(0, 'DiagnosticDefaultError', { fg = c.error }) - hl(0, 'DiagnosticUnderlineError', { fg = c.error, undercurl = true, sp = c.error }) - hl(0, 'DiagnosticSignError', { fg = c.error, bg = c.panel_bg }) - hl(0, 'DiagnosticWarn', { fg = c.warning }) - hl(0, 'DiagnosticUnderlineWarn', { fg = c.warning, undercurl = true, sp = c.warning }) - hl(0, 'DiagnosticSignWarning', { fg = c.warning, bg = c.panel_bg }) - hl(0, 'DiagnosticVirtualTextHint', { fg = c.comment }) - hl(0, 'DiagnosticSignHint', { fg = c.comment }) - hl(0, 'DiagnosticHint', { fg = c.comment }) - hl(0, 'DiagnosticVirtualTextInfo', { fg = c.fg }) - hl(0, 'DiagnosticSignInfo', { fg = c.fg }) - hl(0, 'DiagnosticInfo', { fg = c.fg }) - - -- yats - hl(0, 'typescriptDecorator', { fg = c.markup }) - hl(0, 'typescriptImport', { fg = c.accent }) - hl(0, 'typescriptExport', { fg = c.accent }) - hl(0, 'typescriptIdentifier', { fg = c.tag, italic = opts.italic_comments }) - hl(0, 'typescriptAssign', { fg = c.operator }) - hl(0, 'typescriptBinaryOp', { fg = c.operator }) - hl(0, 'typescriptTernaryOp', { fg = c.operator }) - hl(0, 'typescriptModule', { fg = c.keyword }) - hl(0, 'typescriptTypeBrackets', { fg = c.special }) - hl(0, 'typescriptClassName', { fg = c.tag }) - hl(0, 'typescriptAmbientDeclaration', { fg = c.keyword }) - hl(0, 'typescriptRegextString', { fg = c.regexp }) - hl(0, 'typescriptTry', { fg = c.markup }) - hl(0, 'typescriptExceptions', { fg = c.markup }) - hl(0, 'typescriptDebugger', { fg = c.markup, bold = true}) - hl(0, 'typescriptParens', { fg = c.special }) - hl(0, 'typescriptVariable', { fg = c.keyword }) - hl(0, 'typescriptObjectLabel', { fg = c.tag }) - hl(0, 'typescriptOperator', { fg = c.keyword }) - hl(0, 'typescriptArrowFunc', { fg = c.operator }) - hl(0, 'typescriptBraces', { fg = c.special }) - hl(0, 'typescriptGlobal', { fg = c.accent }) - hl(0, 'typescriptDOMFormProp', { fg = c.entity }) - hl(0, 'typescriptDOMEventProp', { fg = c.entity }) - hl(0, 'typescriptBOMWindowProp', { fg = c.accent }) - hl(0, 'typescriptDateMethod', { fg = c.func }) - hl(0, 'typescriptBlobMethod', { fg = c.func }) - hl(0, 'typescriptArrayMethod', { fg = c.func }) - hl(0, 'typescriptArrayStaticMethod', { fg = c.func }) - hl(0, 'typescriptStringMethod', { fg = c.func }) - hl(0, 'typescriptPaymentMethod', { fg = c.func }) - hl(0, 'typescriptHeadersMethod', { fg = c.func }) - hl(0, 'typescriptCacheMethod', { fg = c.func }) - hl(0, 'typescriptDOMEEventMethod', { fg = c.func }) - hl(0, 'typescriptDOMEEventTargetMethod', { fg = c.func }) - hl(0, 'typescriptBOMWindowMethod', { fg = c.func }) - hl(0, 'typescriptDOMStorageMethod', { fg = c.func }) - hl(0, 'typescriptPromiseMethod', { fg = c.func }) - hl(0, 'typescriptGlobalMethod', { fg = c.func }) - hl(0, 'typescriptFunctionMethod', { fg = c.func }) - hl(0, 'typescriptBOMLocationMethod', { fg = c.func }) - - -- javascript - hl(0, 'jsNull', { fg = c.constant }) - hl(0, 'jsThis', { fg = c.constant, italic = opts.italic_comments }) - hl(0, 'jsBrackets', { fg = c.special }) - hl(0, 'jsDot', { fg = c.special }) - hl(0, 'jsParens', { fg = c.special }) - hl(0, 'jsFuncParens', { fg = c.special }) - hl(0, 'jsFuncBraces', { fg = c.special }) - hl(0, 'jsIfElseBraces', { fg = c.special }) - hl(0, 'jsObjectKey', { fg = c.tag }) - hl(0, 'jsObjectProp', { fg = c.tag }) - hl(0, 'jsRegexpString', { fg = c.regexp }) - hl(0, 'jsStorageClass', { fg = c.keyword }) - hl(0, 'jsArrowFunction', { fg = c.operator }) - - -- treesitter - hl(0, '@include', { fg = c.accent }) - hl(0, '@parameter', { fg = c.special }) - hl(0, '@field', { fg = c.tag }) - hl(0, '@property', { fg = c.tag }) - hl(0, '@attribute', { fg = c.markup }) - hl(0, '@variable.builtin', { fg = c.constant, italic = opts.italic_comments }) - hl(0, '@constant.builtin', { fg = c.constant }) - hl(0, '@string.regex', { fg = c.regexp }) - hl(0, '@function.macro', { fg = c.func }) - - - -- fugitive - hl(0, 'fugitiveUntrackedHeading', { fg = c.accent }) - hl(0, 'fugitiveUnstagedHeading', { fg = c.accent }) - hl(0, 'fugitiveStagedHeading', { fg = c.accent }) - hl(0, 'fugitiveHeading', { fg = c.accent }) - - -- git commit - hl(0, 'gitcommitBranch', { fg = c.func }) - hl(0, 'gitcommitHeader', { fg = c.accent }) - hl(0, 'gitcommitSummary', { fg = c.fg }) - hl(0, 'gitcommitOverflow', { fg = c.markup }) - - -- startify - hl(0, 'StartifyFile', { fg = c.fg }) - - -- vim - hl(0, 'vimUserfunc', { fg = c.func }) - hl(0, 'vimFunction', { fg = c.func }) - hl(0, 'vimIsCommand', {}) - - -- xml - hl(0, 'xmlTag', { fg = c.special }) - hl(0, 'xmlTagName', { fg = c.keyword }) - hl(0, 'xmlEntity', { fg = c.tag }) - hl(0, 'xmlEntityPunct', { fg = c.operator }) - hl(0, 'xmlEqual', { fg = c.operator }) - - -- ini - hl(0, 'dosiniHeader', { fg = c.keyword }) - - -- pandoc - hl(0, 'pandocPipeTableHeader', { fg = c.keyword }) - hl(0, 'pandocPipeTableDelims', { fg = c.keyword }) - hl(0, 'pandocDelimitedCodeBlock', { fg = c.accent }) - - -- shell - hl(0, 'shTestOpr', { fg = c.operator }) - hl(0, 'shOption', { fg = c.special }) - hl(0, 'shQuote', { fg = c.string }) - - -- shell - hl(0, 'haskellDeclKeyword', { fg = c.keyword }) - hl(0, 'haskellLet', { fg = c.keyword }) - hl(0, 'haskellWhere', { fg = c.keyword }) - hl(0, 'haskellIdentifier', { fg = c.tag }) - - -- php - hl(0, 'phpDefine', { fg = c.keyword }) - hl(0, 'phpStructure', { fg = c.keyword }) - - -- ruby - hl(0, 'rubyModule', { fg = c.keyword }) - hl(0, 'rubyRegexp', { fg = c.regexp }) - hl(0, 'rubyRegexpDelimiter', { fg = c.regexp }) - hl(0, 'rubyStringDelimiter', { fg = c.string }) - - -- nvimtree - hl(0, 'NvimTreeRootFolder', { fg = c.fg, bold = true }) - hl(0, 'NvimTreeGitDirty', { fg = c.vcs_modified }) - hl(0, 'NvimTreeGitNew', { fg = c.vcs_added }) - hl(0, 'NvimTreeImageFile', { fg = c.keyword }) - hl(0, 'NvimTreeEmptyFolderName', { fg = c.ui }) - hl(0, 'NvimTreeFolderName', { fg = c.fg }) - hl(0, 'NvimTreeSpecialFile', { fg = c.keyword, underline = true }) - hl(0, 'NvimTreeNormal', { fg = c.fg }) - hl(0, 'NvimTreeCursorLine', {}) - hl(0, 'NvimTreeVertSplit', { bg = c.bg }) - hl(0, 'NvimTreeEndOfBuffer', {}) - hl(0, 'NvimTreeOpenedFolderName', {}) - hl(0, 'NvimTreeGitRenamed', { fg = c.vcs_modified }) - hl(0, 'NvimTreeGitIgnored', { fg = c.ui }) - hl(0, 'NvimTreeGitDeleted', { fg = c.vcs_removed }) - hl(0, 'NvimTreeGitStaged', { fg = c.vcs_added }) - hl(0, 'NvimTreeGitMerge', { fg = c.error }) - hl(0, 'NvimTreeGitDirty', { fg = c.vcs_modified }) - hl(0, 'NvimTreeGitNew', { fg = c.vcs_added }) - + local c = require('tccs.colors').get_colors() + + hl(0, 'Normal', { fg = c.fg, bg = c.bg }) + hl(0, 'ColorColumn', { bg = c.line_alt }) + hl(0, 'Cursor', { fg = c.tag }) + hl(0, 'CursorLine', { bg = c.line }) + hl(0, 'CursorColumn', { bg = c.line }) + + hl(0, 'CursorLineNr', { fg = c.accent, bg = c.line }) + hl(0, 'LineNr', { fg = c.guide_normal }) + + hl(0, 'Directory', { fg = c.func }) + + hl(0, 'ErrorMsg', { fg = c.fg, bg = c.error, standout = true }) + + hl(0, 'VertSplit', { fg = c.panel_bg, bg = c.panel_bg }) + + hl(0, 'Folded', { fg = c.fg_idle, bg = c.panel_bg }) + hl(0, 'FoldColumn', { bg = c.panel_bg }) + hl(0, 'SignColumn', { bg = c.panel_bg }) + + hl(0, 'MatchParen', { fg = c.fg, bg = c.bg, underline = true }) + hl(0, 'ModeMsg', { fg = c.string }) + hl(0, 'MoreMsg', { fg = c.string }) + hl(0, 'NonText', { fg = c.guide_normal }) + + -- TODO: fix pmenu colors + hl(0, 'Pmenu', { fg = c.fg, bg = c.selection_inactive }) + hl(0, 'PmenuSel', { fg = c.fg, bg = c.selection_inactive, reverse = true }) + + hl(0, 'FloatBorder', { fg = c.fg, bg = c.selection_inactive }) + hl(0, 'Question', { fg = c.string }) + hl(0, 'Search', { fg = c.bg, bg = c.constant }) -- TODO: fix color + hl(0, 'SpecialKey', { fg = c.selection_inactive }) + + hl(0, 'SpellCap', { fg = c.tag, undercurl = true, sp = c.error }) + hl(0, 'SpellLocal', { fg = c.keyword, undercurl = true, sp = c.keyword }) + hl(0, 'SpellBad', { fg = c.error, undercurl = true, sp = c.error }) + hl(0, 'SpellRare', { fg = c.regexp, undercurl = true, sp = c.error }) + + hl(0, 'StatusLine', { fg = c.fg, bg = c.panel_bg }) + hl(0, 'StatusLineNC', { fg = c.fg_idle, bg = c.panel_bg }) + + hl(0, 'WildMenu', { fg = c.fg, bg = c.markup }) -- TODO: fix color + + hl(0, 'TabLine', { fg = c.comment, bg = c.panel_shadow }) + hl(0, 'TabLineFill', { fg = c.fg, bg = c.panel_border }) + hl(0, 'TabLineSel', { fg = c.fg, bg = c.bg }) + + hl(0, 'Title', { fg = c.keyword, bold = true }) + + hl(0, 'Visual', { bg = c.selection_inactive }) + + hl(0, 'WarningMsg', { fg = c.warning, bold = true }) + + -- syntax + hl(0, 'Comment', { fg = c.comment, italic = opts.italic_comments }) + hl(0, 'Constant', { fg = c.constant }) + hl(0, 'String', { fg = c.string }) + hl(0, 'Identifier', { fg = c.entity }) + hl(0, 'Function', { fg = c.func }) + hl(0, 'Statement', { fg = c.keyword }) + hl(0, 'Operator', { fg = c.operator }) + hl(0, 'Exception', { fg = c.markup }) + hl(0, 'PreProc', { fg = c.accent }) + hl(0, 'Type', { fg = c.entity }) + hl(0, 'Structure', { fg = c.special }) + --hl(0, 'Special', { fg = c.accent }) + hl(0, 'Delimiter', { fg = c.special }) + hl(0, 'Underlined', { fg = c.tag, underline = true }) + hl(0, 'Ignore', {}) + hl(0, 'Error', { fg = c.fg, bg = c.error, undercurl = true, sp = c.error }) + hl(0, 'Todo', { fg = c.markup }) + + -- quickfix window highlighting + hl(0, 'qfLineNr', { fg = c.keyword }) + hl(0, 'Conceal', { fg = c.comment }) + hl(0, 'CursorLineConceal', { fg = c.guide_normal, bg = c.line }) + + -- diff syntax highlighting + hl(0, 'DiffAdd', { fg = c.vcs_added, bg = c.guide_normal }) + hl(0, 'diffAdded', { link = 'DiffAdd' }) + hl(0, 'DiffChange', { fg = c.vcs_modified, bg = c.guide_normal }) + hl(0, 'DiffDelete', { fg = c.vcs_removed, bg = c.guide_normal }) + hl(0, 'diffRemoved', { link = 'DiffDelete' }) + hl(0, 'DiffText', { fg = c.vcs_modified, bg = c.guide_active }) + + -- netrw + hl(0, 'netrwClassify', { fg = c.special }) + + -- gitgutter + hl(0, 'GitGutterAdd', { fg = c.vcs_added, bg = c.panel_bg }) + hl(0, 'GitGutterChange', { fg = c.vcs_modified, bg = c.panel_bg }) + hl(0, 'GitGutterDelete', { fg = c.vcs_removed, bg = c.panel_bg }) + hl(0, 'GitGutterChangeDelete', { fg = c.vcs_modified, bg = c.panel_bg, underline = true }) + + -- signify + hl(0, 'SignifySignAdd', { fg = c.vcs_added, bg = c.panel_bg }) + hl(0, 'SignifySignChange', { fg = c.vcs_modified, bg = c.panel_bg }) + hl(0, 'SignifySignDelete', { fg = c.vcs_removed, bg = c.panel_bg }) + hl(0, 'SignifySignChangeDelete', { fg = c.vcs_modified, bg = c.panel_bg, underline = true }) + + -- nerdtree + hl(0, 'NERDTreeOpenable', { fg = c.fg_idle }) + hl(0, 'NERDTreeCloseable', { fg = c.accent }) + hl(0, 'NERDTreeUp', { fg = c.fg_idle }) + hl(0, 'NERDTreeDir', { fg = c.func }) + hl(0, 'NERDTreeFile', {}) + hl(0, 'NERDTreeDirSlash', { fg = c.special }) + + -- telescope + hl(0, 'TelescopeMatching', { fg = c.accent, bold = true }) + hl(0, 'TelescopePromptBorder', { fg = c.guide_normal }) + hl(0, 'TelescopeResultsBorder', { fg = c.guide_normal }) + hl(0, 'TelescopePreviewBorder', { fg = c.guide_normal }) + hl(0, 'TelescopeNormal', { fg = c.fg }) + hl(0, 'TelescopeSelection', { fg = c.fg, bg = c.vscPopupHighlightBlue }) + hl(0, 'TelescopeMultiSelection', { fg = c.fg, bg = c.vscPopupHighlightBlue }) + hl(0, 'TelescopePromptPrefix', { fg = c.fg, bg = 'NONE' }) + + -- lsp + hl(0, 'DiagnosticDefaultError', { fg = c.error }) + hl(0, 'DiagnosticUnderlineError', { fg = c.error, undercurl = true, sp = c.error }) + hl(0, 'DiagnosticSignError', { fg = c.error, bg = c.panel_bg }) + hl(0, 'DiagnosticWarn', { fg = c.warning }) + hl(0, 'DiagnosticUnderlineWarn', { fg = c.warning, undercurl = true, sp = c.warning }) + hl(0, 'DiagnosticSignWarning', { fg = c.warning, bg = c.panel_bg }) + hl(0, 'DiagnosticVirtualTextHint', { fg = c.comment }) + hl(0, 'DiagnosticSignHint', { fg = c.comment }) + hl(0, 'DiagnosticHint', { fg = c.comment }) + hl(0, 'DiagnosticVirtualTextInfo', { fg = c.fg }) + hl(0, 'DiagnosticSignInfo', { fg = c.fg }) + hl(0, 'DiagnosticInfo', { fg = c.fg }) + + -- yats + hl(0, 'typescriptDecorator', { fg = c.markup }) + hl(0, 'typescriptImport', { fg = c.accent }) + hl(0, 'typescriptExport', { fg = c.accent }) + hl(0, 'typescriptIdentifier', { fg = c.tag, italic = opts.italic_comments }) + hl(0, 'typescriptAssign', { fg = c.operator }) + hl(0, 'typescriptBinaryOp', { fg = c.operator }) + hl(0, 'typescriptTernaryOp', { fg = c.operator }) + hl(0, 'typescriptModule', { fg = c.keyword }) + hl(0, 'typescriptTypeBrackets', { fg = c.special }) + hl(0, 'typescriptClassName', { fg = c.tag }) + hl(0, 'typescriptAmbientDeclaration', { fg = c.keyword }) + hl(0, 'typescriptRegextString', { fg = c.regexp }) + hl(0, 'typescriptTry', { fg = c.markup }) + hl(0, 'typescriptExceptions', { fg = c.markup }) + hl(0, 'typescriptDebugger', { fg = c.markup, bold = true }) + hl(0, 'typescriptParens', { fg = c.special }) + hl(0, 'typescriptVariable', { fg = c.keyword }) + hl(0, 'typescriptObjectLabel', { fg = c.tag }) + hl(0, 'typescriptOperator', { fg = c.keyword }) + hl(0, 'typescriptArrowFunc', { fg = c.operator }) + hl(0, 'typescriptBraces', { fg = c.special }) + hl(0, 'typescriptGlobal', { fg = c.accent }) + hl(0, 'typescriptDOMFormProp', { fg = c.entity }) + hl(0, 'typescriptDOMEventProp', { fg = c.entity }) + hl(0, 'typescriptBOMWindowProp', { fg = c.accent }) + hl(0, 'typescriptDateMethod', { fg = c.func }) + hl(0, 'typescriptBlobMethod', { fg = c.func }) + hl(0, 'typescriptArrayMethod', { fg = c.func }) + hl(0, 'typescriptArrayStaticMethod', { fg = c.func }) + hl(0, 'typescriptStringMethod', { fg = c.func }) + hl(0, 'typescriptPaymentMethod', { fg = c.func }) + hl(0, 'typescriptHeadersMethod', { fg = c.func }) + hl(0, 'typescriptCacheMethod', { fg = c.func }) + hl(0, 'typescriptDOMEEventMethod', { fg = c.func }) + hl(0, 'typescriptDOMEEventTargetMethod', { fg = c.func }) + hl(0, 'typescriptBOMWindowMethod', { fg = c.func }) + hl(0, 'typescriptDOMStorageMethod', { fg = c.func }) + hl(0, 'typescriptPromiseMethod', { fg = c.func }) + hl(0, 'typescriptGlobalMethod', { fg = c.func }) + hl(0, 'typescriptFunctionMethod', { fg = c.func }) + hl(0, 'typescriptBOMLocationMethod', { fg = c.func }) + + -- javascript + hl(0, 'jsNull', { fg = c.constant }) + hl(0, 'jsThis', { fg = c.constant, italic = opts.italic_comments }) + hl(0, 'jsBrackets', { fg = c.special }) + hl(0, 'jsDot', { fg = c.special }) + hl(0, 'jsParens', { fg = c.special }) + hl(0, 'jsFuncParens', { fg = c.special }) + hl(0, 'jsFuncBraces', { fg = c.special }) + hl(0, 'jsIfElseBraces', { fg = c.special }) + hl(0, 'jsObjectKey', { fg = c.tag }) + hl(0, 'jsObjectProp', { fg = c.tag }) + hl(0, 'jsRegexpString', { fg = c.regexp }) + hl(0, 'jsStorageClass', { fg = c.keyword }) + hl(0, 'jsArrowFunction', { fg = c.operator }) + + -- treesitter + hl(0, '@include', { fg = c.accent }) + hl(0, '@parameter', { fg = c.special }) + hl(0, '@field', { fg = c.tag }) + hl(0, '@property', { fg = c.tag }) + hl(0, '@attribute', { fg = c.markup }) + hl(0, '@variable.builtin', { fg = c.constant, italic = opts.italic_comments }) + hl(0, '@constant.builtin', { fg = c.constant }) + hl(0, '@string.regex', { fg = c.regexp }) + hl(0, '@function.macro', { fg = c.func }) + + + -- fugitive + hl(0, 'fugitiveUntrackedHeading', { fg = c.accent }) + hl(0, 'fugitiveUnstagedHeading', { fg = c.accent }) + hl(0, 'fugitiveStagedHeading', { fg = c.accent }) + hl(0, 'fugitiveHeading', { fg = c.accent }) + + -- git commit + hl(0, 'gitcommitBranch', { fg = c.func }) + hl(0, 'gitcommitHeader', { fg = c.accent }) + hl(0, 'gitcommitSummary', { fg = c.fg }) + hl(0, 'gitcommitOverflow', { fg = c.markup }) + + -- startify + hl(0, 'StartifyFile', { fg = c.fg }) + + -- vim + hl(0, 'vimUserfunc', { fg = c.func }) + hl(0, 'vimFunction', { fg = c.func }) + hl(0, 'vimIsCommand', {}) + + -- xml + hl(0, 'xmlTag', { fg = c.special }) + hl(0, 'xmlTagName', { fg = c.keyword }) + hl(0, 'xmlEntity', { fg = c.tag }) + hl(0, 'xmlEntityPunct', { fg = c.operator }) + hl(0, 'xmlEqual', { fg = c.operator }) + + -- ini + hl(0, 'dosiniHeader', { fg = c.keyword }) + + -- pandoc + hl(0, 'pandocPipeTableHeader', { fg = c.keyword }) + hl(0, 'pandocPipeTableDelims', { fg = c.keyword }) + hl(0, 'pandocDelimitedCodeBlock', { fg = c.accent }) + + -- shell + hl(0, 'shTestOpr', { fg = c.operator }) + hl(0, 'shOption', { fg = c.special }) + hl(0, 'shQuote', { fg = c.string }) + + -- shell + hl(0, 'haskellDeclKeyword', { fg = c.keyword }) + hl(0, 'haskellLet', { fg = c.keyword }) + hl(0, 'haskellWhere', { fg = c.keyword }) + hl(0, 'haskellIdentifier', { fg = c.tag }) + + -- php + hl(0, 'phpDefine', { fg = c.keyword }) + hl(0, 'phpStructure', { fg = c.keyword }) + + -- ruby + hl(0, 'rubyModule', { fg = c.keyword }) + hl(0, 'rubyRegexp', { fg = c.regexp }) + hl(0, 'rubyRegexpDelimiter', { fg = c.regexp }) + hl(0, 'rubyStringDelimiter', { fg = c.string }) + + -- nvimtree + hl(0, 'NvimTreeRootFolder', { fg = c.fg, bold = true }) + hl(0, 'NvimTreeGitDirty', { fg = c.vcs_modified }) + hl(0, 'NvimTreeGitNew', { fg = c.vcs_added }) + hl(0, 'NvimTreeImageFile', { fg = c.keyword }) + hl(0, 'NvimTreeEmptyFolderName', { fg = c.ui }) + hl(0, 'NvimTreeFolderName', { fg = c.fg }) + hl(0, 'NvimTreeSpecialFile', { fg = c.keyword, underline = true }) + hl(0, 'NvimTreeNormal', { fg = c.fg }) + hl(0, 'NvimTreeCursorLine', {}) + hl(0, 'NvimTreeVertSplit', { bg = c.bg }) + hl(0, 'NvimTreeEndOfBuffer', {}) + hl(0, 'NvimTreeOpenedFolderName', {}) + hl(0, 'NvimTreeGitRenamed', { fg = c.vcs_modified }) + hl(0, 'NvimTreeGitIgnored', { fg = c.ui }) + hl(0, 'NvimTreeGitDeleted', { fg = c.vcs_removed }) + hl(0, 'NvimTreeGitStaged', { fg = c.vcs_added }) + hl(0, 'NvimTreeGitMerge', { fg = c.error }) + hl(0, 'NvimTreeGitDirty', { fg = c.vcs_modified }) + hl(0, 'NvimTreeGitNew', { fg = c.vcs_added }) end return theme