Ashen.nvim
A warm, muted colorscheme for Neovim featuring red, orange, plenty of grayscale. Mirror of https://codeberg.org/ficd/ashen.nvim
Install / Use
/learn @ficd0/Ashen.nvimREADME
Ashen
Coding is already hard on the brain, so it should at least be easy on the eyes.
Ashen is a warm, muted colorscheme that evokes the feeling of embers sizzling out in an old fire pit. It features red & orange tones, plenty of grayscale, and hints of teal.

This repository only contains the implementation of Ashen for Neovim. It's hosted on Codeberg and mirrored on GitHub for your convenience. Please check the main monorepo on Codeberg for implementations of Ashen for other software.
Note: This project is in maintenance mode because I no longer use Neovim. I am happy to accept contributions.
Contents
<!--toc:start--> <!--toc:end-->Features
- Warm, cozy, muted palette that's easy on the eyes.
- Incredibly fast load time.
- Optional transparency.
- Palette and highlight group overriding.
- Customizable terminal palette.
- Extensive plugin support.
- Extra themes for other software.
Installation
Using lazy.nvim:
{
"ficcdaf/ashen.nvim",
-- optional but recommended,
-- pin to the latest stable release:
tag = "*",
lazy = false,
priority = 1000,
-- configuration is optional!
opts = {
-- your settings here
},
}
You can load Ashen anywhere in your Neovim configuration. You only need to
call setup if you want to change any settings!
vim.cmd("colorscheme ashen")
-- You may call the load function as well
-- Do NOT call them both; they both do
-- the same thing!
require("ashen").load()
If you're using LazyVim, I recommend the following:
return {
{ "ficcdaf/ashen.nvim" },
{
"LazyVim/LazyVim",
opts = {
colorscheme = "ashen",
},
}
}
You can also configure lazy.nvim to use Ashen while installing plugins:
require("lazy").setup({
install = {
colorscheme = {"ashen"}
}
})
Plugins
Many plugins are already "supported" because they use standard Neovim highlight groups. However, some plugins require explicit support from color schemes. Additionally, some plugins may require extra setup to work with Ashen. Please see Plugin Configuration for more details.
| Plugin | Requires Configuration | | -------------------- | ---------------------- | | blink.cmp | | | nvim-cmp | | | flash.nvim | | | lualine | X | | mini.icons | | | trailblazer.nvim | X | | obsidian.nvim | | | oil.nvim | | | render-markdown.nvim | | | telescope.nvim | | | minimap.vim | | | neogit | | | FzfLua | X | | fzf.vim | | | org-bullets.nvim | | | lazy.nvim | |
Configuration
<!-- prettier-ignore-start --><!-- prettier-ignore-end -->[!WARNING] If you choose to set any options, please note that
setuponly sets up the configuration and does not load the theme! You must callcolorscheme ashenorrequire("ashen").load()aftersetup!
You can pass an options table to the setup function to configure Ashen,
the same you would any other plugin. If you use lazy.nvim, you can set
options as shown in installation!
require("ashen").setup({
-- your settings here
})
-- theme must be loaded *after* setup!
vim.cmd("colorscheme ashen")
The default settings will work for most people. However, extensive configuration options are provided.
<!-- prettier-ignore-start --><!-- prettier-ignore-end -->[!TIP] If you are not changing any of the defaults, avoid calling
setupor setting anyopts-- your startup time will be faster!
All available settings, along with their default values, are listed below. User provided settings will be merged with the defaults.
<details> <summary>Available Settings</summary>-- default settings
{
-- toggle text style options
---@type table<StyleName, boolean>
style = {},
-- toggle group specific settings
style_presets = {
bold_functions = false,
italic_comments = false,
},
--- override palette colors
---@type Palette
---@field [ColorName] HexCode
colors = {},
-- override highlight groups
hl = {
---Overwrite; omitted fields are cleared
---@type HighlightMap
force_override = {},
---Merge fields with defaults
---@type HighlightMap
merge_override = {},
---Link Highlight1 -> Highlight2
---Overrides all default links
---@type table<HighlightName, HighlightName>
link = {},
},
-- use transparent background
-- (requires terminal support)
transparent = false,
-- force clear other highlights
-- even if no other theme is set
force_hi_clear = false,
-- set built-in terminal colors
terminal = {
-- if disabled, Neovim terminal will
-- use your terminal emulator's theme
enabled = true,
---override terminal palette
---@type AnsiMap
colors = {},
},
-- configure plugin integrations
plugins = {
-- automatically load plugin integrations
autoload = true,
---if autoload: plugins to SKIP
---if not autoload: plugins to LOAD
---@type string[]
override = {},
},
}
</details>
Style
You can disable all uses of a certain style with the following setting:
opts = {
style = {
bold = false,
italic = false,
-- etc...
},
}
Style Presets
The following presets are available. They are off by default, and you may choose to enable them in your configuration:
opts = {
style_presets = {
bold_functions = true,
italic_comments = true,
},
}
Palette Override
<details> <summary>Click to expand</summary>You can override any color in Ashen's palette, or set new colors entirely.
The colors setting accepts a table of ColorName = HexCode pairs, where
they are both strings, with ColorName corresponding to an Ashen color,
and HexCode being a # prefixed hexadecimal color code. For an list of
available color names, please see colors.lua.
Please see the following example:
opts = {
colors = {
background = "#000000",
red_ember = "#933737"
},
}
</details>
<!-- prettier-ignore-start -->
<!-- prettier-ignore-end -->[!TIP] Made a palette you're proud of? It could become Ashen's next "theme variant" -- don't be afraid to open a feature request for it!
Highlight Override
<details> <summary>Click to expand</summary>You can find a detailed explanation of the HighlightMap type below.
<details> <summary>Explanation of HighlightMap type</summary>---@alias HighlightSpec [FgHexCode?, BgHexCode?, Style?]
-- The colors *must* be in this ^^^ order. If you want
-- to set a background but no foreground, you MUST pass
-- nil for the FgHexCode!
-- example:
{ "#FFFFFF" } -- set only foreground
{ "#FFFFFF", "#000000" } -- set foreground and background
{ nil, "#000000" } -- set only background
-- Please see `:h nvim_set_hl()` -> {val}
-- for the possible style table options.
---@alias Style table<string, boolean|string|integer>
-- example:
{ bold = true, underline = true }
-- You may pass a style table as the LAST element
-- of a HighlightSpec.
{ "#FFFFFF", "#000000", { bold = true, underline = true } }
-- The style table can be the only element, too.
{ { bold = true, underline = true } }
-- Or you may pass a "normalized" table as well:
{ fg = "#FFFFFF", bold = true }
---@alias HighlightMap table<HighlightName, HighlightSpec>
-- Example of a HighlightMap:
{
Normal = { "#FFFFFF", "#000000", { bold = true, underline = true } },
["@function.macro"] = { "#B14242" },
}
</details>
Users can override Ashen's highlight group definitions, or set new ones
entirely. There are two options under the hl setting: force_override
and merge_override.
The former will completely overwrite the given highlight group; existing
properties are not preserved. An empty table {} means Ashen will
clear that highlight group.
The latter will merge properties: it will override only the properties you specify, and keep non-conflicting Ashen defaults.
You can also link arbitrary highlight groups. Links defined in hl.link
take priority over all other links set by Ashen. hl.link must be a
key-value table in which the key is the link's origin and the value is
its target.
Note that both hexadecimal color codes and Ashen color names are valid inputs for color parameters.
-- full example
hl = {
-- overwrite every field
---@type HighlightMap
force_override =
