# catppuccin **Repository Path**: lauhong/catppuccin ## Basic Information - **Project Name**: catppuccin - **Description**: Mirror of https://github.com/catppuccin/nvim - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-26 - **Last Updated**: 2026-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Logo
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 - Supports [Neovim](https://github.com/neovim/neovim/) >= 0.8 - Highly configurable with 4 different flavours and [the ability to create your own!](https://github.com/catppuccin/nvim/discussions/323) - [Compiled](https://github.com/catppuccin/nvim#Compile) configuration for [fast startup time](https://www.reddit.com/r/neovim/comments/xxfpt3/catppuccinnvim_now_startup_in_1ms/) - Integrations with lsp, treesitter and [a bunch of plugins](https://github.com/catppuccin/nvim#integrations) - Support for [many other applications](https://github.com/catppuccin/catppuccin) ## Installation with Neovim 0.12's `vim.pack` ```lua vim.pack.add { { src = "https://github.com/catppuccin/nvim", name = "catppuccin" } } ``` [lazy.nvim](https://github.com/folke/lazy.nvim) ```lua { "catppuccin/nvim", name = "catppuccin", priority = 1000 } ``` [packer.nvim](https://github.com/wbthomason/packer.nvim) ```lua use { "catppuccin/nvim", as = "catppuccin" } ``` [rocks.nvim](https://github.com/nvim-neorocks/rocks.nvim) ```vim :Rocks install catppuccin.nvim ``` ### Vim support Support for Vim is provided through the `vim` branch. [vim-plug](https://github.com/junegunn/vim-plug) ```vim Plug 'catppuccin/nvim', { 'branch': 'vim', 'as': 'catppuccin' } ``` > [!NOTE] > Keep in mind that Vim support has been dropped > ([#949](https://github.com/catppuccin/nvim/pull/949)) and this branch won't > receive further updates unless necessary. For full Vim support, see > [catppuccin/vim](https://github.com/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](https://github.com/vim/colorschemes?tab=readme-ov-file#providing-better-tooling-and-documentation-to-authors) > instead of > [the official Catppuccin style guide](https://github.com/catppuccin/catppuccin/blob/main/docs/style-guide.md). ## Usage ```vim colorscheme catppuccin-nvim " catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mocha ``` ```lua 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. ```lua 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 = {}, default_integrations = true, auto_integrations = false, 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 ```lua 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: ```lua 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: ```lua 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: ```lua 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: ```lua require("catppuccin").setup({ integrations = { cmp = true, gitsigns = true, nvimtree = true, notify = false, mini = { enabled = true, indentscope_color = "", }, } }) ``` Some integrations are enabled by default, you can control this behaviour with `default_integrations` option. ```lua require("catppuccin").setup({ default_integrations = false, }) ``` If you use [lazy.nvim](https://github.com/folke/lazy.nvim) as your package manager, you can use the `auto_integrations` option to let catppuccin automatically detect installed plugins and enable their respective integrations. ```lua require("catppuccin").setup({ auto_integrations = true, }) ``` Below is a list of supported plugins and their corresponding integration module. > [!Important] > If you'd like to see the full list of highlight groups modified by Catppuccin, see the [`lua/catppuccin/groups/integrations/`](https://github.com/catppuccin/nvim/tree/main/lua/catppuccin/groups/integrations) directory.
Plugin Default
aerial.nvim ```lua aerial = false ```
alpha-nvim ```lua alpha = true ```
artio.nvim ```lua artio = true ```
barbar.nvim ```lua barbar = false ```
barbecue.nvim ```lua 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: ```lua require("barbecue").setup { theme = "catppuccin-nvim", -- catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mocha } ```
beacon.nvim ```lua beacon = false ```
blink.cmp ```lua blink_cmp = { style = 'bordered', } ```
blink.indent ```lua blink_indent = true ```
blink.pairs ```lua blink_pairs = true ```
Special Use this to set it up: ```lua 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: > [!NOTE] > bufferline needs to be loaded after setting up Catppuccin or it will highlight incorrectly ```lua 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: ```lua 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 ```lua buffon = false ```
coc.nvim ```lua coc_nvim = false ```
Special Setting `enabled` to `true` enables this integration. ```lua coc_nvim = true, ``` > [!Note] > 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)). ```lua 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 ```lua colorful_winsep = { enabled = false, color = "red", } ```
dashboard-nvim ```lua dashboard = true ```
diffview.nvim ```lua diffview = false ```
dropbar.nvim ```lua 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: ```lua 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: ```lua 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 }, } }) ``` > [!Warning] > Currently feline [doesn't officially support custom themes](https://github.com/feline-nvim/feline.nvim/issues/302). In order for `:colorscheme catppuccin-` to work you could add this autocmd as a workaround: ```lua 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 ```lua fern = false ```
fidget.nvim ```lua fidget = false ```
Special Set `notification.window.winblend` to `0`: ```lua require("fidget").setup { notification = { window = { winblend = 0, }, } -- ... the rest of your fidget config } ```
flash.nvim ```lua flash = true ```
fzf-lua ```lua fzf = true ```
gitgraph.nvim ```lua gitgraph = false ```
gitsigns.nvim ```lua gitsigns = true ```
Special ```lua gitsigns = { enabled = true, -- align with the transparent_background option by default transparent = false, } ```
grug-far.nvim ```lua grug_far = false ```
harpoon ```lua harpoon = false ```
headlines.nvim ```lua headlines = false ```
hop.nvim ```lua hop = false ```
indent-blankline.nvim ```lua 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](https://github.com/lukas-reineke/indent-blankline.nvim#multiple-indent-colors) to set the latter up.
leap.nvim ```lua leap = false ```
lightline.vim
Special ```vim let g:lightline = {'colorscheme': 'catppuccin'} ```
lightspeed.nvim ```lua lightspeed = false ```
lir.nvim ```lua lir = { enabled = false, git_status = false } ```
lspsaga.nvim ```lua lsp_saga = false ```
Special For custom Lsp Kind Icon and Color ```lua require("lspsaga").setup { ui = { kind = require("catppuccin.groups.integrations.lsp_saga").custom_kind(), }, } ```
lualine.nvim ```lua -- 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: ```lua -- 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 ```lua markview = false ```
mason.nvim ```lua mason = false ```
mini.nvim ```lua mini = { enabled = true, indentscope_color = "", -- catppuccin color (eg. `lavender`) Default: text }, ```
neo-tree.nvim ```lua neotree = true ```
neogit ```lua neogit = true ```
neotest ```lua neotest = false ```
noice.nvim ```lua noice = false ```
notifier.nvim ```lua notifier = false ```
nvim-cmp ```lua cmp = true ```
copilot.vim ```lua copilot_vim = false, ```
nvim-dap ```lua dap = true ```
Special ```lua 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 ```lua dap_ui = true ```
navic ```lua navic = { enabled = false, custom_bg = "NONE", -- "lualine" will set background to mantle }, ```
Special ```lua -- You NEED to enable highlight in nvim-navic setting or it won't work require("nvim-navic").setup { highlight = true } ```
nvim-notify ```lua notify = false ```
nvim-surround ```lua nvim_surround = false ```
nvim-tree.lua ```lua nvimtree = true ```
nvim-treesitter-context ```lua treesitter_context = true ```
nvim-ts-rainbow2 ```lua ts_rainbow2 = false ```
nvim-ts-rainbow ```lua ts_rainbow = false ```
nvim-ufo ```lua ufo = true ```
nvim-window-picker ```lua window_picker = false ```
octo.nvim ```lua octo = false ```
overseer.nvim ```lua overseer = false ```
pounce.nvim ```lua pounce = false ```
rainbow-delimiters.nvim ```lua rainbow_delimiters = true ```
reactive.nvim
Special There're 2 available presets (`cursor` and `cursorline`) for every flavour. Here is how you can use them. ```lua 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 ```lua render_markdown = true ```
snacks.nvim ```lua snacks = { enabled = false, indent_scope_color = "", -- catppuccin color (eg. `lavender`) Default: overlay2 } ```
symbols-outline.nvim > [!NOTE] > This plugin has been archived by the author, consider using [outline.nvim](https://github.com/hedyhli/outline.nvim) ```lua symbols_outline = false ```
telekasten.nvim ```lua telekasten = false ```
telescope.nvim ```lua telescope = { enabled = true, } ```
trouble.nvim ```lua lsp_trouble = false ```
vim-airline
Special ```vim let g:airline_theme = 'catppuccin' ```
vim-clap
Special Use this to set it up: ```vim let g:clap_theme = 'catppuccin' ```
vim-dadbod-ui ```lua dadbod_ui = false ```
vim-gitgutter ```lua gitgutter = false ```
vim-illuminate ```lua illuminate = { enabled = true, lsp = false } ```
vim-sandwich ```lua sandwich = false ```
vim-signify ```lua signify = false ```
vim-sneak ```lua vim_sneak = false ```
vimwiki ```lua vimwiki = false ```
which-key.nvim ```lua 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: ```lua 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`: ```lua 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...](https://github.com/termstandard/colors#truecolor-support-in-output-devices) - Unsupported: Terminal.app (macOS), Terminus, Terminology, [see full list...](https://github.com/termstandard/colors#not-supporting-truecolor) If you use tmux, make sure to enable [true color support](https://gist.github.com/andersevenrud/015e61af2fd264371032763d4ed965b6) and [italic font support](https://gist.github.com/gyribeiro/4192af1aced7a1b555df06bd3781a722). This will prevent issues raised in [#415](https://github.com/catppuccin/nvim/issues/415) and [#428](https://github.com/catppuccin/nvim/issues/428). ## ๐Ÿ’ Thanks to **Current Maintainer(s)** - [vollowx](https://github.com/vollowx) - [robin](https://github.com/comfysage) **Previous Maintainer(s)** - [Pocco81](https://github.com/Pocco81) - [nullchilly](https://github.com/nullchilly) - [mrtnvgr](https://github.com/mrtnvgr)  

Copyright © 2021-present Catppuccin Org