Giter Club home page Giter Club logo

nvim's Introduction

Logo
Catppuccin for (Neo)vim

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

Mocha
Macchiato
Frappe
Latte

You can bake your own flavour! Here are some from our community:

Amoled

#000000! Configuration can be found here

Here is a subset of it:

require("catppuccin").setup {
    flavour = "mocha",
    color_overrides = {
        mocha = {
            base = "#000000",
        },
    },
    integrations = {
        nvimtree = true,
    },
    highlight_overrides = {
        mocha = function(mocha)
            return {
                NvimTreeNormal = { bg = mocha.none },
            }
        end,
    },
}

An attempt to restore the original theme based on Mocha! Configuration can be found here

Catppuccino

Share your custom flavour here! catppuccin#323

Features

Installation

use { "catppuccin/nvim", as = "catppuccin" }
Plug 'catppuccin/nvim', { 'as': 'catppuccin' }

Usage

colorscheme catppuccin " catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mocha
vim.cmd.colorscheme "catppuccin"

Configuration

There is no need to call setup if you don't want to change the default options and settings.

require("catppuccin").setup({
    flavour = "mocha", -- latte, frappe, macchiato, mocha
    background = { -- :h background
        light = "latte",
        dark = "mocha",
    },
    transparent_background = false,
    term_colors = false,
    dim_inactive = {
        enabled = false,
        shade = "dark",
        percentage = 0.15,
    },
    no_italic = false, -- Force no italic
    no_bold = false, -- Force no bold
    styles = {
        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 loading
vim.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!

General

This settings are unrelated to any group and are independent.

  • background: (Table) Match :set background=light/dark with :Catppuccin background.light/dark
  • term_colors: (Boolean) if true, sets terminal colors (e.g. g:terminal_color_0).
  • transparent_background: (Boolean) if true, disables setting the background color.

Dim inactive

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.

Styles

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.

Customize highlights

Get catppuccin 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"

Will returns a table where the key is the name of the color and the value is its hex value corresponding to each flavour.

Overwriting colors

Colors can be overwritten using color_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

Overwriting highlight groups

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 exists
        return {
            <hl_group> = { <fields> }
        }
    end, -- Same for each flavour
    latte = 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,
    },
}

Integrations

catppuccin-nvim provides theme support for other plugins in the Neovim ecosystem and extended Neovim functionality through integrations.

Below is a list of supported plugins and their corresponding integration module. (See Special integrations for more.)

Plugin Module
aerial.nvim aerial
barbar.nvim barbar
beacon.nvim beacon
bufferline.nvim Special
dashboard-nvim dashboard
feline.nvim Special
fern.vim fern
fidget.nvim Special
gitsigns.nvim gitsigns
harpoon harpoon
hop.nvim hop
indent-blankline.nvim Special
leap.nvim leap
lightline.vim Special
lightspeed.nvim lightspeed
lspsaga.nvim lsp_saga, Special
lualine.nvim Special
markdown markdown
mason mason
mini.nvim mini
neo-tree.nvim neotree
neogit neogit
neotest neotest
noice.nvim noice
nvim-cmp cmp
nvim-dap-ui dap, Special
nvim-dap dap, Special
nvim-lspconfig native_lsp, Special
nvim-navic navic, Special
nvim-notify notify
nvim-semantic-tokens semantic_tokens
nvim-tree.lua nvimtree
nvim-treesitter-context treesitter_context
nvim-treesitter treesitter
nvim-ts-rainbow ts_rainbow
overseer.nvim overseer
pounce.nvim pounce
symbols-outline.nvim symbols_outline
telekasten.nvim telekasten
telescope.nvim telescope
trouble.nvim lsp_trouble
vim-airline Special
vim-clap Special
vim-gitgutter gitgutter
vim-illuminate illuminate
vim-sneak vim_sneak
vimwiki vimwiki
which-key.nvim which_key

"Special" module means Special integrations, see https://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 to true, 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,
        semantic_tokens = false,
        symbols_outline = false,
        telekasten = false,
        telescope = true,
        treesitter = true,
        treesitter_context = false,
        ts_rainbow = false,
        vim_sneak = false,
        vimwiki = false,
        which_key = false,

        -- Special integrations, see https://github.com/catppuccin/nvim#special-integrations
        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",
        },
    },
})

