mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 00:25:42 +02:00
plugins/utils: move to by-name
This commit is contained in:
parent
faff32b9f1
commit
52f125679f
195 changed files with 2 additions and 102 deletions
249
plugins/by-name/multicursors/default.nix
Normal file
249
plugins/by-name/multicursors/default.nix
Normal file
|
@ -0,0 +1,249 @@
|
|||
{
|
||||
lib,
|
||||
helpers,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.plugins.multicursors;
|
||||
|
||||
keyOptionType =
|
||||
with types;
|
||||
attrsOf (submodule {
|
||||
options = {
|
||||
method = mkOption {
|
||||
type = either str (enum [ false ]);
|
||||
description = ''
|
||||
Assigning `"nil"` exits from multi cursor mode.
|
||||
Assigning `false` removes the binding
|
||||
'';
|
||||
example = ''
|
||||
function()
|
||||
require('multicursors.utils').call_on_selections(
|
||||
function(selection)
|
||||
vim.api.nvim_win_set_cursor(0, { selection.row + 1, selection.col + 1 })
|
||||
local line_count = selection.end_row - selection.row + 1
|
||||
vim.cmd('normal ' .. line_count .. 'gcc')
|
||||
end
|
||||
)
|
||||
end
|
||||
'';
|
||||
};
|
||||
|
||||
opts = mkOption {
|
||||
type = attrsOf str;
|
||||
default = { };
|
||||
description = "You can pass `:map-arguments` here.";
|
||||
example = {
|
||||
desc = "comment selections";
|
||||
};
|
||||
};
|
||||
};
|
||||
});
|
||||
in
|
||||
{
|
||||
options = {
|
||||
plugins.multicursors = helpers.neovim-plugin.extraOptionsOptions // {
|
||||
enable = mkEnableOption "multicursors.nvim";
|
||||
|
||||
package = lib.mkPackageOption pkgs "multicursors.nvim" {
|
||||
default = [
|
||||
"vimPlugins"
|
||||
"multicursors-nvim"
|
||||
];
|
||||
};
|
||||
|
||||
debugMode = helpers.defaultNullOpts.mkBool false "Enable debug mode.";
|
||||
|
||||
createCommands = helpers.defaultNullOpts.mkBool true "Create Multicursor user commands.";
|
||||
|
||||
updatetime = helpers.defaultNullOpts.mkUnsignedInt 50 ''
|
||||
Selections get updated if this many milliseconds nothing is typed in the insert mode see
|
||||
`:help updatetime`.
|
||||
'';
|
||||
|
||||
nowait = helpers.defaultNullOpts.mkBool true "see `:help :map-nowait`.";
|
||||
|
||||
normalKeys = helpers.mkNullOrOption keyOptionType ''
|
||||
Normal mode key mappings.
|
||||
|
||||
Default: see the [README.md](https://github.com/smoka7/multicursors.nvim)
|
||||
|
||||
Example:
|
||||
```nix
|
||||
{
|
||||
# to change default lhs of key mapping, change the key
|
||||
"," = {
|
||||
# assigning `null` to method exits from multi cursor mode
|
||||
# assigning `false` to method removes the binding
|
||||
method = "require 'multicursors.normal_mode'.clear_others";
|
||||
|
||||
# you can pass :map-arguments here
|
||||
opts = { desc = "Clear others"; };
|
||||
};
|
||||
"<C-/>" = {
|
||||
method = \'\'
|
||||
function()
|
||||
require('multicursors.utils').call_on_selections(
|
||||
function(selection)
|
||||
vim.api.nvim_win_set_cursor(0, { selection.row + 1, selection.col + 1 })
|
||||
local line_count = selection.end_row - selection.row + 1
|
||||
vim.cmd('normal ' .. line_count .. 'gcc')
|
||||
end
|
||||
)
|
||||
end
|
||||
\'\';
|
||||
opts = { desc = "comment selections"; };
|
||||
};
|
||||
}
|
||||
```
|
||||
'';
|
||||
|
||||
insertKeys = helpers.mkNullOrOption keyOptionType ''
|
||||
Insert mode key mappings.
|
||||
|
||||
Default: see the [README.md](https://github.com/smoka7/multicursors.nvim)
|
||||
'';
|
||||
|
||||
extendKeys = helpers.mkNullOrOption keyOptionType ''
|
||||
Insert mode key mappings.
|
||||
|
||||
Default: see the [README.md](https://github.com/smoka7/multicursors.nvim)
|
||||
'';
|
||||
|
||||
hintConfig = {
|
||||
type =
|
||||
helpers.mkNullOrOption
|
||||
(types.enum [
|
||||
"window"
|
||||
"cmdline"
|
||||
"statusline"
|
||||
])
|
||||
''
|
||||
- "window": show hint in a floating window;
|
||||
- "cmdline": show hint in a echo area;
|
||||
- "statusline": show auto-generated hint in the statusline.
|
||||
'';
|
||||
|
||||
position = helpers.defaultNullOpts.mkEnum [
|
||||
"top-left"
|
||||
"top"
|
||||
"top-right"
|
||||
"middle-left"
|
||||
"middle"
|
||||
"middle-right"
|
||||
"bottom-left"
|
||||
"bottom"
|
||||
"bottom-right"
|
||||
] "bottom" "Set the position of the hint.";
|
||||
|
||||
offset = helpers.mkNullOrOption types.int ''
|
||||
The offset from the nearest editor border.
|
||||
(valid when `type` if `"window"`).
|
||||
'';
|
||||
|
||||
border = helpers.defaultNullOpts.mkBorder "none" "the hint window" "";
|
||||
|
||||
showName = helpers.mkNullOrOption types.bool ''
|
||||
Show hydras name or `HYDRA:` label at the beginning of an auto-generated hint.
|
||||
'';
|
||||
|
||||
funcs = helpers.mkNullOrOption (with types; attrsOf str) ''
|
||||
Attrs where keys are function names and values are functions themselves.
|
||||
Each function should return string.
|
||||
This functions can be required from hint with `%{func_name}` syntaxis.
|
||||
'';
|
||||
};
|
||||
|
||||
generateHints =
|
||||
genAttrs
|
||||
[
|
||||
"normal"
|
||||
"insert"
|
||||
"extend"
|
||||
]
|
||||
(
|
||||
mode:
|
||||
helpers.defaultNullOpts.mkNullable (with types; either bool str) false ''
|
||||
Hints for ${mode} mode.
|
||||
|
||||
Accepted values:
|
||||
- `true`: generate hints
|
||||
- `false`: don't generate hints
|
||||
- str: provide your own hints
|
||||
''
|
||||
);
|
||||
};
|
||||
};
|
||||
|
||||
config =
|
||||
let
|
||||
setupOptions =
|
||||
with cfg;
|
||||
let
|
||||
mkMaps =
|
||||
value:
|
||||
helpers.ifNonNull' value (
|
||||
mapAttrs (
|
||||
key: mapping: with mapping; {
|
||||
method =
|
||||
# `false`
|
||||
if isBool method then method else helpers.mkRaw method;
|
||||
inherit opts;
|
||||
}
|
||||
) value
|
||||
);
|
||||
in
|
||||
{
|
||||
DEBUG_MODE = debugMode;
|
||||
create_commands = createCommands;
|
||||
inherit updatetime nowait;
|
||||
normal_keys = mkMaps normalKeys;
|
||||
insert_keys = mkMaps insertKeys;
|
||||
extend_keys = mkMaps extendKeys;
|
||||
hint_config = with hintConfig; {
|
||||
inherit
|
||||
type
|
||||
position
|
||||
offset
|
||||
border
|
||||
;
|
||||
show_name = showName;
|
||||
funcs = helpers.ifNonNull' funcs (mapAttrs (name: helpers.mkRaw) funcs);
|
||||
};
|
||||
generate_hints =
|
||||
genAttrs
|
||||
[
|
||||
"normal"
|
||||
"insert"
|
||||
"extend"
|
||||
]
|
||||
(
|
||||
mode:
|
||||
let
|
||||
value = generateHints.${mode};
|
||||
in
|
||||
helpers.ifNonNull' value (
|
||||
if isBool value then
|
||||
value
|
||||
else
|
||||
helpers.mkRaw ''
|
||||
[[
|
||||
${value}
|
||||
]]
|
||||
''
|
||||
)
|
||||
);
|
||||
}
|
||||
// extraOptions;
|
||||
in
|
||||
mkIf cfg.enable {
|
||||
extraPlugins = [ cfg.package ];
|
||||
|
||||
extraConfigLua = ''
|
||||
require("multicursors").setup(${helpers.toLuaObject setupOptions})
|
||||
'';
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue