๐ŸŽจ JB for Neovim

August 30, 2026 ยท View on GitHub

Color scheme for Neovim, inspired by JetBrains IDEs.

Dark Light
CleanShot 2026-08-26 at 14 07 42@2x CleanShot 2026-08-26 at 14 07 03@2x

Features

  • Supports both light and dark themes, with a colorblind-friendly palette for light mode
  • Terminal colors
  • Lualine theme included
  • Lualine component for a Navigation Bar similar to JetBrains IDEs but only for dir path part
  • Generates ProjectColor highlight group based on the path
  • Generates highlights for icons JBIcon<Kind>
  • Provides a table with icons visually similar to JB's ones
Supported Languages
LanguageSyntaxTreesitterSemantic
.ignore Filesn/aโœ… (gitignore)n/a
ApacheConfigโœ…n/an/a
BibTeXโš ๏ธโœ… (bibtex)n/a
Bladen/aโœ… (EmranMR/tree-sitter-blade)n/a
C/C++โš ๏ธโœ… (c,cpp)n/a
CSSโš ๏ธโœ… (css)n/a
EditorConfign/aโœ… (editorconfig)n/a
gitcommitโš ๏ธโœ… (gitcommit)n/a
Goโš ๏ธโœ… (go)โœ… (gopls)
Go Templateโš ๏ธโœ… (gotmpl)n/a
GraphQLโš ๏ธโœ… (graphql)n/a
HTMLโš ๏ธโœ… (html)n/a
Iniโš ๏ธโœ… (ini)n/a
Javaโš ๏ธโœ… (java, javadoc)โœ… (jdtls)
JavaScriptโš ๏ธโœ… (javascript)โœ… (ts_ls)
jjdescriptionโš ๏ธโœ… (jjdescription)n/a
JSONโœ…โœ… (json)n/a
LaTeXโš ๏ธโœ… (latex)n/a
Luaโš ๏ธโœ… (lua,luadoc)โœ… (emmylua_ls)
Markdownโš ๏ธโœ… (markdown,markdown_inline)n/a
Nixโš ๏ธโœ… (nix)โœ… (nil_lsp)
PHPโš ๏ธโœ… (php,phpdoc)n/a
Pythonโš ๏ธโœ… (python)n/a
RegExpโš ๏ธโœ… (regex)n/a
Rubyโš ๏ธโœ… (ruby)โœ… (ruby_lsp)
Rustโš ๏ธโœ… (rust)n/a
Sass/SCSSโš ๏ธโœ… (scss)n/a
Scalaโš ๏ธโœ… (scala)n/a
Shell Scriptโš ๏ธโœ… (bash)n/a
TOMLโš ๏ธโœ… (toml)n/a
Twign/aโœ… (twig)n/a
TypeScriptโš ๏ธโœ… (typescript)โœ… (ts_ls)
TSX/JSXโš ๏ธโœ… (tsx)โœ… (ts_ls)
XMLโš ๏ธโœ… (xml)n/a
Quickfixโœ…n/an/a
YAMLโš ๏ธโœ… (yaml)n/a
Zigโš ๏ธโœ… (zig)โœ… (zls)
Supported Plugins
PluginSource
avante.nvimn/a
blink.cmpn/a
copilot.vimn/a
diffvie.nvimn/a
fzf-luan/a
gitsigns.nvimn/a
indent-blankline.nvimn/a
neogitn/a
netrw.vimn/a
nvim-cmpn/a
nvim-notifyn/a
nvim-scrollbarn/a
snacks.nvimn/a
supermaven-nvimn/a
telescope.nvimn/a
trouble.nvimn/a

Installation

Install the theme with your preferred package manager, such as folke/lazy.nvim:

return {
    "nickkadutskyi/jb.nvim",
    lazy = false,
    priority = 1000,
    opts = {},
    config = function()
        -- require("jb").setup({transparent = true})
        vim.cmd("colorscheme jb")
    end,
}

Plugin Notes

hrsh7th/nvim-cmp

If you use custom view for entries (opts>view>entries>name) cmp creates a custom window instead of native built-in popup. To improve the view you can link highlight groups like this:

window = {
    completion = cmp.config.window.bordered({
        winhighlight = "Normal:Pmenu,FloatBorder:DialogFloatBorder,CursorLine:PmenuSel,Search:None",
    }),
    documentation = cmp.config.window.bordered({
        winhighlight = "Normal:Pmenu,FloatBorder:DialogFloatBorder,CursorLine:PmenuSel,Search:None",
    }),
},

You can have any config just make sure Normal:Pmenu and CursorLine:PmenuSel is present in winhighlight.

Usage

vim.cmd("colorscheme jb")
colorscheme jb

Change light/dark theme:

vim.o.background = "light"
set background=light

Configuration

Important

Set the configuration BEFORE loading the color scheme colorscheme jb.

Default Options
---@class jb.Config
M.defaults = {
    -- Disable bold or italic for all highlights
    disable_hl_args = {
        bold = false,
        italic = false,
    },
    -- Control snacks.nvim related styles
    snacks = {
        explorer = {
            -- Enable folke/snacks.nvim styling for explorer
            enabled = true,
        },
    },
    telescope = {
        -- Enable telescope.nvim styling
        enabled = true,
    },
    -- Type: jb.DisabledPlugin[]
    -- Disable plugin highlight sets by plugin id, e.g. "nvim-telescope/telescope.nvim"
    disabled_plugins = {},
    -- Enable this to remove background from Normal and NormalNC
    transparent = false,
    -- Enable colorblind-friendly palette (light mode only)
    -- Replaces green/purple/teal tokens with blue and near-black alternatives
    colorblind = false,
    integrations = {
        -- Match Ghostty's background to the statusbar while Neovim is open
        ghostty = false,
    },
}

Overriding Colors & Highlight Groups

n/a

Extras

Extra color configs for Kitty, Alacritty, Ghostty can be found in extras. To use them, refer to their respective documentation.

Set integrations.ghostty = true before loading the colorscheme to temporarily match Ghostty's background to the JB statusbar. Ghostty's configured background is restored when Neovim exits.

Note

This integration sets a fixed Ghostty background using OSC 11. While the override is active, Ghostty cannot notify Neovim of background changes when the system switches between light and dark appearances. To keep vim.o.background synchronized with the system theme, use f-person/auto-dark-mode.nvim together with this integration.

Development

IntelliJ color snapshots come from the private plugin in tools/intellij-palette-exporter. That generated file is stored in lua/jb/intellij-palette.json; Neovim highlight mappings are stored separately in lua/jb/highlights.json.

When changing either palette file, regenerate the compiled palette used at runtime:

nvim --headless -u NONE --noplugin \
  +'set runtimepath^=/absolute/path/to/jb.nvim' \
  +'lua dofile("/absolute/path/to/jb.nvim/scripts/generate_palette_compiled.lua")' \
  +qa

Contributing

n/a