colorschemes/catpuccin: switch to mkNeovimPlugin

This commit is contained in:
Gaetan Lepage 2024-03-27 11:53:27 +01:00 committed by Gaétan Lepage
parent c068f78dcd
commit ad046c976d
2 changed files with 324 additions and 428 deletions

View file

@ -5,9 +5,55 @@
pkgs, pkgs,
... ...
}: }:
with lib; let with lib;
cfg = config.colorschemes.catppuccin; 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 = [ flavours = [
"latte" "latte"
"mocha" "mocha"
@ -15,125 +61,134 @@ with lib; let
"macchiato" "macchiato"
]; ];
in { in {
options = { compile_path =
colorschemes.catppuccin = { helpers.defaultNullOpts.mkStr
enable = mkEnableOption "catppuccin"; ''{__raw = "vim.fn.stdpath 'cache' .. '/catppuccin'";}''
"Set the compile cache directory.";
package = flavour = helpers.mkNullOrOption (types.enum (flavours ++ ["auto"])) ''
helpers.mkPackageOption "catppuccin" pkgs.vimPlugins.catppuccin-nvim; Theme flavour.
'';
flavour = helpers.defaultNullOpts.mkEnumFirstDefault flavours "Theme flavour";
background = let background = let
mkBackgroundStyle = name: mkBackgroundStyle = name:
helpers.defaultNullOpts.mkEnumFirstDefault flavours "Background for ${name}"; helpers.defaultNullOpts.mkEnumFirstDefault flavours ''
Background for `${name}` background.
'';
in { in {
light = mkBackgroundStyle "light"; light = mkBackgroundStyle "light";
dark = mkBackgroundStyle "dark"; dark = mkBackgroundStyle "dark";
}; };
terminalColors = transparent_background = helpers.defaultNullOpts.mkBool false ''
helpers.defaultNullOpts.mkBool false Enable Transparent background.
"Configure the colors used when opening a :terminal in Neovim"; '';
transparentBackground = show_end_of_buffer = helpers.defaultNullOpts.mkBool false ''
helpers.defaultNullOpts.mkBool false "Enable Transparent background"; Show the '~' characters after the end of buffers.
'';
showBufferEnd = term_colors = helpers.defaultNullOpts.mkBool false ''
helpers.defaultNullOpts.mkBool false Configure the colors used when opening a :terminal in Neovim.
"show the '~' characters after the end of buffers"; '';
dimInactive = { dim_inactive = {
enabled = enabled = helpers.defaultNullOpts.mkBool false ''
helpers.defaultNullOpts.mkBool false If true, dims the background color of inactive window or buffer or split.
"if true, dims the background color of inactive window or buffer or split"; '';
shade = shade = helpers.defaultNullOpts.mkStr "dark" ''
helpers.defaultNullOpts.mkStr "dark" Sets the shade to apply to the inactive split or window or buffer.
"sets the shade to apply to the inactive split or window or buffer"; '';
percentage = percentage = helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) "0.15" ''
helpers.defaultNullOpts.mkNullable (types.numbers.between 0.0 1.0) percentage of the shade to apply to the inactive window, split or buffer.
"0.15" '';
"percentage of the shade to apply to the inactive window, split or buffer";
}; };
disableItalic = helpers.defaultNullOpts.mkBool false "Force no italic"; no_italic = helpers.defaultNullOpts.mkBool false ''
Force no italic.
'';
disableBold = helpers.defaultNullOpts.mkBool false "Force no bold"; no_bold = helpers.defaultNullOpts.mkBool false ''
Force no bold.
'';
disableUnderline = helpers.defaultNullOpts.mkBool false "Force no underline"; no_underline = helpers.defaultNullOpts.mkBool false ''
Force no underline.
'';
styles = { styles = {
comments = comments = helpers.defaultNullOpts.mkListOf types.str ''["italic"]'' ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) Define comments highlight properties.
''[ "italic" ]'' "Define comments highlight properties"; '';
conditionals = conditionals = helpers.defaultNullOpts.mkListOf types.str ''["italic"]'' ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) Define conditionals highlight properties.
''[ 'italic" ]'' "Define conditionals highlight properties"; '';
loops = loops = helpers.defaultNullOpts.mkListOf types.str "[]" ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" Define loops highlight properties.
"Define loops highlight properties"; '';
functions = functions = helpers.defaultNullOpts.mkListOf types.str "[]" ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" Define functions highlight properties.
"Define functions highlight properties"; '';
keywords = keywords = helpers.defaultNullOpts.mkListOf types.str "[]" ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" Define keywords highlight properties.
"Define keywords highlight properties"; '';
strings = strings = helpers.defaultNullOpts.mkListOf types.str "[]" ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" Define strings highlight properties.
"Define strings highlight properties"; '';
variables = variables = helpers.defaultNullOpts.mkListOf types.str "[]" ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" Define variables highlight properties.
"Define variables highlight properties"; '';
numbers = numbers = helpers.defaultNullOpts.mkListOf types.str "[]" ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" Define numbers highlight properties.
"Define numbers highlight properties"; '';
booleans = booleans = helpers.defaultNullOpts.mkListOf types.str "[]" ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" Define booleans highlight properties.
"Define booleans highlight properties"; '';
properties = properties = helpers.defaultNullOpts.mkListOf types.str "[]" ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" Define properties highlight properties.
"Define properties highlight properties"; '';
types = types = helpers.defaultNullOpts.mkListOf types.str "[]" ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" Define types highlight properties.
"Define types highlight properties"; '';
operators = operators = helpers.defaultNullOpts.mkListOf types.str "[]" ''
helpers.defaultNullOpts.mkNullable (types.listOf types.str) "[]" Define operators highlight properties.
"Define operators highlight properties"; '';
}; };
colorOverrides = color_overrides =
genAttrs genAttrs
(flavours ++ ["all"]) (flavours ++ ["all"])
( (
flavour: flavour:
helpers.defaultNullOpts.mkNullable helpers.defaultNullOpts.mkAttrsOf types.str
(with types; attrsOf str)
"{}" "{}"
( (
if flavour == "all" if flavour == "all"
then "Override colors for all of the flavours." then "Override colors for all the flavours."
else "Override colors for the ${flavour} flavour." else "Override colors for the ${flavour} flavour."
) )
); );
customHighlights = custom_highlights = helpers.mkNullOrStrLuaFnOr (with types; attrsOf anything) ''
helpers.defaultNullOpts.mkNullable Override specific highlight groups to use other groups or a hex color.
(with types; either str (attrsOf attrs)) "" '' You can provide either a lua function or directly an attrs.
Override specific highlight groups to use other groups or a hex color
Example: Example:
```lua
function(colors) function(colors)
return { return {
Comment = { fg = colors.flamingo }, Comment = { fg = colors.flamingo },
@ -141,272 +196,63 @@ in {
["@comment"] = { fg = colors.surface2, style = { "italic" } }, ["@comment"] = { fg = colors.surface2, style = { "italic" } },
} }
end end
```
Default: `{}`
''; '';
integrations = { default_integrations = helpers.defaultNullOpts.mkBool true ''
aerial = helpers.defaultNullOpts.mkBool false ""; Some integrations are enabled by default, you can control this behaviour with this option.
'';
alpha = helpers.defaultNullOpts.mkBool true ""; integrations = helpers.mkNullOrOption (with types; attrsOf anything) ''
Catppuccin provides theme support for other plugins in the Neovim ecosystem and extended
Neovim functionality through _integrations_.
barbar = helpers.defaultNullOpts.mkBool config.plugins.barbar.enable ""; To enable/disable an integration you just need to set it to `true`/`false`.
barbecue = {
dim_dirname = helpers.defaultNullOpts.mkBool true "";
bold_basename = helpers.defaultNullOpts.mkBool true "";
dim_context = helpers.defaultNullOpts.mkBool false "";
alt_background = helpers.defaultNullOpts.mkBool false "";
};
beacon = helpers.defaultNullOpts.mkBool false "";
# TODO: bufferline needs to be loaded after setting up catppuccin or it will highlight incorrectly
# use "akinsho/bufferline.nvim" {
# after = "catppuccin",
# config = function()
# require("bufferline").setup {
# highlights = require("catppuccin.groups.integrations.bufferline").get()
# }
# end
# }
# bufferline = helpers.defaultNullOpts.mkBool false "";
cmp = helpers.defaultNullOpts.mkBool config.plugins.cmp.enable "";
coc_nvim = helpers.defaultNullOpts.mkBool false "";
dap = {
enabled = helpers.defaultNullOpts.mkBool false "";
enable_ui = helpers.defaultNullOpts.mkBool false "";
};
dashboard =
helpers.defaultNullOpts.mkBool config.plugins.dashboard.enable "";
dropbar = {
enabled = helpers.defaultNullOpts.mkBool false "";
color_mode = helpers.defaultNullOpts.mkBool false "";
};
# TODO: feline requires additional setup
# local ctp_feline = require("catppuccin.groups.integrations.feline")
# ctp_feline.setup()
# require("feline").setup({
# components = ctp_feline.get(),
# })
# feline = helpers.defaultNullOpts.mkBool false "";
fern = helpers.defaultNullOpts.mkBool false "";
fidget = helpers.defaultNullOpts.mkBool false "";
flash = helpers.defaultNullOpts.mkBool true "";
gitgutter =
helpers.defaultNullOpts.mkBool config.plugins.gitgutter.enable "";
gitsigns =
helpers.defaultNullOpts.mkBool config.plugins.gitsigns.enable "";
harpoon =
helpers.defaultNullOpts.mkBool config.plugins.harpoon.enable "";
headlines = helpers.defaultNullOpts.mkBool false "";
hop = helpers.defaultNullOpts.mkBool false "";
illuminate = {
enabled = helpers.defaultNullOpts.mkBool config.plugins.illuminate.enable "";
lsp = helpers.defaultNullOpts.mkBool false "";
};
indent_blankline = {
enabled = helpers.defaultNullOpts.mkBool config.plugins.indent-blankline.enable "";
scope_color = helpers.defaultNullOpts.mkStr "" "";
colored_indent_levels = helpers.defaultNullOpts.mkBool false "";
};
leap = helpers.defaultNullOpts.mkBool false "";
lightspeed = helpers.defaultNullOpts.mkBool false "";
# TODO: lspsaga.setup call for custom kinds and colors
# require("lspsaga").setup {
# ui = {
# kind = require("catppuccin.groups.integrations.lsp_saga").custom_kind(),
# },
# }
lsp_saga =
helpers.defaultNullOpts.mkBool config.plugins.lspsaga.enable "";
lsp_trouble =
helpers.defaultNullOpts.mkBool config.plugins.trouble.enable "";
markdown = helpers.defaultNullOpts.mkBool true "";
mason = helpers.defaultNullOpts.mkBool false "";
Example:
```nix
{
cmp = true;
gitsigns = true;
nvimtree = true;
treesitter = true;
notify = false;
mini = { mini = {
enabled = helpers.defaultNullOpts.mkBool false ""; enabled = true;
indentscope_color = "";
indentscope_color = helpers.defaultNullOpts.mkStr "" ""; };
}; }
```
native_lsp = {
enabled = helpers.defaultNullOpts.mkBool config.plugins.lsp.enable ""; Default: see plugin source.
'';
virtual_text = { };
errors =
helpers.defaultNullOpts.mkNullable (types.listOf types.str) settingsExample = {
''[ "italic" ]'' ""; flavour = "mocha";
disable_underline = true;
hints = term_colors = true;
helpers.defaultNullOpts.mkNullable (types.listOf types.str) color_overrides.mocha.base = "#1e1e2f";
''[ "italic" ]'' ""; styles = {
booleans = ["bold" "italic"];
warnings = conditionals = ["bold"];
helpers.defaultNullOpts.mkNullable (types.listOf types.str) };
''[ "italic" ]'' ""; integrations = {
cmp = true;
information = gitsigns = true;
helpers.defaultNullOpts.mkNullable (types.listOf types.str) nvimtree = true;
''[ "italic" ]'' ""; treesitter = true;
}; notify = false;
mini = {
underlines = { enabled = true;
errors = indentscope_color = "";
helpers.defaultNullOpts.mkNullable (types.listOf types.str) };
''[ "underline" ]'' ""; };
};
hints =
helpers.defaultNullOpts.mkNullable (types.listOf types.str) extraConfig = cfg: {
''[ "underline" ]'' ""; opts.termguicolors = mkDefault true;
warnings =
helpers.defaultNullOpts.mkNullable (types.listOf types.str)
''[ "underline" ]'' "";
information =
helpers.defaultNullOpts.mkNullable (types.listOf types.str)
''[ "underline" ]'' "";
};
inlay_hints = {
background = helpers.defaultNullOpts.mkBool true "";
};
};
# TODO: require("nvim-navic").setup { highlight = true }
# or via nixvim options?: plugins.navic.highlight = true
navic = {
enabled = helpers.defaultNullOpts.mkBool false "";
custom_bg = helpers.defaultNullOpts.mkStr "NONE" "";
};
neogit = helpers.defaultNullOpts.mkBool config.plugins.neogit.enable "";
neotest = helpers.defaultNullOpts.mkBool false "";
neotree =
helpers.defaultNullOpts.mkBool config.plugins.neo-tree.enable "";
noice = helpers.defaultNullOpts.mkBool config.plugins.noice.enable "";
NormalNvim = helpers.defaultNullOpts.mkBool false "";
notifier = helpers.defaultNullOpts.mkBool false "";
notify = helpers.defaultNullOpts.mkBool config.plugins.notify.enable "";
nvimtree =
helpers.defaultNullOpts.mkBool config.plugins.nvim-tree.enable "";
octo = helpers.defaultNullOpts.mkBool false "";
overseer = helpers.defaultNullOpts.mkBool false "";
pounce = helpers.defaultNullOpts.mkBool false "";
rainbow_delimiters = helpers.defaultNullOpts.mkBool true "";
sandwich = helpers.defaultNullOpts.mkBool false "";
semantic_tokens = helpers.defaultNullOpts.mkBool false "";
symbols_outline = helpers.defaultNullOpts.mkBool false "";
telekasten = helpers.defaultNullOpts.mkBool false "";
telescope = {
enabled = helpers.defaultNullOpts.mkBool config.plugins.telescope.enable "";
style = helpers.defaultNullOpts.mkStr "" "";
};
treesitter =
helpers.defaultNullOpts.mkBool config.plugins.treesitter.enable "";
treesitter_context =
helpers.defaultNullOpts.mkBool config.plugins.treesitter.enable "";
ts_rainbow =
helpers.defaultNullOpts.mkBool
true "";
ts_rainbow2 = helpers.defaultNullOpts.mkBool true "";
ufo = helpers.defaultNullOpts.mkBool true "";
vim_sneak = helpers.defaultNullOpts.mkBool false "";
vimwiki = helpers.defaultNullOpts.mkBool false "";
which_key =
helpers.defaultNullOpts.mkBool config.plugins.which-key.enable "";
window_picker = helpers.defaultNullOpts.mkBool false "";
};
};
};
config = mkIf cfg.enable {
colorscheme = "catppuccin";
extraPlugins = [cfg.package];
opts.termguicolors = true;
extraConfigLuaPre = let
setupOptions = with cfg; {
inherit (cfg) flavour background styles integrations;
transparent_background = transparentBackground;
show_end_of_buffer = showBufferEnd;
term_colors = terminalColors;
dim_inactive = dimInactive;
no_italic = disableItalic;
no_bold = disableBold;
no_underline = disableUnderline;
color_overrides = colorOverrides;
custom_highlights =
helpers.ifNonNull' cfg.customHighlights
(
if isString customHighlights
then helpers.mkRaw customHighlights
else
helpers.mkRaw ''
function(colors)
return
${helpers.toLuaObject customHighlights}
end
''
);
};
in ''
require("catppuccin").setup(${helpers.toLuaObject setupOptions})
'';
}; };
} }

