serhez/teide.nvim

A Neovim theme. Forked from folke's TokyoNight.

Lua

163

1,018 commits

updated Jan 12, 2026

See the code

README

🌋 Teide

A dark and light Neovim theme written in Lua. Includes extra themes for Kitty, Alacritty, iTerm and Fish.

This theme is a fork of tokyonight.nvim by folke. The color palette is different other changes have been made to the semantic assignments of colors, but the codebase of folke's tokyonight is the pillar that has made this color scheme possible. He deserves all the engineering credit for this plugin. I highly recommend checking out TokyoNight and his other plugins too.

DarkerDark
DimmedLight

✨ Features

  • Terminal colors.
  • Supports most major plugins.
  • Supports latest Neovim features.
  • Provides Teide extras for numerous other applications.
🎨 Supported Plugins
🍭 Extras

⚡️ Requirements

📦 Installation

Install the theme with your preferred package manager, such as folke/lazy.nvim:

{
  "serhez/teide.nvim",
  lazy = false,
  priority = 1000,
  opts = {},
}

🚀 Usage

vim.cmd([[colorscheme teide]])
colorscheme teide

" There are also colorschemes for the different styles.
colorscheme teide-darker
colorscheme teide-dark
colorscheme teide-dimmed
colorscheme teide-light

Some plugins need extra configuration to work with Teide.

Click here for more details

Barbecue

-- Lua
require("barbecue").setup({
  -- ... your barbecue config
  theme = "teide",
  -- ... your barbecue config
})

Lualine

-- Lua
require("lualine").setup({
  options = {
    -- ... your lualine config
    theme = "teide",
    -- ... your lualine config
  },
})

Lightline

" Vim Script
let g:lightline = {'colorscheme': 'teide'}

⚙️ Configuration

[!IMPORTANT] Set the configuration BEFORE loading the color scheme with colorscheme teide.

The theme offers four styles: darker, dark, dimmed, and light.

The light style is used when { style = "light" } is passed to setup(options) or when vim.o.background = "light".

Teide uses the default options, unless setup is explicitly called.

Default Options
---@class teide.Config
---@field on_colors fun(colors: ColorScheme)
---@field on_highlights fun(highlights: teide.Highlights, colors: ColorScheme)
M.defaults = {
  style = "dimmed", -- The theme comes in four styles, `darker`, `dark`, `dimmed`, and `light`
  light_style = "light", -- The theme is used when the background is set to light
  transparent = false, -- Enable this to disable setting the background color
  terminal_colors = true, -- Configure the colors used when opening a `:terminal` in Neovim
  styles = {
    -- Style to be applied to different syntax groups
    -- Value is any valid attr-list value for `:help nvim_set_hl`
    comments = { italic = true },
    keywords = { italic = true },
    functions = {},
    variables = {},
    -- Background styles. Can be "dark", "transparent" or "normal"
    sidebars = "dark", -- style for sidebars, see below
    floats = "dark", -- style for floating windows
  },
  light_brightness = 0.3, -- Adjusts the brightness of the colors of the **Light** style. Number between 0 and 1, from dull to vibrant colors
  dim_inactive = false, -- dims inactive windows
  lualine_bold = false, -- When `true`, section headers in the lualine theme will be bold

  --- You can override specific color groups to use other groups or a hex color
  --- function will be called with a ColorScheme table
  ---@param colors ColorScheme
  on_colors = function(colors) end,

  --- You can override specific highlights to use other groups or a hex color
  --- function will be called with a Highlights and ColorScheme table
  ---@param highlights teide.Highlights
  ---@param colors ColorScheme
  on_highlights = function(highlights, colors) end,

  cache = true, -- When set to true, the theme will be cached for better performance

  ---@type table<string, boolean|{enabled:boolean}>
  plugins = {
    -- enable all plugins when not using lazy.nvim
    -- set to false to manually enable/disable plugins
    all = package.loaded.lazy == nil,
    -- uses your plugin manager to automatically enable needed plugins
    -- currently only lazy.nvim is supported
    auto = true,
    -- add any plugins here that you want to enable
    -- for all possible plugins, see:
    --   * https://github.com/serhez/teide.nvim/tree/main/lua/teide/groups
    -- telescope = true,
  },
}

🪓 Overriding Colors & Highlight Groups

How the highlight groups are calculated:

  1. colors are determined based on your configuration, with the ability to override them using config.on_colors(colors).
  2. These colors are utilized to generate the highlight groups.
  3. config.on_highlights(highlights, colors) can be used to override highlight groups.

For default values of colors and highlights, please consult the darker, dark, dimmed, and light themes.

