← All posts

imli.nvim: A Warm Colorscheme for Neovim

If you have spent any time in the Neovim community, you know the cycle. You install a colorscheme, it looks great for a day, and then something feels off. The comments are too loud. The active tab looks exactly like the inactive ones. The light theme is an afterthought. So you install another one. And another. I have been through this loop more times than I can count, and every time I end up tweaking someone else’s colorscheme until it is barely theirs anymore.

So I finally did what every Neovim user threatens to do at some point. I made my own. It is called imli.nvim, a warm, ember-and-coffee colorscheme for Neovim with both a dark and a light variant.

Why “warm”?

Most dark themes live in the blue-gray space. They are fine. They are also everywhere. I wanted something that felt like a desk lamp at midnight rather than a server room at 3 AM. So the dark variant sits on a deep blue-black base (#0b1418) with warm foreground tones (#e8e0d4), and the accent colors are ember oranges, coffee browns, and muted golds. The light variant is the same idea with light and dark swapped: a cream-paper background (#e7dfd2) with warm ink (#4a4238).

The goal was simple: something easy on the eyes during long writing and coding sessions, with enough contrast that I am not squinting at my own code at 2 AM.

What is inside

  • Two hand-tuned variants. Dark and light, switchable with vim.o.background
  • Treesitter-first. Full coverage for the common captures, plus LSP semantic token overrides where they matter
  • UI consistency. Statusline, tabline, popups, diagnostics, which-key, mini.icons, and render-markdown all get explicit colors
  • A proper tabline. The active tab gets a distinct background (#132631) so you always know where you are. This was the last fix before release, and honestly it should have been the first thing I checked
  • Configurable comments. Adjust comment opacity and italics to taste (comment_opacity from 0.1 to 1.0)
  • Per-filetype overrides. Winhighlight-based, so no glitches
  • Terminal colors. All 16 slots match the palette

Installing it

The colorscheme needs Neovim 0.9+ (it uses nvim_set_hl). If you are on 0.12+, you can use the new native vim.pack package manager. No plugin manager required:

vim.pack.add("https://github.com/hitaishi2222/imli-nvim")

require("imli").setup()
vim.cmd("colorscheme imli")

That is it. It clones on first use, tracks everything in a lockfile, and you can update later with vim.pack.update().

If you are on lazy.nvim:

{
  "hitaishi2222/imli-nvim",
  lazy = false,
  priority = 1000,
  config = function()
    require("imli").setup()
    vim.cmd("colorscheme imli")
  end,
}

It also works with packer.nvim and vim-plug. Full instructions, the complete palette tables, and a banner image are in the README.

Configuration

Everything is optional. The defaults are:

require("imli").setup({
  italic_comments = true,   -- italicize comments
  comment_opacity  = 1.0,   -- 0.1 (barely visible) .. 1.0 (full color)
  filetypes        = nil,   -- nil = built-in python/lua overrides
})

If the comments are too loud for you, drop comment_opacity to something like 0.7. If you want them italic, keep italic_comments = true. If you want your own per-filetype overrides, pass a table to filetypes. The format is documented in the README.

Why I released it

Honestly? Because I was tired of maintaining a fork of someone else’s colorsheme in my dotfiles. Every update was a small negotiation. This way, the source of truth is the repo, the lockfile pins the version, and I can update with one command.

But also because I think a colorscheme is one of the most personal parts of a developer’s setup. It is the thing you look at for hours every day. If mine makes even one person’s late-night coding session a little warmer, that is enough for me.

It is open source (MIT), it is on GitHub, and issues and pull requests are welcome. If something looks off in your favorite filetype, tell me. That is how these things get better.

Happy hacking.