oskarnurm/koda.nvim

github github
colorscheme
stars 238
issues 3
subscribers 1
forks 9
CREATED

UPDATED


Previews

Features

  • Minimalist design: easy on the eyes while providing a clear semantic distinction.
  • Fast: caches the theme for blazingly fast startup times.
  • Lean: skips highlights for plugins that aren't installed.
  • Supports stable and the latest Neovim 0.12 features.

Please open an issue if you notice any problems, or if a plugin you think should have explicit support is missing from the list.

Installation

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,
}

vim.pack:

vim.pack.add({
  "https://github.com/oskarnurm/koda.nvim",
})
-- require("koda").setup({ transparent = true })
vim.cmd("colorscheme koda")

Configuration

[!IMPORTANT] 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 supports `lazy.nvim`, `mini.deps` and `vim.pack`
    -- Disable this to load ALL available plugin highlights
    auto = true,

    cache = true, -- cache 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
    -- The color key names (e.g., 'func') must match the built-in ones 
    colors = {
      -- func = "#4078F2", -- changes the color of functions
      -- keyword = "#A627A4", -- changes the color of keywords
      -- char = "#f2a4db", -- make characters pop out more by adding a different color
      -- 
      -- more can be found in: lua/koda/palette/
    },

    -- 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,
})

vim.cmd("colorscheme koda") -- will dynamically switch between `light` and `dark` variants based on `vim.o.background`
-- vim.cmd("colorscheme koda-dark")
-- vim.cmd("colorscheme koda-light")
-- vim.cmd("colorscheme koda-moss")
-- vim.cmd("colorscheme koda-glade")

API

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() -- returns the active palette (dark or light) with any of your 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 theme

Language support

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.

Extras

Extra color configs for WezTerm, Ghostty, Lazygit, fzf and others can be found in extras. To use them, refer to their respective documentation.