nvim: set theme using nvim_set_hl()

This commit is contained in:
Hoang Nguyen 2022-05-08 05:01:01 +07:00
parent f81bb1c5ba
commit bd08186d7b
No known key found for this signature in database
GPG Key ID: 813CF484F4993419
9 changed files with 428 additions and 429 deletions

View File

@ -32,7 +32,6 @@ ansible-playbook -v -i hosts dotfiles.yml --tags 'never,all'
- [ ] Neovim:
- [ ] OneDark theme
- [ ] Catpuccin theme
- [ ] nvim_set_hl
- [ ] ~~Use [bubblewrap](https://github.com/containers/bubblewrap) for some applications~~ --> use rootless [podman](https://podman.io)
- [ ] Separated Waybar config files for Sway and River
- [ ] [catppuccin](https://github.com/catppuccin/catppuccin) theme

View File

@ -153,7 +153,7 @@ local augroups = {
},
},
},
yank = {
highlight = {
{
event = 'TextYankPost',
opts = {
@ -164,6 +164,30 @@ local augroups = {
desc = 'Highlight yanked region',
},
},
-- see :help hl-StatusLineTerm
{
event = { 'TermOpen', 'WinEnter' },
opts = {
pattern = '*',
callback = function(args)
local buftype = vim.api.nvim_buf_get_option(args.buf, 'buftype')
if buftype == 'terminal' then
vim.opt_local.winhighlight = 'Normal:NormalFloat,SignColumn:NormalFloat'
end
end,
desc = 'Override terminal window highlight',
}
},
{
event = 'FileType',
opts = {
pattern = 'packer',
callback = function(args)
vim.opt_local.winhighlight = 'Normal:NormalFloat,SignColumn:NormalFloat'
end,
desc = 'Override Packer window highlight',
}
},
},
}

View File

@ -5,7 +5,7 @@ require('indent_blankline').setup {
char = '',
-- space_char_blankline = '·',
show_first_indent_level = true,
filetype_exclude = vim.list_extend(ft_exclude, {
filetype_exclude = vim.fn.extend(ft_exclude, {
'log',
'gitcommit',
'markdown',

View File

@ -3,10 +3,11 @@ local custom_tables = require('user.utils.tables')
local filetypes, buftypes = custom_tables.filetype_exclude, custom_tables.buftype_exclude
-- Feline's 'filetypes' and 'buftypes' take a regex value
for _, type in ipairs({ filetypes, buftypes }) do
for i, v in ipairs(type) do
type[i] = '^' .. v .. '$'
end
for i, v in ipairs(filetypes) do
filetypes[i] = '^' .. v .. '$'
end
for i, v in ipairs(buftypes) do
buftypes[i] = '^' .. v .. '$'
end
-- Initialize the components table before defining it
@ -50,8 +51,8 @@ require('feline').setup {
components = components,
vi_mode_colors = comps.vi_mode_colors,
force_inactive = {
filetypes = custom_tables.filetype_exclude,
buftypes = custom_tables.buftype_exclude,
filetypes = filetypes,
buftypes = buftypes,
bufnames = {},
},
}

View File

@ -37,8 +37,7 @@ function M.lsp_active_clients()
-- null-ls sources
local sources = {}
local null_ls_sources = require('null-ls.sources')
local ft = vim.api.nvim_buf_get_option(0, 'ft')
for _, source in ipairs(null_ls_sources.get_available(ft)) do
for _, source in ipairs(null_ls_sources.get_available(vim.bo.filetype)) do
table.insert(sources, source.name)
end
-- filter duplicated entries

View File

@ -1,24 +1,38 @@
local M = {}
local cmd = vim.api.nvim_command
local function highlight(groups)
for group, val in pairs(groups) do
if type(val) == 'string' then
cmd('highlight! link ' .. group .. ' ' .. val)
else
vim.api.nvim_set_hl(0, group, val)
end
end
end
function M.set(theme)
-- Reset everything
vim.api.nvim_command('hi clear')
cmd('highlight clear')
if vim.fn.exists('syntax_on') then
vim.api.nvim_command('syntax reset')
cmd('syntax reset')
end
-- Get theme specs
local t = require('user.themes.' .. theme)
vim.g.colors_name = theme
local t = require('user.themes.' .. theme)
-- Set base16 terminal colors
for index, val in ipairs(t.termcolors) do
local key = 'terminal_color_' .. (index - 1)
vim.g[key] = val
end
-- Load highlight groups
t.highlight_editor()
t.highlight_syntax()
t.set_vim_termcolors()
t.highlight_plugins()
t.highlight_languages()
t.highlight_treesitter()
t.highlight_lsp()
for _, section in ipairs({ 'editor', 'syntax', 'treesitter', 'lang', 'plugins', 'lsp' }) do
local hi_groups = t['highlight_' .. section]
highlight(hi_groups)
end
end
return M

View File

@ -1,454 +1,432 @@
local cmd = vim.api.nvim_command
local M = {}
local c = require('user.themes.nord.colors')
local hi = require('user.utils.functions').highlight
-- Set terminal colors
function M.set_vim_termcolors()
local termcolors = {
c.grey1,
c.red,
c.green,
c.yellow,
c.blue,
c.purple,
c.cyan,
c.white1,
c.grey_bright,
c.red,
c.green,
c.yellow,
c.blue,
c.purple,
c.teal,
c.white2,
}
M.termcolors = {
c.grey1,
c.red,
c.green,
c.yellow,
c.blue,
c.purple,
c.cyan,
c.white1,
c.grey_bright,
c.red,
c.green,
c.yellow,
c.blue,
c.purple,
c.teal,
c.white2,
}
for index, val in ipairs(termcolors) do
local key = 'terminal_color_' .. (index - 1)
vim.g[key] = val
end
end
-- Editor related groups
function M.highlight_editor()
-- Editor
hi('NormalFloat', c.fg, '', '', '')
hi('FloatBorder', c.fg, '', '', '')
hi('ColorColumn', '', c.grey1, '', '')
hi('Cursor', c.black, c.fg, '', '')
hi('CursorIM', c.black, c.white1, '', '')
hi('CursorLine', '', c.grey1, '', '')
cmd('hi! link CurSearch IncSearch')
hi('TermCursorNC', '', c.grey1, '', '')
hi('Underlined', c.green, '', 'underline', '')
hi('Ignore', c.grey1, '', '', '')
hi('Error', c.fg, c.red, '', '')
hi('LineNr', c.grey3, '', '', '')
hi('MatchParen', c.cyan, c.grey3, '', '')
hi('NonText', c.highlight, '', '', '')
hi('Whitespace', c.highlight, '', '', '')
hi('EndOfBuffer', c.black, '', '', '') -- hide filler line ~ completely
hi('Normal', c.fg, '', '', '')
hi('Pmenu', c.fg, c.grey2, '', '')
hi('PmenuSbar', c.fg, c.grey2, '', '')
hi('PmenuSel', c.cyan, c.grey3, '', '')
hi('PmenuThumb', c.cyan, c.grey3, '', '')
hi('SpecialKey', c.grey3, '', '', '')
hi('SpellBad', c.red, '', 'undercurl', c.red)
hi('SpellCap', c.yellow, '', 'undercurl', c.yellow)
hi('SpellLocal', c.white1, '', 'undercurl', c.white1)
hi('SpellRare', c.white2, '', 'undercurl', c.white2)
hi('Visual', '', c.grey2, '', '')
hi('VisualNOS', '', c.grey2, '', '')
M.highlight_editor = {
-- editor
Normal = { fg = c.fg },
NormalFloat = { fg = c.fg },
FloatBorder = { fg = c.fg },
ColorColumn = { bg = c.grey1 },
Cursor = { fg = c.black, bg = c.fg },
CursorIM = { fg = c.black, bg = c.white1 },
CursorLine = { bg = c.grey1 },
TermCursorNC = { bg = c.grey1 },
Underlined = { fg = c.green, underline = true },
Ignore = { fg = c.grey1 },
Error = { fg = c.fg, bg = c.red },
LineNr = { fg = c.grey3 },
MatchParen = { fg = c.cyan, bg = c.grey3 },
NonText = { fg = c.highlight },
Whitespace = { fg = c.highlight },
EndOfBuffer = { fg = c.black }, -- hide filler lines with '~' completely
Pmenu = { fg = c.fg, bg = c.grey2 },
PmenuSbar = { fg = c.fg, bg = c.grey2 },
PmenuSel = { fg = c.cyan, bg = c.grey3 },
PmenuThumb = { fg = c.cyan, bg = c.grey3 },
SpecialKey = { fg = c.grey3 },
SpellBad = { fg = c.red, sp = c.red, undercurl = true },
SpellCap = { fg = c.yellow, sp = c.yellow, undercurl = true },
SpellLocal = { fg = c.white1, sp = c.white1, undercurl = true },
SpellRare = { fg = c.white2, sp = c.white2, undercurl = true },
Visual = { bg = c.grey2 },
VisualNOS = { bg = c.grey2 },
-- quickfix
hi('QuickFixLine', '', c.blue, '', '')
hi('qfLineNr', c.yellow, '', '', '')
QuickFixLine = { bg = c.blue },
qfLineNr = { fg = c.yellow },
-- :checkhealth
hi('healthError', c.red, c.grey1, '', '')
hi('healthSuccess', c.green, c.grey1, '', '')
hi('healthWarning', c.yellow, c.grey1, '', '')
healthError = { fg = c.red, bg = c.grey1 },
healthSuccess = { fg = c.green, bg = c.grey1 },
healthWarning = { fg = c.yellow, bg = c.grey1 },
-- Gutter
hi('CursorColumn', '', c.grey1, '', '')
hi('CursorLineNr', c.fg, '', '', '')
hi('Folded', c.highlight, c.grey1, '', '')
hi('FoldColumn', c.grey3, '', '', '')
hi('SignColumn', c.grey1, '', '', '')
-- gutter
CursorColumn = { bg = c.grey1 },
CursorLineNr = { fg = c.fg },
Folded = { fg = c.highlight, bg = c.grey1 },
FoldColumn = { fg = c.grey3 },
SignColumn = { fg = c.grey1 },
-- Navigation
hi('Directory', c.cyan, '', '', '')
-- navigation
Directory = { fg = c.cyan },
-- Prompt
cmd('hi! link MsgArea Normal')
hi('ErrorMsg', c.fg, c.red, '', '')
hi('ModeMsg', c.fg, '', '', '')
hi('MoreMsg', c.cyan, '', '', '')
hi('Question', c.fg, '', '', '')
hi('WarningMsg', c.black, c.yellow, '', '')
hi('WildMenu', c.cyan, c.grey1, '', '')
-- prompt
MsgArea = 'Normal',
ErrorMsg = { fg = c.fg, bg = c.red },
ModeMsg = { fg = c.fg },
MoreMsg = { fg = c.cyan },
Question = { fg = c.fg },
WarningMsg = { fg = c.black, bg = c.yellow },
WildMenu = { fg = c.cyan, bg = c.grey1 },
-- Statusline
hi('StatusLine', c.cyan, c.grey3, '', '')
hi('StatusLineNC', c.fg, c.grey3, '', '')
hi('StatusLineTerm', c.cyan, c.grey3, '', '')
hi('StatusLineTermNC', c.fg, c.grey3, '', '')
-- statusline
Statusline = { fg = c.cyan, bg = c.grey3 },
StatusLineNC = { fg = c.fg, bg = c.grey3 },
-- Search
hi('IncSearch', c.white2, c.dark_blue, 'underline', '')
hi('Search', c.grey1, c.cyan, '', '')
-- search
IncSearch = { fg = c.white2, bg = c.dark_blue, underline = true },
Search = { fg = c.grey1, bg = c.cyan },
CurSearch = 'IncSearch',
-- Tabline
hi('TabLine', c.fg, c.grey1, '', '')
hi('TabLineFill', c.fg, c.grey1, '', '')
hi('TabLineSel', c.cyan, c.grey3, '', '')
-- tabline
TabLine = { fg = c.fg, bg = c.grey1 },
TabLineFill = { fg = c.fg, bg = c.grey1 },
TabLineSel = { fg = c.cyan, bg = c.grey3 },
-- Window
hi('Title', c.fg, '', '', '')
hi('VertSplit', c.grey_bright, '', '', '')
end
-- window
Title = { fg = c.fg },
VertSplit = { fg = c.grey_bright },
}
-- Syntax groups
function M.highlight_syntax()
-- Base syntax
hi('Boolean', c.blue, '', '', '')
hi('Character', c.fg, '', '', '')
hi('Comment', c.grey_bright, '', 'italic', '')
hi('Conceal', '', '', '', '')
hi('Conditional', c.blue, '', '', '')
hi('Constant', c.fg, '', '', '')
hi('Define', c.blue, '', '', '')
hi('Delimiter', c.white2, '', '', '')
hi('Exception', c.blue, '', '', '')
hi('Float', c.purple, '', '', '')
hi('Function', c.cyan, '', '', '')
hi('Identifier', c.fg, '', '', '')
hi('Include', c.blue, '', '', '')
hi('Keyword', c.blue, '', 'bold', '')
hi('Label', c.blue, '', '', '')
hi('Number', c.purple, '', '', '')
hi('Operator', c.blue, '', '', '')
hi('PreProc', c.blue, '', '', '')
hi('Repeat', c.blue, '', '', '')
hi('Special', c.fg, '', '', '')
hi('SpecialChar', c.yellow, '', '', '')
hi('SpecialComment', c.cyan, '', 'italic', '')
hi('Statement', c.blue, '', '', '')
hi('StorageClass', c.blue, '', '', '')
hi('String', c.green, '', '', '')
hi('Structure', c.blue, '', '', '')
hi('Tag', c.fg, '', '', '')
hi('Todo', c.yellow, '', '', '')
hi('Type', c.dark_blue, '', 'bold', '')
hi('Typedef', c.blue, '', '', '')
cmd('hi! link Macro Define')
cmd('hi! link PreCondit PreProc')
cmd('hi! link Variable Identifier')
M.highlight_syntax = {
-- base syntax
Boolean = { fg = c.blue },
Character = { fg = c.fg },
Comment = { fg = c.grey_bright, italic = true },
Conceal = {},
Conditional = { fg = c.blue },
Constant = { fg = c.fg },
Define = { fg = c.blue },
Delimiter = { fg = c.white2 },
Exception = { fg = c.blue },
Float = { fg = c.purple },
Function = { fg = c.cyan },
Identifier = { fg = c.fg },
Include = { fg = c.blue },
Keyword = { fg = c.blue, bold = true },
Label = { fg = c.blue },
Number = { fg = c.purple },
Operator = { fg = c.blue },
PreProc = { fg = c.blue },
Repeat = { fg = c.blue },
Special = { fg = c.fg },
SpecialChar = { fg = c.yellow },
SpecialComment = { fg = c.cyan, italic = true },
Statement = { fg = c.blue },
StorageClass = { fg = c.blue },
String = { fg = c.green },
Structure = { fg = c.blue },
Tag = { fg = c.fg },
Todo = { fg = c.yellow },
Type = { fg = c.dark_blue, bold = true },
Typedef = { fg = c.blue },
Macro = 'Define',
PreCondit = 'PreProc',
Variable = 'Identifier',
-- Diff
hi('DiffAdd', c.green, c.grey1, '', '')
hi('DiffChange', c.yellow, c.grey1, '', '')
hi('DiffDelete', c.red, c.grey1, '', '')
hi('DiffText', c.blue, c.grey1, '', '')
-- Legacy diff groups for some plugins
hi('diffOldFile', c.dark_blue, c.grey1, '', '')
hi('diffNewFile', c.blue, c.grey1, '', '')
hi('diffFile', c.cyan, c.grey1, '', '')
hi('diffLine', c.purple, c.grey1, '', '')
hi('diffIndexLine', c.fg, c.grey1, '', '')
cmd('hi! link diffAdded DiffAdd')
cmd('hi! link diffRemoved DiffDelete')
cmd('hi! link diffChanged DiffChange')
end
-- diff
DiffAdd = { fg = c.green, bg = c.grey1 },
DiffChange = { fg = c.yellow, bg = c.grey1 },
DiffDelete = { fg = c.red, bg = c.grey1 },
DiffText = { fg = c.blue, bg = c.grey1 },
-- legacy diff groups for some plugins
diffOldFile = { fg = c.dark_blue, bg = c.grey1 },
diffNewFile = { fg = c.blue, bg = c.grey1 },
diffFile = { fg = c.cyan, bg = c.grey1 },
diffLine = { fg = c.purple, bg = c.grey1 },
diffIndexLine = { fg = c.fg, bg = c.grey1 },
diffAdded = 'DiffAdd',
diffRemoved = 'DiffDelete',
diffChanged = 'DiffChange',
}
-- No treesitter support yet
function M.highlight_languages()
-- No tree-sitter grammar yet
M.highlight_lang = {
-- sql
cmd('hi! link sqlKeyword Keyword')
cmd('hi! link sqlSpecial Keyword')
sqlKeyword = 'Keyword',
sqlSpecial = 'Keyword',
-- AsciiDoc
hi('asciidocAttributeEntry', c.dark_blue, '', '', '')
hi('asciidocAttributeList', c.dark_blue, '', '', '')
hi('asciidocAttributeRef', c.dark_blue, '', '', '')
hi('asciidocHLabel', c.blue, '', '', '')
hi('asciidocListingBlock', c.teal, '', '', '')
hi('asciidocMacroAttributes', c.purple, '', '', '')
hi('asciidocOneLineTitle', c.cyan, '', '', '')
hi('asciidocPassthroughBlock', c.blue, '', '', '')
hi('asciidocTriplePlusPassthrough', c.teal, '', '', '')
hi('asciidocAttributeRef', c.purple, '', 'bold', '')
cmd('hi! link asciidocAdmonition Keyword')
cmd('hi! link asciidocBackslash Keywork')
cmd('hi! link asciidocMacro Keyword')
hi('asciidocQuotedBold', '', '', 'bold', '')
hi('asciidocQuotedEmphasized', '', '', 'italic', '')
hi('asciidocQuotedMonospaced', c.teal, '', '', '')
cmd('hi! link asciidocQuotedMonospaced2 asciidocQuotedMonospaced')
cmd('hi! link asciidocQuotedUnconstrainedBold asciidocQuotedBold')
cmd('hi! link asciidocQuotedUnconstrainedEmphasized asciidocQuotedEmphasized')
cmd('hi! link asciidocURL asciidocMacroAttributes')
-- asciidoc
asciidocAttributeEntry = { fg = c.dark_blue },
asciidocAttributeList = { fg = c.dark_blue },
asciidocAttributeRef = { fg = c.purple, bold = true },
asciidocHLabel = { fg = c.blue },
asciidocListingBlock = { fg = c.teal },
asciidocMacro = 'Keyword',
asciidocMacroAttributes = { fg = c.purple },
asciidocOneLineTitle = { fg = c.cyan },
asciidocPassthroughBlock = { fg = c.blue },
asciidocTriplePlusPassthrough = { fg = c.teal },
asciidocAdmonition = 'Keyword',
asciidocBackslash = 'Keyword',
asciidocQuotedBold = { bold = true },
asciidocQuotedEmphasized = { italic = true },
asciidocQuotedMonospaced = { fg = c.teal },
asciidocQuotedMonospaced2 = 'asciidocQuotedMonospaced',
asciidocQuotedUnconstrainedBold = 'asciidocQuotedBold',
asciidocQuotedUnconstrainedEmphasized = 'asciidocQuotedEmphasized',
asciidocURL = 'asciidocMacroAttributes',
-- jinja (Vim-Jinja2-Syntax)
hi('jinjaStatement', c.purple, '', 'bold,italic', '')
hi('jinjaOperator', c.blue, '', '', '')
hi('jinjaString', c.green, '', '', '')
hi('jinjaNumber', c.cyan, '', '', '')
hi('jinjaVariable', c.yellow, '', '', '')
jinjaStatement = { fg = c.purple, bold = true, italic = true },
jinjaOperator = { fg = c.blue },
jinjaString = { fg = c.green },
jinjaNumber = { fg = c.cyan },
jinjaVariable = { fg = c.yellow },
-- mermaid (mermaid.vim)
hi('mermaidDiagramType', c.purple, '', 'bold', '')
end
mermaidDiagramType = { fg = c.purple, bold = true },
}
-- Treesitter (:h nvim-treesitter-highlights)
function M.highlight_treesitter()
hi('TSAnnotation', c.dark_blue, '', 'italic', '')
hi('TSCharacter', c.green, '', '', '')
hi('TSConstructor', c.blue, '', '', '')
hi('TSConstant', c.yellow, '', '', '')
hi('TSFloat', c.purple, '', '', '')
hi('TSNumber', c.purple, '', '', '')
hi('TSString', c.green, '', '', '')
-- :help nvim-treesitter-highlights
M.highlight_treesitter = {
TSAnnotation = { fg = c.dark_blue, italic = true },
TSCharacter = { fg = c.green },
TSConstructor = { fg = c.blue },
TSConstant = { fg = c.yellow },
TSFloat = { fg = c.purple },
TSNumber = { fg = c.purple },
TSString = { fg = c.green },
TSAttribute = { fg = c.purple },
TSBoolean = 'Boolean',
TSConstBuiltin = { fg = c.teal },
TSConstMacro = { fg = c.teal },
TSError = { fg = c.red },
TSException = { fg = c.purple },
TSField = { fg = c.teal },
TSFuncMacro = { fg = c.teal },
TSInclude = { fg = c.blue },
TSLabel = { fg = c.purple },
TSNamespace = { fg = c.fg },
TSOperator = { fg = c.blue },
TSParameter = { fg = c.purple, italic = true },
TSParameterReference = { fg = c.purple, italic = true },
TSProperty = { fg = c.teal },
TSPunctDelimiter = { fg = c.fg },
TSPunctBracket = { fg = c.cyan },
TSPunctSpecial = { fg = c.cyan },
TSStringRegex = { fg = c.teal },
TSStringEscape = { fg = c.purple },
TSSymbol = { fg = c.purple },
TSType = { fg = c.dark_blue, bold = true },
TSTypeBuiltin = { fg = c.dark_blue, bold = true },
TSTag = { fg = c.fg },
TSTagDelimiter = { fg = c.purple },
TSText = { fg = c.fg },
TSTextReference = { fg = c.purple },
TSStrong = { fg = c.fg, bold = true },
TSEmphasis = { fg = c.fg, bold = true, italic = true },
TSUnderline = { underline = true },
TSStrike = { strikethrough = true },
TSTitle = { fg = c.dark_blue, bold = true },
TSLiteral = { fg = c.green, italic = true },
TSURI = { fg = c.green, underline = true },
TSComment = 'Comment',
TSConditional = { fg = c.blue, bold = true },
TSKeyword = { fg = c.blue, bold = true },
TSRepeat = { fg = c.blue, bold = true },
TSKeywordFunction = { fg = c.blue, bold = true },
TSKeywordOperator = { fg = c.blue, bold = true },
TSFunction = 'Function',
TSMethod = { fg = c.teal },
TSFuncBuiltin = 'Function',
TSVariable = 'Variable',
TSVariableBuiltin = 'Variable',
TSStructure = 'Structure',
TSNote = { fg = c.blue, bold = true },
TSWarning = { fg = c.yellow, bold = true },
TSDanger = { fg = c.red, bold = true },
}
hi('TSAttribute', c.purple, '', '', '')
cmd('hi! link TSBoolean Boolean')
hi('TSConstBuiltin', c.teal, '', '', '')
hi('TSConstMacro', c.teal, '', '', '')
hi('TSError', c.red, '', '', '')
hi('TSException', c.purple, '', '', '')
hi('TSField', c.teal, '', '', '')
hi('TSFuncMacro', c.teal, '', '', '')
hi('TSInclude', c.blue, '', '', '')
hi('TSLabel', c.purple, '', '', '')
hi('TSNamespace', c.fg, '', '', '')
hi('TSOperator', c.blue, '', '', '')
hi('TSParameter', c.purple, '', 'italic', '')
hi('TSParameterReference', c.purple, '', 'italic', '')
hi('TSProperty', c.teal, '', '', '')
hi('TSPunctDelimiter', c.fg, '', '', '')
hi('TSPunctBracket', c.cyan, '', '', '')
hi('TSPunctSpecial', c.cyan, '', '', '')
hi('TSStringRegex', c.teal, '', '', '')
hi('TSStringEscape', c.purple, '', '', '')
hi('TSSymbol', c.purple, '', '', '')
hi('TSType', c.dark_blue, '', 'bold', '')
hi('TSTypeBuiltin', c.dark_blue, '', 'bold', '')
hi('TSTag', c.fg, '', '', '')
hi('TSTagDelimiter', c.purple, '', '', '')
hi('TSText', c.fg, '', '', '')
hi('TSTextReference', c.purple, '', '', '')
hi('TSStrong', c.fg, '', 'bold', '')
hi('TSEmphasis', c.fg, '', 'bold,italic', '')
hi('TSUnderline', '', '', 'underline', '')
hi('TSStrike', c.orange, '', 'italic', '')
hi('TSTitle', c.dark_blue, '', 'bold', '')
hi('TSLiteral', c.green, '', 'italic', '')
hi('TSURI', c.green, '', '', '')
M.highlight_lsp = {
DiagnosticError = { fg = c.red },
DiagnosticWarn = { fg = c.yellow },
DiagnosticInfo = { fg = c.blue },
DiagnosticHint = { fg = c.cyan },
cmd('hi! link TSComment Comment')
hi('TSConditional', c.blue, '', 'bold', '')
hi('TSKeyword', c.blue, '', 'bold', '')
hi('TSRepeat', c.blue, '', 'bold', '')
hi('TSKeywordFunction', c.blue, '', 'bold', '')
hi('TSKeywordOperator', c.blue, '', 'bold', '')
cmd('hi! link TSFunction Function')
hi('TSMethod', c.teal, '', '', '')
cmd('hi! link TSFuncBuiltin Function')
cmd('hi! link TSVariable Variable')
cmd('hi! link TSVariableBuiltin Variable')
cmd('hi! link TSStructure Structure')
DiagnosticUnderlineError = { sp = c.red, underline = true },
DiagnosticUnderlineWarn = { sp = c.yellow, underline = true },
DiagnosticUnderlineInfo = { sp = c.blue, underline = true },
DiagnosticUnderlineHint = { sp = c.cyan, underline = true },
hi('TSNote', c.blue, '', 'bold', '')
hi('TSWarning', c.yellow, '', 'bold', '')
hi('TSDanger', c.red, '', 'bold', '')
end
DiagnosticVirtualTextError = { fg = c.red, italic = true },
DiagnosticVirtualTextWarn = { fg = c.yellow, italic = true },
DiagnosticVirtualTextInfo = { fg = c.blue, italic = true },
DiagnosticVirtualTextHint = { fg = c.cyan, italic = true },
-- LSP groups
function M.highlight_lsp()
hi('DiagnosticError', c.red, '', '', '')
hi('DiagnosticWarn', c.yellow, '', '', '')
hi('DiagnosticInfo', c.blue, '', '', '')
hi('DiagnosticHint', c.cyan, '', '', '')
DiagnosticFloatingError = 'DiagnosticError',
DiagnosticFloatingWarn = 'DiagnosticWarn',
DiagnosticFloatingInfo = 'DiagnosticInfo',
DiagnosticFloatingHint = 'DiagnosticHint',
hi('DiagnisticUnderlineError', '', '', 'underline', c.red)
hi('DiagnosticUnderlineWarn', '', '', 'underline', c.yellow)
hi('DiagnosticUnderlineInfo', '', '', 'underline', c.blue)
hi('DiagnosticUnderlineHint', '', '', 'underline', c.cyan)
DiagnosticSignError = 'DiagnosticError',
DiagnosticSignWarn = 'DiagnosticWarn',
DiagnosticSignInfo = 'DiagnosticInfo',
DiagnosticSignHint = 'DiagnosticHint',
hi('DiagnosticVirtualTextError', c.red, '', 'italic', '')
hi('DiagnosticVirtualTextWarn', c.yellow, '', 'italic', '')
hi('DiagnosticVirtualTextInfo', c.blue, '', 'italic', '')
hi('DiagnosticVirtualTextHint', c.cyan, '', 'italic', '')
LspReferenceText = { fg = c.fg, bg = c.grey_bright },
LspReferenceRead = { fg = c.fg, bg = c.grey_bright },
LspReferenceWrite = { fg = c.fg, bg = c.grey_bright },
LspCodeLens = 'Comment',
}
cmd('hi! link DiagnosticFloatingError DiagnosticError')
cmd('hi! link DiagnosticFloatingWarn DiagnosticWarn')
cmd('hi! link DiagnosticFloatingInfo DiagnosticInfo')
cmd('hi! link DiagnosticFloatingHint DiagnosticHint')
cmd('hi! link DiagnosticSignError DiagnosticError')
cmd('hi! link DiagnosticSignWarn DiagnosticWarn')
cmd('hi! link DiagnosticSignInfo DiagnosticInfo')
cmd('hi! link DiagnosticSignHint DiagnosticHint')
hi('LspReferenceText', c.fg, c.grey_bright, '', '')
hi('LspReferenceRead', c.fg, c.grey_bright, '', '')
hi('LspReferenceWrite', c.fg, c.grey_bright, '', '')
cmd('hi! link LspCodeLens Comment')
end
-- Specify groups for plugins
function M.highlight_plugins()
M.highlight_plugins = {
-- nvim-cmp
hi('CmpItemAbbr', c.fg, '', '', '')
hi('CmpItemAbbrMatch', c.yellow, '', 'bold', '')
hi('CmpItemAbbrMatchFuzzy', c.yellow, '', 'bold', '')
hi('CmpItemAbbrDeprecated', c.highlight, '', 'strikethrough', '')
hi('CmpItemKind', c.green, '', 'bold', '')
hi('CmpItemMenu', c.blue, '', 'bold', '')
CmpItemAbbr = { fg = c.fg },
CmpItemAbbrMatch = { fg = c.yellow, bold = true },
CmpItemAbbrMatchFuzzy = { fg = c.yellow, bold = true },
CmpItemAbbrDeprecated = { fg = c.highlight, strikethrough = true },
CmpItemKind = { fg = c.green, bold = true },
CmpItemMenu = { fg = c.blue, bold = true },
-- LuaSnip
hi('LuaSnipChoice', c.orange, '', '', '')
hi('LuaSnipInsert', c.blue, '', '', '')
LuaSnipChoice = { fg = c.orange },
LuaSnipInsert = { fg = c.blue },
-- Gitsigns
hi('GitSignsAdd', c.green, '', 'bold', '')
hi('GitSignsAddNr', c.green, '', '', '')
hi('GitSignsChange', c.yellow, '', 'bold', '')
hi('GitSignsChangeNr', c.yellow, '', '', '')
hi('GitSignsDelete', c.red, '', 'bold', '')
hi('GitSignsDeleteNr', c.red, '', '', '')
hi('GitSignsCurrentLineBlame', c.grey_bright, '', 'italic,bold', '')
-- gitsigns.nvim
GitSignsAdd = { fg = c.green, bold = true },
GitSignsAddNr = { fg = c.green },
GitSignsChange = { fg = c.yellow, bold = true },
GitSignsChangeNr = { fg = c.yellow },
GitSignsDelete = { fg = c.red, bold = true },
GitSignsDeleteNr = { fg = c.red },
GitSignsCurrentLineBlame = { fg = c.grey_bright, bold = true, italic = true },
-- dap.nvim
hi('DapSignDefault', c.orange, '', '', '')
hi('DapSignRejected', c.red, '', '', '')
-- nvim-dap
DapSignDefault = { fg = c.orange },
DapSignRejected = { fg = c.red },
-- ts-rainbow
hi('rainbowcol1', c.red, '', 'bold', '')
hi('rainbowcol2', c.orange, '', 'bold', '')
hi('rainbowcol3', c.yellow, '', 'bold', '')
hi('rainbowcol4', c.green, '', 'bold', '')
hi('rainbowcol5', c.cyan, '', 'bold', '')
hi('rainbowcol6', c.blue, '', 'bold', '')
hi('rainbowcol7', c.purple, '', 'bold', '')
rainbowcol1 = { fg = c.red, bold = true },
rainbowcol2 = { fg = c.orange, bold = true },
rainbowcol3 = { fg = c.yellow, bold = true },
rainbowcol4 = { fg = c.green, bold = true },
rainbowcol5 = { fg = c.cyan, bold = true },
rainbowcol6 = { fg = c.blue, bold = true },
rainbowcol7 = { fg = c.purple, bold = true },
-- dashboard-nvim / alpha-nvim
hi('DashboardHeader', c.blue, '', 'bold', '')
hi('DashboardCenter', c.green, '', 'bold', '')
hi('DashboardShortcut', c.purple, '', 'bold,italic', '')
hi('DashboardFooter', c.yellow, '', 'bold', '')
-- dashboard.nvim / alpha-nvim
DashboardHeader = { fg = c.blue, bold = true },
DashboardCenter = { fg = c.green, bold = true },
DashboardShortcut = { fg = c.purple, bold = true, italic = true },
DashboardFooter = { fg = c.yellow, bold = true },
-- symbols-outline.nvim
hi('FocusedSymbol', c.yellow, '', 'bold', '')
hi('SymbolsOutlineConnector', c.blue, '', '', '')
FocusedSymbol = { fg = c.yellow, bold = true },
SymbolsOutlineConnector = { fg = c.blue },
-- NvimTree
hi('NvimTreeNormal', c.fg, '', '', '')
hi('NvimTreeIndentMarker', c.grey3, '', '', '')
hi('NvimTreeFolderIcon', c.fg, '', '', '')
hi('NvimTreeRootFolder', c.teal, '', 'bold', '')
hi('NvimTreeFolderName', c.blue, '', '', '')
hi('NvimTreeEmptyFolderName', c.grey_bright, '', '', '')
hi('NvimTreeImageFile', c.yellow, '', '', '')
hi('NvimTreeExecFile', c.green, '', '', '')
hi('NvimTreeSpecialFile', c.dark_blue, '', 'underline', '')
hi('NvimTreeGitDirty', c.yellow, '', '', '')
hi('NvimTreeGitNew', c.green, '', '', '')
hi('NvimTreeGitDeleted', c.red, '', '', '')
cmd('hi! link NvimTreeWindowPicker WindowPicker')
-- nvim-tree.lua
NvimTreeNormal = { fg = c.fg },
NvimTreeIndentMarker = { fg = c.grey3 },
NvimTreeFolderIcon = { fg = c.fg },
NvimTreeRootFolder = { fg = c.teal, bold = true },
NvimTreeFolderName = { fg = c.blue },
NvimTreeEmptyFolderName = { fg = c.grey_bright },
NvimTreeImageFile = { fg = c.yellow },
NvimTreeExecFile = { fg = c.green },
NvimTreeSpecialFile = { fg = c.dark_blue, underline = true },
NvimTreeGitDirty = { fg = c.yellow },
NvimTreeGitDeleted = { fg = c.red },
NvimTreeWindowPicker = 'WindowPicker',
-- WhichKey
hi('WhichKey', c.green, '', 'bold', '')
hi('WhichKeyGroup', c.cyan, '', '', '')
hi('WhichKeyDesc', c.purple, '', '', '')
hi('WhichKeySeperator', c.grey_bright, '', '', '')
cmd('hi! link WhichKeyFloat NormalFloat')
cmd('hi! link WhichKeyValue Comment')
-- which-key.nvim
WhichKey = { fg = c.green, bold = true },
WhichKeyGroup = { fg = c.cyan },
WhichKeyDesc = { fg = c.purple },
WhichKeySeperator = { fg = c.grey_bright },
WhichKeyFloat = 'NormalFloat',
WhichKeyValue = 'Comment',
-- nvim-notify
hi('NotifyERRORBorder', c.red, '', '', '')
hi('NotifyWARNBorder', c.yellow, '', '', '')
hi('NotifyINFOBorder', c.blue, '', '', '')
hi('NotifyDEBUGBorder', c.green, '', '', '')
hi('NotifyTRACEBorder', c.purple, '', '', '')
hi('NotifyERRORIcon', c.red, '', '', '')
hi('NotifyWARNIcon', c.yellow, '', '', '')
hi('NotifyINFOIcon', c.blue, '', '', '')
hi('NotifyDEBUGIcon', c.green, '', '', '')
hi('NotifyTRACEIcon', c.purple, '', '', '')
hi('NotifyERRORTitle', c.red, '', '', '')
hi('NotifyWARNTitle', c.yellow, '', '', '')
hi('NotifyINFOTitle', c.blue, '', '', '')
hi('NotifyDEBUGTitle', c.green, '', '', '')
hi('NotifyTRACETitle', c.purple, '', '', '')
NotifyERRORBorder = { fg = c.red },
NotifyWARNBorder = { fg = c.yellow },
NotifyINFOBorder = { fg = c.blue },
NotifyDEBUGBorder = { fg = c.green },
NotifyTRACEBorder = { fg = c.purple },
NotifyERRORIcon = 'NotifyERRORBorder',
NotifyWARNIcon = 'NotifyWARNBorder',
NotifyINFOIcon = 'NotifyINFOBorder',
NotifyDEBUGIcon = 'NotifyDEBUGBorder',
NotifyTRACEIcon = 'NotifyTRACEBorder',
NotifyERRORTitle = 'NotifyERRORBorder',
NotifyWARNTitle = 'NotifyWARNBorder',
NotifyINFOTitle = 'NotifyINFOBorder',
NotifyDEBUGTitle = 'NotifyDEBUGBorder',
NotifyTRACETitle = 'NotifyTRACEBorder',
-- Indent Blankline
hi('IndentBlanklineChar', c.grey1, '', '', '')
hi('IndentBlanklineContextChar', c.grey_bright, '', '', '')
-- indent-blankline.nvim
IndentBlanklineChar = { fg = c.grey1 },
IndentBlanklineContextChar = { fg = c.grey_bright },
-- nvim-treesitter-context
cmd('hi! link TreesitterContext Pmenu')
TreesitterContext = 'Pmenu',
-- orgmode.nvim
hi('OrgHeadlineLevel1', c.purple, '', 'bold', '')
hi('OrgHeadlineLevel2', c.dark_blue, '', 'bold', '')
hi('OrgHeadlineLevel3', c.blue, '', 'bold', '')
hi('OrgHeadlineLevel4', c.cyan, '', 'bold', '')
hi('OrgHeadlineLevel5', c.teal, '', 'bold', '')
hi('OrgHeadlineLevel6', c.green, '', 'bold', '')
hi('OrgTSCheckboxChecked', c.grey3, '', 'bold', '')
hi('OrgTSCheckboxUnchecked', c.green, '', 'bold', '')
hi('OrgTSCheckboxHalfChecked', c.blue, '', 'bold', '')
hi('OrgAgendaDealine', c.red, '', 'bold', '')
hi('OrgAgendaScheduled', c.green, '', 'bold', '')
hi('OrgAgendaScheduledPast', c.blue, '', 'bold', '')
-- nvim-orgmode
OrgHeadlineLevel1 = { fg = c.purple, bold = true },
OrgHeadlineLevel2 = { fg = c.dark_blue, bold = true },
OrgHeadlineLevel3 = { fg = c.blue, bold = true },
OrgHeadlineLevel4 = { fg = c.cyan, bold = true },
OrgHeadlineLevel5 = { fg = c.teal, bold = true },
OrgHeadlineLevel6 = { fg = c.green, bold = true },
OrgTSCheckboxChecked = { fg = c.grey3, bold = true },
OrgTSCheckboxUnchecked = { fg = c.green, bold = true },
OrgTSCheckboxHalfChecked = { fg = c.blue, bold = true },
OrgAgendaDealine = { fg = c.red, bold = true },
OrgAgendaScheduled = { fg = c.green, bold = true },
OrgAgendaScheduledPast = { fg = c.blue, bold = true },
-- window-picker.nvim
hi('WindowPicker', c.white2, c.blue, 'bold', '')
hi('WindowPickerZap', c.white2, c.red, 'bold', '')
hi('WindowPickerSwap', c.white2, c.orange, 'bold', '')
WindowPicker = { fg = c.white2, bg = c.blue, bold = true },
WindowPickerZap = { fg = c.white2, bg = c.red, bold = true },
WindowPickerSwap = { fg = c.white2, bg = c.orange, bold = true },
-- trouble.nvim
hi('LspTroubleText', c.blue, '', 'bold', '')
LspTroubleText = { fg = c.blue, bold = true },
-- Telescope
hi('TelescopePromptBorder', c.cyan, '', 'bold', '')
hi('TelescopeResultsBorder', c.blue, '', 'bold', '')
hi('TelescopePreviewBorder', c.green, '', 'bold', '')
hi('TelescopeSelection', c.fg, c.grey2, '', '')
hi('TelescopeMultiSelection', c.fg, c.grey2, 'bold', '')
hi('TelescopeSelectionCaret', c.red, c.grey2, 'bold', '')
hi('TelescopeMatching', c.yellow, '', 'bold', '')
hi('TelescopePromptTitle', c.black, c.cyan, 'bold', '')
hi('TelescopePreviewTitle', c.black, c.green, 'bold', '')
hi('TelescopeResultsTitle', c.black, c.blue, 'bold', '')
-- telescope.nvim
TelescopePromptBorder = { fg = c.cyan, bold = true },
TelescopeResultsBorder = { fg = c.blue, bold = true },
TelescopePreviewBorder = { fg = c.green, bold = true },
TelescopeSelection = { fg = c.fg, bg = c.grey2 },
TelescopeMultiSelection = { fg = c.fg, bg = c.grey2, bold = true },
TelescopeSelectionCaret = { fg = c.red, bg = c.grey2, bold = true },
TelescopeMatching = { fg = c.yellow, bold = true },
TelescopePromptTitle = { fg = c.black, bg = c.cyan, bold = true },
TelescopeResultsTitle = { fg = c.black, bg = c.blue, bold = true },
TelescopePreviewTitle = { fg = c.black, bg = c.green, bold = true },
-- Neogit
hi('NeogitBranch', c.purple, '', '', '')
hi('NeogitRemote', c.blue, '', '', '')
hi('NeogitHunkHeader', c.cyan, c.grey2, 'bold', '')
hi('NeogitHunkHeaderHighlight', c.yellow, c.grey2, 'bold', '')
hi('NeogitDiffContextHighlight', c.fg, c.grey2, '', '')
hi('NeogitDiffDeleteHighlight', c.red, c.grey2, '', '')
hi('NeogitDiffAddHighlight', c.green, c.grey2, '', '')
hi('NeogitNotificationInfo', c.green, '', '', '')
hi('NeogitNotificationWarning', c.yellow, '', '', '')
hi('NeogitNotificationError', c.red, '', '', '')
-- neogit
NeogitBranch = { fg = c.purple },
NeogitRemote = { fg = c.green },
NeogitHunkHeader = { fg = c.cyan, bg = c.grey2, bold = true },
NeogitHunkHeaderHighlight = { fg = c.yellow, bg = c.grey2, bold = true },
NeogitDiffContextHighlight = { fg = c.fg, bg = c.grey2 },
NeogitDiffDeleteHighlight = { fg = c.red, bg = c.grey2 },
NeogitDiffAddHighlight = { fg = c.green, bg = c.grey2 },
NeogitNotificationInfo = { fg = c.blue },
NeogitNotificationWarning = { fg = c.yellow },
NeogitNotificationError = { fg = c.red },
-- fidget.nvim
hi('FidgetTitle', c.green, '', 'bold', '')
hi('FidgetTask', c.blue, '', 'italic', '')
FidgetTitle = { fg = c.green, bold = true },
FidgetTask = { fg = c.blue, italic = true },
-- lightspeed.nvim
hi('LightspeedLabel', c.red, '', 'bold,underline', '')
hi('LightspeedLabelDistant', c.cyan, '', 'bold,underline', '')
hi('LightspeedShortcut', c.fg, c.red, 'bold', '')
hi('LightspeedMaskedChar', c.highlight, '', '', '')
hi('LightspeedUnlabeledMatch', c.white2, '', 'bold', '')
cmd('hi! link LightspeedGreyWash Comment')
end
LightspeedLabel = { fg = c.red, bold = true, underline = true },
LightspeedLabelDistant = { fg = c.cyan, bold = true, underline = true },
LightspeedShortcut = { fg = c.fg, bg = c.red, bold = true },
LightspeedMaskedChar = { fg = c.highlight },
LightspeedUnlabeledMatch = { fg = c.white2, bold = true },
LightspeedGreyWash = 'Comment',
}
return M

View File

@ -1,10 +1,3 @@
local M = {}
local c = require('user.themes.onedark.colors')
local hi = require('user.utils.functions').highlight
function M.highlight_editor()
hi('ModeMsg', c.fg, '', '', '')
end
return M

View File

@ -1,14 +1,5 @@
local M = {}
function M.highlight(group, guifg, guibg, attr, guisp)
local fg = guifg ~= '' and 'guifg=' .. guifg or 'guifg=NONE'
local bg = guibg ~= '' and 'guibg=' .. guibg or 'guibg=NONE'
local style = attr ~= '' and 'gui=' .. attr or 'gui=NONE'
local sp = guisp ~= '' and 'guisp=' .. guisp or ''
vim.api.nvim_command('hi ' .. group .. ' ' .. fg .. ' ' .. bg .. ' ' .. style .. ' ' .. sp)
end
function M.load_autocmd(definitions)
for group_name, definition in pairs(definitions) do
vim.api.nvim_create_augroup(group_name, { clear = true })