# evergarden: a Neovim colorscheme built around four seasonal variants

> evergarden is a Lua colorscheme for Neovim that pairs a muted green and pink palette with four seasonal variants, per plugin integrations, and an override system for recolouring individual highlight groups.

**evergardentheme/nvim** — :rose: a comfy neovim colorscheme for cozy morning coding.

- Repository: https://github.com/evergardentheme/nvim
- Website: https://codeberg.org/evergarden/nvim
- Stars: 684 · Forks: 12
- Language: Lua
- License: EUPL-1.2
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/evergardentheme-nvim

## A third party theme with a Codeberg home and a GitHub mirror

evergarden is described as a comfy neovim colorscheme for cozy morning coding, and the description is doing real work: this is a low contrast, warm toned theme rather than a high fidelity syntax theme. It is written in Lua, and the project page given as the homepage is on Codeberg rather than GitHub, which tells you where the canonical source lives. The installation instructions point at a Codeberg clone URL, while the lazy.nvim snippet in the documentation still refers to the everviolet/nvim repository, so the theme has been moved between homes and the docs are not fully consistent about it. The licence is the EUPL-1.2, and there is a second licence file, LICENSE-CTP, alongside the main one. The last push to the repository was on 2026-09-01, and the project publishes no GitHub releases, so you track it as a moving branch rather than as versioned tags.

## Where the palette comes from, and the four seasonal variants

The colour design is derivative, and the documentation credits its sources precisely: the palette is inspired by the everforest colorscheme and the nord colorscheme, and the design is largely influenced by catppuccin. What the project adds is the stated goal, a cozy theme with a focus on readability and visual comfort, plus a seasonal structure. Four variants exist, winter, fall, spring and summer, and each one is previewed separately in the documentation. The variant is chosen at setup time as a string, and an accent colour is chosen alongside it, with green shown as the example. This seasonal framing is the idea that distinguishes the theme from its inspirations, and it is the reason there is a variant key in the configuration at all, since most themes have a single palette and a separate transparent background switch.

## Installing with vim.pack, and what setup() actually controls

Three installation routes are documented, and the modern one uses the vim.pack addon bundled with Neovim itself. The plugin is added from the Codeberg URL and then configured through a setup call that takes a table of options. The first block below adds the plugin and configures it in one go.

```lua
vim.pack.add({ { src = "https://codeberg.org/evergarden/nvim.git", name = "evergarden" } })

require('evergarden').setup({
  theme = {
    variant = 'fall', -- 'winter'|'fall'|'spring'|'summer'
    accent = 'green',
  },
  editor = {
    transparent_background = false,
    sign = { color = 'none' },
    float = {
      color = 'mantle',
      solid_border = false,
    },
    completion = {
      color = 'surface0',
    },
  },
})
```

The setup call is where the editor behaviour lives rather than the colours. transparent_background decides whether the editor background is opaque, the sign colour is set to none so that git and diagnostic signs do not paint their own background, floats take a mantle colour and can drop their solid border, and the completion menu uses a surface colour. The lazy.nvim route passes the same options through an opts table and sets a priority of 1000, with a comment explaining that a colorscheme plugin has to load before any other plugin.

## The full configuration adds style rules and empty override tables

The documented configuration block is longer than the quick start, and the extra keys are what make the theme feel tuned rather than generic. A style table controls how specific UI elements are drawn: the tabline is reversed, the search and incremental search highlights are italic and reversed, and types, keywords and comments are italicised. Two further keys, overrides and color_overrides, are present but empty in the documented example, which tells you they are the extension points rather than something you need to fill in. The configuration also sets override_terminal to true inside the editor table, so the terminal inherits the theme rather than keeping the colours of the shell it was launched from.

```lua
require 'evergarden'.setup {
  theme = {
    variant = 'fall', -- 'winter'|'fall'|'spring'|'summer'
    accent = 'green',
  },
  editor = {
    transparent_background = false,
    override_terminal = true,
    sign = { color = 'none' },
    float = {
      color = 'mantle',
      solid_border = false,
    },
    completion = {
      color = 'surface0',
    },
  },
  style = {
    tabline = { 'reverse' },
    search = { 'italic', 'reverse' },
    incsearch = { 'italic', 'reverse' },
    types = { 'italic' },
    keyword = { 'italic' },
    comment = { 'italic' },
  },
  overrides = {},
  color_overrides = {},
}
```

## Integrations cover a fixed list of plugins, and mini.nvim most of them

