Repository: catppuccin/nvim Branch: main Commit: 384f304c8b04 Files: 151 Total size: 299.3 KB Directory structure: gitextract_sldfuu1t/ ├── .editorconfig ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ └── feature_request.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── formatting.yml │ ├── neovim.yml │ ├── patch.yml │ ├── release.yml │ └── tests.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── after/ │ └── queries/ │ ├── css/ │ │ └── highlights.scm │ ├── javascript/ │ │ └── highlights.scm │ └── typescript/ │ └── highlights.scm ├── colors/ │ ├── catppuccin-frappe.lua │ ├── catppuccin-latte.lua │ ├── catppuccin-macchiato.lua │ ├── catppuccin-mocha.lua │ ├── catppuccin-nvim.vim │ └── catppuccin.lua ├── doc/ │ └── catppuccin.txt ├── justfile ├── lua/ │ ├── barbecue/ │ │ └── theme/ │ │ ├── catppuccin-frappe.lua │ │ ├── catppuccin-latte.lua │ │ ├── catppuccin-macchiato.lua │ │ ├── catppuccin-mocha.lua │ │ └── catppuccin-nvim.lua │ ├── catppuccin/ │ │ ├── groups/ │ │ │ ├── editor.lua │ │ │ ├── integrations/ │ │ │ │ ├── aerial.lua │ │ │ │ ├── alpha.lua │ │ │ │ ├── artio.lua │ │ │ │ ├── avante.lua │ │ │ │ ├── barbar.lua │ │ │ │ ├── beacon.lua │ │ │ │ ├── blink_cmp.lua │ │ │ │ ├── blink_indent.lua │ │ │ │ ├── blink_pairs.lua │ │ │ │ ├── buffon.lua │ │ │ │ ├── cmp.lua │ │ │ │ ├── coc_nvim.lua │ │ │ │ ├── colorful_winsep.lua │ │ │ │ ├── copilot_vim.lua │ │ │ │ ├── dadbod_ui.lua │ │ │ │ ├── dap.lua │ │ │ │ ├── dap_ui.lua │ │ │ │ ├── dashboard.lua │ │ │ │ ├── diffview.lua │ │ │ │ ├── dropbar.lua │ │ │ │ ├── fern.lua │ │ │ │ ├── fidget.lua │ │ │ │ ├── flash.lua │ │ │ │ ├── fzf.lua │ │ │ │ ├── gitgraph.lua │ │ │ │ ├── gitgutter.lua │ │ │ │ ├── gitsigns.lua │ │ │ │ ├── grug_far.lua │ │ │ │ ├── harpoon.lua │ │ │ │ ├── headlines.lua │ │ │ │ ├── hop.lua │ │ │ │ ├── illuminate.lua │ │ │ │ ├── indent_blankline.lua │ │ │ │ ├── leap.lua │ │ │ │ ├── lightspeed.lua │ │ │ │ ├── lir.lua │ │ │ │ ├── lsp_saga.lua │ │ │ │ ├── lsp_trouble.lua │ │ │ │ ├── markview.lua │ │ │ │ ├── mason.lua │ │ │ │ ├── mini.lua │ │ │ │ ├── navic.lua │ │ │ │ ├── neogit.lua │ │ │ │ ├── neotest.lua │ │ │ │ ├── neotree.lua │ │ │ │ ├── noice.lua │ │ │ │ ├── notifier.lua │ │ │ │ ├── notify.lua │ │ │ │ ├── nvim_surround.lua │ │ │ │ ├── nvimtree.lua │ │ │ │ ├── octo.lua │ │ │ │ ├── overseer.lua │ │ │ │ ├── pounce.lua │ │ │ │ ├── rainbow_delimiters.lua │ │ │ │ ├── render_markdown.lua │ │ │ │ ├── sandwich.lua │ │ │ │ ├── signify.lua │ │ │ │ ├── snacks.lua │ │ │ │ ├── symbols_outline.lua │ │ │ │ ├── telekasten.lua │ │ │ │ ├── telescope.lua │ │ │ │ ├── treesitter_context.lua │ │ │ │ ├── ts_rainbow.lua │ │ │ │ ├── ts_rainbow2.lua │ │ │ │ ├── ufo.lua │ │ │ │ ├── vim_sneak.lua │ │ │ │ ├── vimwiki.lua │ │ │ │ ├── which_key.lua │ │ │ │ └── window_picker.lua │ │ │ ├── lsp.lua │ │ │ ├── semantic_tokens.lua │ │ │ ├── syntax.lua │ │ │ ├── terminal.lua │ │ │ └── treesitter.lua │ │ ├── init.lua │ │ ├── lib/ │ │ │ ├── compiler.lua │ │ │ ├── detect_integrations.lua │ │ │ ├── hashing.lua │ │ │ ├── highlighter.lua │ │ │ ├── hsluv.lua │ │ │ └── mapper.lua │ │ ├── palettes/ │ │ │ ├── frappe.lua │ │ │ ├── init.lua │ │ │ ├── latte.lua │ │ │ ├── macchiato.lua │ │ │ └── mocha.lua │ │ ├── special/ │ │ │ ├── bufferline.lua │ │ │ └── feline.lua │ │ ├── types.lua │ │ └── utils/ │ │ ├── barbecue.lua │ │ ├── colors.lua │ │ ├── integration_mappings.lua │ │ ├── lualine.lua │ │ └── reactive.lua │ ├── lualine/ │ │ └── themes/ │ │ ├── catppuccin-frappe.lua │ │ ├── catppuccin-latte.lua │ │ ├── catppuccin-macchiato.lua │ │ ├── catppuccin-mocha.lua │ │ └── catppuccin-nvim.lua │ └── reactive/ │ └── presets/ │ ├── catppuccin-frappe-cursor.lua │ ├── catppuccin-frappe-cursorline.lua │ ├── catppuccin-latte-cursor.lua │ ├── catppuccin-latte-cursorline.lua │ ├── catppuccin-macchiato-cursor.lua │ ├── catppuccin-macchiato-cursorline.lua │ ├── catppuccin-mocha-cursor.lua │ └── catppuccin-mocha-cursorline.lua ├── nvim.tera ├── renovate.json ├── scripts/ │ └── generate_integration_mappings_table.lua ├── selene.toml ├── stylua.toml ├── tests/ │ ├── flavour_spec.lua │ ├── hash_spec.lua │ ├── init.lua │ ├── init.vim │ ├── minimal_init.vim │ ├── palette_spec.lua │ └── pattern_spec.lua └── vim.toml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .editorconfig ================================================ # EditorConfig helps developers define and maintain consistent # coding styles between different editors and IDEs # EditorConfig is awesome: https://EditorConfig.org root = true [*] end_of_line = lf charset = utf-8 insert_final_newline = true [*.{lua,tera}] indent_style = tab [*.{diff,md}] trim_trailing_whitespace = false indent_style = space indent_size = 4 ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.yml ================================================ name: Bug report description: Report a problem with Catppuccin labels: [bug] body: - type: textarea attributes: label: "Description" description: "A short description of the problem you are reporting." validations: required: true - type: textarea attributes: label: "Neovim version" description: "Output of `nvim --version` (Catppuccin requires neovim >= 0.8)" render: markdown placeholder: | NVIM v0.9.0 Build type: Release LuaJIT 2.1.0-beta3 validations: required: true - type: input attributes: label: "Terminal and multiplexer" placeholder: "kitty 0.29.2 with tmux 3.3a" validations: required: true - type: markdown attributes: value: | # FOR TMUX USERS FOLLOW THESE GIST BEFORE OPENING THE ISSUE - [Enable true color support](https://gist.github.com/andersevenrud/015e61af2fd264371032763d4ed965b6) to fix the [abnormal colors](https://github.com/catppuccin/nvim/issues/415) - [Enable italic font support](https://gist.github.com/gyribeiro/4192af1aced7a1b555df06bd3781a722) to fix the [incorrect if, then, else, end highlights](https://github.com/catppuccin/nvim/issues/428) - type: input attributes: label: "Catppuccin version / branch / rev" placeholder: "catppuccin v1.4.0" validations: required: true - type: textarea attributes: label: "Steps to reproduce" description: "Steps to reproduce using the minimal config provided below." placeholder: | 1. `nvim -u repro.lua` 2. ... validations: required: true - type: textarea attributes: label: "Expected behavior" description: "A description of the behavior you expected:" validations: required: true - type: textarea attributes: label: "Actual behavior" description: "Observed behavior (may optionally include logs, images, or videos)." validations: required: true - type: textarea attributes: label: Repro description: Minimal `init.lua` to reproduce this issue. Save as `repro.lua` and run with `nvim -u repro.lua` value: | -- DO NOT change the paths and don't remove the colorscheme local root = vim.fn.fnamemodify("./.repro", ":p") -- set stdpaths to use .repro for _, name in ipairs({ "config", "data", "state", "cache" }) do vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name end -- bootstrap lazy local lazypath = root .. "/plugins/lazy.nvim" if not vim.loop.fs_stat(lazypath) then vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", lazypath }) end vim.opt.runtimepath:prepend(lazypath) -- install plugins local plugins = { "catppuccin/nvim", -- add any other plugins here } require("lazy").setup(plugins, { root = root .. "/plugins", }) vim.cmd.colorscheme("catppuccin-nvim") -- add anything else here render: Lua ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: Question url: https://discord.com/servers/catppuccin-907385605422448742 about: Join our discord server for real-time answers and more! ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: "Suggest an idea for the project" title: "" labels: enhancement assignees: "" --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]. My workflow is like this [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/PULL_REQUEST_TEMPLATE.md ================================================ 🎉 First off, thanks for taking the time to contribute! 🎉 Here are some guidelines: - Format code using [stylua](https://github.com/johnnymorganz/stylua). - New plugin integration should be added in alphabetical order: - to the [README](https://github.com/catppuccin/nvim#integrations) (vimdoc is auto-generated). - to [types.lua](https://github.com/catppuccin/nvim/blob/main/lua/catppuccin/types.lua) - Create a topic branch on your fork for your specific PR. - Use [conventionalcommits.org's](https://www.conventionalcommits.org/en/v1.0.0/) rules for explicit and meaningful commit messages. - If it's your first time contributing to a project, then read [About pull requests](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests) on Github's docs. Here are some tips: - Use `vim.g.catppuccin_debug = true` to get live config re-loading ================================================ FILE: .github/workflows/formatting.yml ================================================ name: StyLua on: pull_request: push: paths-ignore: - "*.md" branches: - main jobs: stylua: name: StyLua runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: JohnnyMorganz/stylua-action@v4 with: token: ${{ secrets.GITHUB_TOKEN }} version: latest args: --check --config-path=stylua.toml . ================================================ FILE: .github/workflows/neovim.yml ================================================ --- name: Neovim on: pull_request: push: paths-ignore: - "*.md" branches: - main jobs: ubuntu: name: Ubuntu runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Install Neovim uses: MunifTanjim/setup-neovim-action@v1 - name: Run neovim run: | nvim --version nvim --headless -u tests/init.lua +q macos: name: Macos runs-on: macos-latest steps: - uses: actions/checkout@v5 - name: Install Neovim run: | wget -q https://github.com/neovim/neovim/releases/download/nightly/nvim-macos-x86_64.tar.gz xattr -c ./nvim-macos-x86_64.tar.gz tar xzvf nvim-macos-x86_64.tar.gz &> /dev/null ln -s $(pwd)/nvim-macos-x86_64/bin/nvim /usr/local/bin/nvim - name: Run neovim run: | nvim --version nvim --headless -u tests/init.lua +q windows: name: Windows runs-on: windows-latest steps: - uses: actions/checkout@v5 - name: Install Neovim run: | C:\msys64\usr\bin\wget.exe -q https://github.com/neovim/neovim/releases/download/nightly/nvim-win64.zip 7z x nvim-win64.zip Add-Content $env:GITHUB_PATH ".\nvim-win64\bin\" - name: Run neovim run: | nvim --version nvim --headless -u tests/init.lua +q ================================================ FILE: .github/workflows/patch.yml ================================================ name: Patch on: workflow_dispatch: pull_request: branches: [main] jobs: docs: name: generate vimdoc runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v5 with: ref: ${{ github.head_ref }} - name: panvimdoc uses: kdheepak/panvimdoc@main with: vimdoc: catppuccin description: "Soothing pastel theme for NeoVim" pandoc: "README.md" toc: true version: "nvim >= 0.8.0" treesitter: true - uses: stefanzweifel/git-auto-commit-action@v7 with: commit_message: "docs: auto generate vimdoc" integration-table-gen: needs: [docs] name: update integration table runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v5 with: ref: ${{ github.head_ref }} - name: Install Neovim uses: MunifTanjim/setup-neovim-action@v1 - name: Update integration table run: | nvim -l scripts/generate_integration_mappings_table.lua - uses: stefanzweifel/git-auto-commit-action@v7 with: commit_message: "chore: auto generate integration table" ================================================ FILE: .github/workflows/release.yml ================================================ name: release on: push: branches: [main] workflow_dispatch: jobs: release: name: release runs-on: ubuntu-latest steps: - uses: googleapis/release-please-action@v4 id: release with: release-type: simple package-name: catppuccin - uses: actions/checkout@v5 - name: tag stable versions if: ${{ steps.release.outputs.release_created }} run: | git config user.name github-actions[bot] git config user.email 41898282+github-actions[bot]@users.noreply.github.com git remote add gh-token "https://${{ secrets.GITHUB_TOKEN }}@github.com/googleapis/release-please-action.git" git tag -d stable || true git push origin :stable || true git tag -a stable -m "Last Stable Release" git push origin stable ================================================ FILE: .github/workflows/tests.yml ================================================ --- name: Tests on: pull_request: push: paths-ignore: - "*.md" branches: - main workflow_dispatch: schedule: - cron: '0 0 * * *' # Run every day at midnight UTC jobs: ubuntu: name: Plenary runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 with: path: nvim - uses: actions/checkout@v5 with: ref: user-configs path: user-configs - run: | mv user-configs/tests/* nvim/tests/ - name: Install Neovim uses: MunifTanjim/setup-neovim-action@v1 - name: Fetch dependencies run: | git clone --depth 1 https://github.com/nvim-lua/plenary.nvim ~/.local/share/nvim/site/pack/vendor/start/plenary.nvim ln -s $(pwd) ~/.local/share/nvim/site/pack/vendor/start - name: Run tests working-directory: ./nvim run: | nvim --version [ ! -d tests ] && exit 0 nvim --headless -u tests/minimal_init.vim -c "PlenaryBustedDirectory tests/ {minimal_init = 'tests/minimal_init.vim', sequential = true}" ================================================ FILE: .gitignore ================================================ doc/tags .vscode/ .DS_Store .repro ================================================ FILE: CHANGELOG.md ================================================ # Changelog ## [1.11.0](https://github.com/catppuccin/nvim/compare/v1.10.0...v1.11.0) (2025-07-31) ### Features * automatic integration detection ([#871](https://github.com/catppuccin/nvim/issues/871)) ([44bd5ea](https://github.com/catppuccin/nvim/commit/44bd5ea20a1eccba71ee39e436d2fdf5017f1f80)) * **blink-cmp:** add `style` option ([#867](https://github.com/catppuccin/nvim/issues/867)) ([fa42eb5](https://github.com/catppuccin/nvim/commit/fa42eb5e26819ef58884257d5ae95dd0552b9a66)) * **blink-cmp:** improved support ([#862](https://github.com/catppuccin/nvim/issues/862)) ([d0972f1](https://github.com/catppuccin/nvim/commit/d0972f1de6fa771654bb881879afc27d3ddb7421)) * **buffon:** add buffon.nvim integration ([#855](https://github.com/catppuccin/nvim/issues/855)) ([ae1bac4](https://github.com/catppuccin/nvim/commit/ae1bac4c8026f705ef54677c0353be922480bea5)) * **buffon:** add to auto integration list ([#878](https://github.com/catppuccin/nvim/issues/878)) ([82f3dce](https://github.com/catppuccin/nvim/commit/82f3dcedc9acc242d2d4f98abca02e2f10a75248)) * make bg of `FloatBorder` same as `NormalFloat` ([#877](https://github.com/catppuccin/nvim/issues/877)) ([aac17a6](https://github.com/catppuccin/nvim/commit/aac17a6b20931e6aa6ca036c63a6f59e8c92135a)) * **markview:** add markview integration ([#854](https://github.com/catppuccin/nvim/issues/854)) ([961ec64](https://github.com/catppuccin/nvim/commit/961ec64a14e4b329475fc20226a59a28eb040303)) * **snacks:** add nvchad style for snacks.picker ([#858](https://github.com/catppuccin/nvim/issues/858)) ([84336e0](https://github.com/catppuccin/nvim/commit/84336e08415858f6d835835e81a4f79e585463c6)) * **snacks:** add snacks.picker support ([#853](https://github.com/catppuccin/nvim/issues/853)) ([be1e5e6](https://github.com/catppuccin/nvim/commit/be1e5e6308bb9d016bf5c1565e0f1d5e46400d7a)) * **telescope:** add `nvchad_outlined` style ([aac17a6](https://github.com/catppuccin/nvim/commit/aac17a6b20931e6aa6ca036c63a6f59e8c92135a)) ### Bug Fixes * add missing table based integrations to fix auto integration detection ([#890](https://github.com/catppuccin/nvim/issues/890)) ([6d0d9ae](https://github.com/catppuccin/nvim/commit/6d0d9ae1907443be5dd89ca06875ac14ba3bb655)) * adjust default integration settings ([#863](https://github.com/catppuccin/nvim/issues/863)) ([62dbc84](https://github.com/catppuccin/nvim/commit/62dbc841f48046dfe1be74179e92f53e1c33952c)) * **avante:** link background and border hl ([#865](https://github.com/catppuccin/nvim/issues/865)) ([387b4b1](https://github.com/catppuccin/nvim/commit/387b4b19568cbda82c1d6def9ded31fd6ae7fb99)) * **cursor:** update cursor color to rosewater / base ([#857](https://github.com/catppuccin/nvim/issues/857)) ([a0c769b](https://github.com/catppuccin/nvim/commit/a0c769bc7cd04bbbf258b3d5f01e2bdce744108d)) * **editor:** link `FloatTitle` bg to `NormalFloat` ([#882](https://github.com/catppuccin/nvim/issues/882)) ([d7b413f](https://github.com/catppuccin/nvim/commit/d7b413fdc2c2dfcff1404c0ef1e16c6d8314b20f)) * enable auto detected integrations with table options ([#886](https://github.com/catppuccin/nvim/issues/886)) ([5fa8d24](https://github.com/catppuccin/nvim/commit/5fa8d240944c47261f5e9172dc3dbc790fecaed2)) * **fzf:** link normal and title to defaults ([#883](https://github.com/catppuccin/nvim/issues/883)) ([0cf15ba](https://github.com/catppuccin/nvim/commit/0cf15babf716ed56593da425a236245f709dcbfb)) * **markview:** adjust highlights ([#860](https://github.com/catppuccin/nvim/issues/860)) ([30b1a81](https://github.com/catppuccin/nvim/commit/30b1a81c9f7a5d1b5616da0afff1bfe9aa26e622)) * **markview:** incorrect heading bg when using transparent bg ([56a9dfd](https://github.com/catppuccin/nvim/commit/56a9dfd1e05868cf3189369aad87242941396563)) * **mini.picker:** border and match styling ([#889](https://github.com/catppuccin/nvim/issues/889)) ([94f6e8a](https://github.com/catppuccin/nvim/commit/94f6e8a06b6bb7b8e5529cf9f93adb4654534241)) * **octo:** clear OctoFilePanelFileName hl group ([#875](https://github.com/catppuccin/nvim/issues/875)) ([784e529](https://github.com/catppuccin/nvim/commit/784e529c790b451abd0c169f055fc5ae89af039f)) * **render-markdown:** incorrect heading bg when using transparent bg ([56a9dfd](https://github.com/catppuccin/nvim/commit/56a9dfd1e05868cf3189369aad87242941396563)) ## [1.10.0](https://github.com/catppuccin/nvim/compare/v1.9.0...v1.10.0) (2025-05-04) ### Features * add background highlight to LSP signature help ([#771](https://github.com/catppuccin/nvim/issues/771)) ([de096dd](https://github.com/catppuccin/nvim/commit/de096dd4bc88be563617db50594b2dabe7f1bd86)) * **blink-cmp:** add integration ([#777](https://github.com/catppuccin/nvim/issues/777)) ([abceb64](https://github.com/catppuccin/nvim/commit/abceb64a223aaada38c21e744763d111e73aaf0a)) * **blink-cmp:** support `BlinkCmpLabelMatch` hl ([#802](https://github.com/catppuccin/nvim/issues/802)) ([637d99e](https://github.com/catppuccin/nvim/commit/637d99e638bc6f1efedac582f6ccab08badac0c6)) * **blink.cmp:** highlight `BlinkCmpKindCopilot` as `teal` ([#813](https://github.com/catppuccin/nvim/issues/813)) ([bd80c25](https://github.com/catppuccin/nvim/commit/bd80c256606770395b901f7c0b849517957da882)) * **copilot:** add integration ([#803](https://github.com/catppuccin/nvim/issues/803)) ([b71eacb](https://github.com/catppuccin/nvim/commit/b71eacb06842c493a490d24730f0a7c1fe82b61c)) * **gitgutter:** add LineNr highlights ([#833](https://github.com/catppuccin/nvim/issues/833)) ([4bb938b](https://github.com/catppuccin/nvim/commit/4bb938bbba41d306db18bf0eb0633a5f28fd7ba0)) * **gitsign:** improve gitsign inline add and delete colors ([#808](https://github.com/catppuccin/nvim/issues/808)) ([4965db2](https://github.com/catppuccin/nvim/commit/4965db2d6155c25db4e8417465fc2703fdf4c2b7)) * **integrations:** add support for gitgraph.nvim ([#822](https://github.com/catppuccin/nvim/issues/822)) ([58f1a92](https://github.com/catppuccin/nvim/commit/58f1a926a018b226ce2fd67e0878f1fc9bc45bb7)) * **integrations:** remove normalnvim ([#828](https://github.com/catppuccin/nvim/issues/828)) ([be45e04](https://github.com/catppuccin/nvim/commit/be45e0456b8faf37bd0cfed3c26617cbdad4152b)) * **integrations:** update mini.indentscope ([#821](https://github.com/catppuccin/nvim/issues/821)) ([0b2437b](https://github.com/catppuccin/nvim/commit/0b2437bcc12b4021614dc41fcea9d0f136d94063)) * **PmenuExtra:** add support for PmenuExtra highlights ([#851](https://github.com/catppuccin/nvim/issues/851)) ([b01060e](https://github.com/catppuccin/nvim/commit/b01060ef9e0a9d39681d18eafd91bc4a88114681)) * **reactive:** add cursor color for normal mode ([#834](https://github.com/catppuccin/nvim/issues/834)) ([5b5e3ae](https://github.com/catppuccin/nvim/commit/5b5e3aef9ad7af84f463d17b5479f06b87d5c429)) * **render-markdown:** change code block background to `mantle` ([#774](https://github.com/catppuccin/nvim/issues/774)) ([7be452e](https://github.com/catppuccin/nvim/commit/7be452ee067978cdc8b2c5f3411f0c71ffa612b9)) * **signify:** add vim-signify integration ([#850](https://github.com/catppuccin/nvim/issues/850)) ([54fb7f4](https://github.com/catppuccin/nvim/commit/54fb7f43e1eeadd2401a002d4856760c3f12a55c)) * **snacks:** add indent highlights ([#827](https://github.com/catppuccin/nvim/issues/827)) ([57c4077](https://github.com/catppuccin/nvim/commit/57c4077c4c1eb8430de4ae001738aa55f0a79fd8)) * **snacks:** add integration ([#807](https://github.com/catppuccin/nvim/issues/807)) ([f8a155a](https://github.com/catppuccin/nvim/commit/f8a155ab5891c5d2fb709b7e85627f1783d5a5d9)) ### Bug Fixes * **blink-cmp:** follow `Pmenu` highlights ([#799](https://github.com/catppuccin/nvim/issues/799)) ([35d8057](https://github.com/catppuccin/nvim/commit/35d8057137af463c9f41f169539e9b190d57d269)) * **colorful-winsep:** respect transparent_background configuration ([#775](https://github.com/catppuccin/nvim/issues/775)) ([9e6ec28](https://github.com/catppuccin/nvim/commit/9e6ec281f58038e5b30ce9a8828e6f9f9d744a27)) * **dap-ui:** add colors for *NC hlgroups of UI controls ([#783](https://github.com/catppuccin/nvim/issues/783)) ([d9ee9a3](https://github.com/catppuccin/nvim/commit/d9ee9a35f46f0a2bda9a15b5a763fee4095428fd)) * **editor:** add missing background for `TabLineFill` ([#757](https://github.com/catppuccin/nvim/issues/757)) ([bfdd6b3](https://github.com/catppuccin/nvim/commit/bfdd6b3833e991fa45c3d5931ffed853dca60fab)) * **editor:** make TabLine more readable ([#760](https://github.com/catppuccin/nvim/issues/760)) ([4fd72a9](https://github.com/catppuccin/nvim/commit/4fd72a9ab64b393c2c22b168508fd244877fec96)) * **editor:** more "modern" tabline ([#776](https://github.com/catppuccin/nvim/issues/776)) ([5ea0888](https://github.com/catppuccin/nvim/commit/5ea0888e9003f1457d13685ac76f046af26a5524)) * **gitsigns:** respect transparent option for gitsigns ([#844](https://github.com/catppuccin/nvim/issues/844)) ([2dfca93](https://github.com/catppuccin/nvim/commit/2dfca93e077a1568cc9d4a9d88eaabcf5fd4142c)) * **kitty:** respect `transparent_background` option ([#786](https://github.com/catppuccin/nvim/issues/786)) ([08efbef](https://github.com/catppuccin/nvim/commit/08efbefa415fbe8ae48799cddc6a5783d2465375)) * match fzf-lua highlights to telescope ([#812](https://github.com/catppuccin/nvim/issues/812)) ([f67b886](https://github.com/catppuccin/nvim/commit/f67b886d65a029f12ffa298701fb8f1efd89295d)) * **nvim-surround:** bg conflicts with document highlight ([#800](https://github.com/catppuccin/nvim/issues/800)) ([a4c64d7](https://github.com/catppuccin/nvim/commit/a4c64d7605f6eb95674e322bbbedfaa00aab7904)) * **octo:** incorrect highlight backgrounds ([#836](https://github.com/catppuccin/nvim/issues/836)) ([7ab1a6e](https://github.com/catppuccin/nvim/commit/7ab1a6ec70a664ecb95d84669efc20aaf4f4ed1b)) * respect transparent option for gitsigns integration ([#826](https://github.com/catppuccin/nvim/issues/826)) ([ebfb647](https://github.com/catppuccin/nvim/commit/ebfb6471cc4faa107234def49c308e95e44fd056)) * **syntax:** use `overlay2` for comments ([#768](https://github.com/catppuccin/nvim/issues/768)) ([147e7cf](https://github.com/catppuccin/nvim/commit/147e7cfb5b7ec05702468c332cf7e378d935abd3)) ### Reverts * fix(kitty): respect `transparent_background` option ([#794](https://github.com/catppuccin/nvim/issues/794)) ([65bf0b1](https://github.com/catppuccin/nvim/commit/65bf0b16f57a3db70d6a93ac68882dd9a31d0565)) ## [1.9.0](https://github.com/catppuccin/nvim/compare/v1.8.0...v1.9.0) (2024-08-09) ### Features * add fzf-lua integration ([#746](https://github.com/catppuccin/nvim/issues/746)) ([05206bb](https://github.com/catppuccin/nvim/commit/05206bbb6d500a339cd55a9486532c3871a4455e)) * add lir.nvim and lir-git-status.nvim integration ([#705](https://github.com/catppuccin/nvim/issues/705)) ([d3907de](https://github.com/catppuccin/nvim/commit/d3907deedf74d1d5bd3bb990bff2db2ebc916c56)) * add markdown.nvim integration ([ba41328](https://github.com/catppuccin/nvim/commit/ba413282677e1027a42d6ff585115d3e1df12b66)) * add vim-dadbod-ui integration ([#747](https://github.com/catppuccin/nvim/issues/747)) ([4db4c77](https://github.com/catppuccin/nvim/commit/4db4c77cc17d23aa90b393f3e550ce99b9e903d5)) * **render-markdown:** add highlights for callouts ([03a2f35](https://github.com/catppuccin/nvim/commit/03a2f354456373c199eb7829fd14120cc2099108)) * **terminal:** highlight `TermCursor` and `TermCursorNC` ([#749](https://github.com/catppuccin/nvim/issues/749)) ([548b2a2](https://github.com/catppuccin/nvim/commit/548b2a25415bb60e05c536b7658aa8ffbfeb3e45)) ## [1.8.0](https://github.com/catppuccin/nvim/compare/v1.7.0...v1.8.0) (2024-07-25) ### Features * add `grug-far.nvim` integration ([#735](https://github.com/catppuccin/nvim/issues/735)) ([07f1ee8](https://github.com/catppuccin/nvim/commit/07f1ee861394c163d1f1d3e1926eb309e0c81027)) * **bufferline:** add `indicator_visible` and `modified_visible` ([#716](https://github.com/catppuccin/nvim/issues/716)) ([cc8e290](https://github.com/catppuccin/nvim/commit/cc8e290d4c0d572171243087f8541e49be2c8764)) * **csv:** built-in rainbow highlighting ([#720](https://github.com/catppuccin/nvim/issues/720)) ([67565cd](https://github.com/catppuccin/nvim/commit/67565cd353fa543fa30cb738570c2e4c87da3e9c)) * **diffview:** add diffview integrations ([#700](https://github.com/catppuccin/nvim/issues/700)) ([182f256](https://github.com/catppuccin/nvim/commit/182f25640f85a3da2f1f22b088848d896a50fcce)) * **feline:** add lazy.nvim updates module, replace deprecated API ([#725](https://github.com/catppuccin/nvim/issues/725)) ([47bd419](https://github.com/catppuccin/nvim/commit/47bd419c0cb776cb0a67ebb525891eca44020b59)) * **feline:** allow to hide lazy.nvim updates ([#731](https://github.com/catppuccin/nvim/issues/731)) ([7946d1a](https://github.com/catppuccin/nvim/commit/7946d1a195c66fed38b3e34f9fa8e0c5a2da0700)) * **integration:** add colorful-winsep.nvim ([#701](https://github.com/catppuccin/nvim/issues/701)) ([30481d6](https://github.com/catppuccin/nvim/commit/30481d659b6524e6bcae0756201d737e5bc1f209)) * **mini:** add new highlight groups ([#721](https://github.com/catppuccin/nvim/issues/721)) ([6827a67](https://github.com/catppuccin/nvim/commit/6827a6763888f73df686f32c0e5ffb5b6b754d7b)) * **nvim-surround:** add integration ([#733](https://github.com/catppuccin/nvim/issues/733)) ([3f16c6d](https://github.com/catppuccin/nvim/commit/3f16c6d1f25bcb641f7b59f7108b9f4533974c41)) * support new "Ok" diagnostics ([5215ea5](https://github.com/catppuccin/nvim/commit/5215ea59df6d0a7e27da9a5cd1165e06d1b04cbe)) * **treesitter-content:** highlight line number ([#709](https://github.com/catppuccin/nvim/issues/709)) ([4edca6b](https://github.com/catppuccin/nvim/commit/4edca6bed2ccc2715317725985c692ef0a992a50)) ### Bug Fixes * **dapui:** border match bg color ([#727](https://github.com/catppuccin/nvim/issues/727)) ([4ea0173](https://github.com/catppuccin/nvim/commit/4ea01738dc7b872f0081e7093e46d418d8d4c5a1)) * **defaults:** Enable mini integration by default ([894efb5](https://github.com/catppuccin/nvim/commit/894efb557728e532aa98b98029d16907a214ec05)) * **leap:** highlight group for LeapLabel ([2d3419c](https://github.com/catppuccin/nvim/commit/2d3419c2aead379b7d1854d32458f20ffaa58562)) * **neogit:** link WinSeparator ([#713](https://github.com/catppuccin/nvim/issues/713)) ([afccb3d](https://github.com/catppuccin/nvim/commit/afccb3d2377a3d6f0f65405899c9c23b1fd7cc28)) * small typo in feline.lua file ([#719](https://github.com/catppuccin/nvim/issues/719)) ([c0bea77](https://github.com/catppuccin/nvim/commit/c0bea773a09e49e123136b099bce9ddc1bf395d2)) * **treesitter:** highlight paths in `.gitignore` as text ([#736](https://github.com/catppuccin/nvim/issues/736)) ([4374588](https://github.com/catppuccin/nvim/commit/4374588df4e99d403a359cda2ddececcf645d8a9)) ## [1.7.0](https://github.com/catppuccin/nvim/compare/v1.6.0...v1.7.0) (2024-04-13) ### Features * add ability to toggle default integrations ([#687](https://github.com/catppuccin/nvim/issues/687)) ([e60e400](https://github.com/catppuccin/nvim/commit/e60e400c411519f29e203185ddda121d4ec8ef57)) * add support for `outline.nvim` plugin ([#647](https://github.com/catppuccin/nvim/issues/647)) ([048c18f](https://github.com/catppuccin/nvim/commit/048c18fc531703815f5e10765ea46ce9b2c75ae4)) * **defaults:** enable neotree ([c536623](https://github.com/catppuccin/nvim/commit/c536623eac60f8443c93ae4ca0e03b51574b5f50)) * **defaults:** enable treesitter context ([dc392c0](https://github.com/catppuccin/nvim/commit/dc392c067739326c3cff380a8c52b0f31319e6dd)), closes [#683](https://github.com/catppuccin/nvim/issues/683) * **feline:** fix feline integration ([#685](https://github.com/catppuccin/nvim/issues/685)) ([07679af](https://github.com/catppuccin/nvim/commit/07679af1af4f446655682ee2557b5840ac551504)) * **feline:** improve feline lsp display ([#688](https://github.com/catppuccin/nvim/issues/688)) ([f66654d](https://github.com/catppuccin/nvim/commit/f66654d5d5190865333e8e46474c1593302c558e)) * **integration:** add reactive.nvim integration ([#654](https://github.com/catppuccin/nvim/issues/654)) ([151e478](https://github.com/catppuccin/nvim/commit/151e478edf8108cfd451a3cbd44d0a20503e7b42)) * **lsp:** add highlight for `LspCodeLensSeparator` ([#693](https://github.com/catppuccin/nvim/issues/693)) ([02bdd74](https://github.com/catppuccin/nvim/commit/02bdd749931a5d739063562e57531c118e081882)) * set `[@comment](https://github.com/comment).warning` that does not affect readability in gitcommit ([#675](https://github.com/catppuccin/nvim/issues/675)) ([045e349](https://github.com/catppuccin/nvim/commit/045e3499d9ec8d84635fb08877ae44fd33f6a38d)) * **treesitter:** add styles.miscs to disable hardcoded italics ([#659](https://github.com/catppuccin/nvim/issues/659)) ([c0de3b4](https://github.com/catppuccin/nvim/commit/c0de3b46811fe1ce3912e2245a9dfbea6b41c300)) * **treesitter:** follow upstream captures ([#630](https://github.com/catppuccin/nvim/issues/630)) ([f288876](https://github.com/catppuccin/nvim/commit/f288876c6d05d3bb91b0e72b8031fe9e26ef05b8)) * **treesitter:** follow upstream captures ([#694](https://github.com/catppuccin/nvim/issues/694)) ([08c6417](https://github.com/catppuccin/nvim/commit/08c6417bdc3b29e5f8c53e2cfe4067f288d49a54)) * use a more distinguishable color for todos ([#645](https://github.com/catppuccin/nvim/issues/645)) ([657cc4f](https://github.com/catppuccin/nvim/commit/657cc4f35cf193cadac7e5471eb802c97e7a1b59)) ### Bug Fixes * **compile:** string.dump isn't deterministic ([836de8b](https://github.com/catppuccin/nvim/commit/836de8bc1898250b69332e66cbe993058870f849)), closes [#664](https://github.com/catppuccin/nvim/issues/664) * **dropbar:** correct keyword highlight link ([#652](https://github.com/catppuccin/nvim/issues/652)) ([afab7ec](https://github.com/catppuccin/nvim/commit/afab7ec2a79c7127627dede79c0018b6e45663d0)) * ensure consistency between JSX and HTML markup ([#660](https://github.com/catppuccin/nvim/issues/660)) ([9703f22](https://github.com/catppuccin/nvim/commit/9703f227bfab20d04bcee62d2f08f1795723b4ae)) * **flavour:** g:catppuccin_flavour backwards compatibility ([fc98570](https://github.com/catppuccin/nvim/commit/fc98570d85ae772e56dc42cf8d7d6a497a909bdb)) * **flavour:** respect terminal's background ([#696](https://github.com/catppuccin/nvim/issues/696)) ([d5760c5](https://github.com/catppuccin/nvim/commit/d5760c53ae3b48f0f539298ec4165adc5c0afb19)) * **illuminate:** update type ([#690](https://github.com/catppuccin/nvim/issues/690)) ([30930f9](https://github.com/catppuccin/nvim/commit/30930f9656cffd068bcf52ced70cdfffd1e83a44)) * **integrations:** respect default options ([c2e6f8e](https://github.com/catppuccin/nvim/commit/c2e6f8e7eb8d0ebf55700c89bdf842809aeecf09)) * **neotree:** add `NeoTreeModified` ([#642](https://github.com/catppuccin/nvim/issues/642)) ([6853cc8](https://github.com/catppuccin/nvim/commit/6853cc8e6efc76e85e10ec153d05fc2520653508)) * **neotree:** blend sidebar with win separator ([56fb982](https://github.com/catppuccin/nvim/commit/56fb98218d22d5c326387bf9e4076227e7372e6b)), closes [#670](https://github.com/catppuccin/nvim/issues/670) * repair treesitter underlined text (`Underline` -> `Underlined`) ([#663](https://github.com/catppuccin/nvim/issues/663)) ([42b687c](https://github.com/catppuccin/nvim/commit/42b687c42a35633366ed45e562bf921fb914048b)) * respect background variable on startup ([6b7a4df](https://github.com/catppuccin/nvim/commit/6b7a4dfdf241c8be0af6ec691b302e85cce03cab)) * **semantic_tokens:** namespace -> module ([196f301](https://github.com/catppuccin/nvim/commit/196f301de06090c40d7f98297675ac38ae7d6675)) * **treesitter:** some captures missing leading `@` ([#650](https://github.com/catppuccin/nvim/issues/650)) ([bc1f215](https://github.com/catppuccin/nvim/commit/bc1f2151f23227ba02ac203c2c59ad693352a741)) * use external index for lsp counting ([c3572a9](https://github.com/catppuccin/nvim/commit/c3572a968a79b64bd0ef16f2c3e93014f112e66d)) * wrong color shown when using color_overrides ([#658](https://github.com/catppuccin/nvim/issues/658)) ([b76ada8](https://github.com/catppuccin/nvim/commit/b76ada82bf2019d5e343018b4104cc9266900c16)), closes [#657](https://github.com/catppuccin/nvim/issues/657) ## [1.6.0](https://github.com/catppuccin/nvim/compare/v1.5.0...v1.6.0) (2023-12-28) ### Features * add `WinSeparator` highlight group ([#623](https://github.com/catppuccin/nvim/issues/623)) ([988c0b2](https://github.com/catppuccin/nvim/commit/988c0b2dde4140572ed37c6b8b5d5deac0219f9f)) * **bufferline:** support `no_underline` option ([#601](https://github.com/catppuccin/nvim/issues/601)) ([f7638a1](https://github.com/catppuccin/nvim/commit/f7638a1a65cbffdd01a9ddac0018a20ec4be29e2)) * **dashboard:** add highlight groups for `doom` theme ([#593](https://github.com/catppuccin/nvim/issues/593)) ([3bdd5e8](https://github.com/catppuccin/nvim/commit/3bdd5e8296971f8c7ba5e499dac8247c3d621508)) * **integrations:** enable dap & dap_ui by default ([64dc309](https://github.com/catppuccin/nvim/commit/64dc309bc157779691be38bbfc5123584e0a4a85)) * **lualine:** darken lualine `b` section for better readability ([#606](https://github.com/catppuccin/nvim/issues/606)) ([32ee05d](https://github.com/catppuccin/nvim/commit/32ee05d014a4611555c7f56a73283efb4718d9c5)) * **mini.indentscope:** add scope color ([#592](https://github.com/catppuccin/nvim/issues/592)) ([795f639](https://github.com/catppuccin/nvim/commit/795f639ac50d6b8400c1d5868fca54844d579f37)) * **neogit:** support new highlight groups ([#610](https://github.com/catppuccin/nvim/issues/610)) ([f90c7c0](https://github.com/catppuccin/nvim/commit/f90c7c0c467722dc7acacbae3c3904720e09efb6)) * **notify:** add `NotifyBackground` hl group ([#637](https://github.com/catppuccin/nvim/issues/637)) ([c7cf3af](https://github.com/catppuccin/nvim/commit/c7cf3afe2eb6d9058eec4abb3ace2c1da006478a)) ### Bug Fixes * **airline:** missing refresh function ([dcef0a0](https://github.com/catppuccin/nvim/commit/dcef0a062de380885193fb0f919217d58b979753)), closes [#594](https://github.com/catppuccin/nvim/issues/594) * **dashboard:** `orange` -> `peach` ([54002a1](https://github.com/catppuccin/nvim/commit/54002a1adfd543f54352b3ec79d4e62c4163e9ee)) * **flash:** link `FlashPrompt` to `NormalFloat` ([#605](https://github.com/catppuccin/nvim/issues/605)) ([40dc9f0](https://github.com/catppuccin/nvim/commit/40dc9f0621c55bd40da4ad0731fac44d15bb393a)) * **lualine:** match lualine mode colors for insert and terminal ([#597](https://github.com/catppuccin/nvim/issues/597)) ([ea52fe8](https://github.com/catppuccin/nvim/commit/ea52fe8a0b1e4a820df0d0cf9a6a5a0e18c3eaa0)) * **neogit:** remove `NeogitCursorLine` from integration ([#613](https://github.com/catppuccin/nvim/issues/613)) ([5e4be43](https://github.com/catppuccin/nvim/commit/5e4be43e1a6acb044d5c55cd10f22461c40656ed)) * **neogit:** remove diff context highlight fg ([1b40f07](https://github.com/catppuccin/nvim/commit/1b40f072305be71b73c730ff5c7d881e638fd040)), closes [#627](https://github.com/catppuccin/nvim/issues/627) * **neogit:** tweak diff context highlighting ([#614](https://github.com/catppuccin/nvim/issues/614)) ([cc717ac](https://github.com/catppuccin/nvim/commit/cc717acba29259d578548973c41448b092453c52)) * **neotree:** change color of untracked files ([#608](https://github.com/catppuccin/nvim/issues/608)) ([d7521f6](https://github.com/catppuccin/nvim/commit/d7521f6050b94cb0e23067f63829d86886f870fe)) * **neotree:** make popup titlebar text visible ([#618](https://github.com/catppuccin/nvim/issues/618)) ([919d1f7](https://github.com/catppuccin/nvim/commit/919d1f786338ebeced798afbf28cd085cd54542a)) * **noice:** respect transparency ([#632](https://github.com/catppuccin/nvim/issues/632)) ([4fbab1f](https://github.com/catppuccin/nvim/commit/4fbab1f01488718c3d54034a473d0346346b90e3)) * **selene:** allow mixed tables ([#611](https://github.com/catppuccin/nvim/issues/611)) ([9f3c13b](https://github.com/catppuccin/nvim/commit/9f3c13bbcf16fcaec3a429c03743a13e5923f3e3)) * sync focused and unfocused winbars ([#628](https://github.com/catppuccin/nvim/issues/628)) ([079500a](https://github.com/catppuccin/nvim/commit/079500a625f3ae5aa6efb758f1a17fe4c7a57e52)) * **vim:** resolve deprecation of nested [[ ([7a4bcda](https://github.com/catppuccin/nvim/commit/7a4bcdadafc59a5bedbd866c643fa486d8cca4a1)) ## [1.5.0](https://github.com/catppuccin/nvim/compare/v1.4.0...v1.5.0) (2023-09-29) ### Features * add kitty detection ([d3da439](https://github.com/catppuccin/nvim/commit/d3da43907d1896ba3e68a62f18820d1d12574317)) * add ufo integration ([1f53686](https://github.com/catppuccin/nvim/commit/1f536869b1a2ca1710fc892db84d7e8bbc6ad8d9)) * add workaround for kitty transparent issue ([#579](https://github.com/catppuccin/nvim/issues/579)) ([f36fa5c](https://github.com/catppuccin/nvim/commit/f36fa5cdce162450df88298a16631eeed16b68a3)) * **compile:** use indexed cmd ([85e9360](https://github.com/catppuccin/nvim/commit/85e93601e0f0b48aa2c6bbfae4d0e9d7a1898280)) * **illuminate:** enabled by default and optional lsp option ([5b44baa](https://github.com/catppuccin/nvim/commit/5b44baa4aff0ff45c042620ee960d283a79807a1)), closes [#571](https://github.com/catppuccin/nvim/issues/571) * **indent-blankline:** update to v3, add scope color ([#585](https://github.com/catppuccin/nvim/issues/585)) ([f04336b](https://github.com/catppuccin/nvim/commit/f04336ba4a2400ee2c5250068b39541652c0962f)) * **integrations:** add NormalNvim ([0e3c128](https://github.com/catppuccin/nvim/commit/0e3c128eea8a7de692778d52b8429817df5c9040)), closes [#580](https://github.com/catppuccin/nvim/issues/580) * **integrations:** add notifier.nvim ([d029098](https://github.com/catppuccin/nvim/commit/d029098e124f6201a07298c0c1c499ed8d5aef76)), closes [#574](https://github.com/catppuccin/nvim/issues/574) * **lib:** soft deprecate highlighter ([8202348](https://github.com/catppuccin/nvim/commit/82023485fec1703d6f700a4b2a92fd431d4882f4)) * **syntax:** respect style guide part 3 ([#576](https://github.com/catppuccin/nvim/issues/576)) ([81096ca](https://github.com/catppuccin/nvim/commit/81096cabe67f360acb06d64c0f7db8dd840afeba)) ### Bug Fixes * **coc:** improve inlay hints ([#582](https://github.com/catppuccin/nvim/issues/582)) ([3d9a5ed](https://github.com/catppuccin/nvim/commit/3d9a5ed556e289bce6c1fb0af89ec838360641b2)) * **editor:** invisible fold with transparent ([1c15c5e](https://github.com/catppuccin/nvim/commit/1c15c5e51a998c9198d63c6d2b75e9d1e4a84541)), closes [#577](https://github.com/catppuccin/nvim/issues/577) * **template:** broken tmux italic gist link ([128e0d2](https://github.com/catppuccin/nvim/commit/128e0d27946491da979e2e04f5a4acf330ccdefd)) * **treesitter:** invalid string in type builtin ([135f9b0](https://github.com/catppuccin/nvim/commit/135f9b01386fa18da6d75c16ceb83e1aa3669430)) * **ufo:** use folded ellipsis ([846388d](https://github.com/catppuccin/nvim/commit/846388d137590e653390ce2f84fea5351a7516ac)) * **vim:** add vim.env index ([1786287](https://github.com/catppuccin/nvim/commit/17862877792db104d48c3260aec0ace92d55f863)) ### Performance Improvements * **compile:** reduce else statement ([a937d54](https://github.com/catppuccin/nvim/commit/a937d546f4783a1ff67f84043d2d7871ad4ecd83)) ## [1.4.0](https://github.com/catppuccin/nvim/compare/v1.3.0...v1.4.0) (2023-08-21) ### Features * add ability to enable/disable all integrations by default ([#552](https://github.com/catppuccin/nvim/issues/552)) ([737f60a](https://github.com/catppuccin/nvim/commit/737f60a3a25c79d9bb9574092f6c6c958a3d747a)) * add flash.nvim integration ([#550](https://github.com/catppuccin/nvim/issues/550)) ([381eddd](https://github.com/catppuccin/nvim/commit/381edddc4ad12126cfa7276818bca07c3d5606ed)) * enable neogit by default ([91f9f6f](https://github.com/catppuccin/nvim/commit/91f9f6fb413caff2bd06e326ec174deee1c1b7a9)), closes [#568](https://github.com/catppuccin/nvim/issues/568) * **flash:** enable by default ([#551](https://github.com/catppuccin/nvim/issues/551)) ([a84ee18](https://github.com/catppuccin/nvim/commit/a84ee1848bfac4601771805396552bdbaa0a0e91)) * **gitsigns:** Support GitSignsCurrentLineBlame highlights ([#567](https://github.com/catppuccin/nvim/issues/567)) ([3fdd394](https://github.com/catppuccin/nvim/commit/3fdd3942567503d23b65ccc21e7d7757334defd5)) * **lspsaga:** support v0.3 ([#543](https://github.com/catppuccin/nvim/issues/543)) ([3ffd2f5](https://github.com/catppuccin/nvim/commit/3ffd2f511f3dc6c01258923d7170ccaf1445634b)) * **lspsaga:** upstream new hl groups ([#544](https://github.com/catppuccin/nvim/issues/544)) ([e0dd3f9](https://github.com/catppuccin/nvim/commit/e0dd3f9bb1513c98ab4ef9404ea26e18babf858a)) * **neogit:** update highlights ([#545](https://github.com/catppuccin/nvim/issues/545)) ([#549](https://github.com/catppuccin/nvim/issues/549)) ([371430f](https://github.com/catppuccin/nvim/commit/371430f32f2637d2dd5796399b3982d4cada61d8)) * **telescope:** make nvchad style great again ([#538](https://github.com/catppuccin/nvim/issues/538)) ([51961da](https://github.com/catppuccin/nvim/commit/51961da41e8189ca6f9ed73f37dfa83087b4e65c)) * **treesitter-context:** add color for normal background ([#564](https://github.com/catppuccin/nvim/issues/564)) ([b1caff9](https://github.com/catppuccin/nvim/commit/b1caff988fb395c0aae585cecff58b1ffa0a21c6)) ### Bug Fixes * don't highlight fg of `PmenuSel` ([#554](https://github.com/catppuccin/nvim/issues/554)) ([6425df1](https://github.com/catppuccin/nvim/commit/6425df128d46f2db2cccf9aa7a66ca2823c1d153)) * highlight NonText characters ([#547](https://github.com/catppuccin/nvim/issues/547)) ([bfe91df](https://github.com/catppuccin/nvim/commit/bfe91dfb3a19ffd4445e43611fcde68acbb3fed4)) * **integration_default:** hotfix for [#559](https://github.com/catppuccin/nvim/issues/559) ([4913a8b](https://github.com/catppuccin/nvim/commit/4913a8b47554a89a71ed44da39fc1f6e5c2841c3)) * **integration_default:** override `enabled` key only if integration has one ([#559](https://github.com/catppuccin/nvim/issues/559)) ([9709f82](https://github.com/catppuccin/nvim/commit/9709f8251a40e874238d6f9436cf4fba654b60e1)) * **noice:** set background blend to 0 for mini popups ([#556](https://github.com/catppuccin/nvim/issues/556)) ([2d50a4e](https://github.com/catppuccin/nvim/commit/2d50a4e3aecffea4144801bb3c0a3cf7b88fdd6b)) * **nvim-window-picker:** missing table keys ([#569](https://github.com/catppuccin/nvim/issues/569)) ([b9e4dae](https://github.com/catppuccin/nvim/commit/b9e4dae160bf9bc28d4ceb6d29a7e0134b107724)) * **options:** disable deprecated ts_rainbow and ts_rainbow2 by default ([096385d](https://github.com/catppuccin/nvim/commit/096385dd024ecd1332659916fd7f09d7d18d7374)) * **telescope:** keep consistency between the two styles ([#540](https://github.com/catppuccin/nvim/issues/540)) ([dfbc8e2](https://github.com/catppuccin/nvim/commit/dfbc8e2b478a65104d34556698067f2d40f1c227)) * **telescope:** respect transparency ([#542](https://github.com/catppuccin/nvim/issues/542)) ([f36af06](https://github.com/catppuccin/nvim/commit/f36af062e3242f333b12fe9b730053fdda36e000)) * **treesitter:** avoid possible nil ([17ae783](https://github.com/catppuccin/nvim/commit/17ae783b88bb7ae73dc004370473138d9d43ee46)) * **types:** make all options besides nested `enabled` optional ([#565](https://github.com/catppuccin/nvim/issues/565)) ([490078b](https://github.com/catppuccin/nvim/commit/490078b1593c6609e6a50ad5001e7902ea601824)) ## [1.3.0](https://github.com/catppuccin/nvim/compare/v1.2.0...v1.3.0) (2023-07-10) ### Features * auto-sync upstream palettes ([#507](https://github.com/catppuccin/nvim/issues/507)) ([8426d3b](https://github.com/catppuccin/nvim/commit/8426d3bfd55f4dc68ae451a82927d2ff88e47e95)) * **debug:** add auto compile on save ([c9cc5a9](https://github.com/catppuccin/nvim/commit/c9cc5a997f1dae3f35b4bdd62f35958fee363ab4)) * **dropbar:** add new highlight groups ([4f22a1e](https://github.com/catppuccin/nvim/commit/4f22a1e78460ae06e78a1085a8e0e6cc8027aef2)), closes [#503](https://github.com/catppuccin/nvim/issues/503) * **integration:** add dropbar.nvim ([#499](https://github.com/catppuccin/nvim/issues/499)) ([e86aeb8](https://github.com/catppuccin/nvim/commit/e86aeb8ca0f03e97192074fba9dc6c836f953a83)) * **integrations:** accept both boolean and table config ([#534](https://github.com/catppuccin/nvim/issues/534)) ([f0b947a](https://github.com/catppuccin/nvim/commit/f0b947ab8cfdb9ca7ba6230b30bbc1ed48dd30a1)) * **integrations:** add rainbow_delimiters.nvim support ([#530](https://github.com/catppuccin/nvim/issues/530)) ([cc8d3ab](https://github.com/catppuccin/nvim/commit/cc8d3abc944d78cb6bf2a4cc88871ab383c4da62)) * **markdown:** add rainbow headlines ([#493](https://github.com/catppuccin/nvim/issues/493)) ([cc517bd](https://github.com/catppuccin/nvim/commit/cc517bdcb66a0f8dee90bab10ccdd651fa967bbe)) * **native_lsp:** add ability to disable background for inlay hints ([#518](https://github.com/catppuccin/nvim/issues/518)) ([b032ced](https://github.com/catppuccin/nvim/commit/b032cedb90c42a7bfbfbe2f91479505330f4a396)) * **native_lsp:** support inlay hints ([#516](https://github.com/catppuccin/nvim/issues/516)) ([d32b0bb](https://github.com/catppuccin/nvim/commit/d32b0bb5b1033920de5026e326869838aba856ee)) * **navic:** change text color ([278bfeb](https://github.com/catppuccin/nvim/commit/278bfeb61bd627dc2a8885180a0441a1ebe65a41)) * **semantic_tokens:** add some lsp semantic tokens ([#512](https://github.com/catppuccin/nvim/issues/512)) ([506a4aa](https://github.com/catppuccin/nvim/commit/506a4aa13443e0104ea49b99947cc09488d0791d)) * **telescope:** telescope flat style support ([#521](https://github.com/catppuccin/nvim/issues/521)) ([fc73faa](https://github.com/catppuccin/nvim/commit/fc73faa37bda393e3c4f846fb3e810a6ac8aae16)) * **types:** add type annotations ([#495](https://github.com/catppuccin/nvim/issues/495)) ([1d3eda1](https://github.com/catppuccin/nvim/commit/1d3eda15703ba70f57e94e6451db55914ff7017f)) * **workflows:** auto-sync upstream palettes ([e9fbeec](https://github.com/catppuccin/nvim/commit/e9fbeec106562475e82bae79304b6a421eee73f3)) ### Bug Fixes * calling palette before setup ([841d8ab](https://github.com/catppuccin/nvim/commit/841d8abf3be39de833d95a592a1fbbb1b9851296)) * **feline:** disable lsp status on nightly ([#510](https://github.com/catppuccin/nvim/issues/510)) ([9aaf5b4](https://github.com/catppuccin/nvim/commit/9aaf5b4ce5cd256695d8bbddb65869d19919abde)) * **feline:** use new `vim.lsp.status()` method ([#509](https://github.com/catppuccin/nvim/issues/509)) ([57ee09d](https://github.com/catppuccin/nvim/commit/57ee09dd532bd442b53d65c2b2f35550960981ed)) * **lsp:** do not link `LspInlayHint` to `Comment` directly ([#517](https://github.com/catppuccin/nvim/issues/517)) ([5dc566c](https://github.com/catppuccin/nvim/commit/5dc566c4206f383657d67500253559d3be82c421)) * **mapper:** remove unnecessary globals ([#529](https://github.com/catppuccin/nvim/issues/529)) ([c75562c](https://github.com/catppuccin/nvim/commit/c75562cbc954136f279ced91661251543b6f2a20)) * **native_lsp:** boolean logic ([#526](https://github.com/catppuccin/nvim/issues/526)) ([8d02781](https://github.com/catppuccin/nvim/commit/8d02781a638123394f9bc160aad47a9560a113f9)) * **tests:** shadowing variable ([15043d3](https://github.com/catppuccin/nvim/commit/15043d363729f1ef20e615c41bbd8b7e92c1453e)) * **treesitter_context:** underline content if `transparent_background` is true ([#519](https://github.com/catppuccin/nvim/issues/519)) ([6ecc158](https://github.com/catppuccin/nvim/commit/6ecc158dbf365d2cd290b58993296c42b3111965)) * **which-key:** wrong separator highlight group ([d438c01](https://github.com/catppuccin/nvim/commit/d438c0141609338140b18363a9a1e8eb8bb17130)) * **workflows:** stylua format ([2df7036](https://github.com/catppuccin/nvim/commit/2df7036c5c303c9184869936e40ca18935e4afcb)) ================================================ FILE: LICENSE.md ================================================ MIT License Copyright (c) 2021 Catppuccin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================

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 [lazy.nvim](https://github.com/folke/lazy.nvim) ```lua { "catppuccin/nvim", name = "catppuccin", priority = 1000 } ``` [mini.deps](https://github.com/echasnovski/mini.nvim/blob/main/readmes/mini-deps.md) ```lua add({ source = "catppuccin/nvim", name = "catppuccin" }) ``` [packer.nvim](https://github.com/wbthomason/packer.nvim) ```lua use { "catppuccin/nvim", as = "catppuccin" } ``` with Neovim 0.12's `vim.pack` ```lua vim.pack.add({ src = "https://github.com/catppuccin/nvim", name = "catppuccin" }) ``` ### vim support Support for vim is provided through the `vim` branch. ```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) ## 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| }, show_end_of_buffer = false, -- shows the '~' characters after the end of buffers 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

================================================ FILE: after/queries/css/highlights.scm ================================================ ;; extends [ (class_name) ] @property.class [ (id_name) ] @property.id [ (declaration (plain_value) @string.plain) ] [ (tag_name) ] @type.tag ================================================ FILE: after/queries/javascript/highlights.scm ================================================ ;; extends [ "export" ] @keyword.export ================================================ FILE: after/queries/typescript/highlights.scm ================================================ ;; extends [ "export" ] @keyword.export ================================================ FILE: colors/catppuccin-frappe.lua ================================================ require("catppuccin").load "frappe" ================================================ FILE: colors/catppuccin-latte.lua ================================================ require("catppuccin").load "latte" ================================================ FILE: colors/catppuccin-macchiato.lua ================================================ require("catppuccin").load "macchiato" ================================================ FILE: colors/catppuccin-mocha.lua ================================================ require("catppuccin").load "mocha" ================================================ FILE: colors/catppuccin-nvim.vim ================================================ lua require("catppuccin").load() ================================================ FILE: colors/catppuccin.lua ================================================ require("catppuccin").load() ================================================ FILE: doc/catppuccin.txt ================================================ *catppuccin.txt* Soothing pastel theme for NeoVim ============================================================================== Table of Contents *catppuccin-table-of-contents* - Features |catppuccin-features| - Installation |catppuccin-installation| - Usage |catppuccin-usage| - Configuration |catppuccin-configuration| - Customization |catppuccin-customization| - Integrations |catppuccin-integrations| - Compile |catppuccin-compile| - 🙋 FAQ |catppuccin-🙋-faq| - 💝 Thanks to |catppuccin-💝-thanks-to| FEATURES *catppuccin-features* - Supports Neovim >= 0.8 - Highly configurable with 4 different flavours and the ability to create your own! - Compiled configuration for fast startup time - Integrations with lsp, treesitter and a bunch of plugins - Support for many other applications INSTALLATION *catppuccin-installation* lazy.nvim >lua { "catppuccin/nvim", name = "catppuccin", priority = 1000 } < mini.deps >lua add({ source = "catppuccin/nvim", name = "catppuccin" }) < packer.nvim >lua use { "catppuccin/nvim", as = "catppuccin" } < with Neovim 0.12’s `vim.pack` >lua vim.pack.add({ src = "https://github.com/catppuccin/nvim", name = "catppuccin" }) < VIM SUPPORT ~ Support for vim is provided through the `vim` branch. >vim 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 USAGE *catppuccin-usage* >vim colorscheme catppuccin-nvim " catppuccin-latte, catppuccin-frappe, catppuccin-macchiato, catppuccin-mocha < >lua vim.cmd.colorscheme "catppuccin-nvim" < CONFIGURATION *catppuccin-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| }, show_end_of_buffer = false, -- shows the '~' characters after the end of buffers 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 *catppuccin-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-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 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/` directory. PluginDefaultaerial.nvim>lua aerial = false < alpha-nvim>lua alpha = 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.nvimSpecial ~ 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 |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.nvimSpecial ~ 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 . 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 to set the latter up. leap.nvim>lua leap = false < lightline.vimSpecial ~ >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.nvimSpecial ~ 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 >lua symbols_outline = false < telekasten.nvim>lua telekasten = false < telescope.nvim>lua telescope = { enabled = true, } < trouble.nvim>lua lsp_trouble = false < vim-airlineSpecial ~ >vim let g:airline_theme = 'catppuccin' < vim-clapSpecial ~ 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-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 *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… - 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 *catppuccin-💝-thanks-to* **Current Maintainer(s)** - vollowx - robin **Previous Maintainer(s)** - Pocco81 - nullchilly - mrtnvgr Generated by panvimdoc vim:tw=78:ts=8:noet:ft=help:norl: ================================================ FILE: justfile ================================================ _default: @just list build: whiskers nvim.tera ================================================ FILE: lua/barbecue/theme/catppuccin-frappe.lua ================================================ return require "catppuccin.utils.barbecue" "frappe" ================================================ FILE: lua/barbecue/theme/catppuccin-latte.lua ================================================ return require "catppuccin.utils.barbecue" "latte" ================================================ FILE: lua/barbecue/theme/catppuccin-macchiato.lua ================================================ return require "catppuccin.utils.barbecue" "macchiato" ================================================ FILE: lua/barbecue/theme/catppuccin-mocha.lua ================================================ return require "catppuccin.utils.barbecue" "mocha" ================================================ FILE: lua/barbecue/theme/catppuccin-nvim.lua ================================================ return require "catppuccin.utils.barbecue"() ================================================ FILE: lua/catppuccin/groups/editor.lua ================================================ local M = {} function M.get() return { ColorColumn = { bg = C.surface0 }, -- used for the columns set with 'colorcolumn' Conceal = { fg = C.overlay1 }, -- placeholder characters substituted for concealed text (see 'conceallevel') Cursor = { fg = C.base, bg = C.rosewater }, -- character under the cursor lCursor = { fg = C.base, bg = C.rosewater }, -- the character under the cursor when |language-mapping| is used (see 'guicursor') CursorIM = { fg = C.base, bg = C.rosewater }, -- like Cursor, but used when in IME mode |CursorIM| CursorColumn = { bg = C.mantle }, -- Screen-column at the cursor, when 'cursorcolumn' is set. CursorLine = { bg = U.vary_color({ latte = U.lighten(C.mantle, 0.70, C.base) }, U.darken(C.surface0, 0.64, C.base)), }, -- Screen-line at the cursor, when 'cursorline' is set. Low-priority if forecrust (ctermfg OR guifg) is not set. Directory = { fg = C.blue }, -- directory names (and other special names in listings) EndOfBuffer = { fg = O.show_end_of_buffer and C.surface1 or C.base }, -- filler lines (~) after the end of the buffer. By default, this is highlighted like |hl-NonText|. ErrorMsg = { fg = C.red, style = { "bold", "italic" } }, -- error messages on the command line VertSplit = { fg = O.transparent_background and C.surface1 or C.crust }, -- the column separating vertically split windows Folded = { fg = C.blue, bg = O.transparent_background and C.none or C.surface1 }, -- line used for closed folds FoldColumn = { fg = C.overlay0 }, -- 'foldcolumn' SignColumn = { fg = C.surface1 }, -- column where |signs| are displayed SignColumnSB = { bg = C.crust, fg = C.surface1 }, -- column where |signs| are displayed Substitute = { bg = C.surface1, fg = U.vary_color({ latte = C.red }, C.pink) }, -- |:substitute| replacement text highlighting LineNr = { fg = C.surface1 }, -- Line number for ":number" and ":#" commands, and when 'number' or 'relativenumber' option is set. CursorLineNr = { fg = C.lavender }, -- Like LineNr when 'cursorline' or 'relativenumber' is set for the cursor line. highlights the number in numberline. MatchParen = { fg = C.peach, bg = U.darken(C.surface1, 0.70, C.base), style = { "bold" } }, -- The character under the cursor or just before it, if it is a paired bracket, and its match. |pi_paren.txt| ModeMsg = { fg = C.text, style = { "bold" } }, -- 'showmode' message (e.g., "-- INSERT -- ") -- MsgArea = { fg = C.text }, -- Area for messages and cmdline, don't set this highlight because of https://github.com/neovim/neovim/issues/17832 MsgSeparator = { link = "WinSeparator" }, -- Separator for scrolled messages, `msgsep` flag of 'display' MoreMsg = { fg = C.blue }, -- |more-prompt| NonText = { fg = C.overlay0 }, -- '@' at the end of the window, characters from 'showbreak' and other characters that do not really exist in the text (e.g., ">" displayed when a double-wide character doesn't fit at the end of the line). See also |hl-EndOfBuffer|. Normal = { fg = C.text, bg = O.transparent_background and C.none or C.base }, -- normal text NormalNC = { fg = C.text, bg = (O.transparent_background and O.dim_inactive.enabled and C.dim) or (O.dim_inactive.enabled and C.dim) or (O.transparent_background and C.none) or C.base, }, -- normal text in non-current windows NormalSB = { fg = C.text, bg = C.crust }, -- normal text in non-current windows NormalFloat = { fg = C.text, bg = (O.float.transparent and vim.o.winblend == 0) and C.none or C.mantle }, -- Normal text in floating windows. FloatBorder = O.float.solid and ((O.float.transparent and vim.o.winblend == 0) and { fg = C.surface2, bg = C.none } or { fg = C.mantle, bg = C.mantle, }) or { fg = C.blue, bg = (O.float.transparent and vim.o.winblend == 0) and C.none or C.mantle }, FloatTitle = O.float.solid and { fg = C.crust, bg = C.lavender, } or { fg = C.subtext0, bg = (O.float.transparent and vim.o.winblend == 0) and C.none or C.mantle }, -- Title of floating windows FloatShadow = { bg = (O.float.transparent and vim.o.winblend == 0) and C.none or C.overlay0, blend = 80 }, FloatShadowThrough = { bg = (O.float.transparent and vim.o.winblend == 0) and C.none or C.overlay0, blend = 100, }, Pmenu = { bg = (O.transparent_background and vim.o.pumblend == 0) and C.none or C.mantle, fg = C.overlay2, }, -- Popup menu: normal item. PmenuSel = { bg = C.surface0, style = { "bold" } }, -- Popup menu: selected item. PmenuMatch = { fg = C.text, style = { "bold" } }, -- Popup menu: matching text. PmenuMatchSel = { style = { "bold" } }, -- Popup menu: matching text in selected item; is combined with |hl-PmenuMatch| and |hl-PmenuSel|. PmenuSbar = { bg = C.surface0 }, -- Popup menu: scrollbar. PmenuThumb = { bg = C.overlay0 }, -- Popup menu: Thumb of the scrollbar. PmenuExtra = { fg = C.overlay0 }, -- Popup menu: normal item extra text. PmenuExtraSel = { bg = C.surface0, fg = C.overlay0, style = { "bold" }, }, -- Popup menu: selected item extra text. ComplMatchIns = { link = "PreInsert" }, -- Matched text of the currently inserted completion. PreInsert = { fg = C.overlay2 }, -- Text inserted when "preinsert" is in 'completeopt'. ComplHint = { fg = C.subtext0 }, -- Virtual text of the currently selected completion. ComplHintMore = { link = "Question" }, -- The additional information of the virtual text. Question = { fg = C.blue }, -- |hit-enter| prompt and yes/no questions QuickFixLine = { bg = U.darken(C.surface1, 0.70, C.base), style = { "bold" } }, -- Current |quickfix| item in the quickfix window. Combined with |hl-CursorLine| when the cursor is there. Search = { bg = U.darken(C.sky, 0.30, C.base), fg = C.text }, -- Last search pattern highlighting (see 'hlsearch'). Also used for similar items that need to stand out. IncSearch = { bg = U.darken(C.sky, 0.90, C.base), fg = C.mantle }, -- 'incsearch' highlighting; also used for the text replaced with ":s///c" CurSearch = { bg = C.red, fg = C.mantle }, -- 'cursearch' highlighting: highlights the current search you're on differently SpecialKey = { link = "NonText" }, -- Unprintable characters: text displayed differently from what it really is. But not 'listchars' textspace. |hl-Whitespace| SpellBad = { sp = C.red, style = { "undercurl" } }, -- Word that is not recognized by the spellchecker. |spell| Combined with the highlighting used otherwise. SpellCap = { sp = C.yellow, style = { "undercurl" } }, -- Word that should start with a capital. |spell| Combined with the highlighting used otherwise. SpellLocal = { sp = C.blue, style = { "undercurl" } }, -- Word that is recognized by the spellchecker as one that is used in another region. |spell| Combined with the highlighting used otherwise. SpellRare = { sp = C.green, style = { "undercurl" } }, -- Word that is recognized by the spellchecker as one that is hardly ever used. |spell| Combined with the highlighting used otherwise. StatusLine = { fg = C.text, bg = O.transparent_background and C.none or C.mantle }, -- status line of current window StatusLineNC = { fg = C.surface1, bg = O.transparent_background and C.none or C.mantle }, -- status lines of not-current windows Note: if this is equal to "StatusLine" Vim will use "^^^" in the status line of the current window. TabLine = { bg = C.crust, fg = C.overlay0 }, -- tab pages line, not active tab page label TabLineFill = { bg = O.transparent_background and C.none or C.mantle }, -- tab pages line, where there are no labels TabLineSel = { link = "Normal" }, -- tab pages line, active tab page label TermCursor = { fg = C.base, bg = C.rosewater }, -- cursor in a focused terminal TermCursorNC = { fg = C.base, bg = C.overlay2 }, -- cursor in unfocused terminals Title = { fg = C.blue, style = { "bold" } }, -- titles for output from ":set all", ":autocmd" etc. Visual = { bg = C.surface1, style = { "bold" } }, -- Visual mode selection VisualNOS = { bg = C.surface1, style = { "bold" } }, -- Visual mode selection when vim is "Not Owning the Selection". WarningMsg = { fg = C.yellow }, -- warning messages Whitespace = { fg = C.surface1 }, -- "nbsp", "space", "tab" and "trail" in 'listchars' WildMenu = { bg = C.overlay0 }, -- current match in 'wildmenu' completion WinBar = { fg = C.rosewater }, WinBarNC = { link = "WinBar" }, WinSeparator = { fg = O.transparent_background and C.surface1 or C.crust }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/aerial.lua ================================================ local M = {} M.url = "https://github.com/stevearc/aerial.nvim" function M.get() return { AerialLine = { fg = C.yellow, bg = C.none }, AerialGuide = { fg = C.overlay2 }, AerialBooleanIcon = { link = "@boolean" }, AerialClassIcon = { link = "@type" }, AerialConstantIcon = { link = "@constant" }, AerialConstructorIcon = { link = "@constructor" }, AerialFieldIcon = { link = "@field" }, AerialFunctionIcon = { link = "@function" }, AerialMethodIcon = { link = "@method" }, AerialNamespaceIcon = { link = "@namespace" }, AerialNumberIcon = { link = "@number" }, AerialOperatorIcon = { link = "@operator" }, AerialTypeParameterIcon = { link = "@type" }, AerialPropertyIcon = { link = "@property" }, AerialStringIcon = { link = "@string" }, AerialVariableIcon = { link = "@constant" }, AerialEnumMemberIcon = { link = "@field" }, AerialEnumIcon = { link = "@type" }, AerialFileIcon = { link = "@text.uri" }, AerialModuleIcon = { link = "@namespace" }, AerialPackageIcon = { link = "@namespace" }, AerialInterfaceIcon = { link = "@type" }, AerialStructIcon = { link = "@type" }, AerialEventIcon = { link = "@type" }, AerialArrayIcon = { link = "@constant" }, AerialObjectIcon = { link = "@type" }, AerialKeyIcon = { link = "@type" }, AerialNullIcon = { link = "@type" }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/alpha.lua ================================================ local M = {} M.url = "https://github.com/goolord/alpha-nvim" function M.get() return { AlphaShortcut = { fg = C.green }, AlphaHeader = { fg = C.blue }, AlphaHeaderLabel = { fg = C.peach }, AlphaButtons = { fg = C.lavender }, AlphaFooter = { fg = C.yellow, style = { "italic" } }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/artio.lua ================================================ local M = {} M.url = "https://github.com/comfysage/artio.nvim" function M.get() local transparent_background = require("catppuccin").options.transparent_background return { ArtioNormal = { fg = C.text, bg = transparent_background and "NONE" or C.mantle, }, ArtioSel = { fg = C.flamingo, bg = C.surface0, style = { "bold" }, }, ArtioMatch = { fg = C.blue }, ArtioPointer = { fg = C.flamingo }, ArtioPrompt = { fg = C.blue }, ArtioMark = { fg = C.yellow }, ArtioMarkLine = { link = "Visual" }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/avante.lua ================================================ local M = {} M.url = "https://github.com/yetone/avante.nvim" function M.get() local rounded = O.integrations.avante.windows_sidebar_header_rounded return { -- titles AvanteTitle = rounded and { bg = C.lavender, fg = C.base } or { fg = C.lavender }, AvanteReversedTitle = rounded and { bg = C.none, fg = C.lavender } or { fg = C.lavender }, AvanteSubtitle = rounded and { bg = C.peach, fg = C.base } or { fg = C.peach }, AvanteReversedSubtitle = rounded and { bg = C.none, fg = C.peach } or { fg = C.peach }, AvanteThirdTitle = rounded and { bg = C.blue, fg = C.base } or { fg = C.blue }, AvanteReversedThirdTitle = rounded and { bg = C.none, fg = C.blue } or { fg = C.blue }, -- hints AvanteInlineHint = { fg = C.overlay0 }, AvantePopupHint = { fg = C.overlay0 }, AvanteAnnotation = { fg = C.overlay0 }, AvanteSuggestion = { fg = C.overlay0 }, -- conflicts AvanteConflictCurrent = { bg = O.transparent_background and C.none or C.mantle, fg = C.green, }, AvanteConflictCurrentLabel = { bg = O.transparent_background and C.none or C.mantle, fg = C.green, }, AvanteConflictIncoming = { bg = O.transparent_background and C.none or C.mantle, fg = C.blue, }, AvanteConflictIncomingLabel = { bg = O.transparent_background and C.none or C.mantle, fg = C.blue, }, AvanteConflictAncestor = { bg = O.transparent_background and C.none or C.mantle, fg = C.teal, }, AvanteConflictAncestorLabel = { bg = O.transparent_background and C.none or C.mantle, fg = C.teal, }, AvanteToBeDeleted = { bg = O.transparent_background and C.none or C.mantle, fg = C.red, }, AvanteSidebarWinSeparator = { link = "WinSeparator", }, AvantePromptInput = { link = "FloatNormal", }, AvantePromptInputBorder = { link = "FloatBorder", }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/barbar.lua ================================================ local M = {} M.url = "https://github.com/romgrk/barbar.nvim" function M.get() return { BufferCurrent = { bg = C.surface1, fg = C.text }, BufferCurrentIndex = { bg = C.surface1, fg = C.blue }, BufferCurrentMod = { bg = C.surface1, fg = C.yellow }, BufferCurrentSign = { bg = C.surface1, fg = C.blue }, BufferCurrentTarget = { bg = C.surface1, fg = C.red }, BufferVisible = { bg = C.mantle, fg = C.text }, BufferVisibleIndex = { bg = C.mantle, fg = C.blue }, BufferVisibleMod = { bg = C.mantle, fg = C.yellow }, BufferVisibleSign = { bg = C.mantle, fg = C.blue }, BufferVisibleTarget = { bg = C.mantle, fg = C.red }, BufferInactive = { bg = C.mantle, fg = C.overlay0 }, BufferInactiveIndex = { bg = C.mantle, fg = C.overlay0 }, BufferInactiveMod = { bg = C.mantle, fg = C.yellow }, BufferInactiveSign = { bg = C.mantle, fg = C.blue }, BufferInactiveTarget = { bg = C.mantle, fg = C.red }, BufferTabpages = { bg = C.mantle, fg = C.none }, BufferTabpage = { bg = C.mantle, fg = C.blue }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/beacon.lua ================================================ local M = {} M.url = "https://github.com/DanilaMihailov/beacon.nvim" function M.get() return { Beacon = { bg = C.blue }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/blink_cmp.lua ================================================ local M = {} M.url = "https://github.com/saghen/blink.cmp" function M.get() local style = O.integrations.blink_cmp.style local highlights = { BlinkCmpLabel = { fg = C.overlay2 }, BlinkCmpLabelDeprecated = { fg = C.overlay0, style = { "strikethrough" } }, BlinkCmpKind = { fg = C.blue }, BlinkCmpMenu = { link = "Pmenu" }, BlinkCmpDoc = { link = "NormalFloat" }, BlinkCmpLabelMatch = { link = "PmenuMatch" }, BlinkCmpMenuSelection = { bg = C.surface1, style = { "bold" } }, BlinkCmpScrollBarGutter = { bg = C.surface1 }, BlinkCmpScrollBarThumb = { bg = C.overlay0 }, BlinkCmpLabelDescription = { link = "PmenuExtra" }, BlinkCmpLabelDetail = { link = "PmenuExtra" }, BlinkCmpSignatureHelpBorder = { link = "FloatBorder" }, BlinkCmpKindText = { fg = C.green }, BlinkCmpKindMethod = { fg = C.blue }, BlinkCmpKindFunction = { fg = C.blue }, BlinkCmpKindConstructor = { fg = C.blue }, BlinkCmpKindField = { fg = C.green }, BlinkCmpKindVariable = { fg = C.flamingo }, BlinkCmpKindClass = { fg = C.yellow }, BlinkCmpKindInterface = { fg = C.yellow }, BlinkCmpKindModule = { fg = C.blue }, BlinkCmpKindProperty = { fg = C.blue }, BlinkCmpKindUnit = { fg = C.green }, BlinkCmpKindValue = { fg = C.peach }, BlinkCmpKindEnum = { fg = C.yellow }, BlinkCmpKindKeyword = { fg = C.mauve }, BlinkCmpKindSnippet = { fg = C.flamingo }, BlinkCmpKindColor = { fg = C.red }, BlinkCmpKindFile = { fg = C.blue }, BlinkCmpKindReference = { fg = C.red }, BlinkCmpKindFolder = { fg = C.blue }, BlinkCmpKindEnumMember = { fg = C.teal }, BlinkCmpKindConstant = { fg = C.peach }, BlinkCmpKindStruct = { fg = C.blue }, BlinkCmpKindEvent = { fg = C.blue }, BlinkCmpKindOperator = { fg = C.sky }, BlinkCmpKindTypeParameter = { fg = C.maroon }, BlinkCmpKindCopilot = { fg = C.teal }, } if style == "bordered" then -- uses FloatBorder.fg and Pmenu.bg highlights["BlinkCmpMenuBorder"] = { fg = O.float.solid and ((O.float.transparent and vim.o.winblend == 0) and C.surface2 or C.mantle) or C.blue, bg = (O.transparent_background and vim.o.pumblend == 0) and C.none or C.mantle, } highlights["BlinkCmpDocBorder"] = { link = "FloatBorder" } end return highlights end return M ================================================ FILE: lua/catppuccin/groups/integrations/blink_indent.lua ================================================ local M = {} M.url = "https://github.com/saghen/blink.indent" function M.get() return { BlinkIndent = { fg = C.surface0 }, BlinkIndentScope = { fg = C.overlay2 }, BlinkIndentRed = { fg = C.red }, BlinkIndentOrange = { fg = C.peach }, BlinkIndentYellow = { fg = C.yellow }, BlinkIndentGreen = { fg = C.green }, BlinkIndentCyan = { fg = C.sky }, BlinkIndentBlue = { fg = C.blue }, BlinkIndentViolet = { fg = C.mauve }, BlinkIndentRedUnderline = { sp = C.red, style = { "underline" } }, BlinkIndentOrangeUnderline = { sp = C.peach, style = { "underline" } }, BlinkIndentYellowUnderline = { sp = C.yellow, style = { "underline" } }, BlinkIndentGreenUnderline = { sp = C.green, style = { "underline" } }, BlinkIndentCyanUnderline = { sp = C.sky, style = { "underline" } }, BlinkIndentBlueUnderline = { sp = C.blue, style = { "underline" } }, BlinkIndentVioletUnderline = { sp = C.mauve, style = { "underline" } }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/blink_pairs.lua ================================================ local M = {} M.url = "https://github.com/saghen/blink.pairs" function M.get() return { BlinkPairsRed = { fg = C.red }, BlinkPairsYellow = { fg = C.yellow }, BlinkPairsBlue = { fg = C.blue }, BlinkPairsOrange = { fg = C.peach }, BlinkPairsGreen = { fg = C.green }, BlinkPairsPurple = { fg = C.mauve }, BlinkPairsCyan = { fg = C.teal }, BlinkPairsUnmatched = { fg = C.red }, BlinkPairsMatchParen = { link = "MatchParen" }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/buffon.lua ================================================ local M = {} M.url = "https://github.com/francescarpi/buffon.nvim" function M.get() return { BuffonUnloadedBuffer = { fg = C.surface1 }, BuffonShortcut = { fg = C.peach }, BuffonLineActive = { fg = C.sapphire }, BuffonUnsavedIndicator = { fg = C.red }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/cmp.lua ================================================ local M = {} M.url = "https://github.com/hrsh7th/nvim-cmp" function M.get() return { CmpItemAbbr = { fg = C.overlay2 }, CmpItemAbbrDeprecated = { fg = C.overlay0, style = { "strikethrough" } }, CmpItemKind = { fg = C.blue }, CmpItemMenu = { fg = C.text }, CmpItemAbbrMatch = { fg = C.text, style = { "bold" } }, CmpItemAbbrMatchFuzzy = { fg = C.text, style = { "bold" } }, -- kind support CmpItemKindSnippet = { fg = C.mauve }, CmpItemKindKeyword = { fg = C.red }, CmpItemKindText = { fg = C.teal }, CmpItemKindMethod = { fg = C.blue }, CmpItemKindConstructor = { fg = C.blue }, CmpItemKindFunction = { fg = C.blue }, CmpItemKindFolder = { fg = C.blue }, CmpItemKindModule = { fg = C.blue }, CmpItemKindConstant = { fg = C.peach }, CmpItemKindField = { fg = C.green }, CmpItemKindProperty = { fg = C.green }, CmpItemKindEnum = { fg = C.green }, CmpItemKindUnit = { fg = C.green }, CmpItemKindClass = { fg = C.yellow }, CmpItemKindVariable = { fg = C.flamingo }, CmpItemKindFile = { fg = C.blue }, CmpItemKindInterface = { fg = C.yellow }, CmpItemKindColor = { fg = C.red }, CmpItemKindReference = { fg = C.red }, CmpItemKindEnumMember = { fg = C.red }, CmpItemKindStruct = { fg = C.blue }, CmpItemKindValue = { fg = C.peach }, CmpItemKindEvent = { fg = C.blue }, CmpItemKindOperator = { fg = C.blue }, CmpItemKindTypeParameter = { fg = C.blue }, CmpItemKindCopilot = { fg = C.teal }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/coc_nvim.lua ================================================ local M = {} M.url = "https://github.com/neoclide/coc.nvim" function M.get() return { -- These groups are for the coc.nvim, see ":h coc-highlights" -- Custom popup menu since coc v0.0.82 CocMenuSel = { link = "PmenuSel" }, CocPumSearch = { fg = C.sky, style = { "bold" } }, -- Inlay hints CocInlayHint = { -- fg of `Comment` fg = C.overlay0, style = { "italic" }, }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/colorful_winsep.lua ================================================ local M = {} M.url = "https://github.com/nvim-zh/colorful-winsep.nvim" function M.get() return { ColorfulWinSep = { fg = C[O.integrations.colorful_winsep.color], bg = O.transparent_background and C.none or C.base, }, NvimSeparator = { link = "ColorfulWinSep" }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/copilot_vim.lua ================================================ local M = {} M.url = "https://github.com/github/copilot.vim" function M.get() return { CopilotSuggestion = { fg = C.overlay0 }, CopilotAnnotation = { fg = C.blue }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/dadbod_ui.lua ================================================ local M = {} M.url = "https://github.com/kristijanhusak/vim-dadbod-ui" function M.get() return { NotificationInfo = { fg = C.blue, bg = C.mantle }, NotificationWarning = { fg = C.yellow, bg = C.mantle }, NotificationError = { fg = C.red, bg = C.mantle }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/dap.lua ================================================ local M = {} M.url = "https://github.com/mfussenegger/nvim-dap" function M.get() return { DapBreakpoint = { fg = C.red }, DapBreakpointCondition = { fg = C.yellow }, DapBreakpointRejected = { fg = C.mauve }, DapLogPoint = { fg = C.sky }, DapStopped = { fg = C.maroon }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/dap_ui.lua ================================================ local M = {} M.url = "https://github.com/rcarriga/nvim-dap-ui" function M.get() return { DapUIScope = { fg = C.sky }, DapUIType = { fg = C.mauve }, DapUIValue = { fg = C.sky }, DapUIVariable = { fg = C.text }, DapUIModifiedValue = { fg = C.peach }, DapUIDecoration = { fg = C.sky }, DapUIThread = { fg = C.green }, DapUIStoppedThread = { fg = C.sky }, DapUISource = { fg = C.lavender }, DapUILineNumber = { fg = C.sky }, DapUIFloatBorder = { link = "FloatBorder" }, DapUIWatchesEmpty = { fg = C.maroon }, DapUIWatchesValue = { fg = C.green }, DapUIWatchesError = { fg = C.maroon }, DapUIBreakpointsPath = { fg = C.sky }, DapUIBreakpointsInfo = { fg = C.green }, DapUIBreakpointsCurrentLine = { fg = C.green, style = { "bold" } }, DapUIBreakpointsDisabledLine = { fg = C.surface2 }, DapUIStepOver = { fg = C.blue }, DapUIStepOverNC = { link = "DapUIStepOver" }, DapUIStepInto = { fg = C.blue }, DapUIStepIntoNC = { link = "DapUIStepInto" }, DapUIStepBack = { fg = C.blue }, DapUIStepBackNC = { link = "DapUIStepBack" }, DapUIStepOut = { fg = C.blue }, DapUIStepOutNC = { link = "DapUIStepOut" }, DapUIStop = { fg = C.red }, DapUIStopNC = { link = "DapUIStop" }, DapUIPlayPause = { fg = C.green }, DapUIPlayPauseNC = { link = "DapUIPlayPause" }, DapUIRestart = { fg = C.green }, DapUIRestartNC = { link = "DapUIRestart" }, DapUIUnavailable = { fg = C.surface1 }, DapUIUnavailableNC = { link = "DapUIUnavailable" }, DapUIWinSelect = { fg = C.peach }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/dashboard.lua ================================================ local M = {} M.url = "https://github.com/nvimdev/dashboard-nvim" function M.get() return { DashboardShortCut = { fg = C.pink }, DashboardHeader = { fg = C.blue }, DashboardCenter = { fg = C.green }, DashboardFooter = { fg = C.yellow, style = { "italic" } }, DashboardMruTitle = { fg = C.sky }, DashboardProjectTitle = { fg = C.sky }, DashboardFiles = { fg = C.lavender }, DashboardKey = { fg = C.peach }, DashboardDesc = { fg = C.blue }, DashboardIcon = { fg = C.pink, bold = true }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/diffview.lua ================================================ local M = {} M.url = "https://github.com/sindrets/diffview.nvim" function M.get() return { DiffviewDim1 = { link = "Comment" }, DiffviewPrimary = { fg = C.blue }, DiffviewSecondary = { fg = C.green }, DiffviewNormal = { fg = C.text, bg = O.transparent_background and C.none or C.mantle }, DiffviewWinSeparator = { fg = O.transparent_background and C.surface1 or C.base, bg = O.transparent_background and C.none or C.base, }, DiffviewFilePanelTitle = { fg = C.blue, style = { "bold" } }, DiffviewFilePanelCounter = { fg = C.text }, DiffviewFilePanelRootPath = { fg = C.lavender, style = { "bold" } }, DiffviewFilePanelFileName = { fg = C.text }, DiffviewFilePanelSelected = { fg = C.yellow }, DiffviewFilePanelPath = { link = "Comment" }, DiffviewFilePanelInsertions = { fg = C.green }, DiffviewFilePanelDeletions = { fg = C.red }, DiffviewFilePanelConflicts = { fg = C.yellow }, DiffviewFolderName = { fg = C.blue, style = { "bold" } }, DiffviewFolderSign = { fg = C.blue }, DiffviewHash = { fg = C.flamingo }, DiffviewReference = { fg = C.blue, style = { "bold" } }, DiffviewReflogSelector = { fg = C.pink }, DiffviewStatusAdded = { fg = C.green }, DiffviewStatusUntracked = { fg = C.green }, DiffviewStatusModified = { fg = C.yellow }, DiffviewStatusRenamed = { fg = C.yellow }, DiffviewStatusCopied = { fg = C.yellow }, DiffviewStatusTypeChange = { fg = C.yellow }, DiffviewStatusUnmerged = { fg = C.yellow }, DiffviewStatusUnknown = { fg = C.red }, DiffviewStatusDeleted = { fg = C.red }, DiffviewStatusBroken = { fg = C.red }, DiffviewStatusIgnored = { fg = C.overlay0 }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/dropbar.lua ================================================ local M = {} M.url = "https://github.com/Bekaboo/dropbar.nvim" function M.get() local color = O.integrations.dropbar.color_mode return { DropBarMenuHoverEntry = { link = "Visual" }, DropBarMenuHoverIcon = { reverse = true }, DropBarMenuHoverSymbol = { bold = true }, DropBarIconUISeparator = { fg = C.overlay1 }, DropBarKindArray = color and { link = "DropBarIconKindArray" } or { fg = C.text }, DropBarKindBoolean = color and { link = "DropBarIconKindBoolean" } or { fg = C.text }, DropBarKindBreakStatement = color and { link = "DropBarIconKindBreakStatement" } or { fg = C.text }, DropBarKindCall = color and { link = "DropBarIconKindCall" } or { fg = C.text }, DropBarKindCaseStatement = color and { link = "DropBarIconKindCaseStatement" } or { fg = C.text }, DropBarKindClass = color and { link = "DropBarIconKindClass" } or { fg = C.text }, DropBarKindConstant = color and { link = "DropBarIconKindConstant" } or { fg = C.text }, DropBarKindConstructor = color and { link = "DropBarIconKindConstructor" } or { fg = C.text }, DropBarKindContinueStatement = color and { link = "DropBarIconKindContinueStatement" } or { fg = C.text }, DropBarKindDeclaration = color and { link = "DropBarIconKindDeclaration" } or { fg = C.text }, DropBarKindDelete = color and { link = "DropBarIconKindDelete" } or { fg = C.text }, DropBarKindDoStatement = color and { link = "DropBarIconKindDoStatement" } or { fg = C.text }, DropBarKindElseStatement = color and { link = "DropBarIconKindElseStatement" } or { fg = C.text }, DropBarKindEnum = color and { link = "DropBarIconKindEnum" } or { fg = C.text }, DropBarKindEnumMember = color and { link = "DropBarIconKindEnumMember" } or { fg = C.text }, DropBarKindEvent = color and { link = "DropBarIconKindEvent" } or { fg = C.text }, DropBarKindField = color and { link = "DropBarIconKindField" } or { fg = C.text }, DropBarKindFile = color and { link = "DropBarIconKindFile" } or { fg = C.text }, DropBarKindFolder = color and { link = "DropBarIconKindFolder" } or { fg = C.text }, DropBarKindForStatement = color and { link = "DropBarIconKindForStatement" } or { fg = C.text }, DropBarKindFunction = color and { link = "DropBarIconKindFunction" } or { fg = C.text }, DropBarKindIdentifier = color and { link = "DropBarIconKindIdentifier" } or { fg = C.text }, DropBarKindIfStatement = color and { link = "DropBarIconKindIfStatement" } or { fg = C.text }, DropBarKindInterface = color and { link = "DropBarIconKindInterface" } or { fg = C.text }, DropBarKindKeyword = color and { link = "DropBarIconKindKeyword" } or { fg = C.text }, DropBarKindList = color and { link = "DropBarIconKindList" } or { fg = C.text }, DropBarKindMacro = color and { link = "DropBarIconKindMacro" } or { fg = C.text }, DropBarKindMarkdownH1 = color and { link = "DropBarIconKindMarkdownH1" } or { fg = C.text }, DropBarKindMarkdownH2 = color and { link = "DropBarIconKindMarkdownH2" } or { fg = C.text }, DropBarKindMarkdownH3 = color and { link = "DropBarIconKindMarkdownH3" } or { fg = C.text }, DropBarKindMarkdownH4 = color and { link = "DropBarIconKindMarkdownH4" } or { fg = C.text }, DropBarKindMarkdownH5 = color and { link = "DropBarIconKindMarkdownH5" } or { fg = C.text }, DropBarKindMarkdownH6 = color and { link = "DropBarIconKindMarkdownH6" } or { fg = C.text }, DropBarKindMethod = color and { link = "DropBarIconKindMethod" } or { fg = C.text }, DropBarKindModule = color and { link = "DropBarIconKindModule" } or { fg = C.text }, DropBarKindNamespace = color and { link = "DropBarIconKindNamespace" } or { fg = C.text }, DropBarKindNull = color and { link = "DropBarIconKindNull" } or { fg = C.text }, DropBarKindNumber = color and { link = "DropBarIconKindNumber" } or { fg = C.text }, DropBarKindObject = color and { link = "DropBarIconKindObject" } or { fg = C.text }, DropBarKindOperator = color and { link = "DropBarIconKindOperator" } or { fg = C.text }, DropBarKindPackage = color and { link = "DropBarIconKindPackage" } or { fg = C.text }, DropBarKindProperty = color and { link = "DropBarIconKindProperty" } or { fg = C.text }, DropBarKindReference = color and { link = "DropBarIconKindReference" } or { fg = C.text }, DropBarKindRepeat = color and { link = "DropBarIconKindRepeat" } or { fg = C.text }, DropBarKindScope = color and { link = "DropBarIconKindScope" } or { fg = C.text }, DropBarKindSpecifier = color and { link = "DropBarIconKindSpecifier" } or { fg = C.text }, DropBarKindStatement = color and { link = "DropBarIconKindStatement" } or { fg = C.text }, DropBarKindString = color and { link = "DropBarIconKindString" } or { fg = C.text }, DropBarKindStruct = color and { link = "DropBarIconKindStruct" } or { fg = C.text }, DropBarKindSwitchStatement = color and { link = "DropBarIconKindSwitchStatement" } or { fg = C.text }, DropBarKindType = color and { link = "DropBarIconKindType" } or { fg = C.text }, DropBarKindTypeParameter = color and { link = "DropBarIconKindTypeParameter" } or { fg = C.text }, DropBarKindUnit = color and { link = "DropBarIconKindUnit" } or { fg = C.text }, DropBarKindValue = color and { link = "DropBarIconKindValue" } or { fg = C.text }, DropBarKindVariable = color and { link = "DropBarIconKindVariable" } or { fg = C.text }, DropBarKindWhileStatement = color and { link = "DropBarIconKindWhileStatement" } or { fg = C.text }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/fern.lua ================================================ local M = {} M.url = "https://github.com/lambdalisue/vim-fern" function M.get() return { FernBranchText = { fg = C.blue }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/fidget.lua ================================================ local M = {} M.url = "https://github.com/j-hui/fidget.nvim" function M.get() return { FidgetTask = { bg = O.transparent_background and C.none or C.mantle, fg = C.text, }, FidgetTitle = { fg = C.blue }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/flash.lua ================================================ local M = {} M.url = "https://github.com/folke/flash.nvim" function M.get() local bg = O.transparent_background and C.none or C.base return { FlashBackdrop = { fg = C.overlay0 }, FlashLabel = { fg = C.green, bg = bg, style = { "bold" } }, FlashMatch = { fg = C.lavender, bg = bg }, FlashCurrent = { fg = C.peach, bg = bg }, FlashPrompt = { link = "NormalFloat" }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/fzf.lua ================================================ local M = {} M.url = "https://github.com/ibhagwan/fzf-lua" function M.get() return { FzfLuaNormal = { link = "NormalFloat" }, FzfLuaBorder = { link = "FloatBorder" }, FzfLuaTitle = { link = "FloatTitle" }, FzfLuaHeaderBind = { fg = C.yellow }, FzfLuaHeaderText = { fg = C.peach }, FzfLuaDirPart = { link = "NonText" }, FzfLuaFzfMatch = { fg = C.blue }, FzfLuaFzfPrompt = { fg = C.blue }, FzfLuaPathColNr = { fg = C.blue }, FzfLuaPathLineNr = { fg = C.green }, FzfLuaBufName = { fg = C.mauve }, FzfLuaBufNr = { fg = C.yellow }, FzfLuaBufFlagCur = { fg = C.peach }, FzfLuaBufFlagAlt = { fg = C.blue }, FzfLuaTabTitle = { fg = C.sky }, FzfLuaTabMarker = { fg = C.yellow }, FzfLuaLiveSym = { fg = C.peach }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/gitgraph.lua ================================================ local M = {} M.url = "https://github.com/isakbm/gitgraph.nvim" function M.get() return { GitGraphHash = { fg = C.mauve }, GitGraphTimestamp = { fg = C.lavender }, GitGraphAuthor = { fg = C.flamingo }, GitGraphBranchName = { fg = C.teal }, GitGraphBranchTag = { fg = C.pink }, GitGraphBranchMsg = { fg = C.overlay2 }, GitGraphBranch1 = { fg = C.yellow }, GitGraphBranch2 = { fg = C.pink }, GitGraphBranch3 = { fg = C.sky }, GitGraphBranch4 = { fg = C.green }, GitGraphBranch5 = { fg = C.red }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/gitgutter.lua ================================================ local M = {} M.url = "https://github.com/airblade/vim-gitgutter" function M.get() return { GitGutterAdd = { fg = C.green }, GitGutterChange = { fg = C.yellow }, GitGutterDelete = { fg = C.red }, GitGutterAddLineNr = { fg = C.green }, GitGutterChangeLineNr = { fg = C.yellow }, GitGutterDeleteLineNr = { fg = C.red }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/gitsigns.lua ================================================ local M = {} M.url = "https://github.com/lewis6991/gitsigns.nvim" function M.get() -- (a ~= nil) and a or b: Potential false-negative handling local transparent = O.transparent_background if type(O.integrations.gitsigns.transparent) == "boolean" then transparent = O.integrations.gitsigns.transparent end if transparent then return { GitSignsAdd = { fg = C.green }, -- diff mode: Added line |diff.txt| GitSignsChange = { fg = C.yellow }, -- diff mode: Changed line |diff.txt| GitSignsDelete = { fg = C.red }, -- diff mode: Deleted line |diff.txt| GitSignsCurrentLineBlame = { fg = C.surface1 }, GitSignsAddPreview = { fg = C.green, bg = C.none }, GitSignsDeletePreview = { fg = C.red, bg = C.none }, -- for word diff in previews GitSignsAddInline = { fg = C.base, bg = C.green, style = { "bold" } }, GitSignsDeleteInline = { fg = C.base, bg = C.red, style = { "bold" } }, GitSignsChangeInline = { fg = C.base, bg = C.blue, style = { "bold" } }, GitSignsDeleteVirtLn = { bg = C.none, fg = C.red }, } else return { GitSignsAdd = { fg = C.green }, -- diff mode: Added line |diff.txt| GitSignsChange = { fg = C.yellow }, -- diff mode: Changed line |diff.txt| GitSignsDelete = { fg = C.red }, -- diff mode: Deleted line |diff.txt| GitSignsCurrentLineBlame = { fg = C.surface1 }, GitSignsAddPreview = { link = "DiffAdd" }, GitSignsDeletePreview = { link = "DiffDelete" }, GitSignsAddInline = { bg = U.darken(C.green, 0.36, C.base) }, GitSignsChangeInline = { bg = U.darken(C.blue, 0.14, C.base) }, GitSignsDeleteInline = { bg = U.darken(C.red, 0.36, C.base) }, } end end return M ================================================ FILE: lua/catppuccin/groups/integrations/grug_far.lua ================================================ local M = {} M.url = "https://github.com/MagicDuck/grug-far.nvim" function M.get() return { GrugFarResultsMatch = { link = "IncSearch" }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/harpoon.lua ================================================ local M = {} M.url = "https://github.com/ThePrimeagen/harpoon" function M.get() return { HarpoonWindow = { fg = C.text, bg = O.transparent_background and C.none or C.base }, HarpoonBorder = { fg = C.blue }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/headlines.lua ================================================ local M = {} M.url = "https://github.com/lukas-reineke/headlines.nvim" function M.get() return { Dash = { fg = C.overlay2, style = { "bold" } }, Quote = { link = "@markup.strong" }, CodeBlock = { bg = C.mantle }, Headline = { link = "Headline1" }, Headline1 = { bg = C.surface0, fg = C.red }, Headline2 = { bg = C.surface0, fg = C.peach }, Headline3 = { bg = C.surface0, fg = C.yellow }, Headline4 = { bg = C.surface0, fg = C.green }, Headline5 = { bg = C.surface0, fg = C.sapphire }, Headline6 = { bg = C.surface0, fg = C.lavender }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/hop.lua ================================================ local M = {} M.url = "https://github.com/hadronized/hop.nvim" function M.get() local bg = O.transparent_background and C.none or C.base return { HopNextKey = { bg = bg, fg = C.peach, style = { "bold", "underline" } }, HopNextKey1 = { bg = bg, fg = C.blue, style = { "bold" } }, HopNextKey2 = { bg = bg, fg = C.teal, style = { "bold", "italic" } }, HopUnmatched = { bg = bg, fg = C.overlay0 }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/illuminate.lua ================================================ local M = {} M.url = "https://github.com/RRethy/vim-illuminate" function M.get() return { IlluminatedWordText = { bg = U.darken(C.surface1, 0.7, C.base) }, IlluminatedWordRead = { bg = U.darken(C.surface1, 0.7, C.base) }, IlluminatedWordWrite = { bg = U.darken(C.surface1, 0.7, C.base), style = O.integrations.illuminate.lsp and { "standout" } or {}, }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/indent_blankline.lua ================================================ local M = {} M.url = "https://github.com/lukas-reineke/indent-blankline.nvim" function M.get() local scope_color = O.integrations.indent_blankline.scope_color local hi = { IblIndent = { fg = C.surface0 }, IblScope = { fg = C[scope_color] or C.text }, } if O.integrations.indent_blankline.colored_indent_levels then hi["RainbowRed"] = { blend = 0, fg = C.red } hi["RainbowYellow"] = { blend = 0, fg = C.yellow } hi["RainbowBlue"] = { blend = 0, fg = C.blue } hi["RainbowOrange"] = { blend = 0, fg = C.peach } hi["RainbowGreen"] = { blend = 0, fg = C.green } hi["RainbowViolet"] = { blend = 0, fg = C.mauve } hi["RainbowCyan"] = { blend = 0, fg = C.teal } end return hi end return M ================================================ FILE: lua/catppuccin/groups/integrations/leap.lua ================================================ local M = {} M.url = "https://github.com/ggandor/leap.nvim" function M.get() return { LeapMatch = { fg = O.transparent_background and C.pink or U.vary_color({ latte = "#222222" }, U.brighten(C.green, 0.3)), style = { "underline", "nocombine", O.transparent_background and "bold" or nil }, }, LeapLabel = { fg = O.transparent_background and C.green or U.vary_color({ latte = "#222222" }, C.base), bg = O.transparent_background and C.none or U.vary_color({ latte = U.brighten(C.red, 0.4) }, U.brighten(C.green, 0.3)), style = { "nocombine", O.transparent_background and "bold" or nil }, }, LeapBackdrop = { fg = O.transparent_background and C.overlay0 or C.none }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/lightspeed.lua ================================================ local M = {} M.url = "https://github.com/ggandor/lightspeed.nvim" function M.get() return { LightspeedLabel = { fg = C.red, style = { "bold", "underline" } }, LightspeedLabelDistant = { fg = U.vary_color({ latte = C.blue }, C.sky), style = { "bold", "underline" }, }, LightspeedShortcut = { fg = "#ffffff", bg = U.increase_saturation(C.red, 0.7), style = { "bold" }, }, LightspeedMaskedChar = { fg = U.vary_color({ latte = U.lighten(C.pink, 0.7, C.text) }, U.darken(C.pink, 0.7, C.base)), }, LightspeedUnlabeledMatch = { fg = C.text, style = { "bold" } }, LightspeedGreyWash = { link = "Comment" }, LightspeedUniqueChar = { link = "LightspeedUnlabeledMatch" }, LightspeedOneCharMatch = { link = "LightspeedShortcut" }, LightspeedPendingOpArea = { link = "IncSearch" }, LightspeedCursor = { link = "Cursor" }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/lir.lua ================================================ local M = {} M.url = "https://github.com/tamago324/lir.nvim" function M.get() return vim.tbl_deep_extend("force", {}, { LirFloatNormal = { fg = C.text, bg = O.transparent_background and C.none or C.mantle }, LirFloatBorder = { fg = O.transparent_background and C.surface1 or C.base, bg = O.transparent_background and C.none or C.base, }, LirFloatCursorLine = { link = "CursorLine" }, LirDir = { fg = C.blue }, LirSymLink = { fg = C.pink }, LirEmptyDirText = { fg = C.blue }, LirFloatCurdirWindowNormal = { fg = C.text }, LirFloatCurdirWindowDirName = { fg = C.lavender, style = { "bold" } }, }, ((O.integrations.lir and O.integrations.lir.git_status) and { LirGitStatusBracket = { fg = C.overlay0 }, LirGitStatusIndex = { fg = C.blue }, LirGitStatusWorktree = { fg = C.yellow }, LirGitStatusUnmerged = { fg = C.red }, LirGitStatusUntracked = { fg = C.subtext0 }, LirGitStatusIgnored = { fg = C.subtext0 }, }) or {}) end return M ================================================ FILE: lua/catppuccin/groups/integrations/lsp_saga.lua ================================================ local M = {} M.url = "https://github.com/nvimdev/lspsaga.nvim" function M.get() return { SagaTitle = { fg = C.teal, style = { "bold" } }, SagaBorder = { fg = C.blue, bg = C.none }, SagaNormal = { bg = O.transparent_background and C.none or C.base }, SagaToggle = { fg = C.green }, SagaCount = { fg = C.overlay1 }, SagaBeacon = { bg = U.darken(C.surface0, 0.8, C.crust) }, SagaVirtLine = { fg = C.surface2 }, SagaSpinner = { fg = C.mauve, style = { "bold" } }, SagaSpinnerTitle = { fg = C.mauve, style = { "bold" } }, SagaText = { fg = C.text }, SagaSelect = { fg = C.blue, style = { "bold" } }, SagaSearch = { link = "Search" }, SagaFinderFname = { fg = C.subtext0, style = { "bold" } }, ActionFix = { fg = C.pink }, ActionPreviewTitle = { fg = C.mauve, bg = O.transparent_background and C.none or C.base }, CodeActionText = { fg = C.green }, CodeActionNumber = { fg = C.pink }, SagaImpIcon = { fg = C.pink }, SagaLightBulb = { link = "DiagnosticSignHint" }, RenameNormal = { fg = C.text }, RenameMatch = { link = "Search" }, DiagnosticText = { fg = C.text }, SagaWinbarSep = { fg = C.flamingo }, SagaDetail = { link = "Comment" }, SagaFileName = { fg = C.overlay2, style = { "bold" } }, SagaFolderName = { fg = C.overlay2, style = { "bold" } }, SagaInCurrent = { fg = C.peach }, -- Lspkind icons support LspKindClass = { fg = C.yellow }, LspKindConstant = { fg = C.peach }, LspKindConstructor = { fg = C.sapphire }, LspKindEnum = { fg = C.yellow }, LspKindEnumMember = { fg = C.teal }, LspKindEvent = { fg = C.yellow }, LspKindField = { fg = C.teal }, LspKindFile = { fg = C.rosewater }, LspKindFunction = { fg = C.blue }, LspKindInterface = { fg = C.yellow }, LspKindKey = { fg = C.red }, LspKindMethod = { fg = C.blue }, LspKindModule = { fg = C.blue }, LspKindNamespace = { fg = C.blue }, LspKindNumber = { fg = C.peach }, LspKindOperator = { fg = C.sky }, LspKindPackage = { fg = C.blue }, LspKindProperty = { fg = C.teal }, LspKindStruct = { fg = C.yellow }, LspKindTypeParameter = { fg = C.blue }, LspKindVariable = { fg = C.peach }, LspKindArray = { fg = C.peach }, LspKindBoolean = { fg = C.peach }, LspKindNull = { fg = C.yellow }, LspKindObject = { fg = C.yellow }, LspKindString = { fg = C.green }, -- ccls-specific icons. LspKindTypeAlias = { fg = C.green }, LspKindParameter = { fg = C.blue }, LspKindStaticMethod = { fg = C.peach }, -- Microsoft-specific icons. LspKindText = { fg = C.green }, LspKindSnippet = { fg = C.mauve }, LspKindFolder = { fg = C.blue }, LspKindUnit = { fg = C.green }, LspKindValue = { fg = C.peach }, } end function M.custom_kind() return { File = { "󰈙 ", "LspKindFile" }, Module = { " ", "LspKindModule" }, Namespace = { "󰌗 ", "LspKindNamespace" }, Package = { "󰏖 ", "LspKindPackage" }, Class = { "󰌗 ", "LspKindClass" }, Method = { " ", "LspKindMethod" }, Property = { "󰆧 ", "LspKindProperty" }, Field = { " ", "LspKindField" }, Constructor = { " ", "LspKindConstructor" }, Enum = { "󰒻", "LspKindEnum" }, Interface = { " ", "LspKindInterface" }, Function = { "󰊕 ", "LspKindFunction" }, Variable = { " ", "LspKindVariable" }, Constant = { " ", "LspKindConstant" }, String = { "󰀬 ", "LspKindString" }, Number = { "󰎠 ", "LspKindNumber" }, Boolean = { " ", "LspKindBoolean" }, Array = { "󰅪 ", "LspKindArray" }, Object = { "󰅩 ", "LspKindObject" }, Key = { "󰌋 ", "LspKindKey" }, Null = { " ", "LspKindNull" }, EnumMember = { " ", "LspKindEnumMember" }, Struct = { "󰌗 ", "LspKindStruct" }, Event = { " ", "LspKindEvent" }, Operator = { "󰆕 ", "LspKindOperator" }, TypeParameter = { "󰊄 ", "LspKindTypeParameter" }, TypeAlias = { " ", "LspKindTypeAlias" }, Parameter = { " ", "LspKindParameter" }, StaticMethod = { "󰠄 ", "LspKindStaticMethod" }, Macro = { " ", "LspKindMacro" }, Text = { "󰉿 ", "LspKindText" }, Snippet = { " ", "LspKindSnippet" }, Folder = { " ", "LspKindFolder" }, Unit = { "󰉻 ", "LspKindUnit" }, Value = { " ", "LspKindValue" }, } end -- Backwards compatibility function M.custom_colors() local C = require("catppuccin.palettes").get_palette() return { normal_bg = C.base, title_bg = C.green, red = C.red, magenta = C.maroon, orange = C.peach, yellow = C.yellow, green = C.green, cyan = C.sky, blue = C.blue, purple = C.mauve, white = C.text, black = C.crust, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/lsp_trouble.lua ================================================ local M = {} M.url = "https://github.com/folke/trouble.nvim" function M.get() return { TroubleText = { fg = C.green }, TroubleCount = { fg = C.pink, bg = O.transparent_background and C.none or C.surface1 }, TroubleNormal = { fg = C.text, bg = O.transparent_background and C.none or C.crust }, TroubleNormalNC = { link = "TroubleNormal" }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/markview.lua ================================================ local M = {} M.url = "https://github.com/OXY2DEV/markview.nvim" -- markview.nvim highlight groups: -- https://github.com/OXY2DEV/markview.nvim#-highlight-groups function M.get() local darkening_percentage = O.transparent_background and U.vary_color({ latte = 0.15 }, 0.28) or 0.095 local blockquote_bg = not O.transparent_background and C.mantle or nil local groups = { MarkviewBlockQuoteDefault = { fg = C.overlay2, bg = C.mantle }, MarkviewBlockQuoteError = { fg = C.red, bg = U.darken(C.red, darkening_percentage, blockquote_bg) }, MarkviewBlockQuoteNote = { fg = C.blue, bg = U.darken(C.blue, darkening_percentage, blockquote_bg) }, MarkviewBlockQuoteOk = { fg = C.green, bg = U.darken(C.green, darkening_percentage, blockquote_bg) }, MarkviewBlockQuoteSpecial = { fg = C.mauve, bg = U.darken(C.pink, darkening_percentage, blockquote_bg) }, MarkviewBlockQuoteWarn = { fg = C.yellow, bg = U.darken(C.yellow, darkening_percentage, blockquote_bg) }, MarkviewHyperlink = { link = "@markup.link.url" }, MarkviewCode = { bg = C.mantle }, MarkviewCodeFg = { fg = C.mantle }, MarkviewCodeInfo = { fg = C.overlay2, bg = C.mantle }, MarkviewInlineCode = { bg = C.surface0 }, MarkviewTableHeader = { fg = C.blue }, } local rainbow = { [0] = C.overlay2, [7] = C.mauve, } local syntax = require("catppuccin.groups.syntax").get() for i = 0, 7 do local color = rainbow[i] or syntax["rainbow" .. i].fg local bg = U.darken(color, darkening_percentage, C.base) groups["MarkviewPalette" .. i] = { fg = color, bg = bg } groups["MarkviewPalette" .. i .. "Fg"] = { fg = color } groups["MarkviewPalette" .. i .. "Bg"] = { bg = bg } groups["MarkviewIcon" .. i] = { fg = color, bg = C.mantle } end return groups end return M ================================================ FILE: lua/catppuccin/groups/integrations/mason.lua ================================================ local M = {} M.url = "https://github.com/mason-org/mason.nvim" function M.get() local bg = O.transparent_background and C.none or C.lavender local fg = O.transparent_background and C.lavender or C.base local secondary_bg = O.transparent_background and C.none or C.blue local secondary_fg = O.transparent_background and C.blue or C.base local muted_bg = O.transparent_background and C.none or C.overlay0 local muted_fg = O.transparent_background and C.overlay0 or C.base return { MasonHeader = { fg = fg, bg = bg, style = { "bold" } }, MasonHeaderSecondary = { fg = secondary_fg, bg = secondary_bg, style = { "bold" } }, MasonHighlight = { fg = C.green }, MasonHighlightBlock = { bg = O.transparent_background and C.none or C.green, fg = O.transparent_background and C.green or C.base, }, MasonHighlightBlockBold = { bg = secondary_bg, fg = secondary_fg, bold = true }, MasonHighlightSecondary = { fg = C.mauve }, MasonHighlightBlockSecondary = { fg = secondary_fg, bg = secondary_bg }, MasonHighlightBlockBoldSecondary = { fg = fg, bg = bg, bold = true }, MasonMuted = { fg = C.overlay0 }, MasonMutedBlock = { bg = muted_bg, fg = muted_fg }, MasonMutedBlockBold = { bg = C.yellow, fg = C.base, bold = true }, MasonError = { fg = C.red }, MasonHeading = { fg = C.lavender, bold = true }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/mini.lua ================================================ local M = {} M.url = "https://github.com/echasnovski/mini.nvim" function M.get() local transparent_background = require("catppuccin").options.transparent_background local bg_highlight = transparent_background and "NONE" or C.base local inactive_bg = transparent_background and "NONE" or C.mantle local indentscope_color = O.integrations.mini.indentscope_color return { MiniAnimateCursor = { style = { "reverse", "nocombine" } }, MiniAnimateNormalFloat = { link = "NormalFloat" }, MiniClueBorder = { link = "FloatBorder" }, MiniClueDescGroup = { link = "DiagnosticFloatingWarn" }, MiniClueDescSingle = { link = "NormalFloat" }, MiniClueNextKey = { link = "DiagnosticFloatingHint" }, MiniClueNextKeyWithPostkeys = { link = "DiagnosticFloatingError" }, MiniClueSeparator = { link = "DiagnosticFloatingInfo" }, MiniClueTitle = { link = "FloatTitle" }, MiniCompletionActiveParameter = { style = { "underline" } }, MiniCursorword = { style = { "underline" } }, MiniCursorwordCurrent = { style = { "underline" } }, MiniDepsChangeAdded = { link = "diffAdded" }, MiniDepsChangeRemoved = { link = "diffRemoved" }, MiniDepsHint = { link = "DiagnosticHint" }, MiniDepsInfo = { link = "DiagnosticInfo" }, MiniDepsMsgBreaking = { link = "DiagnosticWarn" }, MiniDepsPlaceholder = { link = "Comment" }, MiniDepsTitle = { link = "Title" }, MiniDepsTitleError = { bg = C.red, fg = C.base }, MiniDepsTitleSame = { link = "DiffText" }, MiniDepsTitleUpdate = { bg = C.green, fg = C.base }, MiniDiffSignAdd = { fg = C.green }, MiniDiffSignChange = { fg = C.yellow }, MiniDiffSignDelete = { fg = C.red }, MiniDiffOverAdd = { link = "DiffAdd" }, MiniDiffOverChange = { link = "DiffText" }, MiniDiffOverContext = { link = "DiffChange" }, MiniDiffOverDelete = { link = "DiffDelete" }, MiniFilesBorder = { link = "FloatBorder" }, MiniFilesBorderModified = { link = "DiagnosticFloatingWarn" }, MiniFilesCursorLine = { link = "CursorLine" }, MiniFilesDirectory = { link = "Directory" }, MiniFilesFile = { fg = C.text }, MiniFilesNormal = { link = "NormalFloat" }, MiniFilesTitle = { link = "FloatTitle" }, MiniFilesTitleFocused = O.float.solid and { fg = C.crust, bg = C.mauve, } or { fg = C.subtext0, bg = (O.float.transparent and vim.o.winblend == 0) and C.none or C.mantle, style = { "bold" }, }, MiniHipatternsFixme = { fg = C.base, bg = C.red, style = { "bold" } }, MiniHipatternsHack = { fg = C.base, bg = C.yellow, style = { "bold" } }, MiniHipatternsNote = { fg = C.base, bg = C.sky, style = { "bold" } }, MiniHipatternsTodo = { fg = C.base, bg = C.teal, style = { "bold" } }, MiniIconsAzure = { fg = C.sapphire }, MiniIconsBlue = { fg = C.blue }, MiniIconsCyan = { fg = C.teal }, MiniIconsGreen = { fg = C.green }, MiniIconsGrey = { fg = C.text }, MiniIconsOrange = { fg = C.peach }, MiniIconsPurple = { fg = C.mauve }, MiniIconsRed = { fg = C.red }, MiniIconsYellow = { fg = C.yellow }, MiniIndentscopeSymbol = { fg = C[indentscope_color] or C.overlay2 }, MiniJump = { fg = C.overlay2, bg = C.pink }, MiniJump2dDim = { fg = C.overlay0 }, MiniJump2dSpot = { bg = C.base, fg = C.peach, style = { "bold", "underline" } }, MiniJump2dSpotAhead = { bg = C.dim, fg = C.teal }, MiniJump2dSpotUnique = { bg = C.base, fg = C.sky, style = { "bold" } }, MiniMapNormal = { link = "NormalFloat" }, MiniMapSymbolCount = { link = "Special" }, MiniMapSymbolLine = { link = "Title" }, MiniMapSymbolView = { link = "Delimiter" }, MiniNotifyBorder = { link = "FloatBorder" }, MiniNotifyNormal = { link = "NormalFloat" }, MiniNotifyTitle = { link = "FloatTitle" }, MiniOperatorsExchangeFrom = { link = "IncSearch" }, MiniPickBorder = { link = "FloatBorder" }, MiniPickBorderBusy = { link = "DiagnosticFloatingWarn" }, MiniPickBorderText = O.float.solid and { fg = C.crust, bg = C.mauve, } or { fg = C.mauve, bg = (O.float.transparent and vim.o.winblend == 0) and C.none or C.mantle }, MiniPickIconDirectory = { link = "Directory" }, MiniPickIconFile = { link = "MiniPickNormal" }, MiniPickHeader = { link = "DiagnosticFloatingHint" }, MiniPickMatchCurrent = { fg = C.flamingo, bg = C.surface0, style = { "bold" }, }, MiniPickMatchMarked = { link = "Visual" }, MiniPickMatchRanges = { link = "DiagnosticFloatingHint" }, MiniPickNormal = { link = "NormalFloat" }, MiniPickPreviewLine = { link = "CursorLine" }, MiniPickPreviewRegion = { link = "IncSearch" }, MiniPickPrompt = { fg = C.text, bg = O.float.transparent and C.none or C.mantle }, MiniPickPromptCaret = { fg = C.flamingo, bg = O.float.transparent and C.none or C.mantle, }, MiniPickPromptPrefix = { fg = C.flamingo, bg = O.float.transparent and C.none or C.mantle, }, MiniStarterCurrent = {}, MiniStarterFooter = { fg = C.yellow, style = { "italic" } }, MiniStarterHeader = { fg = C.blue }, MiniStarterInactive = { fg = C.surface2, style = O.styles.comments }, MiniStarterItem = { fg = C.text }, MiniStarterItemBullet = { fg = C.blue }, MiniStarterItemPrefix = { fg = C.pink }, MiniStarterSection = { fg = C.flamingo }, MiniStarterQuery = { fg = C.green }, MiniStatuslineDevinfo = { fg = C.subtext1, bg = C.surface1 }, MiniStatuslineFileinfo = { fg = C.subtext1, bg = C.surface1 }, MiniStatuslineFilename = { fg = C.text, bg = C.mantle }, MiniStatuslineInactive = { fg = C.blue, bg = C.mantle }, MiniStatuslineModeCommand = { fg = C.base, bg = C.peach, style = { "bold" } }, MiniStatuslineModeInsert = { fg = C.base, bg = C.green, style = { "bold" } }, MiniStatuslineModeNormal = { fg = C.mantle, bg = C.blue, style = { "bold" } }, MiniStatuslineModeOther = { fg = C.base, bg = C.teal, style = { "bold" } }, MiniStatuslineModeReplace = { fg = C.base, bg = C.red, style = { "bold" } }, MiniStatuslineModeVisual = { fg = C.base, bg = C.mauve, style = { "bold" } }, MiniSurround = { bg = C.pink, fg = C.surface1 }, MiniTablineCurrent = { fg = C.text, bg = C.base, sp = C.red, style = { "bold", "italic", "underline" } }, MiniTablineFill = { bg = bg_highlight }, MiniTablineHidden = { fg = C.text, bg = inactive_bg }, MiniTablineModifiedCurrent = { fg = C.red, bg = C.none, style = { "bold", "italic" } }, MiniTablineModifiedHidden = { fg = C.red, bg = C.none }, MiniTablineModifiedVisible = { fg = C.red, bg = C.none }, MiniTablineTabpagesection = { fg = C.surface1, bg = C.base }, MiniTablineVisible = { bg = C.none }, MiniTestEmphasis = { style = { "bold" } }, MiniTestFail = { fg = C.red, style = { "bold" } }, MiniTestPass = { fg = C.green, style = { "bold" } }, MiniTrailspace = { bg = C.red }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/navic.lua ================================================ local M = {} M.url = "https://github.com/SmiteshP/nvim-navic" function M.get() local background = O.integrations.navic.custom_bg and O.integrations.navic.custom_bg or C.none if O.integrations.navic.custom_bg == "lualine" then background = C.mantle end return { NavicIconsFile = { fg = C.blue, bg = background }, NavicIconsModule = { fg = C.blue, bg = background }, NavicIconsNamespace = { fg = C.blue, bg = background }, NavicIconsPackage = { fg = C.blue, bg = background }, NavicIconsClass = { fg = C.yellow, bg = background }, NavicIconsMethod = { fg = C.blue, bg = background }, NavicIconsProperty = { fg = C.green, bg = background }, NavicIconsField = { fg = C.green, bg = background }, NavicIconsConstructor = { fg = C.blue, bg = background }, NavicIconsEnum = { fg = C.green, bg = background }, NavicIconsInterface = { fg = C.yellow, bg = background }, NavicIconsFunction = { fg = C.blue, bg = background }, NavicIconsVariable = { fg = C.flamingo, bg = background }, NavicIconsConstant = { fg = C.peach, bg = background }, NavicIconsString = { fg = C.green, style = O.styles.strings, bg = background }, NavicIconsNumber = { fg = C.peach, bg = background }, NavicIconsBoolean = { fg = C.peach, bg = background }, NavicIconsArray = { fg = C.peach, bg = background }, NavicIconsObject = { fg = C.peach, bg = background }, NavicIconsKey = { fg = C.pink, style = O.styles.keywords, bg = background }, NavicIconsNull = { fg = C.peach, bg = background }, NavicIconsEnumMember = { fg = C.red, bg = background }, NavicIconsStruct = { fg = C.blue, bg = background }, NavicIconsEvent = { fg = C.blue, bg = background }, NavicIconsOperator = { fg = C.sky, bg = background }, NavicIconsTypeParameter = { fg = C.blue, bg = background }, NavicText = { fg = C.sapphire, bg = background }, NavicSeparator = { fg = C.text, bg = background }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/neogit.lua ================================================ local M = {} M.url = "https://github.com/NeogitOrg/neogit" function M.get() return { NeogitBranch = { fg = C.peach, style = { "bold" }, }, NeogitRemote = { fg = C.green, style = { "bold" }, }, NeogitUnmergedInto = { link = "Function", }, NeogitUnpulledFrom = { link = "Function", }, NeogitObjectId = { link = "Comment", }, NeogitStash = { link = "Comment", }, NeogitRebaseDone = { link = "Comment", }, NeogitHunkHeader = { bg = U.darken(C.blue, 0.095, C.base), fg = U.darken(C.blue, 0.5, C.base), }, NeogitHunkHeaderHighlight = { bg = U.darken(C.blue, 0.215, C.base), fg = C.blue, }, NeogitDiffContextHighlight = { bg = C.surface0, }, NeogitDiffDeleteHighlight = { bg = U.darken(C.red, 0.345, C.base), fg = U.lighten(C.red, 0.850, C.text), }, NeogitDiffAddHighlight = { bg = U.darken(C.green, 0.345, C.base), fg = U.lighten(C.green, 0.850, C.text), }, NeogitDiffDelete = { bg = U.darken(C.red, 0.095, C.base), fg = U.darken(C.red, 0.800, C.base), }, NeogitDiffAdd = { bg = U.darken(C.green, 0.095, C.base), fg = U.darken(C.green, 0.800, C.base), }, NeogitCommitViewHeader = { bg = U.darken(C.blue, 0.300, C.base), fg = U.lighten(C.blue, 0.800, C.text), }, NeogitChangeModified = { fg = C.blue, style = { "bold" }, }, NeogitChangeDeleted = { fg = C.red, style = { "bold" }, }, NeogitChangeAdded = { fg = C.green, style = { "bold" }, }, NeogitChangeRenamed = { fg = C.mauve, style = { "bold" }, }, NeogitChangeUpdated = { fg = C.peach, style = { "bold" }, }, NeogitChangeCopied = { fg = C.pink, style = { "bold" }, }, NeogitChangeBothModified = { fg = C.yellow, style = { "bold" }, }, NeogitChangeNewFile = { fg = C.green, style = { "bold" }, }, NeogitUntrackedfiles = { fg = C.mauve, style = { "bold" }, }, NeogitUnstagedchanges = { fg = C.mauve, style = { "bold" }, }, NeogitUnmergedchanges = { fg = C.mauve, style = { "bold" }, }, NeogitUnpulledchanges = { fg = C.mauve, style = { "bold" }, }, NeogitRecentcommits = { fg = C.mauve, style = { "bold" }, }, NeogitStagedchanges = { fg = C.mauve, style = { "bold" }, }, NeogitStashes = { fg = C.mauve, style = { "bold" }, }, NeogitRebasing = { fg = C.mauve, style = { "bold" }, }, NeogitNotificationInfo = { fg = C.blue, }, NeogitNotificationWarning = { fg = C.yellow, }, NeogitNotificationError = { fg = C.red, }, NeogitGraphRed = { fg = C.red, }, NeogitGraphWhite = { fg = C.base, }, NeogitGraphYellow = { fg = C.yellow, }, NeogitGraphGreen = { fg = C.green, }, NeogitGraphCyan = { fg = C.blue, }, NeogitGraphBlue = { fg = C.blue, }, NeogitGraphPurple = { fg = C.lavender, }, NeogitGraphGray = { fg = C.subtext1, }, NeogitGraphOrange = { fg = C.peach, }, NeogitGraphBoldRed = { fg = C.red, style = { "bold" }, }, NeogitGraphBoldWhite = { fg = C.white, style = { "bold" }, }, NeogitGraphBoldYellow = { fg = C.yellow, style = { "bold" }, }, NeogitGraphBoldGreen = { fg = C.green, style = { "bold" }, }, NeogitGraphBoldCyan = { fg = C.blue, style = { "bold" }, }, NeogitGraphBoldBlue = { fg = C.blue, style = { "bold" }, }, NeogitGraphBoldPurple = { fg = C.lavender, style = { "bold" }, }, NeogitGraphBoldGray = { fg = C.subtext1, style = { "bold" }, }, NeogitDiffContext = { bg = C.base, }, NeogitPopupBold = { style = { "bold" }, }, NeogitPopupSwitchKey = { fg = C.lavender, }, NeogitPopupOptionKey = { fg = C.lavender, }, NeogitPopupConfigKey = { fg = C.lavender, }, NeogitPopupActionKey = { fg = C.lavender, }, NeogitFilePath = { fg = C.blue, style = { "italic" }, }, NeogitDiffHeader = { bg = C.base, fg = C.blue, style = { "bold" }, }, NeogitDiffHeaderHighlight = { bg = C.base, fg = C.peach, style = { "bold" }, }, NeogitUnpushedTo = { fg = C.lavender, style = { "bold" }, }, NeogitFold = { fg = C.none, bg = C.none, }, NeogitSectionHeader = { fg = C.mauve, style = { "bold" }, }, NeogitTagName = { fg = C.yellow, }, NeogitTagDistance = { fg = C.blue, }, NeogitWinSeparator = { link = "WinSeparator", }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/neotest.lua ================================================ local M = {} M.url = "https://github.com/nvim-neotest/neotest" function M.get() return { NeotestPassed = { fg = C.green }, NeotestFailed = { fg = C.red }, NeotestRunning = { fg = C.yellow }, NeotestSkipped = { fg = C.blue }, NeotestTest = { fg = C.text }, NeotestNamespace = { fg = C.mauve }, NeotestFocused = { style = { "bold", "underline" } }, NeotestFile = { fg = C.blue }, NeotestDir = { fg = C.blue }, NeotestIndent = { fg = C.overlay1 }, NeotestExpandMarker = { fg = C.overlay1 }, NeotestAdapterName = { fg = C.maroon }, NeotestWinSelect = { fg = C.blue, style = { "bold" } }, NeotestMarked = { fg = C.peach, style = { "bold" } }, NeotestTarget = { fg = C.red }, NeotestUnknown = { fg = C.text }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/neotree.lua ================================================ local M = {} M.url = "https://github.com/nvim-neo-tree/neo-tree.nvim" function M.get() local active_bg = O.transparent_background and C.none or C.mantle local inactive_bg = O.transparent_background and C.none or C.base return { NeoTreeDirectoryName = { fg = C.blue }, NeoTreeDirectoryIcon = { fg = C.blue }, NeoTreeNormal = { fg = C.text, bg = active_bg }, NeoTreeNormalNC = { fg = C.text, bg = active_bg }, NeoTreeExpander = { fg = C.overlay0 }, NeoTreeIndentMarker = { fg = C.overlay0 }, NeoTreeRootName = { fg = C.blue, style = { "bold" } }, NeoTreeSymbolicLinkTarget = { fg = C.pink }, NeoTreeModified = { fg = C.peach }, NeoTreeGitAdded = { fg = C.green }, NeoTreeGitConflict = { fg = C.red }, NeoTreeGitDeleted = { fg = C.red }, NeoTreeGitIgnored = { fg = C.overlay0 }, NeoTreeGitModified = { fg = C.yellow }, NeoTreeGitUnstaged = { fg = C.red }, NeoTreeGitUntracked = { fg = C.mauve }, NeoTreeGitStaged = { fg = C.green }, NeoTreeFloatBorder = { link = "FloatBorder" }, NeoTreeFloatTitle = { link = "FloatTitle" }, NeoTreeTitleBar = { fg = C.mantle, bg = C.blue }, NeoTreeFileNameOpened = { fg = C.pink }, NeoTreeDimText = { fg = C.overlay1 }, NeoTreeFilterTerm = { fg = C.green, style = { "bold" } }, NeoTreeTabActive = { bg = active_bg, fg = C.lavender, style = { "bold" } }, NeoTreeTabInactive = { bg = inactive_bg, fg = C.overlay0 }, NeoTreeTabSeparatorActive = { fg = active_bg, bg = active_bg }, NeoTreeTabSeparatorInactive = { fg = inactive_bg, bg = inactive_bg }, NeoTreeVertSplit = { fg = C.base, bg = inactive_bg }, NeoTreeWinSeparator = { fg = O.transparent_background and C.surface1 or C.base, bg = O.transparent_background and C.none or C.base, }, NeoTreeStatusLineNC = { fg = C.mantle, bg = C.mantle }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/noice.lua ================================================ local M = {} M.url = "https://github.com/folke/noice.nvim" local virtual_text = O.lsp_styles.virtual_text function M.get() return { -- Personally the default integration is already pretty good NoiceCmdline = { fg = C.text }, NoiceCmdlineIcon = { fg = C.sky, style = virtual_text.information }, NoiceCmdlineIconSearch = { fg = C.yellow }, NoiceCmdlinePopupBorder = { fg = C.lavender }, NoiceCmdlinePopupBorderSearch = { fg = C.yellow }, NoiceConfirmBorder = { fg = C.blue }, NoiceMini = { fg = C.subtext0, blend = 0 }, NoiceFormatProgressDone = { bg = O.transparent_background and C.none or U.darken(C.sky, 0.30, C.base), fg = C.subtext0, }, NoiceFormatProgressTodo = { bg = O.transparent_background and C.none or U.vary_color({ latte = U.lighten(C.mantle, 0.70, C.base) }, U.darken(C.surface0, 0.64, C.base)), fg = C.subtext0, }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/notifier.lua ================================================ local M = {} M.url = "https://github.com/vigoux/notifier.nvim" function M.get() return { NotifierIcon = { fg = C.mauve }, NotifierContent = { fg = C.overlay2, blend = 0, style = { "italic" } }, NotifierContentDim = { fg = C.overlay1, blend = 0, style = { "italic" } }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/notify.lua ================================================ local M = {} M.url = "https://github.com/rcarriga/nvim-notify" function M.get() return { NotifyBackground = { bg = (O.transparent_background and vim.o.winblend == 0) and "#000000" or C.mantle }, NotifyERRORBorder = { fg = C.red }, NotifyERRORIcon = { fg = C.red }, NotifyERRORTitle = { fg = C.red, style = { "italic" } }, NotifyWARNBorder = { fg = C.yellow }, NotifyWARNIcon = { fg = C.yellow }, NotifyWARNTitle = { fg = C.yellow, style = { "italic" } }, NotifyINFOBorder = { fg = C.blue }, NotifyINFOIcon = { fg = C.blue }, NotifyINFOTitle = { fg = C.blue, style = { "italic" } }, NotifyDEBUGBorder = { fg = C.peach }, NotifyDEBUGIcon = { fg = C.peach }, NotifyDEBUGTitle = { fg = C.peach, style = { "italic" } }, NotifyTRACEBorder = { fg = C.rosewater }, NotifyTRACEIcon = { fg = C.rosewater }, NotifyTRACETitle = { fg = C.rosewater, style = { "italic" } }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/nvim_surround.lua ================================================ local M = {} M.url = "https://github.com/kylechui/nvim-surround" function M.get() return { NvimSurroundHighlight = { sp = C.peach, style = { "underline" } }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/nvimtree.lua ================================================ local M = {} M.url = "https://github.com/nvim-tree/nvim-tree.lua" function M.get() return { NvimTreeFolderName = { fg = C.blue }, NvimTreeFolderIcon = { fg = C.blue }, NvimTreeNormal = { fg = C.text, bg = O.transparent_background and C.none or C.mantle }, NvimTreeOpenedFolderName = { fg = C.blue }, NvimTreeEmptyFolderName = { fg = C.blue }, NvimTreeIndentMarker = { fg = C.overlay0 }, NvimTreeWinSeparator = { fg = O.transparent_background and C.surface1 or C.base, bg = O.transparent_background and C.none or C.base, }, NvimTreeRootFolder = { fg = C.lavender, style = { "bold" } }, NvimTreeSymlink = { fg = C.pink }, NvimTreeStatuslineNc = { fg = C.mantle, bg = C.mantle }, NvimTreeGitDirty = { fg = C.yellow }, NvimTreeGitNew = { fg = C.blue }, NvimTreeGitDeleted = { fg = C.red }, NvimTreeSpecialFile = { fg = C.flamingo }, NvimTreeImageFile = { fg = C.text }, NvimTreeOpenedFile = { fg = C.pink }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/octo.lua ================================================ local M = {} M.url = "https://github.com/pwntester/octo.nvim" function M.get() return { -- colors OctoGrey = { fg = C.base }, OctoBlue = { fg = C.blue }, OctoGreen = { fg = C.green }, OctoRed = { fg = C.red }, OctoPurple = { fg = C.mauve }, OctoYellow = { fg = C.yellow }, -- highlight groups OctoDirty = { link = "ErrorMsg" }, OctoIssueTitle = { link = "PreProc" }, OctoIssueId = { link = "Question" }, OctoEmpty = { link = "Comment" }, OctoFloat = { link = "NormalNC" }, OctoDate = { link = "Comment" }, OctoSymbol = { link = "Comment" }, OctoTimelineItemHeading = { link = "Comment" }, OctoDetailsLabel = { link = "Title" }, OctoMissingDetails = { link = "Comment" }, OctoDetailsValue = { link = "Identifier" }, OctoDiffHunkPosition = { link = "NormalFloat" }, OctoCommentLine = { link = "TabLineSel" }, OctoViewer = { fg = C.base, bg = C.blue }, OctoBubble = { fg = C.text, bg = C.base }, OctoBubbleGrey = { fg = C.text, bg = C.base }, OctoBubbleDelimiterGrey = { fg = C.base }, OctoBubbleGreen = { fg = C.base, bg = C.green }, OctoBubbleDelimiterGreen = { fg = C.green }, OctoBubbleBlue = { fg = C.base, bg = C.sky }, OctoBubbleDelimiterBlue = { fg = C.sky }, OctoBubbleYellow = { fg = C.base, bg = C.yellow }, OctoBubbleDelimiterYellow = { fg = C.yellow }, OctoBubbleRed = { fg = C.base, bg = C.red }, OctoBubbleDelimiterRed = { fg = C.red }, OctoBubblePurple = { fg = C.base, bg = C.mauve }, OctoBubbleDelimiterPurple = { fg = C.mauve }, OctoUser = { link = "OctoBubble" }, OctoUserViewer = { link = "OctoViewer" }, OctoReaction = { link = "OctoBubble" }, OctoReactionViewer = { link = "OctoViewer" }, OctoPassingTest = { link = "OctoGreen" }, OctoFailingTest = { link = "OctoRed" }, OctoPullAdditions = { link = "OctoGreen" }, OctoPullDeletions = { link = "OctoRed" }, OctoPullModifications = { fg = C.peach }, OctoStateOpen = { fg = C.green, bg = C.base }, OctoStateOpenFloat = { fg = C.green, bg = C.base }, OctoStateClosed = { fg = C.red, bg = C.base }, OctoStateClosedFloat = { fg = C.red, bg = C.base }, OctoStateMerged = { fg = C.mauve, bg = C.base }, OctoStateMergedFloat = { fg = C.mauve, bg = C.base }, OctoStatePending = { fg = C.peach, bg = C.base }, OctoStatePendingFloat = { fg = C.peach, bg = C.base }, OctoStateApproved = { link = "OctoStateOpen" }, OctoStateApprovedFloat = { link = "OctoStateOpen" }, OctoStateChangesRequested = { fg = C.maroon, bg = C.base }, OctoStateChangesRequestedFloat = { fg = C.maroon, bg = C.base }, OctoStateCommented = { link = "Normal" }, OctoStateCommentedFloat = { link = "Normal" }, OctoStateDismissed = { link = "OctoStateClosed" }, OctoStateDismissedFloat = { link = "OctoStateClosed" }, OctoStateSubmittedBubble = { link = "OctoBubbleGreen" }, OctoFilePanelCounter = { fg = C.blue, style = { "bold" } }, OctoFilePanelTitle = { fg = C.blue, style = { "bold" } }, OctoFilePanelFileName = {}, OctoNormalFront = { fg = C.text }, OctoYellowFloat = { fg = C.yellow, bg = C.base }, OctoPurpleFloat = { fg = C.mauve, bg = C.base }, OctoRedFloat = { fg = C.red, bg = C.base }, OctoGreenFloat = { fg = C.green, bg = C.base }, OctoGreyFloat = { fg = C.text, bg = C.base }, OctoBlueFloat = { fg = C.blue, bg = C.base }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/overseer.lua ================================================ local M = {} M.url = "https://github.com/stevearc/overseer.nvim" function M.get() return { OverseerPENDING = { fg = C.grey }, OverseerRUNNING = { fg = C.yellow }, OverseerSUCCESS = { fg = C.green }, OverseerCANCELED = { fg = C.overlay2 }, OverseerFAILURE = { fg = C.red }, OverseerTask = { fg = C.blue }, OverseerTaskBorder = { fg = C.sky }, OverseerOutput = { fg = C.text }, OverseerComponent = { fg = C.yellow }, OverseerField = { fg = C.green }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/pounce.lua ================================================ local M = {} M.url = "https://github.com/rlane/pounce.nvim" function M.get() return { PounceMatch = { bg = U.lighten(C.green, 0.7), fg = C.base, style = { "bold" } }, PounceGap = { bg = U.darken(C.green, 0.7), fg = C.base, style = { "bold" } }, PounceAccept = { bg = C.peach, fg = C.base, style = { "bold" } }, PounceAcceptBest = { bg = C.teal, fg = C.base, style = { "bold" } }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/rainbow_delimiters.lua ================================================ local M = {} M.url = "https://github.com/HiPhish/rainbow-delimiters.nvim" function M.get() return { RainbowDelimiterRed = { fg = C.red }, RainbowDelimiterYellow = { fg = C.yellow }, RainbowDelimiterBlue = { fg = C.blue }, RainbowDelimiterOrange = { fg = C.peach }, RainbowDelimiterGreen = { fg = C.green }, RainbowDelimiterViolet = { fg = C.mauve }, RainbowDelimiterCyan = { fg = C.teal }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/render_markdown.lua ================================================ local M = {} M.url = "https://github.com/MeanderingProgrammer/render-markdown.nvim" -- render-markdown.nvim highlight groups: -- https://github.com/MeanderingProgrammer/render-markdown.nvim?tab=readme-ov-file#colors function M.get() local groups = { RenderMarkdownCode = { bg = C.mantle }, RenderMarkdownCodeInline = { bg = C.surface0 }, RenderMarkdownBullet = { fg = C.sky }, RenderMarkdownTableHead = { fg = C.blue }, RenderMarkdownTableRow = { fg = C.lavender }, RenderMarkdownSuccess = { fg = C.green }, RenderMarkdownInfo = { fg = C.sky }, RenderMarkdownHint = { fg = C.teal }, RenderMarkdownWarn = { fg = C.yellow }, RenderMarkdownError = { fg = C.red }, } local syntax = require("catppuccin.groups.syntax").get() local darkening_percentage = O.transparent_background and U.vary_color({ latte = 0.15 }, 0.28) or 0.095 for i = 1, 6 do local color = syntax["rainbow" .. i].fg groups["RenderMarkdownH" .. i] = { fg = color } groups["RenderMarkdownH" .. i .. "Bg"] = { bg = U.darken(color, darkening_percentage, C.base) } end return groups end return M ================================================ FILE: lua/catppuccin/groups/integrations/sandwich.lua ================================================ local M = {} M.url = "https://github.com/machakann/vim-sandwich" function M.get() return { OperatorSandwichAdd = { bg = C.blue, fg = C.base }, OperatorSandwichBuns = { bg = C.blue, fg = C.base }, OperatorSandwichChange = { bg = C.blue, fg = C.base }, OperatorSandwichDelete = { bg = C.blue, fg = C.base }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/signify.lua ================================================ local M = {} M.url = "https://github.com/mhinz/vim-signify" function M.get() return { SignifySignAdd = { fg = C.green }, SignifySignChange = { fg = C.yellow }, SignifySignDelete = { fg = C.red }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/snacks.lua ================================================ local M = {} M.url = "https://github.com/folke/snacks.nvim" function M.get() local indent_scope_color = O.integrations.snacks.indent_scope_color local hlgroups = { SnacksNormal = { link = "Normal" }, SnacksWinBar = { link = "Title" }, SnacksBackdrop = { link = "FloatShadow" }, SnacksNormalNC = { link = "NormalFloat" }, SnacksWinBarNC = { link = "SnacksWinBar" }, SnacksNotifierInfo = { fg = C.blue }, SnacksNotifierIconInfo = { fg = C.blue }, SnacksNotifierTitleInfo = { fg = C.blue, style = { "italic" } }, SnacksNotifierFooterInfo = { link = "DiagnosticInfo" }, SnacksNotifierBorderInfo = { fg = C.blue }, SnacksNotifierWarn = { fg = C.yellow }, SnacksNotifierIconWarn = { fg = C.yellow }, SnacksNotifierTitleWarn = { fg = C.yellow, style = { "italic" } }, SnacksNotifierBorderWarn = { fg = C.yellow }, SnacksNotifierFooterWarn = { link = "DiagnosticWarn" }, SnacksNotifierDebug = { fg = C.peach }, SnacksNotifierIconDebug = { fg = C.peach }, SnacksNotifierTitleDebug = { fg = C.peach, style = { "italic" } }, SnacksNotifierBorderDebug = { fg = C.peach }, SnacksNotifierFooterDebug = { link = "DiagnosticHint" }, SnacksNotifierError = { fg = C.red }, SnacksNotifierIconError = { fg = C.red }, SnacksNotifierTitleError = { fg = C.red, style = { "italic" } }, SnacksNotifierBorderError = { fg = C.red }, SnacksNotifierFooterError = { link = "DiagnosticError" }, SnacksNotifierTrace = { fg = C.rosewater }, SnacksNotifierIconTrace = { fg = C.rosewater }, SnacksNotifierTitleTrace = { fg = C.rosewater, style = { "italic" } }, SnacksNotifierBorderTrace = { fg = C.rosewater }, SnacksNotifierFooterTrace = { link = "DiagnosticHint" }, SnacksDashboardNormal = { link = "Normal" }, SnacksDashboardDesc = { fg = C.blue }, SnacksDashboardFile = { fg = C.lavender }, SnacksDashboardDir = { link = "NonText" }, SnacksDashboardFooter = { fg = C.yellow, style = { "italic" } }, SnacksDashboardHeader = { fg = C.blue }, SnacksDashboardIcon = { fg = C.pink, bold = true }, SnacksDashboardKey = { fg = C.peach }, SnacksDashboardTerminal = { link = "SnacksDashboardNormal" }, SnacksDashboardSpecial = { link = "Special" }, SnacksDashboardTitle = { link = "Title" }, SnacksIndent = { fg = C.surface0 }, SnacksIndentScope = { fg = C[indent_scope_color] or C.overlay2 }, SnacksPickerSelected = { fg = O.float.transparent and C.flamingo or C.text, bg = O.float.transparent and C.none or C.surface0, style = { "bold" }, }, SnacksPickerMatch = { fg = C.blue }, SnacksPicker = { link = "NormalFloat" }, SnacksPickerBorder = { link = "FloatBorder" }, SnacksPickerInputBorder = { link = "SnacksPickerBorder" }, SnacksPickerInput = { link = "NormalFloat" }, SnacksPickerPrompt = { fg = C.flamingo }, } if O.float.solid then hlgroups["SnacksPickerTitle"] = { fg = C.crust, bg = C.mauve, } hlgroups["SnacksPickerPreviewTitle"] = { fg = C.crust, bg = C.green, } hlgroups["SnacksPickerInputTitle"] = { fg = C.crust, bg = C.red, } hlgroups["SnacksPickerListTitle"] = { fg = C.crust, bg = C.lavender, } end return hlgroups end return M ================================================ FILE: lua/catppuccin/groups/integrations/symbols_outline.lua ================================================ local M = {} M.url = "https://github.com/simrat39/symbols-outline.nvim" function M.get() return { -- https://github.com/simrat39/symbols-outline.nvim FocusedSymbol = { fg = C.yellow, bg = C.none }, -- https://github.com/hedyhli/outline.nvim OutlineCurrent = { link = "FocusedSymbol" }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/telekasten.lua ================================================ local M = {} M.url = "https://github.com/nvim-telekasten/telekasten.nvim" function M.get() return { tkLink = { fg = C.blue }, tkBrackets = { fg = C.pink }, tkTag = { fg = C.sky }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/telescope.lua ================================================ local M = {} M.url = "https://github.com/nvim-telescope/telescope.nvim" function M.get() local hlgroups = { TelescopeBorder = { link = "FloatBorder" }, TelescopeNormal = { link = "NormalFloat" }, TelescopePreviewNormal = { link = "TelescopeNormal" }, TelescopePromptNormal = { link = "TelescopeNormal" }, TelescopeResultsNormal = { link = "TelescopeNormal" }, TelescopeTitle = { link = "FloatTitle" }, TelescopeSelectionCaret = { fg = C.flamingo, bg = C.surface0 }, TelescopeSelection = { fg = C.flamingo, bg = C.surface0, style = { "bold" }, }, TelescopeMatching = { fg = C.blue }, TelescopePromptPrefix = { fg = C.flamingo }, } if O.float.solid then hlgroups["TelescopePreviewTitle"] = { fg = C.crust, bg = C.green, } hlgroups["TelescopePromptTitle"] = { fg = C.crust, bg = C.red, } hlgroups["TelescopeResultsTitle"] = { fg = C.crust, bg = C.lavender, } end return hlgroups end return M ================================================ FILE: lua/catppuccin/groups/integrations/treesitter_context.lua ================================================ local M = {} M.url = "https://github.com/nvim-treesitter/nvim-treesitter-context" function M.get() return { TreesitterContext = { fg = C.text, bg = O.transparent_background and C.none or C.mantle, }, TreesitterContextBottom = { sp = O.transparent_background and C.dim or C.surface0, style = { "underline" }, }, TreesitterContextLineNumber = O.transparent_background and { fg = C.rosewater, } or { fg = C.surface1, bg = C.mantle, }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/ts_rainbow.lua ================================================ local M = {} M.url = "https://github.com/HiPhish/nvim-ts-rainbow" function M.get() return { rainbowcol1 = { fg = C.red }, rainbowcol2 = { fg = C.teal }, rainbowcol3 = { fg = C.yellow }, rainbowcol4 = { fg = C.blue }, rainbowcol5 = { fg = C.pink }, rainbowcol6 = { fg = C.flamingo }, rainbowcol7 = { fg = C.green }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/ts_rainbow2.lua ================================================ local M = {} M.url = "https://github.com/HiPhish/nvim-ts-rainbow2" function M.get() return { TSRainbowRed = { fg = C.red }, TSRainbowYellow = { fg = C.yellow }, TSRainbowBlue = { fg = C.blue }, TSRainbowOrange = { fg = C.peach }, TSRainbowGreen = { fg = C.green }, TSRainbowViolet = { fg = C.mauve }, TSRainbowCyan = { fg = C.teal }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/ufo.lua ================================================ local M = {} M.url = "https://github.com/kevinhwang91/nvim-ufo" M.get = function() return { UfoFoldedFg = { fg = C.lavender }, UfoFoldedEllipsis = { fg = C.crust, bg = C.blue }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/vim_sneak.lua ================================================ local M = {} M.url = "https://github.com/justinmk/vim-sneak" function M.get() return { Sneak = { fg = C.overlay2, bg = C.pink }, SneakScope = { bg = C.text }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/vimwiki.lua ================================================ local M = {} M.url = "https://github.com/vimwiki/vimwiki" function M.get() return { VimwikiLink = { fg = C.sky, bg = C.none }, VimwikiHeaderChar = { fg = C.grey, bg = C.none }, VimwikiHR = { fg = C.yellow, bg = C.none }, VimwikiList = { fg = C.peach, bg = C.none }, VimwikiTag = { fg = C.peach, bg = C.none }, VimwikiMarkers = { fg = C.subtext0, bg = C.none }, VimwikiHeader1 = { fg = C.peach, bg = C.none, style = { "bold" } }, VimwikiHeader2 = { fg = C.green, bg = C.none, style = { "bold" } }, VimwikiHeader3 = { fg = C.blue, bg = C.none, style = { "bold" } }, VimwikiHeader4 = { fg = C.sky, bg = C.none, style = { "bold" } }, VimwikiHeader5 = { fg = C.yellow, bg = C.none, style = { "bold" } }, VimwikiHeader6 = { fg = C.mauve, bg = C.none, style = { "bold" } }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/which_key.lua ================================================ local M = {} M.url = "https://github.com/folke/which-key.nvim" function M.get() return { WhichKey = { link = "NormalFloat" }, WhichKeyBorder = { link = "FloatBorder" }, WhichKeyGroup = { fg = C.blue }, WhichKeySeparator = { fg = C.overlay0 }, WhichKeyDesc = { fg = C.pink }, WhichKeyValue = { fg = C.overlay0 }, } end return M ================================================ FILE: lua/catppuccin/groups/integrations/window_picker.lua ================================================ local M = {} M.url = "https://github.com/s1n7ax/nvim-window-picker" function M.get() return { WindowPickerStatusLine = { fg = C.red, style = { "bold" } }, WindowPickerStatusLineNC = { fg = C.red, style = { "bold" } }, WindowPickerWinBar = { fg = C.red, style = { "bold" } }, WindowPickerWinBarNC = { fg = C.red, style = { "bold" } }, } end return M ================================================ FILE: lua/catppuccin/groups/lsp.lua ================================================ local M = {} function M.get() local virtual_text = O.lsp_styles.virtual_text local underlines = O.lsp_styles.underlines local inlay_hints = O.lsp_styles.inlay_hints local error = C.red local warning = C.yellow local info = C.sky local hint = C.teal local ok = C.green local darkening_percentage = 0.095 return { -- These groups are for the native LSP client. Some other LSP clients may -- use these groups, or use their own. Consult your LSP client's -- documentation. LspReferenceText = { bg = C.surface1 }, -- used for highlighting "text" references LspReferenceRead = { bg = C.surface1 }, -- used for highlighting "read" references LspReferenceWrite = { bg = C.surface1 }, -- used for highlighting "write" references -- highlight diagnostics in numberline DiagnosticVirtualTextError = { bg = O.transparent_background and C.none or U.darken(error, darkening_percentage, C.base), fg = error, style = virtual_text.errors, }, -- Used as the mantle highlight group. Other Diagnostic highlights link to this by default DiagnosticVirtualTextWarn = { bg = O.transparent_background and C.none or U.darken(warning, darkening_percentage, C.base), fg = warning, style = virtual_text.warnings, }, -- Used as the mantle highlight group. Other Diagnostic highlights link to this by default DiagnosticVirtualTextInfo = { bg = O.transparent_background and C.none or U.darken(info, darkening_percentage, C.base), fg = info, style = virtual_text.information, }, -- Used as the mantle highlight group. Other Diagnostic highlights link to this by default DiagnosticVirtualTextHint = { bg = O.transparent_background and C.none or U.darken(hint, darkening_percentage, C.base), fg = hint, style = virtual_text.hints, }, -- Used as the mantle highlight group. Other Diagnostic highlights link to this by default DiagnosticVirtualTextOk = { bg = O.transparent_background and C.none or U.darken(hint, darkening_percentage, C.base), fg = ok, style = virtual_text.ok, }, -- Used as the mantle highlight group. Other Diagnostic highlights link to this by default DiagnosticError = { bg = C.none, fg = error, style = virtual_text.errors }, -- Used as the mantle highlight group. Other Diagnostic highlights link to this by default DiagnosticWarn = { bg = C.none, fg = warning, style = virtual_text.warnings }, -- Used as the mantle highlight group. Other Diagnostic highlights link to this by default DiagnosticInfo = { bg = C.none, fg = info, style = virtual_text.information }, -- Used as the mantle highlight group. Other Diagnostic highlights link to this by default DiagnosticHint = { bg = C.none, fg = hint, style = virtual_text.hints }, -- Used as the mantle highlight group. Other Diagnostic highlights link to this by default DiagnosticOk = { bg = C.none, fg = ok, style = virtual_text.ok }, -- Used as the mantle highlight group. Other Diagnostic highlights link to this by default DiagnosticUnderlineError = { style = underlines.errors, sp = error }, -- Used to underline "Error" diagnostics DiagnosticUnderlineWarn = { style = underlines.warnings, sp = warning }, -- Used to underline "Warn" diagnostics DiagnosticUnderlineInfo = { style = underlines.information, sp = info }, -- Used to underline "Info" diagnostics DiagnosticUnderlineHint = { style = underlines.hints, sp = hint }, -- Used to underline "Hint" diagnostics DiagnosticUnderlineOk = { style = underlines.ok, sp = ok }, -- Used to underline "Ok" diagnostics DiagnosticFloatingError = { fg = error }, -- Used to color "Error" diagnostic messages in diagnostics float DiagnosticFloatingWarn = { fg = warning }, -- Used to color "Warn" diagnostic messages in diagnostics float DiagnosticFloatingInfo = { fg = info }, -- Used to color "Info" diagnostic messages in diagnostics float DiagnosticFloatingHint = { fg = hint }, -- Used to color "Hint" diagnostic messages in diagnostics float DiagnosticFloatingOk = { fg = ok }, -- Used to color "Ok" diagnostic messages in diagnostics float DiagnosticSignError = { fg = error }, -- Used for "Error" signs in sign column DiagnosticSignWarn = { fg = warning }, -- Used for "Warn" signs in sign column DiagnosticSignInfo = { fg = info }, -- Used for "Info" signs in sign column DiagnosticSignHint = { fg = hint }, -- Used for "Hint" signs in sign column DiagnosticSignOk = { fg = ok }, -- Used for "Ok" signs in sign column LspDiagnosticsDefaultError = { fg = error }, -- Used as the mantle highlight group. Other LspDiagnostic highlights link to this by default (except Underline) LspDiagnosticsDefaultWarning = { fg = warning }, -- Used as the mantle highlight group. Other LspDiagnostic highlights link to this by default (except Underline) LspDiagnosticsDefaultInformation = { fg = info }, -- Used as the mantle highlight group. Other LspDiagnostic highlights link to this by default (except Underline) LspDiagnosticsDefaultHint = { fg = hint }, -- Used as the mantle highlight group. Other LspDiagnostic highlights link to this by default (except Underline) LspSignatureActiveParameter = { bg = C.surface0, style = { "bold" } }, -- LspDiagnosticsFloatingError = { }, -- Used to color "Error" diagnostic messages in diagnostics float -- LspDiagnosticsFloatingWarning = { }, -- Used to color "Warning" diagnostic messages in diagnostics float -- LspDiagnosticsFloatingInformation = { }, -- Used to color "Information" diagnostic messages in diagnostics float -- LspDiagnosticsFloatingHint = { }, -- Used to color "Hint" diagnostic messages in diagnostics float LspDiagnosticsError = { fg = error }, LspDiagnosticsWarning = { fg = warning }, LspDiagnosticsInformation = { fg = info }, LspDiagnosticsHint = { fg = hint }, LspDiagnosticsVirtualTextError = { fg = error, style = virtual_text.errors }, -- Used for "Error" diagnostic virtual text LspDiagnosticsVirtualTextWarning = { fg = warning, style = virtual_text.warnings }, -- Used for "Warning" diagnostic virtual text LspDiagnosticsVirtualTextInformation = { fg = info, style = virtual_text.warnings }, -- Used for "Information" diagnostic virtual text LspDiagnosticsVirtualTextHint = { fg = hint, style = virtual_text.hints }, -- Used for "Hint" diagnostic virtual text LspDiagnosticsUnderlineError = { style = underlines.errors, sp = error }, -- Used to underline "Error" diagnostics LspDiagnosticsUnderlineWarning = { style = underlines.warnings, sp = warning }, -- Used to underline "Warning" diagnostics LspDiagnosticsUnderlineInformation = { style = underlines.information, sp = info }, -- Used to underline "Information" diagnostics LspDiagnosticsUnderlineHint = { style = underlines.hints, sp = hint }, -- Used to underline "Hint" diagnostics LspCodeLens = { fg = C.overlay0 }, -- virtual text of the codelens LspCodeLensSeparator = { link = "LspCodeLens" }, -- virtual text of the codelens separators LspInlayHint = { -- fg of `Comment` fg = C.overlay0, -- bg of `CursorLine` bg = (O.transparent_background or not inlay_hints.background) and C.none or U.vary_color({ latte = U.lighten(C.mantle, 0.70, C.base) }, U.darken(C.surface0, 0.64, C.base)), }, -- virtual text of the inlay hints LspInfoBorder = { link = "FloatBorder" }, -- LspInfo border } end return M ================================================ FILE: lua/catppuccin/groups/semantic_tokens.lua ================================================ local M = {} function M.get() if vim.treesitter.highlighter.hl_map then vim.notify_once( [[Catppuccin (info): semantic_tokens integration requires neovim 0.8 If you want to stay on nvim 0.7, pin catppuccin tag to v0.2.4 and nvim-treesitter commit to 4cccb6f494eb255b32a290d37c35ca12584c74d0. ]], vim.log.levels.INFO ) return {} end return { -- https://neovim.io/doc/user/lsp.html#lsp-semantic-highlight -- Most semantic tokens (@lsp.type.<...>) are no longer defined in this file, as Neovim links to already themed Tree-sitter captures by default. -- lsp's are able to detect enum members where treesitter often cannot ["@lsp.type.enumMember"] = { fg = C.teal }, -- we assume treesitter can already handle this -- - treesitter can detect variables in buffers -- - lsp does not need responsibility for this, in fact it can be less -- accurate in cases ["@lsp.type.variable"] = {}, -- in cases where the lsp can be more specific than treesitter, we should -- allow lsp to override treesitter ["@lsp.typemod.function.defaultLibrary"] = { link = "@function.builtin" }, ["@lsp.typemod.function.builtin"] = { link = "@function.builtin" }, } end return M ================================================ FILE: lua/catppuccin/groups/syntax.lua ================================================ local M = {} function M.get() return { Comment = { fg = C.overlay2, style = O.styles.comments }, -- just comments SpecialComment = { link = "Special" }, -- special things inside a comment Constant = { fg = C.peach }, -- (preferred) any constant String = { fg = C.green, style = O.styles.strings or {} }, -- a string constant: "this is a string" Character = { fg = C.teal }, -- a character constant: 'c', '\n' Number = { fg = C.peach, style = O.styles.numbers or {} }, -- a number constant: 234, 0xff Float = { link = "Number" }, -- a floating point constant: 2.3e10 Boolean = { fg = C.peach, style = O.styles.booleans or {} }, -- a boolean constant: TRUE, false Identifier = { fg = C.flamingo, style = O.styles.variables or {} }, -- (preferred) any variable name Function = { fg = C.blue, style = O.styles.functions or {} }, -- function name (also: methods for classes) Statement = { fg = C.mauve }, -- (preferred) any statement Conditional = { fg = C.mauve, style = O.styles.conditionals or {} }, -- if, then, else, endif, switch, etc. Repeat = { fg = C.mauve, style = O.styles.loops or {} }, -- for, do, while, etc. Label = { fg = C.sapphire }, -- case, default, etc. Operator = { fg = C.sky, style = O.styles.operators or {} }, -- "sizeof", "+", "*", etc. Keyword = { fg = C.mauve, style = O.styles.keywords or {} }, -- any other keyword Exception = { fg = C.mauve, style = O.styles.keywords or {} }, -- try, catch, throw PreProc = { fg = C.pink }, -- (preferred) generic Preprocessor Include = { fg = C.mauve, style = O.styles.keywords or {} }, -- preprocessor #include Define = { link = "PreProc" }, -- preprocessor #define Macro = { fg = C.mauve }, -- same as Define PreCondit = { link = "PreProc" }, -- preprocessor #if, #else, #endif, etc. StorageClass = { fg = C.yellow }, -- static, register, volatile, etc. Structure = { fg = C.yellow }, -- struct, union, enum, etc. Special = { fg = C.pink }, -- (preferred) any special symbol Type = { fg = C.yellow, style = O.styles.types or {} }, -- (preferred) int, long, char, etc. Typedef = { link = "Type" }, -- A typedef SpecialChar = { link = "Special" }, -- special character in a constant Tag = { fg = C.lavender, style = { "bold" } }, -- you can use CTRL-] on this Delimiter = { fg = C.overlay2 }, -- character that needs attention Debug = { link = "Special" }, -- debugging statements Underlined = { style = { "underline" } }, -- (preferred) text that stands out, HTML links Bold = { style = { "bold" } }, Italic = { style = { "italic" } }, -- ("Ignore", below, may be invisible...) -- Ignore = { }, -- (preferred) left blank, hidden |hl-Ignore| Error = { fg = C.red }, -- (preferred) any erroneous construct Todo = { bg = C.flamingo, fg = C.base, style = { "bold" } }, -- (preferred) anything that needs extra attention; mostly the keywords TODO FIXME and XXX qfLineNr = { fg = C.yellow }, qfFileName = { fg = C.blue }, htmlH1 = { fg = C.pink, style = { "bold" } }, htmlH2 = { fg = C.blue, style = { "bold" } }, -- mkdHeading = { fg = C.peach, style = { "bold" } }, -- mkdCode = { bg = C.terminal_black, fg = C.text }, mkdCodeDelimiter = { bg = C.base, fg = C.text }, mkdCodeStart = { fg = C.flamingo, style = { "bold" } }, mkdCodeEnd = { fg = C.flamingo, style = { "bold" } }, -- mkdLink = { fg = C.blue, style = { "underline" } }, -- debugging debugPC = { bg = O.transparent_background and C.none or C.crust }, -- used for highlighting the current line in terminal-debug debugBreakpoint = { bg = C.base, fg = C.overlay0 }, -- used for breakpoint colors in terminal-debug -- illuminate illuminatedWord = { bg = C.surface1 }, illuminatedCurWord = { bg = C.surface1 }, -- diff Added = { fg = C.green }, Changed = { fg = C.blue }, diffAdded = { fg = C.green }, diffRemoved = { fg = C.red }, diffChanged = { fg = C.blue }, diffOldFile = { fg = C.yellow }, diffNewFile = { fg = C.peach }, diffFile = { fg = C.blue }, diffLine = { fg = C.overlay0 }, diffIndexLine = { fg = C.teal }, DiffAdd = { bg = U.darken(C.green, 0.18, C.base) }, -- diff mode: Added line |diff.txt| DiffChange = { bg = U.darken(C.blue, 0.07, C.base) }, -- diff mode: Changed line |diff.txt| DiffDelete = { bg = U.darken(C.red, 0.18, C.base) }, -- diff mode: Deleted line |diff.txt| DiffText = { bg = U.darken(C.blue, 0.30, C.base) }, -- diff mode: Changed text within a changed line |diff.txt| -- NeoVim healthError = { fg = C.red }, healthSuccess = { fg = C.teal }, healthWarning = { fg = C.yellow }, -- misc -- glyphs GlyphPalette1 = { fg = C.red }, GlyphPalette2 = { fg = C.teal }, GlyphPalette3 = { fg = C.yellow }, GlyphPalette4 = { fg = C.blue }, GlyphPalette6 = { fg = C.teal }, GlyphPalette7 = { fg = C.text }, GlyphPalette9 = { fg = C.red }, -- rainbow rainbow1 = { fg = C.red }, rainbow2 = { fg = C.peach }, rainbow3 = { fg = C.yellow }, rainbow4 = { fg = C.green }, rainbow5 = { fg = C.sapphire }, rainbow6 = { fg = C.lavender }, -- csv csvCol0 = { fg = C.red }, csvCol1 = { fg = C.peach }, csvCol2 = { fg = C.yellow }, csvCol3 = { fg = C.green }, csvCol4 = { fg = C.sky }, csvCol5 = { fg = C.blue }, csvCol6 = { fg = C.lavender }, csvCol7 = { fg = C.mauve }, csvCol8 = { fg = C.pink }, -- markdown markdownHeadingDelimiter = { fg = C.peach, style = { "bold" } }, markdownCode = { fg = C.flamingo }, markdownCodeBlock = { fg = C.flamingo }, markdownLinkText = { fg = C.blue, style = { "underline" } }, markdownH1 = { link = "rainbow1" }, markdownH2 = { link = "rainbow2" }, markdownH3 = { link = "rainbow3" }, markdownH4 = { link = "rainbow4" }, markdownH5 = { link = "rainbow5" }, markdownH6 = { link = "rainbow6" }, } end return M ================================================ FILE: lua/catppuccin/groups/terminal.lua ================================================ local M = {} function M.get() return { terminal_color_0 = C.overlay0, terminal_color_8 = C.overlay1, terminal_color_1 = C.red, terminal_color_9 = C.red, terminal_color_2 = C.green, terminal_color_10 = C.green, terminal_color_3 = C.yellow, terminal_color_11 = C.yellow, terminal_color_4 = C.blue, terminal_color_12 = C.blue, terminal_color_5 = C.pink, terminal_color_13 = C.pink, terminal_color_6 = C.sky, terminal_color_14 = C.sky, terminal_color_7 = C.text, terminal_color_15 = C.text, } end return M ================================================ FILE: lua/catppuccin/groups/treesitter.lua ================================================ local M = {} function M.get() if vim.treesitter.highlighter.hl_map then vim.notify_once( [[Catppuccin (info): nvim-treesitter integration requires neovim 0.8 If you want to stay on nvim 0.7, pin catppuccin tag to v0.2.4 and nvim-treesitter commit to 4cccb6f494eb255b32a290d37c35ca12584c74d0. ]], vim.log.levels.INFO ) return {} end local colors = { -- Reference: https://github.com/nvim-treesitter/nvim-treesitter/blob/master/CONTRIBUTING.md -- Identifiers ["@variable"] = { fg = C.text, style = O.styles.variables or {} }, -- Any variable name that does not have another highlight. ["@variable.builtin"] = { fg = C.red, style = O.styles.properties or {} }, -- Variable names that are defined by the languages, like this or self. ["@variable.parameter"] = { fg = C.maroon, style = O.styles.variables or {} }, -- For parameters of a function. ["@variable.member"] = { fg = C.lavender }, -- For fields. ["@constant"] = { link = "Constant" }, -- For constants ["@constant.builtin"] = { fg = C.peach, style = O.styles.keywords or {} }, -- For constant that are built in the language: nil in Lua. ["@constant.macro"] = { link = "Macro" }, -- For constants that are defined by macros: NULL in C. ["@module"] = { fg = C.yellow, style = O.styles.miscs or { "italic" } }, -- For identifiers referring to modules and namespaces. ["@label"] = { link = "Label" }, -- For labels: label: in C and :label: in Lua. -- Literals ["@string"] = { link = "String" }, -- For strings. ["@string.documentation"] = { fg = C.teal, style = O.styles.strings or {} }, -- For strings documenting code (e.g. Python docstrings). ["@string.regexp"] = { fg = C.pink, style = O.styles.strings or {} }, -- For regexes. ["@string.escape"] = { fg = C.pink, style = O.styles.strings or {} }, -- For escape characters within a string. ["@string.special"] = { link = "Special" }, -- other special strings (e.g. dates) ["@string.special.path"] = { link = "Special" }, -- filenames ["@string.special.symbol"] = { fg = C.flamingo }, -- symbols or atoms ["@string.special.url"] = { fg = C.blue, style = { "italic", "underline" } }, -- urls, links and emails ["@punctuation.delimiter.regex"] = { link = "@string.regexp" }, ["@character"] = { link = "Character" }, -- character literals ["@character.special"] = { link = "SpecialChar" }, -- special characters (e.g. wildcards) ["@boolean"] = { link = "Boolean" }, -- For booleans. ["@number"] = { link = "Number" }, -- For all numbers ["@number.float"] = { link = "Float" }, -- For floats. -- Types ["@type"] = { link = "Type" }, -- For types. ["@type.builtin"] = { fg = C.mauve, style = O.styles.types or {} }, -- For builtin types. ["@type.definition"] = { link = "Type" }, -- type definitions (e.g. `typedef` in C) ["@attribute"] = { link = "Constant" }, -- attribute annotations (e.g. Python decorators) ["@property"] = { fg = C.lavender, style = O.styles.properties or {} }, -- For fields, like accessing `bar` property on `foo.bar`. Overriden later for data languages and CSS. -- Functions ["@function"] = { link = "Function" }, -- For function (calls and definitions). ["@function.builtin"] = { fg = C.peach, style = O.styles.functions or {} }, -- For builtin functions: table.insert in Lua. ["@function.call"] = { link = "Function" }, -- function calls ["@function.macro"] = { fg = C.pink, style = O.styles.functions or {} }, -- For macro defined functions (calls and definitions): each macro_rules in Rust. ["@function.method"] = { link = "Function" }, -- For method definitions. ["@function.method.call"] = { link = "Function" }, -- For method calls. ["@constructor"] = { fg = C.yellow }, -- For constructor calls and definitions: = { } in Lua, and Java constructors. ["@operator"] = { link = "Operator" }, -- For any operator: +, but also -> and * in C. -- Keywords ["@keyword"] = { link = "Keyword" }, -- For keywords that don't fall in previous categories. ["@keyword.modifier"] = { link = "Keyword" }, -- For keywords modifying other constructs (e.g. `const`, `static`, `public`) ["@keyword.type"] = { link = "Keyword" }, -- For keywords describing composite types (e.g. `struct`, `enum`) ["@keyword.coroutine"] = { link = "Keyword" }, -- For keywords related to coroutines (e.g. `go` in Go, `async/await` in Python) ["@keyword.function"] = { fg = C.mauve, style = O.styles.keywords or {} }, -- For keywords used to define a function. ["@keyword.operator"] = { fg = C.mauve, style = O.styles.keywords or {} }, -- For new keyword operator ["@keyword.import"] = { link = "Include" }, -- For includes: #include in C, use or extern crate in Rust, or require in Lua. ["@keyword.repeat"] = { link = "Repeat" }, -- For keywords related to loops. ["@keyword.return"] = { fg = C.mauve, style = O.styles.keywords or {} }, ["@keyword.debug"] = { link = "Exception" }, -- For keywords related to debugging ["@keyword.exception"] = { link = "Exception" }, -- For exception related keywords. ["@keyword.conditional"] = { link = "Conditional" }, -- For keywords related to conditionnals. ["@keyword.conditional.ternary"] = { link = "Operator" }, -- For ternary operators (e.g. `?` / `:`) ["@keyword.directive"] = { link = "PreProc" }, -- various preprocessor directives & shebangs ["@keyword.directive.define"] = { link = "Define" }, -- preprocessor definition directives -- JS & derivative ["@keyword.export"] = { fg = C.mauve, style = O.styles.keywords }, -- Punctuation ["@punctuation.delimiter"] = { link = "Delimiter" }, -- For delimiters (e.g. `;` / `.` / `,`). ["@punctuation.bracket"] = { fg = C.overlay2 }, -- For brackets and parenthesis. ["@punctuation.special"] = { link = "Special" }, -- For special punctuation that does not fall in the categories before (e.g. `{}` in string interpolation). -- Comment ["@comment"] = { link = "Comment" }, ["@comment.documentation"] = { link = "Comment" }, -- For comments documenting code ["@comment.error"] = { fg = C.base, bg = C.red }, ["@comment.warning"] = { fg = C.base, bg = C.yellow }, ["@comment.hint"] = { fg = C.base, bg = C.blue }, ["@comment.todo"] = { fg = C.base, bg = C.flamingo }, ["@comment.note"] = { fg = C.base, bg = C.rosewater }, -- Markup ["@markup"] = { fg = C.text }, -- For strings considerated text in a markup language. ["@markup.strong"] = { fg = C.red, style = { "bold" } }, -- bold ["@markup.italic"] = { fg = C.red, style = { "italic" } }, -- italic ["@markup.strikethrough"] = { fg = C.text, style = { "strikethrough" } }, -- strikethrough text ["@markup.underline"] = { link = "Underlined" }, -- underlined text ["@markup.heading"] = { fg = C.blue }, -- titles like: # Example ["@markup.heading.markdown"] = { style = { "bold" } }, -- bold headings in markdown, but not in HTML or other markup ["@markup.math"] = { fg = C.blue }, -- math environments (e.g. `$ ... $` in LaTeX) ["@markup.quote"] = { fg = C.pink }, -- block quotes ["@markup.environment"] = { fg = C.pink }, -- text environments of markup languages ["@markup.environment.name"] = { fg = C.blue }, -- text indicating the type of an environment ["@markup.link"] = { fg = C.lavender }, -- text references, footnotes, citations, etc. ["@markup.link.label"] = { fg = C.lavender }, -- link, reference descriptions ["@markup.link.url"] = { fg = C.blue, style = { "italic", "underline" } }, -- urls, links and emails ["@markup.raw"] = { fg = C.green }, -- used for inline code in markdown and for doc in python (""") ["@markup.list"] = { fg = C.teal }, ["@markup.list.checked"] = { fg = C.green }, -- todo notes ["@markup.list.unchecked"] = { fg = C.overlay1 }, -- todo notes -- Diff ["@diff.plus"] = { link = "diffAdded" }, -- added text (for diff files) ["@diff.minus"] = { link = "diffRemoved" }, -- deleted text (for diff files) ["@diff.delta"] = { link = "diffChanged" }, -- deleted text (for diff files) -- Tags ["@tag"] = { fg = C.blue }, -- Tags like HTML tag names. ["@tag.builtin"] = { fg = C.blue }, -- JSX tag names. ["@tag.attribute"] = { fg = C.yellow, style = O.styles.miscs or { "italic" } }, -- XML/HTML attributes (foo in foo="bar"). ["@tag.delimiter"] = { fg = C.teal }, -- Tag delimiter like < > / -- Misc ["@error"] = { link = "Error" }, -- Language specific: -- Bash ["@function.builtin.bash"] = { fg = C.red, style = O.styles.miscs or { "italic" } }, ["@variable.parameter.bash"] = { fg = C.green }, -- markdown ["@markup.heading.1.markdown"] = { link = "rainbow1" }, ["@markup.heading.2.markdown"] = { link = "rainbow2" }, ["@markup.heading.3.markdown"] = { link = "rainbow3" }, ["@markup.heading.4.markdown"] = { link = "rainbow4" }, ["@markup.heading.5.markdown"] = { link = "rainbow5" }, ["@markup.heading.6.markdown"] = { link = "rainbow6" }, -- html ["@markup.heading.html"] = { link = "@markup" }, ["@markup.heading.1.html"] = { link = "@markup" }, ["@markup.heading.2.html"] = { link = "@markup" }, ["@markup.heading.3.html"] = { link = "@markup" }, ["@markup.heading.4.html"] = { link = "@markup" }, ["@markup.heading.5.html"] = { link = "@markup" }, ["@markup.heading.6.html"] = { link = "@markup" }, -- Java ["@constant.java"] = { fg = C.teal }, -- CSS ["@property.css"] = { fg = C.blue }, ["@property.scss"] = { fg = C.blue }, ["@property.id.css"] = { fg = C.yellow }, ["@property.class.css"] = { fg = C.yellow }, ["@type.css"] = { fg = C.lavender }, ["@type.tag.css"] = { fg = C.blue }, ["@string.plain.css"] = { fg = C.text }, ["@number.css"] = { fg = C.peach }, ["@keyword.directive.css"] = { link = "Keyword" }, -- CSS at-rules: https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule. -- HTML ["@string.special.url.html"] = { fg = C.green }, -- Links in href, src attributes. ["@markup.link.label.html"] = { fg = C.text }, -- Text between tags. ["@character.special.html"] = { fg = C.red }, -- Symbols such as  . -- Lua ["@constructor.lua"] = { link = "@punctuation.bracket" }, -- For constructor calls and definitions: = { } in Lua. -- Python ["@constructor.python"] = { fg = C.sky }, -- __init__(), __new__(). -- YAML ["@label.yaml"] = { fg = C.yellow }, -- Anchor and alias names. -- Ruby ["@string.special.symbol.ruby"] = { fg = C.flamingo }, -- PHP ["@function.method.php"] = { link = "Function" }, ["@function.method.call.php"] = { link = "Function" }, -- C/CPP ["@keyword.import.c"] = { fg = C.yellow }, ["@keyword.import.cpp"] = { fg = C.yellow }, -- C# ["@attribute.c_sharp"] = { fg = C.yellow }, -- gitcommit ["@comment.warning.gitcommit"] = { fg = C.yellow }, -- gitignore ["@string.special.path.gitignore"] = { fg = C.text }, -- Misc gitcommitSummary = { fg = C.rosewater, style = O.styles.miscs or { "italic" } }, zshKSHFunction = { link = "Function" }, } -- Legacy highlights colors["@parameter"] = colors["@variable.parameter"] colors["@field"] = colors["@variable.member"] colors["@namespace"] = colors["@module"] colors["@float"] = colors["@number.float"] colors["@symbol"] = colors["@string.special.symbol"] colors["@string.regex"] = colors["@string.regexp"] colors["@text"] = colors["@markup"] colors["@text.strong"] = colors["@markup.strong"] colors["@text.emphasis"] = colors["@markup.italic"] colors["@text.underline"] = colors["@markup.underline"] colors["@text.strike"] = colors["@markup.strikethrough"] colors["@text.uri"] = colors["@markup.link.url"] colors["@text.math"] = colors["@markup.math"] colors["@text.environment"] = colors["@markup.environment"] colors["@text.environment.name"] = colors["@markup.environment.name"] colors["@text.title"] = colors["@markup.heading"] colors["@text.literal"] = colors["@markup.raw"] colors["@text.reference"] = colors["@markup.link"] colors["@text.todo.checked"] = colors["@markup.list.checked"] colors["@text.todo.unchecked"] = colors["@markup.list.unchecked"] colors["@comment.note"] = colors["@comment.hint"] -- @text.todo is now for todo comments, not todo notes like in markdown colors["@text.todo"] = colors["@comment.todo"] colors["@text.warning"] = colors["@comment.warning"] colors["@text.note"] = colors["@comment.note"] colors["@text.danger"] = colors["@comment.error"] -- @text.uri is now -- > @markup.link.url in markup links -- > @string.special.url outside of markup colors["@text.uri"] = colors["@markup.link.uri"] colors["@method"] = colors["@function.method"] colors["@method.call"] = colors["@function.method.call"] colors["@text.diff.add"] = colors["@diff.plus"] colors["@text.diff.delete"] = colors["@diff.minus"] colors["@type.qualifier"] = colors["@keyword.modifier"] colors["@keyword.storage"] = colors["@keyword.modifier"] colors["@define"] = colors["@keyword.directive.define"] colors["@preproc"] = colors["@keyword.directive"] colors["@storageclass"] = colors["@keyword.storage"] colors["@conditional"] = colors["@keyword.conditional"] colors["@exception"] = colors["@keyword.exception"] colors["@include"] = colors["@keyword.import"] colors["@repeat"] = colors["@keyword.repeat"] colors["@symbol.ruby"] = colors["@string.special.symbol.ruby"] colors["@variable.member.yaml"] = colors["@field.yaml"] colors["@text.title.1.markdown"] = colors["@markup.heading.1.markdown"] colors["@text.title.2.markdown"] = colors["@markup.heading.2.markdown"] colors["@text.title.3.markdown"] = colors["@markup.heading.3.markdown"] colors["@text.title.4.markdown"] = colors["@markup.heading.4.markdown"] colors["@text.title.5.markdown"] = colors["@markup.heading.5.markdown"] colors["@text.title.6.markdown"] = colors["@markup.heading.6.markdown"] colors["@method.php"] = colors["@function.method.php"] colors["@method.call.php"] = colors["@function.method.call.php"] return colors end return M ================================================ FILE: lua/catppuccin/init.lua ================================================ ---@type Catppuccin local M = { default_options = { flavour = "auto", background = { light = "latte", dark = "mocha", }, compile_path = vim.fn.stdpath "cache" .. "/catppuccin", transparent_background = false, float = { transparent = false, solid = false, }, show_end_of_buffer = false, term_colors = false, kitty = vim.env.KITTY_WINDOW_ID and true or false, dim_inactive = { enabled = false, shade = "dark", percentage = 0.15, }, no_italic = false, no_bold = false, no_underline = false, styles = { comments = { "italic" }, conditionals = { "italic" }, loops = {}, functions = {}, keywords = {}, strings = {}, variables = {}, numbers = {}, booleans = {}, properties = {}, types = {}, operators = {}, }, 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, }, }, default_integrations = true, auto_integrations = false, integrations = { alpha = true, blink_cmp = { enabled = true, style = "bordered" }, blink_indent = true, fzf = true, cmp = true, dap = true, dap_ui = true, dashboard = true, diffview = false, flash = true, gitsigns = true, markdown = true, neogit = true, neotree = true, nvimtree = true, ufo = true, rainbow_delimiters = true, render_markdown = true, telescope = { enabled = true }, treesitter_context = true, barbecue = { dim_dirname = true, bold_basename = true, dim_context = false, alt_background = false, }, illuminate = { enabled = true, lsp = false, }, indent_blankline = { enabled = true, scope_color = "", colored_indent_levels = false, }, navic = { enabled = false, custom_bg = "NONE", }, dropbar = { enabled = true, color_mode = false, }, colorful_winsep = { enabled = false, color = "red", }, mini = { enabled = true, indentscope_color = "overlay2", }, lir = { enabled = false, git_status = false, }, snacks = { enabled = false }, }, color_overrides = {}, highlight_overrides = {}, }, flavours = { latte = 1, frappe = 2, macchiato = 3, mocha = 4 }, path_sep = jit and (jit.os == "Windows" and "\\" or "/") or package.config:sub(1, 1), } M.options = M.default_options function M.compile() local user_flavour = M.flavour for flavour, _ in pairs(M.flavours) do M.flavour = flavour require("catppuccin.lib.compiler").compile(flavour) end M.flavour = user_flavour -- Restore user flavour after compile end local function get_flavour(default) local flavour if default and default == M.flavour and vim.o.background ~= (M.flavour == "latte" and "light" or "dark") then flavour = M.options.background[vim.o.background] else flavour = default end if flavour and not M.flavours[flavour] then vim.notify( string.format( "Catppuccin (error): Invalid flavour '%s', flavour must be 'latte', 'frappe', 'macchiato', 'mocha' or 'auto'", flavour ), vim.log.levels.ERROR ) flavour = nil end return flavour or M.options.flavour or vim.g.catppuccin_flavour or M.options.background[vim.o.background] end local did_setup = false function M.load(flavour) if M.options.flavour == "auto" then -- set colorscheme based on o:background M.options.flavour = nil -- ensure that this will only run once on startup end if not did_setup then M.setup() end M.flavour = get_flavour(flavour) local compiled_path = M.options.compile_path .. M.path_sep .. M.flavour local f = loadfile(compiled_path) if not f then M.compile() f = assert(loadfile(compiled_path), "could not load cache") end f(flavour or M.options.flavour or vim.g.catppuccin_flavour) end ---@type fun(user_conf: CatppuccinOptions?) function M.setup(user_conf) did_setup = true -- Parsing user config user_conf = user_conf or {} if user_conf.auto_integrations == true then user_conf.integrations = vim.tbl_deep_extend( "force", require("catppuccin.lib.detect_integrations").create_integrations_table(), user_conf.integrations or {} ) end if user_conf.default_integrations == false then M.default_options.integrations = {} end if user_conf.default_integrations == false then M.default_options.integrations = vim.iter(pairs(M.default_options.integrations)) :fold({}, function(integrations, name, opts) if type(opts) == "table" then opts.enabled = false else opts = false end integrations[name] = opts return integrations end) end M.options = vim.tbl_deep_extend("keep", user_conf, M.default_options) M.options.highlight_overrides.all = user_conf.custom_highlights or M.options.highlight_overrides.all -- Get cached hash local cached_path = M.options.compile_path .. M.path_sep .. "cached" local file = io.open(cached_path) local cached = nil if file then cached = file:read() file:close() end -- Get current hash local git_path = debug.getinfo(1).source:sub(2, -24) .. ".git" local git = vim.fn.getftime(git_path) -- 2x faster vim.loop.fs_stat local hash = require("catppuccin.lib.hashing").hash(user_conf) .. (git == -1 and git_path or git) -- no .git in /nix/store -> cache path .. (vim.o.winblend == 0 and 1 or 0) -- :h winblend .. (vim.o.pumblend == 0 and 1 or 0) -- :h pumblend -- Recompile if hash changed if cached ~= hash then M.compile() file = io.open(cached_path, "wb") if file then file:write(hash) file:close() end end end vim.api.nvim_create_user_command( "Catppuccin", function(inp) vim.api.nvim_command("colorscheme catppuccin-" .. get_flavour(inp.args)) end, { nargs = 1, complete = function(line) return vim.tbl_filter(function(val) return vim.startswith(val, line) end, vim.tbl_keys(M.flavours)) end, } ) vim.api.nvim_create_user_command("CatppuccinCompile", function() for name, _ in pairs(package.loaded) do if name:match "^catppuccin." then package.loaded[name] = nil end end M.compile() vim.notify("Catppuccin (info): compiled cache!", vim.log.levels.INFO) vim.cmd.colorscheme "catppuccin-nvim" end, {}) if vim.g.catppuccin_debug then vim.api.nvim_create_autocmd("BufWritePost", { pattern = "*/catppuccin/*", callback = function() vim.schedule(function() vim.cmd "CatppuccinCompile" end) end, }) end return M ================================================ FILE: lua/catppuccin/lib/compiler.lua ================================================ local path_sep = require("catppuccin").path_sep local O = require("catppuccin").options local M = {} -- Credit: https://github.com/EdenEast/nightfox.nvim local fmt = string.format local function inspect(t) local list = {} for k, v in pairs(t) do local tv = type(v) if tv == "string" then table.insert(list, fmt([[%s = "%s"]], k, v)) elseif tv == "table" then table.insert(list, fmt([[%s = %s]], k, inspect(v))) else table.insert(list, fmt([[%s = %s]], k, tostring(v))) end end return fmt([[{ %s }]], table.concat(list, ", ")) end function M.compile(flavour) local theme = require("catppuccin.lib.mapper").apply(flavour) local lines = { string.format( [[ return string.dump(function(flavour) vim.o.termguicolors = true if vim.g.colors_name then vim.cmd("hi clear") end if flavour then vim.o.background = "%s" end vim.g.colors_name = "catppuccin-%s" local h = vim.api.nvim_set_hl]], flavour == "latte" and "light" or "dark", flavour ), } if path_sep == "\\" then O.compile_path = O.compile_path:gsub("/", "\\") end local tbl = vim.tbl_deep_extend("keep", theme.custom_highlights, theme.integrations, theme.syntax, theme.editor) if O.term_colors == true then for k, v in pairs(theme.terminal) do table.insert(lines, fmt('vim.g.%s = "%s"', k, v)) end end for group, color in pairs(tbl) do if color.style then for _, style in pairs(color.style) do color[style] = true if O.no_italic and style == "italic" then color[style] = false end if O.no_bold and style == "bold" then color[style] = false end if O.no_underline and style == "underline" then color[style] = false end end end color.style = nil if color.link and (theme.custom_highlights[group] and not theme.custom_highlights[group].link) then color.link = nil end table.insert(lines, fmt([[h(0, "%s", %s)]], group, inspect(color))) end table.insert(lines, "end, true)") if vim.fn.isdirectory(O.compile_path) == 0 then vim.fn.mkdir(O.compile_path, "p") end if vim.g.catppuccin_debug then -- Debugging purpose local deb = io.open(O.compile_path .. path_sep .. flavour .. ".lua", "wb") if deb then deb:write(table.concat(lines, "\n")) deb:close() end end local f = loadstring(table.concat(lines, "\n")) if not f then local err_path = (path_sep == "/" and "/tmp" or os.getenv "TMP") .. "/catppuccin_error.lua" print(string.format( [[Catppuccin (error): Most likely some mistake made in your catppuccin config You can open %s for debugging If you think this is a bug, kindly open an issue and attach %s file Below is the error message that we captured: ]], err_path, err_path )) local err = io.open(err_path, "wb") if err then err:write(table.concat(lines, "\n")) err:close() end dofile(err_path) return end local file = assert( io.open(O.compile_path .. path_sep .. flavour, "wb"), "Permission denied while writing compiled file to " .. O.compile_path .. path_sep .. flavour ) file:write(f()) file:close() end return M ================================================ FILE: lua/catppuccin/lib/detect_integrations.lua ================================================ local M = {} --- parses url to get the last part of it's path, without the `/`. ---@param url string ---@return any function M.parse_url(url) return string.match(url, "([^/]+)$") end function M.detect_plugins() local installed_plugins = {} if vim.fn.has "nvim-0.12.0" == 1 then vim.list_extend( installed_plugins, vim.iter(vim.pack.get()):map(function(plugin) return plugin.spec.name end):totable() ) end if pcall(require, "pckr") then vim.list_extend(installed_plugins, require("pckr.plugin").plugins_by_name) end if pcall(require, "lazy") then vim.list_extend(installed_plugins, vim.tbl_keys(require("lazy.core.config").plugins)) end local seen = {} installed_plugins = vim.iter(installed_plugins) :map(function(plugin_name) if string.sub(plugin_name, 0, 5) == "mini." then return "mini.nvim" end return plugin_name end) :filter(function(plugin_name) if seen[plugin_name] then return false end seen[plugin_name] = true return true end) :totable() return installed_plugins end local installed_plugins = M.detect_plugins() function M.create_integrations_table() local integration_mappings = nil do local ok, result = pcall(require, "catppuccin.utils.integration_mappings") assert(ok, result) integration_mappings = result end assert( integration_mappings ~= nil, "before using integration_mappings generate it using the script: `./scripts/generate_integration_mappings_table.lua`" ) local integrations = {} local ctp_defaults = require("catppuccin").default_options.integrations for _, plugin in ipairs(installed_plugins) do if integration_mappings[plugin] ~= nil then local integration = integration_mappings[plugin] if type(ctp_defaults[integration]) == "table" then integrations[integration] = ctp_defaults[integration] integrations[integration].enabled = true else integrations[integration] = true end end end return integrations end return M ================================================ FILE: lua/catppuccin/lib/hashing.lua ================================================ local M = {} local B = bit or bit32 local hash_str = function(str) -- djb2, https://theartincode.stanis.me/008-djb2/ local hash = 5381 for i = 1, #str do hash = B.lshift(hash, 5) + hash + string.byte(str, i) end return hash end function M.hash(v) -- Xor hashing: https://codeforces.com/blog/entry/85900 local t = type(v) if t == "table" then local hash = 0 for p, u in next, v do hash = B.bxor(hash, hash_str(p .. M.hash(u))) end return hash elseif t == "function" then return M.hash(v(require("catppuccin.palettes").get_palette())) end return tostring(v) end return M ================================================ FILE: lua/catppuccin/lib/highlighter.lua ================================================ -- DEPRECATED MODULE local M = {} function M.highlight(group, color) if color.style then for _, style in ipairs(color.style) do color[style] = true end end color.style = nil vim.api.nvim_set_hl(0, group, color) end function M.syntax(tbl) for group, colors in pairs(tbl) do M.highlight(group, colors) end end return M ================================================ FILE: lua/catppuccin/lib/hsluv.lua ================================================ --[[ Lua implementation of HSLuv and HPLuv color spaces Homepage: http://www.hsluv.org/ Copyright (C) 2019 Alexei Boronine Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ]] local hsluv = {} hsluv.hexChars = "0123456789abcdef" local distance_line_from_origin = function(line) return math.abs(line.intercept) / math.sqrt((line.slope ^ 2) + 1) end local length_of_ray_until_intersect = function(theta, line) return line.intercept / (math.sin(theta) - line.slope * math.cos(theta)) end hsluv.get_bounds = function(l) local result = {} local sub2 local sub1 = ((l + 16) ^ 3) / 1560896 if sub1 > hsluv.epsilon then sub2 = sub1 else sub2 = l / hsluv.kappa end for i = 1, 3 do local m1 = hsluv.m[i][1] local m2 = hsluv.m[i][2] local m3 = hsluv.m[i][3] for t = 0, 1 do local top1 = (284517 * m1 - 94839 * m3) * sub2 local top2 = (838422 * m3 + 769860 * m2 + 731718 * m1) * l * sub2 - 769860 * t * l local bottom = (632260 * m3 - 126452 * m2) * sub2 + 126452 * t table.insert(result, { slope = top1 / bottom, intercept = top2 / bottom }) end end return result end hsluv.max_safe_chroma_for_l = function(l) local bounds = hsluv.get_bounds(l) local min = 1.7976931348623157e+308 for i = 1, 6 do local length = distance_line_from_origin(bounds[i]) if length >= 0 then min = math.min(min, length) end end return min end hsluv.max_safe_chroma_for_lh = function(l, h) local hrad = h / 360 * math.pi * 2 local bounds = hsluv.get_bounds(l) local min = 1.7976931348623157e+308 for i = 1, 6 do local bound = bounds[i] local length = length_of_ray_until_intersect(hrad, bound) if length >= 0 then min = math.min(min, length) end end return min end hsluv.dot_product = function(a, b) local sum = 0 for i = 1, 3 do sum = sum + a[i] * b[i] end return sum end hsluv.from_linear = function(c) if c <= 0.0031308 then return 12.92 * c else return 1.055 * (c ^ 0.416666666666666685) - 0.055 end end hsluv.to_linear = function(c) if c > 0.04045 then return ((c + 0.055) / 1.055) ^ 2.4 else return c / 12.92 end end hsluv.xyz_to_rgb = function(tuple) return { hsluv.from_linear(hsluv.dot_product(hsluv.m[1], tuple)), hsluv.from_linear(hsluv.dot_product(hsluv.m[2], tuple)), hsluv.from_linear(hsluv.dot_product(hsluv.m[3], tuple)), } end hsluv.rgb_to_xyz = function(tuple) local rgbl = { hsluv.to_linear(tuple[1]), hsluv.to_linear(tuple[2]), hsluv.to_linear(tuple[3]) } return { hsluv.dot_product(hsluv.minv[1], rgbl), hsluv.dot_product(hsluv.minv[2], rgbl), hsluv.dot_product(hsluv.minv[3], rgbl), } end hsluv.y_to_l = function(Y) if Y <= hsluv.epsilon then return Y / hsluv.refY * hsluv.kappa else return 116 * ((Y / hsluv.refY) ^ 0.333333333333333315) - 16 end end hsluv.l_to_y = function(L) if L <= 8 then return hsluv.refY * L / hsluv.kappa else return hsluv.refY * (((L + 16) / 116) ^ 3) end end hsluv.xyz_to_luv = function(tuple) local X = tuple[1] local Y = tuple[2] local divider = X + 15 * Y + 3 * tuple[3] local varU = 4 * X local varV = 9 * Y if divider ~= 0 then varU = varU / divider varV = varV / divider else varU = 0 varV = 0 end local L = hsluv.y_to_l(Y) if L == 0 then return { 0, 0, 0 } end return { L, 13 * L * (varU - hsluv.refU), 13 * L * (varV - hsluv.refV) } end hsluv.luv_to_xyz = function(tuple) local L = tuple[1] local U = tuple[2] local V = tuple[3] if L == 0 then return { 0, 0, 0 } end local varU = U / (13 * L) + hsluv.refU local varV = V / (13 * L) + hsluv.refV local Y = hsluv.l_to_y(L) local X = 0 - (9 * Y * varU) / (((varU - 4) * varV) - varU * varV) return { X, Y, (9 * Y - 15 * varV * Y - varV * X) / (3 * varV) } end hsluv.luv_to_lch = function(tuple) local L = tuple[1] local U = tuple[2] local V = tuple[3] local C = math.sqrt(U * U + V * V) local H if C < 0.00000001 then H = 0 else H = math.atan2(V, U) * 180.0 / 3.1415926535897932 if H < 0 then H = 360 + H end end return { L, C, H } end hsluv.lch_to_luv = function(tuple) local L = tuple[1] local C = tuple[2] local Hrad = tuple[3] / 360.0 * 2 * math.pi return { L, math.cos(Hrad) * C, math.sin(Hrad) * C } end hsluv.hsluv_to_lch = function(tuple) local H = tuple[1] local S = tuple[2] local L = tuple[3] if L > 99.9999999 then return { 100, 0, H } end if L < 0.00000001 then return { 0, 0, H } end return { L, hsluv.max_safe_chroma_for_lh(L, H) / 100 * S, H } end hsluv.lch_to_hsluv = function(tuple) local L = tuple[1] local C = tuple[2] local H = tuple[3] local max_chroma = hsluv.max_safe_chroma_for_lh(L, H) if L > 99.9999999 then return { H, 0, 100 } end if L < 0.00000001 then return { H, 0, 0 } end return { H, C / max_chroma * 100, L } end hsluv.hpluv_to_lch = function(tuple) local H = tuple[1] local S = tuple[2] local L = tuple[3] if L > 99.9999999 then return { 100, 0, H } end if L < 0.00000001 then return { 0, 0, H } end return { L, hsluv.max_safe_chroma_for_l(L) / 100 * S, H } end hsluv.lch_to_hpluv = function(tuple) local L = tuple[1] local C = tuple[2] local H = tuple[3] if L > 99.9999999 then return { H, 0, 100 } end if L < 0.00000001 then return { H, 0, 0 } end return { H, C / hsluv.max_safe_chroma_for_l(L) * 100, L } end hsluv.rgb_to_hex = function(tuple) local h = "#" for i = 1, 3 do local c = math.floor(tuple[i] * 255 + 0.5) local digit2 = math.fmod(c, 16) local x = (c - digit2) / 16 local digit1 = math.floor(x) h = h .. string.sub(hsluv.hexChars, digit1 + 1, digit1 + 1) h = h .. string.sub(hsluv.hexChars, digit2 + 1, digit2 + 1) end return h end hsluv.hex_to_rgb = function(hex) hex = string.lower(hex) local ret = {} for i = 0, 2 do local char1 = string.sub(hex, i * 2 + 2, i * 2 + 2) local char2 = string.sub(hex, i * 2 + 3, i * 2 + 3) local digit1 = string.find(hsluv.hexChars, char1) - 1 local digit2 = string.find(hsluv.hexChars, char2) - 1 ret[i + 1] = (digit1 * 16 + digit2) / 255.0 end return ret end hsluv.lch_to_rgb = function(tuple) return hsluv.xyz_to_rgb(hsluv.luv_to_xyz(hsluv.lch_to_luv(tuple))) end hsluv.rgb_to_lch = function(tuple) return hsluv.luv_to_lch(hsluv.xyz_to_luv(hsluv.rgb_to_xyz(tuple))) end hsluv.hsluv_to_rgb = function(tuple) return hsluv.lch_to_rgb(hsluv.hsluv_to_lch(tuple)) end hsluv.rgb_to_hsluv = function(tuple) return hsluv.lch_to_hsluv(hsluv.rgb_to_lch(tuple)) end hsluv.hpluv_to_rgb = function(tuple) return hsluv.lch_to_rgb(hsluv.hpluv_to_lch(tuple)) end hsluv.rgb_to_hpluv = function(tuple) return hsluv.lch_to_hpluv(hsluv.rgb_to_lch(tuple)) end hsluv.hsluv_to_hex = function(tuple) return hsluv.rgb_to_hex(hsluv.hsluv_to_rgb(tuple)) end hsluv.hpluv_to_hex = function(tuple) return hsluv.rgb_to_hex(hsluv.hpluv_to_rgb(tuple)) end hsluv.hex_to_hsluv = function(s) return hsluv.rgb_to_hsluv(hsluv.hex_to_rgb(s)) end hsluv.hex_to_hpluv = function(s) return hsluv.rgb_to_hpluv(hsluv.hex_to_rgb(s)) end hsluv.m = { { 3.240969941904521, -1.537383177570093, -0.498610760293 }, { -0.96924363628087, 1.87596750150772, 0.041555057407175 }, { 0.055630079696993, -0.20397695888897, 1.056971514242878 }, } hsluv.minv = { { 0.41239079926595, 0.35758433938387, 0.18048078840183 }, { 0.21263900587151, 0.71516867876775, 0.072192315360733 }, { 0.019330818715591, 0.11919477979462, 0.95053215224966 }, } hsluv.refY = 1.0 hsluv.refU = 0.19783000664283 hsluv.refV = 0.46831999493879 hsluv.kappa = 903.2962962 hsluv.epsilon = 0.0088564516 return hsluv ================================================ FILE: lua/catppuccin/lib/mapper.lua ================================================ local M = {} function M.apply(flavour) flavour = flavour or require("catppuccin").flavour local _O, _C, _U = O, C, U -- Borrowing global var (setfenv doesn't work with require) O = require("catppuccin").options C = require("catppuccin.palettes").get_palette(flavour) U = require "catppuccin.utils.colors" C.none = "NONE" local dim_percentage = O.dim_inactive.percentage C.dim = O.dim_inactive.shade == "dark" and U.vary_color( { latte = U.darken(C.base, dim_percentage, C.mantle) }, U.darken(C.base, dim_percentage, C.mantle) ) or U.vary_color( { latte = U.lighten("#FBFCFD", dim_percentage, C.base) }, U.lighten(C.surface0, dim_percentage, C.base) ) local theme = {} theme.editor = vim.tbl_deep_extend("force", require("catppuccin.groups.editor").get(), require("catppuccin.groups.lsp").get()) theme.syntax = {} local syntax_modules = { "syntax", "semantic_tokens", "treesitter" } for i = 1, #syntax_modules do theme.syntax = vim.tbl_deep_extend("force", theme.syntax, require("catppuccin.groups." .. syntax_modules[i]).get()) end local final_integrations = {} -- https://github.com/catppuccin/nvim/pull/624 if type(O.integrations.dap) == "table" and O.integrations.dap.enable_ui ~= nil then O.integrations.dap_ui = O.integrations.dap.enable_ui O.integrations.dap.enable_ui = nil end for integration in pairs(O.integrations) do local cot = false if type(O.integrations[integration]) == "table" then if O.integrations[integration].enabled == true then cot = true end else if O.integrations[integration] == true then local default = require("catppuccin").default_options.integrations[integration] O.integrations[integration] = type(default) == "table" and default or {} O.integrations[integration].enabled = true cot = true end end local ok, result = pcall(require, "catppuccin.groups.integrations." .. integration) if ok and result.get and cot then final_integrations = vim.tbl_deep_extend("force", final_integrations, result.get()) end end theme.integrations = final_integrations -- plugins theme.terminal = require("catppuccin.groups.terminal").get() -- terminal colors local user_highlights = O.highlight_overrides if type(user_highlights[flavour]) == "function" then user_highlights[flavour] = user_highlights[flavour](C) end theme.custom_highlights = vim.tbl_deep_extend( "keep", user_highlights[flavour] or {}, type(user_highlights.all) == "function" and user_highlights.all(C) or user_highlights.all or {} ) O, C, U = _O, _C, _U -- Returning global var return theme end return M ================================================ FILE: lua/catppuccin/palettes/frappe.lua ================================================ return { rosewater = "#f2d5cf", flamingo = "#eebebe", pink = "#f4b8e4", mauve = "#ca9ee6", red = "#e78284", maroon = "#ea999c", peach = "#ef9f76", yellow = "#e5c890", green = "#a6d189", teal = "#81c8be", sky = "#99d1db", sapphire = "#85c1dc", blue = "#8caaee", lavender = "#babbf1", text = "#c6d0f5", subtext1 = "#b5bfe2", subtext0 = "#a5adce", overlay2 = "#949cbb", overlay1 = "#838ba7", overlay0 = "#737994", surface2 = "#626880", surface1 = "#51576d", surface0 = "#414559", base = "#303446", mantle = "#292c3c", crust = "#232634", } ================================================ FILE: lua/catppuccin/palettes/init.lua ================================================ local M = {} function M.get_palette(flavour) local flvr = flavour or require("catppuccin").flavour or vim.g.catppuccin_flavour or "mocha" local _, palette = pcall(require, "catppuccin.palettes." .. flvr) local O = require("catppuccin").options local ans = vim.tbl_deep_extend("keep", O.color_overrides.all or {}, O.color_overrides[flvr] or {}, palette or {}) --[[ Kitty makes Neovim transparent if its own terminal background matches Neovim, so we need to adjust the color channels to make sure people don't suddenly have a transparent background if they haven't specified it. Unfortunately, this currently means all users on Kitty will have all their palette colors slightly offset. ref: https://github.com/kovidgoyal/kitty/issues/2917 --]] if O.kitty then for accent, hex in pairs(ans) do local red_green_string = hex:sub(1, 5) local blue_value = tonumber(hex:sub(6, 7), 16) -- Slightly increase or decrease brightness of the blue channel blue_value = blue_value == 255 and blue_value - 1 or blue_value + 1 ans[accent] = string.format("%s%.2x", red_green_string, blue_value) end end return ans end return M ================================================ FILE: lua/catppuccin/palettes/latte.lua ================================================ return { rosewater = "#dc8a78", flamingo = "#dd7878", pink = "#ea76cb", mauve = "#8839ef", red = "#d20f39", maroon = "#e64553", peach = "#fe640b", yellow = "#df8e1d", green = "#40a02b", teal = "#179299", sky = "#04a5e5", sapphire = "#209fb5", blue = "#1e66f5", lavender = "#7287fd", text = "#4c4f69", subtext1 = "#5c5f77", subtext0 = "#6c6f85", overlay2 = "#7c7f93", overlay1 = "#8c8fa1", overlay0 = "#9ca0b0", surface2 = "#acb0be", surface1 = "#bcc0cc", surface0 = "#ccd0da", base = "#eff1f5", mantle = "#e6e9ef", crust = "#dce0e8", } ================================================ FILE: lua/catppuccin/palettes/macchiato.lua ================================================ return { rosewater = "#f4dbd6", flamingo = "#f0c6c6", pink = "#f5bde6", mauve = "#c6a0f6", red = "#ed8796", maroon = "#ee99a0", peach = "#f5a97f", yellow = "#eed49f", green = "#a6da95", teal = "#8bd5ca", sky = "#91d7e3", sapphire = "#7dc4e4", blue = "#8aadf4", lavender = "#b7bdf8", text = "#cad3f5", subtext1 = "#b8c0e0", subtext0 = "#a5adcb", overlay2 = "#939ab7", overlay1 = "#8087a2", overlay0 = "#6e738d", surface2 = "#5b6078", surface1 = "#494d64", surface0 = "#363a4f", base = "#24273a", mantle = "#1e2030", crust = "#181926", } ================================================ FILE: lua/catppuccin/palettes/mocha.lua ================================================ return { rosewater = "#f5e0dc", flamingo = "#f2cdcd", pink = "#f5c2e7", mauve = "#cba6f7", red = "#f38ba8", maroon = "#eba0ac", peach = "#fab387", yellow = "#f9e2af", green = "#a6e3a1", teal = "#94e2d5", sky = "#89dceb", sapphire = "#74c7ec", blue = "#89b4fa", lavender = "#b4befe", text = "#cdd6f4", subtext1 = "#bac2de", subtext0 = "#a6adc8", overlay2 = "#9399b2", overlay1 = "#7f849c", overlay0 = "#6c7086", surface2 = "#585b70", surface1 = "#45475a", surface0 = "#313244", base = "#1e1e2e", mantle = "#181825", crust = "#11111b", } ================================================ FILE: lua/catppuccin/special/bufferline.lua ================================================ local M = {} local ctp = require "catppuccin" local O = ctp.options function M.get_theme(user_config) user_config = user_config or {} return function() local C = require("catppuccin.palettes").get_palette() local transparent_background = O.transparent_background local bg_highlight = (transparent_background and O.dim_inactive.enabled and C.dim) or (transparent_background and "NONE") or (O.dim_inactive.enabled and C.dim) or C.crust local active_bg = transparent_background and "NONE" or C.base local inactive_bg = transparent_background and "NONE" or C.mantle local separator_fg = O.transparent_background and C.surface1 or C.crust local styles = user_config.styles or { "bold", "italic" } local highlights = { -- buffers background = { bg = inactive_bg }, buffer_visible = { fg = C.surface1, bg = inactive_bg }, buffer_selected = { fg = C.text, bg = active_bg, style = styles }, -- current -- Duplicate duplicate_selected = { fg = C.text, bg = active_bg, style = styles }, duplicate_visible = { fg = C.surface1, bg = inactive_bg, style = styles }, duplicate = { fg = C.surface1, bg = inactive_bg, style = styles }, -- tabs tab = { fg = C.surface1, bg = inactive_bg }, tab_selected = { fg = C.sky, bg = active_bg, bold = true }, tab_separator = { fg = separator_fg, bg = inactive_bg }, tab_separator_selected = { fg = separator_fg, bg = active_bg }, tab_close = { fg = C.red, bg = inactive_bg }, indicator_visible = { fg = C.peach, bg = inactive_bg, style = styles }, indicator_selected = { fg = C.peach, bg = active_bg, style = styles }, -- separators separator = { fg = separator_fg, bg = inactive_bg }, separator_visible = { fg = separator_fg, bg = inactive_bg }, separator_selected = { fg = separator_fg, bg = active_bg }, offset_separator = { fg = separator_fg, bg = active_bg }, -- close buttons close_button = { fg = C.surface1, bg = inactive_bg }, close_button_visible = { fg = C.surface1, bg = inactive_bg }, close_button_selected = { fg = C.red, bg = active_bg }, -- Empty fill fill = { bg = bg_highlight }, -- Numbers numbers = { fg = C.subtext0, bg = inactive_bg }, numbers_visible = { fg = C.subtext0, bg = inactive_bg }, numbers_selected = { fg = C.subtext0, bg = active_bg, style = styles }, -- Errors error = { fg = C.red, bg = inactive_bg }, error_visible = { fg = C.red, bg = inactive_bg }, error_selected = { fg = C.red, bg = active_bg, style = styles }, error_diagnostic = { fg = C.red, bg = inactive_bg }, error_diagnostic_visible = { fg = C.red, bg = inactive_bg }, error_diagnostic_selected = { fg = C.red, bg = active_bg }, -- Warnings warning = { fg = C.yellow, bg = inactive_bg }, warning_visible = { fg = C.yellow, bg = inactive_bg }, warning_selected = { fg = C.yellow, bg = active_bg, style = styles }, warning_diagnostic = { fg = C.yellow, bg = inactive_bg }, warning_diagnostic_visible = { fg = C.yellow, bg = inactive_bg }, warning_diagnostic_selected = { fg = C.yellow, bg = active_bg }, -- Infos info = { fg = C.sky, bg = inactive_bg }, info_visible = { fg = C.sky, bg = inactive_bg }, info_selected = { fg = C.sky, bg = active_bg, style = styles }, info_diagnostic = { fg = C.sky, bg = inactive_bg }, info_diagnostic_visible = { fg = C.sky, bg = inactive_bg }, info_diagnostic_selected = { fg = C.sky, bg = active_bg }, -- Hint hint = { fg = C.teal, bg = inactive_bg }, hint_visible = { fg = C.teal, bg = inactive_bg }, hint_selected = { fg = C.teal, bg = active_bg, style = styles }, hint_diagnostic = { fg = C.teal, bg = inactive_bg }, hint_diagnostic_visible = { fg = C.teal, bg = inactive_bg }, hint_diagnostic_selected = { fg = C.teal, bg = active_bg }, -- Diagnostics diagnostic = { fg = C.subtext0, bg = inactive_bg }, diagnostic_visible = { fg = C.subtext0, bg = inactive_bg }, diagnostic_selected = { fg = C.subtext0, bg = active_bg, style = styles }, -- Modified modified = { fg = C.peach, bg = inactive_bg }, modified_visible = { fg = C.peach, bg = inactive_bg }, modified_selected = { fg = C.peach, bg = active_bg }, } local user_highlights = user_config.custom or {} highlights = vim.tbl_deep_extend("keep", user_highlights[ctp.flavour] or {}, user_highlights.all or {}, highlights) for _, color in pairs(highlights) do -- Because default is gui=bold,italic color.italic = false color.bold = false if color.style then for _, style in pairs(color.style) do color[style] = true if O.no_italic and style == "italic" then color[style] = false end if O.no_bold and style == "bold" then color[style] = false end if O.no_underline and style == "underline" then color[style] = false end end end color.style = nil end return highlights end end return M ================================================ FILE: lua/catppuccin/special/feline.lua ================================================ local M = {} local C = require("catppuccin.palettes").get_palette() local ok, lsp = pcall(require, "feline.providers.lsp") local assets = nil if ok then assets = { left_separator = "", right_separator = "", mode_icon = "", dir = "󰉖", file = "󰈙", lsp = { server = "󰅡", error = "", warning = "", info = "", hint = "", }, git = { branch = "", added = "", changed = "", removed = "", }, } local sett = { text = C.mantle, bkg = C.crust, diffs = C.mauve, extras = C.overlay1, curr_file = C.maroon, curr_dir = C.flamingo, show_modified = false, show_lazy_updates = false, } if require("catppuccin").flavour == "latte" then local latte = require("catppuccin.palettes").get_palette "latte" sett.text = latte.base sett.bkg = latte.crust end if require("catppuccin").options.transparent_background then sett.bkg = "NONE" end local mode_colors = { ["n"] = { "NORMAL", C.lavender }, ["no"] = { "N-PENDING", C.lavender }, ["i"] = { "INSERT", C.green }, ["ic"] = { "INSERT", C.green }, ["t"] = { "TERMINAL", C.green }, ["v"] = { "VISUAL", C.flamingo }, ["V"] = { "V-LINE", C.flamingo }, [""] = { "V-BLOCK", C.flamingo }, ["R"] = { "REPLACE", C.maroon }, ["Rv"] = { "V-REPLACE", C.maroon }, ["s"] = { "SELECT", C.maroon }, ["S"] = { "S-LINE", C.maroon }, [""] = { "S-BLOCK", C.maroon }, ["c"] = { "COMMAND", C.peach }, ["cv"] = { "COMMAND", C.peach }, ["ce"] = { "COMMAND", C.peach }, ["r"] = { "PROMPT", C.teal }, ["rm"] = { "MORE", C.teal }, ["r?"] = { "CONFIRM", C.mauve }, ["!"] = { "SHELL", C.green }, } local view = { lsp = { progress = true, name = false, exclude_lsp_names = {}, separator = "|", }, } local is_lsp_in_excluded_list = function(lsp_name) for _, excluded_lsp in ipairs(view.lsp.exclude_lsp_names) do if lsp_name == excluded_lsp then return true end end return false end function M.setup(opts) if opts then opts.assets = opts.assets or {} opts.sett = opts.sett or {} opts.mode_colors = opts.mode_colors or {} opts.view = opts.view or {} else opts = { assets = {}, sett = {}, mode_colors = {}, view = {}, } end assets = vim.tbl_deep_extend("force", assets, opts.assets) sett = vim.tbl_deep_extend("force", sett, opts.sett) mode_colors = vim.tbl_deep_extend("force", mode_colors, opts.mode_colors) view = vim.tbl_deep_extend("force", view, opts.view) end function M.get_statusline() local shortline = false local components = { active = { {}, {}, {} }, -- left, center, right inactive = { {} }, } local function is_enabled(min_width) if shortline then return true end return vim.api.nvim_win_get_width(0) > min_width end -- global components local invi_sep = { str = " ", hl = { fg = sett.bkg, bg = sett.bkg, }, } -- helpers local function any_git_changes() local gst = vim.b.gitsigns_status_dict -- git stats if gst then if gst["added"] and gst["added"] > 0 or gst["removed"] and gst["removed"] > 0 or gst["changed"] and gst["changed"] > 0 then return true end end return false end -- #################### STATUSLINE -> -- ######## Left -- Current vi mode ------> local vi_mode_hl = function() return { fg = sett.text, bg = mode_colors[vim.fn.mode()][2], style = "bold", } end components.active[1][1] = { provider = " " .. assets.mode_icon .. " ", hl = function() return { fg = sett.text, bg = mode_colors[vim.fn.mode()][2], } end, } components.active[1][2] = { provider = function() return mode_colors[vim.fn.mode()][1] .. " " end, hl = vi_mode_hl, } -- there is a dilemma: we need to hide Diffs if there is no git info. We can do that, but this will -- leave the right_separator colored with purple, and since we can't change the color conditonally -- then the solution is to create two right_separators: one with a mauve sett.bkg and the other one normal -- sett.bkg; both have the same fg (vi mode). The mauve one appears if there is git info, else the one with -- the normal sett.bkg appears. Fixed :) -- enable if git diffs are not available components.active[1][3] = { provider = assets.right_separator, hl = function() return { fg = mode_colors[vim.fn.mode()][2], bg = sett.bkg, } end, enabled = function() return not any_git_changes() end, } -- enable if git diffs are available components.active[1][4] = { provider = assets.right_separator, hl = function() return { fg = mode_colors[vim.fn.mode()][2], bg = sett.diffs, } end, enabled = function() return any_git_changes() end, } -- Current vi mode ------> -- Diffs ------> components.active[1][5] = { provider = "git_diff_added", hl = { fg = sett.text, bg = sett.diffs, }, icon = " " .. assets.git.added .. " ", } components.active[1][6] = { provider = "git_diff_changed", hl = { fg = sett.text, bg = sett.diffs, }, icon = " " .. assets.git.changed .. " ", } components.active[1][7] = { provider = "git_diff_removed", hl = { fg = sett.text, bg = sett.diffs, }, icon = " " .. assets.git.removed .. " ", } components.active[1][8] = { provider = " ", hl = { fg = sett.bkg, bg = sett.diffs, }, enabled = function() return any_git_changes() end, } components.active[1][9] = { provider = assets.right_separator, hl = { fg = sett.diffs, bg = sett.bkg, }, enabled = function() return any_git_changes() end, } -- Diffs ------> -- Extras ------> -- file progress components.active[1][10] = { provider = function() local current_line = vim.fn.line "." local total_line = vim.fn.line "$" if current_line == 1 then return "Top" elseif current_line == vim.fn.line "$" then return "Bot" end local result, _ = math.modf((current_line / total_line) * 100) return result .. "%%" end, -- enabled = shortline or function(winid) -- return vim.api.nvim_win_get_width(winid) > 90 -- end, hl = { fg = sett.extras, bg = sett.bkg, }, left_sep = invi_sep, } -- position components.active[1][11] = { provider = "position", -- enabled = shortline or function(winid) -- return vim.api.nvim_win_get_width(winid) > 90 -- end, hl = { fg = sett.extras, bg = sett.bkg, }, left_sep = invi_sep, } -- macro components.active[1][12] = { provider = "macro", enabled = function() return vim.api.nvim_get_option_value("cmdheight", { scope = "global" }) == 0 end, hl = { fg = sett.extras, bg = sett.bkg, }, left_sep = invi_sep, } -- search count components.active[1][13] = { provider = "search_count", enabled = function() return vim.api.nvim_get_option_value("cmdheight", { scope = "global" }) == 0 end, hl = { fg = sett.extras, bg = sett.bkg, }, left_sep = invi_sep, } -- lazy.nvim updates components.active[1][14] = { provider = function() return require("lazy.status").updates() end, enabled = function() if sett.show_lazy_updates and pcall(require, "lazy") then return require("lazy.status").has_updates() else return false end end, hl = { fg = sett.extras, bg = sett.bkg, }, left_sep = invi_sep, } -- Extras ------> -- ######## Left -- ######## Center -- Diagnostics ------> -- workspace loader components.active[2][1] = { provider = function() if vim.lsp.status then return "" end local Lsp = vim.lsp.util.get_progress_messages()[1] if Lsp then local msg = Lsp.message or "" local percentage = Lsp.percentage if not percentage then return "" end local title = Lsp.title or "" local spinners = { "", "󰀚", "", } local success_icon = { "", "", "", } local ms = vim.loop.hrtime() / 1000000 local frame = math.floor(ms / 120) % #spinners if percentage >= 70 then return string.format(" %%<%s %s %s (%s%%%%) ", success_icon[frame + 1], title, msg, percentage) end return string.format(" %%<%s %s %s (%s%%%%) ", spinners[frame + 1], title, msg, percentage) end return "" end, enabled = is_enabled(80) and view.lsp.progress == true, hl = { fg = C.rosewater, bg = sett.bkg, }, } -- general diagnostics (errors, warnings. info and hints) components.active[2][2] = { provider = "diagnostic_errors", enabled = function() return lsp.diagnostics_exist(vim.diagnostic.severity.ERROR) end, hl = { fg = C.red, bg = sett.bkg, }, icon = " " .. assets.lsp.error .. " ", } components.active[2][3] = { provider = "diagnostic_warnings", enabled = function() return lsp.diagnostics_exist(vim.diagnostic.severity.WARN) end, hl = { fg = C.yellow, bg = sett.bkg, }, icon = " " .. assets.lsp.warning .. " ", } components.active[2][4] = { provider = "diagnostic_info", enabled = function() return lsp.diagnostics_exist(vim.diagnostic.severity.INFO) end, hl = { fg = C.sky, bg = sett.bkg, }, icon = " " .. assets.lsp.info .. " ", } components.active[2][5] = { provider = "diagnostic_hints", enabled = function() return lsp.diagnostics_exist(vim.diagnostic.severity.HINT) end, hl = { fg = C.rosewater, bg = sett.bkg, }, icon = " " .. assets.lsp.hint .. " ", } -- Diagnostics ------> -- ######## Center -- ######## Right components.active[3][1] = { provider = "git_branch", enabled = is_enabled(70), hl = { fg = sett.extras, bg = sett.bkg, }, icon = assets.git.branch .. " ", right_sep = invi_sep, } components.active[3][2] = { provider = function() local active_clients = vim.lsp.get_clients { bufnr = 0 } -- show an indicator that we have running lsps if view.lsp.name == false and next(active_clients) ~= nil then return assets.lsp.server .. " " .. "Lsp" end -- show the actual name of the running lsps local index = 0 local lsp_names = "" for _, lsp_config in ipairs(active_clients) do if is_lsp_in_excluded_list(lsp_config.name) then goto continue end index = index + 1 if index == 1 then lsp_names = assets.lsp.server .. " " .. lsp_config.name else lsp_names = lsp_names .. view.lsp.separator .. lsp_config.name end ::continue:: end return lsp_names end, hl = { fg = sett.extras, bg = sett.bkg, }, right_sep = invi_sep, } components.active[3][3] = { provider = function() local filename = vim.fn.expand "%:t" local extension = vim.fn.expand "%:e" local present, icons = pcall(require, "nvim-web-devicons") local icon = present and icons.get_icon(filename, extension) or assets.file return (sett.show_modified and "%m" or "") .. " " .. icon .. " " .. filename .. " " end, enabled = is_enabled(70), hl = { fg = sett.text, bg = sett.curr_file, }, left_sep = { str = assets.left_separator, hl = { fg = sett.curr_file, bg = sett.bkg, }, }, } components.active[3][4] = { provider = function() local dir_name = vim.fn.fnamemodify(vim.fn.getcwd(), ":t") return " " .. assets.dir .. " " .. dir_name .. " " end, enabled = is_enabled(80), hl = { fg = sett.text, bg = sett.curr_dir, }, left_sep = { str = assets.left_separator, hl = { fg = sett.curr_dir, bg = sett.curr_file, }, }, } -- ######## Right -- Inanctive components components.inactive[1][1] = { provider = function() return " " .. string.upper(vim.bo.ft) .. " " end, hl = { fg = C.overlay2, bg = C.mantle, }, } return components end end return M ================================================ FILE: lua/catppuccin/types.lua ================================================ ---@class Catppuccin ---@field options CatppuccinOptions ---@field setup fun(opts: CatppuccinOptions?) ---@alias CtpFlavor "mocha" | "macchiato" | "frappe" | "latte" | "auto" ---@alias CtpColor "rosewater" | "flamingo" | "pink" | "mauve" | "red" | "maroon" | "peach" | "yellow" | "green" | "teal" | "sky" | "sapphire" | "blue" | "lavender" | "text" | "subtext1" | "subtext0" | "overlay2" | "overlay1" | "overlay0" | "surface2" | "surface1" | "surface0" | "base" | "mantle" | "crust" ---@class CtpFlavors: {all: T, mocha: T, macchiato: T, frappe: T, latte: T } ---@class CtpColors: {rosewater: T, flamingo: T, pink: T, mauve: T, red: T, maroon: T, peach: T, yellow: T, green: T, teal: T, sky: T, sapphire: T, blue: T, lavender: T, text: T, subtext1: T, subtext0: T, overlay2: T, overlay1: T, overlay0: T, surface2: T, surface1: T, surface0: T, base: T, mantle: T, crust: T, none: T } ---@class CatppuccinOptions -- Changes the flavor based on the background. See `:h background` for more info. ---@field background CtpBackground? -- By default catppuccin writes the compiled results into the system's cache directory. -- You can change the cache dir by changing this value. ---@field compile_path string? -- Whether to enable transparency. ---@field transparent_background boolean? ---@field float CtpFloatOpts? -- Toggle the `~` characters after the end of buffers. ---@field show_end_of_buffer boolean? -- If true, sets terminal colors (e.g. `g:terminal_color_0`). ---@field term_colors boolean? -- Workaround for kitty transparency issue: https://github.com/kovidgoyal/kitty/issues/2917 ---@field kitty boolean? -- Settings for dimming of inactive windows. ---@field dim_inactive CtpDimInactive? -- Disables all italic styles. ---@field no_italic boolean? -- Disables all bold styles. ---@field no_bold boolean? -- Disables all underline styles. ---@field no_underline boolean? -- Handles the style of general hl groups (see `:h highlight-groups`). ---@field styles CtpStyles? -- Handles the style of specific lsp hl groups (see `:h lsp-highlight`). ---@field lsp_styles CtpLspStyles? -- Should default integrations be used. ---@field default_integrations boolean? -- Should detect integrations automatically ---@field auto_integrations boolean? -- Toggle integrations. Integrations allow Catppuccin to set the theme of various plugins. ---@field integrations CtpIntegrations? -- Catppuccin colors can be overwritten here. ---@field color_overrides CtpColors | CtpFlavors> | nil -- Catppuccin highlights can be overwritten here. ---@field highlight_overrides CtpHighlightOverrides? -- Global highlight overrides. ---@field custom_highlights CtpHighlightOverrideFn | {[string]: CtpHighlight} | nil -- The default flavor to use on startup. ---@field flavour CtpFlavor? ---@class CtpBackground -- Catppuccin flavor to use when `:set background=dark` is set. ---@field dark CtpFlavor? -- Catppuccin flavor to use when `:set background=light` is set. ---@field light CtpFlavor? ---@class CtpFloatOpts ---@field transparent boolean enable transparent floating windows ---@field solid boolean use solid style floating windows, see |winborder| ---@class CtpDimInactive -- Whether to dim inactive windows. ---@field enabled boolean -- Whether to darken or lighten inactive windows. ---@field shade "dark" | "light" | nil -- Percentage of the shade to apply to the inactive window ---@field percentage number? ---@class CtpStyles -- Change the style of comments. ---@field comments CtpHighlightArgs[]? -- Change the style of conditionals. ---@field conditionals CtpHighlightArgs[]? -- Change the style of loops. ---@field loops CtpHighlightArgs[]? -- Change the style of functions. ---@field functions CtpHighlightArgs[]? -- Change the style of keywords. ---@field keywords CtpHighlightArgs[]? -- Change the style of strings. ---@field strings CtpHighlightArgs[]? -- Change the style of variables. ---@field variables CtpHighlightArgs[]? -- Change the style of numbers. ---@field numbers CtpHighlightArgs[]? -- Change the style of booleans. ---@field booleans CtpHighlightArgs[]? -- Change the style of properties. ---@field properties CtpHighlightArgs[]? -- Change the style of types. ---@field types CtpHighlightArgs[]? -- Change the style of operators. ---@field operators CtpHighlightArgs[]? -- Change the style of miscs. ---@field miscs CtpHighlightArgs[]? ---@class CtpLspStyles -- Styles to apply to virtual text. ---@field virtual_text CtpLspDiagnosticStyles? -- Styles to apply to underlines. ---@field underlines CtpLspDiagnosticStyles? -- Inlay hints options. ---@field inlay_hints CtpLspStylesInlayHints? ---@class CtpLspDiagnosticStyles -- Change the style of LSP error diagnostics. ---@field errors CtpHighlightArgs[]? -- Change the style of LSP hint diagnostics. ---@field hints CtpHighlightArgs[]? -- Change the style of LSP warning diagnostics. ---@field warnings CtpHighlightArgs[]? -- Change the style of LSP information diagnostics. ---@field information CtpHighlightArgs[]? -- Change the style of LSP ok diagnostics. ---@field ok CtpHighlightArgs[]? ---@class CtpLspStylesInlayHints -- Toggle the background of inlay hints. ---@field background boolean? ---@class CtpIntegrations ---@field aerial boolean? ---@field alpha boolean? ---@field artio boolean? ---@field avante CtpIntegratinAvant | boolean? ---@field barbar boolean? -- Use this to set it up: -- -- ```lua -- require("barbecue").setup { -- -- valid options: -- -- "catppuccin-latte" -- -- "catppuccin-frappe" -- -- "catppuccin-macchiato" -- -- "catppuccin-mocha" -- theme = "catppuccin", -- } ---``` ---@field barbecue CtpIntegrationBarbecue | boolean? ---@field beacon boolean? ---@field blink_cmp CtpIntegrationsBlinkCmp | boolean? ---@field blink_indent boolean? ---@field blink_pairs boolean? ---@field cmp boolean? ---@field buffon boolean? -- `coc.nvim` links to `lsp_styles` highlight groups, so you can use -- `lsp_styles.virtual_text` and `lsp_styles.underlines` to style diagnostics. ---@field coc_nvim boolean? ---@field colorful_winsep CtpIntegrationColorfulWinsep | boolean? ---@field copilot_vim boolean? -- ```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 = ""}) -- ``` ---@field dadbod_ui boolean? ---@field dap boolean? ---@field dap_ui boolean? ---@field dashboard boolean? ---@field diffview boolean? ---@field dropbar CtpIntegrationDropbar | boolean? ---@field fern boolean? -- Set `notification.window.winblend` to `0` in your `fidget` config: -- -- ```lua -- require("fidget").setup { -- notification = { -- window = { winblend = 0 }, -- } -- } -- ``` ---@field fidget boolean? ---@field flash boolean? ---@field fzf boolean? ---@field gitgutter boolean? ---@field gitgraph boolean? ---@field gitsigns CtpIntegrationGitsigns | boolean? ---@field grug_far boolean? ---@field harpoon boolean? ---@field headlines boolean? ---@field hop boolean? ---@field illuminate CtpIntegrationIlluminate | boolean? ---@field indent_blankline CtpIntegrationIndentBlankline | boolean? ---@field leap boolean? ---@field lightspeed boolean? ---@field lir CtpIntegrationLir | boolean? -- For custom Lsp kind icon and colors, adjust your `lspsaga` config: -- -- ```lua -- require("lspsaga").setup { -- ui = { -- kind = require("catppuccin.groups.integrations.lsp_saga").custom_kind(), -- }, -- } -- ``` ---@field lsp_saga boolean? ---@field lsp_trouble boolean? ---@field lualine CtpIntegrationLualine? ---@field markview boolean? ---@field mason boolean? -- You **NEED** to enable highlight in your `nvim-navic` config or it won't work: -- -- ```lua -- require("nvim-navic").setup { -- highlight = true -- } -- ``` ---@field navic CtpIntegrationNavic | boolean? ---@field neogit boolean? ---@field neotest boolean? ---@field neotree boolean? ---@field noice boolean? ---@field notify boolean? ---@field nvim_surround boolean? ---@field nvimtree boolean? ---@field octo boolean? ---@field overseer boolean? ---@field pounce boolean? ---@field rainbow_delimiters boolean? ---@field render_markdown boolean? ---@field sandwich boolean? ---@field snacks CtpIntegrationSnacks | boolean? ---@field signify boolean? ---@field symbols_outline boolean? ---@field telekasten boolean? ---@field telescope CtpIntegrationTelescope | boolean? ---@field treesitter_context boolean? ---@field ts_rainbow boolean? ---@field ts_rainbow2 boolean? ---@field vim_sneak boolean? ---@field vimwiki boolean? ---@field which_key boolean? ---@field window_picker boolean? ---@class CtpIntegratinAvant -- Whether the opts.windows.sidebar_header.rounded option is set on Avante ---@field enabled boolean ---@field windows_sidebar_header_rounded boolean? ---@class CtpIntegrationBarbecue -- Whether to use the alternative background. ---@field alt_background boolean? -- Whether the basename should be bold. ---@field bold_basename boolean? -- Whether the context should be dimmed. ---@field dim_context boolean? -- Whether the directory name should be dimmed. ---@field dim_dirname boolean? ---@class CtpIntegrationsBlinkCmp --- The border style for the completion menu ---@field style 'solid'|'bordered' ---@class CtpIntegrationColorfulWinsep -- Whether to enable the colorful-winsep integration. ---@field enabled boolean -- Set to a Catppuccin color name to use for the split separator. ---@field color CtpColor? ---@class CtpIntegrationDropbar -- Whether to enable the dropbar integration. ---@field enabled boolean -- Set to true to apply color to the text in dropbar, false to only apply it to the icons. ---@field color_mode boolean? ---@class CtpIntegrationGitsigns --- Whether to enable the gitsigns integration ---@field enabled boolean --- Whether to enabled transparent background option ---@field transparent boolean? ---@class CtpIntegrationIndentBlankline -- Whether to enable the integration. ---@field enabled boolean -- Sets the color of the scope line ---@field scope_color CtpColor? -- Enables char highlights per indent level. -- Follow the instructions on the plugins GitHub repo to set it up. ---@field colored_indent_levels boolean? ---@class CtpIntegrationLir -- Whether to enable the integration. ---@field enabled boolean -- Sets lir-git-status.nvim highlight groups ---@field git_status boolean ---@class CtpIntegrationMini -- Whether to enable the integration. ---@field enabled boolean -- Sets the color of the scope line ---@field indentscope_color CtpColor? ---@alias CtpIntegrationLualine CtpFlavors ---@alias CtpIntegrationLualineOverride CtpIntegrationLualineModes ---@alias CtpIntegrationLualineOverrideFn fun(colors: CtpColors): CtpIntegrationLualineOverride ---@alias CtpIntegrationLualineMode "normal" | "insert" | "visual" | "replace" | "command" | "terminal" | "inactive" ---@class CtpIntegrationLualineModes: { all: T, normal: T, insert: T, visual: T, replace: T, command: T, terminal: T, inactive: T } ---@alias CtpIntegrationLualineSectionOverrides CtpIntegrationLualineSections ---@alias CtpIntegrationLualineSection "a" | "b" | "c" ---@class CtpIntegrationLualineSections: { a: T, b: T, c: T } ---@class CtpIntegrationLualineSectionOverride ---@field fg string? ---@field bg string? ---@field gui string? `gui` argument such as "italic,bold", see |highlight-gui| ---@class CtpIntegrationNavic -- Whether to enable the navic integration. ---@field enabled boolean -- Override the background color for navic. ---@field custom_bg CtpColor | "NONE" | "lualine" | nil ---@class CtpIntegrationSnacks -- Whether to enable the snacks integration. ---@field enabled boolean -- Sets the color of the indent scope line ---@field indent_scope_color CtpColor? ---@class CtpIntegrationTelescope -- Whether to enable the telescope integration ---@field enabled boolean? ---@class CtpIntegrationIlluminate -- Whether to enable the vim-illuminate integration ---@field enabled boolean? -- Whether to standout IlluminatedWordWrite hl group ---@field lsp boolean? ---@alias CtpHighlightArgs "bold" | "underline" | "undercurl" | "underdouble" | "underdotted" | "underdashed" | "strikethrough" | "reverse" | "inverse" | "italic" | "standout" | "altfont" | "nocombine" | "NONE" ---@alias CtpHighlightOverrideFn fun(colors: CtpColors): { [string]: CtpHighlight} ---@alias CtpHighlightOverrides CtpFlavors ---@class CtpHighlight ---@field fg string? ---@field bg string? ---@field style CtpHighlightArgs[]? ---@field link string? ================================================ FILE: lua/catppuccin/utils/barbecue.lua ================================================ return function(flavour) local C = require("catppuccin.palettes").get_palette(flavour) local O = require("catppuccin").options local transparent_bg = O.transparent_background and C.none or C.mantle local dirname_color = O.integrations.barbecue.dim_dirname and C.overlay1 or C.text local basename_bold = O.integrations.barbecue.bold_basename local context_color = O.integrations.barbecue.dim_context and C.overlay1 or C.text local background_color = O.integrations.barbecue.alt_background and transparent_bg or C.none local M = { normal = { fg = C.text, bg = background_color }, ellipsis = { fg = C.overlay1 }, separator = { fg = C.overlay1 }, modified = { fg = C.peach }, dirname = { fg = dirname_color }, basename = { fg = C.text, bold = basename_bold }, context = { fg = context_color }, -- Same keys as navic context_file = { fg = C.blue }, context_module = { fg = C.blue }, context_namespace = { fg = C.blue }, context_package = { fg = C.blue }, context_class = { fg = C.yellow }, context_method = { fg = C.blue }, context_property = { fg = C.green }, context_field = { fg = C.green }, context_constructor = { fg = C.blue }, context_enum = { fg = C.green }, context_interface = { fg = C.yellow }, context_function = { fg = C.blue }, context_variable = { fg = C.flamingo }, context_constant = { fg = C.peach }, context_string = { fg = C.green }, context_number = { fg = C.peach }, context_boolean = { fg = C.peach }, context_array = { fg = C.blue }, context_object = { fg = C.blue }, context_key = { fg = C.flamingo }, context_null = { fg = C.peach }, context_enum_member = { fg = C.red }, context_struct = { fg = C.blue }, context_event = { fg = C.blue }, context_operator = { fg = C.blue }, context_type_parameter = { fg = C.blue }, } return M end ================================================ FILE: lua/catppuccin/utils/colors.lua ================================================ local M = {} local hsluv = require "catppuccin.lib.hsluv" M.bg = "#000000" M.fg = "#ffffff" M.day_brightness = 0.3 ---@param hex_str string hexadecimal value of a color local hex_to_rgb = function(hex_str) local hex = "[abcdef0-9][abcdef0-9]" local pat = "^#(" .. hex .. ")(" .. hex .. ")(" .. hex .. ")$" hex_str = string.lower(hex_str) assert(string.find(hex_str, pat) ~= nil, "hex_to_rgb: invalid hex_str: " .. tostring(hex_str)) local red, green, blue = string.match(hex_str, pat) return { tonumber(red, 16), tonumber(green, 16), tonumber(blue, 16) } end ---@param fg string forecrust color ---@param bg string background color ---@param alpha number number between 0 and 1. 0 results in bg, 1 results in fg function M.blend(fg, bg, alpha) bg = hex_to_rgb(bg) fg = hex_to_rgb(fg) local blendChannel = function(i) local ret = (alpha * fg[i] + ((1 - alpha) * bg[i])) return math.floor(math.min(math.max(0, ret), 255) + 0.5) end return string.format("#%02X%02X%02X", blendChannel(1), blendChannel(2), blendChannel(3)) end function M.darken(hex, amount, bg) return M.blend(hex, bg or M.bg, math.abs(amount)) end function M.lighten(hex, amount, fg) return M.blend(hex, fg or M.fg, math.abs(amount)) end function M.brighten(color, percentage) local hsl = hsluv.hex_to_hsluv(color) local larpSpace = 100 - hsl[3] if percentage < 0 then larpSpace = hsl[3] end hsl[3] = hsl[3] + larpSpace * percentage return hsluv.hsluv_to_hex(hsl) end function M.invertColor(color) if color ~= "NONE" then local hsl = hsluv.hex_to_hsluv(color) hsl[3] = 100 - hsl[3] if hsl[3] < 40 then hsl[3] = hsl[3] + (100 - hsl[3]) * M.day_brightness end return hsluv.hsluv_to_hex(hsl) end return color end function M.string_to_color(colors, value, default) if not value or value == "" then return default end -- If the value is a hex color code then return it local hex = "[abcdef0-9][abcdef0-9]" local pat = "^#" .. hex .. hex .. hex .. "$" if string.match(value, pat) then return value end local acceptable_colors = { "black", "red", "green", "blue", "magenta", "cyan", "text", "orange", "pink" } for _, ac in ipairs(acceptable_colors) do if string.match(value, ac) then return colors[value] end end -- Did not match anything to return default return default end function M.color_is_bright(r, g, b) -- Counting the perceptive luminance - human eye favors green color local luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255 if luminance > 0.5 then return true -- Bright colors, black font else return false -- Dark colors, text font end end function M.hex2rgb(hex) return tonumber("0x" .. hex:sub(1, 2)), tonumber("0x" .. hex:sub(3, 4)), tonumber("0x" .. hex:sub(5, 6)) end function M.assert_brightness(color) local hex = color:gsub("#", "") local r = M.hex2rgb(string.sub(hex, 1, 2)) local g = M.hex2rgb(string.sub(hex, 3, 4)) local b = M.hex2rgb(string.sub(hex, 5, 6)) if M.color_is_bright(tonumber(r), tonumber(g), tonumber(b)) == true then return true -- bright end return false -- dull end function M.vary_color(palettes, default) local flvr = require("catppuccin").flavour if palettes[flvr] ~= nil then return palettes[flvr] end return default end local function rgb2Hex(rgb) local hexadecimal = "#" for _, value in pairs(rgb) do local hex = "" while value > 0 do local index = math.fmod(value, 16) + 1 value = math.floor(value / 16) hex = string.sub(hsluv.hexChars, index, index) .. hex end if string.len(hex) == 0 then hex = "00" elseif string.len(hex) == 1 then hex = "0" .. hex end hexadecimal = hexadecimal .. hex end return hexadecimal end function M.increase_saturation(hex, percentage) local rgb = hex_to_rgb(hex) local saturation_float = percentage table.sort(rgb) local rgb_intensity = { min = rgb[1] / 255, mid = rgb[2] / 255, max = rgb[3] / 255, } if rgb_intensity.max == rgb_intensity.min then -- all colors have same intensity, which means -- the original color is gray, so we can't change saturation. return hex end local new_intensities = {} new_intensities.max = rgb_intensity.max new_intensities.min = rgb_intensity.max * (1 - saturation_float) if rgb_intensity.mid == rgb_intensity.min then new_intensities.mid = new_intensities.min else local intensity_proportion = (rgb_intensity.max - rgb_intensity.mid) / (rgb_intensity.mid - rgb_intensity.min) new_intensities.mid = (intensity_proportion * new_intensities.min + rgb_intensity.max) / (intensity_proportion + 1) end for i, v in pairs(new_intensities) do new_intensities[i] = math.floor(v * 255) end table.sort(new_intensities) return (rgb2Hex { new_intensities.max, new_intensities.min, new_intensities.mid }) end return M ================================================ FILE: lua/catppuccin/utils/integration_mappings.lua ================================================ local M = { ["aerial.nvim"] = "aerial", ["alpha-nvim"] = "alpha", ["artio.nvim"] = "artio", ["avante.nvim"] = "avante", ["barbar.nvim"] = "barbar", ["beacon.nvim"] = "beacon", ["blink.cmp"] = "blink_cmp", ["blink.indent"] = "blink_indent", ["blink.pairs"] = "blink_pairs", ["buffon.nvim"] = "buffon", ["coc.nvim"] = "coc_nvim", ["colorful-winsep.nvim"] = "colorful_winsep", ["copilot.vim"] = "copilot_vim", ["dashboard-nvim"] = "dashboard", ["diffview.nvim"] = "diffview", ["dropbar.nvim"] = "dropbar", ["fidget.nvim"] = "fidget", ["flash.nvim"] = "flash", ["fzf-lua"] = "fzf", ["gitgraph.nvim"] = "gitgraph", ["gitsigns.nvim"] = "gitsigns", ["grug-far.nvim"] = "grug_far", ["harpoon"] = "harpoon", ["headlines.nvim"] = "headlines", ["hop.nvim"] = "hop", ["indent-blankline.nvim"] = "indent_blankline", ["leap.nvim"] = "leap", ["lightspeed.nvim"] = "lightspeed", ["lir.nvim"] = "lir", ["lspsaga.nvim"] = "lsp_saga", ["markview.nvim"] = "markview", ["mason.nvim"] = "mason", ["mini.nvim"] = "mini", ["neo-tree.nvim"] = "neotree", ["neogit"] = "neogit", ["neotest"] = "neotest", ["notifier.nvim"] = "notifier", ["nvim-cmp"] = "cmp", ["nvim-dap"] = "dap", ["nvim-dap-ui"] = "dap_ui", ["nvim-navic"] = "navic", ["nvim-notify"] = "notify", ["nvim-surround"] = "nvim_surround", ["nvim-tree.lua"] = "nvimtree", ["nvim-treesitter-context"] = "treesitter_context", ["nvim-ts-rainbow"] = "ts_rainbow", ["nvim-ts-rainbow2"] = "ts_rainbow2", ["nvim-ufo"] = "ufo", ["nvim-window-picker"] = "window_picker", ["octo.nvim"] = "octo", ["overseer.nvim"] = "overseer", ["pounce.nvim"] = "pounce", ["rainbow-delimiters.nvim"] = "rainbow_delimiters", ["render-markdown.nvim"] = "render_markdown", ["snacks.nvim"] = "snacks", ["symbols-outline.nvim"] = "symbols_outline", ["telekasten.nvim"] = "telekasten", ["telescope.nvim"] = "telescope", ["trouble.nvim"] = "lsp_trouble", ["vim-dadbod-ui"] = "dadbod_ui", ["vim-fern"] = "fern", ["vim-gitgutter"] = "gitgutter", ["vim-illuminate"] = "illuminate", ["vim-sandwich"] = "sandwich", ["vim-signify"] = "signify", ["vim-sneak"] = "vim_sneak", ["vimwiki"] = "vimwiki", ["which-key.nvim"] = "which_key", } return M ================================================ FILE: lua/catppuccin/utils/lualine.lua ================================================ ---@param colors_override (CtpIntegrationLualineOverride | CtpIntegrationLualineOverrideFn)? ---@param colors CtpColors local function get_colors(colors_override, colors) if colors_override == nil then return {} elseif type(colors_override) == "function" then return colors_override(colors) else return colors_override end end return function(flavour) flavour = flavour or require("catppuccin").flavour or vim.g.catppuccin_flavour or "mocha" local C = require("catppuccin.palettes").get_palette(flavour) local O = require("catppuccin").options local transparent_bg = O.transparent_background and "NONE" or C.mantle local default_colors = { 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 }, }, } local overrides = O.integrations.lualine if overrides then local default_override = get_colors(overrides.all, C) local flavor_override = get_colors(overrides[flavour], C) return vim.tbl_deep_extend("force", default_colors, default_override, flavor_override) end return default_colors end ================================================ FILE: lua/catppuccin/utils/reactive.lua ================================================ local M = {} function M.cursor(name, palette) return { name = name, init = function() vim.opt.guicursor:append "a:ReactiveCursor" end, modes = { n = { hl = { ReactiveCursor = { bg = palette.yellow }, }, }, i = { hl = { ReactiveCursor = { bg = palette.teal }, }, }, no = { operators = { d = { hl = { ReactiveCursor = { bg = palette.red }, }, }, y = { hl = { ReactiveCursor = { bg = palette.peach }, }, }, c = { hl = { ReactiveCursor = { bg = palette.blue }, }, }, }, }, R = { hl = { ReactiveCursor = { bg = palette.sapphire }, }, }, -- visual [{ "v", "V", "\x16" }] = { hl = { ReactiveCursor = { bg = palette.mauve }, }, }, -- select [{ "s", "S", "\x13" }] = { hl = { ReactiveCursor = { bg = palette.pink }, }, }, }, } end function M.cursorline(name, palette) local darken = require("catppuccin.utils.colors").darken return { name = name, static = { winhl = { inactive = { CursorLine = { bg = darken(palette.surface0, 0.75) }, CursorLineNr = { bg = darken(palette.surface0, 0.75) }, }, }, }, modes = { -- insert mode i = { winhl = { CursorLine = { bg = darken(palette.sky, 0.3) }, CursorLineNr = { bg = darken(palette.sky, 0.3) }, }, }, -- normal mode n = { winhl = { CursorLine = { bg = palette.surface0 }, CursorLineNr = { bg = palette.surface0 }, }, }, -- operator-pending mode no = { operators = { [{ "gu", "gU", "g~", "~" }] = { winhl = { CursorLine = { bg = palette.surface2 }, CursorLineNr = { bg = palette.surface2 }, }, }, -- delete operator d = { winhl = { CursorLine = { bg = darken(palette.red, 0.4) }, CursorLineNr = { bg = darken(palette.red, 0.4) }, }, }, -- yank operator y = { winhl = { CursorLine = { bg = darken(palette.peach, 0.3) }, CursorLineNr = { bg = darken(palette.peach, 0.3) }, }, }, -- change operator c = { winhl = { CursorLine = { bg = darken(palette.blue, 0.4) }, CursorLineNr = { bg = darken(palette.blue, 0.4) }, }, }, }, }, R = { winhl = { CursorLine = { bg = darken(palette.sapphire, 0.4) }, CursorLineNr = { bg = darken(palette.sapphire, 0.4) }, }, }, -- visual mode [{ "v", "V", "\x16" }] = { winhl = { Visual = { bg = darken(palette.mauve, 0.4) }, }, }, -- select mode [{ "s", "S", "\x13" }] = { winhl = { Visual = { bg = darken(palette.pink, 0.4) }, }, }, }, } end return M ================================================ FILE: lua/lualine/themes/catppuccin-frappe.lua ================================================ return require "catppuccin.utils.lualine" "frappe" ================================================ FILE: lua/lualine/themes/catppuccin-latte.lua ================================================ return require "catppuccin.utils.lualine" "latte" ================================================ FILE: lua/lualine/themes/catppuccin-macchiato.lua ================================================ return require "catppuccin.utils.lualine" "macchiato" ================================================ FILE: lua/lualine/themes/catppuccin-mocha.lua ================================================ return require "catppuccin.utils.lualine" "mocha" ================================================ FILE: lua/lualine/themes/catppuccin-nvim.lua ================================================ return require "catppuccin.utils.lualine"() ================================================ FILE: lua/reactive/presets/catppuccin-frappe-cursor.lua ================================================ local palette = require("catppuccin.palettes").get_palette "frappe" local presets = require "catppuccin.utils.reactive" return presets.cursor("catppuccin-frappe-cursor", palette) ================================================ FILE: lua/reactive/presets/catppuccin-frappe-cursorline.lua ================================================ local darken = require("catppuccin.utils.colors").darken local palette = require("catppuccin.palettes").get_palette "frappe" return { name = "catppuccin-frappe-cursorline", static = { winhl = { inactive = { CursorLine = { bg = darken(palette.surface0, 0.85) }, CursorLineNr = { bg = darken(palette.surface0, 0.85) }, }, }, }, modes = { i = { winhl = { CursorLine = { bg = darken(palette.sky, 0.4) }, CursorLineNr = { bg = darken(palette.sky, 0.4) }, }, }, n = { winhl = { CursorLine = { bg = palette.surface0 }, CursorLineNr = { bg = palette.surface0 }, }, }, no = { operators = { [{ "gu", "gU", "g~", "~" }] = { winhl = { CursorLine = { bg = palette.surface2 }, CursorLineNr = { bg = palette.surface2 }, }, }, -- delete operator d = { winhl = { CursorLine = { bg = darken(palette.red, 0.4) }, CursorLineNr = { bg = darken(palette.red, 0.4) }, }, }, -- yank operator y = { winhl = { CursorLine = { bg = darken(palette.peach, 0.4) }, CursorLineNr = { bg = darken(palette.peach, 0.4) }, }, }, -- change operator c = { winhl = { CursorLine = { bg = darken(palette.blue, 0.5) }, CursorLineNr = { bg = darken(palette.blue, 0.5) }, }, }, }, }, -- replace mode R = { winhl = { CursorLine = { bg = darken(palette.sapphire, 0.5) }, CursorLineNr = { bg = darken(palette.sapphire, 0.5) }, }, }, -- visual mode [{ "v", "V", "\x16" }] = { winhl = { Visual = { bg = darken(palette.mauve, 0.4) }, }, }, -- select mode [{ "s", "S", "\x13" }] = { winhl = { Visual = { bg = darken(palette.pink, 0.4) }, }, }, }, } ================================================ FILE: lua/reactive/presets/catppuccin-latte-cursor.lua ================================================ local palette = require("catppuccin.palettes").get_palette "latte" local presets = require "catppuccin.utils.reactive" local preset = presets.cursor("catppuccin-latte-cursor", palette) preset.modes.R.hl.ReactiveCursor = { bg = palette.flamingo } return preset ================================================ FILE: lua/reactive/presets/catppuccin-latte-cursorline.lua ================================================ local lighten = require("catppuccin.utils.colors").lighten local palette = require("catppuccin.palettes").get_palette "latte" return { name = "catppuccin-latte-cursorline", static = { winhl = { inactive = { CursorLine = { bg = lighten(palette.surface0, 0.5) }, CursorLineNr = { bg = lighten(palette.surface0, 0.5) }, }, }, }, modes = { i = { winhl = { CursorLine = { bg = lighten(palette.teal, 0.4) }, CursorLineNr = { bg = lighten(palette.teal, 0.4) }, }, }, n = { winhl = { CursorLine = { bg = palette.surface0 }, CursorLineNr = { bg = palette.surface0 }, }, }, no = { operators = { [{ "gu", "gU", "g~", "~" }] = { winhl = { CursorLine = { bg = palette.surface2 }, CursorLineNr = { bg = palette.surface2 }, }, }, -- delete operator d = { winhl = { CursorLine = { bg = lighten(palette.red, 0.3) }, CursorLineNr = { bg = lighten(palette.red, 0.3) }, }, }, -- yank operator y = { winhl = { CursorLine = { bg = lighten(palette.peach, 0.3) }, CursorLineNr = { bg = lighten(palette.peach, 0.3) }, }, }, -- change operator c = { winhl = { CursorLine = { bg = lighten(palette.blue, 0.3) }, CursorLineNr = { bg = lighten(palette.blue, 0.3) }, }, }, }, }, -- visual [{ "v", "V", "\x16" }] = { winhl = { Visual = { bg = lighten(palette.mauve, 0.3) }, }, }, -- select [{ "s", "S", "\x13" }] = { winhl = { Visual = { bg = lighten(palette.pink, 0.3) }, }, }, R = { winhl = { CursorLine = { bg = lighten(palette.flamingo, 0.2) }, CursorLineNr = { bg = lighten(palette.flamingo, 0.2) }, }, }, }, } ================================================ FILE: lua/reactive/presets/catppuccin-macchiato-cursor.lua ================================================ local palette = require("catppuccin.palettes").get_palette "macchiato" local presets = require "catppuccin.utils.reactive" return presets.cursor("catppuccin-macchiato-cursor", palette) ================================================ FILE: lua/reactive/presets/catppuccin-macchiato-cursorline.lua ================================================ local palette = require("catppuccin.palettes").get_palette "macchiato" local presets = require "catppuccin.utils.reactive" local darken = require("catppuccin.utils.colors").darken local preset = presets.cursorline("catppuccin-macchiato-cursorline", palette) preset.static.winhl.inactive.CursorLine = { bg = darken(palette.surface0, 0.8) } preset.static.winhl.inactive.CursorLineNr = { bg = darken(palette.surface0, 0.8) } return preset ================================================ FILE: lua/reactive/presets/catppuccin-mocha-cursor.lua ================================================ local palette = require("catppuccin.palettes").get_palette "mocha" local presets = require "catppuccin.utils.reactive" return presets.cursor("catppuccin-mocha-cursor", palette) ================================================ FILE: lua/reactive/presets/catppuccin-mocha-cursorline.lua ================================================ local palette = require("catppuccin.palettes").get_palette "mocha" local presets = require "catppuccin.utils.reactive" return presets.cursorline("catppuccin-mocha-cursorline", palette) ================================================ FILE: nvim.tera ================================================ --- whiskers: version: 2.5.1 matrix: - flavor filename: "lua/catppuccin/palettes/{{flavor.identifier}}.lua" --- return { {%- for id, color in flavor.colors %} {{id}} = "#{{color.hex}}", {%- endfor %} } ================================================ FILE: renovate.json ================================================ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "local>catppuccin/renovate-config" ] } ================================================ FILE: scripts/generate_integration_mappings_table.lua ================================================ local M = {} local catppuccin_path = vim.fn.getcwd() -- get to the root directory of the plugin local lua_path = catppuccin_path .. "/lua" package.path = package.path .. string.format(";%s/?.lua", lua_path) .. string.format(";%s/?/init.lua", lua_path) local integrations_path = lua_path .. "/catppuccin/groups/integrations/" local target_path = lua_path .. "/catppuccin/utils/integration_mappings.lua" ---@return table mappings table holding plugin to catppuccin name local function create_table() local mappings = vim.iter(vim.fs.dir(integrations_path)):fold({}, function(m, filename, _) filename = vim.fn.fnamemodify(filename, ":r") local ok, mod = pcall(require, "catppuccin.groups.integrations." .. filename) if not ok then return m end ---@type string local plugin_url = mod.url if not plugin_url then return m end local plugin_name = require("catppuccin.lib.detect_integrations").parse_url(plugin_url) m[plugin_name] = filename return m end) return mappings end ---@return string[] lines holding the lines to be written to `target_file` local function format_table(mappings_table) -- sort the table alphabetically local keys = vim.tbl_keys(mappings_table) table.sort(keys) local lines = {} for _, plugin_name in pairs(keys) do table.insert(lines, string.format('\t["%s"] = "%s",\n', plugin_name, mappings_table[plugin_name])) end return lines end local mappings = create_table() local lines = format_table(mappings) local target_file = io.open(target_path, "w+") assert(target_file ~= nil) target_file:write "local M = {\n" for _, line in ipairs(lines) do target_file:write(line) end target_file:write "}\n" target_file:write "\nreturn M\n" target_file:close() return M ================================================ FILE: selene.toml ================================================ std = 'vim' [lints] mixed_table = 'allow' ================================================ FILE: stylua.toml ================================================ column_width = 120 line_endings = "Unix" indent_type = "Tabs" indent_width = 4 quote_style = "AutoPreferDouble" collapse_simple_statement = "Always" call_parentheses = "None" ================================================ FILE: tests/flavour_spec.lua ================================================ local function reload() for name, _ in pairs(package.loaded) do if name:match "^catppuccin" then package.loaded[name] = nil end end vim.g.catppuccin_flavour = nil vim.cmd [[highlight clear]] end describe("set background to", function() before_each(function() reload() vim.cmd.colorscheme "catppuccin-nvim" end) it("light", function() vim.o.background = "light" assert.equals("catppuccin-latte", vim.g.colors_name) end) it("dark", function() vim.o.background = "dark" assert.equals("catppuccin-mocha", vim.g.colors_name) end) end) describe("respect vim.o.background =", function() before_each(function() reload() end) it("light", function() vim.o.background = "light" vim.cmd.colorscheme "catppuccin-nvim" assert.equals("catppuccin-latte", vim.g.colors_name) end) it("dark", function() vim.o.background = "dark" vim.cmd.colorscheme "catppuccin-nvim" assert.equals("catppuccin-mocha", vim.g.colors_name) end) end) describe("change flavour to", function() before_each(function() reload() end) it("latte", function() vim.cmd.colorscheme "catppuccin-latte" assert.equals("catppuccin-latte", vim.g.colors_name) end) it("frappe", function() vim.cmd.colorscheme "catppuccin-frappe" assert.equals("catppuccin-frappe", vim.g.colors_name) end) it("macchiato", function() vim.cmd.colorscheme "catppuccin-macchiato" assert.equals("catppuccin-macchiato", vim.g.colors_name) end) it("mocha", function() vim.cmd.colorscheme "catppuccin-mocha" assert.equals("catppuccin-mocha", vim.g.colors_name) end) end) describe("respect setup flavour =", function() before_each(function() reload() end) it("latte", function() require("catppuccin").setup { flavour = "latte" } vim.cmd.colorscheme "catppuccin-nvim" assert.equals("catppuccin-latte", vim.g.colors_name) end) it("frappe", function() require("catppuccin").setup { flavour = "frappe" } vim.cmd.colorscheme "catppuccin-nvim" assert.equals("catppuccin-frappe", vim.g.colors_name) end) it("macchiato", function() require("catppuccin").setup { flavour = "macchiato" } vim.cmd.colorscheme "catppuccin-nvim" assert.equals("catppuccin-macchiato", vim.g.colors_name) end) it("mocha", function() require("catppuccin").setup { flavour = "mocha" } vim.cmd.colorscheme "catppuccin-nvim" assert.equals("catppuccin-mocha", vim.g.colors_name) end) end) describe("(deprecated) respect vim.g.catppuccin_flavour =", function() before_each(function() reload() end) it("latte", function() vim.g.catppuccin_flavour = "latte" vim.cmd.colorscheme "catppuccin-nvim" assert.equals("catppuccin-latte", vim.g.colors_name) end) it("frappe", function() vim.g.catppuccin_flavour = "frappe" vim.cmd.colorscheme "catppuccin-nvim" assert.equals("catppuccin-frappe", vim.g.colors_name) end) it("macchiato", function() vim.g.catppuccin_flavour = "macchiato" vim.cmd.colorscheme "catppuccin-nvim" assert.equals("catppuccin-macchiato", vim.g.colors_name) end) it("mocha", function() vim.g.catppuccin_flavour = "mocha" vim.cmd.colorscheme "catppuccin-nvim" assert.equals("catppuccin-mocha", vim.g.colors_name) end) end) ================================================ FILE: tests/hash_spec.lua ================================================ describe("hash", function() local hash = require("catppuccin.lib.hashing").hash it("typo", function() assert.are_not.equals(hash { custom_highlight = {} }, hash { ustom_highlight = {} }) end) it( "when table order is shuffled", function() assert.equals( hash { custom_highlight = { Search = { fg = "#F5C2E7", bg = "#45475A", style = { "bold" } }, IncSearch = { fg = "#45475A", bg = "#F5C2E7" }, }, }, hash { custom_highlight = { Search = { style = { "bold" }, bg = "#45475A", fg = "#F5C2E7" }, IncSearch = { bg = "#F5C2E7", fg = "#45475A" }, }, } ) end ) it( "when toggle true/false", function() assert.are_not.equals({ integrations = { navic = true, noice = true, fidget = true, }, }, { integrations = { navic = true, noice = false, fidget = false, }, }) end ) end) ================================================ FILE: tests/init.lua ================================================ local status, error = pcall(function() local root = vim.fn.fnamemodify(".repro", ":p") for _, name in ipairs { "config", "data", "state", "cache" } do vim.env[("XDG_%s_HOME"):format(name:upper())] = root .. "/" .. name end local lazypath = root .. "/plugins/lazy.nvim" if not vim.loop.fs_stat(lazypath) then vim.fn.system { "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", lazypath } end vim.opt.runtimepath:prepend(lazypath) require("lazy").setup({ { "catppuccin/nvim", dev = true }, }, { root = root .. "/plugins", dev = { path = debug.getinfo(1).source:sub(2, -21), }, }) require("catppuccin").setup() vim.cmd.colorscheme "catppuccin-nvim" end) if error then print(error) end vim.cmd(status and "0cq" or "1cq") ================================================ FILE: tests/init.vim ================================================ try call plug#begin() Plug expand('')[0:-16] call plug#end() lua require("catppuccin").setup {} colorscheme catppuccin-nvim catch echo v:exception 1cq finally 0cq endtry ================================================ FILE: tests/minimal_init.vim ================================================ set rtp+=. runtime! plugin/plenary.vim ================================================ FILE: tests/palette_spec.lua ================================================ local function reload() for name, _ in pairs(package.loaded) do if name:match "^catppuccin" then package.loaded[name] = nil end end vim.g.catppuccin_flavour = nil vim.cmd [[highlight clear]] end -- TODO: Move this to setup_spec describe("get palette", function() before_each(function() reload() end) it("before setup", function() assert.equals(pcall(function() require("catppuccin.palettes").get_palette() end), true) end) it("after setup", function() require("catppuccin").setup() assert.equals(pcall(function() require("catppuccin.palettes").get_palette() end), true) end) end) ================================================ FILE: tests/pattern_spec.lua ================================================ describe("parse url from", function() local parse_url = require("catppuccin.lib.detect_integrations").parse_url it( "word-word-word", function() assert.equals( parse_url "https://github.com/nvim-treesitter/nvim-treesitter-context", "nvim-treesitter-context" ) end ) it( "nvim-word-word[d]", function() assert.equals(parse_url "https://github.com/HiPhish/nvim-ts-rainbow2", "nvim-ts-rainbow2") end ) it("nvim-word", function() assert.equals(parse_url "https://github.com/kevinhwang91/nvim-ufo", "nvim-ufo") end) it( "word.nvim", function() assert.equals(parse_url "https://www.github.com/nvim-telescope/telescope.nvim", "telescope.nvim") end ) it( "word-word.nvim", function() assert.equals( parse_url "https://github.com/MeanderingProgrammer/render-markdown.nvim", "render-markdown.nvim" ) end ) end) ================================================ FILE: vim.toml ================================================ [selene] base = "lua51" name = "vim" [vim] any = true [jit] any = true [assert] any = true [describe] any = true [it] any = true [before_each.args] any = true