/everforest-nvim2

A Lua port of the Everforest colour scheme

Primary LanguageLua

Everforest.nvim

A Lua port of the everforest colour scheme. For screenshots, please see the everforest repo.

Features

  • 100% Lua, supports Treesitter & LSP
  • Vim terminal colours
  • Lualine theme

Installation

Using lazy.nvim:

require("lazy").setup({
  "neanias/everforest-nvim",
  version = false,
  lazy = false,
  priority = 1000, -- make sure to load this before all the other start plugins
  -- Optional; default configuration will be used if setup isn't called.
  config = function()
    require("everforest").setup({
      -- Your config here
    })
  end,
})

Using packer.nvim:

use({
  "neanias/everforest-nvim",
  -- Optional; default configuration will be used if setup isn't called.
  config = function()
    require("everforest").setup()
  end,
})

Using vim-plug:

Plug 'neanias/everforest-nvim', { 'branch': 'main' }

Usage

" In VimL

" This has both light & dark modes to match your background setting.
colorscheme everforest
-- In Lua
vim.cmd([[colorscheme everforest]])

-- Alternatively
require("everforest").load()

To enable the everforest theme for LuaLine, you can specify it as such:

require("lualine").setup({
  options = {
    -- ... other configuration
    theme = "everforest", -- Can also be "auto" to detect automatically.
  }
})

LspSaga information

Please note that LspSaga uses Diagnostic{Warning,Error,Info,Hint} highlight groups to define its borders for diagnostic pop-ups, especially in diagnostic_jump_{next,prev}. As discussed in the Sonokai repo, this is not a good idea and there is no plan to change core highlights for one plugin.

To prevent the problem of squiggly lines in LspSaga diagnostic windows, please set the diagnostic.border_follow configuration option to false.

Configuration

Configuration options aren't as comprehensive as the original everforest theme yet.

This colour scheme has a light and a dark mode which are configured using the vim background setting: :set background=light or vim.o.background=dark as appropriate.

This is the default config:

require("everforest").setup({
  ---Controls the "hardness" of the background. Options are "soft", "medium" or "hard".
  ---Default is "medium".
  background = "medium",
  ---How much of the background should be transparent. 2 will have more UI
  ---components be transparent (e.g. status line background)
  transparent_background_level = 0,
  ---Whether italics should be used for keywords and more.
  italics = false,
  ---Disable italic fonts for comments. Comments are in italics by default, set
  ---this to `true` to make them _not_ italic!
  disable_italic_comments = false,
  ---By default, the colour of the sign column background is the same as the as normal text
  ---background, but you can use a grey background by setting this to `"grey"`.
  sign_column_background = "none",
  ---The contrast of line numbers, indent lines, etc. Options are `"high"` or
  ---`"low"` (default).
  ui_contrast = "low",
  ---Dim inactive windows. Only works in Neovim. Can look a bit weird with Telescope.
  ---
  ---When this option is used in conjunction with show_eob set to `false`, the
  ---end of the buffer will only be hidden inside the active window. Inside
  ---inactive windows, the end of buffer filler characters will be visible in
  ---dimmed symbols. This is due to the way Vim and Neovim handle `EndOfBuffer`.
  dim_inactive_windows = false,
  ---Some plugins support highlighting error/warning/info/hint texts, by
  ---default these texts are only underlined, but you can use this option to
  ---also highlight the background of them.
  diagnostic_text_highlight = false,
  ---Which colour the diagnostic text should be. Options are `"grey"` or `"coloured"` (default)
  diagnostic_virtual_text = "coloured",
  ---Some plugins support highlighting error/warning/info/hint lines, but this
  ---feature is disabled by default in this colour scheme.
  diagnostic_line_highlight = false,
  ---By default, this color scheme won't colour the foreground of |spell|, instead
  ---colored under curls will be used. If you also want to colour the foreground,
  ---set this option to `true`.
  spell_foreground = false,
  ---Whether to show the EndOfBuffer highlight.
  show_eob = true,
  ---You can override specific highlights to use other groups or a hex colour.
  ---This function will be called with the highlights and colour palette tables.
  ---@param highlight_groups Highlights
  ---@param palette Palette
  on_highlights = function(highlight_groups, palette) end,
})

Overriding Highlight Groups

To find all possible palette colours, please see colours.lua.

For example, you could override the Diagnostic group of highlights to remove the undercurl:

require("everforest").setup({
  on_highlights = function (hl, palette)
    hl.DiagnosticError = { fg = palette.none, bg = palette.none, sp = palette.red }
    hl.DiagnosticWarn = { fg = palette.none, bg = palette.none, sp = palette.yellow }
    hl.DiagnosticInfo = { fg = palette.none, bg = palette.none, sp = palette.blue }
    hl.DiagnosticHint = { fg = palette.none, bg = palette.none, sp = palette.green }
  end
})

To clear any highlight groups, simply set them to {}:

require("everforest").setup({
  on_highlights = function (hl, palette)
    hl.TSDanger = {}
  end
})

Plugin support

See the wiki for the full list of plugins that have highlights.

Still TODO

  • Colour scheme configuration
    • background
    • transparent_background
    • dim_inactive_windows
    • disable_italic_comments
    • enable_italic
    • cursor
    • sign_column_background
    • spell_foreground
    • ui_contrast
    • show_eob
    • current_word
    • diagnostic_text_highlight
    • diagnostic_line_highlight
    • diagnostic_virtual_text
    • disable_terminal_colours
    • colours_override
  • Transparent backgrounds
  • Different colour scheme "weights"

Inspiration