diff --git a/docs/manual/configuring/custom-plugins/configuring.md b/docs/manual/configuring/custom-plugins/configuring.md index 5106d29b..c0935f03 100644 --- a/docs/manual/configuring/custom-plugins/configuring.md +++ b/docs/manual/configuring/custom-plugins/configuring.md @@ -67,7 +67,7 @@ of individual sections of configuration as needed. nvf provides helper functions in the extended library, usually under `inputs.nvf.lib.nvim.dag` that you may use. -Please refer to the [DAG section](#ch-dag-entries) in the nvf manual +Please refer to the [DAG section](/index.xhtml#ch-dag-entries) in the nvf manual to find out more about the DAG system. ::: diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index c84ef199..22bc0c43 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -2,25 +2,17 @@ ## Breaking changes -[Lspsaga documentation]: https://nvimdev.github.io/lspsaga/ - - `git-conflict` keybinds are now prefixed with `` to avoid conflicting with builtins. - `alpha` is now configured with nix, default config removed. -- Lspsaga module no longer ships default keybindings. The keybind format has - been changed by upstream, and old keybindings do not have equivalents under - the new API they provide. Please manually set your keybinds according to - [Lspsaga documentation] following the new API. - [NotAShelf](https://github.com/notashelf): [typst-preview.nvim]: https://github.com/chomosuke/typst-preview.nvim [render-markdown.nvim]: https://github.com/MeanderingProgrammer/render-markdown.nvim [yanky.nvim]: https://github.com/gbprod/yanky.nvim [yazi.nvim]: https://github.com/mikavilpas/yazi.nvim -[snacks.nvim]: https://github.com/folke/snacks.nvim - Add [typst-preview.nvim] under `languages.typst.extensions.typst-preview-nvim`. @@ -70,14 +62,6 @@ - Add [yazi.nvim] as a companion plugin for Yazi, the terminal file manager. -- Add [snacks.nvim] under `vim.utility.snacks-nvim` as a general-purpose utility - plugin. - -- Move LSPSaga to `setupOpts` format, allowing freeform configuration in - `vim.lsp.lspsaga.setupOpts`. - -- Lazyload Lspsaga and remove default keybindings for it. - [amadaluzia](https://github.com/amadaluzia): [haskell-tools.nvim]: https://github.com/MrcJkb/haskell-tools.nvim diff --git a/flake.lock b/flake.lock index 3ced812a..72912dee 100644 --- a/flake.lock +++ b/flake.lock @@ -38,11 +38,11 @@ }, "mnw": { "locked": { - "lastModified": 1742255973, - "narHash": "sha256-XfEGVKatTgEMMOVb4SNp1LYLQOSzzrFTDMVDTZFyMVE=", + "lastModified": 1741647548, + "narHash": "sha256-UqVAeOylufUGIx7BXSneFHD8eI6n0sVwEY2noFENnSE=", "owner": "Gerg-L", "repo": "mnw", - "rev": "b982dbd5e6d55d4438832b3567c09bc2a129649d", + "rev": "3fb89e600e26b91d1795cf8a1a34e11e084b4a04", "type": "github" }, "original": { diff --git a/modules/plugins/completion/blink-cmp/blink-cmp.nix b/modules/plugins/completion/blink-cmp/blink-cmp.nix index f5e38ed1..a2171552 100644 --- a/modules/plugins/completion/blink-cmp/blink-cmp.nix +++ b/modules/plugins/completion/blink-cmp/blink-cmp.nix @@ -1,6 +1,6 @@ {lib, ...}: let inherit (lib.options) mkEnableOption mkOption literalMD; - inherit (lib.types) bool listOf str either attrsOf submodule enum anything int nullOr; + inherit (lib.types) listOf str either attrsOf submodule enum anything int nullOr; inherit (lib.generators) mkLuaInline; inherit (lib.nvim.types) mkPluginSetupOption luaInline pluginType; inherit (lib.nvim.binds) mkMappingOption; @@ -64,12 +64,6 @@ in { default = []; description = "List of sources to enable for cmdline. Null means use default source list."; }; - - keymap = mkOption { - type = keymapType; - default = {}; - description = "blink.cmp cmdline keymap"; - }; }; completion = { @@ -81,16 +75,6 @@ in { description = "Delay before auto show triggers"; }; }; - - menu.auto_show = mkOption { - type = bool; - default = true; - description = '' - Manages the appearance of the completion menu. You may prevent the menu - from automatically showing by this option to `false` and manually showing - it with the show keymap command. - ''; - }; }; keymap = mkOption { @@ -120,25 +104,7 @@ in { fuzzy = { prebuilt_binaries = { download = mkBool false '' - Auto-downloads prebuilt binaries. - - ::: .{warning} - Do not enable this option, as it does **not work** on Nix! - ::: - ''; - }; - - implementation = mkOption { - type = enum ["lua" "prefer_rust" "rust" "prefer_rust_with_warning"]; - default = "prefer_rust"; - description = '' - fuzzy matcher implementation for Blink. - - * `"lua"`: slower, Lua native fuzzy matcher implementation - * `"rust": use the SIMD fuzzy matcher, 'frizbee' - * `"prefer_rust"`: use the rust implementation, but fall back to lua - * `"prefer_rust_with_warning"`: use the rust implementation, and fall back to lua - if it is not available after emitting a warning. + Auto-downloads prebuilt binaries. Do not enable, it doesn't work on nix ''; }; }; @@ -157,14 +123,12 @@ in { sourcePlugins = let sourcePluginType = submodule { options = { - enable = mkEnableOption "this source"; package = mkOption { type = pluginType; description = '' `blink-cmp` source plugin package. ''; }; - module = mkOption { type = str; description = '' @@ -173,6 +137,7 @@ in { Should be present in the source's documentation. ''; }; + enable = mkEnableOption "this source"; }; }; in diff --git a/modules/plugins/diagnostics/nvim-lint/config.nix b/modules/plugins/diagnostics/nvim-lint/config.nix index 49517f72..dac2c2f4 100644 --- a/modules/plugins/diagnostics/nvim-lint/config.nix +++ b/modules/plugins/diagnostics/nvim-lint/config.nix @@ -13,7 +13,7 @@ in { vim = { startPlugins = ["nvim-lint"]; pluginRC.nvim-lint = entryAnywhere '' - require("lint").linters_by_ft(${toLuaObject cfg.linters_by_ft}) + require("lint").setup(${toLuaObject cfg.setupOpts}) ''; }; }; diff --git a/modules/plugins/diagnostics/nvim-lint/nvim-lint.nix b/modules/plugins/diagnostics/nvim-lint/nvim-lint.nix index b08d82be..2211211e 100644 --- a/modules/plugins/diagnostics/nvim-lint/nvim-lint.nix +++ b/modules/plugins/diagnostics/nvim-lint/nvim-lint.nix @@ -1,25 +1,27 @@ {lib, ...}: let inherit (lib.options) mkOption mkEnableOption; inherit (lib.types) attrsOf listOf str; + inherit (lib.nvim.types) mkPluginSetupOption; in { options.vim.diagnostics.nvim-lint = { enable = mkEnableOption "asynchronous linter plugin for Neovim [nvim-lint]"; + setupOpts = mkPluginSetupOption "nvim-lint" { + linters_by_ft = mkOption { + type = attrsOf (listOf str); + default = {}; + example = { + text = ["vale"]; + markdown = ["vale"]; + }; - # nvim-lint does not have a setup table. - linters_by_ft = mkOption { - type = attrsOf (listOf str); - default = {}; - example = { - text = ["vale"]; - markdown = ["vale"]; + description = '' + Map of filetype to formatters. This option takes a set of + `key = value` format where the `value` will be converted + to its Lua equivalent. You are responsible for passing the + correct Nix data types to generate a correct Lua value that + conform is able to accept. + ''; }; - description = '' - Map of filetype to formatters. This option takes a set of `key = value` - format where the `value` will be converted to its Lua equivalent - through `toLuaObject. You are responsible for passing the correct Nix - data types to generate a correct Lua value that conform is able to - accept. - ''; }; }; } diff --git a/modules/plugins/lsp/lspsaga/config.nix b/modules/plugins/lsp/lspsaga/config.nix index 811d0178..3af6b7f1 100644 --- a/modules/plugins/lsp/lspsaga/config.nix +++ b/modules/plugins/lsp/lspsaga/config.nix @@ -3,24 +3,51 @@ lib, ... }: let - inherit (lib.modules) mkIf mkDefault; + inherit (lib.modules) mkIf mkMerge; + inherit (lib.strings) optionalString; + inherit (lib.nvim.dag) entryAnywhere; + inherit (lib.nvim.binds) addDescriptionsToMappings mkSetLuaBinding; cfg = config.vim.lsp; + self = import ./lspsaga.nix {inherit lib;}; + + mappingDefinitions = self.options.vim.lsp.lspsaga.mappings; + mappings = addDescriptionsToMappings cfg.lspsaga.mappings mappingDefinitions; in { config = mkIf (cfg.enable && cfg.lspsaga.enable) { vim = { - lazy.plugins.lspsaga-nvim = { - package = "lspsaga-nvim"; - setupModule = "lspsaga"; - inherit (cfg.lspsaga) setupOpts; + startPlugins = ["lspsaga-nvim"]; - event = ["LspAttach"]; + maps = { + visual = mkSetLuaBinding mappings.codeAction "require('lspsaga.codeaction').range_code_action"; + normal = mkMerge [ + (mkSetLuaBinding mappings.lspFinder "require('lspsaga.provider').lsp_finder") + (mkSetLuaBinding mappings.renderHoveredDoc "require('lspsaga.hover').render_hover_doc") + + (mkSetLuaBinding mappings.smartScrollUp "function() require('lspsaga.action').smart_scroll_with_saga(-1) end") + (mkSetLuaBinding mappings.smartScrollDown "function() require('lspsaga.action').smart_scroll_with_saga(1) end") + + (mkSetLuaBinding mappings.rename "require('lspsaga.rename').rename") + (mkSetLuaBinding mappings.previewDefinition "require('lspsaga.provider').preview_definition") + + (mkSetLuaBinding mappings.showLineDiagnostics "require('lspsaga.diagnostic').show_line_diagnostics") + (mkSetLuaBinding mappings.showCursorDiagnostics "require('lspsaga.diagnostic').show_cursor_diagnostics") + + (mkSetLuaBinding mappings.nextDiagnostic "require('lspsaga.diagnostic').navigate('next')") + (mkSetLuaBinding mappings.previousDiagnostic "require('lspsaga.diagnostic').navigate('prev')") + + (mkSetLuaBinding mappings.codeAction "require('lspsaga.codeaction').code_action") + (mkIf (!cfg.lspSignature.enable) (mkSetLuaBinding mappings.signatureHelp "require('lspsaga.signaturehelp').signature_help")) + ]; }; - # Optional dependencies, pretty useful to enhance default functionality of - # Lspsaga. - treesitter.enable = mkDefault true; - visuals.nvim-web-devicons.enable = mkDefault true; + pluginRC.lspsaga = entryAnywhere '' + require('lspsaga').init_lsp_saga({ + ${optionalString config.vim.ui.borders.plugins.lspsaga.enable '' + border_style = '${config.vim.ui.borders.plugins.lspsaga.style}', + ''} + }) + ''; }; }; } diff --git a/modules/plugins/lsp/lspsaga/lspsaga.nix b/modules/plugins/lsp/lspsaga/lspsaga.nix index 39ce6298..f308aaaa 100644 --- a/modules/plugins/lsp/lspsaga/lspsaga.nix +++ b/modules/plugins/lsp/lspsaga/lspsaga.nix @@ -1,32 +1,29 @@ -{ - config, - lib, - ... -}: let - inherit (lib.modules) mkRemovedOptionModule; - inherit (lib.options) mkOption mkEnableOption; - inherit (lib.nvim.types) borderType mkPluginSetupOption; +{lib, ...}: let + inherit (lib.options) mkEnableOption; + inherit (lib.nvim.binds) mkMappingOption; in { - imports = [ - (mkRemovedOptionModule ["vim" "lsp" "lspsaga" "mappings"] '' - Lspsaga mappings have been removed from nvf, as the original author has made - very drastic changes to the API after taking back ownership, and the fork we - used is now archived. Please refer to Lspsaga documentation to add keybinds - for functionality you have used. - - - '') - ]; - options.vim.lsp.lspsaga = { enable = mkEnableOption "LSP Saga"; - setupOpts = mkPluginSetupOption "lspsaga" { - border_style = mkOption { - type = borderType; - default = config.vim.ui.borders.globalStyle; - description = "Border type, see {command}`:help nvim_open_win`"; - }; + mappings = { + lspFinder = mkMappingOption "LSP Finder [LSPSaga]" "lf"; + renderHoveredDoc = mkMappingOption "Rendered hovered docs [LSPSaga]" "lh"; + + smartScrollUp = mkMappingOption "Smart scroll up [LSPSaga]" ""; + smartScrollDown = mkMappingOption "Smart scroll up [LSPSaga]" ""; + + rename = mkMappingOption "Rename [LSPSaga]" "lr"; + previewDefinition = mkMappingOption "Preview definition [LSPSaga]" "ld"; + + showLineDiagnostics = mkMappingOption "Show line diagnostics [LSPSaga]" "ll"; + showCursorDiagnostics = mkMappingOption "Show cursor diagnostics [LSPSaga]" "lc"; + + nextDiagnostic = mkMappingOption "Next diagnostic [LSPSaga]" "ln"; + previousDiagnostic = mkMappingOption "Previous diagnostic [LSPSaga]" "lp"; + + codeAction = mkMappingOption "Code action [LSPSaga]" "ca"; + + signatureHelp = mkMappingOption "Signature help [LSPSaga]" "ls"; }; }; } diff --git a/modules/plugins/minimap/minimap-vim/config.nix b/modules/plugins/minimap/minimap-vim/config.nix index a39b9590..5276a426 100644 --- a/modules/plugins/minimap/minimap-vim/config.nix +++ b/modules/plugins/minimap/minimap-vim/config.nix @@ -10,13 +10,13 @@ cfg = config.vim.minimap.minimap-vim; in { config = mkIf cfg.enable { - vim = { - startPlugins = ["minimap-vim"]; - extraPackages = [pkgs.code-minimap]; + vim.startPlugins = [ + pkgs.code-minimap + "minimap-vim" + ]; - binds.whichKey.register = pushDownDefault { - "m" = "+Minimap"; - }; + vim.binds.whichKey.register = pushDownDefault { + "m" = "+Minimap"; }; }; } diff --git a/modules/plugins/utility/default.nix b/modules/plugins/utility/default.nix index cbe776cc..a1574b97 100644 --- a/modules/plugins/utility/default.nix +++ b/modules/plugins/utility/default.nix @@ -17,7 +17,6 @@ ./nix-develop ./outline ./preview - ./snacks-nvim ./surround ./telescope ./wakatime diff --git a/modules/plugins/utility/snacks-nvim/config.nix b/modules/plugins/utility/snacks-nvim/config.nix deleted file mode 100644 index e726e3e2..00000000 --- a/modules/plugins/utility/snacks-nvim/config.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - config, - lib, - ... -}: let - inherit (lib.modules) mkIf; - inherit (lib.nvim.lua) toLuaObject; - inherit (lib.nvim.dag) entryAnywhere; - - cfg = config.vim.utility.snacks-nvim; -in { - config = mkIf cfg.enable { - vim = { - startPlugins = ["snacks-nvim"]; - pluginRC.snacks-nvim = entryAnywhere '' - require("snacks").setup(${toLuaObject cfg.setupOpts}); - ''; - }; - }; -} diff --git a/modules/plugins/utility/snacks-nvim/default.nix b/modules/plugins/utility/snacks-nvim/default.nix deleted file mode 100644 index 8a712baa..00000000 --- a/modules/plugins/utility/snacks-nvim/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./config.nix - ./snacks-nvim.nix - ]; -} diff --git a/modules/plugins/utility/snacks-nvim/snacks-nvim.nix b/modules/plugins/utility/snacks-nvim/snacks-nvim.nix deleted file mode 100644 index 30fd6f89..00000000 --- a/modules/plugins/utility/snacks-nvim/snacks-nvim.nix +++ /dev/null @@ -1,12 +0,0 @@ -{lib, ...}: let - inherit (lib.options) mkEnableOption; - inherit (lib.nvim.types) mkPluginSetupOption; -in { - options.vim.utility.snacks-nvim = { - enable = mkEnableOption '' - collection of QoL plugins for Neovim [snacks-nvim] - ''; - - setupOpts = mkPluginSetupOption "snacks-nvim" {}; - }; -} diff --git a/modules/wrapper/build/config.nix b/modules/wrapper/build/config.nix index 3c778169..d145f798 100644 --- a/modules/wrapper/build/config.nix +++ b/modules/wrapper/build/config.nix @@ -6,8 +6,9 @@ ... }: let inherit (pkgs) vimPlugins; - inherit (lib.trivial) flip; - inherit (builtins) path filter isString; + inherit (lib.strings) isString; + inherit (lib.lists) filter map; + inherit (builtins) path; getPin = name: ((pkgs.callPackages ../../../npins/sources.nix {}) // config.vim.pluginOverrides).${name}; @@ -75,6 +76,13 @@ buildConfigPlugins config.vim.optPlugins ); + # additional Lua and Python3 packages, mapped to their respective functions + # to conform to the format mnw expects. end user should + # only ever need to pass a list of packages, which are modified + # here + extraLuaPackages = ps: map (x: ps.${x}) config.vim.luaPackages; + extraPython3Packages = ps: map (x: ps.${x}) config.vim.python3Packages; + # Wrap the user's desired (unwrapped) Neovim package with arguments that'll be used to # generate a wrapped Neovim package. neovim-wrapped = inputs.mnw.lib.wrap pkgs { @@ -84,17 +92,9 @@ extraBinPath = config.vim.extraPackages; initLua = config.vim.builtLuaConfigRC; luaFiles = config.vim.extraLuaFiles; - providers = { - python3 = { - enable = config.vim.withPython3; - extraPackages = ps: map (flip builtins.getAttr ps) config.vim.python3Packages; - }; - ruby.enable = config.vim.withRuby; - nodeJs.enable = config.vim.withNodeJs; - }; - aliases = lib.optional config.vim.viAlias "vi" ++ lib.optional config.vim.vimAlias "vim"; - extraLuaPackages = ps: map (flip builtins.getAttr ps) config.vim.luaPackages; + inherit (config.vim) viAlias vimAlias withRuby withNodeJs withPython3; + inherit extraLuaPackages extraPython3Packages; }; dummyInit = pkgs.writeText "nvf-init.lua" config.vim.builtLuaConfigRC; diff --git a/npins/sources.json b/npins/sources.json index 91c3f68e..54256514 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -717,13 +717,13 @@ "type": "Git", "repository": { "type": "GitHub", - "owner": "nvimdev", + "owner": "tami5", "repo": "lspsaga.nvim" }, "branch": "main", - "revision": "6063935cf68de9aa6dd79f8e1caf5df0a9385de3", - "url": "https://github.com/nvimdev/lspsaga.nvim/archive/6063935cf68de9aa6dd79f8e1caf5df0a9385de3.tar.gz", - "hash": "1pqasjg2f2yd3ci8hyxfqqs7xnkmwdc411dlm6qg1agiv1h8v205" + "revision": "5faeec9f2508d2d49a66c0ac0d191096b4e3fa81", + "url": "https://github.com/tami5/lspsaga.nvim/archive/5faeec9f2508d2d49a66c0ac0d191096b4e3fa81.tar.gz", + "hash": "1bw71db69na2sriv9q167z9bgkir4nwny1bdfv9z606bmng4hhzc" }, "lua-utils-nvim": { "type": "Git", @@ -1989,19 +1989,16 @@ "hash": "0k1xnyvblshn4fhbxgl0i34j22n55xlwr09sdmb23l57br5rb07q" }, "snacks-nvim": { - "type": "GitRelease", + "type": "Git", "repository": { "type": "GitHub", "owner": "folke", "repo": "snacks.nvim" }, - "pre_releases": false, - "version_upper_bound": null, - "release_prefix": null, - "version": "v2.22.0", - "revision": "5eac729fa290248acfe10916d92a5ed5e5c0f9ed", - "url": "https://api.github.com/repos/folke/snacks.nvim/tarball/v2.22.0", - "hash": "1hbm4fnw51qdp0nz83fcxbvnxjq2k57a37w6dp0wz6wkcx7cwxw9" + "branch": "main", + "revision": "bc0630e43be5699bb94dadc302c0d21615421d93", + "url": "https://github.com/folke/snacks.nvim/archive/bc0630e43be5699bb94dadc302c0d21615421d93.tar.gz", + "hash": "0a5nw7xa33shag1h12gf930g3vcixbwk8dxv0ji4980ycskh238v" }, "sqls-nvim": { "type": "Git", @@ -2221,4 +2218,4 @@ } }, "version": 3 -} \ No newline at end of file +}