{ lib, helpers, config, pkgs, ... }: with lib; helpers.neovim-plugin.mkNeovimPlugin config { name = "palette"; isColorscheme = true; originalName = "palette.nvim"; defaultPackage = pkgs.vimPlugins.palette-nvim; maintainers = [ maintainers.GaetanLepage ]; extraPlugins = [ # Annoyingly, lspconfig is required, otherwise this line is breaking: # https://github.com/roobert/palette.nvim/blob/a808c190a4f74f73782302152ebf323660d8db5f/lua/palette/init.lua#L45 # An issue has been opened upstream to warn the maintainer: https://github.com/roobert/palette.nvim/issues/2 pkgs.vimPlugins.nvim-lspconfig ]; # TODO introduced 2024-04-07: remove 2024-06-07 deprecateExtraOptions = true; optionsRenamedToSettings = [ "palettes" "customPalettes" "italics" "transparentBackground" "caching" "cacheDir" ]; settingsOptions = { palettes = { main = helpers.defaultNullOpts.mkStr "dark" '' Palette for the main colors. ''; accent = helpers.defaultNullOpts.mkStr "pastel" '' Palette for the accent colors. ''; state = helpers.defaultNullOpts.mkStr "pastel" '' Palette for the state colors. ''; }; customPalettes = mapAttrs ( name: colorNames: helpers.defaultNullOpts.mkAttrsOf (types.submodule { options = genAttrs colorNames ( colorName: mkOption { type = types.str; description = "Definition of color '${colorName}'"; } ); }) "{}" '' Custom palettes for ${name} colors. '' ) { main = [ "color0" "color1" "color2" "color3" "color4" "color5" "color6" "color7" "color8" ]; accent = [ "accent0" "accent1" "accent2" "accent3" "accent4" "accent5" "accent6" ]; state = [ "error" "warning" "hint" "ok" "info" ]; }; italics = helpers.defaultNullOpts.mkBool true '' Whether to use italics. ''; transparent_background = helpers.defaultNullOpts.mkBool false '' Whether to use transparent background. ''; caching = helpers.defaultNullOpts.mkBool true '' Whether to enable caching. ''; cache_dir = helpers.defaultNullOpts.mkStr ''{__raw = "vim.fn.stdpath('cache') .. '/palette'";}'' "Cache directory."; }; settingsExample = { }; extraConfig = cfg: { assertions = mapAttrsToList ( name: defaultPaletteNames: let customPalettesNames = attrNames cfg.settings.custom_palettes.${name}; allowedPaletteNames = customPalettesNames ++ defaultPaletteNames; palette = cfg.settings.palettes.${name}; in { assertion = isString palette -> elem palette allowedPaletteNames; message = '' Nixvim (colorschemes.palette): `settings.palettes.${name}` (${palette}") is not part of the allowed ${name} palette names (${concatStringsSep " " allowedPaletteNames}). ''; } ) { main = [ "dark" "light" ]; accent = [ "pastel" "dark" "bright" ]; state = [ "pastel" "dark" "bright" ]; }; }; }