This repository has been archived on 2022-08-21. You can view files and clone it, but cannot push or open issues or pull requests.
dotfiles/home/.config/nvim/lua/colors/nord.lua

349 lines
13 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.cyan, '', '', '')
hi('BufferLineFill', c.grey1, c.grey1, '', '')
-- 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', '')
-- 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, '', '', '')
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