View file

@ -6,19 +6,25 @@
defaults = { defaults = {
colorschemes.catppuccin = { colorschemes.catppuccin = {
enable = true; enable = true;
flavour = "mocha";
settings = {
compile_path.__raw = "vim.fn.stdpath 'cache' .. '/catppuccin'";
flavour = null;
background = { background = {
light = "latte"; light = "latte";
dark = "mocha"; dark = "mocha";
}; };
transparentBackground = false; transparent_background = false;
terminalColors = false; show_end_of_buffer = false;
showBufferEnd = false; term_colors = false;
dimInactive = { dim_inactive = {
enabled = true; enabled = false;
shade = "dark"; shade = "dark";
percentage = 0.15; percentage = 0.15;
}; };
no_italic = false;
no_bold = false;
no_underline = false;
styles = { styles = {
comments = ["italic"]; comments = ["italic"];
conditionals = ["italic"]; conditionals = ["italic"];
@ -33,18 +39,68 @@
types = []; types = [];
operators = []; operators = [];
}; };
colorOverrides = {}; color_overrides = {};
customHighlights = {}; custom_highlights = {};
default_integrations = true;
integrations = { integrations = {
alpha = true;
cmp = true; cmp = true;
dap = true;
dap_ui = true;
dashboard = true;
flash = true;
gitsigns = true; gitsigns = true;
markdown = true;
neogit = true;
neotree = true;
nvimtree = true; nvimtree = true;
telescope = { ufo = true;
enabled = true; rainbow_delimiters = true;
semantic_tokens.__raw = "not (vim.fn.has 'nvim' ~= 1)";
telescope.enabled = true;
treesitter.__raw = "not (vim.fn.has 'nvim' ~= 1)";
treesitter_context = true;
barbecue = {
dim_dirname = true;
bold_basename = true;
dim_context = false;
alt_background = false;
}; };
notify = false; illuminate = {
mini = { enabled = true;
lsp = false;
};
indent_blankline = {
enabled = true;
scope_color = "";
colored_indent_levels = false;
};
native_lsp = {
enabled = true;
virtual_text = {
errors = ["italic"];
hints = ["italic"];
warnings = ["italic"];
information = ["italic"];
};
underlines = {
errors = ["underline"];
hints = ["underline"];
warnings = ["underline"];
information = ["underline"];
};
inlay_hints = {
background = true;
};
};
navic = {
enabled = false; enabled = false;
custom_bg = "NONE";
};
dropbar = {
enabled = true;
color_mode = false;
};
}; };
}; };
}; };
@ -54,40 +110,22 @@
colorschemes.catppuccin = { colorschemes.catppuccin = {
enable = true; enable = true;
settings = {
flavour = "mocha"; flavour = "mocha";
terminalColors = true; disable_italic = true;
colorOverrides.mocha.base = "#1e1e2f"; disable_bold = true;
disable_underline = true;
disableItalic = true; term_colors = true;
disableBold = true; color_overrides = {
disableUnderline = true; all.text = "#ffffff";
latte = {
integrations = { base = "#ff0000";
barbar = true; mantle = "#242424";
fidget = true; crust = "#474747";
gitsigns = true;
illuminate = {
enabled = true;
}; };
indent_blankline = { frappe = {};
enabled = true; macchiato = {};
colored_indent_levels = true; mocha = {};
};
lsp_trouble = true;
mini = {
enabled = true;
};
native_lsp.enabled = true;
navic.enabled = true;
nvimtree = true;
overseer = true;
telescope = {
enabled = true;
style = "nvchad";
};
treesitter = true;
treesitter_context = true;
ts_rainbow2 = true;
}; };
styles = { styles = {
booleans = ["bold" "italic"]; booleans = ["bold" "italic"];
@ -98,6 +136,18 @@
operators = ["bold"]; operators = ["bold"];
properties = ["italic"]; properties = ["italic"];
}; };
integrations = {
cmp = true;
gitsigns = true;
nvimtree = true;
treesitter = true;
notify = false;
mini = {
enabled = true;
indentscope_color = "";
};
};
};
}; };
}; };
} }