
Catppuccin for Neovim
This port of Catppuccin is special because it was the first one and the one that originated the project itself. Given this, it's important to acknowledge that it all didn't come to be what it is now out of nowhere. So, if you are interested in knowing more about the initial stages of the theme, you can find it under the v0.1 tag.
Previews
🌻 Latte
🪴 Frappé
🌺 Macchiato
🌿 Mocha
Features
Installation
with Neovim 0.12’s vim.pack
vim.pack.add { { src = "https://github.com/catppuccin/nvim", name = "catppuccin" } }
lazy.nvim
{ "catppuccin/nvim", name = "catppuccin", priority = 1000 }
packer.nvim
use { "catppuccin/nvim", as = "catppuccin" }
rocks.nvim
:Rocks install catppuccin.nvim
Vim support
Support for Vim is provided through the vim branch.
vim-plug
Plug 'catppuccin/nvim', { 'branch': 'vim', 'as': 'catppuccin' }
[!NOTE]
Keep in mind that Vim support has been dropped
(#949) and this branch won’t
receive further updates unless necessary. For full Vim support, see
catppuccin/vim. Starting from Vim
v9.2.0219 and Neovim 0.12, catppuccin is shipped with the editors. Note that
it is not maintained by the Catppuccin organization and follows
Vim colorscheme rules
instead of
the official Catppuccin style guide.
Usage
colorscheme catppuccin-nvim " catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mocha
vim.cmd.colorscheme "catppuccin-nvim"
Configuration
There is no need to call setup if you don’t want to change the default options and settings.
require("catppuccin").setup({
flavour = "auto", -- latte, frappe, macchiato, mocha
background = { -- :h background
light = "latte",
dark = "mocha",
},
transparent_background = false, -- disables setting the background color.
float = {
transparent = false, -- enable transparent floating windows
solid = false, -- use solid styling for floating windows, see |winborder|
},
term_colors = false, -- sets terminal colors (e.g. `g:terminal_color_0`)
dim_inactive = {
enabled = false, -- dims the background color of inactive window
shade = "dark",
percentage = 0.15, -- percentage of the shade to apply to the inactive window
},
no_italic = false, -- Force no italic
no_bold = false, -- Force no bold
no_underline = false, -- Force no underline
styles = { -- Handles the styles of general hi groups (see `:h highlight-args`):
comments = { "italic" }, -- Change the style of comments
conditionals = { "italic" },
loops = {},
functions = {},
keywords = {},
strings = {},
variables = {},
numbers = {},
booleans = {},
properties = {},
types = {},
operators = {},
-- miscs = {}, -- Uncomment to turn off hard-coded styles
},
lsp_styles = { -- Handles the style of specific lsp hl groups (see `:h lsp-highlight`).
virtual_text = {
errors = { "italic" },
hints = { "italic" },
warnings = { "italic" },
information = { "italic" },
ok = { "italic" },
},
underlines = {
errors = { "underline" },
hints = { "underline" },
warnings = { "underline" },
information = { "underline" },
ok = { "underline" },
},
inlay_hints = {
background = true,
},
},
color_overrides = {},
custom_highlights = {},
auto_integrations = true,
integrations = {
cmp = true,
gitsigns = true,
nvimtree = true,
notify = false,
mini = {
enabled = true,
indentscope_color = "",
},
-- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations)
},
})
-- setup must be called before loading
vim.cmd.colorscheme "catppuccin-nvim"
Customization
Getting colors
local latte = require("catppuccin.palettes").get_palette "latte"
local frappe = require("catppuccin.palettes").get_palette "frappe"
local macchiato = require("catppuccin.palettes").get_palette "macchiato"
local mocha = require("catppuccin.palettes").get_palette "mocha"
Returns a table where the key is the name of the color and the value is the hex code.
Overwriting colors
Colors can be overwritten using color_overrides, see https://github.com/catppuccin/nvim/discussions/323 for inspiration:
require("catppuccin").setup {
color_overrides = {
all = {
text = "#ffffff",
},
latte = {
base = "#ff0000",
mantle = "#242424",
crust = "#474747",
},
frappe = {},
macchiato = {},
mocha = {},
}
}
Overwriting highlight groups
Global highlight groups can be overwritten, for example:
require("catppuccin").setup {
custom_highlights = function(colors)
return {
Comment = { fg = colors.flamingo },
TabLineSel = { bg = colors.pink },
CmpBorder = { fg = colors.surface2 },
Pmenu = { bg = colors.none },
}
end
}
Highlight groups per flavour can also be overwritten, for example:
require("catppuccin").setup {
highlight_overrides = {
all = function(colors)
return {
NvimTreeNormal = { fg = colors.none },
CmpBorder = { fg = "#3e4145" },
}
end,
latte = function(latte)
return {
Normal = { fg = latte.base },
}
end,
frappe = function(frappe)
return {
["@comment"] = { fg = frappe.surface2, style = { "italic" } },
}
end,
macchiato = function(macchiato)
return {
LineNr = { fg = macchiato.overlay1 },
}
end,
mocha = function(mocha)
return {
Comment = { fg = mocha.flamingo },
}
end,
},
}
Integrations
Catppuccin provides theme support for other plugins in the Neovim ecosystem and extended Neovim functionality through integrations.
To enable/disable an integration you just need to set it to true/false, for example:
require("catppuccin").setup({
integrations = {
cmp = true,
gitsigns = true,
nvimtree = true,
notify = false,
mini = {
enabled = true,
indentscope_color = "",
},
}
})
If you use vim.pack, lazy.nvim or
pckr.nvim to manage your plugins, you
can use the auto_integrations option to let catppuccin automatically detect
installed plugins and enable their respective integrations (this option is
enabled by default).
require("catppuccin").setup({
auto_integrations = true,
})
Below is a list of supported plugins and their corresponding integration module.
| Plugin | Default |
|
aerial.nvim
|
aerial = false
|
|
alpha-nvim
|
alpha = true
|
| artio.nvim |
artio = true
|
|
barbar.nvim
|
barbar = false
|
|
barbecue.nvim
|
barbecue = {
dim_dirname = true, -- directory name is dimmed by default
bold_basename = true,
dim_context = false,
alt_background = false,
},
Special
Use this to set it up:
require("barbecue").setup {
theme = "catppuccin-nvim", -- catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mocha
}
|
|
beacon.nvim
|
beacon = false
|
|
blink.cmp
|
blink_cmp = {
style = 'bordered',
}
|
|
blink.indent
|
blink_indent = true
|
|
blink.pairs
|
blink_pairs = true
Special
Use this to set it up:
require("blink.pairs").setup {
highlights = {
groups = {
"BlinkPairsRed",
"BlinkPairsYellow",
"BlinkPairsBlue",
"BlinkPairsOrange",
"BlinkPairsGreen",
"BlinkPairsPurple",
"BlinkPairsCyan",
},
},
}
|
|
bufferline.nvim
|
Special
Update your bufferline config to use the Catppuccin components:
bufferline needs to be loaded after setting up Catppuccin or it will highlight incorrectly
use "akinsho/bufferline.nvim" {
after = "catppuccin",
config = function()
require("bufferline").setup {
highlights = require("catppuccin.special.bufferline").get_theme()
}
end
}
Configurations are self-explanatory, see :h bufferline-highlights for detailed explanations:
local mocha = require("catppuccin.palettes").get_palette "mocha"
bufferline.setup {
highlights = require("catppuccin.special.bufferline").get_theme {
styles = { "italic", "bold" },
custom = {
all = {
fill = { bg = "#000000" },
},
mocha = {
background = { fg = mocha.text },
},
latte = {
background = { fg = "#000000" },
},
},
},
}
|
|
buffon.nvim
|
buffon = false
|
|
coc.nvim
|
coc_nvim = false
Special
Setting enabled to true enables this integration.
coc_nvim = true,
coc.nvim by default link to native lsp highlight groups so lsp_styles options will also apply to coc
In the nested tables you can set the style for the diagnostics, both virtual_text (what you see on the side) and underlines (what points directly at the thing (e.g. an error)).
lsp_styles = {
virtual_text = {
errors = { "italic" },
hints = { "italic" },
warnings = { "italic" },
information = { "italic" },
ok = { "italic" },
},
underlines = {
errors = { "underline" },
hints = { "underline" },
warnings = { "underline" },
information = { "underline" },
ok = { "underline" },
},
inlay_hints = {
background = true,
},
},
|
|
colorful-winsep.nvim
|
colorful_winsep = {
enabled = false,
color = "red",
}
|
|
dashboard-nvim
|
dashboard = true
|
|
diffview.nvim
|
diffview = false
|
|
dropbar.nvim
|
dropbar = {
enabled = false,
color_mode = false, -- enable color for kind's texts, not just kind's icons
},
|
|
feline.nvim
|
Special
Update your Feline config to use the Catppuccin components:
local ctp_feline = require('catppuccin.special.feline')
ctp_feline.setup()
require("feline").setup({
components = ctp_feline.get_statusline(),
})
Notice that calling setup() is optional. You may pass a lua table in order to change assets, settings and the colors per vim mode.
Here are the defaults:
local clrs = require("catppuccin.palettes").get_palette()
local ctp_feline = require('catppuccin.special.feline')
local U = require "catppuccin.utils.colors"
ctp_feline.setup({
assets = {
left_separator = "",
right_separator = "",
mode_icon = "",
dir = "",
file = "",
lsp = {
server = "",
error = "",
warning = "",
info = "",
hint = "",
},
git = {
branch = "",
added = "",
changed = "",
removed = "",
},
},
sett = {
text = U.vary_color({ latte = latte.base }, clrs.surface0),
bkg = U.vary_color({ latte = latte.crust }, clrs.surface0),
diffs = clrs.mauve,
extras = clrs.overlay1,
curr_file = clrs.maroon,
curr_dir = clrs.flamingo,
show_modified = false, -- show if the file has been modified
show_lazy_updates = false -- show the count of updatable plugins from lazy.nvim
-- need to set checker.enabled = true in lazy.nvim first
-- the icon is set in ui.icons.plugin in lazy.nvim
},
mode_colors = {
["n"] = { "NORMAL", clrs.lavender },
["no"] = { "N-PENDING", clrs.lavender },
["i"] = { "INSERT", clrs.green },
["ic"] = { "INSERT", clrs.green },
["t"] = { "TERMINAL", clrs.green },
["v"] = { "VISUAL", clrs.flamingo },
["V"] = { "V-LINE", clrs.flamingo },
[""] = { "V-BLOCK", clrs.flamingo },
["R"] = { "REPLACE", clrs.maroon },
["Rv"] = { "V-REPLACE", clrs.maroon },
["s"] = { "SELECT", clrs.maroon },
["S"] = { "S-LINE", clrs.maroon },
[""] = { "S-BLOCK", clrs.maroon },
["c"] = { "COMMAND", clrs.peach },
["cv"] = { "COMMAND", clrs.peach },
["ce"] = { "COMMAND", clrs.peach },
["r"] = { "PROMPT", clrs.teal },
["rm"] = { "MORE", clrs.teal },
["r?"] = { "CONFIRM", clrs.mauve },
["!"] = { "SHELL", clrs.green },
},
view = {
lsp = {
progress = true, -- if true the status bar will display an lsp progress indicator
name = false, -- if true the status bar will display the lsp servers name, otherwise it will display the text "Lsp"
exclude_lsp_names = {}, -- lsp server names that should not be displayed when name is set to true
separator = "|", -- the separator used when there are multiple lsp servers
},
}
})
vim.api.nvim_create_autocmd("ColorScheme", {
pattern = "*",
callback = function()
package.loaded["feline"] = nil
package.loaded["catppuccin.special.feline"] = nil
require("feline").setup {
components = require("catppuccin.special.feline").get_statusline(),
}
end,
})
|
|
fern.vim
|
fern = false
|
|
fidget.nvim
|
fidget = false
Special
Set `notification.window.winblend` to `0`:
require("fidget").setup {
notification = {
window = {
winblend = 0,
},
}
-- ... the rest of your fidget config
}
|
|
flash.nvim
|
flash = true
|
|
fzf-lua
|
fzf = true
|
|
gitgraph.nvim
|
gitgraph = false
|
|
gitsigns.nvim
|
gitsigns = true
Special
gitsigns = {
enabled = true,
-- align with the transparent_background option by default
transparent = false,
}
|
|
grug-far.nvim
|
grug_far = false
|
|
harpoon
|
harpoon = false
|
|
headlines.nvim
|
headlines = false
|
|
hop.nvim
|
hop = false
|
|
indent-blankline.nvim
|
indent_blankline = {
enabled = true,
scope_color = "", -- catppuccin color (eg. `lavender`) Default: text
colored_indent_levels = false,
},
Special
colored_indent_levels enables char highlights per indent level. Follow the instructions here to set the latter up.
|
|
leap.nvim
|
leap = false
|
|
lightline.vim
|
Special
let g:lightline = {'colorscheme': 'catppuccin'}
|
|
lightspeed.nvim
|
lightspeed = false
|
|
lir.nvim
|
lir = {
enabled = false,
git_status = false
}
|
|
lspsaga.nvim
|
lsp_saga = false
Special
For custom Lsp Kind Icon and Color
require("lspsaga").setup {
ui = {
kind = require("catppuccin.groups.integrations.lsp_saga").custom_kind(),
},
}
|
|
lualine.nvim
|
-- transparent_bg = opts.transparent_background and "NONE" or C.mantle
lualine = {
normal = {
a = { bg = C.blue, fg = C.mantle, gui = "bold" },
b = { bg = C.surface0, fg = C.blue },
c = { bg = transparent_bg, fg = C.text },
},
insert = {
a = { bg = C.green, fg = C.base, gui = "bold" },
b = { bg = C.surface0, fg = C.green },
},
terminal = {
a = { bg = C.green, fg = C.base, gui = "bold" },
b = { bg = C.surface0, fg = C.green },
},
command = {
a = { bg = C.peach, fg = C.base, gui = "bold" },
b = { bg = C.surface0, fg = C.peach },
},
visual = {
a = { bg = C.mauve, fg = C.base, gui = "bold" },
b = { bg = C.surface0, fg = C.mauve },
},
replace = {
a = { bg = C.red, fg = C.base, gui = "bold" },
b = { bg = C.surface0, fg = C.red },
},
inactive = {
a = { bg = transparent_bg, fg = C.blue },
b = { bg = transparent_bg, fg = C.surface1, gui = "bold" },
c = { bg = transparent_bg, fg = C.overlay0 },
},
},
Special
To implement color overrides in the integrations.lualine spec:
-- In your catppuccin config (integrations):
lualine = {
-- lualine color overrides in the following hierarchy: Catppuccin Flavor -> Mode -> Lualine Section
-- The Catppuccin flavor entry can be any Catpuccin flavor or "all" to apply to all flavors
-- The flavor entry can be either a table or a function which consumes the current Catppuccin palette, just like custom_highlights and color_overrides
all = function(colors)
---@type CtpIntegrationLualineOverride
return {
-- Specifying a normal-mode status line override for section a's background and b's foreground to use lavender like the main Catppuccin theme
normal = {
a = { bg = colors.lavender, gui = "italic" },
b = { fg = colors.lavender },
}
}
end,
-- A macchiato-specific override, which takes priority over 'all'. Also using the direct table syntax instead of function in case you do not rely on dynamic palette colors
macchiato = {
normal = {
a = { bg = "#abcdef" },
}
},
},
-- And in your lualine config:
require('lualine').setup {
options = {
-- lualine will integrate with catppuccin by name or automatically via `vim.g.colors_name` by setting this to "auto"
theme = "catppuccin-nvim"
-- ... the rest of your lualine config
}
}
|
|
markview.nvim
|
markview = false
|
|
mason.nvim
|
mason = false
|
|
mini.nvim
|
mini = {
enabled = true,
indentscope_color = "", -- catppuccin color (eg. `lavender`) Default: text
},
|
|
neo-tree.nvim
|
neotree = true
|
|
neogit
|
neogit = true
|
|
neotest
|
neotest = false
|
|
noice.nvim
|
noice = false
|
|
notifier.nvim
|
notifier = false
|
|
nvim-cmp
|
cmp = true
|
|
copilot.vim
|
copilot_vim = false,
|
|
nvim-dap
|
dap = true
Special
local sign = vim.fn.sign_define
sign("DapBreakpoint", { text = "●", texthl = "DapBreakpoint", linehl = "", numhl = ""})
sign("DapBreakpointCondition", { text = "●", texthl = "DapBreakpointCondition", linehl = "", numhl = ""})
sign("DapLogPoint", { text = "◆", texthl = "DapLogPoint", linehl = "", numhl = ""})
|
|
nvim-dap-ui
|
dap_ui = true
|
|
navic
|
navic = {
enabled = false,
custom_bg = "NONE", -- "lualine" will set background to mantle
},
Special
-- You NEED to enable highlight in nvim-navic setting or it won't work
require("nvim-navic").setup {
highlight = true
}
|
|
nvim-notify
|
notify = false
|
|
nvim-surround
|
nvim_surround = false
|
|
nvim-tree.lua
|
nvimtree = true
|
|
nvim-treesitter-context
|
treesitter_context = true
|
|
nvim-ts-rainbow2
|
ts_rainbow2 = false
|
|
nvim-ts-rainbow
|
ts_rainbow = false
|
|
nvim-ufo
|
ufo = true
|
|
nvim-window-picker
|
window_picker = false
|
|
octo.nvim
|
octo = false
|
|
overseer.nvim
|
overseer = false
|
|
pounce.nvim
|
pounce = false
|
|
rainbow-delimiters.nvim
|
rainbow_delimiters = true
|
|
reactive.nvim
|
Special
There’re 2 available presets (cursor and cursorline) for every flavour.
Here is how you can use them.
require('reactive').setup {
load = { 'catppuccin-mocha-cursor', 'catppuccin-mocha-cursorline' }
}
To use another flavour just replace mocha with the one you want to use.
|
|
render-markdown.nvim
|
render_markdown = true
|
|
snacks.nvim
|
snacks = {
enabled = false,
indent_scope_color = "", -- catppuccin color (eg. `lavender`) Default: overlay2
}
|
|
symbols-outline.nvim
|
This plugin has been archived by the author, consider using outline.nvim
symbols_outline = false
|
|
telekasten.nvim
|
telekasten = false
|
|
telescope.nvim
|
telescope = {
enabled = true,
}
|
|
trouble.nvim
|
lsp_trouble = false
|
|
vim-airline
|
Special
let g:airline_theme = 'catppuccin'
|
|
vim-clap
|
Special
Use this to set it up:
let g:clap_theme = 'catppuccin'
|
|
vim-dadbod-ui
|
dadbod_ui = false
|
|
vim-gitgutter
|
gitgutter = false
|
|
vim-illuminate
|
illuminate = {
enabled = true,
lsp = false
}
|
|
vim-sandwich
|
sandwich = false
|
|
vim-signify
|
signify = false
|
|
vim-sneak
|
vim_sneak = false
|
|
vimwiki
|
vimwiki = false
|
|
which-key.nvim
|
which_key = false
|
Compile
Catppuccin is a highly customizable and configurable colorscheme. This does
however come at the cost of complexity and execution time. Catppuccin can pre
compute the results of your configuration and store the results in a compiled
Lua file. We use these pre-cached values to set it’s highlights.
By default, Catppuccin writes the compiled results into the system’s cache
directory. See below if you’d like to change the cache directory:
require("catppuccin").setup({ -- Note: On windows we replace `/` with `\` by default
compile_path = vim.fn.stdpath "cache" .. "/catppuccin"
})
🙋 FAQ
Why do my Treesitter highlights look incorrect?
Please disable additional_vim_regex_highlighting:
require("nvim-treesitter.configs").setup {
highlight = {
enable = true,
additional_vim_regex_highlighting = false
},
}
Why aren’t my colors the same as the previews?
Catppuccin requires that your terminal supports true color, meaning that your
terminal can display the full range of 16 million colors.
- Supported: iterm2 (macOS), kitty, wezterm, alacritty, see full list…
- Unsupported: Terminal.app (macOS), Terminus, Terminology, see full list…
If you use tmux, make sure to enable true color
support
and italic font
support.
This will prevent issues raised in
#415 and
#428.
💝 Thanks to
Current Maintainer(s)
Previous Maintainer(s)

Copyright © 2021-present Catppuccin Org

评论