Compare commits

..

28 commits

Author SHA1 Message Date
Ching Pei Yang
86f594a1ce
Merge 887144f896 into 7a8b95cf7c 2024-10-06 13:36:14 +00:00
Ching Pei Yang
887144f896
fixup! fidget: lazy load 2024-10-06 15:17:28 +02:00
Ching Pei Yang
d5b5c5294c
fixup! toggleterm: lazy load 2024-10-06 15:16:34 +02:00
Ching Pei Yang
9a56cc3b8f
fixup! trouble: lazy load 2024-10-06 15:16:34 +02:00
Ching Pei Yang
e6df7c6aa7
fixup! lib.binds: add lz.n variant of bind functions 2024-10-06 15:16:34 +02:00
Ching Pei Yang
2f281cf07a
fidget: lazy load 2024-10-06 15:16:34 +02:00
Ching Pei Yang
9a47b6f83d
leap: lazy load 2024-10-06 15:16:34 +02:00
Ching Pei Yang
a17b1e0fa7
icon-picker: lazy load 2024-10-06 15:16:33 +02:00
Ching Pei Yang
e764f1fdf5
diffview: lazy load 2024-10-06 15:16:33 +02:00
Ching Pei Yang
ebc5426b78
cheatsheet: lazy load 2024-10-06 15:16:33 +02:00
Ching Pei Yang
fcf185fd23
toggleterm: lazy load 2024-10-06 15:16:33 +02:00
Ching Pei Yang
beb9d99e24
trouble: lazy load 2024-10-06 15:16:33 +02:00
Ching Pei Yang
8cbe4ac3a8
dapui: lazy load 2024-10-06 15:16:33 +02:00
Ching Pei Yang
40984ca347
nvim-tree: lazy load 2024-10-06 15:16:33 +02:00
Ching Pei Yang
34ffdaedcd telescope: lazy load 2024-10-06 14:50:07 +02:00
Ching Pei Yang
74f7367355 lib.binds: add lz.n variant of bind functions 2024-10-06 14:50:07 +02:00
Ching Pei Yang
e177e5f1c3 wrapper: fix opt plugin format 2024-10-06 14:50:07 +02:00
Ching Pei Yang
ae5d39227c lzn-auto-require: add init lua code 2024-10-06 14:50:07 +02:00
Ching Pei Yang
ea0ee39687 lazy: init module 2024-10-06 14:50:07 +02:00
Ching Pei Yang
6ede63c170 flake: add lz.n and lzn-auto-require 2024-10-06 14:50:07 +02:00
diniamo
7a8b95cf7c
Surround setupopts (#402)
* surround: fix keymaps

* surround: make description multi-line
2024-10-06 14:35:07 +03:00
Ching Pei Yang
b637f921d5
maps: allow same key on multiple mode (#360)
* mappings: add new keymap option

* mappings: impl keymap option

* doc: update release notes

* map: fix misinformation

* map: remove redundant variable

* fixup! mappings: impl keymap option
2024-10-06 11:23:01 +02:00
649f5513f9
flake.lock: Update
Flake lock file updates:

• Updated input 'plugin-catppuccin':
    'github:catppuccin/nvim/5215ea59df6d0a7e27da9a5cd1165e06d1b04cbe' (2024-05-26)
  → 'github:catppuccin/nvim/7be452ee067978cdc8b2c5f3411f0c71ffa612b9' (2024-10-05)
2024-10-06 02:41:05 +03:00
raf
18ae3e1f6c
Merge branch 'main' into v0.7 2024-10-05 23:40:48 +00:00
614ad33a60
meta: add changelog reminder to the pull request template
Some checks failed
Set up binary cache / cachix (default) (push) Has been cancelled
Set up binary cache / cachix (maximal) (push) Has been cancelled
Set up binary cache / cachix (nix) (push) Has been cancelled
Validate flake & check documentation / Validate Flake Documentation (docs) (push) Has been cancelled
Validate flake & check documentation / Validate Flake Documentation (docs-html) (push) Has been cancelled
Validate flake & check documentation / Validate Flake Documentation (docs-json) (push) Has been cancelled
Validate flake & check documentation / Validate Flake Documentation (docs-manpages) (push) Has been cancelled
Validate flake & check formatting / Validate Flake (push) Has been cancelled
Validate flake & check formatting / Formatting via Alejandra (push) Has been cancelled
Build and deploy documentation / Check latest commit (push) Has been cancelled
Build and deploy documentation / publish (push) Has been cancelled
2024-10-06 01:46:59 +03:00
fdd0642c7d
docs: update 0.7 release notes 2024-10-06 01:40:02 +03:00
379d2a9f16
meta: improve github pull request template 2024-10-06 01:39:58 +03:00
Charlie Root
f01e404b2e
languages/elixir.nix: fix elixir-tools setup (#401) 2024-10-06 00:56:33 +03:00
11 changed files with 117 additions and 357 deletions

View file

@ -1,39 +1,57 @@
# Description <!--
^ Please include a clear and concise description of the aim of your Pull Request above this line ^
A clear and concise description of the aim of your Pull Request. For plugin dependency/module additions, please make sure to link the source link of the added plugin
or dependency in this section.
**If your pull request aims to fix an open issue or a present bug, please link the relevant issue below. If not, please remove this section** If your pull request aims to fix an open issue or a please bug, please also link the relevant issue
Fixes #(issue) below this line. You may attach an issue to your pull request with `Fixes #<issue number>` outside
this comment.
-->
## Type of change ## Sanity Checking
Please delete any options that are not relevant. <!--
Please check all that apply. As before, this section is not a hard requirement but checklists with more checked
items are likely to be merged faster. You may save some time in maintainer review by performing self-reviews here
before submitting your pull request.
- Bug fix (non-breaking change which fixes an issue) If your pull request includes any change or unexpected behaviour not covered below, please do make sure to include
- New feature (non-breaking change which adds functionality) it above in your description.
- Breaking change (fix or feature that would cause existing functionality to not work as expected) -->
- Translation/Language update
- Docs
- Other
## Checklist [editorconfig]: https://editorconfig.org
[changelog]: https://github.com/NotAShelf/nvf/tree/main/docs/release-notes
Please try to check at least a majority of the checklist before opening your pull request. Exceptions to this will be reviewed on a case by case basis. - [ ] I have updated the [changelog] as per my changes.
- [ ] I have tested, and self-reviewed my code.
- Style and consistency
- [ ] I ran **Alejandra** to format my code (`nix fmt`).
- [ ] My code conforms to the [editorconfig] configuration of the project.
- [ ] My changes are consistent with the rest of the codebase.
- If new changes are particularly complex:
- [ ] My code includes comments in particularly complex areas
- [ ] I have added a section in the manual.
- [ ] _(For breaking changes)_ I have included a migration guide.
- Package(s) built:
- [ ] `.#nix` (default package)
- [ ] `.#maximal`
- [ ] `.#docs-html`
- Tested on platform(s)
- [ ] `x86_64-linux`
- [ ] `aarch64-linux`
- [ ] `x86_64-darwin`
- [ ] `aarch64-darwin`
- [ ] My code follows the style and contributing guidelines of this project. <!--
- [ ] I ran Alejandra to format my code (`nix fmt`). If your changes touch upon a portion of the codebase that you do not understand well, please make sure to consult
- [ ] I have performed a self-review of my own code and tested it. the maintainers on your changes. In most cases, making an issue before creating your PR will help you avoid duplicate
- [ ] I have commented my code, particularly in hard-to-understand areas. efforts in the long run.
- [ ] My changes generate no new warnings. -->
- [ ] This change requires a documentation update.
- [ ] I have updated the documentation accordingly.
## Screenshots & Logs ---
You are kindly requested to attach screenshots of your changes in actions and preferably your build/run logs for all available packages. If you are not sure how to do this, you can refer to the [documentation](https://notashelf.github.io/neovim-flake/). Add a :+1: [reaction] to [pull requests you find important].
**Please do not use any external image service. Instead, just paste in or drag and drop the image here, and it will be uploaded automatically.** [reaction]: https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/
[pull requests you find important]: https://github.com/NixOS/nixpkgs/pulls?q=is%3Aopen+sort%3Areactions-%2B1-desc
```console
# Paste your logs here
```

View file

@ -115,7 +115,8 @@ everyone.
- Add [new-file-template.nvim] to automatically fill new file contents using - Add [new-file-template.nvim] to automatically fill new file contents using
templates templates
- Make [neo-tree.nvim] display file icons properly by enabling `visuals.nvimWebDevicons` - Make [neo-tree.nvim] display file icons properly by enabling
`visuals.nvimWebDevicons`
[diniamo](https://github.com/diniamo): [diniamo](https://github.com/diniamo):
@ -149,6 +150,8 @@ everyone.
- Replace `vim.lsp.nvimCodeActionMenu` with `vim.ui.fastaction`, see the - Replace `vim.lsp.nvimCodeActionMenu` with `vim.ui.fastaction`, see the
breaking changes section above for more details breaking changes section above for more details
- Add a `setupOpts` option to nvim-surround, which allows modifying options that aren't defined in nvf. Move the alternate nvim-surround keybinds to use `setupOpts`.
[Neovim documentation on `vim.cmd`]: https://neovim.io/doc/user/lua.html#vim.cmd() [Neovim documentation on `vim.cmd`]: https://neovim.io/doc/user/lua.html#vim.cmd()
- Make Neovim's configuration file entirely Lua based. This comes with a few - Make Neovim's configuration file entirely Lua based. This comes with a few
@ -234,13 +237,15 @@ everyone.
- Fixed `project-nvim` command and keybinding - Fixed `project-nvim` command and keybinding
- Added default ikeybind/command for `Telescope resume` (`<leader>fr`) - Added default ikeybind/command for `Telescope resume` (`<leader>fr`)
[Soliprem](https://github.com/Soliprem) [Soliprem](https://github.com/Soliprem):
- Add LSP and Treesitter support for R under `vim.languages.R`. - Add LSP and Treesitter support for R under `vim.languages.R`.
- Add Otter support under `vim.lsp.otter` and an assert to prevent conflict with - Add Otter support under `vim.lsp.otter` and an assert to prevent conflict with
ccc ccc
[Bloxx12](https://github.com/Bloxx12) [Bloxx12](https://github.com/Bloxx12)
- Add support for [base16 theming](https://github.com/RRethy/base16-nvim) under - Add support for [base16 theming](https://github.com/RRethy/base16-nvim) under
`vim.theme` `vim.theme`
- Fix internal breakage in `elixir-tools` setup.

6
flake.lock generated
View file

@ -207,11 +207,11 @@
"plugin-catppuccin": { "plugin-catppuccin": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1716704960, "lastModified": 1728131011,
"narHash": "sha256-UDPS+1o8FQGkfqiG4GX4DNUI2pU5hIvagmfnWTKDb44=", "narHash": "sha256-j6F078taxuGzr3jngrc+Pc5I1kDdxTLMETgq6Xn4w/4=",
"owner": "catppuccin", "owner": "catppuccin",
"repo": "nvim", "repo": "nvim",
"rev": "5215ea59df6d0a7e27da9a5cd1165e06d1b04cbe", "rev": "7be452ee067978cdc8b2c5f3411f0c71ffa612b9",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -6,7 +6,7 @@
inherit (lib.options) mkOption; inherit (lib.options) mkOption;
inherit (lib.attrsets) attrNames mapAttrs' filterAttrs nameValuePair; inherit (lib.attrsets) attrNames mapAttrs' filterAttrs nameValuePair;
inherit (lib.strings) hasPrefix removePrefix; inherit (lib.strings) hasPrefix removePrefix;
inherit (lib.types) submodule either package enum str lines attrsOf anything listOf nullOr oneOf bool int; inherit (lib.types) submodule either package enum str lines attrsOf anything listOf nullOr;
# Get the names of all flake inputs that start with the given prefix. # Get the names of all flake inputs that start with the given prefix.
fromInputs = { fromInputs = {
@ -53,190 +53,6 @@
}; };
borderPresets = ["none" "single" "double" "rounded" "solid" "shadow"]; borderPresets = ["none" "single" "double" "rounded" "solid" "shadow"];
luaInline = lib.mkOptionType {
name = "luaInline";
check = x: lib.nvim.lua.isLuaInline x;
};
lznKeysSpec = submodule {
options = {
desc = mkOption {
description = "Description of the key map";
type = nullOr str;
default = null;
};
noremap = mkOption {
description = "TBD";
type = bool;
default = false;
};
expr = mkOption {
description = "TBD";
type = bool;
default = false;
};
nowait = mkOption {
description = "TBD";
type = bool;
default = false;
};
ft = mkOption {
description = "TBD";
type = nullOr (listOf str);
default = null;
};
key = mkOption {
type = str;
description = "Key to bind to";
};
action = mkOption {
type = nullOr str;
default = null;
description = "Action to trigger.";
};
lua = mkOption {
type = bool;
default = false;
description = "If true the action is treated as a lua function instead of a vim command.";
};
mode = mkOption {
description = "Modes to bind in";
type = listOf str;
default = ["n" "x" "s" "o"];
};
};
};
lznPluginTableType = attrsOf lznPluginType;
lznPluginType = submodule {
options = {
## Should probably infer from the actual plugin somehow
## In general this is the name passed to packadd, so the dir name of the plugin
# name = mkOption {
# type= str;
# }
# Non-lz.n options
package = mkOption {
type = pluginType;
description = "Plugin package";
};
setupModule = mkOption {
type = nullOr str;
description = "Lua module to run setup function on.";
default = null;
};
setupOpts = mkOption {
type = submodule {freeformType = attrsOf anything;};
description = "Options to pass to the setup function";
default = {};
};
# lz.n options
enabled = mkOption {
type = nullOr (either bool str);
description = "When false, or if the lua function returns false, this plugin will not be included in the spec";
default = null;
};
beforeAll = mkOption {
type = nullOr str;
description = "Lua code to run before any plugins are loaded. This will be wrapped in a function.";
default = null;
};
before = mkOption {
type = nullOr str;
description = "Lua code to run before plugin is loaded. This will be wrapped in a function.";
default = null;
};
after = mkOption {
type = nullOr str;
description = "Lua code to run after plugin is loaded. This will be wrapped in a function.";
default = null;
};
event = mkOption {
description = "Lazy-load on event";
default = null;
type = let
event = submodule {
options = {
event = mkOption {
type = nullOr (either str (listOf str));
description = "Exact event name";
example = "BufEnter";
};
pattern = mkOption {
type = nullOr (either str (listOf str));
description = "Event pattern";
example = "BufEnter *.lua";
};
};
};
in
nullOr (oneOf [str (listOf str) event]);
};
cmd = mkOption {
description = "Lazy-load on command";
default = null;
type = nullOr (either str (listOf str));
};
ft = mkOption {
description = "Lazy-load on filetype";
default = null;
type = nullOr (either str (listOf str));
};
keys = mkOption {
description = "Lazy-load on key mapping";
default = null;
type = nullOr (oneOf [str (listOf lznKeysSpec) (listOf str)]);
example = ''
keys = [
{lhs = "<leader>s"; rhs = ":NvimTreeToggle<cr>"; desc = "Toggle NvimTree"}
]
'';
};
colorscheme = mkOption {
description = "Lazy-load on colorscheme.";
type = nullOr (either str (listOf str));
default = null;
};
priority = mkOption {
type = nullOr int;
description = "Only useful for stat plugins (not lazy-loaded) to force loading certain plugins first.";
default = null;
};
load = mkOption {
type = nullOr str;
default = null;
description = ''
Lua code to override the `vim.g.lz_n.load()` function for a single plugin.
This will be wrapped in a function
'';
};
};
};
in { in {
inherit extraPluginType fromInputs pluginType; inherit extraPluginType fromInputs pluginType;

View file

@ -19,22 +19,20 @@ in {
"<leader>t" = "+NvimTree"; "<leader>t" = "+NvimTree";
}; };
vim.lazy = { vim.lazy.plugins = [
plugins = [ {
{ package = "nvim-tree-lua";
package = "nvim-tree-lua"; setupModule = "nvim-tree";
setupModule = "nvim-tree"; inherit (cfg) setupOpts;
inherit (cfg) setupOpts; cmd = ["NvimTreeClipboard" "NvimTreeClose" "NvimTreeCollapse" "NvimTreeCollapseKeepBuffers" "NvimTreeFindFile" "NvimTreeFindFileToggle" "NvimTreeFocus" "NvimTreeHiTest" "NvimTreeOpen" "NvimTreeRefresh" "NvimTreeResize" "NvimTreeToggle"];
cmd = ["NvimTreeClipboard" "NvimTreeClose" "NvimTreeCollapse" "NvimTreeCollapseKeepBuffers" "NvimTreeFindFile" "NvimTreeFindFileToggle" "NvimTreeFocus" "NvimTreeHiTest" "NvimTreeOpen" "NvimTreeRefresh" "NvimTreeResize" "NvimTreeToggle"]; keys = [
keys = [ (mkLznBinding ["n"] cfg.mappings.toggle ":NvimTreeToggle<cr>" mappings.toggle.description)
(mkLznBinding ["n"] cfg.mappings.toggle ":NvimTreeToggle<cr>" mappings.toggle.description) (mkLznBinding ["n"] cfg.mappings.refresh ":NvimTreeRefresh<cr>" mappings.refresh.description)
(mkLznBinding ["n"] cfg.mappings.refresh ":NvimTreeRefresh<cr>" mappings.refresh.description) (mkLznBinding ["n"] cfg.mappings.findFile ":NvimTreeFindFile<cr>" mappings.findFile.description)
(mkLznBinding ["n"] cfg.mappings.findFile ":NvimTreeFindFile<cr>" mappings.findFile.description) (mkLznBinding ["n"] cfg.mappings.focus ":NvimTreeFocus<cr>" mappings.focus.description)
(mkLznBinding ["n"] cfg.mappings.focus ":NvimTreeFocus<cr>" mappings.focus.description) ];
]; }
} ];
];
};
vim.pluginRC.nvimtreelua = entryAnywhere '' vim.pluginRC.nvimtreelua = entryAnywhere ''
${ ${
@ -47,7 +45,7 @@ in {
${ ${
optionalString cfg.openOnSetup '' optionalString cfg.openOnSetup ''
require('lz.n').trigger_load("nvim-tree-lua") ${optionalString config.vim.lazy.enable ''require('lz.n').trigger_load("nvim-tree-lua")''}
-- autostart behaviour -- autostart behaviour
-- Open on startup has been deprecated -- Open on startup has been deprecated
-- see https://github.com/nvim-tree/nvim-tree.lua/wiki/Open-At-Startup -- see https://github.com/nvim-tree/nvim-tree.lua/wiki/Open-At-Startup

View file

@ -114,12 +114,12 @@ in {
(mkIf cfg.elixir-tools.enable { (mkIf cfg.elixir-tools.enable {
vim.startPlugins = ["elixir-tools"]; vim.startPlugins = ["elixir-tools"];
vim.pluginRC.elixir-tools = entryAnywhere '' vim.pluginRC.elixir-tools = entryAnywhere ''
local elixir-tools = require("elixir") local elixir = require("elixir")
local elixirls = require("elixir-tools.elixirls") local elixirls = require("elixir.elixirls")
-- disable imperative insstallations of various -- disable imperative insstallations of various
-- elixir related tools installed by elixir-tools -- elixir related tools installed by elixir-tools
elixir-tools.setup { elixir.setup {
nextls = { nextls = {
enable = false -- defaults to false enable = false -- defaults to false
}, },

View file

@ -7,7 +7,7 @@ in {
trouble = { trouble = {
enable = mkEnableOption "trouble diagnostics viewer"; enable = mkEnableOption "trouble diagnostics viewer";
setupOpts = mkPluginSetupOption "Telescope" {}; setupOpts = mkPluginSetupOption "Trouble" {};
mappings = { mappings = {
toggle = mkMappingOption "Toggle trouble [trouble]" "<leader>xx"; toggle = mkMappingOption "Toggle trouble [trouble]" "<leader>xx";

View file

@ -10,6 +10,7 @@
inherit (lib.nvim.binds) mkLznBinding; inherit (lib.nvim.binds) mkLznBinding;
cfg = config.vim.terminal.toggleterm; cfg = config.vim.terminal.toggleterm;
lazygitMapDesc = "Open lazygit [toggleterm]";
in { in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
vim = { vim = {
@ -19,7 +20,10 @@ in {
cmd = ["ToggleTerm" "ToggleTermSendCurrentLine" "ToggleTermSendVisualLines" "ToggleTermSendVisualSelection" "ToggleTermSetName" "ToggleTermToggleAll"]; cmd = ["ToggleTerm" "ToggleTermSendCurrentLine" "ToggleTermSendVisualLines" "ToggleTermSendVisualSelection" "ToggleTermSetName" "ToggleTermToggleAll"];
keys = [ keys = [
(mkLznBinding ["n"] cfg.mappings.open "<Cmd>execute v:count . \"ToggleTerm\"<CR>" "Toggle terminal") (mkLznBinding ["n"] cfg.mappings.open "<Cmd>execute v:count . \"ToggleTerm\"<CR>" "Toggle terminal")
{key = cfg.lazygit.mappings.open;} {
key = cfg.lazygit.mappings.open;
desc = lazygitMapDesc;
}
]; ];
setupModule = "toggleterm"; setupModule = "toggleterm";
@ -39,7 +43,7 @@ in {
end end
}) })
vim.keymap.set('n', ${toJSON cfg.lazygit.mappings.open}, function() lazygit:toggle() end, {silent = true, noremap = true, desc = 'Open lazygit [toggleterm]'}) vim.keymap.set('n', ${toJSON cfg.lazygit.mappings.open}, function() lazygit:toggle() end, {silent = true, noremap = true, desc = '${lazygitMapDesc}'})
''; '';
} }
]; ];

View file

@ -3,42 +3,29 @@
lib, lib,
... ...
}: let }: let
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf;
inherit (lib.nvim.binds) addDescriptionsToMappings mkSetBinding;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
inherit (lib.nvim.lua) toLuaObject;
cfg = config.vim.utility.surround; cfg = config.vim.utility.surround;
self = import ./surround.nix {inherit lib config;};
mappingDefinitions = self.options.vim.utility.surround.mappings;
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
in { in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
vim = { vim = {
startPlugins = [ startPlugins = ["nvim-surround"];
"nvim-surround" pluginRC.surround = entryAnywhere "require('nvim-surround').setup(${toLuaObject cfg.setupOpts})";
];
pluginRC.surround = entryAnywhere '' utility.surround.setupOpts.keymaps = mkIf cfg.useVendoredKeybindings {
require('nvim-surround').setup() insert = "<C-g>z";
''; insert_line = "<C-g>Z";
normal = "gz";
maps = { normal_cur = "gZ";
insert = mkMerge [ normal_line = "gzz";
(mkIf (mappings.insert != null) (mkSetBinding mappings.insert "<Plug>(nvim-surround-insert)")) normal_cur_line = "gZZ";
(mkIf (mappings.insertLine != null) (mkSetBinding mappings.insertLine "<Plug>(nvim-surround-insert-line)")) visual = "gz";
]; visual_line = "gZ";
normal = mkMerge [ delete = "gzd";
(mkIf (mappings.normal != null) (mkSetBinding mappings.normal "<Plug>(nvim-surround-normal)")) change = "gzr";
(mkIf (mappings.normalCur != null) (mkSetBinding mappings.normalCur "<Plug>(nvim-surround-normal-cur)")) change_line = "gZR";
(mkIf (mappings.normalLine != null) (mkSetBinding mappings.normalLine "<Plug>(nvim-surround-normal-line)"))
(mkIf (mappings.normalCurLine != null) (mkSetBinding mappings.normalCurLine "<Plug>(nvim-surround-normal-cur-line)"))
(mkIf (mappings.delete != null) (mkSetBinding mappings.delete "<Plug>(nvim-surround-delete)"))
(mkIf (mappings.change != null) (mkSetBinding mappings.change "<Plug>(nvim-surround-change)"))
];
visualOnly = mkMerge [
(mkIf (mappings.visual != null) (mkSetBinding mappings.visual "<Plug>(nvim-surround-visual)"))
(mkIf (mappings.visualLine != null) (mkSetBinding mappings.visualLine "<Plug>(nvim-surround-visual-line)"))
];
}; };
}; };
}; };

View file

@ -1,90 +1,24 @@
{ {lib, ...}: let
lib,
config,
...
}: let
inherit (lib.modules) mkIf mkDefault;
inherit (lib.options) mkOption; inherit (lib.options) mkOption;
inherit (lib.types) bool nullOr str; inherit (lib.types) bool;
inherit (lib.nvim.types) mkPluginSetupOption;
in { in {
options.vim.utility.surround = { options.vim.utility.surround = {
enable = mkOption { enable = mkOption {
type = bool; type = bool;
default = false; default = false;
description = "nvim-surround: add/change/delete surrounding delimiter pairs with ease. Note that the default mappings deviate from upstreeam to avoid conflicts with nvim-leap."; description = ''
nvim-surround: add/change/delete surrounding delimiter pairs with ease.
Note that the default mappings deviate from upstreeam to avoid conflicts
with nvim-leap.
'';
}; };
setupOpts = mkPluginSetupOption "nvim-surround" {};
useVendoredKeybindings = mkOption { useVendoredKeybindings = mkOption {
type = bool; type = bool;
default = true; default = true;
description = "Use alternative set of keybindings that avoids conflicts with other popular plugins, e.g. nvim-leap"; description = "Use alternative set of keybindings that avoids conflicts with other popular plugins, e.g. nvim-leap";
}; };
mappings = {
insert = mkOption {
type = nullOr str;
default = "<C-g>z";
description = "Add surround character around the cursor";
};
insertLine = mkOption {
type = nullOr str;
default = "<C-g>Z";
description = "Add surround character around the cursor on new lines";
};
normal = mkOption {
type = nullOr str;
default = "gz";
description = "Surround motion with character";
};
normalCur = mkOption {
type = nullOr str;
default = "gZ";
description = "Surround motion with character on new lines";
};
normalLine = mkOption {
type = nullOr str;
default = "gzz";
description = "Surround line with character";
};
normalCurLine = mkOption {
type = nullOr str;
default = "gZZ";
description = "Surround line with character on new lines";
};
visual = mkOption {
type = nullOr str;
default = "gz";
description = "Surround selection with character";
};
visualLine = mkOption {
type = nullOr str;
default = "gZ";
description = "Surround selection with character on new lines";
};
delete = mkOption {
type = nullOr str;
default = "gzd";
description = "Delete surrounding character";
};
change = mkOption {
type = nullOr str;
default = "gzr";
description = "Change surrounding character";
};
};
};
config.vim.utility.surround = let
cfg = config.vim.utility.surround;
in {
mappings = mkIf (! cfg.useVendoredKeybindings) (mkDefault {
insert = null;
insertLine = null;
normal = null;
normalCur = null;
normalLine = null;
normalCurLine = null;
visual = null;
visualLine = null;
delete = null;
change = null;
});
}; };
} }

View file

@ -8,15 +8,13 @@
cfg = config.vim.visuals.fidget-nvim; cfg = config.vim.visuals.fidget-nvim;
in { in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
vim.lazy = { vim.lazy.plugins = [
plugins = [ {
{ package = "fidget-nvim";
package = "fidget-nvim"; setupModule = "fidget";
setupModule = "fidget"; event = "LspAttach";
event = "LspAttach"; inherit (cfg) setupOpts;
inherit (cfg) setupOpts; }
} ];
];
};
}; };
} }