Special integrations

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:

local mocha = 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" },
            },
        },
    },
}
feline.nvim

First make sure that the kyazdani42/nvim-web-devicons plugin is installed. Then update your Feline config to use the Catppuccin components:

local ctp_feline = require('catppuccin.groups.integrations.feline')

ctp_feline.setup()

require("feline").setup({
    components = ctp_feline.get(),
})

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.groups.integrations.feline')
local U = require "catppuccin.utils.colors"

ctp_feline.setup({
    assets = {
        left_separator = "๎‚ถ",
        right_separator = "๎‚ด",
        bar = "โ–ˆ",
        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 feline doesn'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"] = nil
        package.loaded["catppuccin.groups.integrations.feline"] = nil
        require("feline").setup {
            components = require("catppuccin.groups.integrations.feline").get(),
        }
    end,
})
fidget.nvim

Set fidget module to true

fidget = true

Then set window.blend to 0:

require("fidget").setup {
    window = {
        blend = 0,
    },
    -- ... the rest of your fidget config
}
indent-blankline.nvim

Setting enabled to true enables this integration. colored_indent_levels enables char highlights per indent level. Follow the instructions here 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):

let g:lightline = {'colorscheme': 'catppuccin'}
lspsaga.nvim

For custom Lsp Kind Icon and Color

require("lspsaga").init_lsp_saga {
    custom_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

Setting enabled to true:

integration = {
    dap = {
        enabled = true,
        enable_ui = true, -- enable nvim-dap-ui
    }
}
-- You NEED to override nvim-dap's default highlight groups, AFTER requiring nvim-dap
require("dap")

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-lspconfig

Setting enabled to true enables this integration. In the inners 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)).

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

Setting enabled to true:

navic = {
    enabled = false,
    custom_bg = "NONE",
},
-- You NEED to enable highlight in nvim-navic setting or it won't work
require("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):

let g:airline_theme = 'catppuccin'
vim-clap

Use this to set it up:

let g: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/.

Compile

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.

Config

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 default
    compile_path = vim.fn.stdpath "cache" .. "/catppuccin"
})

Compile commands

:CatppuccinCompile " Create/update the compile file
require('catppuccin').compile() -- Catppuccin also provide a function to work with the catppuccin compiler.

Hooks

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()
        local colors = require("catppuccin.palettes").get_palette()
        -- do something with colors
    end
})

FAQ

Switch Catppuccin flavour on the fly

:Catppuccin mocha/macchiato/frappe/latte

Note: the command has autocompletion enabled, so you can just press tab to cycle through the flavours

Load other custom highlights later

require("catppuccin.lib.highlighter").syntax()

For example:

local colors = require("catppuccin.palettes").get_palette() -- fetch colors from palette
require("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)

Wrong treesitter highlights

Please disable additional_vim_regex_highlighting

require("nvim-treesitter.configs").setup {
    highlight = {
        enable = true,
        additional_vim_regex_highlighting = false
    },
}

Colors doesn't match preview screenshots

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

Thanks to

ย 

Copyright ยฉ 2021-present Catppuccin Org

nvim's People

Contributors

pocco81 avatar nullchilly avatar emxxjnm avatar jorgebef avatar mrjones2014 avatar lokesh-krishna avatar rav64 avatar vinibispo avatar mizlan avatar gotgenes avatar tarundacoder avatar sgoudham avatar knpwrs avatar suyashtnt avatar augustocdias avatar axieax avatar otherjl0 avatar laxtiz avatar smiteshp avatar mehalter avatar mslalith avatar igorlfs avatar battlech1cken avatar nekowinston avatar ilias777 avatar frdrkolsson avatar bangedorrunt avatar williamhsieh avatar vihu avatar anachronic avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.