GitHub
← Back to home
Plugins·Active

xeno.nvim

Neovim colorscheme generator with light/dark mode and plugin support.

NeovimLuaColorscheme

Overview

xeno.nvim generates complete Neovim colorschemes from three seeds — background, accent, and an optional foreground. The foreground defaults to the background seed's hue and chroma, so a single background + accent pair is enough to produce a coherent theme across every highlight group.

How it works

Pass your seeds to require('xeno').theme() and set the colorscheme:

require('xeno').theme('my-theme', {
  background = '#1E1E1E',
  accent = '#8CBE8C',
})
vim.cmd('colorscheme my-theme')

xeno derives a full 50–950 color scale from each seed and maps them across syntax, UI, diagnostics, and plugin highlight groups automatically.

Plugin support

Built-in theming for 20+ plugins including Telescope, nvim-tree, and bufferline. Each plugin exposes high-level options so you can tune things like selected_bg or border without touching individual highlight groups:

highlights = {
  plugins = {
    ["nvim-telescope/telescope.nvim"] = {
      bg = "@background.950",
      border = "@accent.500",
    },
  },
}

What I learned

Generating perceptually consistent color scales from arbitrary hex seeds required working in OKLCH rather than HSL. The trickiest part was deriving a foreground that felt natural — not just a lightened version of the background, but something with the same hue character that could shift properly between light and dark mode.

Stack

  • Language: Lua
  • Color space: OKLCH
  • Targets: Neovim 0.9+