Coder Social home page Coder Social logo

everforest-nvim's Introduction

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.

The default configuration used by the colour scheme
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,
  ---Style used to make floating windows stand out from other windows. `"bright"`
  ---makes the background of these windows lighter than |hl-Normal|, whereas
  ---`"dim"` makes it darker.
  ---
  ---Floating windows include for instance diagnostic pop-ups, scrollable
  ---documentation windows from completion engines, overlay windows from
  ---installers, etc.
  ---
  ---NB: This is only significant for dark backgrounds as the light palettes
  ---have the same colour for both values in the switch.
  float_style = "bright",
  ---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,
  ---You can override colours in the palette to use different hex colours.
  ---This function will be called once the base and background colours have
  ---been mixed on the palette.
  ---@param palette Palette
  colours_override = function(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,
})

If you want to tweak or amend an existing highlight group you need to add the colours that aren't changing as well as your new styles. This is because the highlights defined in the on_highlights method will override the default highlights.

Here's an example of adding a bold styling to the TSBoolean highlight group:

require("everforest").setup({
  on_highlights = function(hl, palette)
    -- The default highlights for TSBoolean is linked to `Purple` which is fg
    -- purple and bg none. If we want to just add a bold style to the existing,
    -- we need to have the existing *and* the bold style. (We could link to
    -- `PurpleBold` here otherwise.)
    hl.TSBoolean = { fg = palette.purple, bg = palette.none, bold = true }
  end,
})

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

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

Overriding colours in the palette

To find the existing palette colours, please see colours.lua.

For instance, if you use a dark background and want to use a darker hue for red, you could use the following configuration:

require("everforest").setup({
  colours_override = function (palette)
    palette.red = "#b86466"
  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 — this is italic in everforest-nvim
    • 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

everforest-nvim's People

Contributors

betago avatar deniciocode avatar github-actions[bot] avatar lucidph3nx avatar mrtnvgr avatar neanias avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.