local M = {} M.setup = function() 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 = 'solarized' local colorbuddy = require('colorbuddy') local Color = colorbuddy.Color local C = colorbuddy.colors local Group = colorbuddy.Group local G = colorbuddy.groups local S = colorbuddy.styles -- Color Definitions local color_definitions = require('fs.util').colors(true) for name, rgb in pairs(color_definitions) do Color.new(name, rgb) end Color.new('fg', C.base0) Color.new('bg', C.base04) -- Standard Groups Group.new('Normal' , C.fg, C.NONE, S.NONE) -- normal text Group.new('NormalNC' , G.Normal) -- normal text in non-current windows Group.new('Comment' , C.base01, C.NONE, S.NONE) -- any comment Group.new('Constant' , C.cyan, C.NONE, S.NONE) -- any constant Group.new('String' , G.Constant) -- a string constant: "this is a string" Group.new('Character' , G.Constant) -- a character constant: 'c', '\n' Group.new('Number' , G.Constant) -- a number constant: 234, 0xff Group.new('Boolean' , G.Constant) -- a boolean constant: TRUE, false Group.new('Float' , G.Constant) -- a floating point constant: 2.3e10 Group.new('Identifier' , C.blue, C.NONE, S.NONE) Group.new('Function' , G.Identifier) Group.new('Statement' , C.yellow, C.NONE, S.NONE) -- any statement Group.new('Conditional' , G.Statement) -- if, then, else, endif, switch, etc. Group.new('Repeat' , G.Statement) -- for, do, while, etc. Group.new('Label' , G.Statement) -- case, default, etc. Group.new('Operator' , G.Statement) -- "sizeof", "+", "*", etc. Group.new('Keyword' , G.Statement) -- any other keyword Group.new('Exception' , G.Statement) -- try, catch, throw Group.new('PreProc' , C.orange, C.NONE, S.NONE) -- generic Preprocessor Group.new('Include' , G.PreProc) -- preprocessor #include Group.new('Define' , G.PreProc) -- preprocessor #define Group.new('Macro' , G.PreProc) -- same as Define Group.new('PreCondit' , G.PreProc) -- preprocessor #if, #else, #endif, etc. Group.new('Type' , C.yellow, C.NONE, S.NONE) -- int, long, char, etc. Group.new('StorageClass', G.Statement) -- static, register, volatile, etc. Group.new('Structure' , G.Statement) -- struct, union, enum, etc. Group.new('Typedef' , G.Statement) -- A typedef Group.new('Special' , C.red , C.NONE , S.NONE) -- any special symbol Group.new('SpecialChar' , G.Special) -- special character in a constant Group.new('Tag' , G.Special) -- you can use CTRL-] on this Group.new('Delimiter' , G.Special) -- character that needs attention Group.new('SpecialComment', G.Special) -- special things inside a comment Group.new('Debug' , G.Special) -- debugging statements Group.new('Underlined' , C.violet , C.NONE , S.NONE) Group.new('Ignore' , C.NONE , C.NONE , S.NONE) Group.new('Todo' , C.magenta, C.NONE , S.bold) Group.new('Error' , C.red , C.NONE , S.NONE) Group.new('Warning' , C.yellow) Group.new('Information' , C.blue) Group.new('Hint' , C.cyan) -- Additional Groups Group.new('StatusLine' , C.base1 , C.base02, S.reverse) Group.new('StatusLineNC', C.base00, C.base02, S.reverse) Group.new('Visual' , C.base01, C.bg , S.reverse) Group.new('SpecialKey' , C.base00, C.base02, S.bold) Group.new('SignColumn' , C.base0 , C.NONE , S.NONE) Group.new('Conceal' , C.blue , C.NONE , S.NONE) Group.new('Cursor' , C.bg , C.base0, S.NONE) Group.new('TermCursorNC', C.bg , C.base01) Group.link('lCursor' , G.Cursor) Group.link('TermCursor' , G.Cursor) Group.new('LineNr' , C.base01, C.NONE, S.NONE) Group.new('CursorLine' , C.NONE, C.base02, S.NONE) Group.new('CursorLineNr', C.base2, C.NONE, S.NONE) Group.new('IncSearch' , C.orange , C.NONE , S.standout) Group.new('Search' , C.yellow , C.NONE , S.reverse) Group.new('DiffAdd' , C.green , C.NONE, S.NONE) Group.new('DiffChange' , C.yellow , C.NONE, S.NONE) Group.new('DiffDelete' , C.red , C.NONE, S.NONE) Group.new('DiffText' , C.blue , C.NONE, S.NONE) Group.link('diffAdded' , G.DiffAdd) Group.link('diffRemoved', G.DiffDelete) Group.link('diffLine' , G.Identifier) Group.new('SpellBad' , C.orange, C.NONE, S.undercurl) Group.new('SpellCap' , C.violet, C.NONE, S.undercurl) Group.new('SpellRare' , C.cyan , C.NONE, S.undercurl) Group.new('SpellLocal' , C.yellow, C.NONE, S.undercurl) Group.new('ErrorMsg' , G.Error) Group.new('MoreMsg' , C.blue , C.NONE , S.NONE) Group.new('ModeMsg' , C.blue , C.NONE , S.NONE) Group.new('Question' , C.cyan , C.NONE , S.bold) Group.new('VertSplit' , C.base00 , C.NONE , S.NONE) Group.new('Title' , C.orange , C.NONE , S.bold) Group.new('VisualNOS' , C.NONE , C.base02, S.reverse) Group.new('WarningMsg' , C.red , C.NONE , S.NONE) Group.new('WildMenu' , C.base2 , C.base02, S.NONE) Group.new('Folded' , C.blue , C.bg , S.NONE) Group.new('FoldColumn' , C.blue , C.bg , S.NONE) Group.new('Directory' , C.blue , C.NONE , S.NONE) Group.new('NonText' , C.base02 , C.NONE , S.NONE) -- subtle EOL symbols Group.new('Whitespace' , C.orange , C.NONE , S.NONE) -- listchars Group.new('QuickFixLine', C.yellow , C.base02, S.NONE) -- selected quickfix item -- pum (popup menu) Group.new('Pmenu', G.Normal, C.base02, S.NONE) -- popup menu normal item Group.new('PmenuSel', C.base01, C.base2, S.reverse) -- selected item Group.new('PmenuSbar', C.base02, C.NONE, S.reverse) Group.new('PmenuThumb', C.base0, C.NONE, S.reverse) Group.new('TabLine' , C.base0 , C.base02 , S.NONE) Group.new('TabLineFill', C.base0 , C.base02) Group.new('TabLineSel' , C.yellow, C.bg) Group.new('MatchParen', C.red, C.base01, S.bold) -- vim highlighting Group.link('vimVar', G.Identifier) Group.link('vimFunc', G.Identifier) Group.link('vimUserFunc', G.Identifier) Group.link('helpSpecial', G.Special) Group.link('vimSet', G.Normal) Group.link('vimSetEqual', G.Normal) Group.new('vimCommentString', C.violet) Group.new('vimCommand', C.yellow) Group.new('vimCmdSep', C.blue, C.NONE, S.bold) Group.new('helpExample', C.base1) Group.new('helpOption', C.cyan) Group.new('helpNote', C.magenta) Group.new('helpVim', C.magenta) Group.new('helpHyperTextJump', C.blue, C.NONE, S.underline) Group.new('helpHyperTextEntry', C.green) Group.new('vimIsCommand', C.base00) Group.new('vimSynMtchOpt', C.yellow) Group.new('vimSynType', C.cyan) Group.new('vimHiLink', C.blue) Group.new('vimGroup', C.blue, C.NONE, S.underline + S.bold) -- git highlighting Group.new('gitcommitSummary' , C.green) Group.link('gitcommitComment' , G.Comment) Group.link('gitcommitUntracked' , G.gitcommitComment) Group.link('gitcommitDiscarded' , G.gitcommitComment) Group.link('gitcommitSelected' , G.gitcommitComment) Group.link('gitcommitOnBranch' , G.gitcommitComment) Group.new('gitcommitBranch' , C.blue , C.base02, S.NONE) Group.link('gitcommitNoBranch' , G.gitcommitBranch) Group.new('gitcommitHeader' , C.base01) Group.new('gitcommitFile' , C.base0) Group.new('gitcommitSelectedType' , C.green) Group.link('gitcommitSelectedFile' , G.gitcommitSelectedType) Group.link('gitcommitSelectedArrow' , G.gitCommitSelectedFile) Group.new('gitcommitDiscardedType' , C.orange) Group.link('gitcommitDiscardedFile' , G.gitcommitDiscardedType) Group.link('gitcommitDiscardedArrow', G.gitCommitDiscardedFile) Group.new('gitcommitUntrackedFile' , C.cyan) Group.new('gitcommitUnmerged' , C.yellow, C.NONE, S.NONE) Group.new('gitcommitUnmergedFile' , C.red) Group.link('gitcommitUnmergedArrow' , G.gitCommitUnmergedFile) Group.new('GitGutterAdd', C.green) Group.new('GitGutterChange', C.yellow) Group.new('GitGutterDelete', C.red) Group.new('GitGutterChangeDelete', C.red) Group.new('GitSignsAddLn', C.green) Group.new('GitSignsAddNr', C.green) Group.new('GitSignsChangeLn', C.yellow) Group.new('GitSignsChangeNr', C.yellow) Group.new('GitSignsDeleteLn', C.red) Group.new('GitSignsDeleteNr', C.red) Group.link('GitSignsCurrentLineBlame', G.Comment) -- Markdown Group.new('markdownH1' , C.yellow) Group.link('markdownH2' , G.markdownH1) Group.link('markdownH3' , G.markdownH1) Group.link('markdownH4' , G.markdownH1) Group.link('markdownH5' , G.markdownH1) Group.link('markdownH6' , G.markdownH1) Group.new('markdownHeadingRule' , C.yellow, C.none, S.bold) Group.link('markdownHeadingDelimiter' , G.markdownHeadingRule) Group.link('markdownH1Delimiter' , G.markdownHeadingDelimiter) Group.link('markdownH2Delimiter' , G.markdownHeadingDelimiter) Group.link('markdownH3Delimiter' , G.markdownHeadingDelimiter) Group.link('markdownH4Delimiter' , G.markdownHeadingDelimiter) Group.link('markdownH5Delimiter' , G.markdownHeadingDelimiter) Group.link('markdownH6Delimiter' , G.markdownHeadingDelimiter) Group.new('markdownListMarker' , C.base2) Group.link('markdownOrderedListMarker' , G.markdownListMarker) Group.link('markdownBlockquote' , G.markdownListMarker) Group.link('markdownRule' , G.Comment) Group.new('markdownItalic' , C.base1, C.none, S.italic) Group.new('markdownBold' , C.base1, C.none, S.bold) Group.new('markdownBoldItalic' , C.base1, C.none, S.bold + S.italic) Group.new('markdownCode' , C.orange) Group.link('markdownCodeBlock' , G.markdownCode) Group.link('markdownItalicDelimiter' , G.Comment) Group.link('markdownBoldDelimiter' , G.Comment) Group.link('markdownBoldItalicDelimiter', G.Comment) Group.link('markdownCodeDelimiter' , G.Comment) Group.new('markdownFootnote' , C.cyan) Group.link('markdownFootnoteDefinition' , G.markdownFootnote) Group.new('markdownLinkText' , C.blue) Group.link('markdownId' , G.Comment) Group.link('markdownUrl' , G.Comment) Group.new('markdownUrlTitle' , C.cyan) Group.link('markdownLinkTextDelimiter' , G.Comment) Group.link('markdownIdDelimiter' , G.Comment) Group.link('markdownLinkDelimiter' , G.Comment) Group.link('markdownUrlTitleDelimiter' , G.Comment) Group.link('markdownIdDeclaration' , G.markdownLinkText) Group.link('markdownEscape' , G.Special) Group.link('markdownError' , G.Error) -- Plugin: 'ntpeters/vim-better-whitespace' Group.new('ExtraWhitespace', C.orange, C.orange) -- trailing whitespace -- Plugin: 'lukas-reineke/indent-blankline.nvim' Group.new('IndentBlanklineChar', C.base02, C.NONE) -- indentation guides -- Plugin: 'lukas-reineke/virt-column.nvim' Group.new('VirtColumn' , C.base02, C.NONE, S.NONE) -- virtual column Group.new('ColorColumn', C.NONE , C.NONE, S.NONE) -- otherwise this is visible behind VirtColumn -- Plugin: 'kyazdani42/nvim-tree.lua' Group.new('NvimTreeSpecialFile' , C.base2 , C.NONE, S.NONE) Group.new('NvimTreeIndentMarker', C.base01, C.NONE, S.NONE) Group.new('NvimTreeGitStaged' , C.green , C.NONE, S.NONE) Group.new('NvimTreeGitRenamed' , C.yellow, C.NONE, S.NONE) Group.new('NvimTreeGitNew' , C.yellow, C.NONE, S.NONE) Group.new('NvimTreeGitDirty' , C.yellow, C.NONE, S.NONE) Group.new('NvimTreeGitDeleted' , C.orange, C.NONE, S.NONE) Group.new('NvimTreeGitMerge' , C.red , C.NONE, S.NONE) -- Plugin: 'nvim-telescope/telescope.nvim' Group.new('TelescopeBorder' , C.base01, C.NONE, S.NONE) Group.new('TelescopePromptBorder' , C.base1 , C.NONE, S.NONE) Group.new('TelescopeTitle' , C.base1 , C.NONE, S.NONE) Group.new('TelescopePromptPrefix' , C.red , C.NONE, S.NONE) Group.new('TelescopePromptCounter' , C.base1 , C.NONE, S.NONE) Group.new('TelescopeMatching' , C.red , C.NONE, S.NONE) Group.new('TelescopeSelection' , C.base2 , C.NONE, S.NONE) Group.new('TelescopeMultiSelection', C.blue , C.NONE, S.NONE) Group.new('TelescopeMultiIcon' , C.blue , C.NONE, S.NONE) end return M