- Notifications
You must be signed in to change notification settings - Fork0
🍨 Soothing pastel theme for (Neo)vim
License
nfejzic/catppuccin.nvim
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This port ofCatppuccin 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 thev0.1 tag
Bake your own flavour! Here are someconfig from our community:(background source)
- Supports both vim and neovim (Requiresneovim >= 0.8 orvim >= 9 withlua >= 5.1)
- Highly configurable with 4 different flavours andability to create your own!
- Compile user config forfastest startuptime
- Integrations with lsp, treesitter anda bunch of plugins
- Supports formany other applications
{"catppuccin/nvim",name="catppuccin"}
use {"catppuccin/nvim",as="catppuccin"}
Plug'catppuccin/nvim', {'as':'catppuccin' }
colorscheme catppuccin" catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mocha
vim.cmd.colorscheme"catppuccin"
There is no need to callsetup
if you don't want to change the default options and settings.
require("catppuccin").setup({flavour="mocha",-- latte, frappe, macchiato, mochabackground= {-- :h backgroundlight="latte",dark="mocha", },transparent_background=false,show_end_of_buffer=false,-- show the '~' characters after the end of buffersterm_colors=false,dim_inactive= {enabled=false,shade="dark",percentage=0.15, },no_italic=false,-- Force no italicno_bold=false,-- Force no boldstyles= {comments= {"italic"},conditionals= {"italic"},loops= {},functions= {},keywords= {},strings= {},variables= {},numbers= {},booleans= {},properties= {},types= {},operators= {}, },color_overrides= {},custom_highlights= {},integrations= {cmp=true,gitsigns=true,nvimtree=true,telescope=true,notify=false,mini=false,-- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations) },})-- setup must be called before loadingvim.cmd.colorscheme"catppuccin"
Although settings already have self-explanatory names, here is where you can find info about each one of them and their classifications!
This settings are unrelated to any group and are independent.
background
: (Table) Match :set background=light/dark with :Catppuccin background.light/darkterm_colors
: (Boolean) if true, sets terminal colors (e.g.g:terminal_color_0
).transparent_background
: (Boolean) if true, disables setting the background color.
This setting manages the ability to dim the inactive splits/windows/buffers displayed.
enabled
: (Boolean) if true, dims the background color of inactive window or buffer or split.shade
: (string) sets the shade to apply to the inactive split or window or buffer.percentage
: (number 0 < x < 1) percentage of the shade to apply to the inactive window, split or buffer.
Handles the style of general hi groups (see:h highlight-args
):
comments
: (Table) changed the style of the comments.functions
: (Table) changed the style of the functions.keywords
: (Table) changed the style of the keywords.strings
: (Table) changed the style of the strings.variables
: (Table) changed the style of the variables.
locallatte=require("catppuccin.palettes").get_palette"latte"localfrappe=require("catppuccin.palettes").get_palette"frappe"localmacchiato=require("catppuccin.palettes").get_palette"macchiato"localmocha=require("catppuccin.palettes").get_palette"mocha"
Will returns a table where the key is the name of the color and the value is its hex value corresponding to each flavour.
Colors can be overwritten usingcolor_overrides
in the setting, like so:
require("catppuccin").setup {color_overrides= {all= {text="#ffffff", },latte= {base="#ff0000",mantle="#242424",crust="#474747", },frappe= {},macchiato= {},mocha= {}, }}
Click here to see color palette document
Name | Latte | Frappe | Macchiato | Mocha | Usage |
---|---|---|---|---|---|
rosewater | #dc8a78 | #F2D5CF | #F4DBD6 | #F5E0DC | Winbar |
flamingo | #DD7878 | #EEBEBE | #F0C6C6 | #F2CDCD | Target word |
pink | #ea76cb | #F4B8E4 | #F5BDE6 | #F5C2E7 | Just pink |
mauve | #8839EF | #CA9EE6 | #C6A0F6 | #CBA6F7 | Tag |
red | #D20F39 | #E78284 | #ED8796 | #F38BA8 | Error |
maroon | #E64553 | #EA999C | #EE99A0 | #EBA0AC | Lighter red |
peach | #FE640B | #EF9F76 | #F5A97F | #FAB387 | Number |
yellow | #df8e1d | #E5C890 | #EED49F | #F9E2AF | Warning |
green | #40A02B | #A6D189 | #A6DA95 | #A6E3A1 | Diff add |
teal | #179299 | #81C8BE | #8BD5CA | #94E2D5 | Hint |
sky | #04A5E5 | #99D1DB | #91D7E3 | #89DCEB | Operator |
sapphire | #209FB5 | #85C1DC | #7DC4E4 | #74C7EC | Constructor |
blue | #1e66f5 | #8CAAEE | #8AADF4 | #89B4FA | Diff changed |
lavender | #7287FD | #BABBF1 | #B7BDF8 | #B4BEFE | CursorLine Nr |
text | #4C4F69 | #c6d0f5 | #CAD3F5 | #CDD6F4 | Default fg |
subtext1 | #5C5F77 | #b5bfe2 | #B8C0E0 | #BAC2DE | Indicator |
subtext0 | #6C6F85 | #a5adce | #A5ADCB | #A6ADC8 | Float title |
overlay2 | #7C7F93 | #949cbb | #939AB7 | #9399B2 | Popup fg |
overlay1 | #8C8FA1 | #838ba7 | #8087A2 | #7F849C | Conceal color |
overlay0 | #9CA0B0 | #737994 | #6E738D | #6C7086 | Fold color |
surface2 | #ACB0BE | #626880 | #5B6078 | #585B70 | Default comment |
surface1 | #BCC0CC | #51576d | #494D64 | #45475A | Darker comment |
surface0 | #CCD0DA | #414559 | #363A4F | #313244 | Darkest comment |
base | #EFF1F5 | #303446 | #24273A | #1E1E2E | Default bg |
mantle | #E6E9EF | #292C3C | #1E2030 | #181825 | Darker bg |
crust | #DCE0E8 | #232634 | #181926 | #11111B | Darkest bg |
Global highlight groups can be overwritten in the setting like so:
custom_highlights=function(colors)return {<hl_group>= {<fields> } }end
Here is an example:
require("catppuccin").setup {custom_highlights=function(colors)return {Comment= {fg=colors.flamingo }, ["@constant.builtin"]= {fg=colors.peach,style= {} }, ["@comment"]= {fg=colors.surface2,style= {"italic"} }, }end}
Per flavour highlight groups can be overwritten in the setting like so:
highlight_overrides= {all=function(colors)-- Global highlight, will be replaced with custom_highlights if existsreturn {<hl_group>= {<fields> } }end,-- Same for each flavourlatte=function(latte)end,frappe=function(frappe)end,macchiato=function(macchiato)end,mocha=function(mocha)end,}
Here is an 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, },}
catppuccin-nvim provides theme support for other plugins in the Neovim ecosystem and extended Neovim functionality throughintegrations.
Below is a list of supported plugins and their corresponding integration module. (SeeSpecial integrations for more.)
"Special" module means Special integrations, seehttps://github.com/catppuccin/nvim#special-integrations for more details
These integrations allow catppuccin to set the theme of various plugins. To enable an integration you just need to set it totrue
, for example:
require("catppuccin").setup({integrations= {<module>=<boolean> }})
Click here to see an example config
require("catppuccin").setup({integrations= {aerial=false,barbar=false,beacon=false,cmp=true,coc_nvim=false,dashboard=true,fern=false,fidget=false,gitgutter=false,gitsigns=true,harpoon=false,hop=false,illuminate=false,leap=false,lightspeed=false,lsp_saga=false,lsp_trouble=false,markdown=true,mason=true,mini=false,neogit=false,neotest=false,neotree=false,noice=false,notify=false,nvimtree=true,overseer=false,pounce=false,sandwich=false,semantic_tokens=false,symbols_outline=false,telekasten=false,telescope=true,treesitter=true,treesitter_context=false,ts_rainbow=false,ts_rainbow2=false,vim_sneak=false,vimwiki=false,which_key=false,-- Special integrations, see https://github.com/catppuccin/nvim#special-integrationsbarbecue= {dim_dirname=true, },dap= {enabled=false,enable_ui=false, },indent_blankline= {enabled=true,colored_indent_levels=false, },native_lsp= {enabled=true,virtual_text= {errors= {"italic"},hints= {"italic"},warnings= {"italic"},information= {"italic"}, },underlines= {errors= {"underline"},hints= {"underline"},warnings= {"underline"},information= {"underline"}, }, },navic= {enabled=false,custom_bg="NONE", }, },})
barbecue.nvim
Use this to set it up (Note:catppuccin
is the only valid theme name. It will pick the one set in your config):
require("barbecue").setup {theme="catppuccin",}
The directory name color shown is dimmed by default, you can customize this setting.
integrations= {barbecue= {dim_dirname=true, }}
bufferline.nvim
Update your bufferline config to use the Catppuccin components:
Note: 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.groups.integrations.bufferline").get() }end}
Configurations are self-explanatory, see:h bufferline-highlights
for detailed explanations:
localmocha=require("catppuccin.palettes").get_palette"mocha"bufferline.setup {highlights=require("catppuccin.groups.integrations.bufferline").get {styles= {"italic","bold"},custom= {all= {fill= {bg="#000000"}, },mocha= {background= {fg=mocha.text }, },latte= {background= {fg="#000000"}, }, }, },}
coc.nvim
Settingenabled
totrue
enables this integration.
coc_nvim=true,
Note: coc.nvim by default link to native lsp highlight groups so config from
native_lsp
will also apply to coc
In the inners tables you can set the style for the diagnostics, bothvirtual_text
(what you see on the side) andunderlines
(what points directly at the thing (e.g. an error)).
native_lsp = { enabled = true, virtual_text = { errors = { "italic" }, hints = { "italic" }, warnings = { "italic" }, information = { "italic" }, }, underlines = { errors = { "underline" }, hints = { "underline" }, warnings = { "underline" }, information = { "underline" }, },},
feline.nvim
Update your Feline config to use the Catppuccin components:
localctp_feline=require('catppuccin.groups.integrations.feline')ctp_feline.setup()require("feline").setup({components=ctp_feline.get(),})
Notice that callingsetup()
is optional. You may pass a lua table in order to change assets, settings and the colors per vim mode.
Here are the defaults:
localclrs=require("catppuccin.palettes").get_palette()localctp_feline=require('catppuccin.groups.integrations.feline')localU=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=true-- show if the file has been modified },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 }, }})
Note: Currently felinedoesn't officially support custom themes. In order for
:Catppuccin <flavour>
to work you could add this autocmd as a workaround:
vim.api.nvim_create_autocmd("ColorScheme", {pattern="*",callback=function()package.loaded["feline"]=nilpackage.loaded["catppuccin.groups.integrations.feline"]=nilrequire("feline").setup {components=require("catppuccin.groups.integrations.feline").get(), }end,})
fidget.nvim
Set fidget module totrue
fidget=true
Then setwindow.blend
to0
:
require("fidget").setup {window= {blend=0, },-- ... the rest of your fidget config}
indent-blankline.nvim
Settingenabled
totrue
enables this integration.colored_indent_levels
enables char highlights per indent level. Follow the instructionshere to set the latter up.
indent_blankline= {enabled=true,colored_indent_levels=false,},
lightline.vim
Use this to set it up (Note:catppuccin
is the only valid colorscheme name. It will pick the one set in your config):
letg:lightline= {'colorscheme':'catppuccin'}
lspsaga.nvim
For custom Lsp Kind Icon and Color
require("lspsaga").setup {ui= {kind=require("catppuccin.groups.integrations.lsp_saga").custom_kind(), },}
lualine.nvim
Use this to set it up (Note:catppuccin
is the only valid theme name. It will pick the one set in your config):
require('lualine').setup {options= {theme="catppuccin"-- ... the rest of your lualine config }}
nvim-dap & nvim-dap-ui
Settingenabled
totrue
:
integration= {dap= {enabled=true,enable_ui=true,-- enable nvim-dap-ui }}
-- You NEED to override nvim-dap's default highlight groups, AFTER requiring nvim-daprequire("dap")localsign=vim.fn.sign_definesign("DapBreakpoint", {text="●",texthl="DapBreakpoint",linehl="",numhl=""})sign("DapBreakpointCondition", {text="●",texthl="DapBreakpointCondition",linehl="",numhl=""})sign("DapLogPoint", {text="◆",texthl="DapLogPoint",linehl="",numhl=""})
nvim-lspconfig
Settingenabled
totrue
enables this integration. In the inners tables you can set the style for the diagnostics, bothvirtual_text
(what you see on the side) andunderlines
(what points directly at the thing (e.g. an error)).
native_lsp= {enabled=true,virtual_text= {errors= {"italic"},hints= {"italic"},warnings= {"italic"},information= {"italic"}, },underlines= {errors= {"underline"},hints= {"underline"},warnings= {"underline"},information= {"underline"}, },},
nvim-navic
Settingenabled
totrue
:
navic= {enabled=false,custom_bg="NONE",},
-- You NEED to enable highlight in nvim-navic setting or it won't workrequire("nvim-navic").setup {highlight=true}
vim-airline
Use this to set it up (Note:catppuccin
is the only valid colorscheme name. It will pick the one set in your config):
letg:airline_theme='catppuccin'
vim-clap
Use this to set it up:
letg:clap_theme='catppuccin'
If you'd like to know which highlight groups are being affected by catppuccin, check out this directory:lua/catppuccin/groups/integrations/
.
Note: As of 7/10/2022, catppuccin should be able to automatically recompile when the setup table changed.
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 precached values to set it's highlights.
By default catppuccin writes the compiled results into the system's cache directory. You can change the cache dir using:
require("catppuccin").setup({-- Note: On windows we replace `/` with `\` by defaultcompile_path=vim.fn.stdpath"cache".."/catppuccin"})
:CatppuccinCompile" Create/update the compile file
require('catppuccin').compile()-- Catppuccin also provide a function to work with the catppuccin compiler.
Use them to execute code at certain events. These are the ones available:
Autocmd | Description |
---|---|
ColorSchemePre | Before loading a colorscheme |
ColorScheme | After loading a colorscheme |
They can be used like so:
vim.api.nvim_create_autocmd("ColorSchemePre", {pattern="*",callback=function()print"I ran before loading Catppuccin!"end})vim.api.nvim_create_autocmd("ColorScheme", {pattern="*",callback=function()localcolors=require("catppuccin.palettes").get_palette()-- do something with colorsend})
:Catppuccinmocha/macchiato/frappe/latte
Note: the command has autocompletion enabled, so you can just press tab to cycle through the flavours
require("catppuccin.lib.highlighter").syntax()
For example:
localcolors=require("catppuccin.palettes").get_palette()-- fetch colors from paletterequire("catppuccin.lib.highlighter").syntax({Comment= {fg=colors.surface0 }})
Note: Unlike the
:highlight
command which can update a highlight group, this function completely replaces the definition. (:h nvim_set_hl
)
Please disableadditional_vim_regex_highlighting
require("nvim-treesitter.configs").setup {highlight= {enable=true,additional_vim_regex_highlighting=false },}
Catppuccin requires true color support AKA terminals support the full range of 16 million colors
- Supported: iterm2 (macOS), kitty, wezterm, alacritty, tmux, ...
Full list of support terminals can be found here:https://github.com/termstandard/colors#truecolor-support-in-output-devices
- Unsupported terminal: Terminal.app (macOS), Terminus, Terminology, ...
Full list of Unsupported terminals can be found here:https://github.com/termstandard/colors#not-supporting-truecolor
Copyright © 2021-presentCatppuccin Org