vim-nightfly-colors icon indicating copy to clipboard operation
vim-nightfly-colors copied to clipboard

A dark midnight theme for modern Neovim & classic Vim

nightfly

nightfly is a dark GUI colorscheme for Vim & Neovim.

:point_right: I maintain another dark Vim theme named moonfly which may be of interest.

Screenshot

screenshot

Styled Features & Plugins

Vim & Neovim compatible:

Neovim-only:

:zap: Requirements

nightfly is a GUI-only colorscheme.

A GUI client, such as Gvim, or a modern terminal version of Vim or Neovim with termguicolors enabled in a true-color terminal, is required. Details about true-color terminals are listed below.

nightfly explicitly does not support the 256 color cterm version of Vim due to the number of custom colors required. 256 color terminals only allow 16 custom colors. I encourage terminal users to use a true-color terminal, such as: iTerm2, Alacritty, Windows Terminal, or kitty and enable the termguicolors option.

Installation

Install the bluz71/vim-nightfly-guicolors colorscheme with your preferred plugin manager.

vim-plug:

Plug 'bluz71/vim-nightfly-guicolors'

packer.nvim:

use 'bluz71/vim-nightfly-guicolors'

Usage

Enable the colorscheme after the plugin declaration.

" Vimscript initialization file
colorscheme nightfly
-- Lua initialization file
vim.cmd [[colorscheme nightfly]]

Statusline

  • The nightfly colorscheme supports lightline. To enable the nightfly lightline colorscheme please add the following to your initialization file:
let g:lightline = { 'colorscheme': 'nightfly' }
  • The nightfly colorscheme supports vim-airline. The nightfly theme will load once vim-airline starts.

  • The nightfly colorscheme supports Lualine. The nightfly theme will automatically load once Lualine starts.

  • Lastly, my own mistfly-statusline is available for those that want a simple, fast and informative status line.

:wrench: Options

Option Default State
nightflyCursorColor Disabled
nightflyItalics Enabled
nightflyNormalFloat Disabled
nightflyTerminalColors Enabled
nightflyTransparent Disabled
nightflyUndercurls Enabled
nightflyUnderlineMatchParen Disabled
nightflyWinSeparator 1

nightflyCursorColor

The nightflyCursorColor option specifies whether to color the cursor or not. By default the cursor will NOT be colored. If you prefer a colored cursor then add the following to your initialization file:

" Vimscript initialization file
let g:nightflyCursorColor = v:true
-- Lua initialization file
vim.g.nightflyCursorColor = true

nightflyItalics

The nightflyItalics option specifies whether to use italics for comments and certain HTML elements in GUI versions of Vim. By default this option is enabled. If you do not like the appearance of italics then add the following to your initialization file:

" Vimscript initialization file
let g:nightflyItalics = v:false
-- Lua initialization file
vim.g.nightflyItalics = false

nightflyNormalFloat

The nightflyNormalFloat option specifies whether to use nightfly background and foreground colors in Neovim floating windows. By default this option is disabled, hence, Neovim floating windows will usually be styled with popup menu colors. If you would like to use nightfly colors instead then add the following to your configuration:

" Vimscript initialization file
let g:nightflyNormalFloat = v:true
-- Lua initialization file
vim.g.nightflyNormalFloat = true

:bulb: If the above option is set then it is highly recommended to enable floating window borders to distinguish between the edit and floating windows in Neovim's LSP client, for example:

  vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(
    vim.lsp.handlers.hover, {
      border = "single"
    }
  )
  vim.lsp.handlers['textDocument/signatureHelp'] = vim.lsp.with(
    vim.lsp.handlers.signatureHelp, {
      border = "single"
    }
  )
  vim.diagnostic.config({ float = { border = "single" } })

:bulb: Likewise, nvim-cmp may be configured as follows for nicer display when g:nightflyNormalFloat is enabled:

local winhighlight = {
  winhighlight = "Normal:NormalFloat,FloatBorder:FloatBorder,CursorLine:PmenuSel",
}
require('cmp').setup({
  window = {
    completion = cmp.config.window.bordered(winhighlight),
    documentation = cmp.config.window.bordered(winhighlight),
  }
})

nightflyTerminalColors

The nightflyTerminalColors option specifies whether to use the nightfly color palette in :terminal windows when termguicolors is set. By default this option is enabled. If you prefer not to use the nightfly color palette for the first 16 terminal colors then add the following to your initialization file:

