Skip to content

A warm, muted colorscheme for Neovim featuring red, orange, plenty of grayscale, and hints of teal.

License

Notifications You must be signed in to change notification settings

ficcdaf/ashen.nvim

Repository files navigation

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.

Lua, Python, and Go code in the Ashen theme.

Warning

This theme is still in early development: the palette and theming may be subject to change.

Contents

Features

  • Warm, cozy palette that's easy on the eyes.
  • Clear differentiation of errors and warnings.
  • Supports a number of plugins.
  • Fast load time.
  • Actively developed.

Installation

Using lazy.nvim:

{
  "ficcdaf/ashen.nvim",
  lazy = false,
  priority = 1000,
  -- configuration is optional!
  opts = {
    -- your settings here
  },
}

You can load Ashen anywhere in your Neovim configuration:

vim.cmd("colorscheme ashen")
-- You may call the load function as well
require("ashen").load()

If you're using LazyVim, I recommend the following:

return {
  { "ficcdaf/ashen.nvim" },
  -- Configure LazyVim to load Ashen
  {
    "LazyVim/LazyVim",
    opts = {
      colorscheme = "ashen",
    },
  }
}

Plugins

Warning

The following may be incomplete! Please check lua/ashen/plugins for an up-to-date list of supported plugins. I will endeavour to update this README frequently.

Many plugins are already "supported" because they use standard Neovim highlight groups. However, some plugins require bespoke support. Additionally, some plugins may require extra setup to look good with Ashen. Please see Plugin Configuration for more details.

Ashen explicitly supports the following plugins:

  • blink.cmp
  • nvim-cmp
  • flash.nvim
  • lualine
  • mini.icons
  • trailblazer.nvim
  • obsidian.nvim
  • oil.nvim
  • render-markdown.nvim
  • telescope.nvim
  • minimap.vim

Configuration

Warning

If you choose to set any options, please note that setup only sets up the configuration and does not load the theme! You must call colorscheme ashen or require("ashen").load() after setup!

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 following default settings are provided. Any settings not self-explanatory will be expanded on below. Any provided settings will be merged with the defaults.

{
  -- override palette, see below
  ---@type Palette
  ---@field [ColorName] HexCode
  colors = {},
  -- force clear other highlights
  -- even if no other theme is set
  -- (useful for debugging)
  force_hi_clear = false,
  -- enable termguicolors on load (recommended)
  termguicolors = true,
}

Palette Override

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:

{
  colors = {
    background = "#000000",
    red_ember = "#933737"
  },
}

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

Not yet implemented, but coming soon to an Ashen installation near you!

Plugin Configuration

Lualine

Ashen comes with a preconfigured Lualine theme that includes a word counter for Markdown, Text, and Latex files. Optionally, noice.nvim is used to indicate Macro recording status, and pomo.nvim is supported. The following is an example of how to configure Lualine to use Ashen:

return {
  "nvim-lualine/lualine.nvim",
  -- ensure Ashen is loaded first
  dependencies = {
    "ficcdaf/ashen.nvim",
  },
  opts = function()
    local ashen = require("ashen.plugins.lualine").lualine_opts
    -- you can set any other options
    -- expected by lualine, since this
    -- table will be passed directly to `setup`
    ashen.extensions = { "lazy", "fzf" }
    return ashen
  end,
}

I am working on improving the word counter and releasing it as a separate plugin. When that happens, Ashen will be updated to support it out of the box.

Trailblazer.nvim

Trailblazer tends to overwrite the highlight groups set by Ashen. Therefore, you may need to invoke Ashen's Trailblazer setup immediately after loading Trailblazer. Please see the following example:

return {
  "LeonHeidelbach/trailblazer.nvim",
  event = "UIEnter",
  -- ensure Ashen is loaded first
  dependencies = {
    "ficcdaf/ashen.nvim",
  },
  config = function()
    require("trailblazer").setup({
      -- your Trailblazer setup here
    })
    -- This ensures Ashen's HL groups are set up
    -- AFTER Trailblazer sets its own.
    require("ashen.plugins").setup("trailblazer")
  end,
}

Render-markdown.nvim

Ashen will support render-markdown OOTB with no additional configuration. You may optionally consider including the following icons in your setup. Note they may not render properly in all browsers.

-- as part of render-markdown.nvim setup
opts = {
  bullet = {
    -- cleaner bullet points
    icons = { "", "" },
  },
  heading = {
    -- Icons that say H1, H2, etc.
    icons = { "󰉫 ", "󰉬 ", "󰉭 ", "󰉮 ", "󰉯 ", "󰉰 " },
  },

}

Extras

Extras can be found here. You can install them like you would any other theme in the respective application.

The following extras are available:

  • Ghostty
  • Kitty
  • Alacritty
  • Windows Terminal

Acknowledgements

Ashen was inspired by nvim-noirbuddy.

Roadmap

Please refer to the issues page for an up-to-date roadmap.

Contributing

I welcome contributions. If you want a certain plugin or extra to be added, please open an issue and I'll get to it as soon as I can. If you're interested in contributing, you're welcome to take a stab at any of the issues.