diff --git a/plugins/colorschemes/modus.nix b/plugins/colorschemes/modus.nix new file mode 100644 index 00000000..8a413933 --- /dev/null +++ b/plugins/colorschemes/modus.nix @@ -0,0 +1,107 @@ +{ + lib, + helpers, + config, + pkgs, + ... +}: +helpers.neovim-plugin.mkNeovimPlugin config { + name = "modus"; + luaName = "modus-themes"; + originalName = "modus-themes.nvim"; + defaultPackage = pkgs.vimPlugins.modus-themes-nvim; + isColorscheme = true; + + maintainers = [ helpers.maintainers.nwjsmith ]; + + settingsOptions = { + style = + helpers.defaultNullOpts.mkEnumFirstDefault + [ + "modus_operandi" + "modus_vivendi" + ] + '' + The theme comes in a light `modus_operandi` style and a dark `modus_vivendi` style. + ''; + + variant = + helpers.defaultNullOpts.mkEnumFirstDefault + [ + "default" + "tinted" + "deuteranopia" + "tritanopia" + ] + '' + Styles come in four variants: + + - `default` is the plugin's main style designed to cover a broad range of needs. + - `tinted` tones down intensity and provides more color variety. + - `deuteranopia` is optimized for users with red-green color deficiency. + - `tritanopia` is optimized for users with blue-yellow color deficiency. + ''; + + transparent = helpers.defaultNullOpts.mkBool false '' + Disable setting the background color. + ''; + + dim_inactive = helpers.defaultNullOpts.mkBool false '' + Dims inactive windows. + ''; + + styles = { + comments = helpers.defaultNullOpts.mkHighlight "{italic = true;}" "" '' + Define comments highlight properties. + ''; + + keywords = helpers.defaultNullOpts.mkHighlight "{italic = true;}" "" '' + Define keywords highlight properties. + ''; + + functions = helpers.defaultNullOpts.mkHighlight "{}" "" '' + Define functions highlight properties. + ''; + + variables = helpers.defaultNullOpts.mkHighlight "{}" "" '' + Define variables highlight properties. + ''; + }; + + on_colors = helpers.defaultNullOpts.mkLuaFn "function(colors) end" '' + Override specific color groups to use other groups or a hex color. + Function will be called with a `ColorScheme` table. + + ``` + @param colors ColorScheme + ``` + ''; + + on_highlights = helpers.defaultNullOpts.mkLuaFn "function(highlights, colors) end" '' + Override specific highlights to use other groups or a hex color. + Function will be called with a `Highlights` and `ColorScheme` table. + + ``` + @param highlights Highlights + @param colors ColorScheme + ``` + ''; + }; + + settingsExample = { + style = "auto"; + variant = "default"; + transparent = false; + dim_inactive = false; + styles = { + comments.italic = true; + keywords.italic = true; + functions = { }; + variables = { }; + }; + on_colors = "function(colors) end"; + on_highlights = "function(highlights, colors) end"; + }; + + extraConfig = cfg: { opts.termguicolors = lib.mkDefault true; }; +} diff --git a/plugins/default.nix b/plugins/default.nix index 407f3e1b..9daf8a1e 100644 --- a/plugins/default.nix +++ b/plugins/default.nix @@ -13,6 +13,7 @@ ./colorschemes/gruvbox.nix ./colorschemes/kanagawa.nix ./colorschemes/melange.nix + ./colorschemes/modus.nix ./colorschemes/nightfox.nix ./colorschemes/nord.nix ./colorschemes/one.nix diff --git a/tests/test-sources/plugins/colorschemes/modus.nix b/tests/test-sources/plugins/colorschemes/modus.nix new file mode 100644 index 00000000..ab9f894b --- /dev/null +++ b/tests/test-sources/plugins/colorschemes/modus.nix @@ -0,0 +1,26 @@ +{ + empty = { + colorschemes.modus.enable = true; + }; + + defaults = { + colorschemes.modus = { + enable = true; + + settings = { + style = "modus_operandi"; + variant = "default"; + transparent = false; + dim_inactive = false; + styles = { + comments.italic = true; + keywords.italic = true; + functions = { }; + variables = { }; + }; + on_colors = "function(colors) end"; + on_highlights = "function(highlights, colors) end"; + }; + }; + }; +}