" Vimscript initialization file
let g:nightflyTerminalColors = v:false
-- Lua initialization file
vim.g.nightflyTerminalColors = false

nightflyTransparent

The nightflyTransparent option specifies whether to use an opaque or transparent background in GUI versions of Vim. By default this option is disabled. If you would like a transparent background then add the following to your initialization file:

" Vimscript initialization file
let g:nightflyTransparent = v:true
-- Lua initialization file
vim.g.nightflyTransparent = true

nightflyUndercurls

The nightflyUndercurls option specifies whether to use undercurls for spelling and linting errors in GUI versions of Vim, including terminal Vim with termguicolors set. By default this option is enabled. If you do not like the appearance of undercurls then add the following to your initialization file:

" Vimscript initialization file
let g:nightflyUndercurls = v:false
-- Lua initialization file
vim.g.nightflyUndercurls = false

nightflyUnderlineMatchParen

The nightflyUnderlineMatchParen option specifies whether to underline matching parentheses. By default this option is disabled. If you want to underline matching parentheses then add the following to your initialization file:

" Vimscript initialization file
let g:nightflyUnderlineMatchParen = v:true
-- Lua initialization file
vim.g.nightflyUnderlineMatchParen = true

nightflyWinSeparator

The nightflyWinSeparator option specifies the style of window separators:

  • 0 will display no window separators

  • 1 will display block separators; this is the default

  • 2 will diplay line separators

For example, if line separators are desired then add the following to your configuration:

" Vimscript initialization file
let g:nightflyWinSeparator = 2
-- Lua initialization file
vim.g.nightflyWinSeparator = 2

:gift: If using Neovim 0.7 (or later), the following configuration will improve the look of line separators (if option 2 has been chosen) by selecting thicker characters for the separators:

" Vimscript initialization file
set fillchars=horiz:━,horizup:┻,horizdown:┳,vert:┃,vertleft:┨,vertright:┣,verthoriz:╋
-- Lua initialization file
vim.opt.fillchars = { horiz = '━', horizup = '┻', horizdown = '┳', vert = '┃', vertleft = '┫', vertright = '┣', verthoriz = '╋', }

True Color Terminals

Many modern terminals support 24-bit true colors. Current versions of Vim & Neovim on such terminals support true colors when set termguicolors is enabled.

A list of popular terminals that support true colors:

On terminals that support true colors, and when termguicolors is set, the nightfly colorscheme will emit the correct theme colors.

For the nightfly colorscheme to display correctly inside tmux the following setting will usually be required in ~/.tmux.conf:

set -ga terminal-overrides ',xterm-256color:Tc'

Vim, as against Neovim, inside tmux, will also require the following settings be added to the ~/.vimrc file:

let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum"
let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum"

Terminal Themes

A collection of nightfly-flavoured terminal themes are provided:

  • iTerm2 users on macOS can import this colorscheme

  • Alacritty users can copy this theme into their alacritty.yml configuration.

  • Windows Terminal users can copy this theme into their settings.json configuration.

  • kitty users can use this theme

  • GNOME Terminal users can run this script to create a Nightfly profile. Before executing the script, please install the dconf-cli command line utility for modern versions of Gnome (3.28 and later), for example sudo apt install dconf-cli. After executing the script, please set the cursor and selection colors by hand, with the appropriate color values listed below, in Preferences / Nightfly / Colors.

For other terminals please configure appropriately with the following colors:

Type Category Value Color
Background Background #011627 background
Foreground Foreground #acb4c2 background
Bold Bold #eeeeee background
Cursor Cursor #9ca1aa background
Cursor Text Cursor Text #080808 background
Selection Selection #b2ceee background
Selection Text Selection Text #080808 background
Color 1 Black (normal) #1d3b53 background
Color 2 Red (normal) #fc514e background
Color 3 Green (normal) #a1cd5e background
Color 4 Yellow (normal) #e3d18a background
Color 5 Blue (normal) #82aaff background
Color 6 Purple (normal) #c792ea background
Color 7 Cyan (normal) #7fdbca background
Color 8 White (normal) #a1aab8 background
Color 9 Black (bright) #7c8f8f background
Color 10 Red (bright) #ff5874 background
Color 11 Green (bright) #21c7a8 background
Color 12 Yellow (bright) #ecc48d background
Color 13 Blue (bright) #82aaff background
Color 14 Purple (bright) #ae81ff background
Color 15 Cyan (bright) #7fdbca background
Color 16 White (bright) #d6deeb background

Sponsor

Ko-fi

License

License: MIT