Convert Figma logo to code with AI

folke logotokyonight.nvim

🏙 A clean, dark Neovim theme written in Lua, with support for lsp, treesitter and lots of plugins. Includes additional themes for Kitty, Alacritty, iTerm and Fish.

6,147
407
6,147
7

Top Related Projects

5,343

🍨 Soothing pastel theme for (Neo)vim

🦊A highly customizable theme for vim and neovim with support for lsp, treesitter and a variety of plugins.

One dark and light colorscheme for neovim >= 0.5.0 written in lua based on Atom's One Dark and Light theme. Additionally, it comes with 5 color variant styles

GitHub's Neovim themes

1,627

High Contrast & Vivid Color Scheme based on Monokai Pro

Quick Overview

Tokyonight.nvim is a popular color scheme for Neovim, inspired by the Tokyo Night VS Code theme. It offers a clean, modern look with multiple style variations and extensive plugin support, providing a visually appealing and customizable coding environment.

Pros

  • Multiple style options (storm, moon, night, and day)
  • Extensive plugin support for a cohesive look across various Neovim plugins
  • Customizable with options to adjust colors and styles
  • Active development and community support

Cons

  • Requires Neovim 0.5+ for full functionality
  • May not be suitable for users who prefer high-contrast or traditional color schemes
  • Some users might find the setup process complex compared to simpler themes

Code Examples

  1. Basic setup in Lua:
vim.cmd[[colorscheme tokyonight]]

This sets the colorscheme to Tokyonight with default settings.

  1. Customizing the style:
vim.g.tokyonight_style = "storm"
vim.g.tokyonight_italic_functions = true
vim.g.tokyonight_sidebars = { "qf", "vista_kind", "terminal", "packer" }

-- Load the colorscheme
vim.cmd[[colorscheme tokyonight]]

This example sets the style to "storm", enables italic functions, and specifies which windows should be rendered with a darker background.

  1. Using Packer to install and configure:
use {
  "folke/tokyonight.nvim",
  config = function()
    require("tokyonight").setup({
      -- your configuration comes here
      style = "night",
      light_style = "day",
      transparent = true,
      terminal_colors = true,
      styles = {
        comments = { italic = true },
        keywords = { italic = true },
        functions = {},
        variables = {},
      },
      sidebars = { "qf", "vista_kind", "terminal", "packer" },
      -- ...
    })
  end
}

This example shows how to install and configure Tokyonight using the Packer plugin manager, with various customization options.

Getting Started

To get started with Tokyonight.nvim:

  1. Install the plugin using your preferred plugin manager. For example, with Packer:
use 'folke/tokyonight.nvim'
  1. Add the following to your Neovim configuration file (e.g., init.lua):
vim.cmd[[colorscheme tokyonight]]
  1. Optionally, customize the theme by adding configuration options before setting the colorscheme:
require("tokyonight").setup({
  style = "storm",
  transparent = true,
  -- Add more options as needed
})
vim.cmd[[colorscheme tokyonight]]
  1. Restart Neovim or source your configuration file to apply the changes.

Competitor Comparisons

5,343

🍨 Soothing pastel theme for (Neo)vim

Pros of Catppuccin

  • More customization options and color variants (Latte, Frappe, Macchiato, Mocha)
  • Broader plugin support and integrations
  • Active community with frequent updates and contributions

Cons of Catppuccin

  • Slightly more complex setup and configuration
  • May require more system resources due to extensive customization options

Code Comparison

Tokyonight:

require("tokyonight").setup({
  style = "storm",
  transparent = true,
  terminal_colors = true,
})

Catppuccin:

require("catppuccin").setup({
  flavour = "mocha",
  background = { light = "latte", dark = "mocha" },
  transparent_background = true,
  term_colors = true,
})

Both color schemes offer easy setup and configuration, with Catppuccin providing more granular control over various aspects of the theme. Tokyonight has a simpler setup process, while Catppuccin offers more flexibility at the cost of slightly increased complexity.

Tokyonight focuses on providing a cohesive and polished look inspired by Tokyo's night lights, while Catppuccin offers a wider range of pastel-themed color palettes to suit different preferences. Both themes are well-maintained and popular within the Neovim community, with Catppuccin having a slight edge in terms of customization options and plugin support.

🦊A highly customizable theme for vim and neovim with support for lsp, treesitter and a variety of plugins.

Pros of Nightfox

  • Offers a wider variety of color schemes (9 different themes)
  • Provides more customization options for users
  • Includes support for additional plugins and applications beyond Neovim

Cons of Nightfox

  • May have a steeper learning curve due to more configuration options
  • Less focused on a single cohesive theme, which might lead to inconsistencies

Code Comparison

