Skip to content

Latest commit

Β 

History

340 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸŒ† Nightfall.nvim

Nightfall.nvim is a clean and eye-friendly Neovim colorscheme designed to enhance your coding experience. With a minimalist aesthetic and multiple flavors, it reduces eye strain and integrates seamlessly with popular plugins, making it perfect for extended coding sessions.

Stars Last commit Forks Issues Repo size LICENSE

✨ Features

  • πŸͺ Three flavors that all cover the same highlight groups.
  • πŸ–ΌοΈ Every highlight group Neovim documents through 0.12, including the newer completion, message and popup border groups.
  • 🌲 Every Treesitter capture Neovim documents, so no language falls back to a default color.
  • 🎟️ LSP diagnostics, virtual lines, inlay hints, code lenses and semantic tokens.
  • 🧩 Thirty-four plugin integrations, each one switchable.
  • πŸ–ŒοΈ Colors and highlight groups you can override per flavor.
  • ⚑️ Compiled once and reused, so startup stays fast.
  • 🏡 Every color checked for contrast against its own background.
  • πŸ–₯️ Matching themes for Alacritty, lazygit and yazi.

🎨 Preview

Click to toggle preview

Nightfall

Nightfall

Deeper Night

Deeper Night

Maron

Maron

πŸš€ Installation

Install Nightfall.nvim with your favourite plugin manager. Calling setup is optional; without it every option keeps its default.

With lazy.nvim:

{
  "2giosangmitom/nightfall.nvim",
  lazy = false,
  priority = 1000,
  opts = {},
  config = function(_, opts)
    require("nightfall").setup(opts)
    vim.cmd.colorscheme("nightfall") -- nightfall, deeper-night, maron
  end,
}

setup has to run before :colorscheme for its options to take effect.

βš™οΈ Options

require("nightfall").setup({
  transparent = false,          -- skip backgrounds so the terminal shows through
  terminal_colors = true,       -- set the terminal_color_* globals
  dim_inactive = false,         -- darken windows without the cursor
  default_integrations = true,  -- start from every integration enabled
  styles = { comments = { italic = true } },
  integrations = { flash = { enabled = false } },
  color_overrides = {},
  highlight_overrides = {},
})

See :h nightfall-config for the full list and every default.

🎨 Customization

color_overrides replaces palette colors before highlights are built, so a replaced color reaches every group that uses it. highlight_overrides replaces highlight groups afterwards. Both are keyed by flavor name, or by all for every flavor, and a flavor's own entry wins over all. An entry of highlight_overrides is a table of groups, or a function that receives the palette and returns one.

require("nightfall").setup({
  color_overrides = {
    all = { fg = "#ffffff" },
    nightfall = { bg = "#0b0b14" },
  },
  highlight_overrides = {
    all = { Normal = { bg = "#120809" } },
    nightfall = function(colors)
      return { Comment = { fg = colors.teal, italic = false } }
    end,
  },
})

Only the keys you name change; the rest of a group keeps the value the colorscheme gave it. See :h nightfall-config for details.

πŸ› οΈ Integrations

Every integration is on by default and takes at least enabled. Some take more: fzf and telescope accept a style of "bordered" or "borderless", and dap, mini, snacks, native_lsp and treesitter have a switch per feature.

require("nightfall").setup({
  integrations = {
    telescope = { enabled = true, style = "borderless" },
    treesitter = { enabled = true, context = true },
    flash = { enabled = false },
  },
})

Set default_integrations = false to start from none of them and opt back in one at a time.

lualine

A matching lualine theme ships with each flavor:

require("lualine").setup({ options = { theme = "nightfall" } })

πŸ–₯️ Beyond Neovim

The extras/ directory carries matching themes for other tools, one file per flavor, generated from the same palettes.

Tool Where it goes
Alacritty Import extras/alacritty/<flavor>.toml from alacritty.toml
lazygit Merge extras/lazygit/<flavor>.yaml into your lazygit config
yazi Copy extras/yazi/<flavor>.toml to ~/.config/yazi/theme.toml

🀝 Contributing

Contributions are welcome, whether they fix bugs, add an integration or improve the documentation.

The repository uses just for every task:

just deps      # clone mini.test and mini.doc into deps/
just test      # run the test suite
just fmt       # format with stylua
just generate  # regenerate doc/nightfall.txt and extras/
just ci        # everything the CI runs

doc/nightfall.txt and everything under extras/ are generated, so change the source and run just generate rather than editing them by hand. CI fails if either is out of date.

Adding an integration means one file at lua/nightfall/groups/integrations/<name>.lua, exporting get(ctx, opts), plus an entry named <name> in the defaults in lua/nightfall/config.lua.

For local development, set vim.g.nightfall_no_cache = true so every reload rebuilds the theme, and reload the plugin on save:

vim.g.nightfall_no_cache = true

vim.api.nvim_create_autocmd("BufWritePost", {
  pattern = "*/lua/nightfall/**.lua",
  group = vim.api.nvim_create_augroup("nightfall_dev", { clear = true }),
  callback = function()
    for module in pairs(package.loaded) do
      if module:match("^nightfall") then package.loaded[module] = nil end
    end

    require("nightfall").setup({})
    vim.cmd.colorscheme(vim.g.colors_name)
    vim.notify("Nightfall reloaded", vim.log.levels.INFO, { title = "Nightfall" })
  end,
})

❀️ Support

Enjoying Nightfall.nvim? Give it a 🌟 on GitHub and share it with others!

πŸ“œ License

This project is licensed under the MIT License.

Thanks to all the amazing contributors πŸ’›

Contributors

πŸŽ–οΈ Acknowledgments

Nightfall.nvim owes gratitude to the following projects for their inspiration and contributions:

About

🍜 Dark theme for neovim

Topics

Resources

Stars

46 stars

Watchers

0 watching

Forks

Sponsor this project

Used by

Contributors

Languages