cwal.nvim is a dynamic Neovim colorscheme that reads your generated cwal palette and applies it across core UI, syntax, Treesitter, diagnostics, completion popups, Bufferline, and Lualine.
For now, only dark mode is supported.
cwal.nvim.mp4
- Uses your live
cwalcolors fromcolors-nvim.lua - Automatically reloads highlights when your
cwal.inichanges - Extensive highlight coverage for:
- Core editor/UI groups
- Vim syntax groups
- Treesitter and semantic token groups
- LSP diagnostics (
Diagnostic*+ legacyLspDiagnostics*links) - Popup/completion UI (
Pmenu*,Cmp*,BlinkCmp*) - Bufferline (
BufferLine*) - Lualine theme (
theme = "cwal")
- Neovim 0.10+
cwal- A working
cwalsetup that generates:~/.config/cwal/cwal.inicolors-nvim.luainside your configuredout_dir
Install from the AUR:
paru -S cwal-gitor
yay -S cwal-gitcwal.nvim reads out_dir from your cwal.ini, then loads:
<out_dir>/colors-nvim.lua
{
"nitinbhat972/cwal.nvim",
priority = 1000,
config = function()
require("cwal").setup() -- stores opts only (see Configuration); :colorscheme applies
vim.cmd.colorscheme("cwal")
end,
}vim.pack.add({
{ src = "https://github.com/nitinbhat972/cwal.nvim" },
})
vim.cmd.colorscheme("cwal")Set the colorscheme:
:colorscheme cwalor in Lua:
vim.cmd.colorscheme("cwal")require("lualine").setup({
options = {
theme = "cwal",
},
})The colorscheme defines most highlight groups, ensuring compatibility with the majority of plugins.
Note: Bufferline highlight groups are not refreshed automatically on colorscheme change and may require a Neovim restart.
cwal.nvim watches:
<out_dir>/colors-nvim.lua
On change, it:
- Reloads palette values from
colors-nvim.lua - Reapplies all highlight groups
- Reloads Lualine (if its theme is set to
"cwal") - Triggers the
CwalReloadUserevent
You can hook into the reload process using the CwalReload User event. This is useful for refreshing other plugins or custom highlights that depend on the palette.
vim.api.nvim_create_autocmd("User", {
pattern = "CwalReload",
callback = function()
-- Your custom logic here, e.g., refreshing a custom statusline or plugin
print("Cwal colors have been reloaded!")
end,
})- Check
out_dirin yourcwal.ini - Confirm
<out_dir>/colors-nvim.luaexists
require("cwal").setup({
transparent = false,
styles = {
comments = { italic = true },
keywords = { italic = true },
functions = {},
variables = {},
sidebars = "dark",
floats = "dark",
},
overrides = {},
})Terminal colors are always applied from the palette. There is no flag for them.
Precedence order: palette, styles, transparent, sidebars/floats, terminal, overrides.
setup() stores opts only and never applies the colorscheme; :colorscheme cwal applies using the stored opts. Calling setup() with no arguments preserves the stored opts.
Reload persistence: the watcher keeps your opts. When colors-nvim.lua changes, the palette reloads and the stored opts are re-applied.
| Value | Background |
|---|---|
dark |
current palette bgs |
normal |
Normal background |
transparent |
none |
normal intentionally differs from today's distinct sidebar/float bgs (tokyonight parity).
Licensed under GNU GPL v3.0 — always free and open-source.
Star the project on GitHub if you find it useful!