Settings & Changing Colors
require("teide").setup({
  -- use the dark style
  style = "dark",
  -- disable italic for functions
  styles = {
    functions = {},
  },
  -- Change the "hint" color to the "orange" color, and make the "error" color bright red
  on_colors = function(colors)
    colors.hint = colors.orange
    colors.error = "#ff0000"
  end,
})
Borderless Telescope
require("teide").setup({
  on_highlights = function(hl, c)
    local prompt = "#2d3149"
    hl.TelescopeNormal = {
      bg = c.bg_dark,
      fg = c.fg_dark,
    }
    hl.TelescopeBorder = {
      bg = c.bg_dark,
      fg = c.bg_dark,
    }
    hl.TelescopePromptNormal = {
      bg = prompt,
    }
    hl.TelescopePromptBorder = {
      bg = prompt,
      fg = prompt,
    }
    hl.TelescopePromptTitle = {
      bg = prompt,
      fg = prompt,
    }
    hl.TelescopePreviewTitle = {
      bg = c.bg_dark,
      fg = c.bg_dark,
    }
    hl.TelescopeResultsTitle = {
      bg = c.bg_dark,
      fg = c.bg_dark,
    }
  end,
})
Fix undercurls in Tmux

To have undercurls show up and in color, add the following to your Tmux configuration file:

# Undercurl
set -g default-terminal "${TERM}"
set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm'                                                          # undercurl support
set -as terminal-overrides ',*:Setulc=\E[58::2::::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' # underscore colours - needs tmux-3.0

🍭 Extras

Extra color configs for Kitty, Alacritty, Fish, WezTerm, iTerm and foot can be found in extras. To use them, refer to their respective documentation.

You can easily use the color palette for other plugins inside your Neovim configuration:

local colors = require("teide.colors").setup() -- pass in any of the config options as explained above
local util = require("teide.util")

aplugin.background = colors.bg_dark
aplugin.my_error = util.lighten(colors.red1, 0.3) -- number between 0 and 1. 0 results in white, 1 results in red1

🔥 Contributing

Pull requests are welcome.

For the extras, we use a simple template system that can be used to generate themes for the different styles.

How to add a new extra template:

  1. Create a file like lua/teide/extra/cool-app.lua.

  2. Add the name and output file extension to the extras table in lua/teide/extra/init.lua.

  3. Run the following command to generate new extra themes from the teide plugin directory:

    ./scripts/build
    
  4. Check the newly created themes in the extra/ directory. Please DO NOT commit them, as they are already automatically built by the CI.

Contributors

(top 30 of 130)

folke

561 commits

serhez

21 commits

amaanq

10 commits

serhez/teide.nvim

A Neovim theme. Forked from folke's TokyoNight.

Lua

163

1,018 commits

updated Jan 12, 2026

See the code

README

🌋 Teide

A dark and light Neovim theme written in Lua. Includes extra themes for Kitty, Alacritty, iTerm and Fish.

This theme is a fork of tokyonight.nvim by folke. The color palette is different other changes have been made to the semantic assignments of colors, but the codebase of folke's tokyonight is the pillar that has made this color scheme possible. He deserves all the engineering credit for this plugin. I highly recommend checking out TokyoNight and his other plugins too.

DarkerDark
DimmedLight

✨ Features

  • Terminal colors.
  • Supports most major plugins.
  • Supports latest Neovim features.
  • Provides Teide extras for numerous other applications.
🎨 Supported Plugins
🍭 Extras

⚡️ Requirements

📦 Installation

Install the theme with your preferred package manager, such as folke/lazy.nvim:

{
  "serhez/teide.nvim",
  lazy = false,
  priority = 1000,
  opts = {},
}

🚀 Usage

vim.cmd([[colorscheme teide]])
colorscheme teide

" There are also colorschemes for the different styles.
colorscheme teide-darker
colorscheme teide-dark
colorscheme teide-dimmed
colorscheme teide-light

Some plugins need extra configuration to work with Teide.

Click here for more details

Barbecue

-- Lua
require("barbecue").setup({
  -- ... your barbecue config
  theme = "teide",
  -- ... your barbecue config
})

Lualine

-- Lua
require("lualine").setup({
  options = {
    -- ... your lualine config
    theme = "teide",
    -- ... your lualine config
  },
})

Lightline

" Vim Script
let g:lightline = {'colorscheme': 'teide'}

⚙️ Configuration

[!IMPORTANT] Set the configuration BEFORE loading the color scheme with colorscheme teide.

The theme offers four styles: darker, dark, dimmed, and light.

The light style is used when { style = "light" } is passed to setup(options) or when vim.o.background = "light".

Teide uses the default options, unless setup is explicitly called.

