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_opacityfrom 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.