Using lazy.nvim:
{
"oskarnurm/koda.nvim",
lazy = false, -- make sure we load this during startup if it is your main colorscheme
priority = 1000, -- make sure to load this before all the other start plugins
config = function()
-- require("koda").setup({ transparent = true })
vim.cmd("colorscheme koda")
end,
}Using vim.pack:
vim.pack.add({
"https://github.com/oskarnurm/koda.nvim",
})
-- require("koda").setup({ transparent = true })
vim.cmd("colorscheme koda")By default,
kodawill automatically switch between dark and light variants based on yourvim.o.backgroundsetting.
vimd.cmd("colorscheme koda") -- auto-switches based on background" Explicitly set a variant:
colorscheme koda-dark
colorscheme koda-light
colorscheme koda-moss
colorscheme koda-gladeImportant
Configure setup BEFORE calling vim.cmd("colorscheme koda").
require("koda").setup({
transparent = false, -- enable for transparent backgrounds
-- Automatically enable highlights only for plugins installed by your plugin manager
-- Currently only supports `lazy.nvim`, `mini.deps` and `vim.pack`
auto = true, -- disable to load ALL available plugin highlights
cache = true, -- caches the theme for better performance
-- Style to be applied to different syntax groups
-- Common use case would be to set either `italic = true` or `bold = true` for a desired group
-- See `:help nvim_set_hl` for more valid values
styles = {
functions = { bold = true },
keywords = {},
comments = {},
strings = {},
constants = {}, -- includes numbers, booleans
},
-- Override colors for the active variant
-- Available keys (e.g., 'func') can be found in lua/koda/palette/
colors = {
-- func = "#4078F2",
-- keyword = "#A627A4",
},
-- You can modify or extend highlight groups using the `on_highlights` configuration option
-- Any changes made take effect when highlights are applied
on_highlights = function(hl, c)
-- hl.LineNr = { fg = c.info } -- change a specific highlight to use a different palette color
-- hl.Comment = { fg = c.emphasis, italic = true } -- modify a syntax group (add bold, italic, etc)
-- hl.RainbowDelimiterRed = { fg = "#fb2b2b" } -- add a custom highlight group for another plugin
end,
})
Koda exposes a few utility functions to allow users to integrate the theme with other parts of their configuration.
local koda = require("koda")
local colors = koda.get_palette("dark") -- returns the colors for the given theme with user-overrides applied
some_plugin.error = koda.blend(colors.danger, colors.bg, 0.3) -- blends two colors together. Useful for creating custom shades that match the themeYou can also manually clear Koda's cache and reload the highlights by running:
:KodaFetch- blink.cmp
- dashboard-nvim
- flash.nvim
- fzf-lua
- gitsigns.nvim
- mason.nvim
- mini.pick
- mini.statusline
- mini.icons
- mini.jump2d
- modes.nvim
- neo-tree.nvim
- oil.nvim
- rainbow-delimiters.nvim
- render-markdown.nvim
- snacks.dashboard
- snacks.input
- snacks.notifier
- snacks.picker
- telescope.nvim
- treesitter
- trouble.nvim
Most languages have sensible defaults thanks to Neovim's built-in queries, so I've opted not to add anything language-specific to keep the footprint smaller. Feel free to open an issue.
Extra color configs for WezTerm, Ghostty, Lazygit, fzf and others can be found in extras. To use them, refer to their respective documentation.



