feat(readme): Refactor compile section

dev
nullchilly 2 years ago
commit 9ca4439110

@ -337,6 +337,7 @@ It's recommended to add `:CatppuccinCompile` to post-install/update hooks. For e
Packer.nvim Packer.nvim
```lua ```lua
-- It's recommended to add `:CatppuccinCompile` to post-install/update hooks
use { use {
"catppuccin/nvim", "catppuccin/nvim",
as = "catppuccin", as = "catppuccin",
@ -355,7 +356,7 @@ Plug 'catppuccin/nvim', {'as': 'catppuccin', 'do': 'CatppuccinCompile'}
Packer.nvim Packer.nvim
```lua ```lua
-- Create an autocmd `User PackerCompileDone` to update it every time packer is compiled: -- Create an autocmd `User PackerCompileDone` to update it every time packer is compiled
vim.api.nvim_create_autocmd("User", { vim.api.nvim_create_autocmd("User", {
pattern = "PackerCompileDone", pattern = "PackerCompileDone",
callback = function() callback = function()

@ -0,0 +1,505 @@
<h3 align="center">
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/logos/exports/1544x1544_circle.png" width="100" alt="Logo"/><br/>
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/misc/transparent.png" height="30" width="0px"/>
Catppuccin for <a href="https://github.com/neovim/neovim">NeoVim</a>
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/misc/transparent.png" height="30" width="0px"/>
</h3>
<p align="center">
<a href="https://github.com/catppuccin/nvim/stargazers"><img src="https://img.shields.io/github/stars/catppuccin/nvim?colorA=363a4f&colorB=b7bdf8&style=for-the-badge"></a>
<a href="https://github.com/catppuccin/nvim/issues"><img src="https://img.shields.io/github/issues/catppuccin/nvim?colorA=363a4f&colorB=f5a97f&style=for-the-badge"></a>
<a href="https://github.com/catppuccin/nvim/contributors"><img src="https://img.shields.io/github/contributors/catppuccin/nvim?colorA=363a4f&colorB=a6da95&style=for-the-badge"></a>
</p>
<p align="center">
<img src="assets/demo.png"/>
</p>
# About
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 [`old-catppuccino`](https://github.com/catppuccin/nvim/tree/old-catppuccino) branch.
# 🎁 Features
- Handy CLI.
- Extensible for many use cases.
- [Compile](https://github.com/catppuccin/nvim#Compile) user's configuration
- Integrations with a bunch of plugins:
- [Treesitter](https://github.com/tree-sitter/tree-sitter)
- [Native LSP](https://github.com/neovim/nvim-lspconfig)
- [Telescope](https://github.com/nvim-telescope/telescope.nvim)
- [Feline](https://github.com/feline-nvim/feline.nvim)
- [Lualine](https://github.com/hoob3rt/lualine.nvim)
- [Nvim-cmp](https://github.com/hrsh7th/nvim-cmp)
- [LSP Saga](https://github.com/tami5/lspsaga.nvim)
- [Git signs](https://github.com/lewis6991/gitsigns.nvim)
- [Indent Blankline](https://github.com/lukas-reineke/indent-blankline.nvim)
- [Trouble](https://github.com/folke/trouble.nvim)
- [WhichKey](https://github.com/folke/which-key.nvim)
- [BarBar](https://github.com/romgrk/barbar.nvim)
- [NvimTree](https://github.com/kyazdani42/nvim-tree.lua)
- [Neo-tree](https://github.com/nvim-neo-tree/neo-tree.nvim)
- [Git Gutter](https://github.com/airblade/vim-gitgutter)
- [Fern](https://github.com/lambdalisue/fern.vim)
- [Lightline](https://github.com/itchyny/lightline.vim)
- [Dashboard](https://github.com/glepnir/dashboard-nvim)
- [Markdown](https://www.markdownguide.org/)
- [Lightspeed](https://github.com/ggandor/lightspeed.nvim)
- [Nvim-ts-Rainbow](https://github.com/p00f/nvim-ts-rainbow)
- [Sneak](https://github.com/justinmk/vim-sneak)
- [Hop](https://github.com/phaazon/hop.nvim)
- [Neogit](https://github.com/TimUntersberger/neogit)
- [Telekasten](https://github.com/renerocksai/telekasten.nvim)
- [Notify](https://github.com/rcarriga/nvim-notify)
- [Symbols-Outline](https://github.com/simrat39/symbols-outline.nvim)
- [Mini.nvim](https://github.com/echasnovski/mini.nvim)
## Usage
You can use your favorite plugin manager for this. Here are some examples with the most popular ones:
#### Vim-plug
```lua
Plug 'catppuccin/nvim', {'as': 'catppuccin'}
```
#### Packer.nvim
```lua
use({
"catppuccin/nvim",
as = "catppuccin"
})
```
#### Vundle
```lua
Plugin 'catppuccin/nvim', {'name': 'catppuccin'}
```
### Setup
There are already some sane defaults that you may like, however you can change them to match your taste. These are the defaults:
```lua
dim_inactive = {
enabled = false
shade = "dark",
percentage = 0.15,
},
transparent_background = false,
term_colors = false,
compile = {
enabled = false,
path = vim.fn.stdpath "cache" .. "/catppuccin",
suffix = "_compiled"
},
styles = {
comments = { "italic" },
conditionals = { "italic" },
loops = {},
functions = {},
keywords = {},
strings = {},
variables = {},
numbers = {},
booleans = {},
properties = {},
types = {},
operators = {},
},
integrations = {
treesitter = true,
native_lsp = {
enabled = true,
virtual_text = {
errors = { "italic" },
hints = { "italic" },
warnings = { "italic" },
information = { "italic" },
},
underlines = {
errors = { "underline" },
hints = { "underline" },
warnings = { "underline" },
information = { "underline" },
},
},
coc_nvim = false,
lsp_trouble = false,
cmp = true,
lsp_saga = false,
gitgutter = false,
gitsigns = true,
telescope = true,
nvimtree = {
enabled = true,
show_root = true,
transparent_panel = false,
},
neotree = {
enabled = false,
show_root = true,
transparent_panel = false,
},
which_key = false,
indent_blankline = {
enabled = true,
colored_indent_levels = false,
},
dashboard = true,
neogit = false,
vim_sneak = false,
fern = false,
barbar = false,
bufferline = true,
markdown = true,
lightspeed = false,
ts_rainbow = false,
hop = false,
notify = true,
telekasten = true,
symbols_outline = true,
mini = false,
}
```
The way you setup the settings on your configuration varies based on whether you are using vimL for this or Lua.
<details>
<summary>For init.lua</summary>
<p>
```lua
local catppuccin = require("catppuccin")
-- configure it
catppuccin.setup(<settings>)
```
<br />
</details>
<details>
<summary>For init.vim</summary>
<p>
```lua
lua << EOF
local catppuccin = require("catppuccin")
-- configure it
catppuccin.setup(<settings>)
EOF
```
<br />
</details>
After setting things up, you can load catppuccin like so:
```vim
" Vim Script
let g:catppuccin_flavour = "frappe" " latte, frappe, macchiato, mocha
colorscheme catppuccin
```
```lua
-- Lua
vim.g.catppuccin_flavour = "frappe" -- latte, frappe, macchiato, mocha
vim.cmd[[colorscheme catppuccin]]
```
Remember that if you want to switch your Catppuccin flavour "on the fly" you may use the `:Catppuccin <flavour>` command.
> Note: the command has autocompletion enabled, so you can just press tab to cycle through the flavours
### Configuration
Although settings already have self-explanatory names, here is where you can find info about each one of them and their classifications!
#### General
This settings are unrelated to any group and are independent.
- `transparent_background`: (Boolean) if true, disables setting the background color.
- `term_colors`: (Boolean) if true, sets terminal colors (e.g. `g:terminal_color_0`).
#### Dim inactive
This setting manages the ability to dim the inactive splits/windows/buffers displayed.
- `enabled`: (Boolean) if true, dims the background color of inactive window or buffer or split.
- `shade`: (string) sets the shade to apply to the inactive split or window or buffer.
- `percentage`: (number 0 < x < 1) percentage of the shade to apply to the inactive window, split or buffer.
#### Styles
Handles the style of general hi groups (see `:h highlight-args`):
- `comments`: (String) changed the style of the comments.
- `functions`: (String) changed the style of the functions.
- `keywords`: (String) changed the style of the keywords.
- `strings`: (String) changed the style of the strings.
- `variables`: (String) changed the style of the variables.
#### Integrations
These integrations allow catppuccin to set the theme of various plugins/stuff. To enable an integration you just need to set it to `true`, however, there are some special integrations...
If you'd like to know which highlight groups are being affected by catppuccin, checkout this directory: [`lua/catppuccin/core/integrations/`](https://github.com/catppuccin/nvim/tree/main/lua/catppuccin/core/integrations).
##### Special Integrations
- **Feline.nvim**: First make sure that the [kyazdani42/nvim-web-devicons](https://github.com/kyazdani42/nvim-web-devicons/) plugin is installed. Then update your Feline config to use the Catppuccin components:
```lua
require("feline").setup({
components = require('catppuccin.core.integrations.feline'),
})
```
- **Indent-blankline.nvim**: setting `enabled` to `true` enables this integration. `colored_indent_levels` enables char highlights per indent level. Follow the instructions [here](https://github.com/lukas-reineke/indent-blankline.nvim#with-custom-gindent_blankline_char_highlight_list) to set the latter up.
- **Lightline:** use this to set it up (Note: `catppuccin` is the only valid colorscheme name. It will pick the one set in your config):
```lua
let g:lightline = {'colorscheme': 'catppuccin'}
```
- **Lualine:** use this to set it up (Note: `catppuccin` is the only valid theme name. It will pick the one set in your config):
```lua
require('lualine').setup {
options = {
theme = "catppuccin"
-- ... the rest of your lualine config
}
}
```
- **Native Nvim LSP:** setting `enabled` to `true` enables this integration. In the inners tables you can set the style for the diagnostics, both `virtual_text` (what you see on the side) and `underlines` (what points directly at the thing (e.g. an error)).
- **NvimTree:** setting `enabled` to `true` enables this integration:
```lua
integration = {
nvimtree = {
enabled = true,
show_root = true, -- makes the root folder not transparent
transparent_panel = false, -- make the panel transparent
}
}
```
- **Neo-tree:** setting `enabled` to `true` enables this integration:
```lua
integration = {
neotree = {
enabled = true,
show_root = true, -- makes the root folder not transparent
transparent_panel = false, -- make the panel transparent
}
}
```
### 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 precached values to set it's highlights.
#### Enable
Setting `enabled` to `true` enables this feature:
```lua
compile = {
enabled = true,
path = vim.fn.stdpath "cache" .. "/catppuccin",
suffix = "_compiled"
},
```
By default catppuccin writes the compiled results into the system's cache directory.
#### Catppuccin provides these commands to work with the catppuccin compiler.
```bash
:CatppuccinCompile # Create/update the compile file
:CatppuccinClean # Delete compiled file
```
<<<<<<< HEAD
#### Post-install/update hooks
It's recommended to add `:CatppuccinCompile` to post-install/update hooks. For example:
Packer.nvim
=======
- To auto-compile everytime you update your config:
**Packer.nvim**
>>>>>>> origin/dev
```lua
-- It's recommended to add `:CatppuccinCompile` to post-install/update hooks
use {
"catppuccin/nvim",
as = "catppuccin",
run = "CatppuccinCompile",
}
<<<<<<< HEAD
Vim-plug
```lua
Plug 'catppuccin/nvim', {'as': 'catppuccin', 'do': 'CatppuccinCompile'}
```
#### Auto compile
Packer.nvim
```lua
=======
>>>>>>> origin/dev
-- Create an autocmd `User PackerCompileDone` to update it every time packer is compiled:
vim.api.nvim_create_autocmd("User", {
pattern = "PackerCompileDone",
callback = function()
vim.cmd "CatppuccinCompile"
end,
})
```
<<<<<<< HEAD
Vim-plug
```bash
# Auto compile on save if catppuccin config is in `init.vim`
=======
**Vim-plug**
```bash
# It's recommended to add `:CatppuccinCompile` to post-install/update hooks
Plug 'catppuccin/nvim', {'as': 'catppuccin', 'do': 'CatppuccinCompile'}
# Auto compile on save if catppuccin config is in init.vim
>>>>>>> origin/dev
autocmd BufWritePost init.vim :CatppuccinCompile
```
Acknowledge: [nightfox.nvim#compile](https://github.com/EdenEast/nightfox.nvim#compile)
### Extra
##### Modules
- `colors`
```lua
require("catppuccin.palettes").get_palette()
```
> Returns a table where the key is the name of the color and the value is its hex value.
#### Overwriting highlight groups
Highlight groups can be overwritten in the setting like so:
```lua
custom_highlights = {
<hi_group> = { <fields> }
}
```
Here is an example:
```lua
local colors = require("catppuccin.palettes").get_palette() -- fetch colors from palette
custom_highlights = {
Comment = { fg = colors.flamingo }
TSConstBuiltin = { fg = colors.peach, style = {} },
TSConstant = { fg = colors.sky },
TSComment = { fg = colors.surface2, style = { "italic" } }
}
```
#### Overwriting colors
Colors can be overwritten using `color_overrides` in the setting:
```lua
color_overrides = {
frappe = {
text = "#ffffff"
base = "#ff0000",
mantle = "#242424",
crust = "#474747",
}
},
```
#### Hooks
Use them to execute code at certain events. These are the ones available:
| Function | Description |
| ------------------ | ---------------------------- |
| `before_loading()` | Before loading a colorscheme |
| `after_loading()` | After loading a colorscheme |
They can be used like so:
```lua
local catppuccin = require("catppuccin")
catppuccin.before_loading = function ()
print("I ran before loading Catppuccin!")
end
```
#### Autocmd
Instead of `after_loading` hook, you can use autocmd event like this:
```lua
vim.api.nvim_create_autocmd("User", {
pattern = "CatppuccinLoaded",
callback = function()
local colors = require("catppuccin.api.colors").get_colors()
-- do something with colors
end
})
```
## FAQ
#### [Abnormal colors](https://github.com/catppuccin/nvim/issues/182)?
You need to enable [truecolor](https://wiki.archlinux.org/title/Color_output_in_console#True_color_support)
#### Toggle light/dark theme based on background value?
The following autocmd will change the flavour to latte when you `:set background=light` and to mocha after `:set background=dark`
```lua
vim.api.nvim_create_autocmd("OptionSet", {
pattern = "background",
callback = function()
vim.cmd("Catppuccin " .. (vim.v.option_new == "light" and "latte" or "mocha"))
end,
})
```
For people who are hybrid between light and dark mode!
## 💝 Thanks to
- [Pocco81](https://github.com/Pocco81)
&nbsp;
<p align="center"><img src="https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/footers/gray0_ctp_on_line.svg?sanitize=true" /></p>
<p align="center">Copyright &copy; 2021-present <a href="https://github.com/catppuccin" target="_blank">Catppuccin Org</a>
<p align="center"><a href="https://github.com/catppuccin/catppuccin/blob/main/LICENSE"><img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=MIT&logoColor=d9e0ee&colorA=363a4f&colorB=b7bdf8"/></a></p>

@ -20,14 +20,6 @@ end, {
end, end,
}) })
command("CatppuccinCompile", function()
require("catppuccin.lib.compiler").compile()
end, {})
command("CatppuccinClean", function()
require("catppuccin.lib.compiler").clean()
end, {})
function M.load() function M.load()
local catppuccin = require("catppuccin") local catppuccin = require("catppuccin")
@ -40,7 +32,7 @@ function M.load()
if config.compile.enabled == true then if config.compile.enabled == true then
local compiled_path = config.compile.path local compiled_path = config.compile.path
.. (vim.loop.os_uname().sysname == "Windows" and "\\" or "/") .. (vim.startswith(vim.loop.os_uname().sysname, "Windows") and "\\" or "/")
.. vim.g.catppuccin_flavour .. vim.g.catppuccin_flavour
.. config.compile.suffix .. config.compile.suffix
.. ".lua" .. ".lua"
@ -65,6 +57,17 @@ end
function M.setup(custom_opts) function M.setup(custom_opts)
require("catppuccin.config").set_options(custom_opts) require("catppuccin.config").set_options(custom_opts)
-- Only set compile commands when enabled = true
if custom_opts.compile.enabled == true then
command("CatppuccinCompile", function()
require("catppuccin.lib.compiler").compile()
end, {})
command("CatppuccinClean", function()
require("catppuccin.lib.compiler").clean()
end, {})
end
end end
return M return M

@ -2,6 +2,8 @@ local M = {}
-- Credit: https://github.com/EdenEast/nightfox.nvim -- Credit: https://github.com/EdenEast/nightfox.nvim
local fmt = string.format local fmt = string.format
local is_windows = vim.startswith(vim.loop.os_uname().sysname, "Windows")
local function inspect(t) local function inspect(t)
local list = {} local list = {}
for k, v in pairs(t) do for k, v in pairs(t) do
@ -18,7 +20,7 @@ function M.compile()
local lines = { local lines = {
[[ [[
-- This file is autogenerated by CATPPUCCIN. -- This file is autogenerated by CATPPUCCIN.
-- Do not make changes directly to this file. -- DO NOT make changes directly to this file.
vim.cmd("hi clear") vim.cmd("hi clear")
if vim.fn.exists("syntax_on") then if vim.fn.exists("syntax_on") then
@ -27,6 +29,10 @@ end
vim.g.colors_name = "catppuccin"]], vim.g.colors_name = "catppuccin"]],
} }
local config = require("catppuccin.config").options local config = require("catppuccin.config").options
if is_windows then
config.compile.path = config.compile.path:gsub("/", "\\")
end
for property, value in pairs(theme.properties) do for property, value in pairs(theme.properties) do
if type(value) == "string" then if type(value) == "string" then
table.insert(lines, fmt('vim.o.%s = "%s"', property, value)) table.insert(lines, fmt('vim.o.%s = "%s"', property, value))
@ -67,12 +73,10 @@ vim.g.colors_name = "catppuccin"]],
table.insert(lines, fmt('vim.g.%s = "%s"', k, v)) table.insert(lines, fmt('vim.g.%s = "%s"', k, v))
end end
end end
os.execute( os.execute(string.format("mkdir %s %s", is_windows and "" or "-p", config.compile.path))
string.format("mkdir %s %s", vim.loop.os_uname().sysname == "Windows" and "" or "-p", config.compile.path)
)
local file = io.open( local file = io.open(
config.compile.path config.compile.path
.. (vim.loop.os_uname().sysname == "Windows" and "\\" or "/") .. (is_windows and "\\" or "/")
.. vim.g.catppuccin_flavour .. vim.g.catppuccin_flavour
.. config.compile.suffix .. config.compile.suffix
.. ".lua", .. ".lua",
@ -85,7 +89,7 @@ end
function M.clean() function M.clean()
local config = require("catppuccin.config").options local config = require("catppuccin.config").options
local compiled_path = config.compile.path local compiled_path = config.compile.path
.. (vim.loop.os_uname().sysname == "Windows" and "\\" or "/") .. (is_windows and "\\" or "/")
.. vim.g.catppuccin_flavour .. vim.g.catppuccin_flavour
.. config.compile.suffix .. config.compile.suffix
.. ".lua" .. ".lua"

Loading…
Cancel
Save