KansΕ is an elegant evolution of the original Kanagawa theme.
A dark theme that invites focus, not attention.
- π Extensive support for
TreeSittersyntax highlighting - π Compatible with popular plugins out of the box
- β‘ Compilation to lua byte code for fast startup times
- π¨ Four beautiful theme variants to match your mood and environment
- π Saturated mode for enhanced syntax highlighting visibility
- ποΈ WCAG 2.1 AA compliant
Download with your favorite package manager.
-- Using Lazy
{
"webhooked/kanso.nvim",
lazy = false,
priority = 1000,
}
-- Using Packer
use "webhooked/kanso.nvim"- Terminal with truecolor support
- Terminal with undercurl support (optional)
As simple as writing:
colorscheme kansoOr in Lua:
vim.cmd("colorscheme kanso")There is no need to call setup if you are ok with the defaults.
-- Default options:
require('kanso').setup({
bold = true, -- enable bold fonts
italics = true, -- enable italics
compile = false, -- enable compiling the colorscheme
undercurl = true, -- enable undercurls
commentStyle = { italic = true },
functionStyle = {},
keywordStyle = { italic = true},
statementStyle = {},
typeStyle = {},
transparent = false, -- do not set background color
dimInactive = false, -- dim inactive window `:h hl-NormalNC`
terminalColors = true, -- define vim.g.terminal_color_{0,17}
colors = { -- add/modify theme and palette colors
palette = {},
theme = { zen = {}, pearl = {}, ink = {}, all = {} },
},
overrides = function(colors) -- add/modify highlights
return {}
end,
background = { -- map the value of 'background' option to a theme
dark = "ink", -- try "zen", "mist" or "pearl" !
light = "ink" -- try "zen", "mist" or "pearl" !
},
foreground = "default", -- "default" or "saturated" (can also be a table like background)
})
-- setup must be called before loading
vim.cmd("colorscheme kanso")π‘ Important Notes
Compilation: If you enable compilation, make sure to run :KansoCompile command every time you make changes to your config.
" 1. Modify your config
" 2. Restart nvim
" 3. Run this command:
:KansoCompileOptions: KansΕ adjusts to the value of some options. Make sure that the options 'laststatus' and 'cmdheight' are set before calling setup.
KansΕ comes in four beautiful variants:
Zen(Dark)Ink(Dark)Mist(Dark)Pearl(Light)
Deep & rich dark theme for focused coding.
Balanced theme with elegant colors.
Soft & muted dark theme with gentle colors.
Light theme for daytime productivity.
π Switching Between Themes
Themes can be changed in three ways:
- Setting
config.themeto the desired theme. - Using the
backgroundoption: Any change to the value ofvim.o.backgroundwill select the theme mapped byconfig.background. - Loading the colorscheme directly with:
vim.cmd("colorscheme kanso-zen")
vim.cmd("colorscheme kanso-ink")
vim.cmd("colorscheme kanso-mist")
vim.cmd("colorscheme kanso-pearl")or
require("kanso").load("zen")KansΕ now supports a foreground saturation option that enhances the saturation of syntax highlighting colors while keeping the same background colors. This is useful for improving visibility in certain lighting conditions or personal preference.
π Using Saturated Mode
The foreground option can be configured per background mode:
require('kanso').setup({
foreground = {
dark = "default", -- Use default colors in dark mode
light = "saturated" -- Use higher saturation in light mode
},
})When set to "saturated", syntax highlighting colors will have increased saturation making them stand out more against the background:
- Zen, Ink, and Mist themes: 20% more vibrant colors
- Pearl theme: 40% more vibrant colors
This is particularly useful:
- In bright environments where you need more color distinction
- For users who prefer more vibrant syntax highlighting
- When using the light themes where increased saturation can be beneficial
The saturation adjustment only affects syntax highlighting colors (strings, keywords, functions, etc.) and does not change UI elements or background colors.
In KansΕ, there are two kinds of colors: PaletteColors and ThemeColors;
PaletteColors are defined directly as RGB Hex strings, and have arbitrary names
that recall their actual color. Conversely, ThemeColors are named and grouped semantically
on the basis of their actual function.
In short, a palette defines all the available colors, while a theme maps the PaletteColors
to specific ThemeColors and the same palette color may be assigned to multiple theme colors.
π Color Customization Example
You can change both theme or palette colors using config.colors.
All the palette color names can be found here,
while their usage by each theme can be found here.
require('kanso').setup({
...,
colors = {
palette = {
-- change all usages of these colors
zen0 = "#000000",
fujiWhite = "#FFFFFF",
},
theme = {
-- change specific usages for a certain theme, or for all of them
zen = {
ui = {
float = {
bg = "none",
},
},
},
ink = {
syn = {
parameter = "yellow",
},
},
all = {
ui = {
cursor_line_nr_active_foreground = "#C4746E"
}
}
}
},
...
})π§ Highlight Group Overrides
You can also conveniently add/modify any hlgroups using the config.overrides option, allowing you to customize the looks of specific built-in elements, or any other external plugins that provides hlgroups. (See :help highlight for more information on hlgroups.)
Supported keywords are the same for :h nvim_set_hl {val} parameter.
require('kanso').setup({
...,
overrides = function(colors)
return {
-- Assign a static color to strings
String = { fg = colors.palette.carpYellow, italic = config.italics },
-- theme colors will update dynamically when you change theme!
SomePluginHl = { fg = colors.theme.syn.type, bold = true },
}
end,
...
})-- Get the colors for the current theme
local colors = require("kanso.colors").setup()
local palette_colors = colors.palette
local theme_colors = colors.theme
-- Get the colors for a specific theme
local zen_colors = require("kanso.colors").setup({ theme = 'zen' })The theme is inspired by the Kanagawa theme.
- rebelot for the original Kanagawa Neovim theme