01. Overview & Architecture

Profile: v4.14.1
Schema validatedSource pinned
Purpose
Tokyo Night for Neovim, with extras for terminals and many apps.
Compatibility
Any distro (Server: BOTH)
Window Manager & Theme
Any WM / DE / Tokyo Night

02. Installation & Deployment

Before you installThis changes your desktop configuration. Run it as your normal user, never with sudo: it asks for sudo only where a step needs it (listed below).The guided installer shows its plan first. Files it would replace are kept unless you approve. Everything it copies, clones or appends to in your home folder is backed up and verified first, and --rollback restores it. Packages, sudo changes and the other commands listed under Impact are not undone.
IntegrityEach release from main builds the installers in GitHub Actions and signs them with a GitHub build attestation. Verify your download against the repository, not this website (Option B, step 2). If it does not verify, don't run it.
ImpactAlso runs (not undone by rollback): nvim +"colorscheme tokyonight"
RecoveryGuided: backups in ~/.local/state/0xtsoa/backups/, undo with bash install.sh --rollback.Manual: the steps below only write in the download folder or run listed commands.
Option A: manual installAdvanced
Read the source at the reviewed commit, back up, then run each step yourself.
$git clone https://github.com/folke/tokyonight.nvim ~/0xtsoa-review/folke-tokyonight-nvim# 1. clone to a review folder
$git -C ~/0xtsoa-review/folke-tokyonight-nvim checkout --detach cdc07ac78467a233fd62c493de29a17e0cf2b2b6# 2. the reviewed commit
Then the steps. Package commands are written for Arch; on other distros use your package manager.

Step-by-step deployment protocol

Step-by-step deployment
1Add the plugin (lazy.nvim)
$# lua: { "folke/tokyonight.nvim", lazy = false, priority = 1000 }
2Activate the colorscheme
$nvim +"colorscheme tokyonight"
Option B: guided installerRecommended
The same steps as one script for any distro. It shows the plan first, keeps files you already have unless you approve replacing them, and backs up everything it changes in your home folder. Never pipe it into a shell.
$curl -fsSLo install.sh 'https://www.0xtsoa.dev/configs/folke/tokyonight-nvim/install.sh'# 1. download
$gh attestation verify install.sh --repo nyharena25/0xTsoa --signer-workflow nyharena25/0xTsoa/.github/workflows/attest-installers.yml# 2. verify (GitHub CLI 2.49+, signed in)
$less install.sh# 3. read it
$bash install.sh --dry-run# 4. preview: changes nothing
$bash install.sh# 5. install (asks first)
$bash install.sh --rollback# undo the file changes
View script in browserOther options: --force (replace conflicts, backed up first), --yes, --help

03. Screenshot Gallery // Tokyo Night

Capture 01 // Fullscreen
Tokyo Night screenshot 1
01 / 05

04. Documentation & Guide

Source: folke/tokyonight.nvimRef: cdc07ac784
README.md|GitHub Flavored Markdown

🏙 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
Plugin Source
aerial.nvim `aerial`
ale `ale`
alpha-nvim `alpha`
barbar.nvim `barbar`
blink.cmp `blink`
bufferline.nvim `bufferline`
nvim-cmp `cmp`
codeium.nvim `codeium`
copilot.lua `copilot`
nvim-dap `dap`
dashboard-nvim `dashboard`
flash.nvim `flash`
fzf-lua `fzf`
vim-gitgutter `gitgutter`
gitsigns.nvim `gitsigns`
glyph-palette.vim `glyph-palette`
grug-far.nvim `grug-far`
headlines.nvim `headlines`
hop.nvim `hop`
vim-illuminate `illuminate`
indent-blankline.nvim `indent-blankline`
indentmini.nvim `indentmini`
lazy.nvim `lazy`
leap.nvim `leap`
lspsaga.nvim `lspsaga`
mini.animate `mini_animate`
mini.clue `mini_clue`
mini.completion `mini_completion`
mini.cursorword `mini_cursorword`
mini.deps `mini_deps`
mini.diff `mini_diff`
mini.files `mini_files`
mini.hipatterns `mini_hipatterns`
mini.icons `mini_icons`
mini.indentscope `mini_indentscope`
mini.jump `mini_jump`
mini.map `mini_map`
mini.notify `mini_notify`
mini.operators `mini_operators`
mini.pick `mini_pick`
mini.starter `mini_starter`
mini.statusline `mini_statusline`
mini.surround `mini_surround`
mini.tabline `mini_tabline`
mini.test `mini_test`
mini.trailspace `mini_trailspace`
nvim-navic `navic`
neo-tree.nvim `neo-tree`
neogit `neogit`
neotest `neotest`
noice.nvim `noice`
nvim-notify `notify`
nvim-tree.lua `nvim-tree`
octo.nvim `octo`
rainbow-delimiters.nvim `rainbow`
render-markdown.nvim `render-markdown`
nvim-scrollbar `scrollbar`
sidekick.nvim `sidekick`
snacks.nvim `snacks`
vim-sneak `sneak`
supermaven-nvim `supermaven`
telescope.nvim `telescope`
nvim-treesitter-context `treesitter-context`
trouble.nvim `trouble`
vimwiki `vimwiki`
which-key.nvim `which-key`
yanky.nvim `yanky`
🍭 Extras
Tool Extra
Aerc extras/aerc
Aider extras/aider
Alacritty extras/alacritty
Btop++ extras/btop
Delta extras/delta
(Better-)Discord extras/discord
Dunst extras/dunst
eza extras/eza
Fish extras/fish
Fish Themes extras/fish_themes
Foot extras/foot
Fuzzel extras/fuzzel
Fzf extras/fzf
Gemini CLI extras/gemini_cli
Ghostty extras/ghostty
GitUI extras/gitui
GNOME Terminal extras/gnome_terminal
Helix extras/helix
iSH extras/ish
iTerm extras/iterm
Kitty extras/kitty
Konsole extras/konsole
Lazygit extras/lazygit
Lua Table for testing extras/lua
opencode extras/opencode
pi extras/pi
Prism extras/prism
process-compose extras/process_compose
QTerminal extras/qterminal
Slack extras/slack
Spotify Player extras/spotify_player
Sublime Text extras/sublime
Tailwind CSS (v4) extras/tailwindv4
Terminator extras/terminator
Termux extras/termux
Tilix extras/tilix
Tmux extras/tmux
Vim extras/vim
Vimium extras/vimium
Vivaldi extras/vivaldi
WezTerm extras/wezterm
Windows Terminal extras/windows_terminal
Xfce Terminal extras/xfceterm
Xresources extras/xresources
Yazi extras/yazi
Zathura extras/zathura
Zellij extras/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! Please see CONTRIBUTING.md for guidelines on adding new extras and general contribution guidelines.

GitHub Flavored Markdown (github-markdown-css)README snapshot at cdc07ac784