Tokyonight configuration:

require("tokyonight").setup({
  style = "storm",
  transparent = true,
  terminal_colors = true,
})

Nightfox configuration:

require('nightfox').setup({
  options = {
    styles = {
      comments = "italic",
      keywords = "bold",
      types = "italic,bold",
    }
  }
})

Both color schemes offer easy setup and configuration, but Nightfox provides more granular control over specific syntax elements. Tokyonight focuses on overall style and transparency options, while Nightfox allows for detailed customization of individual syntax components.

One dark and light colorscheme for neovim >= 0.5.0 written in lua based on Atom's One Dark and Light theme. Additionally, it comes with 5 color variant styles

Pros of onedark.nvim

  • More customization options for individual syntax elements
  • Includes additional color schemes beyond the base OneDark theme
  • Lighter weight and potentially faster loading times

Cons of onedark.nvim

  • Less extensive plugin support compared to tokyonight.nvim
  • Fewer pre-configured integrations with popular Neovim plugins
  • May require more manual configuration for optimal appearance

Code Comparison

tokyonight.nvim:

require("tokyonight").setup({
  style = "storm",
  transparent = true,
  terminal_colors = true,
  styles = {
    comments = { italic = true },
    keywords = { italic = true },
    functions = {},
    variables = {},
  },
})

onedark.nvim:

require('onedark').setup {
    style = 'darker',
    transparent = true,
    term_colors = true,
    ending_tildes = false,
    cmp_itemkind_reverse = false,
    toggle_style_key = '<leader>ts',
    toggle_style_list = {'dark', 'darker', 'cool', 'deep', 'warm', 'warmer', 'light'},
}

Both themes offer similar setup options, but onedark.nvim provides more granular control over styles and includes a built-in theme toggle feature. tokyonight.nvim focuses on broader style categories, while onedark.nvim allows for more specific customization of individual syntax elements.

GitHub's Neovim themes

Pros of github-nvim-theme

  • Offers a wider variety of GitHub-inspired themes, including light and dark variants
  • Provides more customization options for individual syntax elements
  • Includes support for popular plugins like TreeSitter and LSP out of the box

Cons of github-nvim-theme

  • Less active development and community support compared to tokyonight.nvim
  • May have fewer optimizations for performance in larger files
  • Limited additional color schemes beyond GitHub-inspired themes

Code Comparison

tokyonight.nvim:

require("tokyonight").setup({
  style = "storm",
  transparent = true,
  terminal_colors = true,
  styles = {
    comments = { italic = true },
    keywords = { italic = true },
    functions = {},
    variables = {},
  },
})

github-nvim-theme:

require("github-theme").setup({
  theme_style = "dark",
  function_style = "italic",
  sidebars = {"qf", "vista_kind", "terminal", "packer"},
  colors = {hint = "orange", error = "#ff0000"},
  overrides = function(c)
    return {
      htmlTag = {fg = c.red, bg = "#282c34", sp = c.hint, style = "underline"},
    }
  end
})
1,627

High Contrast & Vivid Color Scheme based on Monokai Pro

Pros of Sonokai

  • More color scheme variants (6 compared to 5)
  • Supports a wider range of terminal emulators
  • Includes specific support for certain plugins (e.g., vim-clap, vim-startify)

Cons of Sonokai

  • Less active development (last update 8 months ago vs. 12 days ago for Tokyonight)
  • Fewer stars and forks on GitHub, potentially indicating less community support
  • Lacks some advanced features like day/night switching

Code Comparison

Sonokai color definition:

local colors = {
  bg = '#2c2e34',
  fg = '#e2e2e3',
  red = '#fc5d7c',
  orange = '#f39660',
  yellow = '#e7c664',
}

Tokyonight color definition:

local colors = {
  bg = "#24283b",
  fg = "#c0caf5",
  red = "#f7768e",
  orange = "#ff9e64",
  yellow = "#e0af68",
}

Both color schemes offer a rich set of colors for syntax highlighting and UI elements. Sonokai tends to use slightly more muted tones, while Tokyonight opts for a more vibrant palette. The choice between them often comes down to personal preference and the specific needs of your development environment.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

🏙 Tokyo Night

A dark and light Neovim theme written in Lua ported from the Visual Studio Code TokyoNight theme. Includes extra themes for Kitty, Alacritty, iTerm and Fish.

Moon Storm
Night Day

✨ Features

  • Supports the latest Neovim 0.9.0 features.
  • Terminal colors.
  • Supports all major plugins.
  • Provides TokyoNight extras for numerous other applications.