The integrations block is a list of booleans and sub tables, one entry per plugin the theme knows how to colour. It covers blink_cmp, cmp, fzf_lua, gitsigns, indent_blankline, mini, nvimtree, rainbow_delimiters, symbols_outline, telescope, which_key and neotree. The mini entry is a single toggle that switches on a large set of mini.nvim modules at once, including completion, diff, files, hopatterns, icons, indentscope, jump, notify, pick, statusline, surround, tabline and test, and it also accepts an animate flag for the animate module. indent_blankline is configured rather than just toggled, with an enable flag and a scope_color of green that matches the default accent. The important caveat is that this list is finite. Any plugin not named here falls back to the generic highlight groups, which is the usual reason a third party theme looks wrong on a statusline or a picker.

## Overrides let you recolour single highlight groups

The override system is the mechanism for the cases where you want a specific colour on a specific highlight group, and it takes three kinds of option: fg for the foreground colour, bg for the background colour, and style for the highlight attributes, given as a list such as bold and italic. There is also a shorthand, where a table of two strings is read as foreground first and background second. The documentation is explicit about the rules that trip people up. fg and bg must be positioned as the first and second elements of the table respectively, or set as named fields, and both must be strings beginning with a hash. The example below shows both styles side by side.

```lua
require 'evergarden'.setup {
  overrides = {
    Normal = {
      '#fddce3',
      '#1d2021',

      -- Additional highlight options can be included here
      style = { 'bold', 'italic' }
    },
    Keyword = {
      fg = '#ce96de',
      bg = '#ae45be',
    },
  },
}
```

The named fields are the safer form to copy, since the positional form silently produces the wrong result if the order is wrong. The example colours show the palette in use, a pink foreground over a near black background, and a purple keyword colour.

## What the repository contains beyond the Lua

The tree shows a project with real engineering around it, not just a colour file. Alongside the Lua source under lua/ there is a colors/ directory for the generated or legacy colour entry points, a doc/ directory and a minidoc.lua file, which is the documentation generator the project uses. Configuration for tooling is checked in as well: stylua.toml for the Lua formatter, selene.toml for the Lua linter, and vim.yml for the Neovim language server rules. A flake.nix and flake.lock sit at the root, so the theme can be consumed as a Nix flake, and there is a nix/ directory, a .scripts/ directory for build and release automation, and an assets/ folder holding the previews used in the documentation. The features list rounds this out with support for Treesitter highlighting, transparent background, and a set of style customisation options including background variants and colour inversion.

## Where evergarden is the wrong choice

There are real limits. The documentation is a README with option tables, and it does not publish contrast ratios for any of the four variants, so if you need a theme that meets an accessibility threshold you are on your own measuring the palette. The theme also leans on low contrast by design, which is the point for some people and a genuine legibility problem for others over a long day. The integrations list is fixed, so a plugin outside that list will not be themed, and the list does not include every popular statusline or picker in the ecosystem. The code sits in a Lua file with a setup table, so the configuration surface is large, and every option is a key you have to learn rather than a single switch. On the maintenance side, the project publishes no GitHub releases and the last push was on 2026-09-01, and the mismatch between the Codeberg source used by vim.pack and the GitHub path still present in the lazy.nvim snippet means a copy and paste can quietly fetch the wrong tree.

## Conclusion

Pick evergarden if you want a low contrast Neovim theme with a warm accent, want to switch season by season, and want per plugin highlighting that does not need manual patching. Do not pick it if you need a theme with published colour contrast ratios, a terminal independent palette, or an upstream Neovim colourscheme that ships with the editor, since this one is a third party plugin with its own dependencies. Verify first that your favourite plugin is in the integrations list, because the list is explicit about which plugins are covered and anything missing falls back to the generic highlights.

## FAQ

### How do I install the evergarden Neovim colorscheme?

With vim.pack, add the plugin from the Codeberg URL and then call require('evergarden').setup() with your options. The documentation also gives a lazy.nvim snippet with priority 1000 and a vim-plug line for the same theme.

### Which variants does the evergarden colorscheme ship?

Four seasonal variants are offered, selected with the theme.variant option: winter, fall, spring and summer, each previewed separately in the documentation. An accent colour is set with theme.accent, with green shown as the example.

### How do I change a single highlight group in evergarden?

Use the overrides table, setting fg for the foreground colour, bg for the background colour and style for attributes, or a two element table of foreground and background as a shorthand. Both colours must be strings starting with a hash.

### Does evergarden support plugin integrations and transparent background?

Yes. The integrations table covers blink_cmp, cmp, fzf_lua, gitsigns, indent_blankline, mini, nvimtree, rainbow_delimiters, symbols_outline, telescope, which_key and neotree, and editor.transparent_background switches the opaque background off.

## Sources

- [evergardentheme/nvim on GitHub](https://github.com/evergardentheme/nvim)
- [Issues](https://github.com/evergardentheme/nvim/issues)
- [License: EUPL-1.2](https://github.com/evergardentheme/nvim/blob/main/LICENSE)
- [Project website](https://codeberg.org/evergarden/nvim)
- [README](https://github.com/evergardentheme/nvim/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/evergardentheme-nvim
