mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-20 16:15:43 +02:00
115 lines
4.4 KiB
Nix
115 lines
4.4 KiB
Nix
{
|
|
lib,
|
|
...
|
|
}:
|
|
lib.nixvim.plugins.mkNeovimPlugin {
|
|
name = "mini";
|
|
packPathName = "mini.nvim";
|
|
# Just want it before most other plugins for the icons provider.
|
|
configLocation = lib.mkOrder 800 "extraConfigLua";
|
|
|
|
maintainers = [ lib.maintainers.khaneliman ];
|
|
|
|
package = "mini-nvim";
|
|
|
|
extraOptions = {
|
|
mockDevIcons = lib.mkEnableOption "mockDevIcons" // {
|
|
defaultText = lib.literalMD "`false` **NOTE**: This option is experimental and the default value may change without notice.";
|
|
description = ''
|
|
Whether to tell `mini.icons` to emulate `nvim-web-devicons` for plugins that don't natively support it.
|
|
|
|
When enabled, you don't need to set `plugins.web-devicons.enable`. This will replace the need for it.
|
|
'';
|
|
};
|
|
modules = lib.mkOption {
|
|
type = with lib.types; attrsOf (attrsOf anything);
|
|
default = { };
|
|
description = ''
|
|
Enable and configure the mini modules.
|
|
|
|
The attr name represent mini's module names, without the `"mini."` prefix.
|
|
The attr value is an attrset of options provided to the module's `setup` function.
|
|
|
|
See the [plugin documentation] for available modules to configure:
|
|
|
|
[plugin documentation]: https://github.com/echasnovski/mini.nvim?tab=readme-ov-file#modules
|
|
'';
|
|
example = {
|
|
ai = {
|
|
n_lines = 50;
|
|
search_method = "cover_or_next";
|
|
};
|
|
diff = {
|
|
view = {
|
|
style = "sign";
|
|
};
|
|
};
|
|
comment = {
|
|
mappings = {
|
|
comment = "<leader>/";
|
|
comment_line = "<leader>/";
|
|
comment_visual = "<leader>/";
|
|
textobject = "<leader>/";
|
|
};
|
|
};
|
|
surround = {
|
|
mappings = {
|
|
add = "gsa";
|
|
delete = "gsd";
|
|
find = "gsf";
|
|
find_left = "gsF";
|
|
highlight = "gsh";
|
|
replace = "gsr";
|
|
update_n_lines = "gsn";
|
|
};
|
|
};
|
|
starter = {
|
|
header = ''
|
|
███╗ ██╗██╗██╗ ██╗██╗ ██╗██╗███╗ ███╗
|
|
████╗ ██║██║╚██╗██╔╝██║ ██║██║████╗ ████║
|
|
██╔██╗ ██║██║ ╚███╔╝ ██║ ██║██║██╔████╔██║
|
|
██║╚██╗██║██║ ██╔██╗ ╚██╗ ██╔╝██║██║╚██╔╝██║
|
|
██║ ╚████║██║██╔╝ ██╗ ╚████╔╝ ██║██║ ╚═╝ ██║
|
|
'';
|
|
evaluate_single = true;
|
|
items = {
|
|
"__unkeyed-1.buildtin_actions".__raw = "require('mini.starter').sections.builtin_actions()";
|
|
"__unkeyed-2.recent_files_current_directory".__raw =
|
|
"require('mini.starter').sections.recent_files(10, false)";
|
|
"__unkeyed-3.recent_files".__raw = "require('mini.starter').sections.recent_files(10, true)";
|
|
"__unkeyed-4.sessions".__raw = "require('mini.starter').sections.sessions(5, true)";
|
|
};
|
|
content_hooks = {
|
|
"__unkeyed-1.adding_bullet".__raw = "require('mini.starter').gen_hook.adding_bullet()";
|
|
"__unkeyed-2.indexing".__raw =
|
|
"require('mini.starter').gen_hook.indexing('all', { 'Builtin actions' })";
|
|
"__unkeyed-3.padding".__raw = "require('mini.starter').gen_hook.aligning('center', 'center')";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
# NOTE: We handle each module explicitly and not a parent settings table
|
|
callSetup = false;
|
|
hasSettings = false;
|
|
extraConfig = cfg: {
|
|
assertions = lib.nixvim.mkAssertions "plugins.mini" {
|
|
assertion = cfg.mockDevIcons -> cfg.modules ? icons;
|
|
message = ''
|
|
You have enabled `plugins.mini.mockDevIcons` but have not defined `plugins.mini.modules.icons`.
|
|
This setting will have no effect without it.
|
|
'';
|
|
};
|
|
|
|
plugins.mini.luaConfig.content =
|
|
lib.foldlAttrs (lines: name: config: ''
|
|
${lines}
|
|
require(${lib.nixvim.toLuaObject "mini.${name}"}).setup(${lib.nixvim.toLuaObject config})
|
|
'') "" cfg.modules
|
|
# `MiniIcons` is only in scope if we've called `require('mini.icons')` above
|
|
+ lib.optionalString ((cfg.modules ? icons) && cfg.mockDevIcons) ''
|
|
MiniIcons.mock_nvim_web_devicons()
|
|
'';
|
|
};
|
|
}
|