Giter Site home page Giter Site logo

folke / tokyonight.nvim Goto Github PK

View Code? Open in Web Editor NEW
6.0K 17.0 399.0 1.58 MB

๐Ÿ™ 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.

License: Apache License 2.0

Lua 81.98% Shell 3.28% Vim Script 10.82% C 0.70% JavaScript 1.00% CSS 2.23%
neovim neovim-theme neovim-lua vim vim-theme neovim-colorscheme vim-colorscheme alacritty-theme alacritty-colorscheme kitty-themes

tokyonight.nvim's Introduction

๐Ÿ™ 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
bufferline.nvim bufferline
nvim-cmp cmp
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
markdown.nvim markdown
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
nvim-scrollbar scrollbar
vim-sneak sneak
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
Alacritty extras/alacritty
Delta extras/delta
Dunst extras/dunst
Fish extras/fish
Fish Themes extras/fish_themes
Foot extras/foot
Fuzzel extras/fuzzel
Fzf extras/fzf
GitUI extras/gitui
GNOME Terminal extras/gnome_terminal
Helix extras/helix
iTerm extras/iterm
Kitty extras/kitty
Lazygit extras/lazygit
Lua Table for testing extras/lua
Prism extras/prism
process-compose extras/process_compose
Slack extras/slack
Spotify Player extras/spotify_player
Sublime Text extras/sublime
Terminator extras/terminator
Tilix extras/tilix
Tmux extras/tmux
Vim extras/vim
Vimium extras/vimium
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
-- Lua
require('barbecue').setup {
  -- ... your barbecue config
  theme = 'tokyonight',
  -- ... your barbecue config
}
-- Lua
require('lualine').setup {
  options = {
    -- ... your lualine config
    theme = 'tokyonight'
    -- ... your lualine config
  }
}
" 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.

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.