337 lines
12 KiB
Lua
337 lines
12 KiB
Lua
-- Credit: https://github.com/shaunsingh/nord.nvim
|
|
|
|
local M = {}
|
|
|
|
M.colors = {
|
|
black = '#2E3440',
|
|
grey1 = '#3B4252',
|
|
grey2 = '#434C5E',
|
|
grey3 = '#4C566A',
|
|
grey_bright = '#616E88',
|
|
fg = '#D8DEE9',
|
|
white1 = '#E5E9F0',
|
|
white2 = '#ECEFF4',
|
|
teal = '#8FBCBB',
|
|
cyan = '#88C0D0',
|
|
blue = '#81A1C1',
|
|
dark_blue = '#5E81AC',
|
|
red = '#BF616A',
|
|
orange = '#D08770',
|
|
yellow = '#EBCB8B',
|
|
green = '#A3BE8C',
|
|
purple = '#B48EAD',
|
|
highlight = '#7B88A1'
|
|
}
|
|
|
|
local c = M.colors
|
|
|
|
local function hi(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 ''
|
|
|
|
local hl = 'hi ' .. group .. ' ' .. fg .. ' ' .. bg .. ' ' .. style .. ' ' .. sp
|
|
vim.cmd(hl)
|
|
end
|
|
|
|
-- Set terminal colors
|
|
local function set_vim_termcolors()
|
|
vim.g.terminal_color_0 = c.grey1
|
|
vim.g.terminal_color_1 = c.red
|
|
vim.g.terminal_color_2 = c.green
|
|
vim.g.terminal_color_3 = c.yellow
|
|
vim.g.terminal_color_4 = c.blue
|
|
vim.g.terminal_color_5 = c.purple
|
|
vim.g.terminal_color_6 = c.cyan
|
|
vim.g.terminal_color_7 = c.white1
|
|
vim.g.terminal_color_8 = c.grey_bright
|
|
vim.g.terminal_color_9 = c.red
|
|
vim.g.terminal_color_10 = c.green
|
|
vim.g.terminal_color_11 = c.yellow
|
|
vim.g.terminal_color_12 = c.blue
|
|
vim.g.terminal_color_13 = c.purple
|
|
vim.g.terminal_color_14 = c.teal
|
|
vim.g.terminal_color_15 = c.white2
|
|
end
|
|
|
|
-- Editor related groups
|
|
local function highlight_editors()
|
|
-- Attributes
|
|
hi('Bold' , '', '', 'bold' , '')
|
|
hi('Italic' , '', '', 'italic' , '')
|
|
hi('Underline', '', '', 'underline', '')
|
|
|
|
-- Editor
|
|
hi('ColorColumn', '' , c.grey1, '', '')
|
|
hi('Cursor' , c.black , c.fg , '', '')
|
|
hi('CursorLine' , c.grey1 , '' , '', '')
|
|
hi('Error' , c.fg , c.red , '', '')
|
|
hi('iCursor' , c.black , c.fg , '', '')
|
|
hi('LineNr' , c.grey3 , '' , '', '')
|
|
hi('MatchParen' , c.cyan , c.grey3, '', '')
|
|
hi('NonText' , c.grey2 , '' , '', '')
|
|
hi('Normal' , c.fg , c.black, '', '')
|
|
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 , c.black, 'undercurl', c.red)
|
|
hi('SpellCap' , c.yellow, c.black, 'undercurl', c.yellow)
|
|
hi('SpellLocal' , c.white1, c.black, 'undercurl', c.white1)
|
|
hi('SpellRare' , c.white2, c.black, 'undercurl', c.white2)
|
|
hi('Visual' , '' , c.grey2 , '', '')
|
|
hi('VisualNOS' , '' , c.grey2 , '', '')
|
|
-- Neovim support
|
|
hi('healthError' , c.red , c.grey1, '', '')
|
|
hi('healthSuccess', c.green , c.grey1, '', '')
|
|
hi('healthWarning', c.yellow, c.grey1, '', '')
|
|
hi('TermCursorNC' , '' , c.grey2, '', '')
|
|
|
|
-- Gutter
|
|
hi('CursorColumn', c.grey1, '' , '', '')
|
|
hi('CursorLineNr', c.fg , '' , '', '')
|
|
hi('Folded' , c.grey3, c.grey1, '', '')
|
|
hi('FoldColumn' , c.grey3, c.black, '', '')
|
|
hi('SignColumn' , c.grey1, c.black, '', '')
|
|
|
|
-- Navigation
|
|
hi('Directory', c.cyan, '', '', '')
|
|
|
|
-- Prompt
|
|
hi('EndOfBuffer', c.grey1, '' , '', '')
|
|
hi('ErrorMsg' , c.fg , c.red , '', '')
|
|
hi('ModeMsg' , c.green, '' , '', '')
|
|
hi('MoreMsg' , c.cyan , '' , '', '')
|
|
hi('Question' , c.fg , '' , '', '')
|
|
hi('WarningMsg' , c.black, c.yellow, '', '')
|
|
hi('WildMenu' , c.cyan , 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, '', '')
|
|
|
|
-- Search
|
|
hi('IncSearch', c.white2, c.dark_blue, 'underline', '')
|
|
hi('Search' , c.grey1 , c.cyan , '' , '')
|
|
|
|
-- Tabline
|
|
hi('TabLine' , c.fg , c.grey1, '', '')
|
|
hi('TabLineFill', c.fg , c.grey1, '', '')
|
|
hi('TabLineSel' , c.cyan, c.grey3, '', '')
|
|
|
|
-- Window
|
|
hi('Title', c.fg, '', '', '')
|
|
hi('VertSplit', c.grey2, c.black, '', '')
|
|
end
|
|
|
|
-- Syntax groups
|
|
local function 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, '', '', '')
|
|
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.blue, '', '', '')
|
|
hi('Typedef', c.blue, '', '', '')
|
|
vim.cmd('hi! link Macro Define')
|
|
vim.cmd('hi! link PreCondit PreProc')
|
|
|
|
-- 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, '', '')
|
|
vim.cmd('hi! link diffAdded DiffAdd')
|
|
vim.cmd('hi! link diffRemoved DiffDelete')
|
|
vim.cmd('hi! link diffChanged DiffChange')
|
|
end
|
|
|
|
-- Treesitter
|
|
local function highlight_treesitter()
|
|
hi('TSAnnotation' , c.orange, '', '', '')
|
|
hi('TSCharacter' , c.fg , '', '', '')
|
|
hi('TSConstructor' , c.blue , '', '', '')
|
|
hi('TSConstant' , c.fg , '', '', '')
|
|
hi('TSFloat' , c.purple, '', '', '')
|
|
hi('TSNumber' , c.purple, '', '', '')
|
|
hi('TSString' , c.green , '', '', '')
|
|
hi('TSAttribute' , c.purple, '', '', '')
|
|
hi('TSBoolean' , c.blue , '', '', '')
|
|
hi('TSConstBuiltin', c.teal , '', '', '')
|
|
hi('TSConstMacro' , c.teal , '', '', '')
|
|
hi('TSError' , c.fg , c.red, '', '')
|
|
hi('TSException' , c.red , '', 'underline', '')
|
|
hi('TSField' , c.fg , '', '', '')
|
|
hi('TSFuncMacro' , c.cyan , '', '', '')
|
|
hi('TSInclude' , c.teal , '', '', '')
|
|
hi('TSLabel' , c.blue , '', '', '')
|
|
hi('TSNamespace' , c.teal , '', '', '')
|
|
hi('TSOperator' , c.blue , '', '', '')
|
|
hi('TSParameter' , c.dark_blue, '', '', '')
|
|
hi('TSParameterReference', c.dark_blue, '', '', '')
|
|
hi('TSProperty' , c.fg , '', '', '')
|
|
hi('TSPunctDelimiter', c.white2, '', '', '')
|
|
hi('TSPunctBracket', c.white2, '', '', '')
|
|
hi('TSPunctSpecial', c.white2 , '', '', '')
|
|
hi('TSStringRegex' , c.teal, '', '', '')
|
|
hi('TSStringEscape', c.grey2, '', '', '')
|
|
hi('TSSymbol' , c.purple, '', '', '')
|
|
hi('TSType' , c.blue , '', '', '')
|
|
hi('TSTypeBuiltin' , c.blue, '', '', '')
|
|
hi('TSTag' , c.teal, '', '', '')
|
|
|
|
-- 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', '')
|
|
end
|
|
|
|
-- LSP groups
|
|
local function highlight_lsp()
|
|
hi('LspDiagnosticsDefaultError', c.red, '', '', '')
|
|
hi('LspDiagnosticsSignError', c.red, '', '', '')
|
|
hi('LspDiagnosticsFloatingError', c.red, '', '', '')
|
|
hi('LspDiagnosticsVirtualTextError', c.red, '', 'italic', '')
|
|
hi('LspDiagnosticsUnderlineError', '', '', 'undercurl', c.red)
|
|
|
|
hi('LspDiagnosticsDefaultWarning', c.yellow, '', '', '')
|
|
hi('LspDiagnosticsSignWarning', c.yellow, '', '', '')
|
|
hi('LspDiagnosticsFloatingWarning', c.yellow, '', '', '')
|
|
hi('LspDiagnosticsVirtualTextWarning', c.yellow, '', 'italic', '')
|
|
hi('LspDiagnosticsUnderlineWarning', '', '', 'undercurl', c.yellow)
|
|
|
|
hi('LspDiagnosticsDefaultInformation', c.blue, '', '', '')
|
|
hi('LspDiagnosticsSignInformation', c.blue, '', '', '')
|
|
hi('LspDiagnosticsFloatingInformation', c.blue, '', '', '')
|
|
hi('LspDiagnosticsVirtualTextInformation', c.blue, '', 'italic', '')
|
|
hi('LspDiagnosticsUnderlineInformation', '', '', 'undercurl', c.blue)
|
|
|
|
hi('LspDiagnosticsDefaultHint', c.cyan, '', '', '')
|
|
hi('LspDiagnosticsSignHint', c.cyan, '', '', '')
|
|
hi('LspDiagnosticsFloatingHint', c.cyan, '', '', '')
|
|
hi('LspDiagnosticsVirtualTextHint', c.cyan, '', 'italic', '')
|
|
hi('LspDiagnosticsUnderlineHint', '', '', 'undercurl', c.cyan)
|
|
|
|
hi('LspReferenceText', c.fg, c.grey_bright, '', '')
|
|
hi('LspReferenceRead', c.fg, c.grey_bright, '', '')
|
|
hi('LspReferenceWrite', c.fg, c.grey_bright, '', '')
|
|
end
|
|
|
|
-- Specify groups for plugins
|
|
local function highlight_plugins()
|
|
-- Gitsigns
|
|
hi('GitSignsAddNr' , c.green , '', '', '')
|
|
hi('GitSignsChangeNr', c.yellow, '', '', '')
|
|
hi('GitSignsDeleteNr', c.red , '', '', '')
|
|
|
|
-- BufferLine
|
|
hi('BufferLineIndicatorSelected', c.black, '', '', '')
|
|
hi('BufferLineFill', c.black, '', '', '')
|
|
|
|
-- Dashboard
|
|
hi('DashboardHeader' , c.cyan , '', 'bold' , '')
|
|
hi('DashboardCenter' , c.blue , '', 'bold' , '')
|
|
hi('DashboardShortcut', c.grey_bright, '', 'bold,italic', '')
|
|
hi('DashboardFooter' , c.green , '', 'bold' , '')
|
|
|
|
-- NvimTree
|
|
hi('NvimTreeRootFolder' , c.teal , '', 'bold', '')
|
|
hi('NvimTreeGitDirty' , c.yellow , '', '', '')
|
|
hi('NvimTreeGitNew' , c.green , '', '', '')
|
|
hi('NvimTreeImageFile' , c.purple , '', '', '')
|
|
hi('NvimTreeExecFile' , c.green , '', '', '')
|
|
hi('NvimTreeSpecialFile' , c.dark_blue, '', 'underline', '')
|
|
hi('NvimTreeFolderName' , c.blue , '', '', '')
|
|
hi('NvimTreeEmptyFolderName', c.grey3 , '', '', '')
|
|
hi('NvimTreeFolderIcon' , c.fg , '', '', '')
|
|
hi('NvimTreeIndentMarker' , c.grey3 , '', '', '')
|
|
hi('NvimTreeNormal' , c.fg , c.black, '', '')
|
|
|
|
-- WhichKey
|
|
hi('WhichKey' , c.green , '', 'bold', '')
|
|
hi('WhichKeyGroup' , c.cyan , '', '' , '')
|
|
hi('WhichKeyDesc' , c.blue , '', '' , '')
|
|
hi('WhichKeySeperator', c.grey3 , '', '' , '')
|
|
hi('WhichKeyFloating' , c.fg , '', '' , '')
|
|
hi('WhichKeyFloat' , c.grey_bright, '', '' , '')
|
|
|
|
-- Indent Blankline
|
|
hi('IndentBlanklineChar', c.grey1, '', '', '')
|
|
hi('IndentBlanklineContextChar', c.grey1, '', '', '')
|
|
|
|
-- vim-illuminate
|
|
vim.cmd('hi! link illuminatedWord Underline')
|
|
|
|
-- 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.purple, '', 'bold', '')
|
|
end
|
|
|
|
-- Main function
|
|
function M.highlight()
|
|
-- Reset everything
|
|
vim.cmd('hi clear')
|
|
if vim.fn.exists('syntax_on') then vim.cmd('syntax reset') end
|
|
vim.o.background = 'dark'
|
|
vim.o.termguicolors = true
|
|
|
|
-- Load highlight groups
|
|
local async
|
|
async = vim.loop.new_async(vim.schedule_wrap(function ()
|
|
set_vim_termcolors()
|
|
highlight_plugins()
|
|
highlight_treesitter()
|
|
highlight_lsp()
|
|
async:close()
|
|
end))
|
|
|
|
highlight_editors()
|
|
highlight_syntax()
|
|
async:send() -- Load the rest later
|
|
end
|
|
|
|
return M
|