Skip to content

Integrations

alsi-lawr edited this page Jul 16, 2026 · 4 revisions

Integrations

Neotheme includes opt-in highlight definitions for 15 plugin surfaces. Every integration defaults to false.

Enable integrations

require("neotheme").setup({
	integrations = {
		bufferline = true,
		gitsigns = true,
		nvim_tree = true,
		telescope = true,
		which_key = true,
	},
})

vim.cmd.colorscheme("neotheme")

Supported integrations

Setup key Plugin surface Highlight coverage
blink_cmp blink.cmp Menu, documentation, labels, kinds, source, and match text
bufferline bufferline.nvim Fill, buffers, tabs, diagnostics, close buttons, and separators
cmp nvim-cmp Menu items, abbreviation matches, kinds, and documentation
fugitive vim-fugitive Git hashes, headings, staged and unstaged changes, and sections
fzf_lua fzf-lua Windows, borders, titles, preview, cursor, matches, and scrollbars
gitsigns gitsigns.nvim Added, changed, deleted, current-line, number, and preview states
lazy lazy.nvim UI Headers, buttons, properties, progress, reasons, and task output
lspsaga lspsaga.nvim Windows, borders, code actions, diagnostics, finder, symbols, and rename UI
noice noice.nvim Popups, borders, command line, completion, format, and virtual text
nvim_tree nvim-tree.lua Canvas, files, folders, Git, diagnostics, clipboard, hidden, modified, and picker states
rainbow_delimiters rainbow-delimiters.nvim Rainbow delimiter levels
snacks snacks.nvim Picker, dashboard, notifier, input, terminal, indent, words, and status states
telescope telescope.nvim Prompt, results, preview, borders, titles, selection, matches, and paths
trouble trouble.nvim Windows, counts, source, code, positions, signs, and indentation
which_key which-key.nvim Window, border, title, keys, groups, descriptions, icons, and separators

Integration loading behavior

Enabling an integration tells Neotheme to define that plugin's highlight groups when the colorscheme loads. Neotheme does not require or load the plugin module itself.

This means:

  • Plugin load order does not need to match integration module load order.
  • Enabling an integration for an absent plugin only creates unused highlight groups.
  • Disabled integrations do not define their plugin-specific groups.
  • Palette customization reaches enabled integrations because their definitions consume the resolved semantic palette.

Apply changes after startup

After changing integration options, replace and apply the configured baseline:

require("neotheme").setup({
	integrations = {
		nvim_tree = true,
	},
})

vim.cmd.colorscheme("neotheme")

Calling setup() alone updates configured state but does not recreate active highlight groups. require("neotheme").reset() can apply the new baseline instead of reloading the colorscheme.

Session switching behavior

:NeothemeSwitch, require("neotheme").switch(), and Enter or Space confirmation inside :Neotheme are integration-aware. Each confirmed switch copies the latest setup options, resolves the selected theme, and reruns the normal highlight pipeline. Enabled integrations remain enabled and receive colors from the confirmed palette; disabled integrations remain absent.

Browser row movement deliberately excludes integrations. It updates only the preview window's core, Tree-sitter, LSP, and diagnostic namespace until the user confirms a selection.

Session switching does not edit integration configuration. See Session Theme Controls.

Lualine is separate

Lualine discovers Neotheme through its theme loader and does not use an integrations.lualine option. Configure it with theme = "neotheme" inside Lualine. See Lualine.

Integration troubleshooting

If a plugin still uses its default colors:

  1. Confirm its exact setup key is true.
  2. Confirm vim.cmd.colorscheme("neotheme") runs after setup.
  3. Check whether the plugin overrides highlights after the ColorScheme event.
  4. Apply the configured baseline after changing integration options.

See Troubleshooting for more diagnostic steps.

See Development for the steps required to contribute a new integration.

Clone this wiki locally