nix-community.nixvim/plugins/colorschemes/catppuccin.nix
2024-05-05 22:00:40 +02:00

318 lines
7.4 KiB
Nix

{
lib,
helpers,
config,
pkgs,
...
}:
with lib;
helpers.neovim-plugin.mkNeovimPlugin config {
name = "catppuccin";
isColorscheme = true;
defaultPackage = pkgs.vimPlugins.catppuccin-nvim;
maintainers = [ maintainers.GaetanLepage ];
# TODO introduced 2024-03-27: remove 2024-05-27
optionsRenamedToSettings = [
"flavour"
[
"background"
"light"
]
[
"background"
"dark"
]
"transparentBackground"
[
"dimInactive"
"enabled"
]
[
"dimInactive"
"shade"
]
[
"dimInactive"
"percentage"
]
[
"styles"
"comments"
]
[
"styles"
"conditionals"
]
[
"styles"
"loops"
]
[
"styles"
"functions"
]
[
"styles"
"keywords"
]
[
"styles"
"strings"
]
[
"styles"
"variables"
]
[
"styles"
"numbers"
]
[
"styles"
"booleans"
]
[
"styles"
"properties"
]
[
"styles"
"types"
]
[
"styles"
"operators"
]
"colorOverrides"
"customHighlights"
"integrations"
];
imports =
mapAttrsToList
(
old: new:
mkRenamedOptionModule
[
"colorschemes"
"catppuccin"
old
]
[
"colorschemes"
"catppuccin"
"settings"
new
]
)
{
showBufferEnd = "show_end_of_buffer";
terminalColors = "term_colors";
disableItalic = "no_italic";
disableBold = "no_bold";
disableUnderline = "no_underline";
};
settingsOptions =
let
flavours = [
"latte"
"mocha"
"frappe"
"macchiato"
];
in
{
compile_path = helpers.defaultNullOpts.mkStr ''{__raw = "vim.fn.stdpath 'cache' .. '/catppuccin'";}'' "Set the compile cache directory.";
flavour = helpers.mkNullOrOption (types.enum (flavours ++ [ "auto" ])) ''
Theme flavour.
'';
background =
let
mkBackgroundStyle =
name:
helpers.defaultNullOpts.mkEnumFirstDefault flavours ''
Background for `${name}` background.
'';
in
{
light = mkBackgroundStyle "light";
dark = mkBackgroundStyle "dark";
};
transparent_background = helpers.defaultNullOpts.mkBool false ''
Enable Transparent background.
'';
show_end_of_buffer = helpers.defaultNullOpts.mkBool false ''
Show the '~' characters after the end of buffers.
'';
term_colors = helpers.defaultNullOpts.mkBool false ''
Configure the colors used when opening a :terminal in Neovim.
'';
dim_inactive = {
enabled = helpers.defaultNullOpts.mkBool false ''
If true, dims the background color of inactive window or buffer or split.
'';
shade = helpers.defaultNullOpts.mkStr "dark" ''
Sets the shade to apply to the inactive split or window or buffer.
'';
percentage = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.15" ''
percentage of the shade to apply to the inactive window, split or buffer.
'';
};
no_italic = helpers.defaultNullOpts.mkBool false ''
Force no italic.
'';
no_bold = helpers.defaultNullOpts.mkBool false ''
Force no bold.
'';
no_underline = helpers.defaultNullOpts.mkBool false ''
Force no underline.
'';
styles = {
comments = helpers.defaultNullOpts.mkListOf types.str ''["italic"]'' ''
Define comments highlight properties.
'';
conditionals = helpers.defaultNullOpts.mkListOf types.str ''["italic"]'' ''
Define conditionals highlight properties.
'';
loops = helpers.defaultNullOpts.mkListOf types.str "[]" ''
Define loops highlight properties.
'';
functions = helpers.defaultNullOpts.mkListOf types.str "[]" ''
Define functions highlight properties.
'';
keywords = helpers.defaultNullOpts.mkListOf types.str "[]" ''
Define keywords highlight properties.
'';
strings = helpers.defaultNullOpts.mkListOf types.str "[]" ''
Define strings highlight properties.
'';
variables = helpers.defaultNullOpts.mkListOf types.str "[]" ''
Define variables highlight properties.
'';
numbers = helpers.defaultNullOpts.mkListOf types.str "[]" ''
Define numbers highlight properties.
'';
booleans = helpers.defaultNullOpts.mkListOf types.str "[]" ''
Define booleans highlight properties.
'';
properties = helpers.defaultNullOpts.mkListOf types.str "[]" ''
Define properties highlight properties.
'';
types = helpers.defaultNullOpts.mkListOf types.str "[]" ''
Define types highlight properties.
'';
operators = helpers.defaultNullOpts.mkListOf types.str "[]" ''
Define operators highlight properties.
'';
};
color_overrides = genAttrs (flavours ++ [ "all" ]) (
flavour:
helpers.defaultNullOpts.mkAttrsOf types.str "{}" (
if flavour == "all" then
"Override colors for all the flavours."
else
"Override colors for the ${flavour} flavour."
)
);
custom_highlights = helpers.mkNullOrStrLuaFnOr (with types; attrsOf anything) ''
Override specific highlight groups to use other groups or a hex color.
You can provide either a lua function or directly an attrs.
Example:
```lua
function(colors)
return {
Comment = { fg = colors.flamingo },
["@constant.builtin"] = { fg = colors.peach, style = {} },
["@comment"] = { fg = colors.surface2, style = { "italic" } },
}
end
```
Default: `{}`
'';
default_integrations = helpers.defaultNullOpts.mkBool true ''
Some integrations are enabled by default, you can control this behaviour with this option.
'';
integrations = helpers.mkNullOrOption (with types; attrsOf anything) ''
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`.
Example:
```nix
{
cmp = true;
gitsigns = true;
nvimtree = true;
treesitter = true;
notify = false;
mini = {
enabled = true;
indentscope_color = "";
};
}
```
Default: see plugin source.
'';
};
settingsExample = {
flavour = "mocha";
disable_underline = true;
term_colors = true;
color_overrides.mocha.base = "#1e1e2f";
styles = {
booleans = [
"bold"
"italic"
];
conditionals = [ "bold" ];
};
integrations = {
cmp = true;
gitsigns = true;
nvimtree = true;
treesitter = true;
notify = false;
mini = {
enabled = true;
indentscope_color = "";
};
};
};
extraConfig = cfg: { opts.termguicolors = mkDefault true; };
}