Default Options
---@class teide.Config
---@field on_colors fun(colors: ColorScheme)
---@field on_highlights fun(highlights: teide.Highlights, colors: ColorScheme)
M.defaults = {
  style = "dimmed", -- The theme comes in four styles, `darker`, `dark`, `dimmed`, and `light`
  light_style = "light", -- The theme is used when the background is set to light
  transparent = false, -- Enable this to disable setting the background color
  terminal_colors = true, -- Configure the colors used when opening a `:terminal` in Neovim
  styles = {
    -- Style to be applied to different syntax groups
    -- Value is any valid attr-list value for `:help nvim_set_hl`
    comments = { italic = true },
    keywords = { italic = true },
    functions = {},
    variables = {},
    -- Background styles. Can be "dark", "transparent" or "normal"
    sidebars = "dark", -- style for sidebars, see below
    floats = "dark", -- style for floating windows
  },
  light_brightness = 0.3, -- Adjusts the brightness of the colors of the **Light** style. Number between 0 and 1, from dull to vibrant colors
  dim_inactive = false, -- dims inactive windows
  lualine_bold = false, -- When `true`, section headers in the lualine theme will be bold

  --- You can override specific color groups to use other groups or a hex color
  --- function will be called with a ColorScheme table
  ---@param colors ColorScheme
  on_colors = function(colors) end,

  --- You can override specific highlights to use other groups or a hex color
  --- function will be called with a Highlights and ColorScheme table
  ---@param highlights teide.Highlights
  ---@param colors ColorScheme
  on_highlights = function(highlights, colors) end,

  cache = true, -- When set to true, the theme will be cached for better performance

  ---@type table<string, boolean|{enabled:boolean}>
  plugins = {
    -- enable all plugins when not using lazy.nvim
    -- set to false to manually enable/disable plugins
    all = package.loaded.lazy == nil,
    -- uses your plugin manager to automatically enable needed plugins
    -- currently only lazy.nvim is supported
    auto = true,
    -- add any plugins here that you want to enable
    -- for all possible plugins, see:
    --   * https://github.com/serhez/teide.nvim/tree/main/lua/teide/groups
    -- telescope = true,
  },
}

🪓 Overriding Colors & Highlight Groups

How the highlight groups are calculated:

  1. colors are determined based on your configuration, with the ability to override them using config.on_colors(colors).
  2. These colors are utilized to generate the highlight groups.
  3. config.on_highlights(highlights, colors) can be used to override highlight groups.

For default values of colors and highlights, please consult the darker, dark, dimmed, and light themes.

Settings & Changing Colors
require("teide").setup({
  -- use the dark style
  style = "dark",
  -- disable italic for functions
  styles = {
    functions = {},
  },
  -- Change the "hint" color to the "orange" color, and make the "error" color bright red
  on_colors = function(colors)
    colors.hint = colors.orange
    colors.error = "#ff0000"
  end,
})
Borderless Telescope
require("teide").setup({
  on_highlights = function(hl, c)
    local prompt = "#2d3149"
    hl.TelescopeNormal = {
      bg = c.bg_dark,
      fg = c.fg_dark,
    }
    hl.TelescopeBorder = {
      bg = c.bg_dark,
      fg = c.bg_dark,
    }
    hl.TelescopePromptNormal = {
      bg = prompt,
    }
    hl.TelescopePromptBorder = {
      bg = prompt,
      fg = prompt,
    }
    hl.TelescopePromptTitle = {
      bg = prompt,
      fg = prompt,
    }
    hl.TelescopePreviewTitle = {
      bg = c.bg_dark,
      fg = c.bg_dark,
    }
    hl.TelescopeResultsTitle = {
      bg = c.bg_dark,
      fg = c.bg_dark,
    }
  end,
})
Fix undercurls in Tmux

To have undercurls show up and in color, add the following to your Tmux configuration file:

# Undercurl
set -g default-terminal "${TERM}"
set -as terminal-overrides ',*:Smulx=\E[4::%p1%dm'                                                          # undercurl support
set -as terminal-overrides ',*:Setulc=\E[58::2::::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m' # underscore colours - needs tmux-3.0

🍭 Extras

Extra color configs for Kitty, Alacritty, Fish, WezTerm, iTerm and foot can be found in extras. To use them, refer to their respective documentation.

You can easily use the color palette for other plugins inside your Neovim configuration:

local colors = require("teide.colors").setup() -- pass in any of the config options as explained above
local util = require("teide.util")

aplugin.background = colors.bg_dark
aplugin.my_error = util.lighten(colors.red1, 0.3) -- number between 0 and 1. 0 results in white, 1 results in red1

🔥 Contributing

Pull requests are welcome.

For the extras, we use a simple template system that can be used to generate themes for the different styles.

How to add a new extra template:

  1. Create a file like lua/teide/extra/cool-app.lua.

  2. Add the name and output file extension to the extras table in lua/teide/extra/init.lua.

  3. Run the following command to generate new extra themes from the teide plugin directory:

    ./scripts/build
    
  4. Check the newly created themes in the extra/ directory. Please DO NOT commit them, as they are already automatically built by the CI.

Contributors

(top 30 of 130)

folke

561 commits

serhez

21 commits

amaanq

10 commits

Languages

Lua

75.9%

CSS

12.9%

Vim Script

9.1%

Shell

1.2%