Skip to content

✨ Looking for a theme that fits your vibe? Whether you're into dark mode, light mode, or something in between, this NekoNight has got you covered. Written in Lua for snappy performance, it's a buffet of color schemes for every taste and mood. 🍭

License

MIT, Apache-2.0 licenses found

Licenses found

MIT
LICENSE
Apache-2.0
LICENSE-1.txt
Notifications You must be signed in to change notification settings

BrunoCiccarino/nekonight

Repository files navigation

🏙 Neko Night

lua GitHub last commit GitHub forks GitHub Repo stars Neovim

logo

Looking for a theme that fits your vibe? Whether you're into dark mode, light mode, or something in between, this NekoNight has got you covered. Written in Lua for snappy performance, it's a buffet of color schemes for every taste and mood. 🍭 Want to boost your productivity and look good while coding? We've got countless options to keep you inspired and in the zone. 🚀✨ If you love it (and we know you will), hit that ⭐ on our official repo. Your support means the world! 🌍

Note

This theme is a fork of folke/tokyonight.nvim all rights reserved

🍭 Themes preview

🎨 neovim

Moon Storm
Night Day
Mars Nord
Shades of purple Shades of purple dark
OneDark Fire Obsidian
Palenight Noctis-Uva
Gruvbox Dracula
Doom One Zenburn
Material theme Arcdark
Moonlight Synthwave

✨ Features

  • Supports the latest Neovim 0.9.0 features.
  • Terminal colors.
  • Supports all major plugins.
  • Provides NekoNight extras for numerous other applications.
🎨 nekonight-storm palette
Palette Hex RGB HSL
Background #24283b 36 40 59 225° 25% 19%
Background Dark #1f2335 31 35 53 228° 25% 17%
Background Dark1 #1b1e2d 27 30 45 229° 25% 14%
Background Highlight #292e42 41 46 66 230° 23% 21%
Blue #7aa2f7 122 162 247 223° 89% 73%
Blue0 #3d59a1 61 89 161 224° 45% 44%
Blue1 #2ac3de 42 195 222 189° 78% 52%
Blue2 #0db9d7 13 185 215 191° 88% 45%
Blue5 #89ddff 137 221 255 197° 100% 77%
Blue6 #b4f9f8 180 249 248 179° 88% 84%
Blue7 #394b70 57 75 112 220° 33% 33%
Comment #565f89 86 95 137 227° 22% 44%
Cyan #7dcfff 125 207 255 202° 100% 75%
Dark3 #545c7e 84 92 126 227° 20% 41%
Dark5 #737aa2 115 122 162 227° 20% 54%
Foreground #c0caf5 192 202 245 226° 68% 86%
Foreground Gruvbox #f9f5d7 249 245 215 53° 75% 91%
Foreground Dark #a9b1d6 169 177 214 225° 39% 75%
Foreground Gutter #3b4261 59 66 97 227° 24% 31%
Green #9ece6a 158 206 106 91° 51% 61%
Green1 #73daca 115 218 202 173° 58% 65%
Green2 #41a6b5 65 166 181 189° 47% 48%
Magenta #bb9af7 187 154 247 261° 85% 79%
Magenta2 #ff007c 255 0 124 330° 100% 50%
Orange #ff9e64 255 158 100 22° 100% 70%
Purple #9d7cd8 157 124 216 262° 56% 67%
Red #f7768e 247 118 142 351° 87% 72%
Red1 #db4b4b 219 75 75 0° 65% 58%
Teal #1abc9c 26 188 156 168° 75% 42%
Terminal Black #414868 65 72 104 227° 23% 33%
Yellow #e0af68 224 175 104 34° 69% 64%
🎨 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
fugit2 fugit2
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
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
Alacritty extras/alacritty
Delta extras/delta
(Better-)Discord extras/discord
Dunst extras/dunst
Fish extras/fish
Fish Themes extras/fish_themes
Foot extras/foot
Fuzzel extras/fuzzel
Fzf extras/fzf
Ghostty extras/ghostty
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
Termux extras/termux
Tilix extras/tilix
Tmux extras/tmux
Vim extras/vim
Vscode extras/vscode
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:

{
  "BrunoCiccarino/nekonight",
  lazy = false,
  priority = 1000,
  opts = {},
}

using packer.nvim

return require('packer').startup(function(use)
    -- Other packages can be listed here...

    -- NekoNight Theme
  use 'BrunoCiccarino/nekonight'  
end)

🚀 Usage

vim.cmd[[colorscheme nekonight]]
colorscheme nekonight

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

Some plugins need extra configuration to work with NekoNight.

Click here for more details
-- Lua
require('barbecue').setup {
  -- ... your barbecue config
  theme = 'nekonight',
  -- ... your barbecue config
}
-- Lua
require('lualine').setup {
  options = {
    -- ... your lualine config
    theme = 'nekonight'
    -- ... your lualine config
  }
}
" Vim Script
let g:lightline = {'colorscheme': 'nekonight'}

⚙️ Configuration

Important

Set the configuration BEFORE loading the color scheme with colorscheme nekonight.

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".

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

Default Options
---@class nekonight.Config
---@field on_colors fun(colors: ColorScheme)
---@field on_highlights fun(highlights: nekonight.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 nekonight.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/BrunoCiccarino/nekonight/tree/main/lua/nekonight/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("nekonight").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("nekonight").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

🔥 Contributing

Pull requests are welcome.

That said, there's a bunch of ways you can contribute to this project, like by:

  • ⭐ Giving a star on this repository (this is very important and costs nothing)
  • 🪲 Reporting a bug
  • 📄 Improving this documentation
  • 🚨 Sharing this project and recommending it to your friends
  • 💻 Submitting a pull request to the official repository

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/nekonight/extra/cool-app.lua.

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

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

👏 Acknowledgements