🎨 Supported Plugins
PluginSource
aerial.nvimaerial
aleale
alpha-nvimalpha
barbar.nvimbarbar
bufferline.nvimbufferline
nvim-cmpcmp
nvim-dapdap
dashboard-nvimdashboard
flash.nvimflash
fzf-luafzf
vim-gitguttergitgutter
gitsigns.nvimgitsigns
glyph-palette.vimglyph-palette
grug-far.nvimgrug-far
headlines.nvimheadlines
hop.nvimhop
vim-illuminateilluminate
indent-blankline.nvimindent-blankline
indentmini.nvimindentmini
lazy.nvimlazy
leap.nvimleap
lspsaga.nvimlspsaga
mini.animatemini_animate
mini.cluemini_clue
mini.completionmini_completion
mini.cursorwordmini_cursorword
mini.depsmini_deps
mini.diffmini_diff
mini.filesmini_files
mini.hipatternsmini_hipatterns
mini.iconsmini_icons
mini.indentscopemini_indentscope
mini.jumpmini_jump
mini.mapmini_map
mini.notifymini_notify
mini.operatorsmini_operators
mini.pickmini_pick
mini.startermini_starter
mini.statuslinemini_statusline
mini.surroundmini_surround
mini.tablinemini_tabline
mini.testmini_test
mini.trailspacemini_trailspace
nvim-navicnavic
neo-tree.nvimneo-tree
neogitneogit
neotestneotest
noice.nvimnoice
nvim-notifynotify
nvim-tree.luanvim-tree
octo.nvimocto
rainbow-delimiters.nvimrainbow
render-markdown.nvimrender-markdown
nvim-scrollbarscrollbar
vim-sneaksneak
telescope.nvimtelescope
nvim-treesitter-contexttreesitter-context
trouble.nvimtrouble
vimwikivimwiki
which-key.nvimwhich-key
yanky.nvimyanky
🍭 Extras
ToolExtra
Aercextras/aerc
Alacrittyextras/alacritty
Deltaextras/delta
Dunstextras/dunst
Fishextras/fish
Fish Themesextras/fish_themes
Footextras/foot
Fuzzelextras/fuzzel
Fzfextras/fzf
GitUIextras/gitui
GNOME Terminalextras/gnome_terminal
Helixextras/helix
iTermextras/iterm
Kittyextras/kitty
Lazygitextras/lazygit
Lua Table for testingextras/lua
Prismextras/prism
process-composeextras/process_compose
Slackextras/slack
Spotify Playerextras/spotify_player
Sublime Textextras/sublime
Terminatorextras/terminator
Tilixextras/tilix
Tmuxextras/tmux
Vimextras/vim
Vimiumextras/vimium
WezTermextras/wezterm
Windows Terminalextras/windows_terminal
Xfce Terminalextras/xfceterm
Xresourcesextras/xresources
Yaziextras/yazi
Zathuraextras/zathura
Zellijextras/zellij

⚡️ Requirements

📦 Installation

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

{
  "folke/tokyonight.nvim",
  lazy = false,
  priority = 1000,
  opts = {},
}

🚀 Usage

vim.cmd[[colorscheme tokyonight]]
colorscheme tokyonight

" There are also colorschemes for the different styles.
colorscheme tokyonight-night
colorscheme tokyonight-storm
colorscheme tokyonight-day
colorscheme tokyonight-moon

Some plugins need extra configuration to work with TokyoNight.

Click here for more details

Barbecue

-- Lua
require('barbecue').setup {
  -- ... your barbecue config
  theme = 'tokyonight',
  -- ... your barbecue config
}

Lualine

-- Lua
require('lualine').setup {
  options = {
    -- ... your lualine config
    theme = 'tokyonight'
    -- ... your lualine config
  }
}

Lightline

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

⚙️ Configuration

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

The theme offers four styles: storm, moon, night, and day.

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

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

Default Options
---@class tokyonight.Config
---@field on_colors fun(colors: ColorScheme)
---@field on_highlights fun(highlights: tokyonight.Highlights, colors: ColorScheme)
M.defaults = {
  style = "moon", -- The theme comes in three styles, `storm`, a darker variant `night` and `day`
  light_style = "day", -- 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
  },
  day_brightness = 0.3, -- Adjusts the brightness of the colors of the **Day** 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 tokyonight.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/folke/tokyonight.nvim/tree/main/lua/tokyonight/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 storm, moon, night, and day themes.

Settings & Changing Colors
require("tokyonight").setup({
  -- use the night style
  style = "night",
  -- 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("tokyonight").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.

image

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

local colors = require("tokyonight.colors").setup() -- pass in any of the config options as explained above
local util = require("tokyonight.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/tokyonight/extra/cool-app.lua.

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

  3. Run the following command to generate new extra themes from the tokyonight 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.