plugins/nvim-autopairs: switch to mkNeovimPlugin

This commit is contained in:
Gaetan Lepage 2024-03-27 15:46:56 +01:00 committed by Gaétan Lepage
parent ffa3020522
commit 38a4fc7709
2 changed files with 229 additions and 103 deletions

View file

@ -5,104 +5,208 @@
pkgs, pkgs,
... ...
}: }:
with lib; let with lib;
cfg = config.plugins.nvim-autopairs; helpers.neovim-plugin.mkNeovimPlugin config {
in { name = "nvim-autopairs";
options.plugins.nvim-autopairs = defaultPackage = pkgs.vimPlugins.nvim-autopairs;
helpers.neovim-plugin.extraOptionsOptions
// {
enable = mkEnableOption "nvim-autopairs";
package = helpers.mkPackageOption "nvim-autopairs" pkgs.vimPlugins.nvim-autopairs; maintainers = [maintainers.GaetanLepage];
pairs = helpers.mkNullOrOption (types.attrsOf types.str) "Characters to pair up"; # TODO: introduced 2024-03-27, remove on 2024-05-27
deprecateExtraOptions = true;
optionsRenamedToSettings = [
"disableInMacro"
"disableInVisualblock"
"disableInReplaceMode"
"ignoredNextChar"
"enableMoveright"
"enableCheckBracketLine"
"enableBracketInQuote"
"enableAbbr"
"breakUndo"
"checkTs"
"tsConfig"
"mapCr"
"mapBs"
"mapCH"
"mapCW"
];
imports = let
basePluginPaths = ["plugins" "nvim-autopairs"];
settingsPath = basePluginPaths ++ ["settings"];
in [
(
mkRenamedOptionModule
(basePluginPaths ++ ["disabledFiletypes"])
(settingsPath ++ ["disable_filetype"])
)
(
mkRenamedOptionModule
(basePluginPaths ++ ["enableAfterQuote"])
(settingsPath ++ ["enable_afterquote"])
)
(
mkRemovedOptionModule
(basePluginPaths ++ ["pairs"])
''
This option was having no effect.
If you want to customize pairs, please use `extraConfigLua` to define them as described in the plugin documentation.
''
)
];
disabledFiletypes = settingsOptions = {
helpers.defaultNullOpts.mkNullable disable_filetype =
(types.listOf types.str) helpers.defaultNullOpts.mkListOf types.str
''[ "TelescopePrompt" "spectre_panel" ]'' ''["TelescopePrompt" "spectre_panel"]''
"Disabled filetypes"; "Disabled filetypes.";
disableInMacro = helpers.defaultNullOpts.mkBool false '' disable_in_macro = helpers.defaultNullOpts.mkBool false ''
Disable when recording or executing a macro. Disable when recording or executing a macro.
''; '';
disableInVisualblock = helpers.defaultNullOpts.mkBool false '' disable_in_visualblock = helpers.defaultNullOpts.mkBool false ''
Disable when insert after visual block mode. Disable when insert after visual block mode.
''; '';
disableInReplaceMode = helpers.defaultNullOpts.mkBool true "Disable in replace mode."; disable_in_replace_mode = helpers.defaultNullOpts.mkBool true ''
Disable in replace mode.
'';
ignoredNextChar = helpers.defaultNullOpts.mkLua "[=[[%w%%%'%[%\"%.%`%$]]=]" '' ignored_next_char = helpers.defaultNullOpts.mkLua "[=[[%w%%%'%[%\"%.%`%$]]=]" ''
Regexp to ignore if it matches the next character. Regexp to ignore if it matches the next character.
''; '';
enableMoveright = helpers.defaultNullOpts.mkBool true "Enable moveright."; enable_moveright = helpers.defaultNullOpts.mkBool true ''
Enable moveright.
enableAfterQuote = helpers.defaultNullOpts.mkBool true "Add bracket pairs after quote.";
enableCheckBracketLine = helpers.defaultNullOpts.mkBool true "Check bracket in same line.";
enableBracketInQuote = helpers.defaultNullOpts.mkBool true "Enable bracket in quote.";
enableAbbr = helpers.defaultNullOpts.mkBool false "Trigger abbreviation.";
breakUndo = helpers.defaultNullOpts.mkBool true "Switch for basic rule break undo sequence.";
checkTs = helpers.defaultNullOpts.mkBool false "Use treesitter to check for a pair.";
tsConfig = helpers.mkNullOrOption (types.nullOr types.attrs) ''
Configuration for TreeSitter.
Default:
```
{
lua = [ "string" "source" ];
javascript = [ "string" "template_string" ];
};
```
''; '';
mapCr = helpers.defaultNullOpts.mkBool true "Map the <CR> key to confirm the completion."; enable_afterquote = helpers.defaultNullOpts.mkBool true ''
Add bracket pairs after quote.
'';
mapBs = helpers.defaultNullOpts.mkBool true "Map the <BS> key to delete the pair."; enable_check_bracket_line = helpers.defaultNullOpts.mkBool true ''
Check bracket in same line.
'';
mapCH = helpers.defaultNullOpts.mkBool false "Map the <C-h> key to delete a pair."; enable_bracket_in_quote = helpers.defaultNullOpts.mkBool true ''
Enable bracket in quote.
'';
mapCW = helpers.defaultNullOpts.mkBool false "Map the <C-w> key to delete a pair if possible."; enable_abbr = helpers.defaultNullOpts.mkBool false ''
}; Trigger abbreviation.
'';
config = let break_undo = helpers.defaultNullOpts.mkBool true ''
options = Switch for basic rule break undo sequence.
'';
check_ts = helpers.defaultNullOpts.mkBool false ''
Use treesitter to check for a pair.
'';
ts_config =
helpers.defaultNullOpts.mkAttrsOf types.anything
''
{ {
pairs_map = cfg.pairs; lua = [
"string"
disable_filetype = cfg.disabledFiletypes; "source"
disable_in_macro = cfg.disableInMacro; "string_content"
disable_in_visualblock = cfg.disableInVisualblock; ];
disable_in_replace_mode = cfg.disableInReplaceMode; javascript = [
ignored_next_char = cfg.ignoredNextChar; "string"
enable_moveright = cfg.enableMoveright; "template_string"
enable_afterquote = cfg.enableAfterQuote; ];
enable_check_bracket_line = cfg.enableCheckBracketLine;
enable_bracket_in_quote = cfg.enableBracketInQuote;
enable_abbr = cfg.enableAbbr;
break_undo = cfg.breakUndo;
check_ts = cfg.checkTs;
map_cr = cfg.mapCr;
map_bs = cfg.mapBs;
map_c_h = cfg.mapCH;
map_c_w = cfg.mapCW;
} }
// cfg.extraOptions; ''
in "Configuration for TreeSitter.";
mkIf cfg.enable {
extraPlugins = [cfg.package];
plugins.treesitter.enable = mkIf (cfg.checkTs != null && cfg.checkTs) true; map_cr = helpers.defaultNullOpts.mkBool true ''
Map the `<CR>` key to confirm the completion.
'';
extraConfigLua = '' map_bs = helpers.defaultNullOpts.mkBool true ''
require('nvim-autopairs').setup(${helpers.toLuaObject options}) Map the `<BS>` key to delete the pair.
'';
map_c_h = helpers.defaultNullOpts.mkBool false ''
Map the `<C-h>` key to delete a pair.
'';
map_c_w = helpers.defaultNullOpts.mkBool false ''
Map the `<C-w>` key to delete a pair if possible.
'';
fast_wrap = {
map = helpers.defaultNullOpts.mkStr "<M-e>" ''
The key to trigger fast_wrap.
'';
chars = helpers.defaultNullOpts.mkListOf types.str ''["{" "[" "(" "\"" "'"]'' ''
Characters for which to enable fast wrap.
'';
pattern = helpers.defaultNullOpts.mkLua ''[=[[%'%"%>%]%)%}%,%`]]=]'' ''
The pattern to match against.
'';
end_key = helpers.defaultNullOpts.mkStr "$" ''
End key.
'';
before_key = helpers.defaultNullOpts.mkStr "h" ''
Before key.
'';
after_key = helpers.defaultNullOpts.mkStr "l" ''
After key.
'';
cursor_pos_before = helpers.defaultNullOpts.mkBool true ''
Whether the cursor should be placed before or after the substitution.
'';
keys =
helpers.defaultNullOpts.mkStr "qwertyuiopzxcvbnmasdfghjkl" ''
'';
highlight = helpers.defaultNullOpts.mkStr "Search" ''
Which highlight group to use for the match.
'';
highlight_grey = helpers.defaultNullOpts.mkStr "Comment" ''
Which highlight group to use for the grey part.
'';
manual_position = helpers.defaultNullOpts.mkBool true ''
Whether to enable manual position.
'';
use_virt_lines = helpers.defaultNullOpts.mkBool true ''
Whether to use `virt_lines`.
''; '';
}; };
} };
settingsExample = {
disable_filetype = ["TelescopePrompt"];
fast_wrap = {
map = "<M-e>";
end_key = "$";
};
};
extraConfig = cfg: {
warnings =
optional (
(isBool cfg.settings.check_ts)
&& cfg.settings.check_ts
&& !config.plugins.treesitter.enable
)
''
Nixvim (plugins.nvim-autopairs): You have set `settings.check_ts` to `true` but have not enabled the treesitter plugin.
We suggest you to set `plugins.treesitter.enable` to `true`.
'';
};
}

View file

@ -7,27 +7,49 @@
plugins.nvim-autopairs = { plugins.nvim-autopairs = {
enable = true; enable = true;
pairs = null; settings = {
disabledFiletypes = ["TelescopePrompt" "spectre_panel"]; disable_filetype = ["TelescopePrompt" "spectre_panel"];
disableInMacro = false; disable_in_macro = false;
disableInVisualblock = false; disable_in_visualblock = false;
disableInReplaceMode = true; disable_in_replace_mode = true;
ignoredNextChar = "[=[[%w%%%'%[%\"%.%`%$]]=]"; ignored_next_char = "[=[[%w%%%'%[%\"%.%`%$]]=]";
enableMoveright = true; enable_moveright = true;
enableAfterQuote = true; enable_afterquote = true;
enableCheckBracketLine = true; enable_check_bracket_line = true;
enableBracketInQuote = true; enable_bracket_in_quote = true;
enableAbbr = false; enable_abbr = false;
breakUndo = true; break_undo = true;
checkTs = false; check_ts = false;
tsConfig = { ts_config = {
lua = ["string" "source"]; lua = [
javascript = ["string" "template_string"]; "string"
"source"
"string_content"
];
javascript = [
"string"
"template_string"
];
};
map_cr = true;
map_bs = true;
map_c_h = false;
map_c_w = false;
fast_wrap = {
map = "<M-e>";
chars = ["{" "[" "(" "\"" "'"];
pattern = ''[=[[%'%"%>%]%)%}%,%`]]=]'';
end_key = "$";
before_key = "h";
after_key = "l";
cursor_pos_before = true;
keys = "qwertyuiopzxcvbnmasdfghjkl";
highlight = "Search";
highlight_grey = "Comment";
manual_position = true;
use_virt_lines = true;
};
}; };
mapCr = true;
mapBs = true;
mapCH = false;
mapCW = false;
}; };
}; };
} }