nix-community.nixvim/plugins/colorschemes/catppuccin.nix

259 lines
7.1 KiB
Nix
Raw Normal View History

{
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;
};
}