A semantic coloring code colorscheme for NeoVim ported from Eva-Theme
Supports both Dark and Light modes, with four styles available for each mode: Normal, Bold, Italic, and Italic Bold.
| dark | light | semantic |
|---|---|---|
| function-like names | ||
| declaration keywords | ||
| parameter name and typeparameter | ||
| primitive/builtin type names | ||
| type names, arithmetic operators | ||
| string context | ||
| variable | ||
| numbers, constants | ||
| flow control keywords, boolean literal, null literal,keyword operators | ||
| object members/properties, namespaces/modules | ||
| comment | ||
builtin variables like self, super, this, base
|
Note
For implementation downside, Eva-Theme.nvim uses file cache compilation to improve loading speed.
Use :EvaCompile command to compile new cache if necessary.
{
'sharpchen/Eva-Theme.nvim',
lazy = false,
priority = 1000,
build = ':EvaCompile'
}colo Eva-Dark " or any other variant
" colo Eva-Light
" colo Eva-Dark-Bold
" colo Eva-Light-Bold
" colo Eva-Dark-Italic
" colo Eva-Light-Italic
" colo Eva-Dark-Italic-Bold
" colo Eva-Light-Italic-Boldvim.cmd.colo 'Eva-Dark' -- or any variantSpecify colors for dark and light variants, specified values will be taken while the rest remains default.
Tip
For palette structure, see: palette.lua Or use lazydev.nvim to get completions from type annotations.
require('Eva-Theme').setup({
override_palette = {
dark = {
background = '#14161B',
-- ...
},
light = {
declarative = '#RRGGBB'
-- ...
}
}
})To customize any highlight group for each variants, you can use
function callbacks [string]: fun(variant: Eva-Theme.ThemeName, palette: Eva-Theme.Palette): vim.keyset.highlight
variant: theme name such asdark_bold,dark_italic_boldpalette: the palette overridden afteroverride_palette
require('Eva-Theme').setup({
override_highlight = {
--#region using callbacks can be more flexible
['@foo.bar.baz'] = function(variant, _)
return { fg = variant == 'dark_bold' and '#RRGGBB' or '#RRGGBB' }
end,
LspInlayHint = function(_, palette)
return { fg = palette.comment, bg = 'none' } -- use `none` to cancel the default value
end
--#endregion
},
})This port was intended to respect the upstream where operators got different colors by their usages.
While treesitter parsers generally don't classify operator into different usages, so there's no much I can do(might be approachable by treesitter query but I've not got time to learn it).
If you find ambiguity between operator and type(pointer type T* for example), I suggest customize by yourself.
For example:
require('Eva-Theme').setup({
override_palette = {
dark = {
operator = require('Eva-Theme.palette').dark_base.punctuation,
},
light = {
operator = require('Eva-Theme.palette').light_base.punctuation,
},
},
)See: CONTRIBUTING.md

